hailin
b7814d42a9
fix: resolve 3 timeline UI bugs (blank start, spinner style, tool status)
...
1. 任务开始时空白状态:当 agent streaming 启动但尚无 assistant
响应时,在时间线末尾插入虚拟 "处理中..." 节点(带脉动 * 动画),
避免用户发送 prompt 后界面无任何反馈。
(chat_page.dart: _needsWorkingNode + ListView itemCount+1)
2. * 动画从旋转改为脉动:_SpinnerDot 由 Transform.rotate 改为
Transform.scale(0.6x↔1.2x 缩放 + 透明度 0.6↔1.0 呼吸),
duration 从 1000ms 降至 800ms 并启用 reverse,视觉效果类似
星星闪烁而非机械旋转。
(timeline_event_node.dart: _SpinnerDotState)
3. 工具执行完成后状态卡在 spinner:ToolResultEvent 到达时仅创建
新 toolResult 消息,未回溯更新对应 toolUse 消息的 ToolStatus,
导致时间线上工具节点永远显示 executing spinner。修复:在
ToolResultEvent handler 中向前查找最近的 executing 状态的
toolUse 消息,将其 status 更新为 completed/error。
(chat_providers.dart: ToolResultEvent case)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 18:13:30 -08:00
hailin
20325a84bd
feat: redesign chat UI from bubble style to timeline workflow
...
Replace traditional chat bubble layout with a Claude Code-inspired
timeline/workflow design:
- Vertical gray line connecting sequential event nodes
- Colored dots for each event (green=done, red=error, yellow=warning)
- Animated spinning asterisk (*) on active nodes
- Streaming text with blinking cursor in timeline nodes
- Tool execution shown as code blocks within timeline
- User prompts as distinct nodes with person icon
New file: timeline_event_node.dart (TimelineEventNode, CodeBlock)
Rewritten: chat_page.dart (timeline layout, no more bubbles)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 17:33:42 -08:00
hailin
dfc541b571
feat: add Markdown rendering and phone-call voice entry to chat UI
...
Chat message rendering:
- MessageBubble: replace plain SelectableText with MarkdownBody for
assistant messages, with full dark-theme stylesheet (headers, code
blocks, tables, blockquotes, list bullets)
- StreamTextWidget: render completed messages as MarkdownBody, keep
plain-text + blinking cursor for actively streaming messages
Voice interaction redesign:
- Remove all long-press-to-record code (~100 lines): AudioRecorder,
SpeechEnhancer, mic pulse animation, voice indicator bar,
SingleTickerProviderStateMixin
- Add phone-call button in AppBar (Icons.call) that navigates to the
existing AgentCallPage for full-duplex voice conversation
- Add prominent "语音通话" entry button on empty chat state
- AgentCallPage was already fully implemented (ringing → connecting →
active → ended, dual-direction WebSocket audio, GTCRN denoise,
Kokoro TTS playback, waveform visualization) but previously unused
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 07:31:40 -08:00
hailin
00f8801d51
Initial commit: IT0 AI-powered server cluster operations platform
...
Full-stack monorepo with DDD + Clean Architecture:
- Backend: 7 NestJS microservices + 5 shared libraries (TypeScript)
- Mobile: Flutter app with Riverpod (Dart)
- Web Admin: Next.js dashboard with Zustand + React Query
- Voice: Python voice service (STT/TTS/VAD)
- Infra: Docker Compose, K8s manifests, Turborepo build
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 22:54:37 -08:00