Skip to content

feat(cli): Add agent view roster UI - #7803

Open
ZijianZhang989 wants to merge 153 commits into
agent/agent-view-commandsfrom
agent/agent-view-roster-ui
Open

feat(cli): Add agent view roster UI#7803
ZijianZhang989 wants to merge 153 commits into
agent/agent-view-commandsfrom
agent/agent-view-roster-ui

Conversation

@ZijianZhang989

@ZijianZhang989 ZijianZhang989 commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Stack position: 5/5. Parent: #7802.

This final stacked PR adds the Agent View roster TUI. It displays managed background sessions in Needs input, Working, and Completed groups, supports filtering, peek, attach, follow-up replies, blocking answers, pin, rename, stop/remove confirmation, shortcut help, subscription refresh, and managed resume picker integration.

Why it's needed

Agent View is meant to be operated as a multi-session workspace rather than only as individual commands. The roster gives users a single interactive surface for monitoring background tasks, answering sessions that need input, attaching to live workers, and cleaning up completed work.

Reviewer Test Plan

How to verify

  • Run npm run build; the repository should build successfully.
  • Run cd packages/cli && npx vitest run src/agent-view --coverage.enabled=false; all Agent View unit tests should pass.
  • Run cd packages/cli && npx vitest run src/ui/agent-view/AgentViewApp.test.tsx src/ui/agent-view/roster-model.test.ts --coverage.enabled=false; these roster model and app tests should pass.
  • Manually verify qwen agents: background sessions appear in the roster, Space opens peek, Enter/Right attaches, Ctrl+X first stops and shows the remove hint, Ctrl+X again within the hint removes, and prompt input remains usable after transient hints close.

Evidence (Before & After)

TUI behavior was manually exercised during development; no fresh screenshot or tmux capture is attached in this PR body.

Tested on

OS Status
🍏 macOS
🪟 Windows ⚠️
🐧 Linux ⚠️

Environment (optional)

macOS, Node.js v26.2.0. Local verification required reinstalling current workspace dependencies and applying the existing Ink patch to local node_modules.

Risk & Scope

  • Main risk or tradeoff: This PR adds a dense TUI with keyboard interactions, so regressions are most likely around focus, transient hints, attach/peek mode switching, and refresh timing.
  • Not validated / out of scope: Fresh cross-platform manual TUI validation is not included in this final pass.
  • Breaking changes / migration notes: No existing TUI flow is removed; Agent View roster behavior is additive.

Linked Issues

Refs #6383

中文说明

此 PR 的内容

堆栈位置:5/5。父 PR:#7802

这个最终 stacked PR 增加 Agent View roster TUI。它以 Needs input、Working 和 Completed 分组展示托管后台 session,支持过滤、peek、attach、follow-up reply、blocking answer、pin、rename、stop/remove 确认、快捷键帮助、订阅刷新,以及托管 resume picker 集成。

为什么需要

Agent View 的目标是作为多 session 工作区使用,而不是只通过单个命令操作。roster 给用户一个统一的交互界面,用于监控后台任务、回答需要输入的 session、attach 到 live worker,以及清理完成的工作。

评审者测试计划

如何验证

  • 运行 npm run build;仓库应成功构建。
  • 运行 cd packages/cli && npx vitest run src/agent-view --coverage.enabled=false;全部 Agent View 单元测试应通过。
  • 运行 cd packages/cli && npx vitest run src/ui/agent-view/AgentViewApp.test.tsx src/ui/agent-view/roster-model.test.ts --coverage.enabled=false;这些 roster model 和 app 测试应通过。
  • 手动验证 qwen agents:后台 session 会出现在 roster 中,Space 打开 peek,Enter/Right attach,第一次 Ctrl+X stop 并显示 remove hint,hint 期间再次 Ctrl+X remove,并且 transient hint 关闭后 prompt input 仍可输入。

证据(变更前后)

开发期间已手动验证 TUI 行为;此 PR body 未附加新的截图或 tmux capture。

测试平台

操作系统 状态
🍏 macOS
🪟 Windows ⚠️
🐧 Linux ⚠️

环境(可选)

macOS,Node.js v26.2.0。本地验证前需要补齐当前 workspace 依赖,并把仓库已有 Ink patch 应用到本地 node_modules

风险与范围

  • 主要风险或权衡:这个 PR 增加键盘交互密集的 TUI,因此回归最可能出现在焦点、临时提示、attach/peek 模式切换和刷新时序上。
  • 未验证或范围外:最终这一轮没有附加新的跨平台手动 TUI 验证。
  • 破坏性变更或迁移说明:没有移除现有 TUI 流程;Agent View roster 行为是增量增加。

关联 Issue

关联 #6383

@ZijianZhang989
ZijianZhang989 force-pushed the agent/agent-view-commands branch from 262cd8b to e127eaf Compare July 27, 2026 05:08
@ZijianZhang989
ZijianZhang989 force-pushed the agent/agent-view-roster-ui branch from f70f85b to f3efafe Compare July 27, 2026 05:08
@github-actions

Copy link
Copy Markdown
Contributor

Please do not rebase or force-push to an active PR as it invalidates existing review comments. Note for future reference, the bots always squash all changes into a single commit automatically as part of the integration.

中文

请勿对活跃的 PR 执行 rebase 或 force-push,因为这会使已有的评审评论失效。另外,供日后参考:作为集成流程的一部分,机器人始终会自动将所有改动压缩(squash)为单个提交。

@ZijianZhang989
ZijianZhang989 force-pushed the agent/agent-view-roster-ui branch from f3efafe to fff0a6d Compare July 27, 2026 05:32
@ZijianZhang989
ZijianZhang989 force-pushed the agent/agent-view-commands branch from e127eaf to cddb16b Compare July 27, 2026 05:32
@ZijianZhang989
ZijianZhang989 marked this pull request as ready for review July 28, 2026 02:30
@qwen-code-ci-bot

qwen-code-ci-bot commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Qwen Triage finishedview run. See the stage comments in this thread for the result.

