Skip to content

feat: agent board — share work across independently started agents - #9402

Open
yiliang114 wants to merge 46 commits into
mainfrom
chore/remove-unwired-agent-view
Open

feat: agent board — share work across independently started agents#9402
yiliang114 wants to merge 46 commits into
mainfrom
chore/remove-unwired-agent-view

Conversation

@yiliang114

@yiliang114 yiliang114 commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

Scope clarification: this PR implements the portable Board layer only. It does not complete the original #8724 Qwen-to-Qwen product flow, start or wake an agent, or turn --owner into a runtime address. The design now records the user-visible sequence explicitly: existing Agent Team for spawned Qwen teammates, session registry + inbound gate + sender addressing for already-running Qwen sessions, an optional independent-process launcher, then concrete foreign-runtime runners such as Codex. This PR should not block that Qwen-to-Qwen sender path or be presented as a standalone delegation milestone.

What this PR does

Adds a filesystem-backed board through which independently started agents can share tasks and questions. Every command names the board explicitly with --board; every mutation declares its actor with --as. There is no membership, join/leave flow, participant record, heartbeat, roster, ambient identity, process-global board context, launcher, wake path, or runtime addressing.

The storage layer uses private directories/files, UUID item ids, exclusive creation, per-item in-process and cross-process locks, validated records, atomic updates, and lock-scoped prune eligibility checks. Malformed foreign records are skipped by listings and rejected without being rewritten by targeted mutations.

The CLI supports show, task, claim, done, ask, answer, decline, and prune, with stable JSON output. Bounded ask waits distinguish answered, declined, item-TTL timeout, and local-wait timeout outcomes by exit code.

This PR also includes the design from #9399. It implements the Board storage and CLI contract. A standalone merge is a maintainer decision to ship that low-level experimental surface; otherwise it should land with a concrete native consumer or runner.

Why it's needed

Agent Team coordinates Qwen workers spawned by one session, while #8724 owns discovery and messaging between already-running Qwen Code sessions. Neither gives a non-Qwen process a durable shared work surface. A pull-based CLI is the smallest storage contract shared by Qwen Code, Codex, shell scripts, and scheduled jobs, but it is not itself the user-facing scheduler.

Reviewer Test Plan

How to verify

  1. Create a task with qwen board task "check the API" --board demo --as api --json; claim and complete the returned id as another actor. Expect show --board demo --json to report the completed task, owner, and note.
  2. Create an ask from api to web; confirm another actor cannot answer it, web can answer or decline it, and --wait returns exit codes 0/2/3/4 for answered/declined/item timeout/local wait timeout.
  3. Place a malformed matching JSON record beside a healthy record. Expect listing to retain the healthy item, and a targeted mutation of the malformed item to fail without changing its bytes.
  4. Race pruning against a record reopened while its item lock is held. Expect pruning to re-read under the lock and preserve the reopened record.
  5. Verify directories and files are private, unsafe path/device names are rejected, ids remain unique under concurrent creation, and human output preserves complete actionable ids.

Evidence (Before & After)

Before: independently started agents had no durable shared task/question surface.

After: a real CLI smoke test completed task → concurrent cross-process claim → done and ask → answer → show using one named board. Only one of two concurrent claim processes succeeded. This evidence validates the Board contract; it does not demonstrate agent launch or message delivery.

Tested on

OS Status
macOS
Windows ⚠️ Native Board test still pending
Linux ⚠️ Latest head CI pending

Environment

Node.js 22. After merging the latest main, npm install/prepare/build completed successfully; focused Core and CLI tests passed (78 tests total), the Core build passed, and both package typechecks passed. The route clarification commit changes documentation only and passed the pre-commit formatting gate.

Risk & Scope

  • Main risk or tradeoff: collaboration is cooperative and pull-based; actor names are labels, not authentication, and an idle agent sees work only when it reads the board.
  • Not validated / out of scope: Qwen-to-Qwen sender addressing, process launch, Windows runtime smoke, slash commands, footer polling, fleet/tmux orchestration, push delivery, remote boards, and same-checkout multi-writer workflows.
  • Breaking changes / migration notes: none; Agent Board has not shipped, and the on-disk format remains experimental.

Linked Issues

Tracking: #8724. The design from #9399 is included in this PR. The original #8724 Qwen-to-Qwen flow continues through #9576 and a sender/addressing follow-up rather than through this Board CLI.

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Re-run note: this pass reviews 4f474e6e — two commits past the last reviewed head b04948c6, and both of them are exactly the round-5 fixes: 271c1695 (validate --timeout before writing; drain stdout before the early exit) and 4f474e6e (prune --json reports bare ids). Nothing else changed — verified with the two-head diff (+155/−20 across four files).

Template: all required headings present and filled in ✓. The Chinese <details> translation block is still missing from the PR body — non-blocking, same note as the last pass.

Problem: unchanged — real and tracked. #8724 asks for same-machine sessions to share work; design discussion #9399 scopes it. Independently started agents still have no shared work surface today, and peer-agent collaboration remains an active, validated area in the ecosystem.

Direction: aligned, unchanged. The feature is purely additive — a new board subcommand and a dedicated core ./board subpath export — and touches no auth/sandbox/telemetry/public-contract surface.

