feat(web-shell): show time on parallel-agents box and sub-agent tools#5084
Conversation
The message-time-on-hover feature (#5079) wraps each transcript message with MessageTimestamp, but two sub-agent surfaces were left out and so looked inconsistent with the rest of the transcript: - The "Parallel agents · N/N done" box (ParallelAgentsGroup) renders directly in MessageList, bypassing MessageItem/MessageTimestamp, so it showed no time. Carry the first grouped launch's timestamp onto the parallel_agents display item and wrap the box in MessageTimestamp. - Each sub-tool row inside a SubAgentPanel's Tools list showed no time. Wrap each row in a scoped hover tooltip (.toolTimeRow/.toolTimeTip, kept separate from MessageTimestamp's .row/.tip so the nested tooltip stays independent of the enclosing message's) keyed off the tool's startTime. Both reuse formatTimestamp for an identical HH:mm:ss (or dated) format revealed on hover in the top-right corner, matching the main transcript.
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
@wenshao Thanks for the contribution! The code changes look focused, but the PR body is missing several required sections from the PR template:
## Why it's needed— the "What" section describes the change, but there's no motivation. Why do users care about hover timestamps on these specific sub-agent surfaces?## Reviewer Test Plan— includingHow to verify,Evidence (Before & After), and theTested onOS table. This is the section maintainers rely on to confirm the change works.## Risk & Scope— even low-risk PRs benefit from stating what's out of scope.## Linked Issues— reference the parent issue or the prior PR (#5079) this follows up on.
Please update the PR body to follow the template so reviewers can evaluate efficiently. Happy to re-review once that's in place.
中文说明
@wenshao 感谢贡献!代码改动本身很聚焦,但 PR 正文缺少 PR 模板 中的几个必填章节:
## Why it's needed— "What" 描述了改了什么,但没有动机说明。用户为什么需要在这些子代理界面上看到 hover 时间?## Reviewer Test Plan— 包括How to verify、Evidence (Before & After)和Tested on操作系统表格。这是维护者确认改动有效的关键依据。## Risk & Scope— 即使风险很低,说明不在范围内的内容也有帮助。## Linked Issues— 关联相关 issue 或前序 PR (#5079)。
请按照模板更新 PR 正文,方便审查。更新后我会重新审查。
— Qwen Code · qwen3.7-max
|
Thanks for the review! Updated the PR body to follow the template:
Ready for re-review. 中文感谢 review!已按模板补全 PR 正文:
可以重新审查了。 |
|
@qwen-code /triage |
|
Thanks for the PR! Template looks good ✓ — all required sections present with bilingual translation. On direction: this is a clean follow-up to #5079. Two sub-agent surfaces bypass On approach: scope is tight and appropriate. Wrapping Moving on to code review. 🔍 中文说明感谢 PR! 模板完整 ✓ — 所有必填段落及中文翻译齐全。 方向:这是 #5079 的合理后续。两个子代理界面绕过了 方案:范围紧凑合理。用现有的 进入代码审查 🔍 — Qwen Code · qwen3.7-max |
Code ReviewNo blockers. The implementation is straightforward and well-structured:
TestingThis is a web-shell (browser) UI change — hover tooltips render in a browser, not the terminal. Tmux CLI testing is not applicable. Unit tests — all pass: Browser verification — per PR author: verified with Playwright/chromium against a live daemon session. Hover on parallel-agents box shows 中文说明代码审查无阻塞问题。实现简洁且结构良好:
测试验证这是 web-shell(浏览器)UI 变更——hover 浮层在浏览器中渲染,不在终端中。Tmux CLI 测试不适用。 单元测试 — 全部通过:20/20 浏览器验证 — 据 PR 作者:使用 Playwright/chromium 连接真实 daemon 会话验证。hover 并行智能体外框显示 — Qwen Code · qwen3.7-max |
ReflectionThis is a clean, minimal follow-up to #5079. The problem is real (two sub-agent surfaces lacked hover timestamps), the solution is obvious (reuse My independent proposal matched the PR's approach exactly — I'd have done the same thing. The scoped The prior Approving. ✅ 中文说明反思这是一个干净、最小化的 #5079 后续。问题是真实的(两个子代理界面缺少 hover 时间戳),方案是显而易见的(能复用 我的独立方案与 PR 的做法完全一致——我也会这样做。作用域隔离的 之前的 批准 ✅ — Qwen Code · qwen3.7-max |
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
LGTM, looks ready to ship. ✅
Code Coverage Summary
CLI Package - Full Text ReportCore Package - Full Text ReportFor detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run. |
…#5084) The message-time-on-hover feature (#5079) wraps each transcript message with MessageTimestamp, but two sub-agent surfaces were left out and so looked inconsistent with the rest of the transcript: - The "Parallel agents · N/N done" box (ParallelAgentsGroup) renders directly in MessageList, bypassing MessageItem/MessageTimestamp, so it showed no time. Carry the first grouped launch's timestamp onto the parallel_agents display item and wrap the box in MessageTimestamp. - Each sub-tool row inside a SubAgentPanel's Tools list showed no time. Wrap each row in a scoped hover tooltip (.toolTimeRow/.toolTimeTip, kept separate from MessageTimestamp's .row/.tip so the nested tooltip stays independent of the enclosing message's) keyed off the tool's startTime. Both reuse formatTimestamp for an identical HH:mm:ss (or dated) format revealed on hover in the top-right corner, matching the main transcript.
What this PR does
Two sub-agent surfaces were missing the per-message hover timestamp added in #5079, leaving them inconsistent with the rest of the transcript. This adds it to both: the parallel-agents box (
Parallel agents · N/N done) and each sub-tool row inside a sub-agent panel's Tools list now reveal their wall-clock time on hover in the top-right corner, exactly like a regular transcript message.Why it's needed
#5079 shipped per-message hover timestamps so users can tell when each step happened — useful when scanning a long or resumed session. But it only covered content routed through
MessageItem. Two sub-agent views bypass that path and were left with no time at all: a multi-agent run collapses into a singleParallelAgentsGroupbox rendered directly inMessageList, and a sub-agent's individual tool calls render insideSubAgentPanelinstead of as standalone messages. A user inspecting what a (parallel) sub-agent did, and when, had no timestamp on either surface — that is the inconsistency this PR removes.Reviewer Test Plan
How to verify
Parallel agents · N/N donebox appears) and/or a sub-agent that made tool calls.Expected: each surface shows
HH:mm:ss(oryyyy-MM-dd HH:mm:ssfor older entries) on hover, top-right; the non-hover state shows nothing; a row without a start time renders unchanged (no empty wrapper).Evidence (Before & After)
Before — hovering the
Parallel agents · N/N donebox shows no time; hovering a sub-tool row in a sub-agent's Tools list shows no time.After — verified in a real browser (Playwright/chromium) against a live daemon session: hovering the parallel-agents box reveals
2026-06-13 19:05:27top-right (computedopacity: 1,visibility: visible, not clipped by the surroundingoverflowcontainers); hovering aReadFilesub-tool row reveals23:46:16top-right; both coexist with the enclosing message's own time tooltip (they use independent class pairs, confirmed on-screen together).Tested on
Environment (optional)
Local
vitedev server (web-shell, port 5173) against a running daemon session; unit tests viavitest; real-browser hover checks via Playwright/chromium. Windows/Linux rely on CI (unit tests only; the hover behavior is plain CSS with no platform-specific code).Risk & Scope
formatTimestamp+MessageTimestamp; sub-tool rows use a scoped.toolTimeRow/.toolTimeTipclass pair, deliberately separate fromMessageTimestamp's.row/.tipso the nested tooltip never couples to the enclosing message's.rawOutput.toolCalls(TaskToolCall) carry no time field, so those rows intentionally stay timeless; Windows/Linux hover not manually verified (CSS-only, covered by CI unit tests).Linked Issues
Follow-up to #5079 (message-time-on-hover); no issue to auto-close.
中文说明
这个 PR 做了什么
有两个子代理界面没有应用 #5079 引入的逐条消息 hover 时间戳,和其余对话不一致。本 PR 给两者都补上:并行智能体外框(
并行智能体 · N/N 完成)和子代理面板 Tools 列表里的每个子工具行,现在都会在 hover 时于右上角显示其挂钟时间,与普通对话消息完全一致。为什么需要
#5079 上线了逐条消息的 hover 时间戳,让用户知道每一步发生的时间——在浏览长会话或恢复的会话时很有用。但它只覆盖了走
MessageItem渲染的内容。有两个子代理界面绕过了这条路径、完全没有时间:多个并行子代理会被折叠成一个直接在MessageList里渲染的ParallelAgentsGroup外框;而子代理自身的工具调用渲染在SubAgentPanel内部,而非独立消息。用户想查看一个(并行)子代理在什么时间做了什么时,这两处都没有时间——这正是本 PR 消除的不一致。审查测试计划
如何验证
并行智能体 · N/N 完成外框)且/或有工具调用的子代理的会话。预期:每个界面在 hover 时于右上角显示
HH:mm:ss(较早的为yyyy-MM-dd HH:mm:ss);非 hover 状态不显示;没有开始时间的行保持原样(不产生空壳包裹)。证据(前 & 后)
前——hover
并行智能体 · N/N 完成外框不显示时间;hover 子代理 Tools 列表里的子工具行不显示时间。后——在真实浏览器(Playwright/chromium)连真实 daemon 会话验证:hover 并行智能体外框,右上角显示
2026-06-13 19:05:27(computedopacity: 1、visibility: visible,未被周围overflow容器裁剪);hoverReadFile子工具行,右上角显示23:46:16;两者与外层消息自身的时间浮层共存(使用各自独立的类,已在屏幕上同时确认)。测试平台
环境(可选)
本地
vitedev server(web-shell,端口 5173)连运行中的 daemon 会话;单测用vitest;真实浏览器 hover 检查用 Playwright/chromium。Windows/Linux 依赖 CI(仅单测;hover 行为是纯 CSS,无平台相关代码)。风险与范围
formatTimestamp+MessageTimestamp;子工具行使用作用域隔离的.toolTimeRow/.toolTimeTip类对,刻意与MessageTimestamp的.row/.tip分开,使嵌套浮层绝不与外层消息耦合。rawOutput.toolCalls(TaskToolCall)回放的子工具调用结构里没有时间字段,因此那些行有意保持无时间;Windows/Linux 的 hover 未手动验证(纯 CSS,由 CI 单测覆盖)。关联 Issue
#5079(消息 hover 时间)的后续;无需自动关闭的 issue。