From c6efdaa13f9d24c34d1386ec1d23f7ac86f3ecce Mon Sep 17 00:00:00 2001 From: m4 Date: Thu, 30 Jul 2026 11:11:33 +0800 Subject: [PATCH] docs(webui): thinking-timer design for the chat message area Co-Authored-By: Claude Opus 4.7 --- .../specs/2026-07-30-thinking-timer-design.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/superpowers/specs/2026-07-30-thinking-timer-design.md diff --git a/docs/superpowers/specs/2026-07-30-thinking-timer-design.md b/docs/superpowers/specs/2026-07-30-thinking-timer-design.md new file mode 100644 index 0000000..7de1092 --- /dev/null +++ b/docs/superpowers/specs/2026-07-30-thinking-timer-design.md @@ -0,0 +1,31 @@ +# 思考中计时器(ThinkingTimer)设计 + +日期:2026-07-30 +状态:已批准 + +## 背景与目标 + +发消息后到 run 结束之间,消息区没有任何"对话仍在进行"的提示,用户不确定 +系统是在思考还是卡死。在消息区底部加一个计时指示:`● 思考中… 0:12`。 + +非目标:不改 Stop 按钮;不做首 token 检测;不持久化计时。 + +## 方案 + +新增 `ThinkingTimer` 组件(`EvoScientist-WebUI/src/app/components/ChatInterface.tsx`, +与 `GenerationParamSlider` 等页面内组件同级): + +- **挂载即计时**:`useEffect` 记录挂载时间,`setInterval` 每秒更新已逝秒数; + 卸载清除 interval。父级 `{isLoading && }` 控制—— + isLoading 翻 true 时挂载归零,结束/停止/报错时卸载。无父级状态。 +- **显示**:脉冲圆点(`size-2 animate-pulse rounded-full`,品牌色)+ + `思考中…` + `m:ss` 计时(分钟可超 59,如 `74:03`)。 +- **位置**:消息滚动区底部、最后一条消息组之后(随内容滚动), + `text-xs text-muted-foreground`,`role="status"`。 +- **行为**:整个运行期间显示(含流式输出、工具调用、子代理);interrupt + (审批询问)时 isLoading 翻 false,计时器自然消失,恢复后重新计时。 + +## 测试 + +项目无组件测试设施:tsc + 全量 vitest + 浏览器手测(发消息 → 计时器出现、 +每秒走字 → 结束消失;Stop → 消失)。