Size: core paths are touched (packages/core/src/agents/team/*, the ./board subpath, core package.json). Breakdown of the 2,085 added lines at this head: 1,165 production logic, 654 tests, 258 docs, 8 config/build. The author is a maintainer (admin), so the two-tier core gate does not apply; the 1,000-line advisory is noted, but this remains one cohesive feature. The delta since the last pass is +109 test lines for +29 production lines — the fixes came with regression tests, not prose.

Approach: the two commits are the minimal fix set round 5 asked for, with no drive-by changes. R5-1 is the validation hoist above createAsk; R5-2 makes emit await stdout's write callback (EPIPE ends quietly, other write errors fail loudly); R5-3 is a one-line basename in pruneCollection. Carry-over non-blocking hygiene, unchanged: the head branch is still named chore/remove-unwired-agent-view from the abandoned deletion, and prune still discards --as after validating it.

Risk: no elevated signals — none of the changed files match the revert-correlated path list.

Moving on to code review. 🔍 /review round 6 landed on this exact head while these checks were running — the Stage 2 comment covers what it found (spoiler: nothing new).

中文说明

Re-run 说明:本次审查的是 4f474e6e —— 距上一被审 head b04948c6 多了两个 commit,且恰好都是第 5 轮要求的修复:271c1695(写入前校验 --timeout;提前退出前排空 stdout)与 4f474e6eprune --json 报告裸 id)。别无其他改动——已通过两个 head 之间的 diff 核实(4 个文件,+155/−20)。

模板:所有必需标题齐全且已填写 ✓。PR 正文仍缺中文 <details> 翻译块——不阻塞,与上一轮相同的提示。

问题:不变——真实且有跟踪。#8724 请求同机 session 共享工作;设计讨论 #9399 界定范围。独立启动的 agent 今天仍没有共享工作表面,peer-agent 协作在生态中仍是活跃且已被验证的方向。

方向:对齐,不变。功能纯新增——新的 board 子命令与专用 core ./board 子路径导出——未触及 auth/sandbox/telemetry/公共契约表面。

规模:触及核心路径(packages/core/src/agents/team/*./board 子路径、core package.json)。本 head 2,085 行新增的构成:1,165 行生产逻辑、654 行测试、258 行文档、8 行配置/构建。作者是维护者(admin),双层核心门禁不适用;1,000 行建议线已注明,但这仍是一个内聚功能。较上一轮的增量为 +109 行测试对 +29 行生产代码——修复带着回归测试一起来的,而不是只有文字说明。

方案:两个 commit 正是第 5 轮要求的最小修复集,无夹带改动。R5-1 是把校验提前到 createAsk 之前;R5-2 让 emit 等待 stdout 写回调(EPIPE 静默结束,其他写错误高声失败);R5-3 是 pruneCollection 里一行 basename。遗留的非阻塞卫生问题,不变:head 分支名仍是废弃删除遗留的 chore/remove-unwired-agent-viewprune 仍在校验后丢弃 --as

风险:无升级信号——变更文件均未命中 revert 相关路径列表。

进入代码审查。🔍 /review 第 6 轮恰好落在同一 head 上——其结果(剧透:没有新发现)见 Stage 2 评论。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Re-run note: replaces the Stage 2 review of b04948c6. Everything below is about the Agent Board MVP at 4f474e6e, whose only delta from the last reviewed head is the two round-5 fix commits — verified independently against the head tree, not taken at the diff's word.

Code review

My independent proposal for the round-5 blockers, written before reading the fix commits: R5-1 is a hoist of the --timeout validation above createAsk; R5-2 needs emit to await stdout's write callback before the handler resolves — EPIPE (reader closed, e.g. | head) treated as a normal exit, any other write error propagated — because a bare writeSync or fire-and-forget write cannot survive the early-exit process.exit; R5-3 is path.basename(file, '.json') in pruneCollection. That is exactly what landed — I have no simpler version to point at.

What I verified by reading the tree at this head:

  • R5-1 fixed and pinned. waitMs = a.wait ? finiteNumber(a.timeout * 1000, '--timeout', 0) : 0 now runs before createAsk, so a rejected --timeout fails through run() (stderr + exit 1) with nothing written — matching how --ttl already behaved. The new tests exercise --timeout=-5 and --timeout=abc and assert createAsk is never called. The orphan is gone.
  • R5-2 fixed and pinned. emit is async and awaits the write callback; a closed reader (EPIPE) resolves quietly while any other write failure rejects to a stderr message and exit 1, and a guarded no-op error listener keeps the double-reported EPIPE from surfacing as an uncaught exception. Every board handler now awaits emit, and board sits in parseArguments's early-exit list, whose process.exit(process.exitCode ?? 0) can therefore only run after stdout has drained. Three new tests pin the contract: the handler must not resolve while a write is still queued (the exact property process.exit depends on), EPIPE exits clean with no stderr, and ENOSPC reports and fails.
  • R5-3 fixed and pinned. pruneCollection pushes path.basename(file, '.json') — the item id every other surface reports — with a regression test asserting pruneAsks resolves to [ask.id].

The rest of the surface is unchanged from the head the previous pass verified end to end (storage discipline, two-tier locking, hostile-record handling, exit-code contract), so nothing else was re-litigated. /review round 6 landed on this exact head while these checks ran: zero new findings. Its deferred probes — branch-level test coverage, wall-clock re-validation, symlink noFollow hardening, the plan-doc wording mismatches — sit in the round-6 ledger as convergence deferrals, recorded but not requested; none rises to a blocker.

The cross-process handshake the feature is built around:

sequenceDiagram
    participant P1 as Agent A process
    participant P2 as board files under .qwen boards
    participant P3 as Agent B process
    P1->>P2: task create (exclusive write, uuid)
    P3->>P2: show, then claim id (cross-process lock)
    P3->>P2: done id with note
    P1->>P2: ask web question --wait (poll loop)
    P3->>P2: answer id (addressee only, locked settle)
    P2-->>P1: wait loop sees answered, exit 0
Loading

Testing evidence

This is an unattended CI run — I did not build or execute PR code (the agent env holds a write PAT, and the PR's own CI already ran the suite in isolation). Evidence carried: the check results below for the exact reviewed commit, plus static verification of every claim above. Not verified: live terminal behavior (no tmux on the CI path) and Windows/macOS runtime behavior — the author's smoke was macOS-only per the PR body; the platform unit jobs and CLI integration suite are merge-queue-gated by repository design, so the merge queue provides that coverage before landing.

All checks on 4f474e6e are completed — zero pending. Both pull_request-event workflow runs landed green on the exact head: Qwen Code CI and Security Checks.

Check Conclusion
Test (ubuntu-latest, Node 22.x) ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Desktop Shell (windows-2022) ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success
Dependency CVE audit ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success
Secret scan (TruffleHog) ✅ success
Test (macos-latest, Node 22.x) ⏭️ skipped (merge-queue-only by design)
Test (windows-latest, Node 22.x) ⏭️ skipped (merge-queue-only by design)
Integration Tests (CLI, No Sandbox) ⏭️ skipped (merge-queue-only by design)

The green suite genuinely pins the fixes this time — the drain-before-resolve and validate-before-write tests fail if the fixes are reverted — but it mocks the core API and stdout, so it proves the handler contract, not a real OS pipe. The round-5 measured reproduction (700-task board, 153 KB through a pipe) remains the witness for the failure mode the drain addresses.

Sandboxed verification would settle the remainder: @qwen-code /verify — an A/B run against the base build is the lane that proves end-to-end what the mocked suite structurally cannot: that ask --wait --timeout=-5 leaves no record on disk, and that a piped show --json past 64 KB arrives complete with exit 0 on the fixed build.

中文说明

Re-run 说明:替换对 b04948c6 的 Stage 2 审查。以下全部针对 4f474e6e 的 Agent Board MVP;它与上一被审 head 的唯一差异是两个第 5 轮修复 commit——均在本 head 树上独立核实,不轻信 diff。

代码审查:读修复 diff 之前的独立方案——R5-1 把 --timeout 校验提前到 createAsk 之上;R5-2 让 emit 等待 stdout 写回调后再让 handler 结束(EPIPE 即读者关闭按正常退出处理,其他写错误继续上抛),因为裸 writeSync 或发射后不管的写法都撑不过提前退出路径的 process.exit;R5-3 是 pruneCollection 里的 path.basename(file, '.json')。落地的修复与此完全同形,我没有更简的版本。

在本 head 树上核实:R5-1 已修复且有测试钉住 —— waitMscreateAsk 之前计算校验,非法 --timeoutrun() 以 stderr + 退出码 1 失败、不落盘任何记录;新测试对 -5abc 断言 createAsk 从未被调用,孤儿不复存在。R5-2 已修复且有测试钉住 —— emit 异步等待写回调;EPIPE 静默正常结束,其他写失败转为 stderr 信息与退出码 1,受保护的 no-op error 监听器避免 EPIPE 的二次上报成为未捕获异常;所有 board handler 均 await emit,而 board 位于提前退出列表中,因此 process.exit 只能在 stdout 排空后执行;三个新测试分别钉住:写仍在排队时 handler 不得结束(正是 process.exit 依赖的性质)、EPIPE 干净退出、ENOSPC 报错失败。R5-3 已修复且有测试钉住 —— prune 现在报告裸 id,回归测试断言 pruneAsks 解析为 [ask.id]

其余表面与上一轮端到端核实过的 head 完全一致(存储纪律、双层锁、坏记录处理、退出码契约),未重复审查。/review 第 6 轮恰好落在同一 head:零新发现;其收敛性延期项(分支级测试覆盖、墙钟重校验、符号链接 noFollow 加固、计划文档措辞偏差)记录在第 6 轮 ledger 中,均不构成阻塞。

测试证据:无人值守 CI 运行——未构建或执行 PR 代码。所携证据为被审 commit 的真实 check 结果与上述静态核实。4f474e6e 上所有 check 已完成、零挂起:Qwen Code CISecurity Checks 两个 pull_request 工作流均绿色通过。macOS/Windows 单测与 CLI 集成测试的 skipped 为仓库设计(merge_group 限定),合并队列在落地前提供平台覆盖。未验证:实时终端行为(CI 路径无 tmux)与 Windows/macOS 运行时行为——作者冒烟仅覆盖 macOS。绿色套件这次真正钉住了修复(回退修复会使新测试失败),但它 mock 了 core API 与 stdout,证明的是 handler 契约而非真实 OS 管道;第 5 轮的 700 任务实测复现仍是该失败模式的见证。

沙箱验证可以收尾其余部分:@qwen-code /verify 的 A/B 运行是证明以下两点的通道——ask --wait --timeout=-5 不在磁盘留下任何记录、超过 64KB 的管道 show --json 完整到达且退出码为 0——这两点 mocked 套件在结构上无法覆盖。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Confidence: 4/5 — everything round 5 blocked on is fixed at this exact head and pinned by regression tests, round 6 found nothing new, and CI is fully green. The remaining items are probe-level deferrals and platform runtime coverage, not blockers.

Stepping back: my independent proposal for the two Criticals and the suggestion was, line for line, what landed — the --timeout hoist, the awaited stdout write callback with sane EPIPE semantics, and the bare-id prune report. There was no simpler version, and the author shipped them as two minimal commits (+29 production lines) with +109 lines of tests that fail if the fixes are reverted. That is the pattern across this PR's whole life: speculative surface cut when asked (−477 lines earlier), findings answered with scoped fixes rather than defenses. If I had to maintain this in six months I'd thank the author — the lock module is honest about its scope, the storage discipline is tested at every seam, and the comments explain the why (the exit-path drain, the double-reported EPIPE) exactly where a future reader needs them.

The honest reservations, none of them blocking:

  • The mocked-stdout suite proves the handler contract, not a real OS pipe. The drain fix is the canonical one (await the write callback before process.exit can run), but an end-to-end witness on a real pipe would close the loop — that is what the @qwen-code /verify lane named above is for.
  • The round-5/round-6 ledgers carry probe-level follow-ups (exit-4 path emits no JSON under --json, claim overwrites a creation-time owner, wall-clock re-validation, symlink noFollow hardening, and friends). Recorded, worth a sweep at some point, none gates this merge.
  • Hygiene only, per the re-run rule not worth deferring for: the head branch is still named after the abandoned agent-view deletion, and the PR body still lacks the Chinese translation block.

Verdict: approve. The standing round-5 CHANGES_REQUESTED review was mine against b04948c6; its two Criticals and the suggestion are resolved at this head, so this approval from the same account supersedes it. Approval is pinned to the reviewed commit below. CI has fully settled on this head (both pull_request workflows green, zero pending), so no deferred-approval marker is needed.

中文说明

置信度:4/5 —— 第 5 轮阻塞合并的所有问题都已在当前 head 修复并由回归测试钉住,第 6 轮没有新发现,CI 全绿。剩余事项是 probe 级延期项与平台运行时覆盖,不构成阻塞。

退一步看:我为两个 Critical 与建议准备的独立方案,与落地的修复逐行同形——--timeout 校验提前、等待 stdout 写回调并妥善处理 EPIPE、prune 报告裸 id。没有更简的版本;作者以两个最小 commit(+29 行生产代码)交付,并附上 +109 行测试——回退修复测试即失败。这正是该 PR 整个生命周期的模式:被要求时砍掉推测性表面(早前 −477 行),用有边界的修复而非辩护回应发现。六个月后维护这段代码我会感谢作者——锁模块对自身范围诚实,存储纪律处处有测试,注释恰好在未来读者需要处解释"为什么"(退出路径排空、EPIPE 的二次上报)。

诚实的保留意见,均不阻塞:mocked-stdout 套件证明的是 handler 契约而非真实 OS 管道;排空修复是标准做法(在 process.exit 能执行前等待写回调),但真实管道上的端到端见证能画上句号——这正是上面 @qwen-code /verify 通道的用途。第 5/6 轮 ledger 中留有 probe 级后续项(exit-4 路径在 --json 下不输出 JSON、claim 覆盖创建时预分配的 owner、墙钟重校验、符号链接 noFollow 加固等),值得日后一并清理,但不构成本次合并门槛。仅卫生问题(按 re-run 规则不值得为此延迟):head 分支名仍是废弃的 agent-view 删除遗留,PR 正文仍缺中文翻译块。

裁决:批准。 当前挂起的第 5 轮 CHANGES_REQUESTED 审查是我针对 b04948c6 留下的;其两个 Critical 与建议已在当前 head 解决,因此同一账号的本次批准将其取代。批准固定于下方被审 commit。CI 已在该 head 完全落定(两个 pull_request 工作流绿色、零挂起),无需延迟批准标记。

Qwen Code · qwen3.8-max

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

@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 84.94% 84.94% 90.19% 84%
Core 88.16% 88.16% 89.73% 86.65%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   84.94 |       84 |   90.19 |   84.94 |                   
 src               |   85.83 |    81.72 |   88.13 |   85.83 |                   
  cli.ts           |   95.69 |    84.11 |     100 |   95.69 | ...61-562,566-567 
  gemini.tsx       |    73.4 |    78.04 |   80.76 |    73.4 | ...1338-1342,1469 
  ...ractiveCli.ts |   88.25 |    82.33 |   89.06 |   88.25 | ...3147,3153,3219 
  ...liCommands.ts |   88.93 |    83.21 |      80 |   88.93 | ...97-599,615,721 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   72.42 |    75.07 |   91.83 |   72.42 |                   
  acpAgent.ts      |   71.58 |    74.67 |   91.16 |   71.58 | ...44,13049-13051 
  ...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 |    88.23 |     100 |     100 | 17,32             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...figuration.ts |     100 |      100 |     100 |     100 |                   
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |    97.1 |    95.83 |   93.33 |    97.1 |                   
  filesystem.ts    |    97.1 |    95.83 |   93.33 |    97.1 | ...22-123,246-247 
 ...ration/session |   91.23 |    86.47 |   95.93 |   91.23 |                   
  Session.ts       |    90.6 |    85.16 |   95.38 |    90.6 | ...89,12216-12220 
  ...entTracker.ts |   96.81 |    89.36 |      90 |   96.81 | 137-143,222       
  ...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.18 |     86.2 |     100 |   94.18 | ...15,319,399,403 
  ...y-replayer.ts |   83.17 |    92.98 |   94.11 |   83.17 | ...24-142,260-262 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.76 |    87.32 |     100 |   89.76 | ...54-270,326-328 
  ...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 |    94.3 |     87.5 |     100 |    94.3 | 65-71             
  ...on-tracker.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ssion/emitters |   95.62 |    92.69 |   96.96 |   95.62 |                   
  ...ageEmitter.ts |   95.25 |    93.54 |     100 |   95.25 | ...08-115,128-129 
  PlanEmitter.ts   |     100 |       90 |     100 |     100 | 66                
  base-emitter.ts  |   78.26 |       75 |     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 |    91.8 |    89.13 |   94.44 |    91.8 |                   
  LlmRewriter.ts   |    82.4 |     86.2 |     100 |    82.4 | ...,88-89,166-170 
  ...Middleware.ts |   96.96 |    88.09 |     100 |   96.96 | 144,152-154       
  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    |      89 |    81.54 |   91.44 |      89 |                   
  attach-lease.ts  |     100 |    96.96 |     100 |     100 | 173               
  ...t-cli-argv.ts |     100 |      100 |     100 |     100 |                   
  ...ged-detach.ts |     100 |     90.9 |     100 |     100 | 40,64             
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  pty-host-env.ts  |     100 |      100 |     100 |     100 |                   
  ...st-process.ts |   87.99 |    77.53 |    94.2 |   87.99 | ...1219,1309-1311 
  pty-host.ts      |   84.51 |     84.9 |   90.47 |   84.51 | ...14-516,531-532 
  ...sor-client.ts |   80.38 |    72.27 |   76.66 |   80.38 | ...22-626,652-656 
  ...or-process.ts |   96.61 |    89.47 |   84.61 |   96.61 | 129-130,150-151   
  ...sor-runner.ts |    84.9 |     75.6 |      85 |    84.9 | ...44,468,471-481 
  ...sor-server.ts |   85.71 |    83.06 |   95.45 |   85.71 | ...67-468,471-488 
  ...isor-store.ts |   97.73 |    81.29 |     100 |   97.73 | ...92,594,607,643 
  ...nal-bridge.ts |   93.98 |    91.54 |   83.33 |   93.98 | 228-238           
  ...r-sideband.ts |   95.37 |    86.44 |     100 |   95.37 | 203-204,228-233   
 src/commands      |   88.62 |     79.2 |   66.03 |   88.62 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  board.ts         |   81.52 |    84.74 |   66.66 |   81.52 | ...72-281,300-302 
  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.82 |      100 |      50 |   98.82 | 96                
  serve.ts         |   88.95 |    74.52 |     100 |   88.95 | ...74,877-880,892 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...commands/board |   83.33 |    83.33 |     100 |   83.33 |                   
  context.ts       |    87.5 |    83.33 |     100 |    87.5 | 19-20             
  render.ts        |      80 |    83.33 |     100 |      80 | 26-29             
 ...mmands/channel |   89.08 |    88.56 |   90.64 |   89.08 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |   94.88 |    95.49 |      90 |   94.88 | ...20-323,368-371 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   95.88 |    96.35 |     100 |   95.88 | ...08-213,271-274 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.91 |    85.55 |   94.33 |   93.91 | ...1264,1271-1272 
  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         |    85.8 |    82.17 |      88 |    85.8 | ...85,591-594,606 
  ...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  |   90.31 |    84.61 |   83.33 |   90.31 |                   
  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          |   93.15 |    84.84 |      80 |   93.15 | ...78-180,198-199 
  reconnect.ts     |   78.85 |    66.66 |   85.71 |   78.85 | 42-55,169-191     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   90.19 |    89.64 |   90.53 |   90.19 |                   
  agent-prompt.ts  |   94.22 |    92.93 |   97.56 |   94.22 | ...1964,2993-3073 
  base-tree.ts     |   76.16 |    80.76 |   77.77 |   76.16 | ...50-371,373-386 
  capture-local.ts |      70 |     90.9 |      75 |      70 | 112-116,163-194   
  ...k-coverage.ts |   50.71 |       35 |   66.66 |   50.71 | ...40-245,279-289 
  cleanup.ts       |   92.79 |     88.7 |   84.61 |   92.79 | ...43-648,650-651 
  comment-body.ts  |   67.85 |    87.09 |   66.66 |   67.85 | ...30,157,159-164 
  ...ent-status.ts |   93.19 |    84.61 |   83.33 |   93.19 | 302,442,573-593   
  ...ose-review.ts |   96.79 |     93.2 |   98.07 |   96.79 | ...4150-4194,4434 
  cost-ledger.ts   |   94.58 |     94.4 |   81.25 |   94.58 | ...53-654,694-704 
  drive.ts         |   76.07 |    85.71 |   81.81 |   76.07 | ...90-492,497-499 
  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.06 |    92.45 |      96 |   97.06 | ...1655,1713-1718 
  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.65 |     100 |   99.48 | 553,824,880       
  plan-diff.ts     |    68.1 |      100 |   66.66 |    68.1 | 162-205           
  pr-context.ts    |   95.44 |    86.15 |     100 |   95.44 | ...1729,1818-1834 
  presubmit.ts     |   90.52 |    88.82 |      90 |   90.52 | ...74-775,861-891 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...79-483,510-556 
  ...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 
  run.ts           |   82.66 |    88.54 |   94.11 |   82.66 | ...19,635-689,703 
  save-artifact.ts |   91.92 |    87.77 |   93.75 |   91.92 | ...06-409,502-505 
  script-lint.ts   |   81.27 |    79.38 |   88.88 |   81.27 | ...69-783,785-807 
  submit.ts        |   88.56 |    87.87 |      90 |   88.56 | ...08,850,878-914 
  test-delta.ts    |    86.4 |       92 |      60 |    86.4 | 177-208,471-479   
  test-efficacy.ts |   88.04 |    84.12 |   95.45 |   88.04 | ...2602,2610-2630 
  test-plan.ts     |   91.36 |    91.35 |   89.47 |   91.36 | ...35-836,900-917 
 ...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 |   98.05 |    95.57 |   98.79 |   98.05 |                   
  agent-briefs.ts  |      99 |      100 |      50 |      99 | 757-758           
  ...t-identity.ts |     100 |      100 |     100 |     100 |                   
  anchors.ts       |     100 |    96.42 |     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 |   93.36 |    94.39 |     100 |   93.36 | ...14-320,490-491 
  budget.ts        |     100 |    97.97 |     100 |     100 | 887,940           
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  certification.ts |     100 |      100 |     100 |     100 |                   
  coverage.ts      |   98.71 |    94.77 |     100 |   98.71 | ...1097,1642-1643 
  deadline.ts      |   98.03 |    91.73 |     100 |   98.03 | ...20,752,820,837 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   98.73 |    93.04 |     100 |   98.73 | ...41,264,290-291 
  disk.ts          |     100 |      100 |     100 |     100 |                   
  effort.ts        |     100 |      100 |     100 |     100 |                   
  failing-files.ts |     100 |    93.33 |     100 |     100 | 41                
  gh.ts            |   89.09 |    95.38 |   77.77 |   89.09 | ...29,366-367,394 
  git.ts           |   97.84 |    96.15 |     100 |   97.84 | 207-208           
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  ...audit-gate.ts |     100 |     97.5 |     100 |     100 | 135               
  ledger.ts        |     100 |      100 |     100 |     100 |                   
  local-diff.ts    |   84.86 |    90.38 |     100 |   84.86 | ...63-473,475-483 
  ...ry-context.ts |   96.61 |    95.48 |     100 |   96.61 | ...47-450,496-499 
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.23 |    95.29 |     100 |   98.23 | ...,819,1200,1217 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.47 |    78.57 |     100 |   90.47 | 32-33,36-37       
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   97.84 |    94.23 |     100 |   97.84 | 85-86             
  report.ts        |   92.85 |    86.66 |     100 |   92.85 | 204-205,207-211   
  ...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.1 |     100 |   99.55 | 548-549           
  ...w-settings.ts |     100 |    94.73 |     100 |     100 | 79                
  roster.ts        |     100 |    95.52 |     100 |     100 | 136,154,199       
  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 |    94.11 |     100 |     100 | 35                
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.21 |    94.11 |     100 |   98.21 | 433,474,514-515   
  test-utils.ts    |     100 |      100 |     100 |     100 |                   
  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.77 |     100 |     100 | 222,452,499,512   
  worktree.ts      |     100 |      100 |     100 |     100 |                   
 ...w/lib/platform |   76.52 |    80.57 |   78.37 |   76.52 |                   
  aone-client.ts   |   14.28 |      100 |       0 |   14.28 | ...7,82-83,91-127 
  aone.ts          |   80.33 |    78.48 |   81.25 |   80.33 | ...17,481-486,538 
  github.ts        |   96.05 |    75.67 |     100 |   96.05 | 26-29,213-214     
  registry.ts      |     100 |    95.65 |     100 |     100 | 84                
  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.95 |    89.87 |   96.28 |   94.95 |                   
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   89.35 |    83.56 |     100 |   89.35 | ...97-298,314-315 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   89.14 |    88.69 |   83.78 |   89.14 | ...2500,2502-2510 
  ...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 |                   
  environment.ts   |    96.5 |    93.51 |      95 |    96.5 | ...85-586,640-641 
  ...le-watcher.ts |   90.86 |    83.65 |   95.83 |   90.86 | ...23-325,370,418 
  ...resh-state.ts |   90.57 |    97.29 |   93.75 |   90.57 | 137-142,146-152   
  ...ime-reload.ts |     100 |    69.69 |     100 |     100 | ...12-113,122-123 
  hot-reload.ts    |     100 |    89.13 |     100 |     100 | 47,172-178,238    
  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  |   96.55 |    95.55 |     100 |   96.55 | 223-224,229-231   
  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.75 |     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.27 |    92.64 |      90 |   91.27 | ...1030,1032-1033 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...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 
  ...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 |    77.77 |   83.33 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |    77.77 |     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          |   86.22 |    81.92 |   89.65 |   86.22 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  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 |   80.98 |    77.27 |   84.12 |   80.98 |                   
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...31-632,635-636 
 ...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 |   45.95 |    69.03 |   55.26 |   45.95 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   55.01 |    67.14 |   58.33 |   55.01 | ...15-624,639-644 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   40.64 |    68.11 |   46.66 |   40.64 | ...72-684,693-722 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.16 |    94.22 |   95.29 |   98.16 |                   
  ...putAdapter.ts |   98.02 |     93.3 |   98.07 |   98.02 | ...1433,1449-1450 
  ...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/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.61 |    95.04 |     100 |   99.61 |                   
  ...livery-ipc.ts |     100 |     90.9 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  cpu-percent.ts   |     100 |      100 |     100 |     100 |                   
  ...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.32 |     100 |     100 | 53,93-94,172,192  
  ...ls-mapping.ts |     100 |      100 |     100 |     100 |                   
 src/serve         |   88.18 |    84.75 |   90.81 |   88.18 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.99 |    91.58 |     100 |   93.99 | ...29-430,433-435 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    98.07 |     100 |     100 | 703               
  ...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.89 |     100 |    94.1 | ...75-477,484,486 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   89.64 |    94.11 |   96.29 |   89.64 | ...57-269,521-524 
  ...ebhook-ipc.ts |    98.5 |    86.66 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.27 |     85.2 |     100 |   87.27 | ...10,816-820,838 
  ...er-manager.ts |   89.39 |    83.88 |   93.33 |   89.39 | ...98,711,722-724 
  ...horization.ts |     100 |      100 |     100 |     100 |                   
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 88-89             
  ...supervisor.ts |   92.54 |    84.53 |   97.14 |   92.54 | ...1489,1543-1547 
  ...e-grouping.ts |     100 |    94.28 |     100 |     100 | 71,137            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |    90.9 |     78.6 |   94.73 |    90.9 | ...1001,1022-1027 
  ...tree-guard.ts |   92.89 |    87.55 |     100 |   92.89 | ...2766,2836-2840 
  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.69 |    91.94 |     100 |   98.69 | ...1590,1592-1593 
  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.41 |     100 |   94.94 | ...30,708,724,734 
  fast-path.ts     |   90.99 |    81.38 |   95.45 |   90.99 | ...33-542,608-609 
  ...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 
  ...back-binds.ts |     100 |    88.88 |     100 |     100 | 32                
  ...-workspace.ts |    90.9 |    85.71 |     100 |    90.9 | ...30-131,142-143 
  ...iders-edit.ts |     100 |    82.14 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |     100 |    86.95 |     100 |     100 | 36,66,92          
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   83.99 |     80.9 |    75.9 |   83.99 | ...7923,7941-7945 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  ...-keepalive.ts |   94.27 |    89.18 |     100 |   94.27 | ...34,538-539,578 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  server.ts        |   91.15 |     90.6 |   72.03 |   91.15 | ...2969,2999-3000 
  ...-admission.ts |   98.24 |    94.73 |     100 |   98.24 | 79-80,303-304     
  ...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 |   92.18 |    88.37 |     100 |   92.18 | ...21-224,267-270 
  ...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.58 |       79 |     100 |   98.58 | 106,134,174,177   
  ...tion-store.ts |   89.67 |    88.27 |   92.59 |   89.67 | ...91-400,411-414 
  ...e-registry.ts |   94.98 |     90.5 |     100 |   94.98 | ...67-568,575-576 
  ...e-remember.ts |   98.23 |    92.56 |     100 |   98.23 | ...36,340-345,386 
  ...te-runtime.ts |    89.4 |    90.47 |     100 |    89.4 | ...89-190,258-279 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.63 |    72.72 |      96 |   72.63 | ...88-889,896-900 
  ...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 |   79.65 |    79.92 |   94.09 |   79.65 |                   
  ...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.13 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |   74.18 |    76.45 |   91.52 |   74.18 | ...5383,5440-5446 
  index.ts         |   82.68 |    79.74 |   91.22 |   82.68 | ...2424,2510-2511 
  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.88 |     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 |   90.53 |    87.16 |   95.23 |   90.53 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |     100 |      100 |     100 |     100 |                   
  ...-ownership.ts |   87.33 |    83.33 |   88.46 |   87.33 | ...57-558,601-602 
  ...-workspace.ts |   88.26 |    82.53 |     100 |   88.26 | ...33-234,246-247 
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
 src/serve/fs      |   87.77 |    82.32 |     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.01 |     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.83 |     100 |   88.02 | ...3027,3037-3038 
 src/serve/live    |   78.12 |    70.29 |   90.13 |   78.12 |                   
  ...en-context.ts |   95.74 |    81.25 |     100 |   95.74 | ...0,66-67,99-100 
  discovery.ts     |   85.89 |    81.91 |    90.9 |   85.89 | ...73-579,592-593 
  ...structions.ts |     100 |      100 |     100 |     100 |                   
  ...oordinator.ts |   82.67 |    76.63 |   97.01 |   82.67 | ...1319,1351-1353 
  ...-installer.ts |    64.3 |    82.35 |   80.76 |    64.3 | ...45-446,460-472 
  ...oordinator.ts |   76.69 |    67.47 |   85.71 |   76.69 | ...1884,1975-1976 
  ...controller.ts |   67.82 |    79.31 |   72.72 |   67.82 | ...66-278,287-295 
  ...ak-to-user.ts |   96.66 |      100 |   83.33 |   96.66 | 37-38             
  ...sk-service.ts |   86.68 |    62.11 |   93.33 |   86.68 | ...1176,1200-1207 
  ...task-tools.ts |      99 |      100 |   85.71 |      99 | 205-206           
  ...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 |    86.13 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |       75 |   42.85 |   43.58 | ...09-117,130-142 
  ...r-identity.ts |     100 |    85.71 |     100 |     100 | 61                
  service.ts       |    93.4 |       90 |     100 |    93.4 | ...20-222,313-315 
 src/serve/routes  |   85.72 |    80.61 |   94.85 |   85.72 |                   
  a2ui-action.ts   |   96.84 |     88.5 |    87.5 |   96.84 | ...70-272,309-311 
  capabilities.ts  |   98.73 |    96.15 |     100 |   98.73 | 82                
  ...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.92 |     90.9 |     100 |   98.92 | 143               
  health.ts        |   99.09 |    91.17 |     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    |     100 |     92.3 |     100 |     100 | 50,98             
  ...uled-tasks.ts |   87.53 |    84.26 |   93.33 |   87.53 | ...1389,1432-1433 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |    85.9 |    81.46 |   91.34 |    85.9 | ...6359,6361-6362 
  sse-events.ts    |   86.85 |    85.64 |   94.11 |   86.85 | ...18-929,932,939 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  ...space-auth.ts |   85.55 |    75.64 |     100 |   85.55 | ...21-326,331,345 
  ...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.33 |    80.47 |      90 |   83.33 | ...1056,1061,1068 
  ...extensions.ts |    88.8 |    77.83 |   93.84 |    88.8 | ...2329,2374-2375 
  ...-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 |   75.43 |    66.66 |     100 |   75.43 | ...13-618,627-634 
  ...e-git-diff.ts |   97.32 |    90.56 |     100 |   97.32 | 161-162,189-191   
  ...ce-git-log.ts |     100 |    93.18 |     100 |     100 | 52,77,188         
  workspace-git.ts |   77.08 |    89.65 |     100 |   77.08 | 97-118            
  ...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 |   74.17 |    69.23 |     100 |   74.17 | ...18,220-226,231 
  ...management.ts |   87.47 |       85 |     100 |   87.47 | ...1733,1743-1748 
  ...cp-control.ts |    73.2 |    67.54 |   85.71 |    73.2 | ...27-633,644-645 
  ...ace-models.ts |   95.53 |    89.74 |     100 |   95.53 | ...52-157,296-297 
  ...ermissions.ts |    77.9 |    72.41 |     100 |    77.9 | ...69-277,298-316 
  ...e-settings.ts |   75.04 |    72.99 |     100 |   75.04 | ...79-690,696-697 
  ...tup-github.ts |   77.97 |    70.58 |   84.21 |   77.97 | ...46-352,397-398 
  ...ace-skills.ts |    76.9 |    87.15 |     100 |    76.9 | ...29-354,360-394 
  ...ace-status.ts |   82.94 |     74.5 |     100 |   82.94 | ...84-486,490-491 
  ...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  |   92.38 |    89.78 |   97.15 |   92.38 |                   
  access-log.ts    |   98.73 |    97.26 |     100 |   98.73 | 119,196           
  ...-timestamp.ts |     100 |      100 |     100 |     100 |                   
  ...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.29 |       75 |     100 |   97.29 | 17                
  ...r-response.ts |   86.92 |     73.6 |     100 |   86.92 | ...68,785,848-857 
  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.14 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |      95 |     87.5 |     100 |      95 | 182-188           
  ...on-archive.ts |   89.74 |     86.4 |   97.36 |   89.74 | ...82,909,937-938 
  ...ion-export.ts |     100 |    94.73 |     100 |     100 | 64                
  session-list.ts  |   97.15 |    93.95 |     100 |   97.15 | ...1012,1211-1215 
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.04 |    97.26 |     100 |   99.04 | ...92,861,940-942 
 src/serve/voice   |    92.7 |    91.48 |   97.67 |    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.21 |     100 |     100 | 176               
 ...kspace-service |    90.9 |    87.96 |    91.3 |    90.9 |                   
  index.ts         |   90.41 |    87.29 |      90 |   90.41 | ...1505-1509,1512 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   92.69 |    89.52 |   98.06 |   92.69 |                   
  ...mandLoader.ts |     100 |    88.88 |     100 |     100 | 106-120           
  ...killLoader.ts |   97.19 |    85.29 |     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.29 |   83.33 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.77 |    92.15 |     100 |   97.77 | 176,183-184       
  ...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.72 |     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.15 |     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 | ...99-901,904-906 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.91 |     86.8 |   96.15 |   88.91 |                   
  DataProcessor.ts |   88.28 |    86.77 |   94.73 |   88.28 | ...1362,1366-1373 
  ...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.04 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.65 |     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       |   88.99 |    83.47 |    90.9 |   88.99 |                   
  ...p-prefetch.ts |   98.09 |    94.23 |    87.5 |   98.09 | 50,209,225-226    
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |   94.09 |    79.16 |   77.77 |   94.09 |                   
  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 |                   
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   74.57 |    75.47 |   68.47 |   74.57 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   76.06 |       72 |   69.44 |   76.06 | ...4292,4408-4414 
  ...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 |                   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...ractiveUI.tsx |   71.42 |     74.5 |    62.5 |   71.42 | ...10,337,404-409 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   58.76 |    66.66 |   51.06 |   58.76 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   60.21 |    70.73 |   57.69 |   60.21 | ...90,794,803,806 
  useAuth.ts       |   94.83 |       75 |     100 |   94.83 | ...33-234,253-259 
  ...rSetupFlow.ts |   43.18 |    33.33 |      50 |   43.18 | ...78-399,416-459 
 src/ui/commands   |    84.1 |    83.79 |   90.02 |    84.1 |                   
  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 | 27,61             
  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 
  ...essCommand.ts |   68.22 |    54.05 |      75 |   68.22 | ...97-198,212-215 
  ...astCommand.ts |   84.27 |       75 |     100 |   84.27 | ...,91-97,125-130 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   75.05 |    74.39 |   84.61 |   75.05 | ...95-628,639-640 
  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 | 25                
  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.48 |       75 |     100 |   80.48 | 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 | 96,147            
  goalCommand.ts   |     100 |    96.49 |     100 |     100 | 139,192           
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.13 |    65.71 |   85.71 |   81.13 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |   52.83 |    81.25 |      70 |   52.83 | ...74-319,321-330 
  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.44 |    90.14 |     100 |   94.44 | ...13-214,241-251 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   85.02 |    82.53 |     100 |   85.02 | ...1089,1123-1128 
  ...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.82 |    81.81 |     100 |   78.82 | 37-52,78,97       
  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.22 |    72.13 |     100 |   77.22 | ...46-150,172-177 
  ...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    |   54.54 |      100 |      50 |   54.54 | 19-29             
  voice-command.ts |   93.57 |       88 |     100 |   93.57 | 35,97-102         
  ...owsCommand.ts |   93.06 |       85 |   66.66 |   93.06 | ...78-183,282-287 
 src/ui/components |    72.8 |    79.75 |   77.58 |    72.8 |                   
  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 |   88.65 |    90.41 |     100 |   88.65 | ...84-286,300-302 
  Composer.tsx     |   94.49 |    66.66 |     100 |   94.49 | ...-76,88,143,157 
  ...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.28 |      100 |       0 |   11.28 | 71-598            
  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          
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  ...ngSpinner.tsx |   68.42 |    85.71 |      50 |   68.42 | 35-52,73,80-81    
  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  |   84.26 |    82.94 |      80 |   84.26 | ...2215,2236,2332 
  ...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.58 |    95.06 |   46.15 |   95.58 | ...79,482-486,489 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   85.22 |    74.08 |     100 |   85.22 | ...1041,1097,1099 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...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 |    8.57 |      100 |       0 |    8.57 | 24-55,58-134      
  ...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           
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   83.66 |    72.13 |     100 |   83.66 | ...96,402,444-466 
  ...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.59 |    73.72 |   69.23 |   71.59 | ...1244,1250-1251 
  ...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 |      28 |      100 |       0 |      28 | 18-40             
  ...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-172             
  ...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 |   95.62 |    87.09 |     100 |   95.62 | ...24-125,273-275 
  ...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 |   58.69 |    70.24 |    62.5 |   58.69 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |     100 |    81.81 |     100 |     100 | 82                
  ...tComposer.tsx |   69.48 |    33.33 |   66.66 |   69.48 | ...51,269,277-279 
  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.34 |    84.91 |   92.98 |   85.34 |                   
  ...sksDialog.tsx |   81.87 |    82.77 |   85.71 |   81.87 | ...1853,1965-1971 
  ...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.35 |    86.92 |   85.71 |   90.35 |                   
  ...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 |   92.06 |    82.35 |     100 |   92.06 | 58-60,62,64       
  ...nMessages.tsx |   94.11 |    95.91 |   76.92 |   94.11 | ...47-349,352-355 
  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.63 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |   93.06 |    86.32 |   93.75 |   93.06 | ...1037,1082-1084 
 ...ponents/shared |   86.29 |    82.41 |   94.17 |   86.29 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.71 |    87.05 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |    83.33 |     100 |     100 | 73,93-95          
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   81.48 |    84.84 |     100 |   81.48 | 46-66,73-76       
  StaticRender.tsx |     100 |      100 |     100 |     100 |                   
  TextInput.tsx    |    80.8 |    67.24 |      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.81 |   97.91 |   85.98 | ...2664,2762-2763 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |    3.96 |      100 |       0 |    3.96 |                   
  ...gerDialog.tsx |    3.96 |      100 |       0 |    3.96 | 79-137,140-681    
 ...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 |    9.13 |      100 |       0 |    9.13 |                   
  ...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 |    8.63 |      100 |       0 |    8.63 | 23-177            
  ...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 |    70.1 |    72.89 |   61.11 |    70.1 |                   
  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    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   86.01 |    81.62 |   86.48 |   86.01 |                   
  ...ewContext.tsx |   87.56 |       80 |      75 |   87.56 | ...37-240,246-256 
  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 |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |       80 |    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 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 235-236           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   88.35 |    73.51 |   95.45 |   88.35 |                   
  ...ui-adapter.ts |   88.35 |    73.51 |   95.45 |   88.35 | ...74,792-793,879 
 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      |   85.95 |    83.88 |   87.81 |   85.95 |                   
  ...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.62 |    73.58 |     100 |   94.62 | ...87-288,293-294 
  ...dProcessor.ts |   86.79 |    71.86 |   83.33 |   86.79 | ...1529,1558-1562 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...ng-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.36 |    81.95 |   66.66 |   92.36 | ...00,502-503,658 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      42 |       75 |     100 |      42 | 42-44,53-59,62-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 |   95.53 |    83.01 |     100 |   95.53 | ...64-165,289-292 
  ...ompletion.tsx |   97.09 |    87.09 |     100 |   97.09 | ...23-324,334-335 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   96.29 |    90.56 |     100 |   96.29 | ...17-218,222-223 
  ...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 |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  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.67 |     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       
  ...miniStream.ts |   87.31 |    84.02 |   78.26 |   87.31 | ...5757-5759,5761 
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.38 |    98.85 |     100 |   98.38 | 141-144           
  ...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    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 69                
  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 |     97.4 |     100 |     100 | 175,262           
  ...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 |   85.29 |    80.28 |    92.3 |   85.29 | ...36,351-361,441 
  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 |    95.4 |    77.77 |     100 |    95.4 | 133-134,236-241   
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.22 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.35 |     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.85 |    85.13 |   94.73 |   82.85 | ...78-680,688-724 
  ...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 |    94.73 |     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/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/selection  |   93.56 |    86.13 |     100 |   93.56 |                   
  screen-buffer.ts |   94.73 |    64.28 |     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.05 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |    85.96 |     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.52 |     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      |   87.72 |    85.81 |   96.06 |   87.72 |                   
  ...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.22 |     100 |   98.61 | 189,217-218,424   
  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 
  formatters.ts    |   94.87 |    98.24 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   91.42 |       95 |     100 |   91.42 | 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.59 |     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.23 |     100 |     100 | 84                
  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 |   83.24 |    80.12 |     100 |   83.24 | ...02-624,755-756 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |   89.47 |    85.71 |     100 |   89.47 | 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.61 |    83.44 |     100 |   90.61 | ...80,482-484,607 
  ...ize-reflow.ts |     100 |     92.3 |     100 |     100 | 57,62,209,217,347 
  ...wOptimizer.ts |     100 |    94.11 |     100 |     100 | 33,76             
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   98.71 |    95.72 |     100 |   98.71 | 292-293,478-479   
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   90.42 |    92.85 |     100 |   90.42 | ...06-207,240-241 
  ...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.27 |    79.64 |   81.94 |   81.27 |                   
  ...d-recorder.ts |     6.2 |        0 |       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         |   82.94 |    87.83 |   92.97 |   82.94 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.19 |     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       
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  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        
  commands.ts      |   97.45 |    96.66 |     100 |   97.45 | 153-155           
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |    89.65 |     100 |     100 | 41-43,49          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  ...arResolver.ts |   97.14 |    96.55 |     100 |   97.14 | 125-126           
  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 
  findings.ts      |   96.01 |    92.08 |     100 |   96.01 | ...1227,1236-1237 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...AutoUpdate.ts |    93.1 |       94 |      90 |    93.1 | 103,108,179-190   
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.68 |    94.28 |     100 |   97.68 | ...64,381-382,427 
  ...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 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  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 |   94.25 |    91.17 |     100 |   94.25 | ...30,436,439-443 
  ...iveHelpers.ts |   95.14 |    91.79 |     100 |   95.14 | ...54-455,553,566 
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |       80 |     100 |   88.88 | 31-32             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  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.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   45.52 |    57.35 |   76.92 |   45.52 | ...1040,1052-1075 
  ...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 
  settingsUtils.ts |   79.62 |     88.8 |   85.18 |   79.62 | ...47-565,572-580 
  shell-args.ts    |     100 |      100 |     100 |     100 |                   
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       90 |     100 |     100 | 23                
  systemInfo.ts    |   95.09 |     89.7 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  ...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 
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
  ...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 |       50 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   93.51 |    90.95 |   96.96 |   93.51 |                   
  cleanup.ts       |   92.59 |    93.75 |     100 |   92.59 | ...02-205,209-211 
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  scheduler.ts     |      93 |    88.34 |      95 |      93 | ...57-359,411-415 
  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          |   88.16 |    86.65 |   89.73 |   88.16 |                   
 src               |   98.36 |        0 |       0 |   98.36 |                   
  board.ts         |       0 |        0 |       0 |       0 | 1-18              
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |   89.63 |    83.96 |   94.11 |   89.63 |                   
  ...transcript.ts |   88.49 |    84.09 |     100 |   88.49 | ...32,640,646-650 
  ...ent-resume.ts |   85.59 |    77.75 |   83.33 |   85.59 | ...1794-1798,1801 
  ...ound-tasks.ts |   94.63 |    90.13 |   96.38 |   94.63 | ...1773,1793-1796 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   94.86 |    87.26 |    98.3 |   94.86 | ...1463,1477-1479 
  ...w-snapshot.ts |   75.73 |    72.22 |    87.5 |   75.73 | ...21,445,452-454 
  worktree-pin.ts  |     100 |    88.23 |     100 |     100 | 78,99             
 src/agents/arena  |   76.94 |    68.22 |   78.94 |   76.94 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   75.89 |     65.2 |   78.57 |   75.89 | ...1887,1893-1894 
  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 |   78.09 |    85.23 |   76.28 |   78.09 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |    90.9 |    85.36 |   93.33 |    90.9 | ...70,672,674-675 
  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 |   91.36 |    86.54 |   90.25 |   91.36 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   84.54 |    76.42 |   77.58 |   84.54 | ...2365,2411-2413 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.49 |    89.41 |   83.33 |   93.49 | ...96-497,500-501 
  ...nteractive.ts |   81.01 |    82.35 |   76.66 |   81.01 | ...33,535-538,541 
  ...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 
  ...chestrator.ts |   93.87 |    90.44 |    91.3 |   93.87 | ...2216,2309-2312 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   95.47 |    83.47 |   94.44 |   95.47 | ...44,312,332-335 
  ...ow-sandbox.ts |   96.88 |    91.16 |     100 |   96.88 | ...1768,1774-1775 
  ...flow-saved.ts |   96.51 |    94.36 |     100 |   96.51 | 134-135,234-237   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 138-139,236       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   82.61 |    79.89 |   90.11 |   82.61 |                   
  TeamManager.ts   |   74.33 |    81.09 |    80.7 |   74.33 | ...1707,1730-1731 
  asks.ts          |   80.33 |    63.21 |     100 |   80.33 | ...27-228,234-235 
  board-lock.ts    |   87.09 |     67.5 |      90 |   87.09 | ...00-202,216-218 
  board-tasks.ts   |   76.76 |    68.75 |    90.9 |   76.76 | ...99-200,226-241 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   96.02 |    87.23 |     100 |   96.02 | 352-358           
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   89.29 |       83 |     100 |   89.29 | ...1000,1044-1045 
  team-events.ts   |   60.52 |      100 |      50 |   60.52 | ...40-144,151-155 
  teamHelpers.ts   |   91.71 |    94.54 |      95 |   91.71 | ...18-319,355-365 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   95.06 |    95.16 |   98.21 |   95.06 |                   
  ...on-harness.ts |   96.49 |       85 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |     100 |    96.77 |     100 |     100 | 158,167           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   84.33 |     86.9 |   75.67 |   84.33 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   83.65 |    86.62 |   74.19 |   83.65 | ...8910,8914-8915 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   94.39 |    91.57 |   88.23 |   94.39 | ...45-446,449-450 
 ...nfirmation-bus |   98.27 |    97.14 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   92.46 |    88.23 |   93.05 |   92.46 |                   
  baseLlmClient.ts |    88.4 |     83.8 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |   92.58 |    88.04 |   91.01 |   92.58 | ...4310,4408-4409 
  ...tGenerator.ts |   86.34 |    87.34 |   84.61 |   86.34 | ...96-497,542-548 
  ...lScheduler.ts |   89.77 |     84.7 |   94.73 |   89.77 | ...6429,6457-6473 
  geminiChat.ts    |   94.91 |     90.1 |   95.72 |   94.91 | ...5208,5256-5257 
  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 |                   
  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 | 49-50             
  ...on-helpers.ts |   93.49 |    78.57 |     100 |   93.49 | ...10-211,228-229 
  ...issionFlow.ts |   98.97 |    96.96 |     100 |   98.97 | 107               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   94.89 |    88.54 |     100 |   94.89 | ...51-252,297-298 
  prompts.ts       |   93.64 |    91.42 |   83.33 |   93.64 | ...1209,1412-1413 
  ...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   
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |    91.89 |     100 |     100 | 87,122-139        
  ...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.43 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.19 |    94.48 |     100 |   99.19 | 698-699,768       
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   96.33 |    88.12 |   96.15 |   96.33 |                   
  ...tGenerator.ts |   97.24 |    86.72 |   94.87 |   97.24 | ...1436,1465,1476 
  converter.ts     |   96.19 |    89.25 |     100 |   96.19 | ...1329,1550-1552 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   88.78 |    72.36 |   89.47 |   88.78 |                   
  ...tGenerator.ts |   87.18 |    71.83 |   88.88 |   87.18 | ...58-364,382-383 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |   96.12 |     91.3 |    90.9 |   96.12 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   96.06 |    90.75 |   90.47 |   96.06 | ...1309-1310,1338 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |    91.9 |    90.54 |   95.76 |    91.9 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |    91.3 |    89.49 |   96.87 |    91.3 | ...1942,2111-2126 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   68.25 |    82.35 |      50 |   68.25 | 44-53,74-78,90-94 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   95.27 |     90.9 |     100 |   95.27 | ...1434,1442,1541 
  ...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.24 |     92.4 |     100 |   92.24 | ...28-529,549-552 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.39 |    92.28 |    98.5 |   97.39 |                   
  dashscope.ts     |   98.36 |    95.08 |   96.42 |   98.36 | ...08-709,851-852 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |   99.18 |    97.05 |     100 |   99.18 | 208               
  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 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |   92.13 |    82.14 |     100 |   92.13 | ...,39-40,135-137 
 src/extension     |   88.46 |    85.59 |   93.19 |   88.46 |                   
  ...ive-safety.ts |     100 |      100 |     100 |     100 |                   
  ...-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 |                   
  ...redentials.ts |   95.33 |    89.47 |     100 |   95.33 | ...21-122,173-175 
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   92.82 |    89.08 |    98.3 |   92.82 | ...1641-1647,1691 
  ...ionManager.ts |   84.45 |    83.47 |      83 |   84.45 | ...3126,3164-3165 
  ...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 |    75.9 |    85.71 |   85.71 |    75.9 | ...98,202,214-248 
  github.ts        |   91.61 |     84.5 |     100 |   91.61 | ...1027-1028,1038 
  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 |     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.33 |     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.14 |     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.58 |    81.04 |   86.84 |   84.58 |                   
  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   |   75.98 |    67.22 |   58.33 |   75.98 | ...42-743,750-751 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   86.27 |    87.65 |     100 |   86.27 | ...42-247,359-361 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   92.96 |    89.05 |   94.34 |   92.96 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   96.27 |     90.9 |     100 |   96.27 | ...20,143-146,163 
  ...checkpoint.ts |   81.48 |    76.19 |     100 |   81.48 | ...02-105,115-118 
  goal-evidence.ts |   88.34 |    87.06 |    97.5 |   88.34 | ...1162,1185-1188 
  ...projection.ts |   66.66 |    72.97 |   33.33 |   66.66 | ...87,190,194-196 
  ...ersistence.ts |   87.29 |    85.71 |    87.5 |   87.29 | ...53-154,185-190 
  goal-protocol.ts |   96.87 |    95.65 |     100 |   96.87 | 200-201           
  goal-reducer.ts  |      95 |    92.34 |   97.05 |      95 | ...43,520,538-539 
  goal-runtime.ts  |   96.89 |    89.93 |   95.74 |   96.89 | ...1315-1316,1437 
  goal-tools.ts    |   98.38 |    94.05 |   95.45 |   98.38 | ...98-199,300-301 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    92.85 |     100 |   92.46 | ...69-172,185-187 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-28              
  goalHook.ts      |   96.91 |    92.42 |     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         |   88.07 |    86.35 |   88.54 |   88.07 |                   
  ...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.66 |    93.33 |     100 |   96.66 | 66-67             
  ...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.57 |    84.76 |   94.73 |   95.57 | ...1040-1041,1051 
  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    |   62.65 |    72.34 |   66.66 |   62.65 | ...70-771,780-781 
  hookSystem.ts    |   87.64 |     98.5 |   70.83 |   87.64 | ...58-759,765-766 
  ...HookRunner.ts |   79.06 |    66.66 |      80 |   79.06 | ...33-434,452-456 
  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 |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   94.87 |    88.88 |     100 |   94.87 | ...84,325,327-329 
  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/lsp           |   58.96 |    70.57 |   66.14 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |       72 |   95.45 |   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 |       80 |   16.66 |   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        |   88.08 |     84.5 |   90.62 |   88.08 |                   
  ...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 
  const.ts         |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    83.33 |     100 |     100 | 136,146           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   92.41 |    79.41 |     100 |   92.41 | 56-61,100,119-122 
  ...entPlanner.ts |   91.59 |    76.74 |     100 |   91.59 | ...05,114-117,293 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   81.83 |       75 |   83.33 |   81.83 | ...51,474,478-507 
  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.4 |    82.29 |   77.77 |    78.4 | ...1482,1495-1497 
  ...ent-config.ts |   86.99 |    82.69 |   86.36 |   86.99 | ...69,389,396-402 
  memoryAge.ts     |   90.47 |    83.33 |     100 |   90.47 | 50-51             
  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.36 |   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      |   98.89 |    90.19 |     100 |   98.89 | 50,70             
  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 |   77.24 |    74.07 |   72.22 |   77.24 | ...52-456,459,465 
  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 | ...63-277,291-296 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   92.55 |    88.62 |   91.13 |   92.55 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   97.77 |    91.83 |     100 |   97.77 | 155,161,171       
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |       44 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.11 |     100 |     100 | 177,261           
  modelsConfig.ts  |   89.36 |    86.93 |   88.09 |   89.36 | ...1404,1433-1434 
  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   |   83.79 |    91.17 |   71.07 |   83.79 |                   
  autoMode.ts      |   97.66 |    93.13 |     100 |   97.66 | ...82-589,635,712 
  ...transcript.ts |      98 |       84 |     100 |      98 | 200-201           
  classifier.ts    |      94 |    94.54 |     100 |      94 | 158-165,389-393   
  ...erousRules.ts |     100 |    89.36 |     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 |   86.63 |    89.01 |      80 |   86.63 | ...1111,1217-1221 
  rule-parser.ts   |   94.49 |     92.7 |     100 |   94.49 | ...1447,1481-1483 
  ...-semantics.ts |   70.44 |    91.09 |   46.66 |   70.44 | ...2237,2311-2314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.04 |    95.23 |     100 |   99.04 |                   
  system-prompt.ts |   99.04 |    95.23 |     100 |   99.04 | 220               
 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     |   83.71 |     78.6 |   81.25 |   83.71 |                   
  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 
  ...der-config.ts |   75.85 |    74.04 |   78.26 |   75.85 | ...73-474,502-503 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.85 |    91.66 |   63.63 |   97.85 |                   
  ...oding-plan.ts |   87.34 |      100 |       0 |   87.34 | 81-83,86-88,90-93 
  ...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 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.41 |    78.76 |   95.89 |   85.41 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   82.79 |    73.75 |   90.62 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |    76.61 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.43 |    86.08 |    96.8 |   90.43 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   98.48 |    87.28 |     100 |   98.48 | 81-82,105,474-475 
  branch-points.ts |     100 |    95.23 |     100 |     100 | ...20,211,224,327 
  ...ionService.ts |    97.7 |    96.44 |     100 |    97.7 | ...1069,1212-1220 
  ...ingService.ts |   91.36 |    86.98 |   93.25 |   91.36 | ...2685,2700-2701 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |    97.2 |    94.23 |     100 |    97.2 | ...39-340,378-381 
  cronScheduler.ts |   94.17 |    90.45 |      98 |   94.17 | ...1333,1736-1737 
  cronTasksFile.ts |   95.49 |    90.82 |     100 |   95.49 | ...37,346-347,483 
  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 |   74.75 |    70.76 |   96.07 |   74.75 | ...2296,2325-2326 
  ...on-service.ts |   87.38 |       72 |     100 |   87.38 | ...01-305,343-344 
  ...references.ts |   98.57 |    91.42 |     100 |   98.57 | 156-157,217-218   
  ...ionService.ts |   98.21 |    97.25 |     100 |   98.21 | ...81-682,729-730 
  ...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 |    88.88 |     100 |   98.94 | 43                
  ...ersistence.ts |   91.66 |    80.58 |     100 |   91.66 | ...1060-1061,1089 
  ...tory-state.ts |     100 |    95.23 |     100 |     100 | 31                
  ...on-service.ts |   94.49 |    92.26 |   97.14 |   94.49 | ...98-600,656-664 
  ...ce-service.ts |    98.5 |    94.11 |    90.9 |    98.5 | 64-65             
  ...n-registry.ts |   98.73 |    96.29 |     100 |   98.73 | 584,638-639,692   
  ...ken-counts.ts |     100 |       96 |     100 |     100 | 58                
  ...ipt-reader.ts |   93.71 |    91.05 |   97.77 |   93.71 | ...2755-2756,2833 
  ...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 |   83.14 |    74.47 |   97.61 |   83.14 | ...2433,2445-2448 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   89.31 |    85.89 |   96.05 |   89.31 | ...2643,2657-2677 
  sessionTitle.ts  |   95.75 |    77.41 |     100 |   95.75 | ...53-256,287-288 
  ...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 
  ...Estimation.ts |     100 |    94.11 |     100 |     100 | 118               
  ...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 |   90.72 |    84.07 |     100 |   90.72 | ...06-509,561-562 
  ...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.08 |     100 |   98.91 |                   
  microcompact.ts  |   98.91 |    95.08 |     100 |   98.91 | ...60,769,778-779 
 ...s/visionBridge |   98.81 |    92.12 |     100 |   98.81 |                   
  ...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             
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   89.29 |    85.92 |   93.61 |   89.29 |                   
  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    |   94.84 |    87.69 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   84.82 |    85.29 |   83.33 |   84.82 | ...1243,1250-1254 
  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.03 |     100 |   97.91 | 277-278           
 ...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     |   87.72 |    89.01 |   96.55 |   87.72 |                   
  ...ter-schema.ts |     100 |    98.07 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   84.48 |    85.91 |   94.87 |   84.48 | ...1582,1659-1660 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |   82.53 |    84.79 |   85.86 |   82.53 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...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.78 |    83.33 |   55.55 |   65.78 | ...04-105,108-109 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |       99 |     100 |     100 | 99                
  ...ai-request.ts |   87.52 |    92.79 |   83.78 |   87.52 | ...55-561,564-570 
  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.73 |    78.01 |   66.66 |   60.73 | ...1507,1524-1544 
  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      |   93.95 |    86.32 |      75 |   93.95 | ...41,491-492,508 
  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.17 |    88.72 |    97.5 |   91.17 | ...1920,1949-1952 
  ...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.09 |     95.1 |   86.36 |   83.09 | ...1467,1471-1478 
  uiTelemetry.ts   |   97.18 |    93.93 |      88 |   97.18 | ...70,314,461-462 
 ...ry/qwen-logger |   74.23 |     80.7 |      70 |   74.23 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.23 |    80.53 |   69.49 |   74.23 | ...1122,1160-1161 
 src/test-utils    |   96.38 |    98.61 |   83.33 |   96.38 |                   
  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     |   94.85 |      100 |   78.78 |   94.85 | ...53,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   86.24 |    84.97 |      89 |   86.24 |                   
  ...erQuestion.ts |   89.71 |    80.76 |   91.66 |   89.71 | ...66-367,374-375 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.67 |     91.3 |   81.81 |   89.67 | ...03-304,315-322 
  cron-create.ts   |   90.64 |    92.85 |   72.72 |   90.64 | ...,73-74,223-231 
  cron-delete.ts   |   97.56 |      100 |   83.33 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.34 |    87.5 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  display-image.ts |   87.42 |    84.84 |   88.88 |   87.42 | ...29-134,194-195 
  edit.ts          |   82.76 |    86.77 |   81.25 |   82.76 | ...45-746,865-915 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |     82.6 |    87.5 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.29 |    83.65 |   94.44 |   83.29 | ...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.61 |   85.71 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    77.41 |    90.9 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   94.11 |    82.35 |   83.33 |   94.11 | 31-32,47-48       
  loop-wakeup.ts   |   99.27 |    92.85 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.5 |   90.32 |   72.71 | ...1212,1214-1215 
  ...nt-manager.ts |   82.13 |    80.47 |   85.71 |   82.13 | ...3234,3236-3237 
  mcp-client.ts    |   80.03 |    86.58 |   89.47 |   80.03 | ...2272,2276-2279 
  ...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 | ...1341,1349-1350 
  ...ool-events.ts |       8 |      100 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |   97.46 |    93.93 |     100 |   97.46 | 176-177           
  ...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.35 |    93.71 |     100 |   98.35 | ...-990,1045-1046 
  ...sport-pool.ts |   83.98 |     80.3 |   88.46 |   83.98 | ...1409,1416-1420 
  ...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.08 |   81.25 |   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.52 |   86.66 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  ...d-artifact.ts |    87.1 |    81.04 |   93.93 |    87.1 | ...78-879,903-904 
  ripGrep.ts       |    94.6 |    87.26 |   95.23 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   81.13 |    89.74 |    62.5 |   81.13 | ...80-286,363-371 
  ...n-mcp-view.ts |   94.07 |    91.89 |    90.9 |   94.07 | 131-139           
  shell.ts         |   78.96 |    84.29 |      93 |   78.96 | ...5036,5111-5112 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   91.39 |    92.55 |      90 |   91.39 | ...84,488,534-556 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.33 |   81.81 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   80.43 |    86.36 |   83.33 |   80.43 | ...67,121,125-132 
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.87 |    86.41 |    92.3 |   82.87 | ...54-564,588-599 
  team-create.ts   |   97.22 |    85.71 |   83.33 |   97.22 | 48-49,129-130     
  team-delete.ts   |   86.74 |    83.33 |   83.33 |   86.74 | 37-38,42-48,72-73 
  ...n-approval.ts |   92.14 |    96.77 |   77.77 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   95.13 |    87.85 |   93.33 |   95.13 | ...23-527,540-545 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   78.57 |    79.59 |    82.6 |   78.57 | ...89-990,998-999 
  tool-search.ts   |   96.19 |    89.72 |   93.33 |   96.19 | ...09,259-264,426 
  tools.ts         |   93.11 |    92.53 |   91.66 |   93.11 | ...76-577,593-599 
  ...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 |    85.48 |   88.88 |      87 | ...26-829,866-901 
  zoom-image.ts    |   95.76 |    93.75 |      90 |   95.76 | 54-59,203-204     
 src/tools/agent   |   86.97 |    87.71 |   88.49 |   86.97 |                   
  agent.ts         |   85.56 |    86.65 |   86.02 |   85.56 | ...4274,4308-4318 
  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.78 |    92.51 |   88.63 |   95.78 |                   
  artifact-tool.ts |   91.46 |    88.46 |   71.42 |   91.46 | ...13-314,322-325 
  ...-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 |                   
 ...s/computer-use |   90.21 |    82.17 |   78.08 |   90.21 |                   
  bootstrap.ts     |   59.42 |    80.95 |   41.66 |   59.42 | ...35-339,341-345 
  client.ts        |   80.11 |       90 |   77.77 |   80.11 | ...97,242-243,274 
  constants.ts     |     100 |    94.73 |     100 |     100 | 129,256           
  downloader.ts    |   65.29 |    52.77 |   58.33 |   65.29 | ...99-300,316-355 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install-state.ts |   94.44 |    72.72 |     100 |   94.44 | 44-45             
  ...n-detector.ts |     100 |     87.5 |     100 |     100 | 50                
  schemas.ts       |     100 |      100 |     100 |     100 |                   
  tool.ts          |    96.3 |    85.71 |     100 |    96.3 | 75-76,184,252-258 
 ...tools/workflow |    86.9 |    85.18 |   77.77 |    86.9 |                   
  workflow.ts      |    86.9 |    85.18 |   77.77 |    86.9 | ...08,553,555-556 
 src/utils         |   93.14 |    89.85 |   96.83 |   93.14 |                   
  LruCache.ts      |     100 |      100 |     100 |     100 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |      95 |     92.7 |     100 |      95 | ...49-550,657-661 
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.45 |     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 |    89.47 |     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   |   96.66 |    96.61 |   88.88 |   96.66 | 192-196           
  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.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |   96.63 |    90.13 |   96.66 |   96.63 | ...42,444-445,512 
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   88.92 |    93.58 |   66.66 |   88.92 | ...92,394,410-411 
  fetch.ts         |   90.68 |    82.51 |     100 |   90.68 | ...72,483-484,503 
  file-identity.ts |     100 |      100 |     100 |     100 |                   
  fileUtils.ts     |   95.05 |    92.71 |   96.15 |   95.05 | ...1988,1996-1997 
  forkedAgent.ts   |   92.98 |    83.78 |   94.44 |   92.98 | ...77,685,690-697 
  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  |    91.6 |    84.21 |    92.3 |    91.6 | ...90,405-410,570 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  git-ignore.ts    |     100 |      100 |     100 |     100 |                   
  gitDiff.ts       |   95.19 |    81.36 |     100 |   95.19 | ...1073,1419-1420 
  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 
  github-prs.ts    |   95.74 |    82.27 |     100 |   95.74 | 216,314-322       
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.08 |    93.33 |     100 |   95.08 | ...62-166,234-238 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   95.41 |     93.4 |     100 |   95.41 | ...27-328,370-373 
  ...-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                
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |   93.42 |    90.72 |     100 |   93.42 | ...11,370,592-595 
  ...tProcessor.ts |   94.01 |    89.88 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.18 |     100 |   98.96 | 153               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  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.62 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.15 |     100 |   96.98 | ...87-688,763-764 
  readManyFiles.ts |   95.75 |    80.86 |     100 |   95.75 | ...05,558,568-572 
  retry.ts         |   96.09 |    92.52 |     100 |   96.09 | ...67,558-559,577 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.08 |     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 
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  ...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.03 |    97.75 |     100 |   98.03 | 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.21 |    85.21 |     100 |   96.21 | ...70,386,466,485 
  ...-pager-env.ts |     100 |      100 |     100 |     100 |                   
  ...fety-rules.ts |     100 |     89.7 |     100 |     100 | ...01,304,309-311 
  shell-utils.ts   |   86.26 |    88.58 |     100 |   86.26 | ...2295,2302-2306 
  ...lAstParser.ts |    98.3 |    91.59 |     100 |    98.3 | ...1340-1342,1352 
  ...ContextEnv.ts |     100 |    94.73 |     100 |     100 | 76,111            
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |    86.66 |     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 |       50 |     100 |   77.77 | 44,54-59          
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  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             
  ...repeat-key.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...-finalizer.ts |    98.1 |     92.3 |   93.33 |    98.1 | ...34-235,237-241 
  ...iagnostics.ts |   99.06 |     97.7 |   91.66 |   99.06 | 132-133,204       
  ...-retention.ts |     100 |    95.83 |     100 |     100 | 116               
  tool-utils.ts    |    95.2 |    93.61 |     100 |    95.2 | ...58-159,162-163 
  ...ultCleanup.ts |   54.62 |    59.09 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.13 |    96.39 |     100 |   96.13 | ...34-339,341-346 
  ...pt-records.ts |   87.58 |    86.13 |     100 |   87.58 | ...79-483,513-528 
  truncation.ts    |   90.61 |    90.51 |     100 |   90.61 | ...53-461,498-504 
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.47 |     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.72 |   94.73 |   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.43 |   89.47 |   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 |   71.04 |    75.92 |   91.17 |   71.04 |                   
  ...eTokenizer.ts |   65.72 |    74.02 |    92.3 |   65.72 | ...65-466,479-533 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |     100 |      100 |     100 |     100 |                   
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

Closing — this PR is wrong. packages/cli/src/agent-view/ is not dead code.

It landed in #7799 ("feat(cli): Add agent view supervisor runtime", 2026-08-01) as the base of a five-PR series, and four of those are open, non-draft, and were updated today:

PR Files touched under packages/cli/src/agent-view/
#7800 — Add agent view PTY workers 11
#7801 — Manage agent view session lifecycle 17, including protocol.ts and current-cli-argv.ts
#7802 — Expose agent view commands 6, including supervisor-runner.ts / .test.ts
#7803 — Add agent view roster UI 0 (depends on the stack)

Deleting the directory would conflict with three of them directly and strand the fourth.

What the verification got wrong. I checked static reachability — no path import, no import by module name, all 87 exported symbols unreferenced, no CLI flag, no build config, and a leaf dependency graph. Every one of those is true, and none of them was the right question. "Nothing in main imports it" and "nothing depends on it" are different claims when a directory is the merged foundation of an in-flight stack. The consumers are in the pending PRs, which a tree-only grep cannot see.

The PR description also asserted that nothing would acquire a consumer later, citing #8869's closure. That was wrong: #8869 was a separate fleet attempt, and closing it says nothing about the #7799#7803 series, which is the actual owner of this code and is still moving.

Apologies to @ZijianZhang989 for the noise. No files were removed from main; the branch is deleted along with this PR.

@yiliang114 yiliang114 closed this Aug 18, 2026
@yiliang114
yiliang114 deleted the chore/remove-unwired-agent-view branch August 18, 2026 11:29
Stage 1 of docs/plans/2026-08-18-peer-session-collaboration.md. The board
holds task today; these are its two peers, under the same lock and
atomic-write discipline.

An ask is a question with terminal states — answered, declined, timeout — so
a sender always learns which and can wait, reroute, or escalate. That is what
a plain message cannot offer, and it is why the design has no general-purpose
message.

Timeout settles lazily. expiresAt is written at creation and any reader past
the deadline reports timeout; no sweeper walks the directory. A fetch-based
system has no daemon guaranteed to be running, so the only process that can be
relied on is the one currently asking. The deadline is re-checked under the
lock, since answering a lapsed ask would silently resurrect it.

A decision is something awaiting human authority — approval, acceptance,
adjudication unified, because each needs authority and no agent has more of it
than another. It has no expiry on purpose: silent expiry converts "nobody
looked" into "the system decided", which is the one authority nothing but a
human may hold.

Items land at ~/.qwen/boards/{board}/, the layout 2.8 settles, so they never
need the migration the existing split roots do.

board-lock.ts extracts the two-tier lock rather than adding a third copy of
it; folding tasks.ts and mailbox.ts onto it is a follow-up, kept out so this
change does not also rewrite those paths.

Refs #8724
@yiliang114 yiliang114 reopened this Aug 18, 2026
@yiliang114
yiliang114 force-pushed the chore/remove-unwired-agent-view branch from d300730 to 5b45e0a Compare August 18, 2026 14:55
@github-actions

Copy link
Copy Markdown
Contributor

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

中文

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

@yiliang114 yiliang114 changed the title chore(cli): remove the unwired agent-view supervisor feat(core): add ask and decision as board items Aug 18, 2026
@yiliang114
yiliang114 marked this pull request as draft August 18, 2026 14:56
yiliang114 added 3 commits August 19, 2026 00:48
Stage 2 — the step where the requirement is actually met. With a command
line over the board, a Codex, a shell script, a scheduled job and a Qwen
session participate on identical terms, because running a command is the one
thing all of them can do.

qwen board show | watch | task | claim | done | ask | answer | decline
                | raise | resolve

Verbs are flat rather than nested under a noun — board claim t-3, not board
task claim t-3 — because the id prefix already carries the noun. Two levels
instead of three matters for a surface an agent types every turn.

board watch polls rather than watching the directory: fs.watch differs across
platforms and network filesystems, and a directory this small is not the
bottleneck. The panel leads with what needs a human, then what is blocked on
a peer, then work in flight — a panel that leads with "3 agents working" is a
process monitor, this one leads with what will not move until someone acts.

ask --wait is bounded (30s default) with distinct exit codes, since a foreign
agent running it is blocking its own turn.

fleet up writes no terminal code. tmux already gives panes, per-pane cwd,
keyboard switching, zoom, detach and a server that outlives the client, and
core already wraps its CLI. The command sequences those calls and adds the
one thing tmux cannot know about: a pane showing the board. Agents start via
the command passed at split time, so no keystroke can land before a shell is
ready. --with runs any other binary in its own pane, which is how a foreign
agent joins.

board-tasks.ts is deliberately not agents/team/tasks.ts: that module is Agent
Team's in-session list with dependency edges and an in-process change emitter
its scheduler subscribes to, keyed under a different storage root. Keeping
them apart lets this ship without rewriting that scheduler.

Refs #8724
Without this the feature does not work at all. fleet up starts each pane with
QWEN_BOARD in its environment, but a plain session ignored it — never
claiming a task, never looking for a question addressed to it, never raising
anything for the user. Panes of agents that cannot see each other, and a board
pane that stays empty.

The section is about when to reach for the board, not a command reference. A
model given verbs without boundaries uses ask for things it could read itself,
or narrates progress instead of moving a task. So it states that completing a
task is how you report, that an ask is for what only another participant can
answer, and that anything needing authority is a decision no agent resolves —
including itself.

It also pins the boundaries the design depends on and that prose would drift
away from: no general-purpose message, a named owner is a proposal rather than
an assignment, and your own output is not visible to anyone else.

Absent unless QWEN_BOARD is set, so the common single-agent prompt pays
nothing for it.

The CLI now re-exports the env var names from core instead of redeclaring
them. Two copies of a constant that must agree is the same failure mode this
whole design exists to remove.

Refs #8724
Written for someone who wants several agents working side by side, so it opens
with the command that produces that and a picture of the result rather than
with the model.

Three things it states plainly because they are the parts that surprise
people: the panel is ordered by what needs you first and hides anything
settled; --wait always settles, so a caller never hangs; and nothing is pushed
to any participant, which is exactly why a tool we did not write can take
part.

The limits section is honest about the two that matter — participation is
cooperative and cannot be enforced on an agent we did not write, and a named
owner is a proposal rather than an assignment.
@yiliang114 yiliang114 changed the title feat(core): add ask and decision as board items feat: agent board — share work across independently started agents Aug 18, 2026
yiliang114 added 5 commits August 19, 2026 01:05
The audit found the command surface was unreachable and the layout broken,
which between them meant nothing in this PR could actually be exercised.

Blocker: qwen board and qwen fleet were registered but not in
parseArguments' exit list, so every invocation printed its output and then
booted a full interactive Qwen session on the same stdin. In a fleet pane
that is a TUI takeover; from a tool call it is a hung turn. It also made
run()'s exit codes meaningless, so the branching the ask contract promises
did not work.

Layout: tmux -l sizes the *new* pane, and the new pane was the board — so the
board took 70% and sat on the right, the opposite of both the intent and the
comment. Splitting N ways by hand also computed -l 100% for the last pane,
which tmux rejects, so the default --agents 2 failed on a half-built session.
Now the window's own pane is respawned as the board and main-vertical does
the arithmetic. Running inside tmux also used the configured session name
rather than the one the user is actually in, which fails whenever those
differ.

Ownership: claiming a completed task silently reopened and reassigned it, and
anyone could complete work someone else was mid-way through. Completion now
requires ownership; notes and hand-offs stay open to anyone, since those are
how a stuck board gets unstuck and neither destroys work.

Identity: the participant fallback included the pid, so every invocation was
a different participant — claim and done on one task came from two identities
and an ask could never be addressed back. Stable per-user now.

Also: --ttl on ask, since a recipient that only looks between long turns
could not answer within the fixed 15 minutes; --wait reads one item instead
of listing the board every 500ms; and the asks header no longer claims the
timeout is persisted, because it never was and persisting it would mean a
read path that writes.
The audit was right that --with was hollow: it set QWEN_BOARD in a foreign
pane, but a Codex never reads that variable and nothing we control can inject
into its prompt. The env var alone made heterogeneous participation look
supported while leaving the operator to reconstruct the protocol by hand —
the exact thing an access layer exists to avoid.

qwen board protocol prints the same instructions a Qwen session gets, filled
in with the real board and participant name, in a form meant to be pasted.
--with panes now run it before exec'ing the command, so the text is already
in the pane the agent lives in.

This does not make participation enforceable, and the docs say so. It makes
it possible without a human reading our source.

Also adds show --mine, which narrows tasks and asks to one participant while
deliberately keeping decisions: those are the human's, and a view that hides
them cannot tell the user what is blocking the board.
…caught

The second audit found this branch did not typecheck: fleet.ts passed
tmuxListPanes' result — already TmuxPaneInfo[] — back into
parseTmuxListPanes. Same failure mode as the round before: a path written
against an imagined API and never exercised.

Worse was what it did when it ran. Inside tmux, the code asked tmux for "the
current window" after creating one. For a non-attached command client that
resolves from the inherited $TMUX_PANE — the window that invoked us — so
fleet up respawned its own pane and killed itself mid-build. tmuxNewWindow
now returns the new window's id via -P -F, which is the only thing that can
name the window we just made.

Also from the audit: the layout ran out of rows past three or four panes
because every split halved the same pane, so it now rebalances after each;
re-running outside tmux reused an existing window and destroyed the earlier
board, so it always makes a fresh one; tmux failures after verifyTmux escaped
as a raw stack trace through the yargs handler, now contained to one line;
and show --mine filtered only the human render, making the flag a no-op for
--json, which is the branch a foreign agent uses.

The --with pane no longer prints the protocol before exec'ing: agent TUIs
enter the alternate screen and discard it, so the banner was never readable.
The operator is told once, after the layout is up, to paste qwen board
protocol in. The docs said the environment variables were enough for a
foreign tool to join, which was never true; they now say what actually works,
and record --ttl, --mine and the running-session limitation.
The last requirement still unmet. Board awareness came only from QWEN_BOARD,
which fleet up sets in each pane's environment — and an environment is fixed
at launch. A session that was already deep in a problem when coordination
started could never participate, which is precisely the case this design
exists for.

resolveBoardPromptContext now checks a runtime context before the
environment, and /board sets it and refreshes the system instruction, so the
board section is present from the next turn. getMainSessionSystemInstruction
rebuilds the base prompt on every refresh, so no cache had to be invalidated.

/board          reports where you are
/board <name> [as <who>]
/board off

The point is that the joining session keeps its context. Briefing a fresh
teammate is what spawning already does; bringing in an agent that has been
working for an hour is what this is for.

Docs record it, and the limits section now says what is actually true — a
running session can join, but nothing is pushed to it, so it sees an item the
next time it looks.
prune was specified in the design and referenced by a comment in asks.ts for
a command that did not exist, so settled items accumulated forever. It is
manual rather than scheduled: deleting a record another participant may be
mid-read on is a concurrency problem worth not having, and a fetch-based
system has no daemon that could be trusted to sweep. It takes the item lock
so a concurrent settle cannot be lost between the read and the unlink.

decisions.ts claimed no agent-visible tool routes to resolveDecision. That was
false — qwen board resolve is on the same CLI the prompt teaches agents to
use, so anything with a shell could settle its own decision. Enforcing it
needs a surface the agent panes do not carry; until then the code, and now the
user docs, say "by agreement" rather than pretending it is an invariant.

Two smaller repairs from the audit: the lock map grew one mutex per touched
path for the process lifetime, which a long-lived board watch would accumulate
indefinitely, and a file removed between taking the lock and reading it
surfaced as a raw ENOENT instead of the not-found the onMissing contract
promises — reachable now that prune exists.

Also names the board pane, which showed the hostname before.
yiliang114 added 2 commits August 19, 2026 09:41
Until now the only participants visible were those who had already owned a
task or been party to an ask. An agent that joined a minute ago could not be
addressed, because nothing knew its name — and `board ask <name>` had no way
to learn one, so callers were left guessing.

participants/{name}.json records who is on a board. It does not duplicate the
machine-wide session registry: that one is keyed by pid and answers what is
alive, this one is keyed by declared name and answers who is here. Liveness is
read from the former, so a record never has to be heartbeated — a crashed
agent stops being listed because its pid is gone.

A name held by a live process is suffixed rather than refused: a caller made
to retry with a different name will either pick badly or give up. A name whose
holder is gone is reclaimed, or a crash loop would exhaust every reasonable
one.

Panes join before the agent starts, and /board joins on the way in, rather
than instructing the model to run it. A participant nobody registered cannot
be addressed, which is too load-bearing to leave to whether an agent follows
its prompt.

kind — interactive | daemon | spawned | foreign — is the field that separates
an agent a leader started, which exists to do what it is given, from an
independent one with its own work, for which an assignment is a proposal.
A session mid-turn reads the board at its turn boundary, but one sitting idle
at a prompt has no boundary — so an ask addressed to it would sit untouched
until its TTL lapsed. That gap is the strongest argument for push, and it does
not need push to close.

useBoardPending polls every five seconds: below what a person notices, and one
readdir plus a few small reads, the same order as sessions ps. The session
still chose the moment and nothing can arrive unbidden, so none of the
machinery a delivery path would need comes with it. Decisions lead the
indicator and carry the mark — an ask blocks one peer, a decision blocks
everyone until a person acts.

Deliberately not wired into Footer.tsx. That is a 320-line ternary chain whose
rendered output I cannot see from here, and blind edits to unverifiable code
produced both of this branch's earlier blockers. The hook and its formatter
are tested; wiring is one branch in leftBottomContent and wants a visual
check.

An unreadable board — removed, permissions changed — drops the indicator
rather than interrupting the session.
@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 20, 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: 137 passed · 0 failed · 137 total

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

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

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

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

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

Verification report

PR #9402 Deep Verification — feat: agent board

Verdict: merge-ready — 137/137 scripted assertions passed (0 unexpected failures).
Verified head: 6986db42febce46d0da0a34765556cb98211b629 (git rev-parse HEAD^2), base tip 3b3818db, merge-ref checkout depth 2.
Artifact dir: tmp/pr9402-verify-20260820-045255/ (harnesses in harness/, logs in logs/, images in evidence/).

中文摘要

结论:merge-ready 137/137 条脚本化断言全部通过,无意外失败。

  • A/B 结论01-ab-base-vs-head.png):基线(HEAD^1 重建的 CLI)上 qwen board … 是未知命令(yargs 拒绝,退出码 1,--help 无 board 条目);PR 构建上同一命令返回合法 JSON(退出码 0)。两侧的有效性对照(--versionchannel --help)均正常,证明基线构建本身可用、缺失专属于 board 布线。源码级佐证:基线 config.tsboardCommand 出现 0 次,board.ts 在基线不存在。
  • 行为验证:按 PR 自带 Reviewer Test Plan 的 6 个步骤逐一构建了无 mock 的真实进程 harness(隔离 QWEN_HOME、真实 CLI 进程、真实文件锁):任务生命周期与越权拒绝(H1,23 条)、ask 的 0/2/3/4 退出码与仅收件人可答/拒(H2,23 条)、decision 发起人/处理人记录(H3,12 条)、坏记录跳过列表且定向写失败不改字节(H4,15 条)、prune 与锁内 reopen 竞态(H5,15 条,含删除对照组)、私有权限/危险名拒绝/并发 id 唯一/输出消毒/65536 字边界(H6,39 条)。全部通过。
  • 测试有效性:7 个变异中 6 个被相应测试或 harness 按预期杀死;唯一幸存者(把 prune 的读移到锁外)属于竞态相关的覆盖缺口而非死代码——该性质由 H5 的跨进程对照组证明是承重的,只是单元测试的进程内夹具无法区分。详见 Findings 第 1 条(建议级,不阻塞)。
  • 未覆盖:Windows 运行时行为、per-commit 归因(浅克隆仅 3 个提交可达,PR 共 40 个提交)、全仓测试/lint(由 PR 自身 CI 覆盖)、bundle 入口(本次 CI 未产 bundle)。

Scope

Central claim: independently started agents (separate CLI processes, declared actors) can share tasks, asks, and decisions through a named filesystem board, with addressee-only settlement, a stable JSON contract, and the --wait exit-code contract 0/2/3/4.
Secondary claims: (1) malformed foreign records are skipped by listings and rejected byte-preserved by targeted mutations; (2) safety surface — private 0700/0600 permissions, safe-name validation, unique ids under concurrency, prune re-reads eligibility under the item lock.

The PR is purely additive (+2236 / 18 files, no dependency changes — the package.json hunk is only a ./board export subpath), so the A/B degenerates to "absent on base / working on head" and the behavioral weight sits in the harnesses.

A/B: the wiring is load-bearing

Base control: git worktree add tmp/base-tree HEAD^1, only packages/cli rebuilt (no lockfile delta, so the root and nested packages/*/node_modules are reused verbatim via symlinks; packages/cli/dist/src/commands/board.js confirmed absent from the base build). Source-level absence: 0 boardCommand references in base config.ts, board.ts does not exist at HEAD^1.

cell base (control) head (PR)
board show --board ab --json exit 1, Unknown arguments: board exit 0, {"board":"ab","tasks":[],…}
--help lists qwen board no yes
board task … --as api --json exit 1, unknown command exit 0, pending task JSON
--version (validity, both arms) exit 0, 0.21.11 exit 0, 0.21.11
channel --help (validity, both arms) exit 0 exit 0

10/10 scripted cells passed — see 01-ab-base-vs-head.png and logs/ab-cells.log.

Behavioral harnesses (real processes, isolated QWEN_HOME)

Each Reviewer Test Plan step was executed as scripted cells against node packages/cli/dist/index.js; every cell is re-runnable from harness/*.mjs, logs in logs/.

step harness result witness
1. task → claim → done → show across invocations; ownership errors; one-line ids H1 23/23 02-task-lifecycle-h1.png
2. ask addressee-only settlement; --wait exits 0/2/3/4; settle-after-timeout rejected H2 23/23 03-ask-exit-codes-h2.png
3. raise/resolve records raiser + resolver; --approve/--reject exclusivity; --about id validation H3 12/12 logs/h3-decisions.log
4. malformed neighbours skipped by listing; targeted mutations fail with sha256-identical bytes H4 15/15 logs/h4-malformed.log
5. prune-vs-reopen under cross-process lock, with delete-control H5 15/15 04-prune-race-h5.png
6. perms 0700/0600; unsafe names (path escape, device names, length) rejected; 8-way concurrent id uniqueness; ESC/BEL sanitized in human output, JSON escapes control chars; 65536/65537-char boundary H6 39/39 logs/h6-security.log

Notes on the race cell (H5 E/F): a holder process takes the real proper-lockfile item lock, a real prune CLI process blocks on it, the record is rewritten settled→open while the lock is held, then the lock releases — prune re-reads and preserves (E); the identical run without the reopen deletes (F). Two earlier iterations of this cell were race-flawed (rewrite racing CLI startup) and were discarded; the final design gates the rewrite inside the hold window and asserts it (H5.7a).

Mutation / vacuity matrix

Unmutated control green: core board suites 11/11, cli board suite 14/14 (06-gate-suites.png).

mutant oracle verdict
M1 asks.ts: drop addressee check core suite killed — authz test fails at addressed to "web"
M2 board-lock.ts: drop device-name clause core suite killed — unsafe-name test fails on con
M3 board-tasks.ts: parse errors rethrow core suite killed — 2 tests fail
M4 board.ts: drop exit-code 2/3 mapping cli suite killed — both mapping tests fail
M5 pruneCollection reads before lock core suite survived (11/11 green)
M5 same mutant H5 cross-process harness killed (H5.8/9 flip to FAIL)
M5b pruneCollection unlinks unconditionally core suite killed — prune-eligibility test fails

M1–M4 are the positive controls proving the suites and harness can go red. See 05-mutation-matrix.png.

Findings

  1. Suggestion (completeness, non-blocking): board-items.test.ts "re-checks prune eligibility while holding the item lock" pins a weaker property than its name claims. Mutant M5 (read the record before taking the lock, unlink under the lock) survives the suite because the test's in-process rewrite lands on disk before the mutant's early read executes — the fixture cannot distinguish "re-read under lock" from "read early, delete under lock". The property itself is load-bearing: the shipped code passed H5 cell E while the same mutant failed it (H5.8/9), against the F control that deletes without the reopen. A fixture that would go red is the cross-process variant shipped in this artifact (harness/h5-prune-race.mjs cells E/F, signal-based lock holder); alternatively the in-process fixture would need to force the rewrite to occur after prune's first read and before lock release, which the lock itself is what guarantees. No shipped-code change needed — behavior is proven correct.

No other findings: every claim in the Reviewer Test Plan held, the docs page (docs/users/features/agent-board.md) matches observed behavior on every checkable point (exit codes, --as filtering semantics, prune cutoff in days, recheck-under-lock), and the boundary probes (65536-char text, 64-char names, empty/blank inputs, self-ask, settle-after-timeout, double-settle) all behaved as specified.

Not covered

  • Windows runtime behavior. Verified on Linux only; device-name rejection is portable by construction, but Windows file-lock/permission semantics were not exercised (the PR itself marks Windows/Linux smoke as unvalidated).
  • Per-commit attribution. The checkout is depth 2 (git rev-list HEAD^1..HEAD^2 reaches 1 commit; the metadata snapshot lists 40), so only the aggregate HEAD^1..HEAD diff was verified.
  • Repo-wide test suite / lint / full typecheck. Gates were scoped to the affected files: the three new test files + the touched cli.test.ts (55/55) and tsc --noEmit on packages/core and packages/cli (both clean). The PR's own CI covers the rest.
  • Bundle entry (bundle/qwen.js). Not produced by this CI run; harnesses drove the package bin packages/cli/dist/index.js directly. The root scripts/cli-entry.js fast-path wrapper therefore was not part of the exercised path.
  • Multi-writer same-checkout, slash commands, footer polling, push delivery, remote boards — explicitly out of scope in the PR description.
  • The one residual type error in the base worktree rebuild (TS7016 for @lydell/node-pty pulled in via cli→core source mapping) is an artifact of rebuilding in a bare worktree: tsc --noEmit on head's packages/cli is clean, and the base cell's oracle is behavioral (yargs rejecting an unknown command), which the emitted base JS ran correctly.

Methodology

One container (node:22-bookworm, shared runner), working tree at refs/pull/9402/merge; npm ci + npm run build completed before this round. The PR's CLI was driven as real child processes (node packages/cli/dist/index.js) with a unique QWEN_HOME per harness so boards live under the artifact dir; wait cells used real background waiter processes answered/declined from separate invocations; the prune race used a lock-holder process importing the compiled withItemLock from packages/core/dist (same implementation as the CLI). Mutations were applied in place to head sources (or, for the dist-level M5 run, to a scratch-patched copy of the compiled board-lock.js with backup/restore verified), each followed by the focused vitest suite and a git checkout restore confirmed by a clean git status. Base side: worktree at HEAD^1 with nested node_modules symlinked from the head tree (valid because the PR leaves package-lock.json untouched — realpath asserted), packages/cli rebuilt there. Evidence images were produced by scripts/verify-capture.mjs; raw per-cell logs live in logs/, harness sources in harness/.

Flakiness gate log

rounds=5 files=4 skipped=0
file packages/cli/src/cli.test.ts: (cd packages/cli) npx --no-install vitest run ./src/cli.test.ts
file packages/cli/src/commands/board/board-cli.test.ts: (cd packages/cli) npx --no-install vitest run ./src/commands/board/board-cli.test.ts
file packages/core/src/agents/team/board-items.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/team/board-items.test.ts
file packages/core/src/agents/team/board-tasks.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/team/board-tasks.test.ts


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/cli/src/cli.test.ts: PPPPP
  packages/cli/src/commands/board/board-cli.test.ts: PPPPP
  packages/core/src/agents/team/board-items.test.ts: PPPPP
  packages/core/src/agents/team/board-tasks.test.ts: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/cli/src/cli.test.ts: P (exit 0)
round 1 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 1 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 1 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 2 · packages/cli/src/cli.test.ts: P (exit 0)
round 2 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 2 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 2 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 3 · packages/cli/src/cli.test.ts: P (exit 0)
round 3 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 3 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 3 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 4 · packages/cli/src/cli.test.ts: P (exit 0)
round 4 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 4 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 4 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 5 · packages/cli/src/cli.test.ts: P (exit 0)
round 5 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 5 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 5 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)

Evidence images

01-ab-base-vs-head

02-task-lifecycle-h1

03-ask-exit-codes-h2

04-prune-race-h5

05-mutation-matrix

06-gate-suites

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 6986db42febce46d0da0a34765556cb98211b629 — 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.

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

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

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

@yiliang114

yiliang114 commented Aug 20, 2026

Copy link
Copy Markdown
Collaborator Author

What this enables today

This PR provides a durable, pull-based board for independently started processes on the same machine. It does not depend on #8724 or the Agent View PRs.

A minimal task flow looks like this:

# Session A creates work
qwen board task "check the API response" --board orders --as api

# Session B reads, claims, and completes it
qwen board show --board orders --as web
qwen board claim <task-id> --board orders --as web
qwen board done <task-id> --board orders --as web --note "status is numeric"

# Session A reads the board-wide result
qwen board show --board orders

Questions use the same model:

# Session A leaves a question
qwen board ask web "does the client parse status as text?" --board orders --as api

# Session B reads and answers it
qwen board show --board orders --as web
qwen board answer <ask-id> "no, it is numeric" --board orders --as web

The observable result is shared state under ~/.qwen/boards/ that survives process exits. Separate processes can safely update the same item, and --json makes the result usable by agents and scripts. --as is only a recorded actor label, not authentication.

The important boundary is that this version is manual pull, not live delivery. ask --wait polls for an answer from the sender process; it does not notify or wake the receiver. There is no automatic session discovery, prompt injection, background polling, native tool, slash command, or Agent View UI. If nobody runs qwen board, the feature starts no background work and does not affect the normal agent path. Those lower-friction and wake/push behaviors belong to the later Stage 3/4 layer.

@yiliang114 yiliang114 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Correctness and security are clean at the current head: I found no P0/P1, and there are no active unresolved review threads. Normal interactive behavior is unchanged beyond registering and loading the new top-level command; no board directory, background polling, model input, or Agent Team state is touched unless qwen board is invoked.

The ponytail pass found one meaningful scope reduction and three small local simplifications inline. All are non-blocking. The main decision is whether the human-decision workflow belongs in the first public contract; the remaining items are optional cleanup. Net: roughly -400 lines possible if that workflow is deferred.

Comment thread packages/core/src/agents/team/decisions.ts Outdated
Comment thread packages/core/src/agents/team/board-lock.ts Outdated
Comment thread packages/cli/src/commands/board.ts Outdated
Comment thread packages/cli/src/commands/board/render.ts Outdated
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Narrowed the Stage 1/2 surface in b04948c619a3: removed the speculative decision / raise / resolve workflow, inlined the single-use lock factory, removed the impossible-state render fallback, and simplified timeout validation. This is a net reduction of 477 lines from the previous head.

Verification on the final diff: Core Board tests 10/10, CLI + routing tests 68/68, Core build, Core/CLI typecheck, and a real isolated-HOME CLI smoke all passed. The smoke confirmed raise/resolve are absent, task → claim → done and ask → answer still work, and prune JSON now contains only asks and tasks.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI at the reviewed commit and its suite did not run locally; the new qwen board CLI surface is exactly what that suite exercises.

Not reviewed: build-and-test — Test (macos-latest / windows-latest, Node 22.x) platform suites were skipped in CI at the reviewed commit and did not run locally; the board code is filesystem-sensitive (proper-lockfile cross-process locks, Windows device-name rejection).

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

  • packages/cli/src/commands/board.ts:210 — [probe] ask --wait deadline branch bypasses emit() — --json leaves stdout empty on exit 4
  • packages/cli/src/commands/board.ts:199 — [probe] ask --wait human mode prints the answer when answered but only the word 'declined' when declined — the decline reason is never shown
  • packages/core/src/agents/team/board-tasks.ts:198 — [probe] claimBoardTask silently overwrites an owner explicitly assigned at creation while the task is still pending
  • packages/core/src/agents/team/asks.ts:144 — [probe] createAsk never validates expiresAt > createdAt, while parseAsk enforces it — sub-ulp ttlMs persists a record every reader rejects

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

Comment thread packages/cli/src/commands/board.ts Outdated
Comment thread packages/cli/src/config/config.ts
Comment thread packages/cli/src/commands/board.ts
@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

Patrol recheck: current head b04948c has 0 unresolved review threads. Resolved Criticals have author evidence replies or explicit outdated/design rationale. The latest bot review (09:48Z) lists only deferred non-blocking findings; please refresh the stale CHANGES_REQUESTED decision on this head.

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 20, 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: 121 passed · 0 failed · 121 total

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

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

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

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

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

Verification report

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

Follow-up round at the new head. 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: 121 passed · 0 failed · 121 total

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

本轮为跟进验证:PR 在上轮(head 6986db42)之后合入了 main、新增设计文档,并加入 refactor(board): narrow the collaboration surface(删除 decisions 子系统、内联锁实现、收窄渲染与数值校验)。所有上轮测量均在新 head b04948c6 重新执行,未走"输入闭包相同"捷径。

  • 结论:merge-ready 121/121 条脚本化断言通过,0 意外失败。
  • A/B01-ab-base-vs-head.png):基线 CLI 拒绝 board(yargs 未知命令,退出 1),PR 构建返回合法 JSON;两侧有效性对照(--versionchannel --help)均正常;新增 delta 探针确认 raise/resolve 已从 head 表面移除、prune --json 形状收窄为 {asks,tasks}
  • 行为 harness:任务生命周期 17/17、ask 退出码 0/2/3/4 与仅收件人可答 20/20、坏记录跳过且定向写不改字节 13/13、prune 与锁内 reopen 跨进程竞态 9/9、安全面 32/32。
  • 上轮唯一 finding(建议级)在新 head 复测后仍然成立:重写后的单测(decisions→asks)对"锁外先读"变异 M5 仍 10/10 存活(进程内夹具无法强制读取先于改写),而跨进程 H5 harness 3/3 杀死该变异、对发货代码 9/9 绿——性质承重、夹具偏弱,维持建议级,不阻塞。
  • 未覆盖:Windows 运行时、per-commit 归因(浅克隆)、全仓测试/lint(PR 自身 CI 覆盖)、bundle 入口。
Verification report

PR #9402 Deep Verification (round 2) — feat: agent board

Verdict: merge-ready — 121/121 scripted assertions passed (0 unexpected failures).
Verified head: b04948c619a358f8792c375b8c54160d4dc338df (git rev-parse HEAD^2), base tip 43aea24550, merge-ref checkout depth 2.
Artifact dir: tmp/pr9402-verify-20260820-144003/ (harnesses in harness/, logs in logs/, images in evidence/).

Previous-round findings at the new head

# finding (round 1) severity status at b04948c6
1 board-items.test.ts "re-checks prune eligibility while holding the item lock" pins a weaker property than its name claims: the in-process fixture cannot distinguish "re-read under lock" from "read early, delete under lock" (mutant M5 survived the suite; the cross-process harness proved the property load-bearing). Suggestion, non-blocking stands — re-measured. The test was rewritten (decisions → asks with expiresAt freshening) but M5 still survives it 10/10, for the same structural reason: the single setImmediate yield lets the mutant's early read land after the rewrite, so both shipped code and mutant return []. The cross-process H5 harness still kills M5 3/3 (mutant deletes the reopened record; shipped code preserves it) and passes 9/9 on shipped code. Positive control M5b (unconditional unlink) kills the rewritten test, proving it can go red. No shipped-code change needed — behavior is proven correct by H5.

No other round-1 findings existed. All round-1 measurements were re-run at the new head (none carried by the identical-closure shortcut — the refactor touched every production file the harnesses exercise).

Scope

Central claim (unchanged): independently started agents (separate CLI processes, declared actors) share tasks and asks through a named filesystem board, with addressee-only settlement, a stable JSON contract, and the --wait exit-code contract 0/2/3/4.
Secondary claims: (1) malformed foreign records are skipped by listings and rejected byte-preserved by targeted mutations; (2) safety surface — private 0700/0600 permissions, safe-name validation, unique ids under concurrency, prune re-reads eligibility under the item lock.
Delta since round 1 (6986db42b04948c6, PR-scoped): the narrow the collaboration surface refactor deleted the decisions subsystem (decisions.ts −247 lines, raise/resolve commands, DecisionRecord from snapshot/render/prune/barrel, their tests, and the docs section), re-inlined the lock factory into a single withItemLock (same two-tier discipline, same retry budget 30, same mutex-eviction finally), dropped the d prefix from ITEM_ID, removed render's defensive text() coercion (records now assumed validated), and simplified --timeout to a single finiteNumber(a.timeout * 1000, …) call. Plus a new design doc (docs/plans/2026-08-18-peer-session-collaboration.md) consistent with the narrowed surface.

A/B: the wiring is load-bearing at the new head

Base control: git worktree add tmp/base-tree HEAD^1, packages/cli rebuilt there (generated git-commit.ts produced in-tree first; residual test-file type errors are a bare-worktree artifact — emitted JS ran correctly). packages/cli/dist/src/commands/board.js confirmed absent from the base build; base CLI never imports the board subpath, so the root-node_modules symlink into the head tree is not a confound (realpath asserted, noted here per methodology).

cell base (control) head (PR)
board show --board ab --json exit 1, Unknown arguments: board, json exit 0, {"board":"ab","tasks":[],"asks":[]}
board task … --as api --json exit 1 exit 0, pending task JSON
--help lists board no yes, all 8 subcommands
board raise / board resolve (delta probe) n/a (absent) exit 1 — removed as intended
prune --json shape (delta probe) n/a exactly {asks,tasks}
--version (validity, both arms) exit 0, 0.21.11 exit 0
channel --help (validity, both arms) exit 0 exit 0

17/17 scripted cells passed — witness 01-ab-base-vs-head.png, log logs/h0-ab.assert.json.

Behavioral harnesses (real processes, isolated QWEN_HOME)

Every Reviewer Test Plan step re-executed as scripted cells against node packages/cli/dist/index.js; all re-runnable from harness/*.mjs.

step harness result witness
1. task → claim → done → show across invocations; ownership errors; one-line ids; --as filtering H1 17/17 02-task-lifecycle-h1.png
2. ask addressee-only settlement; --wait exits 0/2/3/4 via real background waiters; settle-after-timeout and double-settle rejected; self-ask rejected; --ttl abc / --timeout 1e308 / negative --ttl rejected without side effects H2 20/20 03-ask-exit-codes-h2.png
3. malformed neighbours (broken JSON, schema 99, id-mismatch) skipped by listing; targeted mutations fail with sha256-identical bytes; prune skips malformed too H4 13/13 04-malformed-h4.png
4. prune-vs-reopen under a real cross-process lock: E preserves the reopened record, F control deletes; holder acquires/releases the compiled withItemLock cleanly H5 9/9 05-prune-race-h5.png
5. perms 0700/0600; 13 unsafe board names + 4 actor names rejected (64-char boundary accepted); 8-way concurrent id uniqueness; ESC/BEL sanitized in human output while JSON round-trips raw; 65536/65537-char boundary H6 32/32 06-security-h6.png

(The round-1 H3 decisions harness was retired with the feature; its coverage cell is now the delta probe in H0: raise/resolve rejected on head.)

Mutation / vacuity matrix at the new head

Unmutated controls green: core board suites 10/10, cli board suite 13/13. Witness 07-mutation-matrix.png; per-mutant vitest logs in logs/mut-*.vitest.log.

mutant oracle verdict
M1 asks.ts: drop addressee check core suite killedlets only the addressed actor answer or decline red
M2 board-lock.ts: drop device-name clause core suite killedrejects unsafe board directory names red
M3 board-tasks.ts: rethrow parse errors core suite killed — both malformed-record tests red
M4 board.ts: drop exit-code 2/3 mapping cli suite killed — both mapping tests red
M5b pruneCollection unlinks unconditionally core suite killed — the rewritten prune re-check test red (positive control: it can go red)
M5 pruneCollection reads before lock core suite ×10 survived 10/10 — known coverage gap (finding #1), not dead code
M5 same mutant, compiled into dist H5 cross-process ×3 killed 3/3 — cell E flips to FAIL (reopened record deleted)

M5's survival is classified as an ordinary coverage gap (behavior correct, in-process fixture cannot assert it), mirrored from round 1; the H5 column is the load-bearing pin. No mutant regressed from killed to survived versus round 1.

Findings

  1. Suggestion (completeness, non-blocking; carried from round 1, stands): the rewritten re-checks prune eligibility while holding the item lock test still does not pin re-read-under-lock — M5 survives it 10/10 while H5 kills the same mutant 3/3. A fixture that would go red is the cross-process variant shipped in this artifact (harness/h5-prune-race.mjs cells E/F) or an in-process fixture that forces the rewrite between the mutant's early read and the lock acquisition. No shipped-code change needed.

No new findings. Delta-specific checks all held: no dangling references to the removed decisions API anywhere in packages/ (grep census); docs (user page + new design doc) match the narrowed surface on every checkable point (exit codes, --as filter semantics, prune cutoff in days, recheck-under-lock, item table without decisions); render's removed text() coercion has no reachable unvalidated path (the CLI only renders listAsks/listBoardTasks output, which parse-and-skip malformed records — verified by H4); the finiteNumber(a.timeout * 1000) simplification preserves rejection of NaN/Infinity/negative inputs (H2 cells).

Not covered

  • Windows runtime behavior — Linux-only verification; the PR itself marks Windows smoke as pending.
  • Per-commit attribution — depth-2 checkout reaches 1 commit of the PR's 40+; only the aggregate HEAD^1..HEAD diff was verified, plus the PR-scoped delta 6986db42..HEAD^2 (the previous verified head is locally reachable, so the refactor's own hunks were verified commit-accurately).
  • Repo-wide test suite / lint — gates scoped to the affected files: board suites (10+13), cli.test.ts (55/55, includes the bootstrap import-boundary test that now pins boardCommand), tsc --noEmit on core and cli (both clean). The PR's own CI covers the rest.
  • Bundle entry — not produced by this run; harnesses drove packages/cli/dist/index.js.
  • M5-vs-unit-suite cell is reported as a measurement (10/10 survived), not counted in assertions.json; it carries no encoded expectation.
  • Flakiness gate on changed test files is run by the workflow, not this round.

Methodology

One container (node:22-bookworm, shared runner), working tree at refs/pull/9402/merge; npm ci + npm run build completed before the round. The PR's CLI ran as real child processes with a unique QWEN_HOME per harness; wait cells used real background waiter processes settled from separate invocations; the prune race used a lock-holder process importing compiled withItemLock from packages/core/dist. Mutations were applied to head sources by harness/run-mutations.mjs (exact-string replace, restore verified by clean git status), each followed by the focused vitest suite; the M5 dist experiment rebuilt packages/core twice (mutant then shipped), with the shipped ordering re-asserted in the rebuilt dist (withItemLock( precedes readFile(full) and H5 re-run green afterwards. Base side: worktree at HEAD^1, packages/cli rebuilt there after generating the gitignored git-commit.ts. Assertion counts come exclusively from logs/*.assert.json plus the matrix/gate rows listed above (108 harness + 8 matrix + 5 gates = 121). Evidence images produced by scripts/verify-capture.mjs; raw logs in logs/.

Flakiness gate log

rounds=5 files=4 skipped=0
file packages/cli/src/cli.test.ts: (cd packages/cli) npx --no-install vitest run ./src/cli.test.ts
file packages/cli/src/commands/board/board-cli.test.ts: (cd packages/cli) npx --no-install vitest run ./src/commands/board/board-cli.test.ts
file packages/core/src/agents/team/board-items.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/team/board-items.test.ts
file packages/core/src/agents/team/board-tasks.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/team/board-tasks.test.ts


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/cli/src/cli.test.ts: PPPPP
  packages/cli/src/commands/board/board-cli.test.ts: PPPPP
  packages/core/src/agents/team/board-items.test.ts: PPPPP
  packages/core/src/agents/team/board-tasks.test.ts: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/cli/src/cli.test.ts: P (exit 0)
round 1 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 1 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 1 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 2 · packages/cli/src/cli.test.ts: P (exit 0)
round 2 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 2 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 2 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 3 · packages/cli/src/cli.test.ts: P (exit 0)
round 3 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 3 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 3 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 4 · packages/cli/src/cli.test.ts: P (exit 0)
round 4 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 4 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 4 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 5 · packages/cli/src/cli.test.ts: P (exit 0)
round 5 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 5 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 5 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)

Evidence images

01-ab-base-vs-head

02-task-lifecycle-h1

03-ask-exit-codes-h2

04-malformed-h4

05-prune-race-h5

06-security-h6

07-mutation-matrix

08-gate-suites

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 already has a review of its own on b04948c619a358f8792c375b8c54160d4dc338df, which still stands.

机器人在 b04948c619a358f8792c375b8c54160d4dc338df 上已有自己的评审,且仍然有效。

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

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

…iting

`parseArguments` calls `process.exit` as soon as a board handler resolves.
`emit` wrote to stdout without waiting for the flush, so a `--json` snapshot
larger than the pipe buffer was truncated mid-record while the command still
exited 0. Waiting for the write callback also means a reader that closes early
has to be handled, since a closed pipe is reported both to the callback and as
a stream error event.

`ask --wait` validated `--timeout` only after `createAsk` had already
persisted the ask, so a rejected timeout left an orphaned open ask on the
board. The local wait is now validated before anything is written, matching
how `--ttl` already behaved.
`prune --json` listed `a-<uuid>.json` / `t-<uuid>.json` while every other
machine-readable board surface identifies items by bare id, so a script
joining prune output against ids from `show --json` matched nothing.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI at the reviewed commit and its suite did not run locally; the new qwen board CLI surface is exactly what that suite exercises.

Not reviewed: build-and-test — Test (macos-latest / windows-latest, Node 22.x) platform suites were skipped in CI at the reviewed commit and did not run locally; the board code is filesystem-sensitive (proper-lockfile cross-process locks, Windows device-name rejection).

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

  • packages/cli/src/commands/board.ts:187 — [review] numeric flag units undeclared in --help (seconds vs days)
  • packages/core/src/agents/team/board-tasks.ts:225 — [probe] pruneBoardTasks (the only delete path) has no real-behavior test
  • packages/core/src/agents/team/board-tasks.test.ts:78 — [probe] claimBoardTask conflict branches never exercised
  • packages/core/src/agents/team/board-tasks.ts:178 (+2 locations) — [probe] self-produced records rejected under a backwards wall clock (updatedAt/settledAt re-validation)
  • packages/core/src/agents/team/asks.ts:121 — [probe] settleAsk timeout settlement untested in core
  • packages/cli/src/commands/board.ts:85 — [probe] show --as identity filter has no test
  • packages/cli/src/commands/board/render.ts:26 — [probe] renderBoard ask line (from -> to direction) has zero test coverage
  • packages/core/src/agents/team/board-items.test.ts:76 — [probe] double-settlement guard untested (silent answer overwrite)
  • packages/core/src/agents/team/board-items.test.ts:57 — [probe] self-ask guard never exercised (sole enforcement point)
  • packages/core/src/agents/team/board-tasks.test.ts:75 — [probe] completeBoardTask ownership half never exercised on in-progress tasks
  • packages/core/src/agents/team/board-tasks.test.ts:110 (+2 locations) — [probe] createdAt sorts asserted only with single-element lists
  • packages/core/src/agents/team/board-tasks.ts:174 (+2 locations) — [probe] corrupt/schema-bumped records unusable, invisible, and immortal
  • packages/cli/src/commands/board.ts:202 — [probe] --timeout without --wait silently discarded
  • packages/core/src/agents/team/board-tasks.test.ts:124 — [probe] assertText blank/over-length branches never exercised
  • packages/core/src/agents/team/board-tasks.ts:145 — [probe] listBoardTasks ENOENT->[] guard never exercised
  • packages/core/src/agents/team/asks.ts:230 (+2 locations) — [probe] board write sites omit noFollow:true (symlink write-through; house-hardening divergence)
  • packages/core/src/agents/team/board-items.test.ts:149 — [probe] prune re-check test cannot discriminate the under-lock re-check (ordering)
  • docs/plans/2026-08-18-peer-session-collaboration.md:71 — [review] plan doc contracts 'reports and skips' malformed records; implementation skips silently
  • docs/plans/2026-08-18-peer-session-collaboration.md:97 — [review] plan doc ask contract omits --ttl/--about
  • packages/cli/src/commands/board.ts:291 — [probe] prune CLI success path has zero coverage (days->ms conversion and actor gate)
  • …and 3 more (see the run report)

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

Patrol closeout for head 4f474e6 (round: 2026-08-21).

The two fix commits pushed at 17:45Z (271c169, 4f474e6) were verified against the round-5 findings and all 7 remaining unresolved threads are now replied with evidence and resolved (0/138 unresolved across both thread pages):

  • Critical (--timeout orphan): validation hoisted above createAsk exactly as suggested — an invalid --timeout now exits 1 before any write.
  • Critical (piped --json truncation): emit() is async and awaited everywhere; the handler resolves only after the stdout write callback reports the pipe flushed (the drain-before-return option), EPIPE handled quietly. 3 new board-cli tests.
  • Suggestion (prune --json ids): pruneCollection reports bare ids via path.basename(file, '.json'); CLI + core tests added.
  • The 4 ponytail self-notes were also confirmed addressed at head (decision/raise/resolve removed in b04948c; withItemLock inlined; single --timeout check; render.ts typed fields with only oneLine() sanitization).

CI on 4f474e6: all green (Test ubuntu-latest Node 22.x SUCCESS, Dependency CVE audit SUCCESS), MERGEABLE. The round-6 auto-review (21:27Z) is COMMENTED with zero new findings on this head (ledger findings:[], only deferred non-blocking probes and disclosed coverage gaps).

The remaining CHANGES_REQUESTED is the bot's stale 09:48Z review on the previous head b04948c — all its findings are fixed in the current head. No human reviewer holds a blocking state.

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

qwen-code-ci-bot commented Aug 20, 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: 164 passed · 0 failed · 164 total

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

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

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

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

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

Verification report

PR #9402 Deep Verification (round 3) — feat: agent board

Verdict: merge-ready — 164/164 scripted assertions passed (0 unexpected failures).
Verified head: 4f474e6e46d64775ed164007c3f5c7bea508e479 (git rev-parse HEAD^2), base tip 5715782279 (HEAD^1), merge-ref checkout depth 2.
Artifact dir: tmp/pr9402-verify-20260820-221825/ (harnesses in harness/, logs in logs/, images in evidence/).

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

本轮为第三次跟进验证:PR 在上轮(head b04948c6)之后新增两个提交 —— 271c1695emit 等待 stdout 排空、--timeout 在创建 ask 之前校验)与 4f474e6e(prune 按 id 而非文件名汇报)。所有上轮测量均在新 head 4f474e6e 重新执行,未走"输入闭包相同"捷径;两个新提交另以 b04948c 构建为对照做了 delta A/B(表中 H7)。

  • 结论:merge-ready 164/164 条脚本化断言通过,0 意外失败。
  • A/B01-ab-base-vs-head.png):基线 CLI 拒绝 board(退出 1),PR 构建返回合法 JSON;raise/resolve 确认已移除;prune --json 形状为 {asks,tasks};两侧有效性对照(--versionchannel --help)均正常。
  • delta A/B07-delta-ab-h7.png,15/15):
    • D1 prune 汇报 id:对照构建汇报 *.json 文件名,新 head 精确汇报创建的 id(asks 与 tasks 两侧均验证,文件确被删除)。
    • D2 管道输出不再截断:300 条任务(约 145 KB JSON)经停滞 700 ms 的读取端,对照构建静默截断到恰好 65536 字节(管道缓冲区大小)且退出 0、JSON 不可解析;新 head 完整交付 148725 字节、300/300 任务。
    • D3 --timeout 先校验后写入:对照构建对 abc/-5/1e308 三种非法值各留下 1 条孤儿 ask(共 3 条);新 head 零残留,stderr 指明被拒标志。
    • D4 EPIPE 容忍:提前关闭的读取端(类似 | head -c 10)下新 head 退出 0 且 stderr 无噪声。
  • 行为 harness(全部重测):任务生命周期 20/20、ask 退出码 0/2/3/4 与仅收件人可答 24/24、坏记录跳过且定向写不改字节 15/15、安全面 30/30、prune 与锁内 reopen 跨进程竞态 29/29(发货代码 3/3 保留被 reopen 的记录;M5 变异构建 3/3 删除——性质承重)。
  • 变异矩阵08-mutation-matrix.png):M1–M4、M5b 及三个 delta 变异 M6(emit 回退)、M7(timeout 后置校验)、M8(prune 按文件名)全部被对应套件杀死;M5(锁外先读)对进程内套件仍 10/10 存活——沿袭上轮的建议级覆盖缺口,跨进程 H5 杀死之。
  • 门禁:core board 套件 11/11、cli board 套件 18/18、cli.test.ts 55/55、core/cli tsc --noEmit 均干净(tsc 门禁经植入错误验证为活)。
  • 未覆盖:Windows 运行时、per-commit 归因(浅克隆,271c1695 对象本地不可达,delta 以聚合 diff 验证)、全仓测试/lint(PR 自身 CI 覆盖)、bundle 入口。

Previous-round findings at the new head

# finding (round 2) severity status at 4f474e6e
1 board-items.test.ts "re-checks prune eligibility while holding the item lock" pins a weaker property than its name claims: the in-process fixture cannot distinguish "re-read under lock" from "read early, delete under lock" (mutant M5 survived the suite; the cross-process harness proved the property load-bearing). Suggestion, non-blocking stands — re-measured. The test is unchanged at this head; M5 still survives the core suite 10/10, for the same structural reason (the single setImmediate yield lets the mutant's early read land after the rewrite). The cross-process H5 harness still kills M5 3/3 (mutant build deletes the reopened record; shipped code preserves it 3/3 + 16/16 harness cells). Positive control M5b (unconditional unlink) turns the re-check test red with the behavioral message (expected [Array(1)] to deeply equal []), proving the suite can go red. No shipped-code change needed.

No other round-2 findings existed. All round-2 measurements were re-run at the new head (none carried by the identical-closure shortcut — the two delta commits touch board.ts and board-lock.ts, which every harness exercises).

Scope

Central claim (unchanged): independently started agents (separate CLI processes, declared actors) share tasks and asks through a named filesystem board, with addressee-only settlement, a stable JSON contract, and the --wait exit-code contract 0/2/3/4.
Secondary claims: (1) malformed foreign records are skipped by listings and rejected byte-preserved by targeted mutations; (2) safety surface — private 0700/0600 permissions, safe-name validation, unique ids under concurrency, prune re-reads eligibility under the item lock.
Delta since round 2 (b04948c64f474e6e, PR-scoped, verified as the aggregate diff — see Not covered): two commits. 271c1695 makes emit() await stdout drain (write callback + EPIPE tolerance + non-EPIPE write-failure reporting) so the process.exit in parseArguments cannot truncate piped output, and validates --timeout before createAsk so a rejected wait cannot orphan an open ask. 4f474e6e makes pruneCollection report path.basename(file, '.json') (the item id) instead of the filename.

A/B: the wiring is load-bearing at the new head

Base control: git worktree add tmp/base-tree HEAD^1, core+cli rebuilt there with tree-local node_modules/@qwen-code links (realpath asserted; base CLI never imports the board subpath, and packages/cli/dist/src/commands/board.js is absent from the base build, so no head code can leak into the control). Witness 01-ab-base-vs-head.png, log logs/h0-ab.assert.json.

cell base (control) head (PR)
board show --board ab --json exit 1, no board JSON exit 0, {"board":"ab","tasks":[],"asks":[]}
board task … --as api --json exit 1 exit 0, pending task JSON with t- id
--help lists board no yes
board raise / board resolve (delta probe) n/a exit 1 — removed as intended
prune --json shape (delta probe) n/a exactly {asks,tasks}
--version (validity, both arms) exit 0, 0.21.14 exit 0, 0.21.14
channel --help (validity, both arms) exit 0 exit 0

17/17 scripted cells passed.

Delta A/B: each delta commit's fix flips a measured bug (H7)

Control: tmp/delta-tree at b04948c6 (the round-2 verified head, pre-fix), core+cli rebuilt with tree-local links and compiled markers verified (removed.push(file); fire-and-forget write; --timeout validated after createAsk). Head: main tree at 4f474e6e. Witness 07-delta-ab-h7.png, log logs/h7-delta.assert.json.

probe control b04948c6 (predicted broken) head 4f474e6e (predicted fixed)
D1 prune --json entries (ask + task) ["a-….json","t-….json"] — filenames exactly the created ids
D1 files removed yes yes
D2 300-task show --json through a reader stalled 700 ms 65536 bytes (exactly one pipe buffer), unparseable, 0/300 tasks, exit 0 (silent) 148725 bytes, parses, 300/300 tasks, exit 0
D3 ask --wait --timeout abc/-5/1e308 exit 1 each, 3 orphaned ask files left exit 1 each, 0 records, stderr names the flag
D4 early-closing reader (| head -c 10 shape) exit 0, stderr empty

15/15 scripted cells passed. The D2 control truncates to exactly the 64 KiB pipe buffer — the truncation is total for anything past one buffer, and silent (exit 0), which is precisely what the drain-await closes. D4 is asserted on head only: the control exits before the EPIPE can surface, so the cell would not discriminate.

Behavioral harnesses (real processes, isolated QWEN_HOME)

Every Reviewer Test Plan step re-executed as scripted cells against node packages/cli/dist/index.js; all re-runnable from harness/*.mjs.

step harness result witness
1. task → claim → done → show across invocations; ownership errors; one-line ids; --as filtering; --owner hand-off H1 20/20 02-task-lifecycle-h1.png
2. ask addressee-only settlement; --wait exits 0/2/3/4 via real background waiters (incl. two concurrent); settle-after-timeout and double-settle rejected; self-ask rejected; --ttl abc/-5/1e308 rejected with no record; --about validation H2 24/24 03-ask-exit-codes-h2.png
3. malformed neighbours (broken JSON, schema 99, id-mismatch, broken task) skipped by listing; targeted mutations fail with sha256-identical bytes; prune skips malformed and removes settled healthy items by id H4 15/15 04-malformed-h4.png
4. prune-vs-reopen under a real cross-process lock: shipped preserves the freshened record 3/3; M5 mutant build deletes it 3/3; uncontended prune sanity H5 29/29 05-prune-race-h5.png
5. perms 0700/0600; 13 unsafe board names + 4 actor names rejected; 64-char boundary accepted; 8-way concurrent id uniqueness; ESC/BEL sanitized in human output while JSON round-trips raw; 65536/65537-char boundary H6 30/30 06-security-h6.png

Mutation / vacuity matrix at the new head

Unmutated controls green: core board suites 11/11 (5 board-items + 6 board-tasks), cli board suite 18/18, cli.test.ts 55/55. Witness 08-mutation-matrix.png; per-mutant vitest logs in logs/mut-*.vitest.log; each revert verified by clean git status.

mutant oracle verdict
M1 asks.ts: drop addressee check core suite killedlets only the addressed actor answer or decline red (promise resolved … instead of rejecting)
M2 board-lock.ts: drop device-name clause core suite killedrejects unsafe board directory names red
M3 board-tasks.ts: rethrow parse errors core suite killed — both malformed-record tests red (promise rejected "SyntaxError…" )
M4 board.ts: drop exit-code 2/3 mapping cli suite killed — both mapping tests red (expected undefined to be 2/3)
M5 board-lock.ts: reads before lock core suite ×10 survived 10/10 — carried coverage gap (finding #1), not dead code
M5 same mutant, compiled into dist H5 cross-process ×3 killed 3/3 — cell flips to DELETED
M5b pruneCollection unlinks unconditionally core suite killed — re-check test red (positive control: the suite can go red)
M6 board.ts: revert emit to fire-and-forget cli suite killed — drain test, expect.any(Function) cells, multi-line answer cell all red
M7 board.ts: validate --timeout after createAsk cli suite killed — both rejects --timeout … before creating the ask cells red (expected spy to not be called … called 1 times)
M8 board-lock.ts: prune pushes filename core suite killedreports pruned items by id, not by filename red

M5's survival is classified as an ordinary coverage gap (behavior correct, in-process fixture cannot assert it), mirrored from rounds 1–2; the H5 column is the load-bearing pin. No mutant regressed from killed to survived versus round 2. The three delta-specific mutants (M6–M8) prove the round-3 additions' new tests are not vacuous — each new test pins exactly the hunk it was added with.

Delta-specific sweeps

  • All 9 emit call sites awaited (show/task/claim/done/ask×2/answer/decline/prune) — the drain fix covers the whole command surface, verified by grep census.
  • Prune return consumers: only the CLI prune handler consumes pruneAsks/pruneBoardTasks results (grep census); nothing re-derives a path from the entries, so switching filename→id has no downstream reader to break.
  • Docs: user page documents exit codes 0/2/3/4 (matches H2), cutoff in days (matches * 86_400_000), and recheck-under-lock (proven by H5); it makes no claim about prune's output shape, so D1 contradicts nothing. The "JSON without ANSI formatting" guarantee is now true even for slow pipes (D2).
  • Sibling of D3: --ttl validation happens inside the createAsk argument list (pre-write) and --older-than is validated before pruneAsks runs — the existing unit test rejects a negative prune cutoff before deleting pins the latter; no orphan path remains on either flag.
  • stderr truncation: the same drain race theoretically applies to run()'s process.stderr.write on the error path, but those messages are bounded one-liners (oneLine(err.message)) that fit any pipe buffer — observation only, not a finding.

Findings

  1. Suggestion (completeness, non-blocking; carried from rounds 1–2, stands): the in-process re-checks prune eligibility while holding the item lock test still does not pin re-read-under-lock — M5 survives it 10/10 while H5 kills the same mutant 3/3 cross-process. A fixture that would go red is the cross-process variant shipped in this artifact (harness/h5-prune-race.mjs + harness/holder.mjs) or an in-process fixture that forces the rewrite between the mutant's early read and lock acquisition. No shipped-code change needed.

No new findings.

Not covered

  • Windows runtime behavior — Linux-only verification; the PR itself marks Windows smoke as pending.
  • Per-commit attribution inside the delta — the depth-2 checkout reaches b04948c6 (as an ancestor object) and 4f474e6e, but 271c1695 is not present locally and 4f474e6e's parent is grafted at the shallow boundary, so the two delta commits were verified as the aggregate b04948c6..HEAD^2 diff and behavior, not commit-by-commit. The aggregate covers exactly those two commits per the metadata snapshot. (The repo-wide git rev-list --count HEAD^1..HEAD^2 = 1 vs 45 commits in metadata is the same shallow-boundary artifact; per-commit attribution for the whole PR remains out of reach, as in rounds 1–2.)
  • Base ref note: the metadata snapshot's baseRefOid (d4b54a46…) differs from the local merge-ref base HEAD^1 (5715782279); per the merge-ref contract the local checkout is authoritative and was used throughout.
  • Repo-wide test suite / lint — gates scoped to the affected files: board suites (11+18), cli.test.ts (55/55, includes the bootstrap registration test pinning boardCommand), tsc --noEmit on core and cli (both clean; liveness proven by a planted type error that tsc caught and that was reverted). The PR's own CI covers the rest.
  • Bundle entry — not produced by this run; harnesses drove packages/cli/dist/index.js.
  • Control-build typecheck noise: the delta/mutant worktree builds emit a channel-registry.ts type conflict (ChannelPlugin types mixed between worktree and main-tree channels/base dists). This is a worktree-build artifact — channels are outside this PR's diff and byte-identical across all arms — and the emitted JS was proven functionally sound by smoke-testing the board surface in every tree before use. The base-tree build compiled fully clean.
  • M5-vs-unit-suite cell is reported as a measurement (10/10 survived), not counted in assertions.json; it carries no encoded expectation.
  • Flakiness gate on changed test files is run by the workflow, not this round.

Methodology

One container (node:22-bookworm, shared runner), working tree at refs/pull/9402/merge; npm ci + npm run build completed before the round. The PR's CLI ran as real child processes with a unique QWEN_HOME per harness; wait cells used real background waiter processes settled from separate invocations; the prune race used a lock-holder process importing compiled withItemLock from the tree under test, with the rewrite scheduled at +1.5 s inside a 2.5 s hold so the mutant's early read (≤ ~1.2 s after prune spawn) provably precedes it. Three control trees: base at HEAD^1, delta at b04948c6, and a mutant tree at HEAD^2 with the M5 hunk applied to source before building — each with tree-local node_modules/@qwen-code symlinks (realpath asserted from inside each tree) and package-local node_modules linked from the main tree (lockfile unchanged across all three commits, so versions are identical). Compiled markers were verified in every control dist before use (removed.push(file) vs path.basename, write-callback presence, --timeout validation position, readFile-vs-lock ordering). Mutations were applied to head sources by harness/run-mutations.mjs (exact-string replace, unique-occurrence asserted, restore verified by content comparison and final clean git status). Pipe cells used real kernel pipes via bash -c with PIPESTATUS, a 700 ms-stalled reader modeling a slow consumer, and a 10-byte early-exit reader modeling | head. Assertion counts come exclusively from logs/*.assert.json plus the 8 matrix kill-expectations and 6 gate checks (150 + 8 + 6 = 164). Evidence images produced by scripts/verify-capture.mjs; raw logs in logs/.

Flakiness gate log

rounds=5 files=4 skipped=0
file packages/cli/src/cli.test.ts: (cd packages/cli) npx --no-install vitest run ./src/cli.test.ts
file packages/cli/src/commands/board/board-cli.test.ts: (cd packages/cli) npx --no-install vitest run ./src/commands/board/board-cli.test.ts
file packages/core/src/agents/team/board-items.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/team/board-items.test.ts
file packages/core/src/agents/team/board-tasks.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/team/board-tasks.test.ts


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/cli/src/cli.test.ts: PPPPP
  packages/cli/src/commands/board/board-cli.test.ts: PPPPP
  packages/core/src/agents/team/board-items.test.ts: PPPPP
  packages/core/src/agents/team/board-tasks.test.ts: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/cli/src/cli.test.ts: P (exit 0)
round 1 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 1 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 1 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 2 · packages/cli/src/cli.test.ts: P (exit 0)
round 2 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 2 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 2 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 3 · packages/cli/src/cli.test.ts: P (exit 0)
round 3 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 3 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 3 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 4 · packages/cli/src/cli.test.ts: P (exit 0)
round 4 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 4 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 4 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)
round 5 · packages/cli/src/cli.test.ts: P (exit 0)
round 5 · packages/cli/src/commands/board/board-cli.test.ts: P (exit 0)
round 5 · packages/core/src/agents/team/board-items.test.ts: P (exit 0)
round 5 · packages/core/src/agents/team/board-tasks.test.ts: P (exit 0)

Evidence images

01-ab-base-vs-head

02-task-lifecycle-h1

03-ask-exit-codes-h2

04-malformed-h4

05-prune-race-h5

06-security-h6

07-delta-ab-h7

08-mutation-matrix

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

Route corrected in b47569f. The Board remains a portable storage/CLI layer, but it is no longer described as completion of the user-visible collaboration product. The design now restores the original #8724 sequence: Agent Team for spawned Qwen teammates, registry + inbound gate + sender addressing for already-running Qwen sessions, then optional process launch and foreign-runtime runners. No Board runtime behavior changed in this follow-up.

@doudouOUC doudouOUC 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): chunk 5: None — my ~6 reads stayed well within budget.; You are review agent reverse-audit — Reverse audit agent (round 1).: None — I completed the full walk within the allocated budget.; You are review agent reverse-audit — Reverse audit agent (round 2).: None — the full 241-line chunk was within one read_file call with no truncation, and my analysis covered all functions and code paths..

— deepseek-v4-flash via Qwen Code /review (v0.21.10)

return { ...ask, state: 'timeout', settledAt: ask.expiresAt };
}

export async function createAsk(opts: {

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.

[Suggestion] asks.ts has 288 lines of production logic with no dedicated unit test file (asks.test.ts does not exist). The CLI tests mock the core module, so a regression in parseAsk, settleAsk, settleOnDisk, answerAsk, declineAsk, or pruneAsks would not be caught by the existing test suite.

Suggested change
export async function createAsk(opts: {
Add packages/core/src/agents/team/asks.test.ts covering parseAsk with valid/invalid records, createAsk→reads back via getAsk, answerAsk/declineAsk→reads back with correct state, settleOnDisk rejects by wrong actor, settleOnDisk rejects already-settled asks, listAsks returns sorted results, pruneAsks removes old settled asks, pruneAsks preserves open unexpired asks.

— deepseek-v4-flash via Qwen Code /review (v0.21.10)

});
}

export function pruneBoardTasks(

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.

[Suggestion] pruneBoardTasks has task-specific pruning logic (only prunes completed status, uses updatedAt timestamp) that is not tested. The pruneAsks tests in board-items.test.ts exercise a different code path with different settled-at logic, so they cannot substitute.

Suggested change
export function pruneBoardTasks(
Add a test in board-tasks.test.ts that creates tasks, completes them, and calls pruneBoardTasks to verify: (a) only completed tasks are pruned, (b) pending/in-progress tasks survive, (c) the returned ids match the pruned items, and (d) the list after pruning excludes the removed items.

— deepseek-v4-flash via Qwen Code /review (v0.21.10)

return ask as AskRecord;
}

function settleAsk(ask: AskRecord, now = Date.now()): AskRecord {

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.

[Suggestion] settleAsk auto-transition to timeout is not tested. A mutation that removes the settleAsk call from getAsk would cause expired asks to remain 'open' forever. The CLI --wait loop reads current.state and sets exit code 3 only when state === 'timeout'; without the auto-transition, the loop would only exit with code 4 (local wait timeout) instead of code 3 (ask TTL expired).

Suggested change
function settleAsk(ask: AskRecord, now = Date.now()): AskRecord {
Add a test that creates an ask with a short TTL, waits for it to expire, then calls getAsk and expects state: 'timeout' and settledAt to be set. A second test case could verify that listAsks also returns the expired ask as timeout.

— deepseek-v4-flash via Qwen Code /review (v0.21.10)

}): Promise<AskRecord> {
assertSafeName('actor name', opts.from);
assertSafeName('actor name', opts.to);
if (opts.from === opts.to)

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.

[Suggestion] createAsk's from===to guard is not tested. A refactoring that weakens or removes this guard would allow an actor to ask themself, which the design doc explicitly excludes. All existing tests pass because no test supplies from === to.

Suggested change
if (opts.from === opts.to)
Add a test: expect(createAsk({ board:'demo', from:'same', to:'same', question:'self?' })).rejects.toThrow('An ask must target another actor.')

— deepseek-v4-flash via Qwen Code /review (v0.21.10)

}
assertItemId('task id', ask.aboutTask, 't');
}
if (!['open', 'answered', 'declined'].includes(ask.state ?? '')) {

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.

[Suggestion] parseAsk rejects 'timeout' state but AskState type includes it and settleAsk produces it in-memory. A future code path that writes state: 'timeout' to disk would cause that record to be silently dropped from listAsks and treated as missing by getAsk/answerAsk/declineAsk.

Suggested change
if (!['open', 'answered', 'declined'].includes(ask.state ?? '')) {
Either add 'timeout' to the parseAsk validation list, or add an explicit parseAsk guard that maps timeout→'open' before validation, or add a comment explaining why 'timeout' is deliberately excluded.

— deepseek-v4-flash via Qwen Code /review (v0.21.10)

@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 failing: Post Coverage Comment, Desktop Shell (${{ matrix.os }}), Test (macos-latest, Node 22.x), Integration Tests (CLI, No Sandbox), Test (windows-latest, Node 22.x), fallback-comment, review-pr, delay-automatic-review, ack-review-request, resolve-pr, authorize. Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) failed in CI at the reviewed commit and the suite did not run locally; the new qwen board CLI surface is exactly what that suite exercises.

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

  • packages/cli/src/commands/board.ts:39 — [probe] emit() --json output passes Unicode bidi override/isolate characters from untrusted board text raw to the terminal (sanitizer bypass)

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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI at the reviewed commit and its suite did not run locally; the new qwen board CLI surface is exactly what that suite exercises.

Not reviewed: build-and-test — Test (macos-latest / windows-latest, Node 22.x) platform suites were skipped in CI at the reviewed commit and did not run locally; the board code is filesystem-sensitive (proper-lockfile cross-process locks, Windows device-name rejection).

Not explored to full depth (tool budget reached): "agent reverse-audit (round 5)": none — no check was cut short.; chunk 5: executing board-items.test.ts under vitest — the review worktree has no node_modules ( Cannot find package 'vitest' ), and a monorepo install + build was no….

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

  • packages/core/src/agents/team/board-tasks.test.ts:25 (+2 locations) — [probe] vi.mock Storage spread copies no methods — latent TypeError on a second Storage member
  • packages/core/src/agents/team/asks.ts:121 — [probe] settleAsk lazy timeout (exit-code-3 mechanism) has zero test coverage
  • packages/core/src/agents/team/board-tasks.ts:235 — [probe] pruneBoardTasks (the only task delete path) is completely untested
  • packages/cli/src/commands/board.ts:78 — [review] documented show --as filter has no test
  • packages/core/src/agents/team/board-tasks.ts:198 — [probe] claim contention guards untested — ownership theft ships green
  • packages/cli/src/commands/board.ts:289 — [review] prune CLI happy path (days→ms conversion) has no test at any layer
  • packages/core/src/agents/team/board-tasks.ts:198 — [probe] abandoned in_progress tasks are permanently stuck — no release/reassign/prune path
  • packages/core/src/agents/team/board-items.test.ts:93 — [probe] malformed-record fixtures: false comment, one check exercised twice, filter-rejection branch untested

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

@wenshao

wenshao commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

Verdict: FINDINGS — 40/41 scripted assertions passed at b47569f6da76e11f81ed4880937287aa004748bf

中文摘要

结论:核心 Board 存储与跨进程状态转换在本地无凭据容器中通过真实验证;精确 base/head A/B 证明该能力由本 PR 引入,两个独立进程竞争同一 task 或 ask 时只会有一个成功,损坏记录不会隐藏健康记录或被定向 mutation 改写,权限与名称边界符合设计。发现一个非阻塞测试覆盖缺口:删除“不同 actor 不能抢占已 claim task”的保护后,新增 board-tasks.test.ts 仍然 6/6 通过。建议合并前补一个先由 worker-a claim、再断言 worker-b claim 被拒绝的单元测试。未完成 Windows 原生运行、完整仓库构建、完整 CLI bootstrap 和 waiter/prune 三进程竞态验证;详见下方 Not covered。

Central claim

The portable Board layer lets independently started processes share tasks and asks through the filesystem while serializing each item's state transitions across processes.

Cell Exact commit Scenario Oracle Result
Base d4b54a46ff2949d0bcadb7feb48b404d8b3b1af6 Import the Board API and create a pending task packages/core/src/board.ts is absent Expected unavailable — pass
Head b47569f6da76e11f81ed4880937287aa004748bf Import the same API shape and create a pending task under an isolated HOME A real t-<uuid> record is created with status=pending Available — pass

The A/B harness reported 2/2 expected cells. The head-only mock-free harness then reported 27/27 assertions across real child processes and the real filesystem:

  • exactly one of two different actors won a concurrent claim;
  • exactly one of concurrent answer/decline transitions won;
  • losers failed loudly and the stored record remained valid;
  • only the addressed actor could answer an ask;
  • item TTL and local wait represented the states used by CLI exit codes 3 and 4;
  • malformed matching records were skipped by listing, rejected by targeted mutation, and remained byte-identical;
  • Unix collection/file modes were 0700/0600;
  • unsafe and Windows-device path names were rejected;
  • 30 independent creator processes produced 30 unique ids.

The PR's two focused Core suites also passed: 2 files, 11 tests.

Finding

Suggestion — the different-owner claim guard is not pinned by the new unit suite

I applied an interface-preserving mutation in the scratch head tree that disabled only this condition in claimBoardTask:

if (task.status === 'in_progress' && task.owner !== by) {
  throw new Error(`Task "${id}" is already claimed by "${task.owner}".`);
}

With that protection disabled, the exact command below still passed 6/6 tests:

docker run --rm --network none -v "$HEAD_TREE:/work" -w /work/packages/core \
  node:22-bookworm npx vitest run src/agents/team/board-tasks.test.ts \
  --coverage.enabled=false

The mutation was restored and the worktree was clean afterward. This is a coverage gap rather than an implementation defect: the separate real two-process harness did prove that the unmodified head rejects the losing actor. A focused fixture should claim as worker-a, then assert that a claim by worker-b rejects with already claimed by "worker-a" and leaves the owner unchanged.

Reviewer Test Plan coverage

Author step Local result
Task create → claim → done → show contract Covered through real Core records and cross-process claim/completion assertions
Ask actor enforcement and terminal outcomes Covered at the real state-machine/process layer; full yargs 0/2/3/4 bootstrap was not completed
Malformed matching record beside a healthy record Covered, including byte-for-byte preservation after targeted mutation
Prune re-reads eligibility while holding the item lock Covered by the PR's focused Core test; a separate two-process prune/reopen harness was not run
Private modes, unsafe names, concurrent ids, actionable ids Covered for Linux container modes/names/ids; Windows native behavior was not run

Not covered

  • Windows native execution. Device-name validation was exercised on Linux, but Windows locking, rename, case-insensitive path behavior, and ACL semantics were not measured.
  • Full CLI bootstrap and exact process exit codes 0/2/3/4. The Board command module itself loaded, but the standard dev bootstrap required unrelated workspace dist artifacts and the reduced yargs runner still hit a cliui/strip-ansi CJS/ESM interoperability failure after the repository's postinstall patch step. Those harnesses executed no Board assertions and are excluded from counts.
  • Full Core/CLI build. Two initial parallel npm ci runs were OOM-killed by the 4 GiB Docker VM while other verification containers were active. A later reduced install could execute Board source and focused tests, but its full TypeScript build surfaced unrelated dependency declaration generation gaps. No build result is claimed.
  • Three-process waiter/responder/pruner race, prune partial-success semantics across asks/tasks, stale-lock behavior after a >5 s pause, large-output/EPIPE behavior, and board-scale resource limits.
  • Visual evidence. Two independent local screenshot renderers produced blank PNGs on this machine and were rejected after visual inspection; no misleading images are attached. Raw text logs and rerunnable harnesses are retained instead.
  • Qwen-to-Qwen delivery, launch/wake behavior, participant discovery, and runtime addressing are outside the final diff and were not treated as claims of this PR.

Methodology

Metadata was resolved with gh pr view 9402 --repo QwenLM/qwen-code; exact detached worktrees used the PR snapshot's base and head OIDs. All PR code execution occurred in credential-free node:22-bookworm containers with --network none after dependency installation. The A/B imported exact commit source trees; the behavioral harness used real child processes, proper-lockfile, atomic writes, and isolated temporary homes without mocking the Board implementation. Artifacts are under tmp/pr9402-verify-20260824-171449/, including harnesses/board-ab.mjs, harnesses/board-real.mts, board-ab.log, board-real.log, mutation-claim.log, and the focused test log.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants