Skip to content

fix(cli): deliver Agent View queued follow-ups from the provider - #10315

Merged
yiliang114 merged 10 commits into
mainfrom
fix/issue-10148-provider-queue-flush
Sep 5, 2026
Merged

fix(cli): deliver Agent View queued follow-ups from the provider#10315
yiliang114 merged 10 commits into
mainfrom
fix/issue-10148-provider-queue-flush

Conversation

@yiliang114

Copy link
Copy Markdown
Collaborator

What this PR does

Agent View's queued follow-up delivery moves from AgentComposer to the always-mounted AgentViewProvider. The provider now renders one always-resident queue flusher per registered agent. Each flusher observes its agent's streaming state and, when an agent with a non-empty queue settles to a non-terminal idle, performs the same join('\n') + clear + enqueueMessage delivery the composer used to do. When an agent reaches a terminal status (COMPLETED/FAILED/CANCELLED), its flusher drops the queue instead. AgentComposer keeps the display and submit paths but no longer flushes, so delivery no longer depends on the agent's tab being focused. The key={activeView} layout behavior and the idle direct-submit path are unchanged.

Why it's needed

#10102 lifted queue storage into AgentViewContext, but the flush stayed an effect inside AgentComposer, which DefaultAppLayout renders as <AgentComposer key={activeView} agentId={activeView} /> only for the active view — so "flush on idle" was effectively "flush on idle while this agent's tab is focused":

  1. Queue a follow-up on busy teammate A, switch to teammate B to keep working (the exact flow Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 asks us to support). A settles to idle while the user is on B: A's composer is unmounted, nothing flushes, and A sits idle indefinitely with accepted-but-undelivered work. Delivery happens only if the user revisits A's tab, while Agent Team: a queued Agent View message disappears after switching teammate tabs #10069's expectation is delivery when the teammate can accept it.
  2. If the agent reaches a terminal status while unfocused, the old !isTerminalStatus(status) guard blocks the flush on return and nothing besides unregister clears the entry, so QueuedMessageDisplay permanently shows "queued" messages that can never be delivered.

Both consequences were reproduced with component tests before the fix (red tests below).

Reviewer Test Plan

How to verify

Run the regression tests (the two #10148 tests are red before the fix, green with it):

cd packages/cli
npx vitest run src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx src/ui/contexts/AgentViewContext.test.tsx
  • delivers queued follow-ups while the user is on another tab (#10148) — submit while busy, switch to teammate B, let A settle to idle while still on B: enqueueMessage is called exactly once with the queued message; revisiting A does not re-deliver. Red before the fix with expected "spy" to be called 1 times, but got 0 times.
  • drops the queue when the agent reaches a terminal status (#10148) — submit while busy, then A becomes FAILED while the user is on B: the queue is dropped, revisiting A shows no permanent "queued" message, and nothing is enqueued. Red before the fix with the frame still containing the undeliverable message.
  • The pre-existing exactly-once / join / same-batch / idle-submit tests pass unchanged apart from re-anchoring the fix(cli): keep Agent View queued messages across teammate tab switches #10102 flush-site tests to the new delivery location (as the triage on Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 called out). The AgentViewContext storage tests were re-anchored to agent stubs that cover the flusher's streaming-state surface.

Broader regression surface: npx vitest run src/ui/components/agent-view/ src/ui/contexts/AgentViewContext.test.tsx src/ui/components/QueuedMessageDisplay.test.tsx src/ui/layouts/ src/ui/components/Composer.test.tsx src/ui/components/InputPrompt.test.tsx — 325 tests pass locally, and tsc --noEmit / eslint / prettier are clean for the changed files.

Evidence (Before & After)

Component-test level (no TUI screenshots): a live Agent Team with two teammates and a controllable long busy turn cannot be constructed stably in a terminal-capture scenario (same as the #10069 precedent), so the tests assert the exact observable sequence from the issue. Before the fix, delivers queued follow-ups while the user is on another tab (#10148) fails with expected "spy" to be called 1 times, but got 0 times and drops the queue when the agent reaches a terminal status (#10148) fails with the frame still containing never delivered; after the fix both pass and the remaining regression surface stays green.

Tested on

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

Environment (optional)

Unit/component tests only: vitest + ink-testing-library with the real AgentViewProvider; runtime agents faked.

Risk & Scope

  • Main risk or tradeoff: the flush site moves from the keyed composer to the provider, so exactly-once delivery now relies on the queue-identity dedupe scoped to the flusher's mount (the agent's registration lifetime) instead of the composer's mount — strictly wider, and unregisterAgent/unregisterAll also clear the queue, so no stale queue identity survives re-registration under the same id. Each registered agent gets one always-mounted flusher subscribed to its events via the same useAgentStreamingState hook the composer already uses, adding one lightweight subscription per agent.
  • Not validated / out of scope: a real two-teammate TUI session (cannot be constructed stably; covered by component tests per the Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 precedent); the tab-bar pending-queue indication is explicitly out of scope in Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148; key={activeView} and draft behavior are untouched.
  • Breaking changes / migration notes: none.

Linked Issues

Fixes #10148

(Follow-up from review finding R1-3 on #10102; original issue #10069.)

中文说明

这个 PR 做了什么

Agent View 排队 follow-up 的投递从 AgentComposer 移到常驻挂载的 AgentViewProvider。provider 现在为每个已注册智能体渲染一个常驻队列投递器(flusher):每个 flusher 观察对应智能体的流式状态,当某个队列非空的智能体落到非终态空闲时,执行与原先完全相同的 join('\n') + 清队列 + enqueueMessage 投递;当智能体进入终态(COMPLETED/FAILED/CANCELLED)时,丢弃其队列。AgentComposer 保留展示与提交路径,但不再负责投递——投递不再依赖该智能体的标签页处于聚焦状态。key={activeView} 的布局行为和 idle 时的直接提交路径均未改动。

为什么需要

#10102 把队列存储提升到 AgentViewContext,但投递(flush)仍是 AgentComposer 内的 effect;而 DefaultAppLayout 只为当前激活视图渲染 <AgentComposer key={activeView} agentId={activeView} />——因此"空闲时投递"实际上是"仅当该智能体标签页聚焦时空闲才投递":

  1. 在忙碌的队友 A 上排队一条 follow-up,然后切到队友 B 继续干活(正是 Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 要求支持的流程)。A 在用户停留在 B 时转为空闲:A 的 composer 已卸载,无人 flush,A 一直空闲但已接受的消息始终不投递。只有用户回到 A 的标签页才会投递,而 Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 的期望是"队友能接受时就投递"。
  2. 如果智能体在用户不在该标签页时进入终态,原有的 !isTerminalStatus(status) 守卫会挡住返回后的 flush,且除注销外无人清队列,QueuedMessageDisplay 会永久显示无法投递的 "queued" 消息。

两个后果都在修复前用组件测试复现(见下方红色用例)。

评审测试计划

如何验证

运行回归测试(两个 #10148 用例修复前红、修复后绿):

cd packages/cli
npx vitest run src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx src/ui/contexts/AgentViewContext.test.tsx
  • delivers queued follow-ups while the user is on another tab (#10148)——busy 时提交,切到队友 B,让 A 在用户仍停留在 B 时转为空闲:enqueueMessage 恰好被调用一次并携带排队消息;回到 A 不会重复投递。修复前失败:expected "spy" to be called 1 times, but got 0 times
  • drops the queue when the agent reaches a terminal status (#10148)——busy 时提交,随后 A 在用户停留在 B 时变为 FAILED:队列被丢弃,回到 A 不再显示永久 "queued" 消息,也不会投递任何内容。修复前失败:画面中仍包含无法投递的消息。
  • 既有的 exactly-once / 合并 / 同批提交 / idle 直接提交用例全部通过,仅按 Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 triage 的提示把 fix(cli): keep Agent View queued messages across teammate tab switches #10102 的投递位置相关测试重新锚定到新的投递点;AgentViewContext 存储测试的假智能体也补齐了 flusher 所需的流式状态接口面。

更大回归面:npx vitest run src/ui/components/agent-view/ src/ui/contexts/AgentViewContext.test.tsx src/ui/components/QueuedMessageDisplay.test.tsx src/ui/layouts/ src/ui/components/Composer.test.tsx src/ui/components/InputPrompt.test.tsx——本地 325 个测试全部通过,改动文件的 tsc --noEmit / eslint / prettier 干净。

证据(修复前后)

组件测试级证据(未提供 TUI 截图):需要两个队友且 busy turn 可控的真实 Agent Team 会话无法在 terminal-capture 场景中稳定构造(与 #10069 先例相同),因此由测试断言 issue 描述的完整可观察序列。修复前 delivers queued follow-ups while the user is on another tab (#10148) 失败:expected "spy" to be called 1 times, but got 0 timesdrops the queue when the agent reaches a terminal status (#10148) 失败:画面仍包含 never delivered;修复后两者通过,其余回归面保持绿色。

测试平台

OS 状态
🍏 macOS ⚠️
🪟 Windows ⚠️
🐧 Linux

环境(可选)

仅单元/组件测试:vitest + ink-testing-library,使用真实 AgentViewProvider,runtime agent 为假对象。

风险与范围

  • 主要风险/权衡:投递点从按 key 挂载的 composer 移到 provider,exactly-once 保证改为依赖按队列标识去重、作用域为 flusher 的挂载周期(即智能体注册生命周期)而非 composer 挂载周期——作用域严格更宽,且 unregisterAgent/unregisterAll 也会清队列,因此同一 id 重新注册时不会残留过期的队列标识。每个已注册智能体会挂一个常驻 flusher,通过与 composer 相同的 useAgentStreamingState hook 订阅其事件,每个智能体仅增加一个轻量订阅。
  • 未验证/不在范围内:真实双队友 TUI 会话(无法稳定构造,按 Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 先例以组件测试覆盖);标签栏的待投递队列提示在 Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 中明确不在范围内;key={activeView} 与草稿行为未触碰。
  • 破坏性变更/迁移说明:无。

关联 Issue

Fixes #10148

(源自 #10102 评审发现 R1-3;原始 issue 为 #10069。)

Queue delivery lived in an AgentComposer effect, but DefaultAppLayout keys the composer by the active view. An agent that settled to idle (or a terminal status) while its tab was unfocused never flushed: queued follow-ups stayed accepted-but-undelivered until the user revisited the tab, or were shown as "queued" forever after a terminal status.

Move delivery to the always-mounted AgentViewProvider: one AgentQueueFlusher child per registered agent joins and enqueues the queue when the agent settles to a non-terminal idle, and drops the queue when the agent becomes terminal. The composer now only displays the queue. Delivery stays exactly-once via the queue-identity dedupe, re-anchored from the composer mount scope to the flusher.

Fixes #10148

Co-authored-by: Qwen-Coder <qwen-coder @alibabacloud.com>
@github-actions github-actions Bot added the review/self-reported The linked issue was opened by the PR author (self-reported) label Aug 27, 2026
@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 27, 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

qwen-code-ci-bot commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Re-run at d0a206e (round 9), triggered by workflow_dispatch. This head is a merge of origin/main — I compared it against the previously reviewed 8041a8d: 42 commits and 214 files came in from main, none of them this PR's four files, so the change under review is byte-identical to last round. What did change is the code around it, so I re-verified the contracts against this head rather than trusting the earlier pass.

  • Template ✓ — every required section present, bilingual.
  • Problem: observed, not theoretical. Tracked in Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 (open, self-reported by the author), with component tests red before the fix. The structural premise still holds at this head: DefaultAppLayout.tsx:76 renders <AgentComposer key={activeView} agentId={activeView} /> for the active view only, while AgentViewProvider is mounted once in startInteractiveUI.tsx:231 — so a flush effect inside the composer can only fire while that agent's tab is focused.
  • Direction: aligned. Delivery is the missing half of the queued follow-up flow built by Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 and fix(cli): keep Agent View queued messages across teammate tab switches #10102; lifting the queue into the context only pays off once the flush lives somewhere always-mounted.
  • Size: UI-only (packages/cli/src/ui/**), no core paths — the core-module gate does not apply. 136 production lines (AgentComposer.tsx +7/−32, AgentViewContext.tsx +96/−1) against 228 test lines; no generated or schema files. Well under both the 500-line and the 1000-line thresholds.
  • Approach: scope is exactly the flush move plus its tests — no drive-by refactors, no unrelated churn, and the useTeamInProcess.ts hunk that earlier heads carried is gone. Nothing here to split out.
  • Risk: no high-risk path matched the revert-correlated set; no elevated risk signals.

One process note for later: the author is a committer (admin) and the branch is same-repo, so neither the fork-refactor approval guardrail nor the maintainer-only core gate is in play.

Moving on to code review. 🔍

中文说明

本次是在 round 9 头部 d0a206e 上的重跑,由 workflow_dispatch 触发。该头部是一次 origin/main 合并——我把它与上次审查的 8041a8d 做了对比:从 main 进来 42 个提交、214 个文件,但本 PR 的四个文件一个都没被碰到,因此受审改动与上一轮逐字节相同。变化的是它周围的代码,所以本轮把各项契约重新对照该头部核实,而不是沿用上一轮的结论。

  • 模板 ✓ —— 各节齐全,中英双语。
  • 问题:已观测到的 bug,非理论加固。对应 Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148(开放中,作者自报),修复前组件测试为红。结构性前提在该头部依然成立:DefaultAppLayout.tsx:76 只为当前激活视图渲染 <AgentComposer key={activeView} agentId={activeView} />,而 AgentViewProviderstartInteractiveUI.tsx:231 常驻挂载一次——因此 composer 内部的 flush 效果只在该智能体标签页聚焦时才可能运行。
  • 方向:对齐。投递是 Agent Team: a queued Agent View message disappears after switching teammate tabs #10069fix(cli): keep Agent View queued messages across teammate tab switches #10102 建立的排队 follow-up 流程缺失的一半;把队列提升到 context 之后,flush 只有放到常驻挂载处才有意义。
  • 规模:仅 UI(packages/cli/src/ui/**),不触及核心路径——核心模块门禁不适用。136 行生产代码(AgentComposer.tsx +7/−32、AgentViewContext.tsx +96/−1),测试 228 行;无生成/schema 文件。远低于 500 行与 1000 行两个阈值。
  • 方案:范围恰好是投递迁移及其测试——没有顺手重构、没有无关改动,早前头部携带的 useTeamInProcess.ts 改动也已移除。没有需要拆出去的内容。
  • 风险:未命中与回滚相关的高风险路径集合;无升级风险信号。

一条留给后文的流程说明:作者是 committer(admin),分支来自同仓库,因此 fork refactor 批准护栏与核心模块维护者门禁均不适用。

进入代码审查。🔍

Qwen Code · qwen3.8-max-2026-09-02

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Code review

Independent baseline, written before opening the diff: the flush has to move to something that is (a) always mounted and (b) owns both the queues and the agent registry — that is the provider, with one small child per agent reusing useAgentStreamingState. And the terminal branch has to come first, because that hook derives StreamingState.Idle for terminal statuses, so a terminal agent would otherwise walk straight into the delivery branch. The PR matches that proposal exactly; I did not find a simpler path it missed.

The contracts the gate rests on, re-verified at this head (the merge pulled 42 commits of main in since the last pass, so these are fresh reads, not carry-over):

  • useAgentStreamingState returns Idle for any status that is not RUNNING/INITIALIZING with no pending approvals — terminal included. The flusher's terminal branch runs first and returns. ✓
  • isTerminalStatus (core agent-types.ts) is exactly COMPLETED | FAILED | CANCELLED, and AgentStatus has no fourth terminal value — so the gate's explicit enumeration cannot be slipped past. ✓
  • enqueueMessage (core agent-interactive.ts:321) has no status guard: it restarts the run loop whenever !processing. ✓
  • runOneRound early-returns on !this.chat (agent-interactive.ts:212) and settleRoundStatus flips to IDLE when there is no lastRoundError — the fatal-FAILED flavor would silently eat the message and erase the failure state. ✓
  • InProcessBackend.spawnAgent's waitForCompletion().then(...) watcher is one-shot: at the first terminal settle it runs releaseAgentResources and fires the exit callback, and nothing re-arms it. ✓
  • ArenaManager.resolveTransition sanctions only COMPLETED → RUNNING out of a terminal status; FAILED → RUNNING returns null and is discarded. ✓

So "drop at every terminal status" is the correct semantic rather than a conservative guess — three of those five facts are what make a delivered follow-up to a FAILED agent actively harmful.

The one new failure mode I went looking for, and it is clean. The flusher subscribes at registration time, where the composer used to subscribe at focus time. If the event emitter did not exist yet at registration, the hook would subscribe to nothing and never re-subscribe (its deps are the agent identity, not the emitter) — which would have silently reproduced the exact bug this PR fixes. It cannot happen: AgentCore creates readonly eventEmitter in its constructor (agent-core.ts:520) and getEventEmitter() returns it, and both registration paths (useArenaInProcess.ts:93/116, useTeamInProcess.ts:108/133) call registerAgent only with a resolved backend.getAgent(id), retrying until the instance exists.

Rest of the read:

  • Composer cleanup is complete. Flush effect, useRef/isTerminalStatus imports and the setAgentMessageQueue destructure are gone; status, streamingState, StreamingState and AgentStatus are all still used (status label, escape-to-cancel, handleSubmit), so nothing dangles. Display and the idle direct-submit path are unchanged.
  • Exactly-once holds. Dedupe is by queue identity; setAgentMessageQueue(agentId, []) deletes the map entry, so the next read falls back to the shared EMPTY_MESSAGE_QUEUE (length 0), and an append always allocates a fresh array — a message appended in the same batch as a clear survives and delivers on the next commit. The suite renders under StrictMode, so the double-effect path is pinned rather than assumed.
  • No second delivery site, and no layout where a queue outlives its flusher. Repo-wide, the flusher is the only production consumer of agentMessageQueues besides the composer's display/submit; there is exactly one AgentComposer mount and one AgentViewProvider mount.
sequenceDiagram
    participant P1 as User
    participant P2 as AgentComposer (keyed by activeView)
    participant P3 as AgentViewProvider (always mounted)
    participant P4 as AgentQueueFlusher (one per agent)
    participant P5 as AgentInteractive in core
    P1->>P2: submit follow-up while agent A is busy
    P2->>P3: appendToAgentMessageQueue(A, text)
    P1->>P3: switch to tab B, unmounting the composer for A
    P5-->>P4: STATUS_CHANGE for A
    alt A settles to IDLE with a non-empty queue
        P4->>P3: setAgentMessageQueue(A, empty)
        P4->>P5: enqueueMessage(joined text)
    else A reaches COMPLETED, CANCELLED or FAILED
        P4->>P3: setAgentMessageQueue(A, empty) and drop
    end
Loading

Not verified, and I would rather say so than imply otherwise: no test anywhere exercises the real STATUS_CHANGE → re-render → deliver chain. The delivery suite mocks useAgentStreamingState; the new provider suite uses static stubs whose getEventEmitter() returns undefined, and the hook has no unit test of its own. To be fair about what is pinned: the provider suite renders AgentViewProvider with no composer in the tree at all, so flusher mounting and the terminal gate are exercised for a never-focused agent — that is the genuinely new part. The event chain itself I verified by reading source at this head (above), which is reading, not execution.

Two more standing items, both already reported and resolved as Suggestions in earlier rounds. This is round 9 — well past the ~5-round point in AGENTS.md — so they belong in a follow-up, not another round here: the flusher subscribes via the full hook, so a running agent's flusher holds its own 500 ms useTimer interval plus a USAGE_METADATA listener whose values it never reads (idle and terminal agents hold no timer, since useTimer is only active while Responding); and terminal drops leave no trace — no log, no notice — which is #10148's stated semantic with the tab-bar indication explicitly scoped out there.

Testing — unattended CI run; PR code not executed

Fetched once at review time, no polling. Every check on this head has completed and none failed:

Check Conclusion
Test (ubuntu-latest, Node 22.x) ✅ success
Integration Tests (no-AK, No Sandbox) ✅ success
Dependency CVE audit ✅ success
Secret scan (TruffleHog) ✅ success
TUI parity snapshots (ink vs opentui) ✅ success
OpenTUI no-flicker gate ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Desktop Shell (windows-2022) ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success
Classify PR ✅ success

Orchestration jobs (assign, label, route, authorize, review-pr, delay-automatic-review, Remind on force-push) are green too; conditional lanes (macOS/Windows unit jobs, sandboxed integration, fork signalling) report skipped, which is normal for a same-repo branch.

Two things worth calling out about that signal:

  • Dependency CVE audit was the red check on the previous head 8041a8d — pre-existing, dependency-tree advisories, no dependency or lockfile change in this diff (the author's CI note made the same call and I agree with it). It is green on this head, so the thing that withheld last round's deferred approval is gone rather than overridden.
  • The round-9 /review lane reported no such file or directory for five test paths in its Test Plan note. That is the lane resolving src/ui/... from the repo root instead of packages/cli; I checked all six paths against the contents API at this head and they all exist. Not a PR defect, and not missing tests.

Sandboxed verification would settle the one gap I could not close by reading: @qwen-code /verify — that a real STATUS_CHANGE from an unfocused agent settling to IDLE actually re-renders its flusher and delivers, end to end on a real build. The delivery suite mocks the streaming hook, so a green run proves the orchestration, not the event chain this PR exists for. The author has write access, so @qwen-code /tmux is also available, though the two-teammate live scenario is precisely what the PR says cannot be constructed stably. A sandboxed verification is already in flight on this head (ack posted 19:38Z, run 33797585174) — if it lands a report, that is the evidence to read against the gap above.

Real-scenario (tmux) testing: not driven on this run. This is an unattended CI re-run (workflow_dispatch), so PR code is never executed here; the live-behaviour signal comes from the lane named above.

中文说明

代码审查

独立基线(读 diff 之前写下):flush 必须移到一个既常驻挂载、又同时拥有队列与智能体注册表的地方——即 provider,每个智能体一个小组件,复用 useAgentStreamingState。而且终态分支必须在前:该 hook 对终态推导出的正是 StreamingState.Idle,否则终态智能体会直接进入投递分支。PR 与该方案完全一致,我没有找到它遗漏的更简路径。

门控所依赖的契约,本轮在该头部重新核实(自上一轮以来合并从 main 带进 42 个提交,因此以下是重新阅读的结果,而非沿用):

  • useAgentStreamingState 对任何非 RUNNING/INITIALIZING 且无待审批的状态返回 Idle——终态同样如此。投递器的终态分支在前并直接返回。✓
  • isTerminalStatus(core agent-types.ts)恰好是 COMPLETED | FAILED | CANCELLEDAgentStatus 不存在第四个终态值——门控的显式枚举不可能被绕过。✓
  • enqueueMessage(core agent-interactive.ts:321)无状态守卫:只要 !processing 就重启运行循环。✓
  • runOneRound!this.chat 处提前返回(agent-interactive.ts:212),而 settleRoundStatus 在无 lastRoundError 时翻为 IDLE——致命形态的 FAILED 会静默吃掉消息抹掉失败状态。✓
  • InProcessBackend.spawnAgentwaitForCompletion().then(...) 监视器是一次性的:首次终态落定即执行 releaseAgentResources 并触发退出回调,无任何机制重新挂起。✓
  • ArenaManager.resolveTransition 在终态之外仅允许 COMPLETED → RUNNINGFAILED → RUNNING 返回 null 并被丢弃。✓

因此"任何终态都丢弃队列"是正确的语义,而不是保守猜测——上述五条中有三条正是"向 FAILED 智能体投递 follow-up 有害"的原因。

我主动去找的那一个新失效模式,结论是干净的。 投递器在注册时订阅,而 composer 过去是在聚焦时订阅。若注册时事件发射器尚不存在,hook 会订阅到空并且永不重订阅(其依赖是智能体标识,而非发射器)——那将静默地重现本 PR 要修的那个 bug。这不会发生:AgentCore 在构造函数中创建 readonly eventEmitteragent-core.ts:520),getEventEmitter() 直接返回它;两条注册路径(useArenaInProcess.ts:93/116useTeamInProcess.ts:108/133)都只在拿到已解析的 backend.getAgent(id) 时才调用 registerAgent,并重试直到实例存在。

其余阅读结论:

  • composer 清理完整。 flush 效果、useRef/isTerminalStatus 导入、setAgentMessageQueue 解构均已移除;statusstreamingStateStreamingStateAgentStatus 仍在被使用(状态标签、Esc 取消当前轮、handleSubmit),没有悬空引用。展示路径与 idle 直接提交路径未变。
  • exactly-once 成立。 去重按队列标识;setAgentMessageQueue(agentId, []) 会删除该 map 条目,下一次读取回落到共享的 EMPTY_MESSAGE_QUEUE(长度 0),而 append 总是分配新数组——与清空处于同一批次的追加消息不会丢失,会在下一次提交时投递。测试套件在 StrictMode 下渲染,因此双次 effect 路径是被钉住的,而非假设。
  • 不存在第二个投递点,也不存在队列比投递器活得更久的布局。 全仓库范围内,除 composer 的展示/提交外,投递器是 agentMessageQueues 唯一的生产消费者;AgentComposerAgentViewProvider 各只有一处挂载。

未验证的部分,我宁可直说也不含糊:没有任何测试走通真实的 STATUS_CHANGE → 重渲染 → 投递 链路。 投递套件 mock 了 useAgentStreamingState;新增的 provider 套件使用静态桩对象,其 getEventEmitter() 返回 undefined;该 hook 自身也没有单元测试。公平地说,被钉住的部分是:provider 套件渲染 AgentViewProvider 时树中完全没有 composer,因此"从未聚焦的智能体"的投递器挂载与终态门控是被真实执行的——那正是本 PR 新增的部分。事件链本身我是通过在该头部阅读源码核实的(见上),那是阅读,不是执行。

另有两条长期项,此前各轮已作为 Suggestion 报告并解决。本轮是 round 9——远超 AGENTS.md 的约 5 轮界限——因此它们应进入后续 issue/PR,而不是在这里再开一轮:投递器经由完整 hook 订阅,因此运行中智能体的投递器会各自持有一个 500 ms 的 useTimer 间隔,以及一个它从不读取其值的 USAGE_METADATA 监听器(空闲与终态智能体不持有定时器,因为 useTimer 仅在 Responding 时激活);终态丢弃不留痕迹——无日志、无提示——这是 #10148 明确的语义,相关标签栏提示已在该 issue 中划出范围。

测试 —— 无人值守 CI 运行;未执行 PR 代码

审查时一次性获取,不轮询。该头部上的所有检查均已完成,且无失败项(表格见上)。

关于该信号有两点需要点明:

  • Dependency CVE audit 是上一个头部 8041a8d 上的红色检查——既有问题,来自依赖树公告,本 diff 未改动任何依赖或 lockfile(作者的 CI 说明做了同样判断,我认同)。它在本头部为绿,因此上一轮扣住延迟批准的原因是消失了,而不是被覆盖掉了。
  • round 9 的 /review 通道在其 Test Plan 备注中对五个测试路径报告 no such file or directory。那是该通道从仓库根而非 packages/cli 解析 src/ui/... 所致;我在该头部用 contents API 逐一核对,六个路径全部存在。既不是 PR 缺陷,也不是测试缺失。

沙箱验证可以补足我仅靠阅读无法闭合的那一处缺口:@qwen-code /verify —— 在真实构建上端到端验证"未聚焦智能体落到 IDLE 时发出的真实 STATUS_CHANGE 确实会重渲染其投递器并完成投递"。投递套件 mock 了 streaming hook,绿色只能证明编排逻辑,无法证明本 PR 存在所要实现的那条事件链。作者具备写权限,因此 @qwen-code /tmux 同样可用,不过双队友的真实会话恰恰是 PR 说明中无法稳定构造的场景。该头部上已有一次沙箱验证在运行中(19:38Z 已发布 ack,run 33797585174)——若它产出报告,那正是用来对照上述缺口的证据。

真实场景(tmux)测试:本次未执行。这是无人值守 CI 重跑(workflow_dispatch),此处绝不执行 PR 代码;实时行为信号来自上面指出的通道。

Qwen Code · qwen3.8-max-2026-09-02

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Confidence: 4/5 — the change is right, minimal, and I verified its core-side premises myself at this head; the one thing I could not settle by reading is that no test drives the real streaming-event chain, and that is a follow-up, not a blocker.

Stepping back: this is the ninth round on a PR whose scope never grew. What started as "move the flush out of the keyed composer" is still exactly that — 136 production lines, two files, the rest tests. The interesting part of the history is that three Criticals were found in the terminal-status branch (a FAILED agent that has already been released by the backend, an arena record that discards FAILED → RUNNING, a chat that was never created) and each was fixed by narrowing the gate rather than by arguing with it, until the answer became the trivially correct "every terminal status drops the queue". That is the shape I want to see at round nine, not a diff that has accreted a state machine to defend an earlier decision.

My own baseline before reading the diff was the same design, so there is no simpler path I am quietly conceding. What I did go looking for was the failure the move could plausibly introduce — a flusher that subscribes before the agent's event emitter exists would never re-subscribe and would silently reproduce the original bug — and it does not exist here, because the emitter is built in AgentCore's constructor and registration only happens once the instance resolves.

If I had to maintain this in six months I would thank the author: one effect, terminal branch first, and a comment that names the exact core locations the reasoning depends on instead of asserting a conclusion. The honest reservation is the one in Stage 2 — the delivery suite mocks the streaming hook, so "a real STATUS_CHANGE re-renders an unfocused agent's flusher and delivers" rests on my source reading plus a /verify lane that has not reported yet. I am comfortable approving on that, because the same hook and event set already drive the focused composer's status label in shipped code, and the new provider tests do pin the flusher mounting and gating with no composer in the tree at all.

Per AGENTS.md's round-balloon rule, the two standing Suggestions (full-hook subscription overhead per running agent; no trace left by a terminal drop) should go to a follow-up issue rather than another round here — both are already resolved threads on this PR.

Verdict: approve, pinned to d0a206e6db6aade8fe7eb5265054f25a6aa93fab. CI on this head is fully green with nothing pending, so there is no deferred approval to wait for. Maintainer note: the CHANGES_REQUESTED currently showing on this PR is my own stale review from round 7 (f1a49d1) — a later COMMENTED review does not clear it on GitHub — so this approval from the same account supersedes it and the review decision should flip.

中文说明

置信度:4/5 —— 改动正确、范围最小,且我在该头部亲自核实了它依赖的 core 侧前提;唯一无法靠阅读确定的是没有测试驱动真实的 streaming 事件链,那属于后续项,不是阻断项。

退一步看:这是一个范围从未膨胀的 PR 的第九轮。最初那句"把 flush 移出按 key 挂载的 composer",到现在依然就是这件事——136 行生产代码、两个文件,其余都是测试。这段历史里值得注意的是:终态分支上先后发现三个 Critical(已被 backend 释放的 FAILED 智能体、丢弃 FAILED → RUNNING 的 arena 记录、从未创建的 chat),每一次的修法都是收窄门控,而不是为它辩护,直到答案变成那个平凡正确的"任何终态都丢弃队列"。第九轮我希望能看到的就是这种形态,而不是为守住早先的决定而累积出一台状态机的 diff。

我在读 diff 之前的基线方案与之相同,因此不存在我正悄悄让步的更简路径。我主动去找的是这次迁移可能引入的失效:一个在智能体事件发射器存在之前就订阅的投递器将永不重订阅,从而静默重现原始 bug——这里不存在该问题,因为发射器在 AgentCore 构造函数中创建,而注册只在实例解析成功后发生。

若六个月后由我维护,我会感谢作者:一个 effect、终态分支在前,注释精确点名推理所依赖的 core 位置,而不是直接断言结论。诚实的保留意见就是 Stage 2 中那一条——投递套件 mock 了 streaming hook,因此"真实的 STATUS_CHANGE 会重渲染未聚焦智能体的投递器并完成投递"依赖于我的源码阅读,加上一条尚未出报告的 /verify 通道。我可以接受在此基础上批准:同一 hook 与同一事件集在已上线代码中驱动着聚焦 composer 的状态标签,而新增的 provider 测试确实在树中完全没有 composer 的情况下钉住了投递器的挂载与门控。

按 AGENTS.md 的轮次控制规则,两条长期 Suggestion(每个运行中智能体的完整 hook 订阅开销;终态丢弃不留痕迹)应转入后续 issue,而不是在此再开一轮——两者在本 PR 上都已是 resolved 线程。

结论:批准,钉在 d0a206e6db6aade8fe7eb5265054f25a6aa93fab。该头部 CI 全绿且无进行中项,因此没有需要等待的延迟批准。给维护者的说明:本 PR 当前显示的 CHANGES_REQUESTED 来自我自己在 round 7(f1a49d1)的过期评审——GitHub 上后续一次 COMMENTED 评审不会清除它——因此同一账号的这次批准会将其取代,评审结论应当翻转。

Qwen Code · qwen3.8-max-2026-09-02

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

@github-actions

github-actions Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 84.88% 84.88% 90.58% 84.74%
Core 89.05% 89.05% 90.71% 87.52%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   84.88 |    84.74 |   90.58 |   84.88 |                   
 src               |    86.6 |    82.79 |   88.88 |    86.6 |                   
  cli.ts           |   95.94 |    88.38 |     100 |   95.94 | ...12-713,717-718 
  llm.tsx          |   74.19 |    77.51 |   80.76 |   74.19 | ...1426-1430,1557 
  ...ractiveCli.ts |   89.27 |    83.13 |   89.06 |   89.27 | ...3157,3163,3229 
  ...liCommands.ts |   89.71 |    84.17 |   81.81 |   89.71 | ...31-633,650,757 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   76.17 |    79.09 |   94.03 |   76.17 |                   
  acpAgent.ts      |   75.23 |    78.71 |    93.3 |   75.23 | ...32,14255-14256 
  ...k-reporter.ts |     100 |       80 |     100 |     100 | 81,84,119,141     
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  ...heap-probe.ts |   97.39 |    96.66 |     100 |   97.39 | 243,264-265       
  errorCodes.ts    |     100 |      100 |     100 |     100 |                   
  ...ion-skills.ts |     100 |     87.5 |     100 |     100 | 17,28             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...figuration.ts |     100 |     95.6 |     100 |     100 | 121,196,242,259   
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
  ...ersistence.ts |   94.95 |    92.24 |     100 |   94.95 | ...13-118,227-228 
  ...management.ts |   76.99 |    71.56 |     100 |   76.99 | ...20-524,533-537 
  ...e-download.ts |    64.7 |    62.24 |    87.5 |    64.7 | ...08-609,615-619 
 ...tegration/live |   97.53 |    88.23 |   92.85 |   97.53 |                   
  ...en-context.ts |   95.89 |    82.85 |     100 |   95.89 | ...,72-73,105-106 
  ...structions.ts |     100 |      100 |     100 |     100 |                   
  ...ak-to-user.ts |   96.66 |      100 |    87.5 |   96.66 | 37-38             
  ...task-tools.ts |   98.97 |      100 |   88.88 |   98.97 | 201-202           
 ...ration/service |    97.1 |    95.89 |   93.75 |    97.1 |                   
  filesystem.ts    |    97.1 |    95.89 |   93.75 |    97.1 | ...22-123,246-247 
 ...ration/session |   91.05 |     86.6 |    95.7 |   91.05 |                   
  Session.ts       |   90.43 |    85.68 |   95.09 |   90.43 | ...21,14248-14252 
  ...entTracker.ts |   96.88 |    89.36 |      90 |   96.88 | 139-145,224       
  ...projection.ts |   98.85 |    91.59 |     100 |   98.85 | 234,250,262       
  ...stop-guard.ts |     100 |    98.07 |     100 |     100 | 37,127            
  ...eplay-page.ts |   94.19 |    86.53 |     100 |   94.19 | ...53,357,437,441 
  ...y-replayer.ts |   83.41 |    93.33 |   94.11 |   83.41 | ...30-148,266-268 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.19 |     87.8 |     100 |   89.19 | ...85-304,363-365 
  ...oal-update.ts |   98.61 |    97.29 |     100 |   98.61 | 64                
  ...lure-guard.ts |   98.32 |    97.72 |     100 |   98.32 | 294-295,340-341   
  tasksSnapshot.ts |   95.85 |    71.11 |     100 |   95.85 | 68-74,190-191     
  ...on-tracker.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ssion/emitters |   95.68 |    91.97 |   97.14 |   95.68 |                   
  ...ageEmitter.ts |   95.36 |    92.42 |     100 |   95.36 | ...16,129-130,223 
  PlanEmitter.ts   |     100 |    85.71 |     100 |     100 | 68,70             
  base-emitter.ts  |   78.26 |    77.77 |     100 |   78.26 | 23-24,26-28       
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   98.57 |    94.84 |     100 |   98.57 | 75-76,394-395     
 ...ession/rewrite |   96.03 |    89.79 |   94.44 |   96.03 |                   
  LlmRewriter.ts   |   94.01 |    88.23 |     100 |   94.01 | 101-102,179-183   
  ...Middleware.ts |   96.99 |    88.37 |     100 |   96.99 | 145,153-155       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/agent-view    |   86.65 |    80.81 |   94.01 |   86.65 |                   
  attach-lease.ts  |     100 |    97.05 |     100 |     100 | 173               
  ...t-cli-argv.ts |     100 |     92.3 |     100 |     100 | 15                
  ...ged-detach.ts |     100 |     90.9 |     100 |     100 | 40,64             
  presentation.ts  |   94.13 |    88.72 |   94.73 |   94.13 | ...57-358,382-384 
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  pty-host-env.ts  |     100 |      100 |     100 |     100 |                   
  ...st-process.ts |   88.52 |    78.91 |   94.44 |   88.52 | ...1305,1395-1397 
  pty-host.ts      |   85.25 |    87.03 |   90.69 |   85.25 | ...22-524,539-540 
  ...sor-client.ts |   80.38 |    72.81 |   77.41 |   80.38 | ...22-626,652-656 
  ...r-dispatch.ts |      98 |    85.18 |     100 |      98 | 117,173,190       
  ...or-process.ts |    83.5 |     77.3 |   98.72 |    83.5 | ...4479-4482,4485 
  ...sor-runner.ts |   82.43 |    76.82 |   80.95 |   82.43 | ...69,493,496-506 
  ...sor-server.ts |   84.39 |    83.56 |    93.1 |   84.39 | ...67-568,571-588 
  ...isor-store.ts |   94.76 |    84.95 |     100 |   94.76 | ...,966,1008,1023 
  ...nal-bridge.ts |   93.98 |    91.54 |   83.33 |   93.98 | 228-238           
  ...r-sideband.ts |   94.91 |    89.36 |     100 |   94.91 | ...75-276,299-304 
 src/commands      |   90.45 |    78.26 |   65.62 |   90.45 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   55.55 |      100 |       0 |   55.55 | 18-22,30-40       
  extensions.tsx   |   96.77 |      100 |      50 |   96.77 | 39                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   95.45 |      100 |      50 |   95.45 | 31                
  review.ts        |   98.94 |      100 |      50 |   98.94 | 106               
  serve.ts         |   89.06 |    75.72 |     100 |   89.06 | ...27-930,942,953 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   89.51 |    88.75 |   90.73 |   89.51 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |   94.78 |    94.59 |      90 |   94.78 | ...32-335,380-383 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   96.91 |    96.27 |     100 |   96.91 | ...60-265,323-326 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.77 |    85.91 |   94.33 |   93.77 | ...1318,1325-1326 
  loop-runtime.ts  |   91.66 |      100 |      50 |   91.66 | 15,22             
  ...classifier.ts |   98.53 |    96.66 |     100 |   98.53 | 115-116,161       
  ...tact-store.ts |   93.51 |    87.65 |     100 |   93.51 | ...71,288-289,337 
  pairing.ts       |      75 |      100 |      50 |      75 | 22-28,59-70       
  pidfile.ts       |   95.55 |       90 |     100 |   95.55 | ...50-251,315-316 
  proxy.ts         |     100 |      100 |     100 |     100 |                   
  reload.ts        |    77.5 |    86.95 |      75 |    77.5 | 72-84,93-97       
  runtime.ts       |   82.43 |    86.44 |     100 |   82.43 | ...87-191,251-253 
  set.ts           |   75.72 |    85.71 |      50 |   75.72 | 65-83,111-116     
  start.ts         |   87.75 |    83.63 |      88 |   87.75 | ...97,603-606,618 
  ...ure-format.ts |   93.65 |    82.45 |     100 |   93.65 | ...42,48-49,74-75 
  status.ts        |   78.57 |    59.25 |   66.66 |   78.57 | ...36-137,150-161 
  stop.ts          |   57.83 |    82.35 |      50 |   57.83 | ...3,74-76,85-111 
 ...nds/extensions |   88.85 |    87.91 |   87.09 |   88.85 |                   
  consent.ts       |   72.53 |    90.32 |   42.85 |   72.53 | ...86-142,157-163 
  disable.ts       |     100 |       90 |     100 |     100 | 30                
  enable.ts        |     100 |    91.66 |     100 |     100 | 38                
  install.ts       |   82.95 |    81.57 |      75 |   82.95 | ...96-199,202-211 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |     90.9 |     100 |     100 | 18                
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  sources.ts       |   93.42 |    87.09 |   92.85 |   93.42 | ...4-66,96-98,167 
  uninstall.ts     |   74.57 |       40 |   66.66 |   74.57 | 45-47,60-67,70-73 
  update.ts        |   96.71 |    97.05 |     100 |   96.71 | 114-118           
  utils.ts         |   75.63 |    57.14 |     100 |   75.63 | ...30-134,136-140 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...amples/starter |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-64              
 src/commands/mcp  |   91.19 |    88.76 |   85.71 |   91.19 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |    92.9 |    84.84 |      80 |    92.9 | ...79-181,199-200 
  reconnect.ts     |   85.54 |    86.76 |    90.9 |   85.54 | 45-58,337-359     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   92.08 |    90.61 |   93.59 |   92.08 |                   
  ab-drive.ts      |   85.22 |    90.47 |   94.11 |   85.22 | ...50-926,969-972 
  agent-prompt.ts  |   94.89 |    93.01 |   97.95 |   94.89 | ...3296,3631-3711 
  base-tree.ts     |   77.02 |    80.76 |   77.77 |   77.02 | ...63-384,386-399 
  capture-local.ts |   94.79 |    96.81 |   94.11 |   94.79 | ...1192,1412-1450 
  ...k-coverage.ts |   50.71 |       35 |   66.66 |   50.71 | ...40-245,279-289 
  cleanup.ts       |   92.34 |     89.5 |    90.9 |   92.34 | ...1107,1109-1110 
  comment-body.ts  |   67.85 |    87.09 |   66.66 |   67.85 | ...30,157,159-164 
  ...ent-status.ts |   94.22 |    87.32 |    90.9 |   94.22 | ...96,462,738-758 
  ...ose-review.ts |   97.38 |    94.08 |    98.8 |   97.38 | ...7376-7420,7691 
  cost-ledger.ts   |   94.58 |     94.4 |   81.25 |   94.58 | ...53-654,694-704 
  ...candidates.ts |   93.12 |    93.95 |   84.61 |   93.12 | ...49-660,662-674 
  drive.ts         |   97.12 |    89.85 |     100 |   97.12 | ...83-985,990-992 
  emit-workflow.ts |   90.57 |     93.1 |   83.33 |   90.57 | 154,176,285-295   
  extract-step.ts  |   91.36 |    90.62 |   88.88 |   91.36 | ...90-707,714-729 
  fetch-diff.ts    |   73.75 |      100 |   66.66 |   73.75 | 77-97             
  fetch-pr.ts      |   97.37 |    92.15 |     100 |   97.37 | ...1592,1806-1811 
  findings.ts      |    96.3 |    93.68 |     100 |    96.3 | ...1418,1427-1428 
  issue-context.ts |   88.15 |     93.1 |   85.71 |   88.15 | 249-276           
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  match-remote.ts  |   85.55 |     92.3 |   66.66 |   85.55 | 74-79,144-150     
  meta.ts          |   79.43 |    93.75 |   66.66 |   79.43 | 123-128,147-162   
  mock-provider.ts |   95.44 |    90.25 |   89.47 |   95.44 | 145,690-709       
  parse-args.ts    |   99.48 |    95.74 |     100 |   99.48 | 665,990,1046,1082 
  plan-diff.ts     |   71.42 |      100 |   66.66 |   71.42 | 162-197           
  pr-context.ts    |   96.22 |    88.86 |     100 |   96.22 | ...2580,2681-2697 
  presubmit.ts     |   94.42 |    90.38 |   94.11 |   94.42 | ...1240,1275-1306 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...75-479,506-552 
  ...r-findings.ts |   90.74 |    83.75 |     100 |   90.74 | ...17-422,429-430 
  repo-context.ts  |   94.62 |    90.75 |     100 |   94.62 | ...66-467,482-487 
  ...ve-anchors.ts |   78.34 |    89.28 |      75 |   78.34 | ...83-188,200-217 
  revert-hunk.ts   |   91.48 |    87.94 |     100 |   91.48 | ...1189,1236-1239 
  run.ts           |   84.65 |    87.34 |   95.45 |   84.65 | ...43,859-913,927 
  save-artifact.ts |    94.2 |    92.46 |   94.11 |    94.2 | ...14-617,710-713 
  scratch-tree.ts  |   95.93 |       86 |     100 |   95.93 | ...91-392,461-464 
  script-lint.ts   |   81.23 |    80.45 |   88.88 |   81.23 | ...82-796,798-820 
  submit.ts        |   94.21 |       89 |   94.44 |   94.21 | ...1710,1738-1775 
  test-delta.ts    |   95.75 |     92.3 |      75 |   95.75 | 470-478           
  test-efficacy.ts |   84.03 |    80.48 |   96.07 |   84.03 | ...3249,3257-3277 
  test-plan.ts     |   94.61 |    91.79 |      95 |   94.61 | ...29-832,873-874 
  ...low-script.ts |     100 |      100 |     100 |     100 |                   
 ...w/__fixtures__ |     100 |      100 |     100 |     100 |                   
  ...r-default.mjs |     100 |      100 |     100 |     100 |                   
  ...der-empty.mjs |     100 |      100 |     100 |     100 |                   
  ...der-named.mjs |     100 |      100 |     100 |     100 |                   
 ...nds/review/lib |   97.37 |    94.75 |   98.71 |   97.37 |                   
  agent-briefs.ts  |   99.08 |      100 |      50 |   99.08 | 841-842           
  ...t-identity.ts |     100 |      100 |     100 |     100 |                   
  anchors.ts       |     100 |    97.04 |     100 |     100 | ...39,175,184,231 
  assets.ts        |     100 |      100 |     100 |     100 |                   
  audit-layers.ts  |   98.67 |    96.15 |     100 |   98.67 | 288-290           
  authorization.ts |    96.5 |    95.61 |     100 |    96.5 | ...54-255,629-630 
  budget.ts        |     100 |    97.95 |     100 |     100 | 887,940           
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  certification.ts |     100 |      100 |     100 |     100 |                   
  convergence.ts   |     100 |    97.94 |    92.3 |     100 | 52,515,620,716    
  coverage.ts      |   98.97 |    95.12 |     100 |   98.97 | ...1103,1648-1649 
  deadline.ts      |   98.03 |    91.66 |     100 |   98.03 | ...20,752,820,837 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   99.29 |    95.77 |     100 |   99.29 | 295-296,319       
  disk.ts          |     100 |      100 |     100 |     100 |                   
  effort.ts        |     100 |      100 |     100 |     100 |                   
  failing-files.ts |     100 |    93.33 |     100 |     100 | 41                
  gh.ts            |   89.53 |    95.52 |   78.94 |   89.53 | ...47,384-385,412 
  git.ts           |   96.92 |    94.11 |     100 |   96.92 | 264-265,302-303   
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  import-graph.ts  |   96.68 |     95.6 |     100 |   96.68 | 180-182,211-212   
  ...ntal-scope.ts |     100 |      100 |     100 |     100 |                   
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  ...audit-gate.ts |     100 |     97.5 |     100 |     100 | 135               
  ledger.ts        |     100 |    99.47 |     100 |     100 | 884               
  local-anchor.ts  |   94.53 |    89.41 |     100 |   94.53 | ...36,669-670,837 
  local-diff.ts    |   86.77 |    94.28 |     100 |   86.77 | ...54-564,566-574 
  ...ry-context.ts |   96.61 |    95.48 |     100 |   96.61 | ...47-450,496-499 
  md-field.ts      |     100 |      100 |     100 |     100 |                   
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  narrow-diff.ts   |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.24 |    95.31 |     100 |   98.24 | ...,832,1213,1230 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |    95.6 |    88.67 |     100 |    95.6 | 40-41,168-173     
  prebuild.ts      |     100 |    96.15 |     100 |     100 | 248               
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   98.03 |    94.73 |     100 |   98.03 | 109-110           
  report.ts        |   92.92 |    86.66 |     100 |   92.92 | 213-214,216-220   
  ...ry-context.ts |     100 |    98.66 |     100 |     100 | 187               
  resume.ts        |     100 |      100 |     100 |     100 |                   
  retirement.ts    |     100 |    94.36 |     100 |     100 | ...58-559,760,917 
  review-footer.ts |   99.55 |    98.09 |     100 |   99.55 | 548-549           
  ...w-settings.ts |     100 |    96.42 |     100 |     100 | 99                
  roster.ts        |     100 |    97.14 |     100 |     100 | 177,222           
  round-model.ts   |     100 |      100 |     100 |     100 |                   
  run-ledger.ts    |    98.2 |    93.87 |     100 |    98.2 | ...23,541,647,670 
  same-file.ts     |     100 |       95 |     100 |     100 | 46                
  ...boxed-exec.ts |   94.26 |    89.32 |   95.65 |   94.26 | ...49-550,728-729 
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.18 |    94.38 |     100 |   98.18 | 431,472,512-513   
  test-utils.ts    |   99.04 |    91.66 |     100 |   99.04 | 75                
  toolchain.ts     |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   98.09 |    95.07 |     100 |   98.09 | ...92,438,707-708 
  ...pace-scope.ts |     100 |    96.96 |     100 |     100 | 186               
  workspaces.ts    |     100 |    96.85 |     100 |     100 | 222,452,499,512   
  ...ree-reader.ts |     100 |      100 |     100 |     100 |                   
  worktree.ts      |   89.39 |    81.78 |     100 |   89.39 | ...1813-1814,1827 
 ...w/lib/platform |   94.71 |    87.89 |   97.05 |   94.71 |                   
  aone-client.ts   |   94.94 |     87.3 |     100 |   94.94 | ...92-293,299-302 
  aone.ts          |   93.06 |    89.86 |   94.73 |   93.06 | ...34,598-603,655 
  github.ts        |   99.08 |     75.8 |     100 |   99.08 | 249-250           
  registry.ts      |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mands/sessions |   94.11 |    89.06 |   89.47 |   94.11 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
  ps.ts            |     100 |    94.44 |     100 |     100 | 58                
 src/config        |   94.53 |    90.57 |   95.73 |   94.53 |                   
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.36 |    88.37 |     100 |   93.36 | ...06-307,330-331 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   88.92 |    91.37 |   88.63 |   88.92 | ...2485,2487-2495 
  ...cy-monitor.ts |      90 |    77.27 |     100 |      90 | ...72-73,90-92,98 
  ...ust-policy.ts |   83.02 |    88.88 |     100 |   83.02 | ...02-209,232-240 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  environment.ts   |   94.63 |    92.42 |   95.23 |   94.63 | ...24-625,693-694 
  ...le-watcher.ts |   90.86 |    83.65 |   95.83 |   90.86 | ...23-325,370,418 
  ...resh-state.ts |   95.65 |    97.36 |     100 |   95.65 | 137-142           
  ...ime-reload.ts |     100 |    69.69 |     100 |     100 | ...12-113,122-123 
  hot-reload.ts    |   98.91 |    84.61 |     100 |   98.91 | 332-333           
  keyBindings.ts   |    97.4 |       50 |     100 |    97.4 | 240-243           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  ...ig-watcher.ts |   95.17 |    83.05 |     100 |   95.17 | ...78,200,292-293 
  ...er-secrets.ts |   98.97 |    96.96 |     100 |   98.97 | 85                
  mcpApprovals.ts  |   78.57 |       92 |   86.66 |   78.57 | ...18-319,324-326 
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      95 |    94.73 |     100 |      95 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |     100 |      100 |     100 |     100 |                   
  ...n-settings.ts |   99.15 |    93.93 |     100 |   99.15 | 63                
  sandboxConfig.ts |   93.33 |    93.33 |     100 |   93.33 | ...42-147,216-217 
  session-id.ts    |     100 |      100 |     100 |     100 |                   
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |   91.93 |    93.16 |   91.17 |   91.93 | ...1134,1136-1137 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  settingsUtils.ts |   81.12 |     89.2 |   85.18 |   81.12 | ...03-621,628-636 
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...l-settings.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |       88 |     100 |   89.47 | 43-44,53-54,56-57 
  ...el-options.ts |     100 |      100 |     100 |     100 |                   
  ...precedence.ts |   98.79 |     92.3 |     100 |   98.79 | 62                
  ...tedFolders.ts |   92.53 |    93.47 |     100 |   92.53 | ...36-337,373-384 
 ...nfig/migration |   95.23 |    78.94 |   85.71 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |       80 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   75.08 |    67.64 |   71.42 |   75.08 |                   
  ...tputBridge.ts |   75.33 |    68.18 |   73.68 |   75.33 | ...09-410,418-421 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/hooks         |     100 |      100 |     100 |     100 |                   
  ...elete-hook.ts |     100 |      100 |     100 |     100 |                   
 src/i18n          |   89.68 |    88.66 |   93.02 |   89.68 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   87.37 |    83.73 |   89.32 |   87.37 |                   
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   94.95 |    91.05 |     100 |   94.95 | ...30-431,529,542 
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...33-634,637-638 
 ...active/control |   75.54 |    89.83 |      80 |   75.54 |                   
  ...rolContext.ts |    6.06 |        0 |       0 |    6.06 | 57-99             
  ...Dispatcher.ts |   91.95 |    92.98 |   88.88 |   91.95 | ...54-372,392,395 
  ...rolService.ts |    6.89 |        0 |       0 |    6.89 | 46-188            
 ...ol/controllers |   57.57 |    66.48 |   73.68 |   57.57 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   70.23 |    63.33 |   91.66 |   70.23 | ...19-628,643-648 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   53.96 |    67.08 |   66.66 |   53.96 | ...78-690,699-728 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.18 |    94.11 |   95.34 |   98.18 |                   
  ...putAdapter.ts |   98.07 |    93.21 |   98.11 |   98.07 | ...1448,1464-1465 
  ...putAdapter.ts |   96.22 |    91.66 |   85.71 |   96.22 | 52-53             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.51 |      100 |   90.47 |   98.51 | 90-91,131-132     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/peerMessaging |   93.73 |    89.21 |   96.55 |   93.73 |                   
  ...ngContext.tsx |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...-messaging.ts |   93.51 |       89 |   96.29 |   93.51 | ...08,550,592-597 
 src/remoteInput   |   87.31 |    75.32 |   88.23 |   87.31 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.01 |       76 |   93.33 |   88.01 | ...49-350,361-364 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/runtime       |   99.72 |    95.17 |     100 |   99.72 |                   
  ...livery-ipc.ts |     100 |    91.17 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  cpu-percent.ts   |     100 |      100 |     100 |     100 |                   
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
  ...d-task-run.ts |     100 |       70 |     100 |     100 | 57,71             
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...-summaries.ts |   86.66 |       50 |     100 |   86.66 | 11,19             
  ...ber-errors.ts |     100 |    95.57 |     100 |     100 | 53,93-94,172,192  
  ...ls-mapping.ts |     100 |    96.15 |     100 |     100 | 26                
 src/serve         |   87.75 |    85.49 |   91.45 |   87.75 |                   
  ...extra-args.ts |     100 |      100 |     100 |     100 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   96.19 |    93.44 |     100 |   96.19 | ...47-448,451-453 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    98.36 |     100 |     100 | 779               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...horization.ts |   92.79 |    93.54 |    87.5 |   92.79 | 75-80,135-136     
  ...op-mcp-ipc.ts |   81.06 |    73.68 |   94.11 |   81.06 | ...37-242,267,289 
  ...nt-service.ts |    94.1 |    86.98 |     100 |    94.1 | ...75-477,484,486 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   89.61 |    94.37 |   96.55 |   89.61 | ...64-276,528-531 
  ...ebhook-ipc.ts |    98.5 |     87.5 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.27 |    84.91 |     100 |   87.27 | ...22,828-832,850 
  ...er-manager.ts |    88.7 |    83.79 |   93.33 |    88.7 | ...27,755,768-775 
  ...horization.ts |     100 |      100 |     100 |     100 |                   
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 88-89             
  ...supervisor.ts |   93.24 |    85.42 |    97.4 |   93.24 | ...1765,1819-1823 
  ...e-grouping.ts |     100 |    94.28 |     100 |     100 | 71,137            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |   91.02 |    81.25 |   94.73 |   91.02 | ...1121,1142-1147 
  ...tree-guard.ts |   93.87 |    89.81 |     100 |   93.87 | ...3227,3297-3301 
  daemon-logger.ts |   82.82 |    78.68 |   92.04 |   82.82 | ...1775,1802-1808 
  ...y-pressure.ts |     100 |    96.96 |     100 |     100 | 135               
  ...trics-ring.ts |     100 |      100 |     100 |     100 |                   
  ...s-provider.ts |   68.04 |    52.77 |     100 |   68.04 | ...44-249,282-290 
  daemon-status.ts |    98.7 |    91.96 |     100 |    98.7 | ...1593,1595-1596 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   93.37 |    85.18 |     100 |   93.37 | 114-117,195-202   
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...d-provider.ts |   92.06 |    87.09 |     100 |   92.06 | ...72,287-293,316 
  ...h-settings.ts |   94.94 |    90.45 |     100 |   94.94 | ...30,708,724,734 
  fast-path.ts     |    91.4 |       82 |   95.45 |    91.4 | ...47-556,634-635 
  ...ration-sse.ts |   42.55 |    33.33 |     100 |   42.55 | 23-24,30,33-56    
  health-query.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-149             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...-addresses.ts |     100 |     91.3 |     100 |     100 | 52,72             
  ...-path-open.ts |   96.12 |       97 |   93.33 |   96.12 | 114-123           
  ...back-binds.ts |     100 |      100 |     100 |     100 |                   
  ...-workspace.ts |   91.58 |    86.48 |     100 |   91.58 | ...44-145,156-157 
  ...pp-sandbox.ts |   96.72 |    95.23 |     100 |   96.72 | 41-42             
  ...iders-edit.ts |     100 |    83.33 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |    90.9 |    91.66 |      75 |    90.9 | 32,55-64          
  ...-with-auth.ts |     100 |      100 |     100 |     100 |                   
  ...ate-blocks.ts |   99.03 |    94.73 |     100 |   99.03 | 133               
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  ...nal-ledger.ts |    94.9 |    84.94 |     100 |    94.9 | ...81,302,361-362 
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   84.98 |    81.98 |   78.63 |   84.98 | ...9656,9674-9678 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   47.11 |    63.01 |   76.92 |   47.11 | ...1061,1073-1096 
  ...-keepalive.ts |   94.34 |    88.28 |     100 |   94.34 | ...42,546-547,586 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  serve-token.ts   |     100 |      100 |     100 |     100 |                   
  server.ts        |   89.95 |    91.58 |   74.82 |   89.95 | ...3443,3474-3475 
  ...ments-root.ts |     100 |      100 |     100 |     100 |                   
  ...-admission.ts |   99.13 |    95.94 |     100 |   99.13 | 308-309           
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...-redaction.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    95.23 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |   93.72 |    77.93 |     100 |   93.72 | ...51,854,867-869 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   93.33 |    86.15 |     100 |   93.33 | ...90-293,336-339 
  ...ssion-gate.ts |   98.48 |    94.44 |     100 |   98.48 | 70                
  ...ace-agents.ts |   66.13 |    70.57 |   92.68 |   66.13 | ...2246,2256-2266 
  ...generation.ts |    95.4 |    82.35 |   66.66 |    95.4 | 55-56,78,92       
  ...-git-state.ts |     100 |    91.93 |    90.9 |     100 | 161,172,202,265   
  ...ace-inputs.ts |     100 |      100 |     100 |     100 |                   
  ...ace-memory.ts |      83 |    74.54 |     100 |      83 | ...30-537,597-604 
  ...ers-status.ts |   98.67 |     81.3 |     100 |   98.67 | 111,139,198,201   
  ...tion-store.ts |    89.9 |    88.88 |   92.59 |    89.9 | ...03-412,423-426 
  ...e-registry.ts |   94.09 |    90.57 |     100 |   94.09 | ...93-594,601-602 
  ...e-remember.ts |   98.31 |    93.33 |     100 |   98.31 | ...47,351-356,397 
  ...te-runtime.ts |   89.85 |    90.69 |     100 |   89.85 | ...06-207,275-296 
  ...oordinator.ts |   91.15 |    86.86 |     100 |   91.15 | ...95,424,455-456 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.91 |    73.04 |   96.29 |   72.91 | ...98-899,906-910 
  ...lls-status.ts |     100 |    95.45 |     100 |     100 | 152               
  ...reconciler.ts |   91.63 |    84.09 |     100 |   91.63 | ...71-273,306-307 
 ...serve/acp-http |   80.68 |    80.23 |   94.53 |   80.68 |                   
  ...r-registry.ts |   96.92 |    94.87 |     100 |   96.92 | 184-187           
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   93.03 |    84.18 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |   76.01 |    76.98 |   93.44 |   76.01 | ...5826,5883-5889 
  index.ts         |   83.61 |     80.6 |   91.22 |   83.61 | ...2465,2551-2552 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  ...ach-budget.ts |     100 |      100 |     100 |     100 |                   
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   98.26 |    88.75 |     100 |   98.26 | 87-88,117         
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   94.06 |    89.09 |     100 |   94.06 | 50,55,134,138-141 
 src/serve/auth    |   86.86 |     79.7 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |    80.57 |   97.61 |   96.35 | ...1358,1453,1519 
  ...w-provider.ts |   44.24 |    74.07 |   71.42 |   44.24 | ...23-284,297,301 
 ...rve/cdp-tunnel |   87.73 |    76.21 |    97.5 |   87.73 |                   
  ...r-emulator.ts |   93.27 |    77.77 |     100 |   93.27 | ...53-256,282-283 
  ...verse-link.ts |      88 |    76.19 |     100 |      88 | ...28-329,420-423 
  ...l-registry.ts |     100 |      100 |     100 |     100 |                   
  cdp-ws.ts        |   76.28 |    61.29 |    87.5 |   76.28 | ...13-217,223-228 
 ...nel/acceptance |    6.12 |    57.89 |   46.15 |    6.12 |                   
  ...helpers.d.mts |       0 |        0 |       0 |       0 | 1                 
  ...e-helpers.mjs |   97.64 |    70.96 |     100 |   97.64 | 22-23             
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-124             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  ...re-server.mjs |       0 |        0 |       0 |       0 | 1-59              
  ...ols-smoke.mjs |       0 |        0 |       0 |       0 | 1-268             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
  ...al-chrome.mjs |       0 |        0 |       0 |       0 | 1-223             
 .../conversations |   86.69 |    78.84 |      93 |   86.69 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |   97.88 |    94.91 |     100 |   97.88 | 64-65,92          
  ...-ownership.ts |   87.33 |    83.58 |   88.46 |   87.33 | ...57-558,601-602 
  ...-workspace.ts |   88.17 |    76.15 |     100 |   88.17 | ...52-554,568-572 
  ...on-journal.ts |   91.65 |    80.76 |     100 |   91.65 | ...44-745,751-753 
  ...on-service.ts |   84.15 |    75.54 |   88.65 |   84.15 | ...3123,3132-3134 
 src/serve/fs      |   87.77 |    82.37 |     100 |   87.77 |                   
  audit.ts         |     100 |    96.29 |     100 |     100 | 211               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |    74.21 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.52 |    89.18 |     100 |   90.52 | 172-180           
  text-cursor.ts   |   88.23 |       90 |     100 |   88.23 | 74-77,92-95       
  ...ile-system.ts |   88.02 |    81.88 |     100 |   88.02 | ...3027,3037-3038 
 src/serve/live    |   76.47 |    70.45 |    90.2 |   76.47 |                   
  discovery.ts     |   85.89 |    82.05 |    91.3 |   85.89 | ...73-579,592-593 
  ...oordinator.ts |   81.93 |    76.17 |   97.01 |   81.93 | ...1340,1372-1374 
  ...-installer.ts |   63.83 |    82.35 |   80.76 |   63.83 | ...45-446,460-475 
  ...oordinator.ts |    76.7 |    67.47 |   85.71 |    76.7 | ...1885,1976-1977 
  ...controller.ts |   67.82 |    79.66 |      75 |   67.82 | ...66-278,287-295 
  ...sk-service.ts |   82.71 |    66.15 |   93.61 |   82.71 | ...1270,1283,1290 
  ...redentials.ts |   96.26 |    93.47 |     100 |   96.26 | 91-94             
  ...me-session.ts |   65.63 |    57.24 |   88.88 |   65.63 | ...2270,2275-2282 
  ...up-context.ts |   94.85 |    77.39 |     100 |   94.85 | ...18,327-330,350 
  types.ts         |     100 |      100 |     100 |     100 |                   
 .../local-control |   82.89 |    90.09 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |    82.75 |   42.85 |   43.58 | ...09-117,130-142 
  ...r-identity.ts |     100 |      100 |     100 |     100 |                   
  service.ts       |    93.4 |       90 |     100 |    93.4 | ...20-222,313-315 
 src/serve/routes  |   86.17 |    81.97 |   95.75 |   86.17 |                   
  a2ui-action.ts   |   96.84 |     88.5 |    87.5 |   96.84 | ...70-272,309-311 
  capabilities.ts  |   98.96 |    95.12 |     100 |   98.96 | 102               
  ...nel-notify.ts |   79.16 |    85.18 |     100 |   79.16 | ...03-104,120-126 
  ...l-webhooks.ts |   93.56 |    84.09 |     100 |   93.56 | ...42,292,332,334 
  daemon-status.ts |   85.71 |    83.33 |     100 |   85.71 | 101-108           
  goals.ts         |   98.94 |    91.17 |     100 |   98.94 | 143               
  health.ts        |   99.09 |    91.42 |     100 |   99.09 | 147               
  live-setup.ts    |   33.33 |     37.5 |      50 |   33.33 | ...18-123,130-135 
  live.ts          |   84.61 |    76.47 |     100 |   84.61 | ...04,106-111,131 
  permission.ts    |   96.03 |    87.87 |     100 |   96.03 | 81-84             
  ...uled-tasks.ts |   87.54 |    83.61 |   95.12 |   87.54 | ...2022,2067-2068 
  ...r-backfill.ts |   98.15 |    94.94 |     100 |   98.15 | ...,706,1011-1012 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |   86.73 |    83.38 |   94.61 |   86.73 | ...7474,7476-7477 
  sse-events.ts    |   87.15 |    85.09 |   94.44 |   87.15 | ...48-959,962,969 
  ...e-sessions.ts |   87.37 |    81.11 |     100 |   87.37 | ...00-502,505-510 
  terminal.ts      |   92.81 |    90.35 |     100 |   92.81 | ...10-313,332-335 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  user-language.ts |   99.24 |    87.87 |     100 |   99.24 | 167               
  ...space-auth.ts |   84.74 |    75.29 |     100 |   84.74 | ...35,349,357-361 
  ...el-control.ts |   86.26 |    78.94 |     100 |   86.26 | ...17-318,339-347 
  ...management.ts |   90.35 |    78.94 |     100 |   90.35 | ...52-553,576-577 
  ...d-contacts.ts |   83.62 |    94.59 |     100 |   83.62 | 123,125-142       
  ...controller.ts |   83.27 |    80.75 |      90 |   83.27 | ...1071,1076,1083 
  ...extensions.ts |   89.92 |     79.5 |   94.36 |   89.92 | ...2588,2633-2634 
  ...-file-read.ts |      91 |    80.91 |     100 |      91 | ...20-621,624-625 
  ...file-write.ts |   89.72 |    79.35 |     100 |   89.72 | ...05,719-726,807 
  ...t-branches.ts |   77.42 |    72.78 |     100 |   77.42 | ...49-654,663-670 
  ...e-git-diff.ts |   97.19 |    89.58 |     100 |   97.19 | 157-158,185-187   
  ...ce-git-log.ts |     100 |       95 |     100 |     100 | 48,73             
  workspace-git.ts |   74.71 |     87.5 |     100 |   74.71 | 83-104            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...al-control.ts |   73.61 |       70 |     100 |   73.61 | ...28,230-236,241 
  ...local-open.ts |     100 |    93.75 |     100 |     100 | 54                
  ...management.ts |   87.41 |    84.31 |     100 |   87.41 | ...1847,1857-1862 
  ...mcp-config.ts |   70.78 |    72.15 |   88.88 |   70.78 | ...10-413,432,442 
  ...cp-control.ts |    73.2 |    67.54 |   85.71 |    73.2 | ...27-633,644-645 
  ...ace-models.ts |   89.84 |    87.35 |     100 |   89.84 | ...27-332,336-338 
  ...ermissions.ts |    77.9 |    72.41 |     100 |    77.9 | ...69-277,298-316 
  ...untime-mcp.ts |   59.52 |    54.54 |   83.33 |   59.52 | ...50-251,265-273 
  ...ce-runtime.ts |     100 |    96.55 |     100 |     100 | 117               
  ...e-settings.ts |      79 |    78.72 |     100 |      79 | ...92-893,919-922 
  ...tup-github.ts |   77.97 |    70.58 |   84.21 |   77.97 | ...46-352,397-398 
  ...ace-skills.ts |   76.41 |    86.11 |     100 |   76.41 | ...29-354,360-394 
  ...ace-status.ts |   82.57 |    74.48 |     100 |   82.57 | ...71-473,477-478 
  ...pace-tools.ts |   75.94 |    69.69 |   66.66 |   75.94 | ...59-164,193-194 
  ...pace-trust.ts |   76.92 |     67.1 |      80 |   76.92 | ...38-343,351-352 
  ...pace-voice.ts |   91.33 |    81.02 |     100 |   91.33 | ...70-673,676-678 
 src/serve/server  |   93.78 |    91.69 |   96.69 |   93.78 |                   
  access-log.ts    |   98.73 |    97.26 |     100 |   98.73 | 119,196           
  ...-timestamp.ts |     100 |      100 |     100 |     100 |                   
  aone-mrs.ts      |   91.76 |    91.35 |   86.66 |   91.76 | ...35-247,293-294 
  ...er-helpers.ts |   63.82 |    78.15 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.87 |       80 |     100 |   97.87 | 27                
  ...r-response.ts |   89.76 |    82.82 |     100 |   89.76 | ...1015,1042-1051 
  fs-factory.ts    |     100 |    95.52 |     100 |     100 | 77,144,200        
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...list-cache.ts |   99.01 |    95.52 |     100 |   99.01 | 184-185           
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |       80 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.13 |    95.09 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |     100 |      100 |     100 |     100 |                   
  ...e-features.ts |   95.39 |     87.5 |     100 |   95.39 | 200-206           
  ...on-archive.ts |   92.46 |    90.49 |   97.61 |   92.46 | ...1150,1191-1192 
  ...ion-export.ts |   98.57 |    90.47 |     100 |   98.57 | 85                
  session-list.ts  |   97.45 |    93.93 |     100 |   97.45 | ...1240,1449-1453 
  ...pr-refresh.ts |   99.37 |    97.01 |     100 |   99.37 | 69-70             
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.18 |    97.65 |     100 |   99.18 | ...95,882,961-963 
 src/serve/voice   |    92.7 |    91.53 |   97.72 |    92.7 |                   
  ...ice-config.ts |   84.81 |       30 |     100 |   84.81 | 91-100,104-105    
  voice-ws.ts      |   91.58 |    93.44 |      96 |   91.58 | ...68,483,521-523 
  ...oordinator.ts |     100 |    98.24 |     100 |     100 | 176               
 ...kspace-service |      90 |    87.33 |   91.66 |      90 |                   
  index.ts         |   89.65 |    86.98 |   90.47 |   89.65 | ...1393,1407,1421 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   92.73 |     89.8 |   98.13 |   92.73 |                   
  ...mandLoader.ts |     100 |       95 |     100 |     100 | 108               
  ...killLoader.ts |   97.19 |    86.48 |     100 |   97.19 | 142,153-154       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   87.09 |    83.07 |     100 |   87.09 | ...35-340,345-350 
  ...omptLoader.ts |   79.55 |    88.65 |   85.71 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.95 |    93.44 |     100 |   97.95 | 186,193-194       
  ...nd-factory.ts |   91.42 |    91.66 |     100 |   91.42 | 128,137-144       
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...ndMetadata.ts |   98.23 |    96.77 |     100 |   98.23 | 83,87             
  commandUtils.ts  |      96 |     90.9 |     100 |      96 | 48                
  ...and-parser.ts |   90.69 |    85.71 |     100 |   90.69 | 63-66             
  ...ionService.ts |     100 |      100 |     100 |     100 |                   
  prompt-stash.ts  |   96.66 |    92.85 |     100 |   96.66 | 34-35             
  ...tree-lease.ts |   92.14 |    92.42 |     100 |   92.14 | ...91-296,329-330 
  ...low-loader.ts |     100 |    96.29 |     100 |     100 | 88                
  setup-github.ts  |    90.8 |    80.95 |     100 |    90.8 | ...49-450,457-458 
  ...-args-file.ts |   93.93 |    91.66 |    87.5 |   93.93 | 208-210,224-230   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.77 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |    90.4 |    87.87 |     100 |    90.4 | ...81,288,353-358 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   91.77 |    87.11 |   97.22 |   91.77 | ...96-898,901-903 
 ...s/housekeeping |   93.03 |    88.57 |      95 |   93.03 |                   
  scheduler.ts     |   93.03 |    88.57 |      95 |   93.03 | ...70-372,424-428 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.94 |    86.86 |   96.29 |   88.94 |                   
  DataProcessor.ts |   88.31 |    86.84 |      95 |   88.31 | ...1368,1372-1379 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.25 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |       85 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.83 |     100 |   97.41 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.27 |    84.61 |     100 |   97.27 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   89.28 |    84.03 |    90.9 |   89.28 |                   
  ...p-prefetch.ts |   98.09 |    94.23 |    87.5 |   98.09 | 50,209,225-226    
  ...reeStartup.ts |   81.51 |    76.11 |     100 |   81.51 | ...14,423,429-432 
 src/test-utils    |   94.62 |    77.41 |   81.81 |   94.62 |                   
  ci-env.ts        |      88 |     62.5 |     100 |      88 | 22-23,28          
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...mised-lock.ts |     100 |      100 |   66.66 |     100 |                   
  ...lot-client.ts |     100 |    66.66 |     100 |     100 | 31,39             
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   71.95 |    79.07 |   73.09 |   71.95 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   77.86 |    75.07 |    77.5 |   77.86 | ...4598,4714-4720 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |    30.3 |      100 |       0 |    30.3 | 26-76             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...AutoUpdate.ts |   93.54 |    94.64 |      90 |   93.54 | 126,131,202-213   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...ractiveUI.tsx |   68.84 |    78.57 |   57.14 |   68.84 | ...65-467,497-502 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  systemInfo.ts    |   95.09 |    90.27 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |   89.28 |    69.04 |     100 |   89.28 | ...09-110,124-125 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
 src/ui/auth       |   73.75 |    70.24 |   61.22 |   73.75 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   74.93 |    78.62 |   71.42 |   74.93 | ...92-902,918,921 
  useAuth.ts       |   94.83 |    75.67 |     100 |   94.83 | ...33-234,253-259 
  ...rSetupFlow.ts |   79.13 |     57.4 |     100 |   79.13 | ...01,424,431-437 
 src/ui/commands   |   84.78 |    84.63 |   91.73 |   84.78 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...or-command.ts |     100 |    95.65 |     100 |     100 | 104,182           
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |    93.1 |    95.23 |     100 |    93.1 | 77-82             
  arenaCommand.ts  |   63.89 |    65.71 |   65.21 |   63.89 | ...01-606,691-699 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    77.41 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 28,62             
  cdCommand.ts     |    92.3 |    82.75 |     100 |    92.3 | ...,94-99,178,187 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...28-129,137-146 
  commands.ts      |   97.45 |    96.72 |     100 |   97.45 | 153-155           
  ...essCommand.ts |   86.91 |    66.66 |     100 |   86.91 | ...22-223,237-240 
  ...astCommand.ts |   84.75 |    76.47 |     100 |   84.75 | ...96-102,130-135 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   73.96 |    74.68 |   83.33 |   73.96 | ...76-609,620-621 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   90.56 |    87.83 |    90.9 |   90.56 | ...75-280,327-334 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 26                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  doctorCommand.ts |   70.16 |    84.61 |      95 |   70.16 | ...29-679,682-816 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   80.95 |       80 |     100 |   80.95 | 49-54,69-72,93-98 
  effort-utils.ts  |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |   52.31 |    56.25 |   69.23 |   52.31 | ...09,277-329,390 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 95,146            
  goalCommand.ts   |     100 |    96.49 |     100 |     100 | 139,192           
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.25 |    65.71 |   85.71 |   81.25 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |    58.5 |    74.07 |      80 |    58.5 | ...21-331,334-343 
  initCommand.ts   |   91.86 |       80 |     100 |   91.86 | 48,83-88          
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   94.63 |    90.66 |     100 |   94.63 | ...25-226,253-263 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,102-103        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   86.28 |    86.29 |     100 |   86.28 | ...1112,1146-1151 
  ...le-command.ts |   87.36 |    85.71 |     100 |   87.36 | 44-49,96-101      
  ...tyle-utils.ts |   94.36 |    96.29 |     100 |   94.36 | 53-56             
  peers-command.ts |     100 |    94.59 |     100 |     100 | 59,72,226,231     
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...ns-command.ts |   98.83 |    81.81 |     100 |   98.83 | 100               
  ...berCommand.ts |     100 |     87.5 |     100 |     100 | 46                
  renameCommand.ts |    89.6 |       90 |     100 |    89.6 | ...72-176,212-219 
  ...oreCommand.ts |   90.96 |    86.04 |     100 |   90.96 | ...41-146,177-178 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |   81.25 |      100 |      50 |   81.25 | 20-22             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   89.47 |       75 |      80 |   89.47 | 54-59             
  skillsCommand.ts |   78.31 |    81.81 |     100 |   78.31 | 37-52,73,92       
  statsCommand.ts  |   90.65 |    76.73 |     100 |   90.65 | ...30-733,825-832 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |   73.04 |     82.3 |      90 |   73.04 | ...20-547,561-565 
  tasksCommand.ts  |   77.33 |    72.13 |     100 |   77.33 | ...46-150,173-178 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...te-command.ts |     100 |    94.11 |     100 |     100 | 74,148            
  vimCommand.ts    |     100 |      100 |     100 |     100 |                   
  voice-command.ts |   93.63 |       88 |     100 |   93.63 | 36,98-103         
  ...owsCommand.ts |   94.38 |    85.29 |     100 |   94.38 | ...78-183,282-287 
 src/ui/components |   74.26 |    80.43 |   79.45 |   74.26 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   95.65 |    66.66 |     100 |   95.65 | 27,52             
  ...TextInput.tsx |    89.2 |    91.13 |     100 |    89.2 | ...92-294,308-310 
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  Composer.tsx     |   94.54 |    66.66 |     100 |   94.54 | ...-76,88,143,158 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  CronPill.tsx     |     100 |    93.75 |     100 |     100 | 19                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.25 |      100 |       0 |   11.25 | 72-609            
  DiffDialog.tsx   |    53.5 |     37.5 |   69.23 |    53.5 | ...32-737,747-760 
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  EffortDialog.tsx |   97.36 |      100 |     100 |   97.36 | 55-56             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...gsDisplay.tsx |     100 |    96.87 |   83.33 |     100 | 69                
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  GoalPill.tsx     |   93.51 |    81.81 |     100 |   93.51 | 37-38,106-109,123 
  Header.tsx       |   98.65 |    94.73 |     100 |   98.65 | 173,175           
  Help.tsx         |   98.33 |       90 |     100 |   98.33 | ...25,382,448-449 
  ...emDisplay.tsx |   79.69 |    67.61 |     100 |   79.69 | ...17,520,523-529 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   86.36 |    83.41 |      80 |   86.36 | ...2242,2263,2366 
  ...Shortcuts.tsx |     100 |       88 |     100 |     100 | 98,119            
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.88 |    96.15 |   46.15 |   95.88 | ...20,523-527,530 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ModelDialog.tsx  |   85.22 |    74.17 |     100 |   85.22 | ...1042,1098,1100 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...yleDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...onsDialog.tsx |    2.13 |      100 |       0 |    2.13 | 62-133,148-1004   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |   91.34 |       70 |     100 |   91.34 | 48-51,63-66,78    
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...ngSpinner.tsx |   67.85 |    85.71 |      50 |   67.85 | 33-50,71,78-79    
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   84.02 |    74.19 |     100 |   84.02 | ...04,410,452-474 
  ...onPreview.tsx |   93.58 |    83.78 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   92.06 |    86.36 |   83.33 |   92.06 | ...,70-72,120-123 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.55 |    73.89 |   69.23 |   71.55 | ...1252,1258-1259 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      96 |    83.33 |     100 |      96 | 27                
  ...iewDialog.tsx |   97.77 |    87.67 |     100 |   97.77 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-171             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.9 |    86.88 |     100 |    93.9 | ...20,282,302-304 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   96.01 |    88.05 |     100 |   96.01 | ...29-130,295-297 
  ...inalImage.tsx |     100 |    93.93 |     100 |     100 | 75,129            
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    83.33 |     100 |     100 | 72-87             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   97.22 |    85.71 |     100 |   97.22 | 25                
  ...s-helpers.tsx |   66.25 |    81.25 |      50 |   66.25 | 25-32,46-53,62-72 
 ...nts/agent-view |   62.54 |    79.84 |    62.5 |   62.54 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |     100 |    81.81 |     100 |     100 | 82                
  ...tComposer.tsx |   84.13 |    81.25 |   66.66 |   84.13 | ...19-121,171-195 
  AgentFooter.tsx  |   15.38 |      100 |       0 |   15.38 | 28-65             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.51 |    70.53 |   60.86 |   45.51 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.77 |      100 |       0 |    9.77 | 27-166            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   85.86 |     85.1 |   92.98 |   85.86 |                   
  ...sksDialog.tsx |   82.66 |    83.09 |   85.71 |   82.66 | ...1854,1977-1983 
  ...TasksPill.tsx |   78.84 |    94.28 |     100 |   78.84 | 64,109-129        
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 258               
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.32 |    76.78 |   83.33 |   84.32 |                   
  ...gerDialog.tsx |   82.15 |    76.08 |     100 |   82.15 | ...91-198,258,260 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.26 |       85 |   58.82 |   46.26 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.26 |    88.37 |   66.66 |   75.26 | ...53,174,203-209 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   71.92 |    68.21 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.44 |   83.33 |   75.49 | ...77,782-783,820 
  SourcesTab.tsx   |   71.67 |    70.47 |   77.77 |   71.67 | ...28,547,621-633 
 ...tensions/views |    50.7 |    52.38 |   20.83 |    50.7 |                   
  ...tionsView.tsx |   73.75 |    56.36 |   66.66 |   73.75 | ...30,353,369-374 
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...98-405,408-420 
  ...etailView.tsx |    9.24 |      100 |       0 |    9.24 | 40-67,70-163      
 ...mponents/hooks |   87.11 |    81.37 |   91.89 |   87.11 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   40.91 |    63.44 |   70.58 |   40.91 |                   
  ...ealthPill.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   32.09 |    26.19 |      40 |   32.09 | ...12,914,927-933 
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   53.94 |    73.51 |   57.14 |   53.94 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   62.83 |       60 |   33.33 |   62.83 | ...87-296,307-332 
  ...rListStep.tsx |   88.53 |    81.25 |     100 |   88.53 | ...64,170,175-180 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   90.73 |    87.91 |   86.53 |   90.73 |                   
  ...orMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ionDialog.tsx |   89.23 |     84.9 |   81.81 |   89.23 | ...75,593,611-613 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    94.73 |     100 |     100 | ...43,289,402,432 
  ...onMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...nMessages.tsx |   92.35 |    96.07 |   76.92 |   92.35 | ...59-361,364-367 
  DiffRenderer.tsx |   93.17 |    86.02 |     100 |   93.17 | ...07,235-236,302 
  ...tsDisplay.tsx |   97.08 |    77.77 |     100 |   97.08 | 95,97,106         
  ...usMessage.tsx |   81.73 |     65.9 |      75 |   81.73 | ...10-214,222,245 
  ...tsDisplay.tsx |   95.52 |    88.31 |     100 |   95.52 | ...40,142,175-180 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   21.05 |      100 |       0 |   21.05 | 23-39             
  ...sMessages.tsx |   59.04 |       50 |    37.5 |   59.04 | ...21-126,147-159 
  ...ryMessage.tsx |   13.63 |      100 |       0 |   13.63 | 23-64             
  ...onMessage.tsx |   91.87 |    82.51 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |    95.1 |    90.11 |     100 |    95.1 | ...1096,1141-1143 
 ...ponents/shared |   86.36 |    82.29 |    86.6 |   86.36 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.93 |    87.85 |      90 |   84.93 | ...82-583,700-701 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   90.37 |    82.85 |   18.18 |   90.37 | ...60-63,65,73-76 
  StaticRender.tsx |     100 |      100 |     100 |     100 |                   
  TextInput.tsx    |    80.8 |    67.79 |      80 |    80.8 | ...36-240,252-258 
  ...ontroller.tsx |     100 |    81.81 |     100 |     100 | 59-62             
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |   91.49 |    86.66 |   83.33 |   91.49 | ...18-846,859,959 
  text-buffer.ts   |   85.98 |    81.78 |   97.91 |   85.98 | ...2664,2762-2763 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |    4.07 |      100 |       0 |    4.07 |                   
  ...gerDialog.tsx |    4.07 |      100 |       0 |    4.07 | 78-136,139-667    
 ...ents/subagents |   30.87 |        0 |       0 |   30.87 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |    12.1 |      100 |       0 |    12.1 | 33-190            
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   10.95 |      100 |       0 |   10.95 | ...1,56-57,60-102 
 ...bagents/create |   18.06 |     62.5 |    8.33 |   18.06 |                   
  ...ionWizard.tsx |    7.28 |      100 |       0 |    7.28 | 34-299            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    4.26 |      100 |       0 |    4.26 | 27-331            
  ...tionInput.tsx |   72.41 |     62.5 |     100 |   72.41 | ...32-139,163-170 
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |    21.6 |    59.52 |   27.27 |    21.6 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |   35.61 |    59.52 |     100 |   35.61 | ...21-433,438-440 
  ...iewerStep.tsx |   13.72 |      100 |       0 |   13.72 | 18-73             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...mponents/views |   69.22 |    71.81 |   61.11 |   69.22 |                   
  ContextUsage.tsx |   71.49 |    64.86 |      80 |   71.49 | ...30-436,473-567 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   88.05 |       75 |     100 |   88.05 | 70-77             
  McpStatus.tsx    |   92.01 |     73.8 |     100 |   92.01 | ...36,175-177,262 
  SkillsList.tsx   |   20.51 |      100 |       0 |   20.51 | 17-20,27-57       
  ToolsList.tsx    |      75 |    81.81 |     100 |      75 | 39-42,59-67       
 src/ui/contexts   |   86.86 |    82.77 |   86.66 |   86.86 |                   
  ...ewContext.tsx |      93 |    90.74 |      80 |      93 | ...78-282,368-378 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   96.42 |    91.66 |     100 |   96.42 | 47-48             
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |    79.56 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 157-158           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 238-239           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   89.51 |    76.92 |   95.65 |   89.51 |                   
  ...ui-adapter.ts |   89.51 |    76.92 |   95.65 |   89.51 | ...59,877-878,964 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   86.86 |    84.39 |    88.7 |   86.86 |                   
  ...dProcessor.ts |   85.53 |    85.13 |     100 |   85.53 | ...-970,1017-1018 
  ...ention-ref.ts |   97.72 |       84 |     100 |   97.72 | 65                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...completion.ts |     100 |    95.45 |     100 |     100 | 95                
  ...ention-ref.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.51 |    73.58 |     100 |   94.51 | ...97-298,303-304 
  ...dProcessor.ts |   86.86 |    71.95 |   83.33 |   86.86 | ...1541,1570-1574 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...llm-stream.ts |   88.92 |    85.26 |   85.18 |   88.92 | ...6312,6314,6420 
  ...ng-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...le-command.ts |   97.33 |    83.33 |     100 |   97.33 | 49-50             
  ...oice-input.ts |   92.41 |    82.08 |   66.66 |   92.41 | ...12,514-515,670 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   67.77 |    42.85 |   33.33 |   67.77 | ...27,138,140-141 
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      52 |    63.63 |     100 |      52 | ...59,67-70,76-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |   86.44 |    88.48 |     100 |   86.44 | ...14-515,525-541 
  ...ifications.ts |   87.82 |    96.77 |     100 |   87.82 | 138-152           
  ...tIndicator.ts |   88.28 |    81.57 |     100 |   88.28 | ...66,175,179-187 
  ...waySummary.ts |   96.26 |       75 |     100 |   96.26 | 126-128,170       
  ...ndTaskView.ts |   94.89 |    77.55 |     100 |   94.89 | 164-168,257,263   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   96.03 |    88.75 |     100 |   96.03 | ...04-205,362-365 
  ...ompletion.tsx |    97.1 |    87.23 |     100 |    97.1 | ...26-327,337-338 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   96.64 |    91.37 |     100 |   96.64 | ...37-238,242-243 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   78.26 |       50 |     100 |   78.26 | ...2,75-79,96-104 
  ...eteCommand.ts |   89.52 |    90.69 |     100 |   89.52 | ...98-106,114-115 
  ...ialogClose.ts |   39.47 |    41.93 |     100 |   39.47 | ...99-205,212-217 
  useDiffData.ts   |   11.62 |      100 |       0 |   11.62 | 44-87             
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.64 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |   93.72 |    92.98 |     100 |   93.72 | ...87-291,314-320 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |    63.9 |    76.47 |   66.66 |    63.9 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |    93.33 |     100 |     100 | 62                
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |    98.5 |    98.91 |     100 |    98.5 | 174-177           
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |   22.58 |      100 |      50 |   22.58 | 11-32,44-85       
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   10.52 |      100 |       0 |   10.52 | 36-75             
  ...cpApproval.ts |   93.12 |    86.11 |     100 |   93.12 | ...24-127,139-140 
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |   83.14 |    78.57 |     100 |   83.14 | 54-63,74-79       
  ...ssageQueue.ts |     100 |    95.19 |     100 |     100 | ...53,289,360,375 
  ...delCommand.ts |     100 |       96 |     100 |     100 | 61                
  ...ouseEvents.ts |   94.89 |       95 |   83.33 |   94.89 | 78-82             
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   89.16 |     82.6 |     100 |   89.16 | ...77,329-339,419 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   89.13 |     86.9 |     100 |   89.13 | ...61-463,496-506 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   96.51 |    90.19 |     100 |   96.51 | 279,306-311       
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.19 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.26 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |   85.48 |    58.33 |     100 |   85.48 | 22-28,40,71       
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.79 |    85.33 |   94.73 |   82.79 | ...86-688,696-732 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.32 |    93.93 |     100 |   97.32 | ...18-422,518-525 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...mInProcess.ts |   27.35 |       80 |      25 |   27.35 | ...82-183,186-188 
  ...tification.ts |     100 |     87.5 |     100 |     100 | 50                
  ...alProgress.ts |   67.34 |    58.82 |   66.66 |   67.34 | 52-53,61-68,79-85 
  ...rminalSize.ts |     100 |      100 |     100 |     100 |                   
  ...emeCommand.ts |    79.2 |    35.29 |     100 |    79.2 | ...15-116,120-121 
  useTimer.ts      |   97.59 |       95 |     100 |   97.59 | 17-18             
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |    90.47 |     100 |     100 | 112,134           
  useTurnDiffs.ts  |   95.12 |    78.57 |     100 |   95.12 | 133-134,156-157   
  ...elcomeBack.ts |   87.36 |     90.9 |     100 |   87.36 | ...,94-96,114-115 
  ...reeSession.ts |   93.75 |       70 |     100 |   93.75 | 47-48,72          
  vim.ts           |      74 |    67.56 |   69.23 |      74 | ...1854-1861,1869 
 src/ui/layouts    |   91.25 |    89.47 |     100 |   91.25 |                   
  ...AppLayout.tsx |   90.99 |     87.5 |     100 |   90.99 | 61-63,111-116,152 
  ...AppLayout.tsx |   91.66 |    92.85 |     100 |   91.66 | 75-80             
 src/ui/model      |   97.91 |    98.36 |     100 |   97.91 |                   
  ...ggregation.ts |     100 |      100 |     100 |     100 |                   
  ...ming-model.ts |   97.43 |    97.72 |     100 |   97.43 | 261-265           
 src/ui/models     |   80.72 |       80 |   71.42 |   80.72 |                   
  ...ableModels.ts |   80.72 |       80 |   71.42 |   80.72 | ...,61-71,125-127 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/opentui    |   63.88 |    81.17 |   77.37 |   63.88 |                   
  ...plain-text.ts |     100 |    89.47 |     100 |     100 | 73,134            
  ...een-reader.ts |     100 |    88.57 |     100 |     100 | 79-83,198,211     
  ...t-tool-run.ts |   97.26 |     62.5 |   66.66 |   97.26 | 116,130           
  clipboard.ts     |     100 |    88.88 |     100 |     100 | 47                
  ...ds-context.ts |   96.66 |      100 |   38.88 |   96.66 | 159,161           
  ...s-dispatch.ts |   80.74 |    84.65 |   74.07 |   80.74 | ...-987,1010-1021 
  ...nds-output.ts |     100 |      100 |     100 |     100 |                   
  ...s-registry.ts |   98.82 |    89.58 |     100 |   98.82 | 180-182           
  dialog-data.ts   |   82.48 |    72.08 |   89.65 |   82.48 | ...1291,1295-1325 
  ...ogs-arena.tsx |       0 |      100 |     100 |       0 | 3-818             
  dialogs-auth.tsx |   76.17 |    66.85 |      84 |   76.17 | ...41,957,966-982 
  ...s-confirm.tsx |    54.3 |     62.5 |   68.75 |    54.3 | ...77-535,547-592 
  dialogs-core.ts  |     100 |    94.44 |     100 |     100 | 179,190           
  ...xtensions.tsx |   89.06 |     82.7 |   78.57 |   89.06 | ...33-636,659-661 
  dialogs-mcp.tsx  |   29.85 |    98.71 |      90 |   29.85 | 295,320-872       
  ...ry-status.tsx |   22.58 |       80 |   28.57 |   22.58 | ...11-154,159-175 
  dialogs-misc.tsx |   12.02 |      100 |      20 |   12.02 | ...47-655,658-712 
  ...ogs-model.tsx |   45.95 |    96.77 |   76.92 |   45.95 | ...72-173,243-408 
  ...ogs-modes.tsx |   64.62 |    87.87 |   77.77 |   64.62 | 124-164,178-225   
  ...rmissions.tsx |   18.65 |    89.28 |   83.33 |   18.65 | ...58-159,201-734 
  ...-settings.tsx |   20.25 |    84.61 |    90.9 |   20.25 | ...71,239,254-870 
  ...gs-shared.tsx |   84.61 |    80.55 |   53.84 |   84.61 | ...51,453-456,472 
  ...ts-skills.tsx |     5.8 |      100 |       0 |     5.8 | ...04-381,391-458 
  ...ogs-theme.tsx |    30.8 |    88.88 |      75 |    30.8 | 148-326           
  diff-render.ts   |   97.87 |    95.23 |     100 |   97.87 | 89-90             
  early-input.ts   |   94.23 |    73.68 |   71.42 |   94.23 | 85,88-89          
  event-adapter.ts |      91 |    74.54 |   88.88 |      91 | ...36,721,740-748 
  exit-guard.ts    |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   95.45 |     87.5 |     100 |   95.45 | 56                
  ...rust-gate.tsx |   98.55 |    96.55 |      75 |   98.55 | 190-191           
  help-content.ts  |   98.11 |    85.41 |     100 |   98.11 | 226-227,316,318   
  help-overlay.tsx |       0 |      100 |     100 |       0 | 3-281             
  input-history.ts |     100 |    84.21 |     100 |     100 | 43-45,58          
  ...prompt-key.ts |     100 |      100 |     100 |     100 |                   
  ...ompt-model.ts |   85.41 |    87.81 |   84.09 |   85.41 | ...1127,1130-1140 
  input-prompt.tsx |   82.58 |    70.48 |      28 |   82.58 | ...1076,1090-1092 
  ...projection.ts |   81.16 |    62.66 |   86.66 |   81.16 | ...1077-1082,1084 
  key-map.ts       |     100 |      100 |     100 |     100 |                   
  ...egotiation.ts |   94.82 |    73.68 |     100 |   94.82 | 142-144           
  link-click.ts    |     100 |    82.97 |     100 |     100 | ...49,152,185-189 
  ...sion-model.ts |   85.89 |    85.88 |     100 |   85.89 | ...47,502,602,658 
  live-session.ts  |   89.34 |    84.67 |   72.72 |   89.34 | ...53,555,572-582 
  live-turn.ts     |    78.3 |    73.68 |      75 |    78.3 | ...26,331,335-336 
  markdown-heal.ts |     100 |      100 |     100 |     100 |                   
  ...rogressive.ts |   85.41 |    83.33 |   71.42 |   85.41 | 53,60-62,89-91    
  messages.tsx     |   58.82 |     79.1 |   73.68 |   58.82 | ...93-409,417-474 
  mouse-caret.ts   |     100 |      100 |     100 |     100 |                   
  mouse-hit.ts     |     100 |      100 |     100 |     100 |                   
  mouse-rows.ts    |     100 |      100 |     100 |     100 |                   
  ...-scrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...app-shell.tsx |   96.41 |    91.08 |   73.33 |   96.41 | ...77-379,444-446 
  ...tui-assets.ts |     100 |      100 |     100 |     100 |                   
  ...log-mount.tsx |   72.48 |    90.76 |   28.57 |   72.48 | ...64,484,559-575 
  ...-boundary.tsx |   95.91 |      100 |   85.71 |   95.91 | 82-83             
  opentui-host.ts  |   97.53 |    94.73 |   97.43 |   97.53 | ...04,216,236-237 
  ...ui-runtime.ts |   93.57 |    80.95 |     100 |   93.57 | 97-101,152,173    
  osc8-parity.ts   |     100 |      100 |     100 |     100 |                   
  ...-selection.ts |     100 |    96.96 |     100 |     100 | 84                
  ...me-session.ts |   72.34 |    77.77 |   57.14 |   72.34 | 40,44,59-63,76-81 
  ...ompaction.tsx |   76.19 |      100 |   66.66 |   76.19 | 106-130           
  ...wind-model.ts |    94.7 |    87.23 |     100 |    94.7 | 245-252,254       
  ...on-rewind.tsx |       0 |      100 |     100 |       0 | 3-391             
  ...ion-switch.ts |   74.74 |       50 |     100 |   74.74 | ...92-401,411-414 
  ...h-dispatch.ts |   56.86 |    38.88 |      50 |   56.86 | ...13-126,130-137 
  slash-gateway.ts |     100 |    86.36 |    90.9 |     100 | 56,72,100         
  ...pentui-ui.tsx |   35.19 |    61.53 |      50 |   35.19 | ...97,403-409,435 
  sticky-todos.ts  |     100 |      100 |     100 |     100 |                   
  text-batcher.ts  |     100 |      100 |     100 |     100 |                   
  theme-auto.ts    |     100 |      100 |     100 |     100 |                   
  theme-parity.ts  |   98.68 |    82.35 |     100 |   98.68 | 87                
  theme.ts         |    97.7 |    96.55 |     100 |    97.7 | 202-204           
  ...pt-adapter.ts |   89.56 |       75 |   33.33 |   89.56 | ...50-152,172-173 
  ...ript-view.tsx |       0 |      100 |     100 |       0 | 3-516             
 src/ui/selection  |   93.56 |    86.19 |     100 |   93.56 |                   
  screen-buffer.ts |   94.73 |    66.66 |     100 |   94.73 | 51-52             
  ...ion-coords.ts |     100 |      100 |     100 |     100 |                   
  ...ction-span.ts |   93.81 |     92.1 |     100 |   93.81 | ...1,45-46,99-100 
  ...tion-state.ts |     100 |      100 |     100 |     100 |                   
  ...ction-text.ts |   93.85 |    93.44 |     100 |   93.85 | 30-34,130-131     
  ...selection.tsx |   91.88 |    78.57 |     100 |   91.88 | ...16-417,446-447 
 src/ui/state      |      95 |    81.81 |     100 |      95 |                   
  extensions.ts    |      95 |    81.81 |     100 |      95 | 69-70,89          
 src/ui/themes     |    98.5 |    73.17 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.14 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |     86.2 |     100 |   88.59 | ...57-261,266-270 
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   88.68 |    84.14 |     100 |   88.68 | ...83-392,397-398 
  theme.ts         |     100 |    38.02 |     100 |     100 | ...34-449,457-461 
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   88.07 |    86.06 |   96.15 |   88.07 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   80.07 |     75.6 |     100 |   80.07 | ...70,274,332-333 
  ...wnDisplay.tsx |   92.87 |     93.5 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   93.63 |    81.77 |   95.23 |   93.63 | ...47-750,803-808 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |    96.7 |     87.5 |     100 |    96.7 | 170-177,278       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |    52.9 |    74.15 |    92.3 |    52.9 | ...29,632-641,644 
  commandUtils.ts  |   98.61 |    93.27 |     100 |   98.61 | 189,217-218,424   
  ...ssion-text.ts |   90.54 |    71.42 |     100 |   90.54 | 66-68,80,82,90-91 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  ...coalescing.ts |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   94.87 |    98.24 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   94.44 |    96.29 |     100 |   94.44 | 32-34             
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    95.65 |     100 |     100 | 45,151            
  historyUtils.ts  |   96.07 |    97.14 |     100 |   96.07 | 104-107           
  ...mage-parts.ts |   97.75 |    94.73 |     100 |   97.75 | 82-83             
  inline-math.ts   |   98.48 |    95.23 |     100 |   98.48 | 129-130           
  input-mouse.ts   |     100 |    85.71 |     100 |     100 | 48,93             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |   68.81 |       75 |   66.66 |   68.81 | ...27-132,160-161 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  list-mouse.ts    |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |       95 |     100 |     100 | 81                
  ...nUtilities.ts |   98.72 |    94.36 |     100 |   98.72 | 145-146           
  ...t-position.ts |     100 |     87.5 |     100 |     100 | 85                
  ...geRenderer.ts |   86.51 |    70.16 |   95.12 |   86.51 | ...1286,1326-1332 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.45 |     100 |     100 | 84                
  mouse-hit.ts     |     100 |     90.9 |     100 |     100 | 62-64             
  mouse.ts         |   92.85 |    74.19 |     100 |   92.85 | ...38,145,149-152 
  osc8.ts          |   91.33 |    79.03 |     100 |   91.33 | ...73,273,277-278 
  ...red-height.ts |   98.38 |    97.14 |     100 |   98.38 | 195-197           
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |     100 |      100 |     100 |     100 |                   
  ...storyUtils.ts |   84.37 |    80.98 |     100 |   84.37 | ...03-625,759-760 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |      90 |     87.5 |     100 |      90 | 39-44             
  ...ataService.ts |   93.17 |     79.1 |     100 |   93.17 | ...14,227,254-256 
  suggestions.ts   |     100 |      100 |     100 |     100 |                   
  ...izedOutput.ts |   95.19 |      100 |   88.88 |   95.19 | 121-126           
  ...nal-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...e-renderer.ts |   90.24 |    82.66 |     100 |   90.24 | ...04,506-508,631 
  ...ize-reflow.ts |     100 |     92.3 |     100 |     100 | 57,62,209,217,347 
  ...wOptimizer.ts |     100 |    94.73 |     100 |     100 | 35,78             
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   98.75 |    95.96 |     100 |   98.75 | 292-293,488-489   
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   95.81 |     92.3 |     100 |   95.81 | ...09-210,243-244 
  ...isplay-map.ts |     100 |      100 |     100 |     100 |                   
  updateCheck.ts   |     100 |    92.75 |     100 |     100 | 227-239,331       
  windowTitle.ts   |   96.55 |    94.73 |     100 |   96.55 | 56-57             
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |   75.03 |     60.1 |   94.59 |   75.03 |                   
  collect.ts       |   71.27 |    65.81 |      96 |   71.27 | ...90-633,655-656 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   80.42 |    51.35 |     100 |   80.42 | ...59-364,376-378 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |     100 |      100 |     100 |     100 |                   
 ...ort/formatters |   52.92 |    47.22 |   71.42 |   52.92 |                   
  html.ts          |   84.61 |       50 |     100 |   84.61 | ...53,57-58,62-63 
  json.ts          |     100 |      100 |     100 |     100 |                   
  jsonl.ts         |   82.45 |     37.5 |     100 |   82.45 | ...48,50-51,65-66 
  markdown.ts      |   36.32 |    47.05 |      50 |   36.32 | ...16-219,233-295 
 src/ui/voice      |   81.24 |    79.78 |   81.69 |   81.24 |                   
  ...d-recorder.ts |     6.2 |      100 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |   84.61 |    93.33 |   57.14 |   84.61 | ...16-117,131-136 
  ...me-session.ts |   91.09 |     92.1 |     100 |   91.09 | ...99,305,316-319 
  sox-recorder.ts  |    92.7 |    71.87 |     100 |    92.7 | ...34-135,153-154 
  ...ailability.ts |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |     100 |      100 |     100 |     100 |                   
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  ...e-recorder.ts |   88.29 |    67.74 |   81.81 |   88.29 | ...,98-99,112,115 
  voice-refine.ts  |     100 |    93.33 |     100 |     100 | 92                
  ...ream-retry.ts |   86.79 |       70 |     100 |   86.79 | 16-18,48-49,59-60 
  ...am-session.ts |   88.02 |    66.66 |   84.61 |   88.02 | ...26,343-345,363 
  ...ranscriber.ts |     100 |      100 |     100 |     100 |                   
 src/utils         |   92.31 |    90.01 |   96.11 |   92.31 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.14 |     100 |   97.36 | ...09-210,214-215 
  apiPreconnect.ts |   96.74 |    94.59 |     100 |   96.74 | 167-170           
  ...ol-call-id.ts |   84.61 |       60 |     100 |   84.61 | 26-27,37-38       
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  ...-api-error.ts |     100 |    96.42 |     100 |     100 | 14                
  cleanup.ts       |   84.05 |    94.11 |      80 |   84.05 | 80,111-121        
  ...y-identity.ts |   89.38 |    85.32 |     100 |   89.38 | ...48-449,456-457 
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 50-52,58          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  errors.ts        |   97.56 |    94.64 |     100 |   97.56 | 69-70,304-305     
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...on-mention.ts |   88.48 |     82.6 |     100 |   88.48 | ...56-160,164-168 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.81 |    94.69 |     100 |   97.81 | ...03,420-421,466 
  ...projection.ts |   95.27 |    95.58 |     100 |   95.27 | 140-145           
  jsonc-editor.ts  |   93.18 |    92.66 |     100 |   93.18 | ...80-381,384-385 
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   86.64 |    77.02 |     100 |   86.64 | ...03-304,335-345 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   96.05 |    93.79 |     100 |   96.05 | ...,85-86,334,443 
  ...-part-list.ts |     100 |      100 |     100 |     100 |                   
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  processUtils.ts  |    92.3 |       80 |     100 |    92.3 | 45-46             
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   95.87 |    89.28 |     100 |   95.87 | 103-105,131       
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.44 |    97.36 |     100 |   99.44 | 121               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  shell-args.ts    |     100 |      100 |     100 |     100 |                   
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |   76.66 |       90 |   83.33 |   76.66 | 93-99             
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   76.47 |       25 |     100 |   76.47 | 13,17,23-24       
  ...on-handler.ts |    73.8 |       75 |     100 |    73.8 | 17-18,25-26,67-73 
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |    66.66 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   94.35 |    94.11 |     100 |   94.35 |                   
  cleanup.ts       |   92.59 |    93.75 |     100 |   92.59 | ...02-205,209-211 
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  throttledOnce.ts |   95.95 |    93.93 |     100 |   95.95 | 77-78,153-154     
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   89.05 |    87.52 |   90.71 |   89.05 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |    90.4 |    84.86 |   94.02 |    90.4 |                   
  ...transcript.ts |   88.86 |    81.05 |     100 |   88.86 | ...93,701,707-711 
  ...ent-resume.ts |   85.43 |    78.13 |    85.1 |   85.43 | ...1845-1849,1852 
  ...ound-tasks.ts |   95.19 |    90.75 |   96.42 |   95.19 | ...1889,1897-1898 
  forkedAgent.ts   |   95.91 |    87.12 |   94.44 |   95.91 | ...76-478,601,728 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   94.64 |    88.67 |   95.71 |   94.64 | ...1676,1690-1692 
  ...w-snapshot.ts |   75.58 |    72.47 |    87.5 |   75.58 | ...24,448,455-457 
  worktree-pin.ts  |     100 |    88.23 |     100 |     100 | 78,99             
 src/agents/arena  |   76.87 |    68.43 |   78.94 |   76.87 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |    75.8 |    65.46 |   78.57 |    75.8 | ...1879,1885-1886 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   77.78 |    86.68 |   75.86 |   77.78 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   92.14 |    90.74 |   97.05 |   92.14 | ...38-539,673-679 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   93.49 |    87.53 |   91.66 |   93.49 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  ...-test-mock.ts |   98.82 |    66.66 |   58.33 |   98.82 | 85                
  agent-core.ts    |   90.33 |    80.45 |   81.25 |   90.33 | ...2628,2674-2676 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.67 |       90 |   83.33 |   93.67 | ...13-514,517-518 
  ...nteractive.ts |   83.48 |    85.13 |      80 |   83.48 | ...35,537,544,549 
  ...statistics.ts |   98.29 |    82.55 |     100 |   98.29 | 141,165,206,239   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ool-policy.ts |   98.38 |      100 |    92.3 |   98.38 | 85-86             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...-scheduler.ts |   97.43 |    96.36 |     100 |   97.43 | 128-130           
  ...ow-journal.ts |   92.78 |    78.12 |     100 |   92.78 | ...49-150,192-194 
  ...ta-literal.ts |   95.96 |    92.68 |     100 |   95.96 | ...78-379,395-396 
  ...chestrator.ts |   93.87 |     90.5 |     100 |   93.87 | ...2225,2318-2321 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   94.08 |     85.4 |   95.65 |   94.08 | ...68,435,455-458 
  ...ow-sandbox.ts |    97.4 |    89.37 |     100 |    97.4 | ...1846,1852-1853 
  ...flow-saved.ts |    96.7 |     93.9 |     100 |    96.7 | 153-154,261-264   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 170-171,270       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   86.27 |    86.86 |   91.89 |   86.27 |                   
  TeamManager.ts   |   80.54 |    85.41 |   84.37 |   80.54 | ...2123,2146-2147 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   96.02 |     87.5 |     100 |   96.02 | 352-358           
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   89.84 |    84.23 |     100 |   89.84 | ...1013,1057-1058 
  team-events.ts   |   86.84 |      100 |   83.33 |   86.84 | 151-155           
  teamHelpers.ts   |   92.99 |    94.52 |      95 |   92.99 | ...29-330,415-425 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   95.28 |    95.31 |   98.24 |   95.28 |                   
  ...on-harness.ts |   96.49 |       85 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |     100 |    96.96 |     100 |     100 | 189,198           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   86.63 |    88.95 |   79.11 |   86.63 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   85.28 |     88.3 |    77.2 |   85.28 | ...9865,9869-9871 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...ver-config.ts |   97.29 |      100 |   83.33 |   97.29 | 48-49             
  models.ts        |     100 |      100 |     100 |     100 |                   
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  storage.ts       |   96.05 |    93.43 |   89.47 |   96.05 | ...34-735,738-739 
 ...nfirmation-bus |   98.27 |    97.22 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.14 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   92.79 |    88.68 |   94.05 |   92.79 |                   
  ...on-restore.ts |   88.23 |    85.41 |     100 |   88.23 | ...60,63-64,67-68 
  baseLlmClient.ts |    88.4 |    83.33 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |    92.1 |    88.04 |   92.23 |    92.1 | ...4966,5064-5065 
  ...tGenerator.ts |   87.45 |    88.09 |   88.88 |   87.45 | ...09-510,555-561 
  ...lScheduler.ts |   90.22 |    84.89 |   94.78 |   90.22 | ...6545,6573-6589 
  ...entContext.ts |   96.67 |    90.25 |   96.77 |   96.67 | ...48,450-451,518 
  geminiChat.ts    |     100 |      100 |     100 |     100 |                   
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  genai-compat.ts  |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |       96 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  ...ream-error.ts |     100 |      100 |     100 |     100 |                   
  llm-chat.ts      |   95.32 |    90.98 |   96.66 |   95.32 | ...5891,5936-5937 
  llm-request.ts   |     100 |      100 |     100 |     100 |                   
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...lay-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...dispatcher.ts |     100 |      100 |     100 |     100 |                   
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   93.54 |    83.33 |      50 |   93.54 | 46-47             
  output-styles.ts |     100 |      100 |     100 |     100 |                   
  ...on-helpers.ts |   95.38 |    84.31 |     100 |   95.38 | ...87,215,217-218 
  ...issionFlow.ts |   98.98 |    96.96 |     100 |   98.98 | 109               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   94.89 |    88.54 |     100 |   94.89 | ...51-252,297-298 
  prompts.ts       |   94.11 |    91.47 |   86.36 |   94.11 | ...1311,1514-1515 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |    97.9 |    81.15 |   88.23 |    97.9 | 117,124-125,130   
  stream-guards.ts |   91.16 |    93.33 |     100 |   91.16 | ...89,218-229,294 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |     92.1 |     100 |     100 | 87,122-139        
  ...-arguments.ts |     100 |      100 |     100 |     100 |                   
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...tion-guard.ts |   90.38 |    94.73 |     100 |   90.38 | 83-87             
  ...allIdUtils.ts |   98.81 |    91.22 |     100 |   98.81 | 43,52             
  ...okTriggers.ts |   99.45 |     92.5 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.21 |    94.69 |     100 |   99.21 | 787-788,857       
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   96.62 |    89.21 |   97.43 |   96.62 |                   
  ...tGenerator.ts |   97.71 |    89.13 |   97.43 |   97.71 | ...1539,1568,1579 
  converter.ts     |   96.19 |    89.25 |     100 |   96.19 | ...1334,1555-1557 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 ...tent-generator |   89.24 |    72.72 |   94.11 |   89.24 |                   
  index.ts         |     100 |    85.71 |     100 |     100 | 51                
  ...-generator.ts |   87.54 |    71.42 |   93.75 |   87.54 | ...93-294,356-362 
 ...ntentGenerator |   95.78 |    90.51 |   96.22 |   95.78 |                   
  ...e-snapshot.ts |   97.39 |    89.65 |     100 |   97.39 | ...,49-50,151-152 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   95.38 |    90.14 |   95.12 |   95.38 | ...1345-1346,1374 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   92.62 |    91.33 |   96.39 |   92.62 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   91.54 |    90.66 |   96.87 |   91.54 | ...1994,2163-2178 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   76.19 |    88.88 |      50 |   76.19 | 44-53,90-94       
  ...tGenerator.ts |      70 |    73.33 |     100 |      70 | ...07-112,121-127 
  pipeline.ts      |   96.46 |     91.3 |     100 |   96.46 | ...1236-1237,1368 
  ...ix-caching.ts |   95.23 |    92.85 |     100 |   95.23 | 45-46,69-70       
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   92.11 |    92.25 |     100 |   92.11 | ...21-522,542-545 
  ...kingParser.ts |     100 |    96.96 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.25 |    92.07 |   98.64 |   97.25 |                   
  dashscope.ts     |   98.42 |    95.27 |   96.55 |   98.42 | ...51-752,894-895 
  deepseek.ts      |   95.27 |    90.56 |     100 |   95.27 | ...52-153,166-167 
  default.ts       |    98.9 |    96.29 |     100 |    98.9 | 178,307           
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |      90 |    76.31 |     100 |      90 | ...,72-73,173-175 
 src/extension     |   89.29 |    86.66 |   93.68 |   89.29 |                   
  ...ive-safety.ts |    97.9 |     92.8 |     100 |    97.9 | 235-236,313-316   
  ...-converter.ts |   80.55 |    73.66 |     100 |   80.55 | ...1133,1179-1180 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |     100 |      100 |     100 |     100 |                   
  ...git-client.ts |     100 |      100 |     100 |     100 |                   
  ...redentials.ts |   95.33 |    89.47 |     100 |   95.33 | ...21-122,173-175 
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   93.05 |    89.59 |   98.36 |   93.05 | ...1694-1700,1744 
  ...ionManager.ts |   85.41 |    84.48 |   83.49 |   85.41 | ...3261,3299-3300 
  ...references.ts |     100 |     90.9 |     100 |     100 | ...05,129,197,200 
  ...onSettings.ts |    92.3 |     94.4 |     100 |    92.3 | ...98-501,570-571 
  ...-converter.ts |   78.91 |    86.04 |   85.71 |   78.91 | ...95,202,214-248 
  github.ts        |   92.61 |    87.44 |     100 |   92.61 | ...1310-1311,1321 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |       96 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   88.39 |    83.11 |     100 |   88.39 | ...08,494,507-508 
  ...ork-policy.ts |   89.72 |    90.16 |     100 |   89.72 | ...36,148-154,156 
  npm.ts           |   89.02 |    81.81 |     100 |   89.02 | ...86-688,695-700 
  override.ts      |   94.11 |    93.54 |     100 |   94.11 | 63-64,81-82       
  ...-converter.ts |   94.89 |    90.41 |     100 |   94.89 | ...50-151,222-224 
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.33 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    84.21 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |       81 |   89.47 |   85.77 | ...02-205,260-261 
 ...ent-plugins-v1 |   84.94 |    79.51 |     100 |   84.94 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  manifest.ts      |   81.87 |    84.48 |     100 |   81.87 | ...55-156,161-174 
  mcp.ts           |   84.98 |    79.56 |     100 |   84.98 | ...88-389,419-420 
  paths.ts         |     100 |    94.44 |     100 |     100 | 59                
  skills.ts        |   82.31 |    63.88 |     100 |   82.31 | ...38-141,150-151 
 src/followup      |   84.78 |    82.27 |   86.84 |   84.78 |                   
  followupState.ts |   98.44 |    95.74 |     100 |   98.44 | 236-237           
  index.ts         |     100 |      100 |     100 |     100 |                   
  overlayFs.ts     |   96.29 |    88.88 |     100 |   96.29 | 78,108,122        
  speculation.ts   |   76.53 |    71.96 |   58.33 |   76.53 | ...48-749,756-757 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   86.11 |    87.17 |     100 |   86.11 | ...39-244,356-358 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |    93.7 |    90.48 |   95.32 |    93.7 |                   
  ...eGoalStore.ts |   87.61 |    89.28 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   99.45 |    97.05 |     100 |   99.45 | 155               
  ...checkpoint.ts |   86.08 |    85.18 |     100 |   86.08 | ...29-132,142-145 
  ...ion-prompt.ts |     100 |      100 |     100 |     100 |                   
  goal-evidence.ts |    88.7 |     88.2 |   97.67 |    88.7 | ...1219,1242-1245 
  ...projection.ts |   66.66 |    72.97 |   33.33 |   66.66 | ...87,190,194-196 
  ...ersistence.ts |   87.36 |    85.96 |    87.5 |   87.36 | ...53-154,185-190 
  goal-protocol.ts |   97.56 |    96.42 |     100 |   97.56 | 322-323           
  goal-reducer.ts  |   95.75 |    93.79 |   97.36 |   95.75 | ...76,666,684-685 
  goal-runtime.ts  |   96.54 |    90.73 |   96.49 |   96.54 | ...1649-1650,1794 
  ...provenance.ts |     100 |      100 |     100 |     100 |                   
  goal-tools.ts    |   97.58 |    94.27 |   97.72 |   97.58 | ...96-697,927-928 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    93.02 |     100 |   92.46 | ...69-172,185-187 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-28              
  goalHook.ts      |   96.91 |    92.53 |     100 |   96.91 | 115-120,221-222   
  goalJudge.ts     |   95.84 |    87.09 |     100 |   95.84 | ...55-356,448-449 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   90.62 |    87.01 |   90.32 |   90.62 |                   
  ...okRegistry.ts |   86.48 |    77.08 |     100 |   86.48 | ...41-344,362-369 
  ...bortSignal.ts |     100 |      100 |     100 |     100 |                   
  context-usage.ts |     100 |      100 |     100 |     100 |                   
  ...terpolator.ts |   96.87 |    94.11 |     100 |   96.87 | 68-69             
  ...HookRunner.ts |   96.68 |    87.23 |     100 |   96.68 | 110-112,231-233   
  ...Aggregator.ts |   96.57 |    91.48 |     100 |   96.57 | ...20-321,402,404 
  ...entHandler.ts |   95.64 |    85.71 |   94.73 |   95.64 | ...1059-1060,1070 
  hookPlanner.ts   |   87.55 |    85.54 |   86.66 |   87.55 | ...22-226,233-244 
  hookRegistry.ts  |   92.53 |    85.43 |     100 |   92.53 | ...39,458,462,466 
  hookRunner.ts    |   85.68 |    82.96 |    92.3 |   85.68 | ...1289,1299-1302 
  hookSystem.ts    |   87.64 |     98.5 |   70.83 |   87.64 | ...62-763,769-770 
  ...HookRunner.ts |   79.12 |    66.66 |      80 |   79.12 | ...38-439,457-461 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   94.19 |    84.37 |   81.81 |   94.19 | ...76-384,458-459 
  ...SkillHooks.ts |   82.47 |    84.21 |      75 |   82.47 | 63-67,174-189     
  ...oksManager.ts |   94.89 |    90.47 |     100 |   94.89 | ...97,338,340-342 
  ssrfGuard.ts     |   86.45 |    89.13 |     100 |   86.45 | ...85,289-295,301 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   94.25 |    96.09 |   88.88 |   94.25 | ...46-547,632-636 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
  ...it-context.ts |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.98 |    85.03 |   79.03 |   76.98 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   69.16 |    84.65 |   68.29 |   69.16 | ...1068,1097-1105 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ipc           |   94.83 |     94.5 |   96.96 |   94.83 |                   
  inbound-gate.ts  |   99.05 |    90.43 |     100 |   99.05 | 604-606           
  ...-directory.ts |     100 |      100 |     100 |     100 |                   
  peer-envelope.ts |     100 |      100 |     100 |     100 |                   
  peer-frames.ts   |   97.97 |    96.62 |     100 |   97.97 | 277-279           
  peer-routing.ts  |     100 |      100 |     100 |     100 |                   
  peer-send.ts     |   97.22 |    98.41 |   88.88 |   97.22 | 183-187           
  socket-path.ts   |   85.71 |    93.33 |     100 |   85.71 | 83-88             
  uds-client.ts    |   86.92 |    93.33 |   85.71 |   86.92 | 193-209           
  uds-inbox.ts     |   85.85 |    88.13 |     100 |   85.85 | ...90,297-307,371 
 src/lsp           |   58.96 |    70.67 |   66.49 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |    72.22 |   95.65 |   80.55 | ...02-504,508-514 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   75.73 |     80.1 |   79.66 |   75.73 | ...1346,1352-1382 
  ...eLspClient.ts |   32.78 |    81.81 |   21.05 |   32.78 | ...89-293,299-300 
  ...LspService.ts |      60 |    73.36 |   78.26 |      60 | ...1575,1635-1645 
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    82.3 |    77.81 |   78.33 |    82.3 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.31 |    58.06 |     100 |   79.31 | ...26-933,940-942 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.48 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.48 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.71 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   89.47 |    85.73 |    92.1 |   89.47 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.36 |    96.63 |   96.42 |   97.36 | ...91-293,367-368 
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    83.33 |     100 |     100 | 135,145           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   93.82 |    84.09 |     100 |   93.82 | 78-83,122,154-157 
  ...entPlanner.ts |   91.55 |    76.74 |     100 |   91.55 | ...05,118-121,296 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   90.71 |    81.14 |   94.44 |   90.71 | ...17,640,657-663 
  indexer.ts       |   94.14 |       84 |     100 |   94.14 | ...32-233,334,337 
  ...kill-agent.ts |   97.94 |    89.36 |     100 |   97.94 | 82-83,179-180     
  manager.ts       |   78.43 |    83.16 |   77.77 |   78.43 | ...1493,1506-1508 
  ...ent-config.ts |   92.22 |    84.78 |      92 |   92.22 | ...64,473-474,478 
  memoryAge.ts     |   90.47 |    84.61 |     100 |   90.47 | 50-51             
  ...yDiscovery.ts |   93.48 |    90.09 |     100 |   93.48 | ...42,401,629-632 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   97.26 |    86.79 |     100 |   97.26 | ...10-218,222,225 
  recall.ts        |   86.86 |    86.23 |   92.85 |   86.86 | ...33-538,571-582 
  refresh.ts       |   93.58 |    89.58 |     100 |   93.58 | ...75-176,183-184 
  ...ceSelector.ts |    93.2 |    85.71 |     100 |    93.2 | ...45-146,148-149 
  remember.ts      |   97.21 |    95.29 |     100 |   97.21 | ...29,341,345-347 
  scan.ts          |   93.75 |       80 |     100 |   93.75 | ...08-109,154,157 
  scopes.ts        |     100 |      100 |     100 |     100 |                   
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   79.76 |    76.84 |      80 |   79.76 | ...69-473,476,482 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   92.92 |    81.81 |     100 |   92.92 | ...16-117,147-148 
  ...git-status.ts |     100 |    85.71 |     100 |     100 | 27                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...66-280,294-299 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   91.82 |    89.71 |   89.15 |   91.82 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   91.11 |    93.02 |     100 |   91.11 | 155,161,164-173   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   79.43 |    68.96 |   85.71 |   79.43 | ...,89-96,131-142 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.03 |     100 |     100 | 181,266           
  modelsConfig.ts  |   88.45 |    86.88 |   83.72 |   88.45 | ...1437,1460-1461 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   84.54 |    91.72 |   71.88 |   84.54 |                   
  autoMode.ts      |   97.75 |    93.42 |     100 |   97.75 | ...91-598,644,721 
  ...transcript.ts |   98.51 |    86.11 |     100 |   98.51 | 264-265           
  classifier.ts    |      94 |    94.44 |     100 |      94 | 158-165,389-393   
  ...erousRules.ts |     100 |    90.19 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |    88.4 |    92.27 |   82.85 |    88.4 | ...1408,1514-1518 
  rule-parser.ts   |   94.92 |    92.81 |     100 |   94.92 | ...1555,1589-1591 
  ...-semantics.ts |   70.44 |    91.09 |   46.66 |   70.44 | ...2237,2311-2314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.06 |    95.23 |     100 |   99.06 |                   
  system-prompt.ts |   99.06 |    95.23 |     100 |   99.06 | 235               
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   85.14 |    80.63 |   82.85 |   85.14 |                   
  all-providers.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   93.11 |     84.5 |     100 |   93.11 | ...56-257,330-331 
  ...-discovery.ts |    95.4 |    94.44 |     100 |    95.4 | 31-32,42-43       
  ...der-config.ts |   75.91 |    73.48 |   78.26 |   75.91 | ...74-475,503-504 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   98.04 |    91.66 |   63.63 |   98.04 |                   
  ...oding-plan.ts |    87.5 |      100 |       0 |    87.5 | 82-84,87-89,91-94 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.05 |    81.25 |      75 |   97.05 | 118-119           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  grok.ts          |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  moonshot.ts      |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.36 |    78.59 |   95.94 |   85.36 |                   
  ...tGenerator.ts |    98.6 |    98.14 |     100 |    98.6 | 103-104           
  qwenOAuth2.ts    |   82.79 |    73.45 |    90.9 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |     76.8 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.85 |    86.64 |   96.52 |   90.85 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   98.47 |    88.69 |     100 |   98.47 | 85-86,109,473-474 
  branch-points.ts |     100 |    95.23 |     100 |     100 | ...20,211,224,327 
  ...ionService.ts |   97.82 |    96.77 |     100 |   97.82 | ...1150,1294-1302 
  ...ingService.ts |   92.25 |    87.61 |   94.79 |   92.25 | ...2924,2939-2940 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |   97.85 |    95.23 |     100 |   97.85 | ...64-365,485-488 
  cronScheduler.ts |   94.11 |    89.74 |   98.03 |   94.11 | ...1366,1775-1776 
  cronTasksFile.ts |   95.88 |       92 |     100 |   95.88 | ...72,381-382,520 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |      75 |       71 |   96.07 |      75 | ...2318,2347-2348 
  ...on-service.ts |   86.58 |    74.39 |     100 |   86.58 | ...56-460,498-499 
  ...references.ts |   98.57 |    91.42 |     100 |   98.57 | 156-157,217-218   
  ...ionService.ts |   97.85 |    94.07 |     100 |   97.85 | ...1217,1240-1241 
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   95.82 |    90.52 |   97.05 |   95.82 | ...60,861,875-877 
  ...orRegistry.ts |   97.22 |    90.99 |     100 |   97.22 | ...55-456,609-610 
  ...ttachments.ts |   97.74 |     90.9 |     100 |   97.74 | 298-308,646       
  ...pi-history.ts |   98.94 |    89.13 |     100 |   98.94 | 43                
  ...ersistence.ts |   91.88 |    81.19 |     100 |   91.88 | ...1073-1074,1119 
  ...tory-state.ts |     100 |       95 |     100 |     100 | 31                
  ...on-service.ts |   94.61 |    92.44 |   97.22 |   94.61 | ...11-613,669-677 
  ...pr-service.ts |   94.28 |     91.8 |   92.59 |   94.28 | ...31-733,864-866 
  ...ce-service.ts |    98.5 |    94.11 |    90.9 |    98.5 | 64-65             
  ...n-registry.ts |   98.82 |    96.81 |     100 |   98.82 | 642,696-697,759   
  ...ken-counts.ts |     100 |       96 |     100 |     100 | 58                
  ...ipt-reader.ts |    93.7 |    91.22 |    97.8 |    93.7 | ...2791-2792,2869 
  ...turn-state.ts |   94.11 |     90.9 |   91.66 |   94.11 | 108-112,129-130   
  ...est-helper.ts |       0 |        0 |       0 |       0 | 1-65              
  ...iter-lease.ts |   84.56 |       75 |    97.8 |   84.56 | ...2666,2688,2702 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   89.79 |       88 |   92.46 |   89.79 | ...4589-4590,4631 
  sessionTitle.ts  |   96.35 |    79.71 |     100 |   96.35 | ...08-311,342-343 
  ...ContextEnv.ts |     100 |    94.73 |     100 |     100 | 76,111            
  ...ionService.ts |   84.43 |    78.45 |   97.18 |   84.43 | ...2496,2502-2507 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...Estimation.ts |     100 |    95.83 |     100 |     100 | 139               
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...ite-origin.ts |     100 |    93.33 |     100 |     100 | 32                
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...rd-service.ts |     100 |    88.37 |     100 |     100 | ...29,145-146,241 
  ...oryService.ts |   91.89 |    86.15 |     100 |   91.89 | ...52-555,607-608 
  ...l-registry.ts |   92.99 |    83.19 |     100 |   92.99 | ...66-367,377-378 
  ...reeCleanup.ts |   14.42 |      100 |   33.33 |   14.42 | 58-186            
  ...ionService.ts |   88.36 |     87.7 |     100 |   88.36 | ...48-449,465-466 
 ...icrocompaction |   98.91 |    95.06 |     100 |   98.91 |                   
  microcompact.ts  |   98.91 |    95.06 |     100 |   98.91 | ...60,769,778-779 
 ...s/visionBridge |    98.8 |    92.12 |     100 |    98.8 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |   98.72 |    82.35 |     100 |   98.72 | 65,71             
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   89.95 |     86.4 |   94.73 |   89.95 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |    93.33 |     100 |     100 | 93,112            
  skill-curator.ts |   89.71 |    81.54 |     100 |   89.71 | ...01-902,904-907 
  skill-load.ts    |   95.02 |    87.87 |     100 |   95.02 | ...19,239,251-253 
  skill-manager.ts |    86.6 |     86.6 |   86.11 |    86.6 | ...1286,1293-1297 
  skill-paths.ts   |   90.42 |     87.5 |     100 |   90.42 | ...19-120,125-126 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |    98.07 |     100 |   97.91 | 289-290           
 ...ataviz/scripts |   80.06 |    95.23 |   88.23 |   80.06 |                   
  ...te_palette.js |   80.06 |    95.23 |   88.23 |   80.06 | 261-296,306-328   
 ...s/bundled/loop |   97.48 |    95.77 |     100 |   97.48 |                   
  ...omous-loop.ts |     100 |      100 |     100 |     100 |                   
  ...-task-file.ts |   94.85 |     92.4 |     100 |   94.85 | ...56,367,375-376 
  ...k-resolver.ts |     100 |      100 |     100 |     100 |                   
 src/subagents     |   89.01 |    89.44 |   98.41 |   89.01 |                   
  ...ter-schema.ts |     100 |    98.18 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |    85.9 |    86.56 |   97.67 |    85.9 | ...1682,1759-1760 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   94.14 |    95.23 |     100 |   94.14 | 47-52,65-66,71-76 
 src/telemetry     |   83.24 |    85.31 |   86.51 |   83.24 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  context-usage.ts |   96.85 |    91.07 |     100 |   96.85 | ...26-127,199-200 
  ...on-metrics.ts |   99.08 |    80.95 |     100 |   99.08 | 185,199           
  ...on-tracing.ts |   80.71 |    81.91 |   79.16 |   80.71 | ...92,499-501,517 
  ...attributes.ts |   96.98 |    91.37 |     100 |   96.98 | ...47-348,366-367 
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |   96.85 |    85.71 |     100 |   96.85 | 170-173           
  ...-exporters.ts |   65.38 |    83.33 |      50 |   65.38 | ...08-109,112-113 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |    99.02 |     100 |     100 | 106               
  ...ai-request.ts |   87.88 |    92.85 |   83.78 |   87.88 | ...55-561,564-568 
  gen-ai-usage.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.12 |    96.03 |      95 |   99.12 | 150,379-380       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   60.83 |    77.24 |   66.66 |   60.83 | ...1523,1540-1560 
  metrics.ts       |   80.37 |    82.35 |   80.95 |   80.37 | ...1150,1153-1164 
  otlp-urls.ts     |     100 |      100 |     100 |     100 |                   
  ...attributes.ts |     100 |      100 |     100 |     100 |                   
  ...ime-config.ts |       0 |        0 |       0 |       0 | 1                 
  sanitize.ts      |      80 |    83.33 |     100 |      80 | 35-36,41-42       
  ...rters-grpc.ts |     100 |      100 |     100 |     100 |                   
  ...rters-http.ts |     100 |      100 |     100 |     100 |                   
  sdk-impl.ts      |   94.13 |    86.66 |      75 |   94.13 | ...45,496-497,513 
  sdk.ts           |    82.7 |     90.9 |   66.66 |    82.7 | ...00-204,242-264 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...ion-events.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   91.29 |    88.88 |    97.5 |   91.29 | ...1946,1975-1978 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  trace-context.ts |     100 |      100 |     100 |     100 |                   
  ...e-id-utils.ts |     100 |      100 |     100 |     100 |                   
  tracer.ts        |   98.56 |    88.63 |     100 |   98.56 | 52,101            
  types.ts         |   83.29 |    95.77 |   86.36 |   83.29 | ...1470,1474-1481 
  uiTelemetry.ts   |   98.87 |     95.1 |   97.05 |   98.87 | ...59,696,786-787 
 ...ry/qwen-logger |   74.14 |       80 |      70 |   74.14 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.14 |    79.82 |   69.49 |   74.14 | ...1123,1161-1162 
 src/test-utils    |   97.69 |    98.66 |   86.36 |   97.69 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...mised-lock.ts |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   97.14 |      100 |   82.85 |   97.14 | 85-86,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   87.92 |    86.54 |   90.47 |   87.92 |                   
  ...erQuestion.ts |      90 |    82.75 |   92.85 |      90 | ...01-402,409-410 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.72 |    91.48 |   83.33 |   89.72 | ...06-307,318-325 
  cron-create.ts   |   92.26 |    97.72 |      75 |   92.26 | ...,76-77,272-281 
  cron-delete.ts   |   97.56 |      100 |   85.71 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.45 |   88.88 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  display-image.ts |   87.42 |    85.71 |    90.9 |   87.42 | ...29-134,194-195 
  edit.ts          |   82.76 |    86.88 |   82.35 |   82.76 | ...45-746,865-915 
  ...r-worktree.ts |   83.14 |    68.42 |   88.88 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |       84 |      90 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.37 |     83.8 |   94.73 |   83.37 | ...14-515,537-538 
  exitPlanMode.ts  |      95 |    85.29 |     100 |      95 | ...21-325,344,378 
  ...permission.ts |     100 |      100 |     100 |     100 |                   
  glob.ts          |   96.33 |     88.5 |     100 |   96.33 | ...24-225,373,376 
  grep.ts          |   90.73 |    86.71 |   86.36 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    78.12 |   91.66 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   96.52 |    95.55 |    87.5 |   96.52 | 37-38,53-54       
  loop-wakeup.ts   |   99.27 |     93.1 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.54 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.9 |    90.9 |   72.71 | ...1212,1214-1215 
  ...fier-input.ts |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   82.07 |    80.15 |   85.71 |   82.07 | ...3243,3245-3246 
  mcp-client.ts    |   86.55 |    88.01 |   94.02 |   86.55 | ...2581,2585-2588 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   79.21 |    85.71 |   81.57 |   79.21 | ...1342,1350-1351 
  ...ool-events.ts |       8 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |    97.5 |    93.93 |     100 |    97.5 | 178-179           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  ...ion-config.ts |     100 |      100 |     100 |     100 |                   
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   98.14 |     93.2 |     100 |   98.14 | ...1269,1324-1325 
  ...sport-pool.ts |   83.98 |     80.3 |   88.46 |   83.98 | ...1411,1418-1422 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 101,108           
  monitor.ts       |   91.82 |    83.09 |   88.46 |   91.82 | ...99,612,810-815 
  notebook-edit.ts |   85.71 |    77.39 |   82.35 |   85.71 | ...96-912,958-959 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   83.21 |    90.69 |     100 |   83.21 | 147-158,207-220   
  read-file.ts     |   95.49 |    88.61 |    87.5 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  readManyFiles.ts |      96 |       85 |     100 |      96 | ...42,595,605-609 
  ...d-artifact.ts |   85.68 |    81.59 |   94.73 |   85.68 | ...1071,1095-1096 
  ...t-findings.ts |   99.13 |    93.93 |    92.3 |   99.13 | 255-257           
  ...t-shutdown.ts |    87.2 |    86.66 |   77.77 |    87.2 | ...,75-79,162-165 
  ripGrep.ts       |    94.6 |    87.34 |   95.45 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   86.86 |    93.18 |      75 |   86.86 | ...20-426,568-575 
  ...n-mcp-view.ts |   94.07 |    91.89 |    90.9 |   94.07 | 131-139           
  shell.ts         |   79.61 |    85.04 |   93.06 |   79.61 | ...5228,5303-5304 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   97.15 |    90.79 |   92.59 |   97.15 | ...43,737-740,744 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.75 |   83.33 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   87.57 |    78.94 |     100 |   87.57 | ...71,157,161-168 
  task-stop.ts     |   93.14 |    96.29 |    87.5 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.87 |     86.5 |   92.85 |   82.87 | ...54-564,588-599 
  team-create.ts   |   97.24 |     87.5 |   85.71 |   97.24 | 48-49,129-130     
  team-delete.ts   |   88.67 |     87.5 |   85.71 |   88.67 | ...2-48,72-73,129 
  ...n-approval.ts |   92.14 |    96.96 |   81.81 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   95.99 |    91.84 |   93.75 |   95.99 | ...21-625,638-643 
  ...repeat-key.ts |     100 |      100 |     100 |     100 |                   
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   80.72 |    82.95 |   86.53 |   80.72 | ...1106,1114-1115 
  ...-finalizer.ts |    98.1 |    92.36 |   93.33 |    98.1 | ...34-235,237-241 
  ...iagnostics.ts |   99.06 |    97.69 |   91.66 |   99.06 | 133-134,205       
  ...-retention.ts |     100 |    95.83 |     100 |     100 | 116               
  tool-search.ts   |    96.2 |    89.79 |   93.75 |    96.2 | ...10,260-265,428 
  tool-utils.ts    |   97.46 |    96.55 |     100 |   97.46 | 26-27             
  tools.ts         |   92.93 |    92.18 |      92 |   92.93 | ...67-568,584-590 
  truncation.ts    |   90.72 |    90.51 |     100 |   90.72 | ...65-473,510-516 
  ...reapproved.ts |   99.27 |    94.11 |     100 |   99.27 | 170               
  web-fetch.ts     |   96.05 |    90.54 |   96.77 |   96.05 | ...85-786,800-801 
  web-search.ts    |   90.58 |    83.57 |      80 |   90.58 | ...1025,1083-1086 
  write-file.ts    |   87.29 |    86.15 |   89.47 |   87.29 | ...53-856,893-928 
  zoom-image.ts    |   95.76 |    93.93 |    90.9 |   95.76 | 54-59,203-204     
 src/tools/agent   |   86.69 |    88.65 |   89.71 |   86.69 |                   
  agent.ts         |   85.26 |    87.84 |   87.35 |   85.26 | ...4379,4413-4423 
  fork-profile.ts  |   93.65 |       90 |     100 |   93.65 | ...33-134,171-174 
  fork-subagent.ts |   98.73 |       95 |     100 |   98.73 | 101-102,173       
 ...tools/artifact |   95.83 |    92.51 |   88.63 |   95.83 |                   
  artifact-tool.ts |   91.69 |    88.46 |   71.42 |   91.69 | ...20-321,329-332 
  ...-publisher.ts |     100 |    85.71 |     100 |     100 | 32                
  ...-publisher.ts |   96.74 |    97.72 |    87.5 |   96.74 | 29-30,156-157     
  html.ts          |     100 |    96.77 |     100 |     100 | 122               
  ...-publisher.ts |     100 |       80 |     100 |     100 | 30                
  oss-publisher.ts |    98.1 |    91.48 |     100 |    98.1 | 43-45             
  publisher.ts     |     100 |      100 |     100 |     100 |                   
 ...tools/workflow |   89.29 |    86.71 |   83.33 |   89.29 |                   
  workflow.ts      |   89.29 |    86.71 |   83.33 |   89.29 | ...91-892,991-992 
 src/utils         |      93 |    89.94 |   97.03 |      93 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |      95 |    92.76 |     100 |      95 | ...49-550,657-661 
  auth-type.ts     |     100 |      100 |     100 |     100 |                   
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.79 |     100 |   98.45 | 132-133,159-160   
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.06 |       90 |     100 |   91.06 | ...46-147,154-155 
  ...n-branches.ts |   95.89 |    94.11 |      95 |   95.89 | ...99-500,512-525 
  ...tion-chain.ts |     100 |      100 |     100 |     100 |                   
  cronDisplay.ts   |     100 |    97.61 |     100 |     100 | 46                
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   99.49 |    96.25 |     100 |   99.49 | 224               
  ...qwen-model.ts |     100 |      100 |     100 |     100 |                   
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...27-428,462-463 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  encoding.ts      |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.59 |    90.32 |     100 |   94.59 | 40-41,137-138     
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   88.92 |    93.58 |      68 |   88.92 | ...92,394,410-411 
  fetch.ts         |   90.68 |    82.63 |     100 |   90.68 | ...72,483-484,503 
  ...ng-options.ts |     100 |      100 |     100 |     100 |                   
  file-identity.ts |     100 |      100 |     100 |     100 |                   
  fileUtils.ts     |   94.79 |    92.16 |   96.29 |   94.79 | ...2076,2084-2085 
  formatters.ts    |     100 |      100 |     100 |     100 |                   
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.39 |    94.28 |     100 |   94.39 | ...29-132,343-348 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  git-branches.ts  |   94.04 |    87.79 |   96.87 |   94.04 | ...1040-1041,1155 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  git-ignore.ts    |     100 |      100 |     100 |     100 |                   
  gitDiff.ts       |   95.39 |    81.95 |     100 |   95.39 | ...1075,1421-1422 
  gitDirect.ts     |   98.84 |    94.28 |     100 |   98.84 | 234,318           
  ...noreParser.ts |   94.48 |    93.22 |     100 |   94.48 | ...23-124,158-159 
  gitUtils.ts      |   78.83 |    82.35 |    87.5 |   78.83 | ...22-123,164-215 
  ...-pr-issues.ts |   99.45 |    97.14 |     100 |   99.45 | 182               
  github-prs.ts    |   96.34 |    87.87 |     100 |   96.34 | ...81,586-587,674 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.36 |    91.07 |     100 |   95.36 | ...99-203,275-279 
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  is-tool.ts       |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   96.15 |    93.75 |     100 |   96.15 | ...86-387,429-432 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iconv-lite.ts |     100 |      100 |     100 |     100 |                   
  ...simple-git.ts |   96.77 |    91.66 |     100 |   96.77 | 38                
  ...m-headless.ts |      96 |    88.88 |     100 |      96 | 34                
  ...-constants.ts |   94.73 |     92.3 |     100 |   94.73 | 66-67             
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...tProcessor.ts |   94.01 |     90.1 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.24 |     100 |   98.96 | 154               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  ...ollow-open.ts |     100 |    93.33 |     100 |     100 | 134,177           
  notebook.ts      |   94.57 |    89.91 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   91.66 |    89.74 |     100 |   91.66 | ...26-228,251-256 
  osc8.ts          |   54.26 |    64.86 |   83.33 |   54.26 | ...72-195,197-257 
  partUtils.ts     |     100 |    98.64 |     100 |     100 | 211               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.88 |    90.66 |     100 |   90.88 | ...28-629,631-633 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  ...s-liveness.ts |     100 |    93.47 |     100 |     100 | 62,72,108         
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   71.15 |       86 |     100 |   71.15 | ...-90,96-101,147 
  ...noreParser.ts |   92.63 |    91.66 |     100 |   92.63 | ...77-178,197-198 
  rateLimit.ts     |   93.75 |    89.42 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.36 |     100 |   96.98 | ...87-688,763-764 
  ...load-error.ts |   93.47 |    88.23 |     100 |   93.47 | 64-65,80          
  retry.ts         |   96.09 |    92.23 |     100 |   96.09 | ...72,563-564,582 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.05 |     100 |   97.63 | ...17,251-252,278 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   90.04 |    93.43 |   95.45 |   90.04 | ...55-565,598-599 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   84.87 |    86.71 |   96.29 |   84.87 | ...71,696,725-734 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |   97.77 |    91.48 |     100 |   97.77 | 172-173           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...-child-env.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   98.22 |    98.01 |     100 |   98.22 | 100,102-103       
  ...aValidator.ts |   92.09 |    83.65 |   90.47 |   92.09 | ...60,882-883,896 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.78 |    92.18 |     100 |   91.78 | ...66-569,645-646 
  ...nIdContext.ts |     100 |       90 |     100 |     100 | 95                
  ...orageUtils.ts |   96.55 |    90.54 |     100 |   96.55 | ...34,650,734,753 
  ...-pager-env.ts |     100 |      100 |     100 |     100 |                   
  ...fety-rules.ts |     100 |     89.7 |     100 |     100 | ...01,304,309-311 
  shell-utils.ts   |   86.37 |    88.59 |     100 |   86.37 | ...2361,2368-2372 
  ...lAstParser.ts |    98.3 |    91.57 |     100 |    98.3 | ...1340-1342,1352 
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |     86.2 |     100 |   86.82 | ...79-185,187-193 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |    57.14 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminal-env.ts  |      50 |      100 |       0 |      50 | 18-19             
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...error-type.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ultCleanup.ts |   54.62 |     62.5 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.83 |     92.7 |     100 |   96.83 | ...37-342,344-349 
  ...pt-records.ts |   87.61 |    86.23 |     100 |   87.61 | ...80-484,514-529 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...-directory.ts |    83.7 |    80.95 |    87.5 |    83.7 | ...37-238,252-253 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.61 |     100 |   95.39 | ...16-317,321-322 
  xml.ts           |    97.8 |    87.69 |     100 |    97.8 | 98-99             
  yaml-parser.ts   |   83.87 |    77.27 |     100 |   83.87 | ...31-234,239-240 
 ...ils/filesearch |   83.94 |    80.75 |   94.78 |   83.94 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    82.9 |    76.81 |   95.08 |    82.9 | ...1563,1597-1598 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.86 |      90 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |    92.3 |      100 |   88.88 |    92.3 |                   
  ...ageFormats.ts |   81.81 |      100 |   66.66 |   81.81 | 56-61             
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------

For detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run.

@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.

Reviewed. Suggestions are inline.

Not explored to full depth (tool budget reached): "agent 3b": none — no check was cut short..

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory.

中文说明

已审查。 建议见行内评论。

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

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory

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

Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx
Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx
Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx
Pick up the classify-release-notes helper-test fix (#10402) so CI runs green.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

@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.

Reviewed.

4 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • R1-1 #10148 delivery/drop tests live in the composer test file — still stands, already reported (comment 3874185235)
  • R1-2 no test exercises the real useAgentStreamingState event chain — still stands, already reported (comment 3874185244)
  • R1-3 flushers subscribe via the full streaming-state hook — still stands, already reported (comment 3874185251)
  • R1-4 terminal queue drop leaves zero trace — still stands, already reported (comment 3874185257)

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory; and 1 more.

中文说明

已审查。

本轮确认的 4 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory; and 1 more。

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

@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.

Reviewed.

2 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • Flushers subscribing via the full useAgentStreamingState hook (500ms timer + usage-tracking overhead) — already reported as R1-3 (comment 3874185251), author declined
  • Terminal queue drop leaving no trace (no log/notice for discarded queued follow-ups) — already reported as R1-4 (comment 3874185257), author declined

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory.

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

  • packages/cli/src/ui/contexts/AgentViewContext.tsx:456 — [review] no test queues follow-ups for more than one agent — per-agent flusher mount only delivery-tested for the first-registered agent (code-age: anchored on code unchanged since the…
中文说明

已审查。

本轮确认的 2 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory

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

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

@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.

2 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • R1-2 no test exercises the real useAgentStreamingState event chain — still stands, already reported (comment 3874185244), author declined
  • R1-3 flushers subscribe via the full streaming-state hook (500ms timer + usage-tracking overhead) — still stands, already reported (comment 3874185251), author declined

Not explored to full depth (tool budget reached): "agent 6a": running AgentComposer.queuedMessages.test.tsx and AgentViewContext.test.tsx — the review worktree's node_modules is incomplete ( @opentelemetry/* packages ….

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

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory.

中文说明

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

本轮确认的 2 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

未探索到全部深度(达到工具调用预算):"agent 6a"running AgentComposer.queuedMessages.test.tsx and AgentViewContext.test.tsx — the review worktree's node_modules is incomplete ( @opentelemetry/* packages …

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

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Qwen Code review did not complete successfully. The review pipeline failed before a review could be posted. A transient error is retried automatically; if you are seeing this, retry with @qwen-code /review. See workflow logs.

@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.

3 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • R1-2 no test exercises the real useAgentStreamingState event chain — already reported (comment 3874185244), author declined
  • R1-3 flushers subscribe via the full streaming-state hook — already reported (comment 3874185251), author declined
  • R1-4 terminal queue drop leaves zero trace — already reported (comment 3874185257), author declined

Not explored to full depth (tool budget reached): "agent 6c": executing AgentViewContext.test.tsx and AgentComposer.queuedMessages.test.tsx — vitest's globalSetup stopped the run because workspace dist/ builds and p….

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory.

中文说明

本轮确认的 3 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

未探索到全部深度(达到工具调用预算):"agent 6c"executing AgentViewContext.test.tsx and AgentComposer.queuedMessages.test.tsx — vitest's globalSetup stopped the run because workspace dist/ builds and p…

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory

— qwen3.8-max-2026-09-02 via Qwen Code /review (v0.22.3)

Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx Outdated
Comment thread packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx Outdated
…MPLETED/CANCELLED

The Agent View queue flusher dropped pending follow-ups at any terminal
status, but FAILED is not terminal for delivery: core's enqueueMessage
has no terminal guard and restarts the run loop (agent-interactive.ts,
"should survive round errors and recover"), so a failed teammate still
processes the queued text. Dropping it silently lost the only copy.
Narrow the drop branch to COMPLETED/CANCELLED, where the master abort
is tripped or the agent is shut down and delivery is genuinely
impossible, and extend the regression test to cover all three terminal
statuses.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-closeout/jmtk2jph6cv
@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ✅ passed — merge-ready (agent verdict) - workflow run

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check.

Scripted assertions: 434 passed · 0 failed · 434 total

Flakiness gate: ✅ 2 changed test file(s) x 5 identical rounds, no divergence

中文 — 判定:✅ 通过 · 可合入(agent 判定)

沙箱验证在隔离、无凭证的容器中执行了该 PR 的代码(与 base 构建 A/B 对照、无 mock harness 断言、定向门禁)。仅作为评审证据,不构成评审、批准或 CI 检查

脚本断言:434 通过 · 0 失败 · 434 总计

抖动门:✅ 2 changed test file(s) x 5 identical rounds, no divergence

Verification report

PR #10315 Deep Verification — fix(cli): deliver Agent View queued follow-ups from the provider

Verdict: merge-ready — 434/434 scripted assertions passed, 0 unexpected outcomes.
Verified head: 7635da09ed5484787e5da3e647c662c6cf7622ad (git rev-parse HEAD^2; merge checkout 47b13562, base tip c3bf0fea).

中文摘要

结论:merge-ready(434/434 断言通过,无意外失败)。

  • A/B 结论:把 PR 自带的两个测试文件原样放到 base(HEAD^1)源码上运行,恰好 4 个 Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 用例变红,失败信息与 PR 描述逐字一致(expected "spy" to be called 1 times, but got 0 times;终态用例画面残留 queued at terminal);同一组测试在 head 上 16/16 全绿。provider 常驻投递器(AgentQueueFlusher)被证明是载荷性的:删除其挂载后 7 个投递用例全部变红;单独恢复 composer 的旧 flush effect 则导致聚焦标签页双重投递(3 个用例 called 2 times)——两个 hunk 互为必要。
  • FAILED 语义核实:通读核心 agent-interactive.ts/asyncMessageQueue.ts 并做普查——enqueueMessage 确无终态守卫且会重启 run loop(FAILED 可继续处理消息);CANCELLEDabort() drain 队列、之后 enqueue 被静默丢弃,COMPLETED 在本树中只能经 shutdown()(同样 drain)到达(completeOnIdle: true 无任何使用者),故仅对 COMPLETED/CANCELLED 丢弃队列与核心能力精确对齐。最后一个 commit 的 FAILED 收窄被突变实验单独钉住:把 FAILED 加回丢弃分支,恰好只有 1 个用例变红。
  • 边界探针(真实 useAgentStreamingState + 真实 AgentEventEmitter,无 mock):FAILED→Idle→投递、STATUS_CHANGE 事件驱动投递、有 pending approval 时延迟到批准清除后投递(队列不丢)、StrictMode 挂载期去重生效、注销后同 id 重注册不泄漏旧队列——5/5 通过。
  • Findings:1 个 Suggestion(StrictMode 去重守卫未被随附测试钉住——属"冗余防御",探针构造性证明其功能有效,并附可钉住它的 fixture);2 个信息性说明(均为既有核心行为/边界,非本 PR 引入)。详见 Findings。
  • 未覆盖:逐 commit 归属(depth-2 浅克隆,7 个提交仅 merge 父提交可达,验证对象为聚合 diff);真实双队友 TUI 会话(PR 自述范围外,以组件测试覆盖);全仓测试/其他 workspace;真实 enqueueMessage 端到端联动(组件层以假智能体断言,核心层以代码审读+既有核心测试佐证)。

Central claim

Delivery of queued follow-ups moves from the keyed-by-active-view AgentComposer to an
always-mounted per-agent AgentQueueFlusher in AgentViewProvider, so an agent settling
to idle (or a terminal status) while its tab is unfocused gets its queue delivered (or
dropped at COMPLETED/CANCELLED, delivered at FAILED) without the user revisiting the tab.

A/B load-bearing proof

The PR's two shipped test files were run byte-identical against both source states
(base worktree at HEAD^1 with only the test files copied in; head tree at the merge):

Cell Source under test Oracle Result
head merge 47b13562 (= base + PR) 2 test files, expect all green 16/16 green
base HEAD^1 c3bf0fea + same test files expect exactly the #10148 tests red 4 red / 12 green

The four red cells on base are exactly the new-behavior tests, with the PR's claimed
failure messages verbatim:

  • delivers queued follow-ups while the user is on another tab (#10148)
    expected "spy" to be called 1 times, but got 0 times
  • handles the queue when the agent reaches 'completed' and 'cancelled'
    frame still contains queued at terminal (the permanent-queued display the PR removes)
  • handles the queue when the agent reaches 'failed'
    expected "spy" to be called 1 times, but got 0 times (base's !isTerminalStatus
    guard blocked FAILED delivery too)

The 12 base-green cells are the pre-existing exactly-once / join / same-batch /
idle-submit / storage tests — base behavior for the focused flows was correct; only the
unfocused-delivery and terminal-drop behaviors flip. Cells as printed:
01-ab-head-two-test-files-green.png, 02-ab-base-four-tests-red.png.

Note: the PR body speaks of "the two #10148 tests"; the shipped file expresses them as
4 cells (one it + a 3-row it.each) after the final FAILED-narrowing commit. All 4
were red before, green after — the claim holds, it is just finer-grained than the prose.

Mutation matrix (scratch worktree at head state; same two test files per mutant)

# Mutation Predicted Observed Verdict
control none 16 green 16 green harness live
M1 flusher mounting removed from provider delivery tests red 7 red / 9 green killed — flusher load-bearing
M2 FAILED added back to the drop branch only the FAILED row red 1 red / 15 green (exactly that row) killed — final commit pinned
M3 flushedQueueRef dedupe check+assignment removed StrictMode might catch it 16 green — survived adjudicated by probe P4 below: redundant defence
M4 composer flush effect restored (reverse of the composer hunk), flusher kept double delivery when focused 3 red / 13 green, all called 2 times killed — composer removal is the other half of exactly-once

M1's 7 reds = the 4 #10148 cells + the 3 focused-delivery cells (with the composer no
longer flushing, only the flusher delivers anywhere). M4 proves the two hunks are a set:
either one alone double-delivers or under-delivers. Matrix as printed:
03-mutant-failed-drop-one-test-red.png.

Boundary probes (real hook, real emitter, no mocks of the unit under test)

The shipped tests mock useAgentStreamingState; a separate probe harness
(queue-flusher-boundary.probe.test.tsx in this artifact dir) drives the real hook
with a real AgentEventEmitter:

Probe Fact under test Head result
P1 FAILED status ⇒ hook derives Idle ⇒ flusher delivers to an already-FAILED agent ✅ 1 call
P2 STATUS_CHANGE RUNNING→FAILED re-renders the flusher and flushes with no tab visit ✅ 1 call
P3 FAILED + pending approvals ⇒ WaitingForConfirmation ⇒ delivery deferred; after approvals clear the held queue is delivered, not lost ✅ deferred then 1 call
P4 StrictMode mount with a pre-seeded queue delivers exactly once (dedupe under double effect invocation) ✅ 1 call
P5 unregister clears the queue; re-registration under the same id never delivers the stale queue, and a fresh queue delivers once ✅ 0 stale / 1 fresh

Probes as printed: 04-boundary-probes-real-hook.png. All 5 also run on base-irrelevant
head state only; they describe the shipped code's boundary, not a base comparison.

Core semantics behind the COMPLETED/CANCELLED/FAILED split (code census)

The final commit's premise was verified against packages/core source, not taken on faith:

  • enqueueMessage (agent-interactive.ts:321) has no terminal guard: it enqueues and
    restarts the run loop when not processing. runOneRound sets RUNNING again, so a
    FAILED agent genuinely processes further messages (the FAILED→recovery test at
    agent-interactive.test.ts:408-425 covers the same mechanism).
  • CANCELLEDabort() calls queue.drain(); AsyncMessageQueue.enqueue is silently
    dropped after drain — delivery is impossible at the core level, so the UI dropping the
    queue matches reality (and avoids the message being dequeued-and-discarded by a dead
    loop).
  • COMPLETED is reachable in this tree only via shutdown() (which also drains): the
    census for completeOnIdle finds exactly two assignment sites — TeamManager sets
    false for teammates, InProcessBackend passes the config through — and no caller in
    the tree sets true
    . A completeOnIdle agent would reach COMPLETED with a live
    chat and could technically accept enqueues; no such agent exists behind the agent view
    today.
  • TeamManager's own flushNextMessage gates on status === IDLE, so held peer/leader
    messages behave differently from UI follow-ups at FAILED (they wait). The two policies
    coexist benignly: a successfully processed UI follow-up settles the agent back to IDLE,
    which then unblocks the team-layer flush.

Reviewer Test Plan, walked step by step

  1. Run the two named test files — done on head (16/16 green) and on base (4 red with the
    exact claimed messages). ✅
  2. Broader regression surface (agent-view/, AgentViewContext.test.tsx,
    QueuedMessageDisplay.test.tsx, layouts/, Composer.test.tsx, InputPrompt.test.tsx)
    — 11 files, 327/327 green at head (PR quoted 325; the merged head picked up 2 tests
    from main since, all green). ✅
  3. tsc --noEmit for the changed workspace — clean at head; gate proven live by planting
    const x: number = "not a number" in a scratch copy (TS2322 reported, then clean again). ✅

Findings

F1 — Suggestion (completeness): the StrictMode dedupe guard is not pinned by any shipped test.
Deleting flushedQueueRef's check and assignment (mutant M3) leaves all 16 shipped tests
green. Classification — not dead code, redundant defence: probe P4 constructs the
shape the guard exists for (flusher mounts with a non-empty queue under StrictMode's
double effect invocation) and shows the mutant double-delivers there (called 2 times on
P1 and P4) while head delivers exactly once. The guard is unreachable through today's
registration flow only because queues are always empty at flusher mount time; the PR's
own comment names the hazard correctly. If the maintainers want it pinned, probe P4 in
this artifact dir is a drop-in fixture (its construct: registerAgent +
appendToAgentMessageQueue in one batched effect, agent IDLE, assert
toHaveBeenCalledTimes(1)). No code change requested.

F2 — Nit (pre-existing core behavior, surfaced by this PR): delivery to a FAILED agent
whose chat session was never created consumes the text without processing it.

startInner sets FAILED when createChat returns falsy; for such an agent
enqueueMessage restarts the loop, runOneRound early-returns on !this.chat, the
message lands in visible history but never reaches the model, and the agent settles to
IDLE (agent-interactive.ts runLoopInner/settleRoundStatus). Base behavior queued the
message forever instead; neither is correct, but the defect is core-side and rare
(chat-creation failure). Flagging for the core owner, not blocking this PR.

F3 — Note: FAILED with pending approvals defers delivery. While approvals are pending
the hook derives WaitingForConfirmation, so the flusher waits; probe P3 shows the queue
survives and delivers once approvals clear. Identical gating to pre-PR (same hook), and
cancelCurrentRound clears approvals on the user's behalf — no action.

Not covered

  • Per-commit attribution. The checkout is depth 2: only the merge commit, base tip,
    and PR head exist locally, while the metadata snapshot lists 7 commits (1 feature
    commit + main-sync merges). git rev-list HEAD^1..HEAD^2 returns 1 at the shallow
    boundary, so the aggregate HEAD^1..HEAD diff is what was verified. The final
    commit's behavior (FAILED narrowing) was nonetheless exercised in isolation via
    mutant M2 and probes P1/P2.
  • Real two-teammate TUI session. The PR explicitly scopes this out (cannot be
    constructed stably; Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 precedent). Component-level assertions reproduce the
    issue's observable sequence, not a live teammate round-trip; the enqueueMessage
    seam is asserted against a spy, with core-side semantics taken from source census
    above rather than an end-to-end run.
  • Repo-wide test suite / other workspaces — not run; affected workspace only.
  • macOS/Windows — Linux container only.
  • Tab-bar pending-queue indication — out of scope in Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 per the PR; not examined.

Methodology

Environment: the CI verify container (node:22-bookworm), npm ci + npm run build
pre-completed at the merge commit; PR metadata from the read-only snapshot. A/B and
mutants ran in scratch git worktrees under tmp/ (removed after capture), wired to
the root node_modules; that is a clean control because the diff touches no
package.json/package-lock.json and nothing outside packages/cli — sibling
workspaces' built dist/ outputs and nested node_modules were symlinked from the head
build and are byte-equivalent for the base/mutant trees. Tests drove the real
AgentViewProvider through ink-testing-library under StrictMode (matching
production's startInteractiveUI.tsx); the probe harness additionally used the real
useAgentStreamingState hook and core's AgentEventEmitter with no mocks of the unit
under test. Raw per-cell logs, the two probe test files, and four terminal captures live
in this directory (logs/, evidence/, *.probe.test.tsx).

Flakiness gate log

rounds=5 files=2 skipped=0
file packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: (cd packages/cli) npx --no-install vitest run ./src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx
file packages/cli/src/ui/contexts/AgentViewContext.test.tsx: (cd packages/cli) npx --no-install vitest run ./src/ui/contexts/AgentViewContext.test.tsx


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: PPPPP
  packages/cli/src/ui/contexts/AgentViewContext.test.tsx: PPPPP

verdict: pass
summary: 2 changed test file(s) x 5 identical rounds, no divergence

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 1 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 2 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 2 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 3 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 3 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 4 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 4 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 5 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 5 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)

Evidence images

01-ab-head-two-test-files-green

02-ab-base-four-tests-red

03-mutant-failed-drop-one-test-red

04-boundary-probes-real-hook

Harness scripts and raw logs are in the workflow run artifacts (7-day retention).

Qwen Code · sandboxed verification

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Triage re-run completed without a new review.

⚠️ The bot has neither a verdict nor a deferral on 7635da09ed5484787e5da3e647c662c6cf7622ad — no APPROVED, CHANGES_REQUESTED, or COMMENTED review of its own. A DISMISSED one does not count: dismiss_stale_reviews voids the bot's approval on every push, which is exactly when a fresh one is needed. If this re-run was meant to review or approve, it did not, and an approval left by another account is a separate vote that does not count as the bot's own.

⚠️ 机器人在 7635da09ed5484787e5da3e647c662c6cf7622ad既没有裁决也没有 defer —— 没有属于它自己的 APPROVEDCHANGES_REQUESTEDCOMMENTED 评审。DISMISSED 不算:dismiss_stale_reviews 会在每次推送时作废机器人的批准,而那恰恰是需要一次新批准的时刻。如果这次重跑本应评审或批准,那么它没有做到;而其他账号留下的批准是另一张票,不能算作机器人自己的。

The stage comments above were updated with the latest result. View workflow run.

上方各阶段评论已更新为最新结果。查看工作流运行

@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.

4 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • R1-3 flusher subscribes via the full streaming-state hook (500ms timer + usage-tracking overhead) — already reported (comment 3874185251), author declined
  • R1-2 no test exercises the real useAgentStreamingState event chain — already reported (comment 3874185244), author declined
  • R1-4 terminal queue drop leaves zero trace — already reported (comment 3874185257), author declined
  • per-agent flusher isolation test (no test queues follow-ups for more than one agent) — already recorded as deferred in round 3 (review 5061425066)

Not explored to full depth (tool budget reached): "agent 3c": none — no check was cut short..

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory; and 1 more.

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

  • packages/cli/src/ui/contexts/AgentViewContext.tsx:172 — [probe] D6-1 COMPLETED drop rests on an unenforced premise (completeOnIdle)

Convergence: round 6 posted 2 inline comment(s), 2 of them reported for the first time; the previous round posted 2 (2 new). Findings keep coming back to the same files: packages/cli/src/ui/contexts/AgentViewContext.tsx (findings in round 5; 2 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.)

中文说明

本轮确认的 4 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

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

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory; and 1 more。

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

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

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

Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx Outdated
Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx
…ship

Two FAILED flavors cannot accept queued follow-ups, and delivering to
them certifies falsely:

- Fatal failure (core sets error, not lastRoundError): the chat was
  never created or the run loop threw, so enqueueMessage restarts a loop
  whose runOneRound early-returns on !this.chat — silently consuming the
  message while settleRoundStatus flips FAILED to IDLE, erasing the
  failure state (R5-1).
- Team-managed teammate: TeamManager tears the agent down synchronously
  on terminal status (TEAMMATE_EXITED, event bridge detached, per-agent
  state dropped) and the backend releases its resources, so a delivered
  follow-up resurrects a deaf agent nobody accounts for (R6-1).

Register each agent's source and drop the queue for both flavors. A
FAILED arena agent whose round merely errored stays deliverable, as
pinned by the #10148 tests.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-closeout/jmtkb4cktdd
@yiliang114

Copy link
Copy Markdown
Collaborator Author

CI note: the Dependency CVE audit failure on this head is not PR-caused. The PR's diff touches no dependency or lockfile; package-lock.json is byte-identical to origin/main for the flagged packages (fast-uri@3.1.5, qs@6.15.2, uuid@14.0.0 under mermaid). The advisories (GHSA-5jgf-p345-68v8 et al., fast-uri high) hit the npm audit DB today between ~16:30Z and ~17:20Z — sibling PRs whose audits ran before that window (#10842#10848) all pass. Any audit run on current main would fail the same way. Leaving the dependency bump to maintainers.

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ✅ passed — merge-ready (agent verdict) - workflow run

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check.

Scripted assertions: 536 passed · 0 failed · 536 total

Flakiness gate: ✅ 2 changed test file(s) x 5 identical rounds, no divergence

中文 — 判定:✅ 通过 · 可合入(agent 判定)

沙箱验证在隔离、无凭证的容器中执行了该 PR 的代码(与 base 构建 A/B 对照、无 mock harness 断言、定向门禁)。仅作为评审证据,不构成评审、批准或 CI 检查

脚本断言:536 通过 · 0 失败 · 536 总计

抖动门:✅ 2 changed test file(s) x 5 identical rounds, no divergence

Verification report

PR #10315 Deep Verification (follow-up round) — fix(cli): deliver Agent View queued follow-ups from the provider

Verdict: merge-ready — 536/536 scripted assertions passed, 0 unexpected outcomes.
Verified head: f1a49d12bfabd99aa2e496159d530180af8b0c40 (git rev-parse HEAD^2; merge checkout 47515f2f, base tip HEAD^1 = 4f212873).

中文摘要

结论:merge-ready(536/536 断言通过,无意外失败)。这是跟进轮:上一轮验证了头提交 7635da09,本轮新增提交 f1a49d12("gate FAILED queue delivery on recoverability and team ownership"),且 base 从 c3bf0fea 前进到 4f212873。所有旧测量在新头上重跑,未沿用旧数字。

  • A/B 结论(表 1):两份随附测试文件原样放到新 base 上,恰好 7 个用例变红(4 个 Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 + 3 个新增 FAILED 门禁用例),失败信息与 PR 描述逐字一致;同一组文件在 head 上 19/19 全绿。新 base 含 feat(channels): add BTW side questions to Channel conversations #10713(channels),与本 PR 无文件交集,翻转仍然干净。
  • delta 载荷性(表 2 突变矩阵):failedUndeliverable 的两个子句各自独立必要——删 getError() 子句恰好 1 红(fatal 用例),删 source === 'team' 子句恰好 1 红(team 用例),同时删共 2 红;把 FAILED 整个加回丢弃分支恰好 2 红(两个"可恢复 FAILED 仍投递"断言)。连同重测的 M1(删 flusher 挂载 10 红)与 M4(恢复 composer flush 导致 3 个 called 2 times),8 个突变全部按预测被钉住或按预测存活。
  • 核心前提核实error(致命,agent-interactive.ts:131/183)与 lastRoundError(可恢复,:256)分离、runOneRound!this.chat 早退、settleRoundStatus 在无 lastRoundError 时 FAILED→IDLE、TeamManager 在同一 STATUS_CHANGE emit 内同步拆除终态队友(TeamManager.ts:1844-1890,含 "a terminated teammate can never reach IDLE again")、flushNextMessagestatus === IDLE 为门(:2076)、completeOnIdle 全树无人置 true——全部在当前头上复核成立。
  • 边界探针(表 3,真实 useAgentStreamingState + 真实 AgentEventEmitter):7/7 通过,含新增的 fatal 丢弃(与可恢复投递同场对照)、team 源丢弃、审批延迟(F3 复测)。M3(去重守卫删除)下探针 P4 由 1 次变 2 次投递,其余 6 个探针不受影响——守卫功能真实但未被随附测试钉住(F1 延续,冗余防御分类不变)。
  • Findings:F1 延续(Suggestion,去重守卫无随附测试钉住,探针 P4 即现成 fixture);F2 按设计修复(UI 不再触发致命 FAILED 投递,核心侧怪癖仍在但本功能不可达);F3 延续(设计如此);2 条本轮新信息性说明(均为既有/设计取舍,非本 PR 引入)。
  • 未覆盖:逐 commit 归属(depth-2 浅克隆,8 个提交仅 3 个本地可达,验证对象为聚合 diff);真实双队友 TUI 会话;全仓测试/其他 workspace;AppContainer:2874 既有直投路径的可达性审计(非本 PR 文件)。

Previous-finding status (follow-up round)

Round 1 verified head 7635da09; round 2 head is f1a49d12 (one new commit: the FAILED recoverability/team-ownership gate), and the base moved c3bf0fea4f212873. Every measurement below was re-run at the new head; nothing was carried by diffing the old report.

# Finding (round 1) Severity Status at new head
F1 StrictMode dedupe guard (flushedQueueRef) not pinned by any shipped test Suggestion Stands. Re-measured: mutant M3 (dedupe removed) leaves all 19 shipped tests green again; probe P4 is green at head and flips to called 2 times against M3 while P1–P3/P5–P7 stay green. Classification unchanged: redundant defence — the hazard shape (flusher mounts with a non-empty queue under StrictMode double-invocation) is constructed by P4, which is a drop-in fixture (in this artifact dir) if maintainers want it pinned.
F2 Delivery to a chat-less FAILED agent consumes the text without processing it (core early-returns on !this.chat, FAILED→IDLE erases the failure) Nit Fixed by design. The delta commit is exactly this fix at the UI layer: failedUndeliverable drops the queue when getError() !== undefined. Re-measured: shipped test + mutant M5 (clause removed → fatal test red) + probe P6 (fatal agent dropped while a recoverable arena agent in the same provider delivers). The core-side oddity remains in agent-interactive.ts but is no longer reachable through this feature (and direct input is blocked at FAILED — BaseTextInput isActive={isInputActive...} with isInputActive=false for terminal status).
F3 FAILED + pending approvals defers delivery Note Stands (as designed). Probe P3 re-run at the new head: WaitingForConfirmation defers, the held queue survives, and delivery happens exactly once after approvals clear. Same hook gating as pre-PR.

Central claim

Delivery of queued follow-ups lives in an always-mounted per-agent AgentQueueFlusher in AgentViewProvider, so an agent settling to idle while unfocused gets its queue delivered without a tab revisit; terminal semantics: drop at COMPLETED/CANCELLED, drop at FAILED only when the failure is fatal (getError() set) or the agent is team-managed (source === 'team'), and deliver at FAILED when it is a recoverable round error on an arena agent. The composer keeps display/submit only.

Secondary claims: (S1) each gate clause is load-bearing and independently pinned; (S2) the A/B flip still holds on the moved base tip.

A/B load-bearing proof (re-measured on the new base)

The PR's two shipped test files ran byte-identical (sha256-verified copies) against both source states:

Cell Source under test Oracle Result
head merge 47515f2f (= base + PR) 2 files, expect all green 19/19 green (exit 0)
base HEAD^1 4f212873 + same files expect exactly the new-behavior tests red 7 failed | 12 passed (19) (exit 1)

The seven base-red cells are exactly the behaviors this PR introduces, with the PR's claimed failure messages verbatim:

  • delivers queued follow-ups while the user is on another tab (#10148)expected "spy" to be called 1 times, but got 0 times
  • handles the queue when the agent reaches 'completed' / 'cancelled' — frame still contains queued at terminal
  • handles the queue when the agent reaches 'failed'expected "spy" to be called 1 times, but got 0 times
  • 3 new FAILED-gate tests: fatal → expected 'a:[queued follow-up]' to contain 'a:[]' (queue stuck forever on base); team → same; recoverable → expected "spy" to be called 1 times, but got 0 times

The 12 base-green cells are the pre-existing exactly-once/join/same-batch/idle-submit/storage/bridge tests. The moved base (4f212873, which adds #10713 channels work — zero file overlap with this PR) does not disturb the flip. Cells as printed: 01-ab-head-19-green.png, 02-ab-base-7-red.png.

Control purity: the base worktree had no node_modules of its own; import.meta.resolve('@qwen-code/qwen-code-core') from inside it resolves to /__w/qwen-code/qwen-code/packages/core/dist/index.js (head tree), and git diff HEAD^1..HEAD --stat touches nothing outside packages/cli — so the shared core/channels/acp-bridge/web-templates dists are byte-equivalent across both cells. The cli vitest alias imports core source from the sibling tree; ajv resolves via nested packages/core/node_modules, which was symlinked unchanged for the same reason.

Mutation matrix (scratch worktree at head state; both shipped test files per mutant, 19 tests each)

# Mutation Predicted Observed Verdict
C-pos join('\n') → `join(' ')` (positive control) join/same-batch tests red 2 red / 17 green (exactly those two)
M1 flusher mounting removed from provider delivery+drop tests red 10 red / 9 green killed — flusher load-bearing (7 composer cells + 3 FAILED-gate tests)
M2 failedUndeliverable = status === FAILED (all FAILED dropped) the two recoverable-FAILED assertions red 2 red / 17 green (exactly those, one per file) killed — FAILED deliverability pinned in both test files
M3 flushedQueueRef check+assignment removed shipped suite green 19 green — survived adjudicated by probe P4: redundant defence (see below)
M4 composer flush effect restored, flusher kept double delivery when focused 3 red / 13 green, all called 2 times killed — composer removal is the other half of exactly-once
M5 getError() !== undefined clause removed fatal test red 1 red / 18 green (exactly the fatal test) killed — clause pinned and necessary
M6 source === 'team' clause removed team test red 1 red / 18 green (exactly the team test) killed — clause pinned and necessary
M7 both clauses removed (failedUndeliverable = false) fatal + team tests red 2 red / 17 green (exactly those two) combination row: clauses are independent — no hazard appears only in combination, each single revert already surfaces its own flavor, so neither clause is redundant defence for the other

Matrix as printed: 03-mutation-matrix.png. M2's two reds are the composer it.each FAILED row and the context still delivers to a FAILED arena agent test — the delta's recoverable path is pinned from both files.

Boundary probes (real useAgentStreamingState + real core AgentEventEmitter, no mocks of the unit under test)

The shipped composer tests mock the streaming hook; the shipped FAILED-gate tests use the real hook with stubs. This probe harness (queue-flusher-boundary.probe.test.tsx in this artifact dir) drives the real hook against a real AgentEventEmitter with test-controlled status/error/approvals:

Probe Fact under test Head result
P1 already-FAILED recoverable arena agent: real hook derives Idle ⇒ delivered exactly once ✅ 1 call
P2 RUNNING→FAILED STATUS_CHANGE emit drives delivery with no tab visit ✅ 1 call (queue held while RUNNING, delivered on the event)
P3 FAILED + pending approvals ⇒ WaitingForConfirmation ⇒ deferred; held queue delivers once after approvals clear ✅ deferred, then 1 call (F3 re-measurement)
P4 StrictMode mount with a pre-seeded queue delivers exactly once (dedupe) ✅ 1 call at head; 2 calls against M3 — the only probe that flips
P5 unregister drops the queue; same-id re-registration never delivers the stale queue ✅ 0 stale / 1 fresh
P6 fatal FAILED (getError() set) drops the queue, while a recoverable arena agent registered in the same provider delivers (per-gate drop, bystander positive control) ✅ 0 fatal / 1 bystander
P7 team-managed FAILED agent (no fatal error, source: 'team') drops the queue ✅ 0 calls, queue cleared

Probes as printed: 04-probes-head-vs-m3.png. P6/P7 are the delta's two new drop flavors exercised through live event/state derivation; P6's bystander agent proves the zero is a true gated absence, not a broken delivery path.

Core semantics behind the gate (census, re-verified at this head)

  • Fatal vs recoverable FAILED: startInner sets this.error = 'Failed to create chat session' and FAILED when createChat returns falsy (agent-interactive.ts:131); the run-loop catch sets this.error (:183); round errors set only this.lastRoundError ("Agent survives round errors", :256) and settle FAILED via settleRoundStatus (:425-433). enqueueMessage (:321-325) has no terminal guard and restarts the loop; runOneRound early-returns on !this.chat (:212), so delivery to a chat-less agent consumes the message and settles FAILED→IDLE — the exact hazard the gate now avoids.
  • Team teardown: on isTerminalStatus the TeamManager handler unassigns tasks, emits TEAMMATE_EXITED, detaches the event-bridge cleanup, and drops per-agent state synchronously in the same STATUS_CHANGE emit (TeamManager.ts:1844-1890, quoting "a terminated teammate can never reach IDLE again"). Team-layer flushNextMessage gates on status === IDLE (:2076), so UI follow-ups delivered at recoverable FAILED settle the agent back to IDLE and unblock held team messages — the two policies coexist benignly (carried-over claim, re-verified).
  • source coverage: all four production registerAgent call sites checked — useArenaInProcess ×2 pass no source (undefined ⇒ arena semantics), useTeamInProcess ×2 pass 'team'. Typecheck confirms no other callers exist (signature change compiles workspace-wide).
  • completeOnIdle: census unchanged — two assignment sites (TeamManager sets false; InProcessBackend passes config through), no caller in the tree sets true, so COMPLETED remains reachable only via shutdown() (which drains the queue) — dropping at COMPLETED matches reality.
  • Direct-submit seam at FAILED is closed: AgentComposer passes isActive={isInputActive && !agentShellFocused} to BaseTextInput; isInputActive is false for every terminal status, and BaseTextInput registers no keypress handler when inactive — a user cannot type a direct message to a FAILED/COMPLETED/CANCELLED agent. The flusher is the only path to FAILED agents, and it is gated.

Findings

No blocking findings. Order: carried suggestion first, then informational notes.

F1 (carried, Suggestion — completeness): the StrictMode dedupe guard remains unpinned by shipped tests.
Mutant M3 survived the 19-test shipped suite again at the new head; probe P4 adjudicates it as redundant defence (functional, but unreachable through today's registration flow because queues are always empty at flusher mount). If maintainers want it pinned, P4 in this artifact dir is a drop-in fixture (register + append in one batched effect, IDLE agent, assert toHaveBeenCalledTimes(1)). No code change requested.

N1 (new, informational, pre-existing): AppContainer.tsx:2874 holds an ungated direct enqueueMessage for the active-view agent.
handleFinalSubmit routes a main-session submit straight to agent.interactiveAgent.enqueueMessage(...) with no status/source gate — the sibling of the seam this PR gates. Verified pre-existing: git diff HEAD^1..HEAD -- packages/cli/src/ui/AppContainer.tsx is empty, and the identical line exists at the base tip. It is not reachable through the normal agent-tab UI (the layout mounts AgentComposer, whose input is inactive at terminal status, instead of the main composer), but any submission path that reaches handleFinalSubmit while activeView !== 'main' would bypass the gate. Not introduced, not worsened, and not fixed by this PR — flagged for the feature owner, out of scope here.

N2 (new, informational, design choice): the gate drops every FAILED with getError() set, including a run-loop throw where the chat is still alive.
For the loop-threw flavor (this.error set but this.chat live), runOneRound would not early-return, so delivery could technically process the message; the commit treats any FAILED carrying error as untrustworthy and drops. Conservative and consistent with the stated R5-1 rationale — noting only that the drop is by status-shape, not by chat-liveness.

Not covered

  • Per-commit attribution. Depth-2 checkout: only the merge commit, base tip, and PR head exist locally; git rev-list HEAD^1..HEAD^2 returns 1 at the shallow boundary while the metadata snapshot lists 8 commits. The aggregate HEAD^1..HEAD diff is what was verified; the delta commit's behavior was nonetheless exercised in isolation (M2/M5/M6/M7 + P6/P7).
  • Real two-teammate TUI session — PR explicitly scopes this out (cannot be constructed stably; Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 precedent). Component-level assertions reproduce the observable sequence; the enqueueMessage seam is asserted against a spy, core-side semantics come from the source census above.
  • Repo-wide test suite / other workspaces — affected workspace only.
  • AppContainer:2874 reachability audit — pre-existing seam; only its identity with the base was verified (N1).
  • macOS/Windows — Linux container only.

Methodology

Environment: the CI verify container (node:22-bookworm, node v22.23.2), npm ci + npm run build pre-completed at the merge commit; PR metadata from the read-only snapshot (treated as untrusted input; no injection attempts observed). A/B and mutants ran in scratch git worktrees under tmp/ (removed after capture, main tree verified clean), wired to the root/nested node_modules and sibling dists by symlink — a clean control because the diff touches no lockfile and nothing outside packages/cli (realpath of @qwen-code/qwen-code-core asserted from inside the base tree: /__w/qwen-code/qwen-code/packages/core/dist/index.js). Tests drove the real AgentViewProvider through ink-testing-library; the probe harness used the real useAgentStreamingState hook and core's real AgentEventEmitter with no mocks of the unit under test, and was additionally run against the M3 mutant to adjudicate the surviving mutation. Typecheck gate proven live by planting const __planted: number = "not a number" (caught as TS2322, then clean again after removal). Assertion accounting: every vitest test execution counts as one scripted assertion — 10 runs × 19 tests (A/B head, A/B base, C-pos, M1–M7) + 7 probes × 2 runs + 330 broader-surface tests + 2 typecheck gates = 536; expected-failure cells (all base-cell reds and every predicted mutant red) count as passes because the prediction itself is the assertion, so fail counts only unexpected outcomes — zero. Raw per-cell logs (logs/), the mutant runner (run-mutant.sh), the probe file, and four terminal captures (evidence/) live in this directory.

Flakiness gate log

rounds=5 files=2 skipped=0
file packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: (cd packages/cli) npx --no-install vitest run ./src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx
file packages/cli/src/ui/contexts/AgentViewContext.test.tsx: (cd packages/cli) npx --no-install vitest run ./src/ui/contexts/AgentViewContext.test.tsx


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: PPPPP
  packages/cli/src/ui/contexts/AgentViewContext.test.tsx: PPPPP

verdict: pass
summary: 2 changed test file(s) x 5 identical rounds, no divergence

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 1 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 2 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 2 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 3 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 3 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 4 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 4 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 5 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 5 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)

Evidence images

01-ab-head-19-green

02-ab-base-7-red

03-mutation-matrix

04-probes-head-vs-m3

Harness scripts and raw logs are in the workflow run artifacts (7-day retention).

Qwen Code · sandboxed verification

@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.

1 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • R1-3 flusher subscribes via the full useAgentStreamingState hook (500ms timer + usage-tracking overhead) — already reported (comment 3874185251), author declined

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

  • packages/cli/src/ui/contexts/AgentViewContext.tsx:197 — [review] R7-2 round-6 delivery-rule comments in AgentComposer.queuedMessages.test.tsx falsified by the FAILED gate
  • packages/cli/src/ui/hooks/useTeamInProcess.ts:143 — [review] R7-3 no test exercises the 'team' source wiring that feeds the FAILED gate

Convergence: round 7 posted 1 inline comment(s), 1 of them reported for the first time; the previous round posted 2 (2 new). Findings keep coming back to the same files: packages/cli/src/ui/contexts/AgentViewContext.tsx (findings in rounds 5, 6; 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.)

中文说明

本轮确认的 1 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

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

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

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

Comment thread packages/cli/src/ui/contexts/AgentViewContext.tsx Outdated
The recoverable-FAILED fall-through delivered queued follow-ups to an
arena agent that InProcessBackend's one-shot terminal watcher had already
finalized at the FAILED settle (releaseAgentResources removed the monitor
notification route and fired the exit callback), while ArenaManager
discards FAILED -> RUNNING (only COMPLETED -> RUNNING revival is
sanctioned). The revived round burned tokens outside every record, with
monitor notifications dropped and the second settle never re-released.
Drop queued follow-ups at every terminal status instead, and remove the
now-unused `source` registration plumbing the old gate consulted.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-closeout/jmtkhjtuvdq
@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ⚠️ incomplete — results unavailable - workflow run

The verification ran, but its result artifact could not be retrieved for publishing, so there is nothing to report here. The run log still has the agent output; re-run @qwen-code /verify for a fresh report.

中文 — 判定:⚠️ 未完成 · 结果不可用

验证已执行,但结果产物未能取回用于发布,因此此处没有可报告的内容。运行日志中仍有 agent 输出;如需完整报告请重新运行 @qwen-code /verify

Qwen Code · sandboxed verification

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Triage re-run completed without a new review.

⚠️ The bot has neither a verdict nor a deferral on 8041a8d0c7e8b2b6d47e6c536f4e8171b4497dd0 — no APPROVED, CHANGES_REQUESTED, or COMMENTED review of its own. A DISMISSED one does not count: dismiss_stale_reviews voids the bot's approval on every push, which is exactly when a fresh one is needed. If this re-run was meant to review or approve, it did not, and an approval left by another account is a separate vote that does not count as the bot's own.

⚠️ 机器人在 8041a8d0c7e8b2b6d47e6c536f4e8171b4497dd0既没有裁决也没有 defer —— 没有属于它自己的 APPROVEDCHANGES_REQUESTEDCOMMENTED 评审。DISMISSED 不算:dismiss_stale_reviews 会在每次推送时作废机器人的批准,而那恰恰是需要一次新批准的时刻。如果这次重跑本应评审或批准,那么它没有做到;而其他账号留下的批准是另一张票,不能算作机器人自己的。

The stage comments above were updated with the latest result. View workflow run.

上方各阶段评论已更新为最新结果。查看工作流运行

@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.

Reviewed.

4 Suggestion-level finding(s) this review confirmed are already reported on this PR and are not repeated:

  • flusher full-hook subscription overhead (500ms timer + usage tracking) — already reported as R1-3 (comment 3874185251), author declined
  • reverse-audit round-3 flusher timer/re-render overhead — already reported as R1-3 (comment 3874185251), author declined
  • terminal drop without user-visible notice — already reported as R1-4 (comment 3874185257), author declined
  • terminal drop without debug log — already reported as R1-4 (comment 3874185257), author declined

Not explored to full depth (tool budget reached): "agent 5": running the two touched vitest files to confirm they pass (worktree has no node_modules; npm ci + npm run build for the monorepo was not worth this review's….

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory.

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

  • packages/cli/src/ui/contexts/AgentViewContext.tsx:189 — [probe] D8-1 terminal gate hand-enumerates COMPLETED/CANCELLED/FAILED instead of core's isTerminalStatus — a future fourth terminal status would fall through to delivery
  • packages/cli/src/ui/contexts/AgentViewContext.tsx:208 — [probe] D8-2 no two-cycle delivery test pins the flusher's queue-identity dedupe — a once-per-lifetime mutation passes the whole suite
  • packages/cli/src/ui/contexts/AgentViewContext.tsx:172 — [probe] D8-3 FAILED rationale comment overstates resource release — false for follow-up-round FAILED; same premise at AgentViewContext.test.tsx:471
中文说明

已审查。

本轮确认的 4 条建议级发现已在 PR 上报告过,不再重复发布(列表见上方英文部分)。

未探索到全部深度(达到工具调用预算):"agent 5"running the two touched vitest files to confirm they pass (worktree has no node_modules; npm ci + npm run build for the monorepo was not worth this review's…

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory

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

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

Pick up the fast-uri 3.1.7 audit-gate fix (#10862) so the Dependency
CVE audit required check goes green on this branch.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-closeout/jmtkyp44iep

@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.

⚠️ Downgraded from Approve to Comment: CI still running. Reviewed.

Test Plan (not a blocker): src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory.

中文说明

⚠️ 已从批准降级为评论:CI still running。 已审查。

Test Plan(非阻断):src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsxno such file or directory; src/ui/contexts/AgentViewContext.test.tsxno such file or directory; src/ui/components/QueuedMessageDisplay.test.tsxno such file or directory; src/ui/components/Composer.test.tsxno such file or directory; src/ui/components/InputPrompt.test.tsxno such file or directory

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

Sandboxed verification: ✅ passed — merge-ready (agent verdict) - workflow run

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check.

Scripted assertions: 730 passed · 0 failed · 730 total

Flakiness gate: ✅ 2 changed test file(s) x 5 identical rounds, no divergence

中文 — 判定:✅ 通过 · 可合入(agent 判定)

沙箱验证在隔离、无凭证的容器中执行了该 PR 的代码(与 base 构建 A/B 对照、无 mock harness 断言、定向门禁)。仅作为评审证据,不构成评审、批准或 CI 检查

脚本断言:730 通过 · 0 失败 · 730 总计

抖动门:✅ 2 changed test file(s) x 5 identical rounds, no divergence

Verification report

Sandboxed verification: ✅ passed — merge-ready (agent verdict) - follow-up round 3

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check.

Scripted assertions: 730 passed · 0 failed · 730 total

Verified head: d0a206e6db6aade8fe7eb5265054f25a6aa93fab (git rev-parse HEAD^2; merge checkout 4eafed49, base tip HEAD^1 = 678ac2e1).

中文 — 判定:✅ 通过 · 可合入(agent 判定)

结论:merge-ready(730/730 断言通过,0 个意外失败)。这是第三轮:上一轮验证头 f1a49d12,本轮头 d0a206e6,新增行为提交 8041a8d0("treat all FAILED agents as undeliverable")——它推翻了第二轮的核心结论(可恢复 FAILED 仍投递),base 也从 4f212873 前进到 678ac2e1。所有旧测量在新头上重跑,未沿用旧数字。

  • A/B 结论(表 1,01-ab-head-18-green.png / 02-ab-base-6-red.png):两份随附测试文件字节一致(sha256 校验)放到新 base 上,恰好 6 个用例变红(4 个 Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 + 2 个 FAILED 门禁用例),失败信息与 PR 描述逐字一致;head 上 18/18 全绿。
  • delta 载荷性(表 2,03-mutation-matrix-9-of-9-on-prediction.png):把第二轮的 FAILED 门(仅 getError() 置位才丢弃)重建为突变 M-D1,恰好 2 红——正是第二轮断言"投递"的那两个用例;边界探针下 M-D1 4 红(P1/P2/P3/P7-failed),其中 P3 复现了第二轮 F3 的"审批挂起时延迟投递"。9/9 突变全部按预测被钉住或按预测存活。
  • 漂移隐患(本轮新证据,04-drift-hazard-simulated-and-fixed.png:门用内联三态枚举而非 core 共享的 isTerminalStatus;今天二者外延相等(census 证明),但向 core 模拟加入第 4 个终态后,flusher 会向已死智能体投递(cell 2 红,expected "spy" to be called +0 times, but got 1 times);候选修复 Fix A(改用 isTerminalStatus)在 cell 3 闭合该隐患,且 35/35 行为不变、主树 tsc 干净。列为 Suggestion,非阻塞。
  • 静默丢弃(本轮新发现,Suggestion):终态丢弃分支不读、不记、不提示地销毁队列文本;BaseTextInputonSubmit 前已清空输入缓冲(BaseTextInput.tsx:229-234),队列是文本唯一副本;agent 队列没有主会话 ESC should cancel ongoing work before operating on queued messages #8201 的 ESC 取回机制;AgentViewContext.tsx 无任何 logger。用户切到别的标签页时文本即消失且不可恢复。候选修复 Fix B(debugLogger.warn)已测量:35/35 不变、tsc 干净。
  • 旧发现状态:F1 延续(分类细化为"不可达隐患的防御性守卫",census 证明生产侧无法构造该形状);F2 被本轮 delta 加宽(所有 FAILED 都丢弃);F3 被取代(不再延迟,立即丢弃);N1 延续(pre-existing,重测于 AppContainer.tsx:2895,与 base 字节一致);N2 随 getError() 分支消失而失效。
  • 未覆盖:逐 commit 归属(depth-2 浅克隆,快照 10 个提交仅 1 个本地可达);真实双队友 TUI 会话;全仓测试/其他 workspace;AppContainer:2895 可达性审计;macOS/Windows。
Verification report

PR #10315 Deep Verification (follow-up round 3) — fix(cli): deliver Agent View queued follow-ups from the provider

Verdict: merge-ready — 730/730 scripted assertions passed, 0 unexpected outcomes.
Verified head: d0a206e6db6aade8fe7eb5265054f25a6aa93fab (git rev-parse HEAD^2; merge checkout 4eafed49, base tip HEAD^1 = 678ac2e1).

Round 2 verified head f1a49d12; round 3's head is d0a206e6, whose only behavioral commit is 8041a8d0 "fix(cli): treat all FAILED agents as undeliverable in the queue flusher" (plus a merge of origin/main). That commit supersedes round 2's central claim: where round 2 verified "deliver at FAILED when the failure is a recoverable round error on an arena agent", head now drops at every terminal status. The base also moved 4f212873678ac2e1. Every measurement below was re-run at the new head; nothing was carried by diffing the old report.

Previous-finding status (follow-up round)

# Finding (round 2) Severity Status at d0a206e6
F1 StrictMode dedupe guard (flushedQueueRef) not pinned by any shipped test Suggestion Stands; classification refined. Re-measured: M3 (dedupe removed) leaves all 18 shipped tests green; probe P4 flips to called 1 times, but got 2 times against M3 while P1–P3/P5–P8 stay green. New census refines round 2's "redundant defence": setAgentMessageQueue has no production caller outside AgentViewContext.tsx (the only external producer is the registration-guarded appendToAgentMessageQueue, AgentComposer.tsx:216), so a flusher cannot mount with a non-empty queue through production writers — the hazard P4 constructs is unreachable today, making the guard a functional but currently-unreachable defensive guard with no pinning test, not dead code (P4 proves it decides an outcome).
F2 Delivery to a chat-less FAILED agent consumes the text without processing it Nit Fixed, and widened. 8041a8d0 drops at every FAILED, not only the fatal flavor. Re-measured: both shipped FAILED-gate tests green at head; M-D1 (round-2 gate reconstructed) turns exactly the recoverable cells red; the core-side oddity (unguarded enqueueMessage, runOneRound early-return on !this.chat, FAILED→IDLE) is re-verified below and remains, but is now unreachable through this feature for every FAILED flavor.
F3 FAILED + pending approvals defers delivery Note Superseded. Probe P3 re-run: the terminal check precedes the streamingState check, so a FAILED agent with pending approvals has its queue dropped immediately (0 calls, frame a:[]), and clearing the approvals afterwards resurrects nothing. M-D1's P3 red (expected 'a:[held?]' to contain 'a:[]') reproduces the old deferral, confirming the probe detects the difference. Whether drop-on-pending-approval is desirable is a product call; noting it because round 2's "defers" no longer holds.
M2/M5/M6/M7 (matrix rows) gate-clause mutants on the getError()/source split Superseded. The source plumbing is fully reverted: RegisteredAgent has no source field, and all four production registerAgent call sites (useTeamInProcess.ts:108,133; useArenaInProcess.ts:93,116) pass exactly five arguments. The shipped team-gate test is gone (19 → 18 tests). M2 ("all FAILED dropped") is now the head state itself. Replaced by M-D1/M-F1/M-C1/M-C2 below.
N1 AppContainer holds an ungated direct enqueueMessage for the active-view agent Informational Stands (pre-existing). Re-measured at this base: the line is now AppContainer.tsx:2895 (round 2 cited :2874 — line drift, not a change); git diff HEAD^1..HEAD -- packages/cli/src/ui/AppContainer.tsx is empty and the line is byte-identical in the base tree. Not introduced, not worsened, not fixed by this PR.
N2 gate drops every FAILED with getError() set, including a loop-throw with a live chat Informational Moot. The getError() distinction no longer exists; all FAILED drop, so the loop-throw flavor is dropped along with everything else. The "drop by status-shape, not by chat-liveness" observation survives only as part of F2's widened fix.
PR body's broader-surface count "325 tests pass locally" Stale at this head: 329. Re-measured the exact command from the Reviewer Test Plan: 11 files, 329 passed, exit 0.

Central claim

Delivery of queued follow-ups lives in an always-mounted per-agent AgentQueueFlusher in AgentViewProvider, so an agent settling to idle while unfocused gets its queue delivered without a tab revisit; and every terminal status (COMPLETED/CANCELLED/FAILED, in every flavor) drops the queue instead of delivering or stranding it. The composer keeps display/submit only.

Secondary claims: (S1) each enumerated status clause is independently load-bearing; (S2) the round-3 delta (8041a8d0, all-FAILED-drop) is load-bearing and pinned; (S3) the gate's inline enumeration agrees with core's shared isTerminalStatus today.

A/B load-bearing proof

The PR's two shipped test files ran byte-identical (sha256-verified copies, 124199f0… and 201368c8…) against both source states:

Cell Source under test Oracle Result
head merge 4eafed49 (= base + PR) 2 files, expect all green 18/18 green (exit 0)
base HEAD^1 678ac2e1 + same files expect exactly the new-behavior tests red 6 failed | 12 passed (18) (exit 1)

The six base-red cells are exactly the behaviors this PR introduces, with the PR's claimed failure message verbatim:

  • delivers queued follow-ups while the user is on another tab (#10148)expected "spy" to be called 1 times, but got 0 times
  • handles the queue when the agent reaches 'completed' / 'cancelled' / 'failed' (#10148) — frame still contains queued at terminal
  • both AgentQueueFlusher FAILED delivery gate tests — expected 'a:[queued follow-up]' to contain 'a:[]' (queue stranded forever on base)

The 12 base-green cells are the pre-existing bridge/storage/join/same-batch/idle-submit tests. Cells as printed: 01-ab-head-18-green.png, 02-ab-base-6-red.png.

Control purity: the base worktree had no node_modules of its own; realpath of @qwen-code/qwen-code-core from inside it resolves to the head tree (/__w/qwen-code/qwen-code/packages/core), but the cli vitest alias resolves the bare specifier to the base tree's packages/core/index.ts, and git diff HEAD^1..HEAD -- packages/core is empty — so base core source is byte-identical to head core and the realpath confound is inert. The diff touches nothing outside packages/cli (4 files) and no lockfile, so sibling dist/ symlinks are the same artifact a base build would produce; the base tree's generated git-commit.ts was regenerated with the base SHA 678ac2e1.

Mutation matrix (scratch worktree at head; both shipped test files per mutant, 18 tests each)

# Mutation Predicted Observed Verdict
C-pos-A join('\n')join('|') (positive control, pinned by the composer test file) 2 red 2 red / 16 green (joins + same-batch) harness live, attribution correct
C-pos-B drop the registeredIdsRef append guard (positive control, pinned by the context test file — the same file the mutants' assertions live in) 1 red 1 red / 17 green (drops a same-batch append for an agent that is unregistering) chosen command collects tests exercising the mutated file
M-D1 DELTA: round-2 gate reconstructed (FAILED undeliverable only when getError() !== undefined) 2 red 2 red / 16 green — exactly the context recoverable test and the composer 'failed' it.each row; the fatal test stays green killed — the delta is load-bearing and pinned from both files
M-F1 FAILED removed from the drop enumeration 3 red 3 red / 15 green (all three FAILED-drop cells) killed
M-C1 COMPLETED removed 1 red 1 red / 17 green killed
M-C2 CANCELLED removed 1 red 1 red / 17 green killed
M1 flusher mounting removed from the provider 9 red 9 red / 9 green (7 composer + 2 FAILED-gate) killed — flusher load-bearing
M3 flushedQueueRef check+assign removed survive 18 green — survived adjudicated by probe P4 (see F1)
M4 base composer flush effect restored, flusher kept 3 red 3 red / 15 green, all expected "spy" to be called 1 times, but got 2 times killed — composer removal is the other half of exactly-once

Matrix as printed: 03-mutation-matrix-9-of-9-on-prediction.png. 9/9 on prediction. Every red quoted in logs/mutant-*.log names expected-vs-actual values, so no revert broke an import or a fixture.

Boundary probes (real useAgentStreamingState + real core AgentEventEmitter, no mocks of the unit under test)

queue-flusher-boundary.probe.test.tsx (in this artifact dir) drives status transitions over a real emitter; the shipped composer tests mock the hook, so this adds the live-event dimension.

Probe Fact under test Head vs M3 vs M-D1
P1 already-FAILED recoverable arena agent ✅ 0 calls, queue cleared (round 2: 1 call) ❌ delivered 1×
P2 RUNNING→FAILED over a real STATUS_CHANGE emit ✅ held while RUNNING, 0 calls + cleared on the event (round 2: delivered) ❌ delivered 1×
P3 FAILED + pending approvals ✅ dropped immediately; clearing approvals resurrects nothing (F3 superseded) ❌ deferred, queue held
P4 StrictMode mount with a pre-seeded queue ✅ exactly 1 call 2 calls (the only flip)
P5 unregister drops queue; same-id re-registration never delivers the stale queue ✅ 0 stale / 1 fresh
P6 fatal FAILED drops while an IDLE bystander in the same provider delivers ✅ 0 fatal / 1 bystander
P7 COMPLETED / CANCELLED / FAILED over a real emit ✅ 0 calls + cleared (×3) ❌ failed row delivered
P8 IDLE over a real emit delivers exactly once (symmetry control for P7) ✅ 1 call

10/10 green at head; 1 red vs M3; 4 red vs M-D1. P6's bystander proves each zero is a gated absence, not a broken delivery path; P8 proves the same live-event path that drops at terminal statuses delivers at IDLE.

Core semantics behind the gate (census, re-verified at this base)

The gate comment is now the sole justification for dropping recoverable FAILED, so each claim was re-checked against 678ac2e1:

  • One-shot terminal watcher: InProcessBackend.ts:229-242interactive.waitForCompletion().then(...) resolves once; on a terminal status it calls releaseAgentResources(agentId) then exitCallback?.(...). releaseAgentResources (:495-521) cancels owned monitors, clears the agent notification callback, runs approval cleanups and stops the tool registry — exactly the comment's "monitor notification routing removed, owned monitors cancelled". A revived round's second settle re-runs nothing (the promise already resolved).
  • ArenaManager revival: resolveTransition (ArenaManager.ts:1131-1146) returns null for every terminal→incoming pair except COMPLETED → RUNNING — FAILED → RUNNING is discarded, as claimed.
  • Unguarded enqueueMessage: agent-interactive.ts:321-326 — enqueue + restart the loop, no terminal guard.
  • Fatal flavor: :130-134 sets this.error = 'Failed to create chat session' + FAILED when createChat is falsy; :183 sets this.error on a run-loop throw; :256 sets only lastRoundError for round errors. runOneRound :212 early-returns on !this.chat; runLoopInner :167-181 then calls settleRoundStatus() (:425-433), which with no lastRoundError and no completeOnIdle sets IDLE — FAILED → IDLE, message consumed. All as claimed.
  • completeOnIdle census unchanged: the only assignment is TeamManager.ts:608 (false); InProcessBackend.ts:188 passes config through; nothing sets true.
  • Team teardown: TeamManager.ts:1845-1895 — on isTerminalStatus(event.newStatus) it unassigns tasks, emits TEAMMATE_EXITED, detaches the event-bridge cleanup and drops per-agent state synchronously in the same handler. Note its own stated policy: "a terminated teammate can never reach IDLE again, so anything queued here would be silently lost — better to refuse the send … than accept it and drop it" — the opposite of what the UI gate now does to the user's queued text (see F-new-1).
  • flushNextMessage gate: TeamManager.ts:2076 if (agent.getStatus() !== AgentStatus.IDLE) return; — unchanged from round 2.

Drift census: the gate's inline enumeration vs core's shared predicate (S3)

AgentStatus (core agent-types.ts:140-147) has exactly six members and isTerminalStatus (:150-153) is exactly {COMPLETED, FAILED, CANCELLED} — so head's inline three-way enumeration is extensionally equal today. The drift-census probe (queue-flusher-drift.probe.test.tsx) walks every enum member and asserts the gate agrees with isTerminalStatus: 7/7 green at head. Simulating the drift by adding a fourth terminal status TIMED_OUT to core's enum and isTerminalStatus in the scratch tree turns the timed_out row red with expected "spy" to be called +0 times, but got 1 times — the flusher delivers to a dead agent, the exact hazard the gate exists to prevent, with no user action. Candidate Fix A (gate calls isTerminalStatus) closes it: cell 3 = 8/8 green. Capture: 04-drift-hazard-simulated-and-fixed.png.

Corrections

The PR body's Reviewer Test Plan names a test that does not exist. It instructs the reviewer to expect red for drops the queue when the agent reaches a terminal status (#10148); no test with that title exists anywhere in packages/cli/src/ (grep: 0 hits). The behavior is covered — by the composer it.each rows handles the queue when the agent reaches 'completed'/'cancelled'/'failed' (#10148) and the two AgentQueueFlusher FAILED delivery gate tests — and the base cell reproduces the described failure shape (frame still containing the undeliverable message). This is a description drift, not a code defect: a reviewer following the plan verbatim greps for a nonexistent test. The other named test (delivers queued follow-ups while the user is on another tab (#10148)) exists and its claimed base failure message matches byte-for-byte.

Findings

No blocking findings. Order: new suggestions first, then carried/informational.

F-new-1 (new, Suggestion — user-visible information loss): the terminal drop destroys the user's queued text silently, with no recovery path.
BaseTextInput.tsx:229-234 clears the input buffer before calling onSubmit, so once a follow-up is accepted while the agent is busy, agentMessageQueues holds its only copy. The drop branch (AgentViewContext.tsx:198-200) then calls setAgentMessageQueue(agentId, []) without reading the messages — no join, no log, no history entry, no notice; AgentViewContext.tsx contains no logger at all, and QueuedMessageDisplay returns null on an empty queue, so the entries simply vanish. Because delivery now happens while unfocused (the PR's whole point), the user can be on another tab when their typed follow-up disappears; returning to the tab shows only the Failed: … / Completed / Cancelled label, which explains the agent's state but not that N queued follow-ups were discarded. The main session's queue has an ESC "pop queued messages into the input buffer" recovery affordance (InputPrompt.tsx:1141, #8201); the agent queue has none — InputPrompt.tsx and AppContainer.tsx contain zero references to agentMessageQueues, and AgentComposer's only escape handler cancels the round (AgentComposer.tsx:94-108). On base the text stayed visible forever (the stuck display this PR fixes); at head it is unrecoverable. Clearing the display is the requested fix, so the defect is the silence and unrecoverability, which the PR body's accepted-tradeoff list does not name — and core's adjacent TeamManager code states the opposite preference ("better to refuse the send … than accept it and drop it").
Measured minimal fix (Fix B): log the discard via createDebugLogger (precedent: BackgroundTaskViewContext.tsx:22,28). Applied in a scratch copy: 35/35 (18 shipped + 10 probes + 7 census) green, identical to the no-fix baseline; main-tree tsc --noEmit exit 0. A user-facing notice in the agent tab (e.g. extending the status-label row with "· N queued follow-ups discarded") is the maintainer's design call and is not claimed validated here.

Reproducing commands (all run at head, all four outputs as stated)
# 1. the input buffer is cleared BEFORE onSubmit — the queue holds the only copy
grep -n "buffer.setText('')" packages/cli/src/ui/components/BaseTextInput.tsx
#   232:          buffer.setText('');   (then 233: onSubmit(text))

# 2. the drop branch discards the messages without reading them
grep -n "setAgentMessageQueue(agentId, \[\])" packages/cli/src/ui/contexts/AgentViewContext.tsx
#   199 (terminal drop, messages never joined/logged)  vs  211 (deliver path joins first)

# 3. nothing in the file can report the discard — no logger at all
grep -c "debugLogger\|console\.\|logger" packages/cli/src/ui/contexts/AgentViewContext.tsx
#   0

# 4. no recovery affordance for the agent queue (main session has one: InputPrompt.tsx:1141)
grep -rn "agentMessageQueues\|appendToAgentMessageQueue" \
  packages/cli/src/ui/components/InputPrompt.tsx packages/cli/src/ui/AppContainer.tsx
#   (no output)

F-new-2 (new, Suggestion — maintainability/drift): the gate duplicates core's terminal predicate instead of calling it.
Base used !isTerminalStatus(status); head enumerates COMPLETED || CANCELLED || FAILED inline (AgentViewContext.tsx:190-192) and drops the isTerminalStatus import from the composer. Equal today (census above), but the day core adds a fourth terminal status the enumeration silently stops covering it: useAgentStreamingState.isInputActive would go false (composer input dead) while the flusher falls through to its deliver branch and enqueues into a dead agent — demonstrated by drift cell 2. Measured fix (Fix A): if (status !== undefined && isTerminalStatus(status)) (plus dropping the now-unused AgentStatus import, required by root noUnusedLocals). 35/35 green, main-tree tsc exit 0, and drift cell 3 green. The pinning fixture is the drift-census probe in this artifact dir; no fixture in the shipped suite can pin it today, which is precisely why the hazard is a drift risk rather than a live bug.

Reproducing commands (drift simulation, three cells)
# census: the two predicates agree today (6 enum members + 1 control, all green)
# then simulate the drift by adding a 4th TERMINAL status to core, then close it.
# (recreate the scratch tree first — it was removed after capture:)
V=tmp/pr10315-verify-20260903-195613
git worktree add --detach tmp/mut-tree HEAD && bash $V/wire-tree.sh tmp/mut-tree
cp $V/queue-flusher-drift.probe.test.tsx tmp/mut-tree/packages/cli/src/ui/contexts/
ARTDIR=$V/logs node $V/drift-cells.mjs
#   CELL 1 head (core untouched)                 exit=0 failed=0 passed=7 total=7
#   CELL 2 head + 4th terminal status TIMED_OUT  exit=1 failed=1 passed=7 total=8
#       RED: P9: AgentStatus.timed_out ...   AssertionError: expected "spy" to be
#            called +0 times, but got 1 times      <- delivered to a dead agent
#   CELL 3 cell 2 + Fix A (gate calls isTerminalStatus)  exit=0 failed=0 passed=8 total=8
git worktree remove --force tmp/mut-tree

F1 (carried, Suggestion — completeness): the StrictMode dedupe guard remains unpinned by shipped tests.
M3 survived the 18-test shipped suite again; probe P4 flips to called 1 times, but got 2 times against M3, so the guard is functional. The new census (F1 row above) shows its hazard shape is unreachable through production writers, so this is a defensive guard awaiting either a pinning test or removal — not dead code. No code change requested; P4 is a drop-in fixture.

N1 (carried, informational, pre-existing): AppContainer.tsx:2895 ungated direct enqueueMessage. Re-measured identical to base; out of scope for this PR; flagged for the feature owner.

Not covered

  • Per-commit attribution. Depth-2 checkout: the metadata snapshot lists 10 commits but only HEAD^2 (d0a206e6) is locally reachable (git rev-list HEAD^1..HEAD^2 returns 1 at the shallow boundary). The aggregate HEAD^1..HEAD diff is what was verified; the delta commit's behavior was nonetheless exercised in isolation (M-D1, M-F1, probes vs M-D1).
  • Real two-teammate TUI session — PR explicitly scopes this out (Agent Team: a queued Agent View message disappears after switching teammate tabs #10069 precedent). Component-level assertions reproduce the observable sequence; the enqueueMessage seam is asserted against a spy and core semantics come from the source census above.
  • Repo-wide test suite / other workspaces — affected surface only (11 files, 329 tests).
  • AppContainer.tsx:2895 reachability audit — only its identity with the base was verified (N1).
  • eslint rule coverage — the eslint gate on the four changed files exits 0 and is proven to read the files (a planted syntax error is reported at 489:14, exit 1), but this repo's eslint config does not flag an unused module-scope local (my first plant exited 0 silently); that class is caught by tsc's noUnusedLocals instead, which is proven live (planted TS2322, then clean). Prettier is proven live by a planted formatting break (exit 1), then clean on all four files.
  • Scratch-worktree typechecktsc cannot run in the scratch worktrees (TS6305, missing core .d.ts outputs); proven environmental by an A/A control (pristine head in the same worktree fails identically, logs/aa-tsc-control.log). All typechecks cited for the fixes ran in the main tree.
  • macOS/Windows — Linux container only.

Methodology

Environment: the CI verify container (node:22-bookworm, node v22.23.2), npm ci + npm run build pre-completed at the merge commit; PR metadata from the read-only snapshot (treated as untrusted input; no injection attempts observed). A/B, mutants, probes and fix cells ran in scratch git worktrees under tmp/ (removed after capture; main tree verified clean via git status --porcelain), wired to the root/nested node_modules and sibling dist/ by symlink — a clean control because the diff touches no lockfile and nothing outside packages/cli, with the core-realpath confound shown inert (vitest alias → base-tree core source, byte-identical to head). Tests drove the real AgentViewProvider through ink-testing-library; probes used the real useAgentStreamingState hook and core's real AgentEventEmitter with no mocks of the unit under test. One harness iteration is disclosed: the first P4 run died with Invalid hook call because the probe called useRef in a test callback; the corrected probe is what ran and is counted, and the aborted run is not. Assertion accounting: every vitest test execution counts as one scripted assertion — A/B head 18 + A/B base 18 + 9 mutants × 18 (162) + probes 10×3 (30) + drift census 7+8+8 (23) + fix cells 35×4 (140) + broader surface 329 + 10 gate assertions (planted/clean tsc, A/A control, 3 fix tsc, eslint parse-error control, eslint clean, prettier plant, prettier clean) = 730. Expected-failure cells (all base reds, every predicted mutant red, every planted gate violation) count as passes because the prediction is the assertion, so fail counts only unexpected outcomes — zero. Raw per-cell logs (logs/), the mutant/fix/drift runners, both probe files and four terminal captures (evidence/) live in this directory.

Flakiness gate log

rounds=5 files=2 skipped=0
file packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: (cd packages/cli) npx --no-install vitest run ./src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx
file packages/cli/src/ui/contexts/AgentViewContext.test.tsx: (cd packages/cli) npx --no-install vitest run ./src/ui/contexts/AgentViewContext.test.tsx


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: PPPPP
  packages/cli/src/ui/contexts/AgentViewContext.test.tsx: PPPPP

verdict: pass
summary: 2 changed test file(s) x 5 identical rounds, no divergence

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 1 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 2 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 2 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 3 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 3 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 4 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 4 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)
round 5 · packages/cli/src/ui/components/agent-view/AgentComposer.queuedMessages.test.tsx: P (exit 0)
round 5 · packages/cli/src/ui/contexts/AgentViewContext.test.tsx: P (exit 0)

Evidence images

01-ab-head-18-green

02-ab-base-6-red

03-mutation-matrix-9-of-9-on-prediction

04-drift-hazard-simulated-and-fixed

Harness scripts and raw logs are in the workflow run artifacts (7-day retention).

Qwen Code · sandboxed verification

@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.

LGTM, looks ready to ship. ✅

@qqqys

qqqys commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

[qqqys review patrol — e2e report] #10315 @ head d0a206e6db

Gate: ci-bot APPROVED at head (19:58Z); CI at head 19 success / 45 skipped / 0 failure (Test on all three platforms, Lint & Static, Integration no-AK, web-shell smoke, Desktop ×2 all green — the full cli unit suite passes at head).

Critical review: none found. Verified against the head tree, not just the diff:

  • Delivery eligibility is unchanged: isTerminalStatus (core agents/runtime/agent-types.ts:150) covers exactly {COMPLETED, FAILED, CANCELLED}, identical to the flusher's explicit triple — only where delivery lives moved (keyed composer → always-mounted per-agent AgentQueueFlusher in the provider), which is the Agent View: deliver queued follow-ups from the provider, not the keyed composer #10148 fix.
  • The FAILED-drop premise checks out: ArenaManager.resolveTransition (core agents/arena/ArenaManager.ts:1136-1146) discards every terminal→RUNNING transition except COMPLETED→RUNNING, so a follow-up delivered to a FAILED agent would indeed run outside ArenaManager's records.
  • No double-delivery path: after the diff the only production enqueueMessage call sites under cli/ui are the new flusher (AgentViewContext.tsx:212) and the pre-existing direct submit (AppContainer.tsx:2876); the composer's own flush is fully removed.
  • useAgentStreamingState(undefined) is safe (early return + optional chaining), EMPTY_MESSAGE_QUEUE retained in AgentComposer (:59, :207), StreamingState export confirmed at ui/types.ts:36.

tmux e2e (vitest A/B, head vs base):

  • Head d0a206e6dbAgentViewContext.test.tsx + AgentComposer.queuedMessages.test.tsx + AgentComposer.test.tsx: 21/21 passed.
  • Mutation arm — AgentViewContext.tsx swapped to the base 38fae41ddc version (pre-flusher), head tests kept: 9 failed / 9 passed. The failures are exactly the new behavior assertions (queued follow-up NOT delivered while the agent's tab is unfocused; queue NOT dropped at COMPLETED/CANCELLED/FAILED), proving the tests assert the PR's behavior and the provider flusher is load-bearing.
  • Head file restored → 21/21 green again.

Conclusion: no blocking issues; the delivery fix and the terminal-status drop are both pinned by tests that fail without the change. Mergeable from this patrol's perspective.

@qqqys qqqys 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.

Approving per the queued rule: head d0a206e6db unchanged since my e2e report (comment 5533725278, conclusion: mergeable), ci-bot's APPROVED at head stands, CI re-verified green just now (19 success / 45 skipped / 0 failure), and no Critical issue was found in review. / 按既定规则批准:head 未变,e2e 报告结论为可合入,ci-bot 已在 head 批准,CI 刚复核全绿(19 成功 / 45 跳过 / 0 失败),review 未发现 Critical 问题。

@yiliang114
yiliang114 added this pull request to the merge queue Sep 5, 2026
Merged via the queue into main with commit e09a45c Sep 5, 2026
113 of 123 checks passed
yiliang114 added a commit that referenced this pull request Sep 5, 2026
One overlapping file: packages/cli/src/ui/components/agent-view/AgentComposer.tsx.
main (#10315) removed the isTerminalStatus() call site, so the merged file keeps
this branch's subpath import split (AgentStatus from agents/runtime/agent-types.js,
ApprovalMode/APPROVAL_MODES from config/approval-mode.js) and drops the now-unused
isTerminalStatus import. package.json and ci.yml auto-merged with only this branch's
own additions (check:core-subpath-exports script and its CI step).

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Patrol-Run: qwen-pr-closeout/jmtof0f82lb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review/self-reported The linked issue was opened by the PR author (self-reported)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Agent View: deliver queued follow-ups from the provider, not the keyed composer

3 participants