Qwen Triage 已完成 —— 查看运行。结果见本线程中的各阶段评论。

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Qwen Code review did not complete successfully. Run review failed. See workflow logs for details. A transient error is retried automatically; if you are seeing this, retry with @qwen-code /review. See workflow logs.

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Thanks for the PR — this is the capstone (5/5) of the Agent View stack, adding the roster TUI on top of agent/agent-view-commands.

  • Template: complete ✓ (all required headings, bilingual body).
  • Problem: a real feature, not theoretical hardening — the roster is the interactive surface that makes the background-session machinery from the earlier stack PRs operable (Refs Agent View for managing background sessions #6383). The motivation is clear.
  • Direction: aligned. Multi-session / background-agent management is a legitimate direction for an agent CLI, and this is the planned capstone of an in-progress stack rather than a drive-by addition. The qwen agents command itself was introduced earlier in the stack; this PR is the UI.
  • Size: not a core-module change — every file lives under packages/cli/src/ui/**, so the two-tier core gate doesn't apply. It is a large PR though: roughly 2927 production lines vs ~2407 test lines (5334 total across 20 files). The 1000+ advisory would normally suggest splitting, but this is already delivered as a 5-PR stack, so the breadth is deliberate — informational only, not a blocker.
  • Approach: the three-layer split (pure roster-model → stateful AgentViewApp → presentational AgentViewRoster) is the right shape and keeps the dense keyboard logic testable. One thing worth a thought: a sizable chunk of this "roster UI" PR is actually worker-side wiring in AppContainer.tsx (state reporting, control-event polling, detach keybindings) — necessary so sessions are visible and controllable from the roster, but it's more than the title suggests. Not a blocker; just flagging that the review surface is wider than "a new TUI".

Moving on to code review. 🔍

中文说明

感谢贡献 —— 这是 Agent View 堆栈的最终 PR(5/5),在 agent/agent-view-commands 之上增加 roster TUI。

  • 模板:完整 ✓(必需标题齐全,含中文正文)。
  • 问题:真实功能,而非理论性加固 —— roster 是让前面几个堆栈 PR 的后台 session 机制可操作的交互界面(关联 Agent View for managing background sessions #6383),动机清晰。
  • 方向:对齐。多 session / 后台 agent 管理对 agent CLI 是合理方向,且这是一个进行中堆栈的计划收尾,而非顺手添加。qwen agents 命令本身在堆栈早期已引入,本 PR 是 UI。
  • 规模:非核心模块改动 —— 所有文件都在 packages/cli/src/ui/** 下,因此两层核心门禁不适用。但 PR 较大:约 2927 生产行 vs ~2407 测试行(20 个文件共 5334 行)。1000+ 大 PR 建议通常应拆分,但这里已通过 5-PR 堆栈交付,广度是刻意的 —— 仅作提示,不阻塞。
  • 方案:三层拆分(纯 roster-model → 有状态 AgentViewApp → 展示层 AgentViewRoster)结构合理,使密集的键盘逻辑可测试。一点值得注意:这个"roster UI" PR 中相当一部分其实是 AppContainer.tsx 里的 worker 侧 接线(状态上报、控制事件轮询、detach 快捷键)—— 这是让 session 能从 roster 被看到和控制所必需的,但超出了标题所示。不阻塞;只是提示评审面比"一个新 TUI"更宽。

进入代码审查 🔍

Qwen Code · qwen3.8-max-preview

Reviewed at fff0a6de3d61479883978227481c769f10049b35 · re-run with @qwen-code /triage

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Code review

My independent take before reading the diff: a roster for background sessions wants three layers — a pure model mapping session-state files to display rows (group / sort / filter), a stateful container owning the actions (dispatch, peek, attach, pin, rename, stop/remove) plus refresh, and a presentational Ink component holding the keymap — reusing the existing prompt primitives (BaseTextInput, useCommandCompletion, useTextBuffer) and the existing SessionPicker for resume. That's essentially what's here, and the reuse is good: the roster prompt is built on the same text-buffer/completion stack, and resume integration extends SessionPicker/useSessionPicker rather than forking them.

No correctness bugs, security holes, or regressions jumped out. The dense keyboard logic in AgentViewRoster is careful (focus-event stripping, return-prefix handling, in-flight guards), and the stop→remove confirmation in AgentViewApp is correctly timed with cleanup. A few non-blocking notes for the maintainer:

  • StandaloneSessionPicker raw-mode restore changed — from "restore only on cancel" to "always restore if this picker enabled it". This touches the standard qwen --resume hand-off, and the test delta there is thin (~8 lines). It's explained by the Agent View Ink-app handoff, but it's the one shared-path change I'd want exercised by a real run before it reaches main.
  • KeypressContext focus-event handling is a genuine, well-tested improvement: the new FOCUS_EVENT_PATTERN filters sequences made purely of focus events while preserving a real key bundled with a focus event (a\x1b[I). The added test covers exactly that.
  • Minor: createAgentViewCommandContext drives completion with config: null / {} as LoadedSettings stubs (fine for completion-only); isAgentViewManagedSession narrows to the same type (harmless); there are two clearScreen implementations with intentionally different reset sequences.

The worker↔roster interaction this PR wires up (state out, control events in) looks like this:

sequenceDiagram
    participant P1 as User
    participant P2 as Roster TUI (qwen agents)
    participant P3 as Sideband state files
    participant P4 as Worker session (AppContainer)
    P4->>P3: report state (idle, working, needs_input, stopped)
    P3-->>P2: read and subscribe to rows
    P1->>P2: answer, stop, prompt, or attach
    P2->>P3: write control event
    P4->>P3: poll control events every 250ms
    P4->>P4: apply event (enqueue prompt, cancel, confirm tool, detach)
Loading
Files changed (20 of 20 shown)
File What changed
packages/cli/src/ui/agent-view/AgentViewRoster.tsx New presentational roster: keymap, sections, peek box, prompt input
packages/cli/src/ui/agent-view/AgentViewApp.tsx New stateful container: dispatch, peek, attach, pin, rename, stop/remove, refresh
packages/cli/src/ui/agent-view/roster-model.ts New pure model: rows, grouping, sort, filter, duration formatting
packages/cli/src/ui/AppContainer.tsx Worker-side sideband: state reporting, control-event polling, detach keys, roster relaunch
packages/cli/src/ui/components/SessionPicker.tsx Merge agent-view sessions, managed-session preview, wider onSelect
packages/cli/src/ui/hooks/useSessionPicker.ts extraSessions/excludeSessionIds, session merge, pass session to onSelect
packages/cli/src/ui/components/StandaloneSessionPicker.tsx Return full session item, raw-mode restore change, terminal reset
packages/cli/src/ui/hooks/useResumeCommand.ts Worker/managed resume guards, project-session fallback
packages/cli/src/ui/commands/resumeCommand.ts Same guards plus project-session existence check
packages/cli/src/ui/contexts/KeypressContext.tsx Focus-event regex filter (preserves bundled real keys)
packages/cli/src/ui/components/DialogManager.tsx Include agent-view sessions in resume dialog
*.test.ts(x) (9 files) New/updated tests: roster-model, AgentViewApp, AgentViewRoster, AppContainer, pickers, keypress

Test evidence

This is a stacked PR targeting the feature branch agent/agent-view-commands, and ci.yml only triggers its pull_request suite for main / release/** — so the build/test/lint/typecheck suite does not run on this commit, by design. That is not a defect of the PR; the merge queue validates the merged tree when the stack lands in main. The consequence for this review: the unit tests cited in the test plan (src/agent-view, AgentViewApp.test.tsx, roster-model.test.ts) are authored and substantial (~2407 test lines) but not verified by CI on this commit, and I did not execute them here (the review is static). The only checks present are bot orchestration jobs; the single failure (review-pr) is a transient bot error ("review did not complete successfully"), unrelated to the PR's correctness.

The roster is a user-visible TUI, and the author has write access (non-fork branch), so the isolated real-scenario lanes are available: a maintainer can trigger @qwen-code /tmux to drive qwen agents as a real user (peek/attach/stop-remove/prompt) before the stack merges.

Check Conclusion
Qwen Code CI (build / test / lint / typecheck) not triggered — base is feature branch agent/agent-view-commands, outside the main/release/** filter
🧐 Qwen Pull Request Review (review-pr) failure — transient bot error, not a PR defect
Qwen Triage in progress
PR self-report label / Force-Push Reminder success
中文说明

代码审查:独立设想与 PR 基本一致 —— 三层结构(纯 model / 有状态容器 / 展示层),并良好复用了现有 prompt 原语与 SessionPicker。未发现正确性 bug、安全漏洞或回归。密集键盘逻辑谨慎,stop→remove 确认时序正确。几个非阻塞点:StandaloneSessionPicker 的 raw-mode 恢复改动触及标准 qwen --resume 流程且测试较薄,建议进 main 前真实跑一遍;KeypressContext 焦点事件正则是一个有测试的真实改进;其余为小的类型/重复实现注意点。

测试证据:这是面向功能分支 agent/agent-view-commands 的堆栈 PR,而 ci.yml 仅对 main/release/** 触发 pull_request 套件 —— 因此本提交按设计不运行 build/test/lint/typecheck。这不是 PR 缺陷;合并队列会在堆栈进入 main 时校验。对本评审而言:测试计划中的单测已编写且充分(约 2407 测试行),但本提交未经 CI 验证,此处也未执行(静态评审)。唯一存在的检查是机器人编排任务;唯一的 failure(review-pr)是机器人瞬时错误,与 PR 正确性无关。roster 是用户可见 TUI,且作者有写权限(非 fork),维护者可触发 @qwen-code /tmux 在合并前以真实用户方式驱动 qwen agents

Qwen Code · qwen3.8-max-preview

Reviewed at fff0a6de3d61479883978227481c769f10049b35 · re-run with @qwen-code /triage

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 3/5 — the code review is clean (this is 4/5-quality work), but the feature direction still needs a maintainer's sign-off, so I'm deferring rather than approving.

Stepping back: the implementation is genuinely good. The three-layer split (pure roster-model → stateful AgentViewApp → presentational AgentViewRoster) is exactly the shape a dense TUI wants, it reuses the existing prompt and picker primitives instead of forking them, and the test coverage is substantial (~2407 test lines). I found no correctness, security, or regression blockers across a full read of the diff. If the only question were "is the code good?", I'd approve.

Two things keep me from approving, and both are judgment calls a maintainer is better placed to make than a gate:

  1. Direction is still open. The tracking RFC (Agent View for managing background sessions #6383) still carries need-discussion, and the stack's foundation PR (the daemon / IPC / persistence / auth layer) was already deferred to a maintainer for design sign-off on this same feature. Auto-approving the capstone UI ahead of that sign-off would presume a product-direction decision — a new user-facing qwen agents surface plus worker-sideband wiring into the central AppContainer — that isn't mine to make. The code being clean doesn't settle whether the project wants this shape.
  2. No CI ran on this commit. ci.yml gates its pull_request suite to main/release/**, so this feature-branch base gets no build/test/lint run by design. The authored tests are therefore unverified by CI here, and I did not execute them (static review only). The merge queue is the real gate for main.

Neither is a code defect — they're "should this ship, in this shape, now" questions. The @qwen-code /tmux lane is available (author has write access) for exercising the roster before the stack merges.

⏸️ Deferring to @wenshao — clean, well-tested code, but the Agent View direction (#6383 still need-discussion) and the already-deferred foundation PR warrant a human call before the capstone is approved into the stack.

中文说明

置信度:3/5 —— 代码审查干净(这是 4/5 质量的工作),但功能方向仍需 maintainer 签字,因此我选择转交而非批准。

退一步看:实现确实好。三层拆分(纯 roster-model → 有状态 AgentViewApp → 展示层 AgentViewRoster)正是密集 TUI 想要的形态,复用了现有 prompt 与 picker 原语而非另起炉灶,测试覆盖充分(约 2407 测试行)。通读完整 diff 未发现正确性、安全或回归阻塞。如果唯一问题是"代码好不好",我会批准。

有两点让我不批准,且都是 maintainer 比 gate 更适合判断的取舍:

  1. 方向仍未定。 跟踪 RFC(Agent View for managing background sessions #6383)仍带 need-discussion,且本堆栈的基础 PR(daemon / IPC / 持久化 / 认证层)已就同一功能转交 maintainer 做设计签字。在该签字之前自动批准收尾 UI,等于替项目做了一个产品方向决定 —— 一个新的用户可见 qwen agents 界面,加上接入中心 AppContainer 的 worker 侧接线 —— 这不该由我来做。代码干净并不能解决"项目是否想要这个形态"。
  2. 本提交未跑 CI。 ci.yml 仅对 main/release/** 触发 pull_request 套件,因此这个功能分支 base 按设计没有 build/test/lint。所编写的测试在此未经 CI 验证,我也未执行(仅静态审查)。合并队列才是 main 的真正门禁。

两者都不是代码缺陷 —— 而是"现在是否该以这个形态发布"的问题。@qwen-code /tmux 通道可用(作者有写权限),可在堆栈合并前演练 roster。

⏸️ 转交 @wenshao —— 代码干净、测试充分,但 Agent View 方向(#6383need-discussion)以及已被转交的基础 PR,需要人工判断后再批准收尾 PR 进入堆栈。

Qwen Code · qwen3.8-max-preview

Reviewed at fff0a6de3d61479883978227481c769f10049b35 · re-run with @qwen-code /triage

俊良 and others added 13 commits July 28, 2026 14:37
# Conflicts:
#	packages/cli/src/ui/AppContainer.tsx
#	packages/cli/src/ui/commands/resumeCommand.test.ts
#	packages/cli/src/ui/commands/resumeCommand.ts
- Narrow AgentViewSupervisorSubscriptionOptions to omit timeoutMs,
  which the subscription never reads
- Throw when DEV=true with a .ts entrypoint but tsx is missing,
  instead of silently spawning a process that will crash
- Add test for the qwen fallback path when argv[1] is undefined
- Add test for worker sideband auth bypass (workerEvent without token)

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially reviewed — gaps disclosed.

Not explored to full depth (tool budget reached): chunk 12: run AgentViewRoster.test.tsx under vitest to confirm green — the shared review worktree (and the parent checkout) has no node_modules , and a full npm ci (….

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 3.

Test Plan (not a blocker): npm run buildexit 1.

Deferred under the convergence posture (round 7, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/commands/agents.ts:285 — [review] isNotManagedPeekError regex-couples to supervisor error prose
  • packages/cli/src/commands/agents.ts:148 — [review] title cache wiped per change event → O(N × 64–256KB) sync IO
  • packages/cli/src/commands/agents.ts:513 — [review] header model resolution diverges from the authoritative resolver
  • packages/cli/src/startup/agent-view-resume-guard.ts:83 — [probe] delete guard allow path untested (mutation survives)
  • packages/cli/src/ui/AppContainer.tsx:2229 — [review] agentViewLastResult O(history) copy every render
  • packages/cli/src/ui/AppContainer.tsx:5089 — [review] argv-build failure swallowed without diagnostics
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:975 — [probe] dangling '·' footer separator
  • packages/cli/src/ui/components/SessionPicker.tsx:293 — [review] managed-session selection interception untested
  • packages/cli/src/ui/AppContainer.tsx:2885 — [review] control poll loop + prompt/stop branches untested
  • packages/cli/src/ui/AppContainer.test.tsx:6716 — [probe] idle-gate test vacuous for the new predicate
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:268 — [review] attach-mode dispatch branch untested
  • packages/cli/src/commands/agents.ts:445 — [review] non-TTY text output drops displayName/title
  • packages/cli/src/ui/hooks/useResumeCommand.ts:103 — [test] worker-block branch untested (inline mock not hoisted; efficacy inert)
  • packages/cli/src/commands/agents.ts:74 — [review] dispatchPrompt attach parameter is dead
  • packages/cli/src/commands/agents.test.ts:490 — [review] subscribeToChanges behavior untested
  • packages/cli/src/ui/AppContainer.tsx:277 — [review] EMPTY_TOOL_CALLS dead default + misleading comment
  • packages/cli/src/ui/agent-view/AgentViewApp.test.tsx:205 — [review] submitPeekPrompt refresh hardening untested
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:213 — [review] Home/End test never presses End
  • packages/cli/src/ui/components/SessionPicker.tsx:230 — [probe] agentViewMeta wraps past the itemHeight budget
  • packages/cli/src/commands/agents.ts:401 — [probe] readTranscriptTitle uses canonical id, not resumeSessionId
  • …and 17 more (see the run report)
中文说明

仅完成部分审查,审查缺口已披露。

未探索到全部深度(达到工具调用预算):chunk 12:run AgentViewRoster.test.tsx under vitest to confirm green — the shared review worktree (and the parent checkout) has no node_modules , and a full npm ci (…

未审查:反向审计——在 3 轮的反审轮数上限内未收敛。

Test Plan(非阻断):npm run buildexit 1

收敛姿态下延后(第 7 轮,非阻断)——已记录,本轮不要求修改:共 37 条(原文未翻译,列表见上方英文部分)。

— qwen3.8-max via Qwen Code /review (v0.21.15)

Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx Outdated
Comment thread packages/cli/src/commands/agents.ts Outdated
Comment thread packages/cli/src/agent-view/supervisor-store.ts
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx
Comment thread packages/cli/src/ui/hooks/useSessionPicker.ts Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/worker-ui-bridge.ts Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
@ZijianZhang989

Copy link
Copy Markdown
Collaborator Author

Resolved the current review round in 26dd4439e after merging the latest PR #7802 head through merge commit 75b4af805 (no force-push).

The fixes cover all 11 reported correctness gaps:

  • reject unresolved terminal CSI/control-response input before prompt and peek text handling;
  • separate successful pin/rename/stop/remove actions from best-effort row refresh failures;
  • honor workspace advanced.runtimeOutputDir in the resume/adopt picker;
  • fail closed on missing or unknown destructive-check processState;
  • prevent late peek loads from replacing send errors;
  • count repeated delayed prompt echoes;
  • preserve manual roster titles over automatic transcript titles;
  • keep optimistic peek replies visible for the full send operation;
  • complete partial slash-command prefixes on Enter without changing exact/unknown command behavior;
  • refuse text-only multi-question answers while keeping the confirmation pending;
  • preserve the edited-draft Ctrl+C state across render ticks.

Verification completed:

  • npm run build
  • npm run typecheck
  • focused ESLint and Prettier checks for all 12 changed files
  • 6 focused test files, 175 tests passed
  • two clean diff self-audit passes
中文说明

在通过普通 merge commit 75b4af805 合入 PR #7802 最新代码后,当前 review 轮次的全部问题已在 26dd4439e 中解决,全程没有 force-push。

本次覆盖 11 个正确性问题:

  • 在 prompt 和 peek 文本处理前拒绝未解析的终端 CSI/控制响应输入;
  • 将成功的 pin/rename/stop/remove 动作与 best-effort 行刷新失败分离;
  • resume/adopt picker 正确使用工作区 advanced.runtimeOutputDir
  • 破坏性检查遇到缺失或未知 processState 时失败关闭;
  • 防止延迟完成的 peek 加载覆盖发送错误;
  • 对重复的延迟 prompt 回显按次数消费;
  • 手动 roster 标题优先于 transcript 自动标题;
  • peek 乐观回复在整个发送期间保持可见;
  • Enter 补全部分 slash command 前缀,同时保持精确命令和未知命令原行为;
  • 多问题场景拒绝纯文本回答,并保持 confirmation 等待;
  • 跨 render tick 保留草稿已编辑状态,避免 Ctrl+C 意外退出。

已完成验证:

  • npm run build
  • npm run typecheck
  • 对 12 个修改文件执行定向 ESLint 与 Prettier 检查
  • 6 个定向测试文件,共 175 个测试通过
  • 两轮完整 diff 自审均无新增问题

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially reviewed — gaps disclosed.

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 3.

Deferred under the convergence posture (round 8, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/agent-view/supervisor-store.test.ts:269 (+22 locations) — [review] Twenty-two test-coverage gaps across the diff: new…
  • packages/cli/src/agent-view/supervisor-store.ts:260 (+1 locations) — [review] Every present-but-unreadable/invalid state.json throws out…
  • packages/cli/src/commands/agents.ts:156 (+1 locations) — [review] Roster title cache stores only positive hits and is wiped…
  • packages/cli/src/commands/agents.ts:463 (+1 locations) — [review] Non-TTY text listing emits every session supervisor.list()…
  • packages/cli/src/commands/agents.ts:532 (+1 locations) — [review] The roster header's env model fallback hardcodes…
  • packages/cli/src/ui/AppContainer.tsx:277 (+1 locations) — [review] The EMPTY_TOOL_CALLS destructuring default can never apply…
  • packages/cli/src/ui/AppContainer.tsx:1764 (+1 locations) — [review] runAgentViewRosterCommand swallows argv-build errors with…
  • packages/cli/src/ui/AppContainer.tsx:2230 (+1 locations) — [review] agentViewLastResult (a worker-only value) is computed…
  • packages/cli/src/ui/agent-view/AgentViewApp.test.tsx:1238 (+1 locations) — [review] The roster silently drops the session-name argument of…
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:489 (+1 locations) — [review] renameSession is the only mutating action without an…
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:743 (+1 locations) — [review] Any dispatch prompt containing a whitespace-separated…
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:111 (+1 locations) — [review] AgentViewPromptInput.isPerfectMatch is declared and…
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:545 (+1 locations) — [review] useAgentViewSlashCommands' filter keeps a non-built-in…
  • packages/cli/src/ui/agent-view/roster-model.ts:121 (+1 locations) — [review] Directory group mode groups sessions by display basename…
  • packages/cli/src/ui/agent-view/roster-model.ts:210 (+1 locations) — [review] The NaN-createdAt guard maps unparseable timestamps to…
  • packages/cli/src/ui/agent-view/worker-ui-bridge.ts:294 (+1 locations) — [review] The free-text approval vocabulary is six exact English…
  • packages/cli/src/ui/components/SessionPicker.tsx:618 (+2 locations) — [review] Hardcoded English strings in otherwise-translated…
  • packages/cli/src/ui/hooks/useResumeCommand.test.ts:85 (+1 locations) — [review] The newly added vi.mock('../utils/restoreGoal.js') targets…
  • packages/cli/src/ui/utils/textUtils.ts:126 (+1 locations) — [review] cleanSingleLineText inherits stripUnsafeCharacters'…
中文说明

仅完成部分审查,审查缺口已披露。

未审查:反向审计——在 3 轮的反审轮数上限内未收敛。

收敛姿态下延后(第 8 轮,非阻断)——已记录,本轮不要求修改:共 19 条(原文未翻译,列表见上方英文部分)。

— qwen3.8-max via Qwen Code /review (v0.21.15)

Comment thread packages/cli/src/commands/agents.ts
Comment thread packages/cli/src/startup/agent-view-resume-guard.ts
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/worker-ui-bridge.ts Outdated
Comment thread packages/cli/src/ui/components/SessionPicker.tsx Outdated
Comment thread packages/cli/src/ui/hooks/useDeleteCommand.ts
俊良 added 2 commits August 21, 2026 17:34
…agent/agent-view-roster-ui

# Conflicts:
#	packages/cli/src/startup/agent-view-resume-guard.ts
#	packages/cli/src/ui/AppContainer.tsx
@ZijianZhang989

Copy link
Copy Markdown
Collaborator Author

Resolved the latest review round and the dependency conflict.

  • Merged the latest agent/agent-view-commands branch normally in 34ce2a1e6 (no force-push), preserving both the command safeguards and roster behavior.
  • Fixed all 10 R8 findings in fa73dccea: removal/adoption guards, stale retry state, terminal input edge cases, bounded peek rendering, multi-question answers, picker width budgeting, and Agent View ownership release before transcript deletion.
  • Replied to and resolved each inline thread individually.
  • Verification passed: full build, full workspace typecheck, focused ESLint, Prettier, and 270 focused tests across 7 files.
中文说明

已解决最新一轮 review 和依赖分支冲突。

  • 通过普通 merge 在 34ce2a1e6 合入最新的 agent/agent-view-commands 分支(未 force-push),同时保留 commands 的安全守卫和 roster 行为。
  • fa73dccea 中修复全部 10 条 R8 问题:removal/adoption 守卫、重试后的过期错误状态、终端输入边界、Peek 内容上限、多问题回答、Picker 宽度预算,以及删除 transcript 前释放 Agent View ownership。
  • 已逐条回复并 resolve 每一个 inline thread。
  • 验证通过:完整构建、全工作区 typecheck、聚焦 ESLint、Prettier,以及 7 个文件共 270 个聚焦测试。

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not explored to full depth (tool budget reached): chunk 18: live execution of roster-model.test.ts via vitest (no node_modules in the review worktree; npx vitest fails at config load).

Deferred under the convergence posture (round 9, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/ui/hooks/useResumeCommand.test.ts:95 (+4 locations) — [test] Revert-probe-hollow tests: four new test changes pass with the source change reverted
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:497 (+16 locations) — [review] Mutation-surviving test gaps: 16 new tests pass under mutants of the behavior they claim to pin
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:807 (+4 locations) — [review] Untested new branches/wiring: four behaviors added by this diff are exercised by zero tests
  • packages/cli/src/ui/AppContainer.tsx:2230 — [review] Per-render full-history scan for agentViewLastResult in every session, sideband or not
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:990 — [review] Prompt-box footer ends with a dangling · separator
  • packages/cli/src/ui/agent-view/roster-model.ts:150 — [review] Inert worker spread into deriveAgentViewPresentation — field never read
  • packages/cli/src/ui/components/SessionPicker.tsx:303 — [review] Managed-session selection gate + preview overlay have zero test coverage
  • packages/cli/src/ui/hooks/useDeleteCommand.ts:187 — [review] Bulk delete conflates live-managed block and failed ownership release under one wrong toast
  • packages/cli/src/ui/AppContainer.tsx:2854 — [review] Worker-sideband control poll loop (queueing, idle gating, stop, redraw) entirely untested
  • packages/cli/src/ui/components/DialogManager.tsx:526 — [review] includeAgentViewSessions dialog wiring untested — inverted === hides agent-view sessions
  • packages/cli/src/gemini.tsx:425 — [review] Exit-kind → exit-code mapping untested AND unreachable in the PTY-host child (dead branch)
  • packages/cli/src/commands/agents.ts:156 — [review] titleCache over-invalidation: O(N) synchronous transcript reads per event/poll on the event loop
  • packages/cli/src/ui/AppContainer.tsx:5091 — [review] runAgentViewRosterCommand silently swallows argv-build errors after irreversible detach
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:643 — [review] Dismissing the notice leaves the Ctrl+X remove confirmation armed — remove executes later
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:479 — [review] CSI_RESIDUE_PATTERN silently drops [1] , [2026] , [ ] pastes (unchecked checkbox lost)
  • packages/cli/src/ui/agent-view/roster-model.ts:121 — [review] Directory group mode groups by project basename, merging unrelated same-named directories
  • packages/cli/src/ui/agent-view/roster-model.ts:186 — [review] Four AgentRosterRow fields (updatedAt, inputKind, lastActivityAt, lastHeartbeatAt) have no read site
  • packages/cli/src/ui/agent-view/worker-ui-bridge.ts:304 — [review] Multi-question AskUserQuestion fan-out fabricates answers the user never gave
  • packages/cli/src/ui/AppContainer.tsx:277 — [review] EMPTY_TOOL_CALLS default is dead; comment misdescribes the identity-stability source
  • packages/cli/src/ui/AppContainer.tsx:2873 — [review] Answered-soft-question marker goes stale when a slash command consumes the roster reply
  • …and 4 more (see the run report)
中文说明

未探索到全部深度(达到工具调用预算):chunk 18:live execution of roster-model.test.ts via vitest (no node_modules in the review worktree; npx vitest fails at config load)

收敛姿态下延后(第 9 轮,非阻断)——已记录,本轮不要求修改:共 24 条(原文未翻译,列表见上方英文部分)。

— qwen3.8-max via Qwen Code /review (v0.21.15)

Comment thread packages/cli/src/ui/AppContainer.tsx
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx
Comment thread packages/cli/src/ui/agent-view/roster-model.ts

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially reviewed — gaps disclosed.

Not explored to full depth (tool budget reached): chunk 15: none — no check was cut short..

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 3.

Deferred under the convergence posture (round 10, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/commands/agents.test.ts:342 — [probe] The new test is the only gate on the default JSON filter
  • packages/cli/src/commands/agents.test.ts:399 — [probe] The new non-TTY tests cannot pin the TTY gate: in vitest
  • packages/cli/src/commands/agents.test.ts:422 — [review] The non-TTY text roster always prints
  • packages/cli/src/commands/agents.test.ts:493 — [probe] actions.loadRows/subscribeToChanges are only
  • packages/cli/src/commands/agents.test.ts:638 — [probe] No test gates the loop's re-render after a successful
  • packages/cli/src/commands/agents.test.ts:1045 — [review] The only test gating formatPeekPanel exercises just the
  • packages/cli/src/commands/agents.ts:76 — [review] The attach parameter on exported AgentsInteractiveActions.d
  • packages/cli/src/commands/agents.ts:164 — [review] The empty-callback foregroundSubscription is a
  • packages/cli/src/commands/agents.ts:384 — [review] Transcript title lookup has no negative cache:
  • packages/cli/src/commands/agents.ts:463 — [review] The non-TTY text roster drops the session display name
  • packages/cli/src/commands/agents.ts:530 — [review] The Agent View header's model/auth are computed with
  • packages/cli/src/commands/agents.ts:561 — [review] readProviderLabel picks the provider label by scanning
  • packages/cli/src/config/config.test.ts:39 — [test] The only change in this 469-test file is unasserted mock
  • packages/cli/src/gemini.tsx:425 — [review] The new non-'exited' exit branch is unreachable in the
  • packages/cli/src/startup/agent-view-resume-guard.test.ts:29 — [probe] The delete guard's load-bearing choice of the strict
  • packages/cli/src/startup/agent-view-resume-guard.test.ts:193 — [review] Every unit test for isManagedAgentViewDeleteBlocked
  • packages/cli/src/startup/agent-view-resume-guard.ts:96 — [review] isManagedAgentViewDeleteBlocked blocks managed sessions in
  • packages/cli/src/ui/AppContainer.test.tsx:1022 — [review] The new detach-failure test exercises only the
  • packages/cli/src/ui/AppContainer.test.tsx:6782 — [review] The idle-gate test asserts both gate flags against a
  • packages/cli/src/ui/AppContainer.tsx:2912 — [review] The worker's stop-ack state report is deterministically
  • …and 40 more (see the run report)
中文说明

仅完成部分审查,审查缺口已披露。

未探索到全部深度(达到工具调用预算):chunk 15:none — no check was cut short.

未审查:反向审计——在 3 轮的反审轮数上限内未收敛。

收敛姿态下延后(第 10 轮,非阻断)——已记录,本轮不要求修改:共 60 条(原文未翻译,列表见上方英文部分)。

— qwen3.8-max via Qwen Code /review (v0.21.15)

Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx
Comment thread packages/cli/src/ui/AppContainer.tsx Outdated
Comment thread packages/cli/src/ui/AppContainer.tsx
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially reviewed — gaps disclosed.

Not reviewed: reverse audit — stopped before round 1 by the review time budget.

Deferred under the convergence posture (round 11, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/commands/agents.test.ts:942 — [probe] 'shows adoption failures in a persistent error panel'
  • packages/cli/src/commands/agents.ts:798 — [review] formatPeekPanel's queuedPromptCount branch
  • packages/cli/src/config/config.test.ts:39 — [test] Inert test edit: the added subscribe mock is asserted
  • packages/cli/src/startup/agent-view-resume-guard.test.ts:192 — [review] Every assertion added for isManagedAgentViewDeleteBlocked
  • packages/cli/src/ui/agent-view/roster-model.ts:144 — [probe] The NaN fallback of 0 makes an unparseable createdAt
  • packages/cli/src/ui/agent-view/worker-ui-bridge.ts:207 — [review] The 'prompt' and 'stop' branches of applyAgentViewWorkerCon
  • packages/cli/src/ui/commands/resumeCommand.test.ts:71 — [test] Inert test edit: the assertion checks a value the test
  • packages/cli/src/ui/components/SessionPicker.tsx:303 — [review] The managed-session selection intercept and
  • packages/cli/src/ui/hooks/slashCommandProcessor.test.ts:798 — [test] Inert new test: passes with all PR source changes
  • packages/cli/src/ui/hooks/useDeleteCommand.ts:196 — [review] Batch delete lumps a supervisor release failure for an
  • packages/cli/src/ui/hooks/useResumeCommand.ts:103 — [test] The new worker-resume block branch has no test exercising
中文说明

仅完成部分审查,审查缺口已披露。

未审查:反向审计——评审时间预算不足,未能开始第 1 轮。

收敛姿态下延后(第 11 轮,非阻断)——已记录,本轮不要求修改:共 11 条(原文未翻译,列表见上方英文部分)。

— qwen3.8-max via Qwen Code /review (v0.21.15)

Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx
Comment thread packages/cli/src/ui/AppContainer.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not explored to full depth (tool budget reached): chunk 21: executing worker-ui-bridge.test.ts via vitest — no node_modules is installed in the review worktree or the parent checkout, and a fresh npm ci + build excee…; chunk 22: executing the test suite — the worktree has no node_modules and a full npm ci in the shared review worktree was out of scope; all assertions were verified b….

Deferred under the convergence posture (round 12, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/agent-view/worker-sideband.test.ts:376 — [review] control-poll replay branch lost coverage
  • packages/cli/src/commands/agents.ts:301 — [review] isNotManagedPeekError couples to daemon error phrasing
  • packages/cli/src/startup/agent-view-resume-guard.test.ts:192 — [probe] delete-guard core predicate branches untested
  • packages/cli/src/ui/agent-view/AgentViewApp.test.tsx:1002 — [review] pin/rename refresh-failure test lacks the negative assertion
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:208 — [review] Home/End test never presses End
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:1045 — [review] formatWaitingLine case-sensitivity diverges from blocking-wait classifier
  • packages/cli/src/ui/agent-view/roster-model.ts:155 — [probe] dead NaN guard — invalid now throws before the guard applies
  • packages/cli/src/ui/hooks/useDeleteCommand.ts:196 — [review] batch delete conflates blocked and release-failed skip reasons
  • packages/cli/src/ui/AppContainer.tsx:2911 — [review] worker-side control-event consumption (prompt/stop) has no test
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:265 — [review] dispatch-and-attach branch never exercised through the app
  • packages/cli/src/commands/agents.ts:779 — [review] formatPeekPanel queuedPromptCount/lastResult/fallback branches untested
  • packages/cli/src/commands/agents.test.ts:494 — [review] subscribeToChanges titleCache-clear wrapper has no behavioral coverage
  • packages/cli/src/commands/agents.ts:790 — [review] formatPeekPanel activity lines are never rendered
  • packages/cli/src/ui/AppContainer.test.tsx:2956 — [review] /quit and /exit sent as peek replies execute on the worker unreported
  • packages/cli/src/ui/agent-view/AgentViewApp.test.tsx:103 — [review] canAttach:false guard is unpaired
  • packages/cli/src/ui/agent-view/AgentViewApp.test.tsx:1460 — [review] Ctrl+C 2-second interrupt window has no expiry test
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:26 — [review] AgentViewAppActions duplicated as AgentsInteractiveActions across the layer boundary
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:588 — [probe] toggleGroupMode notice derives from a stale closure under same-tick double events
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:772 — [review] runAgentViewRosterApp lifecycle has zero test coverage
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:504 — [probe] lagging-echo test does not gate the anti-clobber protection
  • …and 36 more (see the run report)

Convergence: round 12 posted 4 inline comment(s), 4 of them reported for the first time; the previous round posted 5. Findings keep coming back to the same files: packages/cli/src/ui/agent-view/AgentViewApp.tsx (findings in round 10; 2 more now); packages/cli/src/ui/agent-view/AgentViewRoster.tsx (findings in round 10; 1 more now). A cluster that keeps producing siblings usually means the fixes are treating instances of a shared root cause — triaging that cause before the next round, or splitting an independent cluster into its own pull request, tends to end the loop faster than fixing them one at a time. (Observation only — nothing was withheld from this review because of this observation.)

中文说明

未探索到全部深度(达到工具调用预算):chunk 21:executing worker-ui-bridge.test.ts via vitest — no node_modules is installed in the review worktree or the parent checkout, and a fresh npm ci + build excee…;chunk 22:executing the test suite — the worktree has no node_modules and a full npm ci in the shared review worktree was out of scope; all assertions were verified b…

收敛姿态下延后(第 12 轮,非阻断)——已记录,本轮不要求修改:共 56 条(原文未翻译,列表见上方英文部分)。

收敛情况:第 12 轮发布了 4 条行内评论,其中 4 条是首次提出;上一轮发布了 5 条。发现反复回到同一批文件:packages/cli/src/ui/agent-view/AgentViewApp.tsx(第 10 轮已出过发现,本轮又有 2 条);packages/cli/src/ui/agent-view/AgentViewRoster.tsx(第 10 轮已出过发现,本轮又有 1 条)。一个不断再生兄弟发现的簇,通常意味着逐条修复只在处理同一根因的实例——先定位并处理该根因,或把独立的簇拆成单独的 PR,通常比逐条修复更快结束循环。(仅为观察——本轮评审未因此扣留任何内容。)

— qwen3.8-max via Qwen Code /review (v0.22.0)

Comment thread packages/cli/src/ui/components/SessionPicker.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx
Comment thread packages/cli/src/ui/agent-view/AgentViewApp.tsx Outdated
Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially reviewed — gaps disclosed.

Not explored to full depth (tool budget reached): chunk 8: executing the new test file under vitest — the review worktree has no node_modules /dependency dists, and a full npm install + workspace build was out of bud….

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 3.

Deferred under the convergence posture (round 13, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/commands/agents.ts:158 — [test] titleCache.clear() mutant survives — roster title-cache invalidation has no test
  • packages/cli/src/ui/agent-view/AgentViewApp.test.tsx:97 — [review] attach-dispatch branch (Shift+Enter) has zero test coverage
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:239 — [review] s: filter panel count is a stale snapshot while the roster re-renders live
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:289 — [review] dispatch resolution clears an in-flight peek reply draft; Enter then attaches instead of sending
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:367 — [review] generation guard checked before await refreshRows(); refresh-failure path clobbers a newer peek target
  • packages/cli/src/ui/agent-view/AgentViewApp.tsx:590 — [review] toggleGroupMode notice computed from stale closure — misreports grouping on bursty Ctrl+S
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:208 — [review] Home-and-End test presses Home only; the End path has no coverage
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:264 — [review] grace-timer unmount cleanup effect exercised by no test (mutant survives)
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:308 — [review] grace-timer escape path with a peek panel open is untested (mutant survives)
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:530 — [review] lagging-echo test cannot detect its named regression (replay converges on current buffer)
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:826 — [review] stale-panel Enter guard pinned by no test; silent attach reachable when input mode is undefined
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:247 — [review] grace-timer fire-and-drop branch exercised by no test (mutant survives)
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:249 — [review] grace window swallows genuine Ctrl+C/Ctrl+X within 25 ms of Esc (interrupt beat lost)
  • packages/cli/src/ui/components/SessionPicker.tsx:150 — [review] 'bg' badge and 'Esc to return' hardcoded English instead of t()-wrapped (i18n convention)
  • packages/cli/src/ui/components/SessionPicker.tsx:303 — [review] allowManagedAgentViewSelection is a dead switch at its only true set site
  • packages/cli/src/ui/components/StandaloneSessionPicker.test.tsx:466 — [review] managed-session selection intercept (handleSelect guard) untested; guard-delete mutant survives
  • packages/cli/src/ui/components/StandaloneSessionPicker.tsx:21 (+6 locations) — [test] six agent-view picker wiring hunks each survive individual revert — no per-hunk test gate

Convergence: round 13 posted 1 inline comment(s), 1 of them reported for the first time; the previous round posted 4 (4 new). Findings keep coming back to the same files: packages/cli/src/ui/agent-view/AgentViewRoster.tsx (findings in round 12; 1 more now). A cluster that keeps producing siblings usually means the fixes are treating instances of a shared root cause — triaging that cause before the next round, or splitting an independent cluster into its own pull request, tends to end the loop faster than fixing them one at a time. (Observation only — nothing was withheld from this review because of this observation.)

中文说明

仅完成部分审查,审查缺口已披露。

未探索到全部深度(达到工具调用预算):chunk 8:executing the new test file under vitest — the review worktree has no node_modules /dependency dists, and a full npm install + workspace build was out of bud…

未审查:反向审计——在 3 轮的反审轮数上限内未收敛。

收敛姿态下延后(第 13 轮,非阻断)——已记录,本轮不要求修改:共 17 条(原文未翻译,列表见上方英文部分)。

收敛情况:第 13 轮发布了 1 条行内评论,其中 1 条是首次提出;上一轮发布了 4 条(其中 4 条首次提出)。发现反复回到同一批文件:packages/cli/src/ui/agent-view/AgentViewRoster.tsx(第 12 轮已出过发现,本轮又有 1 条)。一个不断再生兄弟发现的簇,通常意味着逐条修复只在处理同一根因的实例——先定位并处理该根因,或把独立的簇拆成单独的 PR,通常比逐条修复更快结束循环。(仅为观察——本轮评审未因此扣留任何内容。)

— qwen3.8-max via Qwen Code /review (v0.22.0)

Comment thread packages/cli/src/ui/agent-view/AgentViewRoster.tsx Outdated

@qwen-code-ci-bot qwen-code-ci-bot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partially reviewed — gaps disclosed.

Unresolved, please confirm:

  • [Critical] packages/cli/src/commands/agents.ts — 1 prior-round blocker cannot be ruled on: body truncated in context rendering and not fetched in full (comment 3826153746, R7-1 refresh best-effort)
  • [Critical] packages/cli/src/ui/agent-view/AgentViewApp.test.tsx — 1 prior-round blocker cannot be ruled on: body truncated, not fetched (comment 3807091551, peek reply failure feedback)
  • [Critical] packages/cli/src/ui/agent-view/AgentViewApp.tsx — 26 prior-round blockers cannot be ruled on: bodies truncated in context rendering and not fetched in full (comments 3796848203, 3796848201, 3796848212-adjacent 3803666117, 3803666220, 380709…
  • [Critical] packages/cli/src/ui/agent-view/AgentViewRoster.tsx — 40 prior-round blockers cannot be ruled on: bodies truncated in context rendering and not fetched in full (comments 3796848205, 3796848208, 3796848212, 3796848214, 3796848216, 3803666142,…
  • [Critical] packages/cli/src/ui/agent-view/roster-model.ts — 3 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3796848223, 3816424713, 3831380533)
  • [Critical] packages/cli/src/ui/agent-view/worker-ui-bridge.ts — 7 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3796848227, 3796848232, 3803666156, 3807091632, 3820134288, 3826153800, 3829013364)
  • [Critical] packages/cli/src/ui/AppContainer.tsx — 15 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3796848196, 3796848199, 3796848200, 3803666163, 3803666188, 3803666213, 3807091540, 3807091547, 3812161938, 381642468…
  • [Critical] packages/cli/src/ui/components/DialogManager.tsx — 1 prior-round blocker cannot be ruled on: body truncated, not fetched (comment 3803666198)
  • [Critical] packages/cli/src/ui/components/SessionPicker.tsx — 4 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3796848236, 3807091640, 3829013371, 3838437949)
  • [Critical] packages/cli/src/ui/components/StandaloneSessionPicker.tsx — 3 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3803666180, 3807091649, 3820134253)
  • [Critical] packages/cli/src/ui/contexts/KeypressContext.tsx — 1 prior-round blocker cannot be ruled on: body truncated, not fetched (comment 3796848240)
  • [Critical] packages/cli/src/ui/hooks/useDeleteCommand.ts — 2 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3823226863, 3829013377)
  • [Critical] packages/cli/src/ui/hooks/useSessionPicker.ts — 3 prior-round blockers cannot be ruled on: bodies truncated, not fetched (comments 3820134308, 3823226834, 3826153786)

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 5.

Deferred under the convergence posture (round 14, not a blocker) — recorded, not requested in this round:

  • packages/cli/src/commands/agents.ts:158 — [test] titleCache.clear() on supervisor change has no test gating it
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:534 — [review] lagging-echo suppression test is vacuous
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:589 — [review] built-in slash-command filter has no test
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:209 — [review] Home/End test never presses End
  • packages/cli/src/ui/agent-view/AgentViewRoster.tsx:113 — [review] AgentViewPromptInput.isPerfectMatch is dead plumbing
  • packages/cli/src/ui/agent-view/AgentViewRoster.test.tsx:200 — [review] cursor-movement test is not position-sensitive
中文说明

仅完成部分审查,审查缺口已披露。

未决,请确认:共 13 条(原文未翻译,列表见上方英文部分)。

未审查:反向审计——在 5 轮的反审轮数上限内未收敛。

收敛姿态下延后(第 14 轮,非阻断)——已记录,本轮不要求修改:共 6 条(原文未翻译,列表见上方英文部分)。

— qwen3.8-max via Qwen Code /review (v0.22.0)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants