Skip to content

feat(web-shell): make compact view the only mode - #9993

Merged
ytahdn merged 7 commits into
mainfrom
worktree-remove-compact-mode
Aug 26, 2026
Merged

feat(web-shell): make compact view the only mode#9993
ytahdn merged 7 commits into
mainfrom
worktree-remove-compact-mode

Conversation

@ytahdn

@ytahdn ytahdn commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Retires the web shell's compact-mode toggle and makes the compact view the only rendering mode. Removes the Ctrl+O shortcut, the ui.compactMode workspace-setting read/write, the help entry and all related i18n copy. The compact rendering (thinking blocks and tool groups merged into expandable summary rows) is now fixed on for every message surface via a single root CompactModeContext provider — main chat, split panes, the subagent detail panel and its drawer variant all render compact unconditionally.

Why it's needed

The product direction is to make the compact view the only mode; keeping a toggle adds UI surface and persistence code for a behavior that can no longer be turned off. The daemon-side setting registration is intentionally left untouched (web shell only), and the web shell keeps the retired setting hidden from the settings panel.

Reviewer Test Plan

How to verify

  1. Run npm run dev:daemon and open the web shell. Send a prompt that triggers thinking and tool calls: they appear as a single expandable summary row (click to expand), not as separate rows.
  2. Press Ctrl+O: nothing happens in the page (no compact toggle, no daemon settings write). Open the help dialog: the Ctrl+O entry is gone. Open Settings: no "Compact Mode" item.
  3. Open the subagent detail panel (click an agent row) and split view: both render with the same compact summary rows.

Evidence (Before & After)

N/A — unit-tested behavior change; no visual evidence captured.

Tested on

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

Environment (optional)

npm run dev:daemon (web shell), vitest unit tests, tsc --noEmit, ESLint, Prettier.

Risk & Scope

  • Main risk or tradeoff: All web shell users now get the compact view unconditionally; the old non-compact rendering path is no longer reachable from the UI.
  • Not validated / out of scope: daemon-side ui.compactMode registration (intentionally kept, per scope decision); the embedded read-only WebShellTranscript API keeps its explicit non-compact rendering (documented with a comment).
  • Breaking changes / migration notes: none — the setting may remain in user config but is ignored and hidden.

Linked Issues

None.

中文说明

本 PR 内容

移除 web-shell 的紧凑模式开关,将紧凑视图固定为唯一渲染模式。删除了 Ctrl+O 快捷键、ui.compactMode 工作区设置的读写、帮助条目及相关 i18n 文案。紧凑渲染(思考块与工具调用合并为可展开的摘要行)现在通过根部单一 CompactModeContext Provider 对所有消息面固定开启——主聊天、分屏、Subagent 详情面板及其抽屉形态均无条件紧凑渲染。

原因

产品方向是让紧凑视图成为唯一模式;保留开关意味着为已无法关闭的行为维护 UI 表面和持久化代码。daemon 侧设置注册按范围决定保留不动(仅 web-shell),web-shell 在设置面板中继续隐藏该退役设置。

评审验证计划

  1. 运行 npm run dev:daemon 打开 web shell,发送会触发思考与工具调用的提示:它们显示为单个可展开的摘要行(点击展开),而非独立行。
  2. 按 Ctrl+O:页面无反应(无紧凑切换、无 daemon 设置写入)。打开帮助对话框:Ctrl+O 条目已消失。打开设置:无"紧凑模式"项。
  3. 打开 Subagent 详情面板(点击 agent 行)与分屏视图:两者均以相同的紧凑摘要行渲染。

测试环境

macOS ✅ 已测;Windows/Linux 未测。验证包括 vitest 单测、tsc --noEmit、ESLint、Prettier。

风险与范围

  • 主要风险:所有 web shell 用户将无条件获得紧凑视图;旧的完整渲染路径在 UI 上不再可达。
  • 未验证/范围外:daemon 侧 ui.compactMode 注册(按范围决定保留);嵌入式只读 WebShellTranscript API 保留其明确的非紧凑渲染(已加注释说明)。
  • 破坏性变更:无——该设置可能残留在用户配置中,但会被忽略并隐藏。

Remove the ui.compactMode toggle (Ctrl+O shortcut, settings persistence,
help entry, i18n copy) and fix the compact rendering on for every message
surface via a single root CompactModeContext provider — main chat, split
panes, subagent detail panel and the drawer variant. The daemon-side
setting registration stays untouched; the web shell keeps it hidden from
the settings panel.

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

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

Copy link
Copy Markdown
Collaborator

Re-run after the two autofix rounds — the gate holds.

Template looks good ✓

Problem: unchanged from the first pass, and it's a real one — this retires the last standing compact-mode toggle. The TUI already pinned compact output on and repurposed Ctrl+O (the daemon schema comment recorded exactly this end state), so the web shell toggle was UI surface, persistence, and i18n copy for a behavior the product no longer allows to be off. Verifiable state, not theory.

Direction: aligned, on the same precedent as before — the TUI retirement and the author's own compact summaries (#9657). One user-visible consequence still worth stating plainly: the web shell defaulted to non-compact before, so this changes every user's first-load view, not just toggle users'. Claude Code's CHANGELOG has no direct analogue (their Ctrl+O toggles transcript detail); the internal TUI precedent is the operative signal.

Size: 14 files, +164/−251 — mostly deletions. ≈138 production-logic lines (including docs and e2e helpers) vs ≈277 test/spec lines and 2 lines of schema JSON. The only core-infrastructure touch is packages/cli/src/config/settingsSchema.ts — 13 lines of comment/description text, no registration change — well under any threshold.

Approach: scope is right, and the fix rounds landed the earlier feedback: the four nested value={compactMode} providers collapsed into a single root value={true} provider, the stale daemon-schema comment is rewritten, the e2e spec gained a genuinely discriminating merge assertion, and three inline copies of a tool-call event builder became one shared toolCallEvent helper. Nothing reads as drive-by beyond one dropped blank line near availableSkillInfos.

Risk: no high-risk path matches; no elevated risk signals.

Moving on to code review. 🔍

中文说明

两轮 autofix 之后的重跑——门禁结论不变,依然通过。

模板完整 ✓

问题:与首轮一致,且是真实问题——本 PR 退役了最后一个残留的紧凑模式开关。TUI 早已把紧凑输出固定开启并重新利用了 Ctrl+O(daemon schema 注释记录的正是这个终态),因此 web shell 的开关是在为一个产品上已不允许关闭的行为维护 UI 表面、持久化和 i18n 文案。是可验证的状态,不是理论假设。

方向:对齐,依据同先前——TUI 的退役先例与作者本人实现的紧凑摘要(#9657)。仍值得明说的一个用户可见后果:web shell 此前默认非紧凑渲染,所以这改变的是所有用户首次加载看到的视图,而不只是开关用户。Claude Code CHANGELOG 无直接参照(其 Ctrl+O 用于切换详细转录);真正有效的信号是内部 TUI 先例。

规模:14 个文件,+164/−251,以删除为主。生产逻辑约 138 行(含文档与 e2e 辅助代码),测试/规格约 277 行,schema JSON 2 行。唯一触及核心基础设施的是 packages/cli/src/config/settingsSchema.ts——13 行注释/描述文本,注册本身未动——远低于任何阈值。

方案:范围合理,且修复轮已落实先前反馈:四个嵌套的 value={compactMode} Provider 收敛为根部单一的 value={true} Provider;过时的 daemon schema 注释已重写;e2e 规格增加了真正有判别力的合并断言;三处内联的 tool-call 事件构造代码合并为一个共享的 toolCallEvent 辅助函数。除 availableSkillInfos 附近删除的一个空行外,没有顺手改动。

风险:未命中高风险路径;无升级风险信号。

进入代码审查 🔍

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code review (re-run at the new head)

My independent plan for this retirement is the same shape as before — cut the shortcut handler, drop the setting round-trip, pin the context at the root — and the current head lands there cleanly. The diff is almost entirely subtraction, and everything that survives does real work.

Verified against the tree, not assumed:

  • The single root CompactModeContext.Provider value={true} sits inside the portal-root provider and wraps the whole app tree — main chat, split panes, subagent detail, artifact panels and the drawer. The artifact panels render through createPortal, but React context follows tree position rather than DOM position, so they inherit compact true as well. The default false is unreachable inside the app.
  • WebShellTranscript (the embedded read-only API) keeps its explicit value={false} override, now with a comment saying why hosts see the unmerged record. That override is the reason the context plumbing survives at all, and it earns its keep.
  • Dropping ui.compactInline from the hidden-keys set is safe: a repo-wide census finds no registration and no reader of that key anywhere outside the web shell client, so the daemon can never serve a descriptor for it. ui.compactMode stays hidden, matching the stated scope decision, and the new SettingsMessage test pins that it stays out of the panel even when the daemon lists it.
  • Ctrl+O keeps preventDefault() with a comment and a dedicated test — without the suppression the browser's Open File dialog would fire. The replacement test pins both the suppression and that no settings write happens. The keyboard effect's dependency array shrinks with the removed handler.
  • The i18n removal is complete (EN + ZH: help row, toast keys, settings-panel labels) and type-safe — Messages is Record<string, MessageValue>, so dropped keys cannot break the dictionaries. The emitToolUseSummaries ZH description was reworded so it no longer references the retired mode.
  • The packages/cli/src/config/settingsSchema.ts and vscode schema changes are comment/description text only — registration, default, and showInDialog: false untouched — so settings files still carrying the key load without warnings while nothing reads the value. Docs match.

No critical findings. Leftovers, none blocking: one unrelated blank line is still dropped near availableSkillInfos (Prettier-clean, harmless), and verify round 2's observation that the unit gate alone doesn't pin the always-on wiring stands — the new e2e merge assertion is the pin, and it runs in the nightly browser-regression job rather than PR CI.

Testing

Unattended CI run — the evidence below is the PR's own CI read through the API; no PR code was executed in this environment. Every substantive check is green on this head, including Test (ubuntu-latest, Node 22.x), which was the red check on the previous head. The macOS and Windows test jobs were cancelled rather than run (platform routing, consistent with the green Classify platform sensitivity check — no failures).

Check Conclusion
Test (ubuntu-latest, Node 22.x) ✅ success
Capture web-shell visuals (ubuntu-latest, Node 22.x) ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Desktop Shell (windows-2022) ✅ success
Classify PR ✅ success
Classify platform sensitivity ✅ success
Dependency CVE audit ✅ success
Secret scan (TruffleHog) ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success

One row per check name (latest run); skipped/cancelled orchestration jobs omitted. / 每个检查名一行(取最新一次运行),省略 skipped/取消的编排作业。

The behavioral claim no longer rests on the author's word: the second @qwen-code /verify run executed exactly this head in an isolated container and reported merge-ready — A/B against the base build (base arm 10/10: context tracks the setting, Ctrl+O writes ui.compactMode; head arm 10/10: context constant true, Ctrl+O writes nothing and the help entry is gone), 71/71 scripted assertions, flakiness gate clean across 5 rounds, and mutation testing killed both the preventDefault removal and the hidden-key removal. The author's macOS-only testing is now corroborated rather than sole evidence.

中文说明

代码审查(新 head 上的重跑):我为这个退役独立拟的方案与先前一致——删快捷键处理函数、去掉设置读写往返、把 context 在根部固定——当前 head 干净地落在同一形状上。diff 几乎全是减法,留下来的每一处都在承担实际职责。

已对照代码树核实(而非假设):根部单一的 CompactModeContext.Provider value={true} 位于 portal-root Provider 之内、包住整棵应用树——主聊天、分屏、Subagent 详情、Artifact 面板与抽屉。Artifact 面板经 createPortal 渲染,但 React context 跟随组件树位置而非 DOM 位置,因此同样继承紧凑 true;应用内部已读不到默认值 falseWebShellTranscript(嵌入式只读 API)保留显式的 value={false} 覆盖,并新增注释说明宿主为何看到未合并的完整记录——这个覆盖正是 context 管线继续存在的理由,它物有所值。从隐藏集合移除 ui.compactInline 是安全的:全仓普查显示 web shell 客户端之外没有任何注册或读取方,daemon 不可能下发该键的描述符;ui.compactMode 保持隐藏,与范围决定一致,且新的 SettingsMessage 测试钉住了"即便 daemon 列出该键也不出现在面板"。Ctrl+O 保留 preventDefault() 并附注释与专门测试——没有这个抑制,浏览器的打开文件对话框会弹出;替换后的测试同时钉住抑制行为与"不发生设置写入"。键盘事件的依赖数组随处理函数移除而正确收缩。i18n 删除完整(EN + ZH:帮助行、提示键、设置面板标签)且类型安全——MessagesRecord<string, MessageValue>,删除键不会破坏字典;emitToolUseSummaries 的中文描述已改写,不再引用退役的模式。packages/cli/src/config/settingsSchema.ts 与 vscode schema 的改动仅为注释/描述文本——注册、默认值、showInDialog: false 均未动——携带该键的设置文件可无告警加载,同时无人再读取其值;文档与之一致。

无关键问题。遗留项均不阻塞:availableSkillInfos 附近仍有一个无关空行被删除(Prettier 干净、无害);verify 第二轮的观察仍然成立——仅靠单元门禁无法钉住常开接线,真正的钉子是新增的 e2e 合并断言,它运行在 nightly 浏览器回归作业而非 PR CI 中。

测试:无人值守 CI 运行——以下证据来自 PR 自身 CI 的 API 数据,本环境未执行任何 PR 代码。该 head 上所有实质性检查均为绿色,包括上一 head 上失败的 Test (ubuntu-latest, Node 22.x);macOS 与 Windows 测试作业为取消而非运行(平台路由,与绿色的 Classify platform sensitivity 一致——无失败项)。

行为结论不再依赖作者自述:第二次 @qwen-code /verify 在隔离容器中执行了与本次审查完全相同的 head,判定可合入——与 base 构建 A/B 对照(base 臂 10/10:context 随设置变化、Ctrl+O 写入 ui.compactMode;head 臂 10/10:context 恒为 true、Ctrl+O 零写入、帮助条目消失),71/71 脚本化断言,抖动门 5 轮无分歧,突变测试分别杀死了 preventDefault 移除与隐藏键移除。作者"仅在 macOS 测试"的陈述现在有了旁证,不再是唯一证据。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Confidence: 4/5 — clean retirement, now fully evidenced; only cosmetic leftovers remain, none worth holding the merge for.

Stepping back: the first pass approved of the shape but deferred on evidence, and the gap is closed. CI is green on this exact head — including the Ubuntu unit suite that was red before the fix rounds — and the second @qwen-code /verify run executed this exact commit in an isolated container with the base build as control: the toggle genuinely no longer exists (no settings write, no help row, context pinned on), the embedded transcript API genuinely keeps its unmerged view, and the mutation matrix confirms the new tests bite. A maintainer has already approved this head; my independent proposal for the same goal lands on the same shape the PR ships, so there is no simpler path I'm aware of going unspoken.

What keeps this at 4 rather than 5 is residue, none of it code-level risk: the stray blank line near availableSkillInfos is still gone, the docs wording around "no startup warning" for the removed ui.compactInline key is true but slightly over-explained, and the always-on wiring is pinned by the e2e merge assertion (nightly) rather than the PR-time unit gate — worth knowing for the follow-up that eventually drops the retired schema slot entirely.

Approving, pinned to the reviewed commit.

中文说明

回顾整体:首轮认可了方案形状、但因证据不足暂缓,现在缺口已补上。CI 在该 head 上全绿——包括修复轮之前失败的 Ubuntu 单测套件——第二次 @qwen-code /verify 在隔离容器中以 base 构建为对照执行了与审查完全相同的提交:开关确实不复存在(无设置写入、无帮助条目、context 固定开启),嵌入式转录 API 确实保留了未合并视图,突变矩阵确认新测试具有杀伤力。维护者已批准该 head;我为同一目标独立拟的方案与 PR 交付的形状一致,因此没有更简路径被遗漏。

给 4 分而不是 5 分是残留物所致,均非代码层面风险:availableSkillInfos 附近那个无关空行仍被删除;文档对已移除的 ui.compactInline 键"无启动告警"的措辞为真但略显过度解释;常开接线由 e2e 合并断言(nightly)而非 PR 时的单元门禁钉住——这一点在最终删除退役 schema 位置的后续跟进中值得记住。

批准已发出,钉住所审查的提交。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

🖼️ web-shell visual preview

Rendered against a mock daemon (no real backend): the PR base vs this PR head 0e6b76a. Only screenshots that changed are shown (flows below, if any, are head-only) — refreshes on every push.

Screenshots · before / after

⚠️ No preview: one or more scenarios failed to render on this head — see the workflow run. This is not "no visual change" — a scenario that times out or throws produces no image. Fix the failing scenario (or a genuine regression it caught) and the preview returns on the next push.

Full-resolution recordings (.webm) are attached to the workflow run.

Qwen Code · web-shell visuals

@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 85.41% 85.41% 90.85% 84.42%
Core 88.59% 88.59% 90.31% 87.04%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   85.41 |    84.42 |   90.85 |   85.41 |                   
 src               |   85.82 |    81.89 |   88.03 |   85.82 |                   
  cli.ts           |   95.68 |    84.11 |     100 |   95.68 | ...60-561,565-566 
  gemini.tsx       |   73.34 |    78.04 |   80.76 |   73.34 | ...1336-1340,1467 
  ...ractiveCli.ts |   88.26 |    82.64 |   88.88 |   88.26 | ...3135,3141,3207 
  ...liCommands.ts |   88.93 |    83.21 |      80 |   88.93 | ...97-599,615,721 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   73.61 |    76.47 |   93.19 |   73.61 |                   
  acpAgent.ts      |    72.5 |     76.2 |    92.3 |    72.5 | ...74,12385,12431 
  ...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 |     91.3 |     100 |     100 | 73,124            
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
  ...ersistence.ts |   94.95 |    92.24 |     100 |   94.95 | ...13-118,227-228 
  ...management.ts |   74.75 |     66.3 |     100 |   74.75 | ...92-496,505-509 
  ...e-download.ts |    64.7 |    62.24 |    87.5 |    64.7 | ...08-609,615-619 
 ...tegration/live |    97.5 |       88 |   92.85 |    97.5 |                   
  ...en-context.ts |   95.74 |    82.35 |     100 |   95.74 | ...0,66-67,99-100 
  ...structions.ts |     100 |      100 |     100 |     100 |                   
  ...ak-to-user.ts |   96.66 |      100 |    87.5 |   96.66 | 37-38             
  ...task-tools.ts |   98.97 |      100 |   88.88 |   98.97 | 201-202           
 ...ration/service |    97.1 |    95.89 |   93.75 |    97.1 |                   
  filesystem.ts    |    97.1 |    95.89 |   93.75 |    97.1 | ...22-123,246-247 
 ...ration/session |   91.05 |    86.62 |   95.76 |   91.05 |                   
  Session.ts       |   90.39 |    85.36 |   95.14 |   90.39 | ...60,12687-12691 
  ...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.19 |    86.53 |     100 |   94.19 | ...53,357,437,441 
  ...y-replayer.ts |   83.41 |    93.33 |   94.11 |   83.41 | ...30-148,266-268 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.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.65 |    92.34 |   97.14 |   95.65 |                   
  ...ageEmitter.ts |   95.36 |    92.42 |     100 |   95.36 | ...16,129-130,223 
  PlanEmitter.ts   |     100 |       90 |     100 |     100 | 66                
  base-emitter.ts  |   78.26 |    77.77 |     100 |   78.26 | 23-24,26-28       
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   98.57 |    94.84 |     100 |   98.57 | 75-76,394-395     
 ...ession/rewrite |   96.03 |    89.79 |   94.44 |   96.03 |                   
  LlmRewriter.ts   |   94.01 |    88.23 |     100 |   94.01 | 101-102,179-183   
  ...Middleware.ts |   96.99 |    88.37 |     100 |   96.99 | 145,153-155       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/agent-view    |   86.63 |     80.8 |   94.01 |   86.63 |                   
  attach-lease.ts  |     100 |    97.05 |     100 |     100 | 173               
  ...t-cli-argv.ts |     100 |     92.3 |     100 |     100 | 15                
  ...ged-detach.ts |     100 |     90.9 |     100 |     100 | 40,64             
  presentation.ts  |   94.13 |    88.72 |   94.73 |   94.13 | ...57-358,382-384 
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  pty-host-env.ts  |     100 |      100 |     100 |     100 |                   
  ...st-process.ts |   88.43 |    78.79 |   94.44 |   88.43 | ...1294,1384-1386 
  pty-host.ts      |   85.25 |    87.03 |   90.69 |   85.25 | ...22-524,539-540 
  ...sor-client.ts |   80.38 |    72.81 |   77.41 |   80.38 | ...22-626,652-656 
  ...r-dispatch.ts |      98 |    85.18 |     100 |      98 | 117,173,190       
  ...or-process.ts |    83.5 |     77.3 |   98.72 |    83.5 | ...4479-4482,4485 
  ...sor-runner.ts |   82.43 |    76.82 |   80.95 |   82.43 | ...69,493,496-506 
  ...sor-server.ts |   84.39 |    83.56 |    93.1 |   84.39 | ...67-568,571-588 
  ...isor-store.ts |   94.76 |    84.95 |     100 |   94.76 | ...,966,1008,1023 
  ...nal-bridge.ts |   93.98 |    91.54 |   83.33 |   93.98 | 228-238           
  ...r-sideband.ts |   94.91 |    89.36 |     100 |   94.91 | ...75-276,299-304 
 src/commands      |   90.66 |    78.53 |   65.62 |   90.66 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   55.55 |      100 |       0 |   55.55 | 18-22,30-40       
  extensions.tsx   |   96.77 |      100 |      50 |   96.77 | 39                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   95.45 |      100 |      50 |   95.45 | 31                
  review.ts        |   98.85 |      100 |      50 |   98.85 | 98                
  serve.ts         |   89.46 |    76.02 |     100 |   89.46 | ...12-915,927,938 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   89.07 |    88.56 |   90.64 |   89.07 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |    94.9 |    95.45 |      90 |    94.9 | ...21-324,369-372 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   95.83 |    96.35 |     100 |   95.83 | ...03-208,266-269 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.91 |    85.61 |   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.25 |    84.61 |   83.33 |   90.25 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |    92.9 |    84.84 |      80 |    92.9 | ...79-181,199-200 
  reconnect.ts     |   78.85 |    66.66 |   85.71 |   78.85 | 42-55,169-191     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   91.62 |    90.07 |   93.01 |   91.62 |                   
  agent-prompt.ts  |   94.89 |    92.99 |   97.95 |   94.89 | ...3286,3621-3701 
  base-tree.ts     |   77.02 |    80.76 |   77.77 |   77.02 | ...63-384,386-399 
  capture-local.ts |   73.58 |     90.9 |      75 |   73.58 | 112-116,163-186   
  ...k-coverage.ts |   50.71 |       35 |   66.66 |   50.71 | ...40-245,279-289 
  cleanup.ts       |   92.18 |    89.69 |    90.9 |   92.18 | ...1061,1063-1064 
  comment-body.ts  |   67.85 |    87.09 |   66.66 |   67.85 | ...30,157,159-164 
  ...ent-status.ts |   94.22 |    87.32 |    90.9 |   94.22 | ...96,462,738-758 
  ...ose-review.ts |   97.06 |    93.57 |   98.52 |   97.06 | ...5745-5789,6064 
  cost-ledger.ts   |   94.58 |     94.4 |   81.25 |   94.58 | ...53-654,694-704 
  drive.ts         |    94.1 |    92.85 |   92.85 |    94.1 | ...80-782,787-789 
  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.29 |    92.25 |     100 |   97.29 | ...1566,1724-1729 
  findings.ts      |   96.07 |    92.17 |     100 |   96.07 | ...1271,1280-1281 
  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.42 |    96.03 |     100 |   99.42 | 657,970,1026,1062 
  plan-diff.ts     |   71.42 |      100 |   66.66 |   71.42 | 162-197           
  pr-context.ts    |   96.07 |    87.76 |     100 |   96.07 | ...2256,2356-2372 
  presubmit.ts     |   94.32 |    90.83 |   94.11 |   94.32 | ...1214,1249-1280 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...75-479,506-552 
  ...r-findings.ts |   90.74 |    83.75 |     100 |   90.74 | ...17-422,429-430 
  repo-context.ts  |   94.62 |    90.75 |     100 |   94.62 | ...66-467,482-487 
  ...ve-anchors.ts |   78.34 |    89.28 |      75 |   78.34 | ...83-188,200-217 
  run.ts           |   82.66 |    88.54 |   94.11 |   82.66 | ...22,638-692,706 
  save-artifact.ts |    94.2 |    92.46 |   94.11 |    94.2 | ...14-617,710-713 
  scratch-tree.ts  |   95.93 |       86 |     100 |   95.93 | ...91-392,461-464 
  script-lint.ts   |   81.27 |    79.38 |   88.88 |   81.27 | ...69-783,785-807 
  submit.ts        |   94.13 |    89.45 |   94.44 |   94.13 | ...1695,1723-1760 
  test-delta.ts    |   95.75 |     92.3 |      75 |   95.75 | 470-478           
  test-efficacy.ts |   84.03 |    80.48 |   96.07 |   84.03 | ...3249,3257-3277 
  test-plan.ts     |   94.61 |    91.79 |      95 |   94.61 | ...29-832,873-874 
 ...w/__fixtures__ |     100 |      100 |     100 |     100 |                   
  ...r-default.mjs |     100 |      100 |     100 |     100 |                   
  ...der-empty.mjs |     100 |      100 |     100 |     100 |                   
  ...der-named.mjs |     100 |      100 |     100 |     100 |                   
 ...nds/review/lib |   97.35 |    94.73 |   98.61 |   97.35 |                   
  agent-briefs.ts  |   99.08 |      100 |      50 |   99.08 | 824-825           
  ...t-identity.ts |     100 |      100 |     100 |     100 |                   
  anchors.ts       |     100 |    97.04 |     100 |     100 | ...39,175,184,231 
  assets.ts        |     100 |      100 |     100 |     100 |                   
  audit-layers.ts  |   98.67 |    96.15 |     100 |   98.67 | 288-290           
  authorization.ts |    96.5 |    95.61 |     100 |    96.5 | ...54-255,629-630 
  budget.ts        |     100 |    97.95 |     100 |     100 | 887,940           
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  certification.ts |     100 |      100 |     100 |     100 |                   
  convergence.ts   |   99.47 |     97.2 |    90.9 |   99.47 | 602,820           
  coverage.ts      |   98.97 |    95.11 |     100 |   98.97 | ...1103,1648-1649 
  deadline.ts      |   98.03 |    91.66 |     100 |   98.03 | ...20,752,820,837 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   98.77 |    93.26 |     100 |   98.77 | ...78,301,327-328 
  disk.ts          |     100 |      100 |     100 |     100 |                   
  effort.ts        |     100 |      100 |     100 |     100 |                   
  failing-files.ts |     100 |    93.33 |     100 |     100 | 41                
  gh.ts            |   89.53 |    95.52 |   78.94 |   89.53 | ...47,384-385,412 
  git.ts           |   96.77 |    93.93 |     100 |   96.77 | 234-235,272-273   
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  import-graph.ts  |   96.68 |     95.4 |     100 |   96.68 | 180-182,211-212   
  ...ntal-scope.ts |     100 |      100 |     100 |     100 |                   
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  ...audit-gate.ts |     100 |     97.5 |     100 |     100 | 135               
  ledger.ts        |     100 |      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 
  md-field.ts      |     100 |      100 |     100 |     100 |                   
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  narrow-diff.ts   |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.23 |    95.29 |     100 |   98.23 | ...,822,1203,1220 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   96.96 |       95 |     100 |   96.96 | 32-33             
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   98.03 |    94.73 |     100 |   98.03 | 109-110           
  report.ts        |   92.92 |    86.66 |     100 |   92.92 | 213-214,216-220   
  ...ry-context.ts |     100 |    98.66 |     100 |     100 | 187               
  resume.ts        |     100 |      100 |     100 |     100 |                   
  retirement.ts    |     100 |    94.36 |     100 |     100 | ...58-559,760,917 
  review-footer.ts |   99.55 |     98.1 |     100 |   99.55 | 548-549           
  ...w-settings.ts |     100 |    96.42 |     100 |     100 | 99                
  roster.ts        |     100 |    97.14 |     100 |     100 | 177,222           
  round-model.ts   |     100 |      100 |     100 |     100 |                   
  run-ledger.ts    |    98.2 |    93.87 |     100 |    98.2 | ...23,541,647,670 
  same-file.ts     |     100 |       95 |     100 |     100 | 36                
  ...boxed-exec.ts |   94.26 |    89.32 |   95.65 |   94.26 | ...49-550,728-729 
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.18 |    94.04 |     100 |   98.18 | 431,472,512-513   
  test-utils.ts    |   99.04 |    91.66 |     100 |   99.04 | 75                
  toolchain.ts     |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   98.09 |    95.07 |     100 |   98.09 | ...92,438,707-708 
  ...pace-scope.ts |     100 |    96.96 |     100 |     100 | 186               
  workspaces.ts    |     100 |    96.85 |     100 |     100 | 222,452,499,512   
  ...ree-reader.ts |     100 |      100 |     100 |     100 |                   
  worktree.ts      |   89.39 |    81.78 |     100 |   89.39 | ...1813-1814,1827 
 ...w/lib/platform |   94.71 |    87.89 |   97.05 |   94.71 |                   
  aone-client.ts   |   94.94 |     87.3 |     100 |   94.94 | ...92-293,299-302 
  aone.ts          |   93.06 |    89.86 |   94.73 |   93.06 | ...34,598-603,655 
  github.ts        |   99.08 |     75.8 |     100 |   99.08 | 249-250           
  registry.ts      |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mands/sessions |   94.11 |    89.06 |   89.47 |   94.11 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
  ps.ts            |     100 |    94.44 |     100 |     100 | 58                
 src/config        |   94.24 |    90.33 |   95.02 |   94.24 |                   
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.36 |    88.37 |     100 |   93.36 | ...06-307,330-331 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   89.54 |    90.29 |   83.78 |   89.54 | ...2497,2499-2507 
  ...cy-monitor.ts |      90 |    77.27 |     100 |      90 | ...72-73,90-92,98 
  ...ust-policy.ts |   83.02 |    88.88 |     100 |   83.02 | ...02-209,232-240 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  environment.ts   |   94.51 |    92.55 |   95.23 |   94.51 | ...24-625,679-680 
  ...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  |   78.57 |       92 |   86.66 |   78.57 | ...18-319,324-326 
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      95 |    94.73 |     100 |      95 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |     100 |      100 |     100 |     100 |                   
  ...n-settings.ts |   99.15 |    93.93 |     100 |   99.15 | 63                
  sandboxConfig.ts |   93.33 |    93.33 |     100 |   93.33 | ...42-147,216-217 
  session-id.ts    |     100 |      100 |     100 |     100 |                   
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |   91.16 |    92.89 |      90 |   91.16 | ...1027,1029-1030 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  settingsUtils.ts |   80.82 |     89.2 |   85.18 |   80.82 | ...85-603,610-618 
  ...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.54 |     100 |   92.53 | ...36-337,373-384 
 ...nfig/migration |   95.23 |    78.94 |   85.71 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |       80 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   75.08 |    67.64 |   71.42 |   75.08 |                   
  ...tputBridge.ts |   75.33 |    68.18 |   73.68 |   75.33 | ...09-410,418-421 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/hooks         |     100 |      100 |     100 |     100 |                   
  ...elete-hook.ts |     100 |      100 |     100 |     100 |                   
 src/i18n          |   89.68 |    88.66 |   93.02 |   89.68 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   87.37 |    83.73 |   89.32 |   87.37 |                   
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   94.95 |    91.05 |     100 |   94.95 | ...30-431,529,542 
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...33-634,637-638 
 ...active/control |   75.54 |    89.83 |      80 |   75.54 |                   
  ...rolContext.ts |    6.06 |        0 |       0 |    6.06 | 57-99             
  ...Dispatcher.ts |   91.95 |    92.98 |   88.88 |   91.95 | ...54-372,392,395 
  ...rolService.ts |    6.89 |        0 |       0 |    6.89 | 46-188            
 ...ol/controllers |   57.47 |     66.3 |   73.68 |   57.47 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   70.04 |    62.92 |   91.66 |   70.04 | ...11-620,635-640 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   53.96 |    67.08 |   66.66 |   53.96 | ...78-690,699-728 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.18 |    94.09 |   95.34 |   98.18 |                   
  ...putAdapter.ts |   98.07 |    93.18 |   98.11 |   98.07 | ...1448,1464-1465 
  ...putAdapter.ts |   96.22 |    91.66 |   85.71 |   96.22 | 52-53             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.51 |      100 |   90.47 |   98.51 | 90-91,131-132     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/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.69 |    96.28 |     100 |   99.69 |                   
  ...livery-ipc.ts |     100 |    91.17 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  cpu-percent.ts   |     100 |      100 |     100 |     100 |                   
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
  ...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         |   87.38 |    84.77 |   90.83 |   87.38 |                   
  ...extra-args.ts |     100 |      100 |     100 |     100 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.99 |     91.5 |     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.98 |     100 |    94.1 | ...75-477,484,486 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   89.64 |    94.16 |   96.55 |   89.64 | ...57-269,521-524 
  ...ebhook-ipc.ts |    98.5 |     87.5 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.27 |     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 |   93.87 |    89.81 |     100 |   93.87 | ...3227,3297-3301 
  daemon-logger.ts |   82.82 |    78.68 |   92.04 |   82.82 | ...1775,1802-1808 
  ...y-pressure.ts |     100 |    96.96 |     100 |     100 | 135               
  ...trics-ring.ts |     100 |      100 |     100 |     100 |                   
  ...s-provider.ts |   68.04 |    52.77 |     100 |   68.04 | ...44-249,282-290 
  daemon-status.ts |   98.69 |    91.96 |     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.45 |     100 |   94.94 | ...30,708,724,734 
  fast-path.ts     |   91.38 |       82 |   95.45 |   91.38 | ...46-555,633-634 
  ...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 |   91.58 |    86.48 |     100 |   91.58 | ...44-145,156-157 
  ...pp-sandbox.ts |   96.72 |    95.23 |     100 |   96.72 | 41-42             
  ...iders-edit.ts |     100 |    82.14 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |     100 |    86.95 |     100 |     100 | 36,66,92          
  ...-with-auth.ts |     100 |      100 |     100 |     100 |                   
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  ...nal-ledger.ts |    94.9 |    84.78 |     100 |    94.9 | ...81,302,361-362 
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   84.04 |    80.69 |   76.06 |   84.04 | ...7995,8013-8017 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   45.52 |    59.42 |   76.92 |   45.52 | ...1050,1062-1085 
  ...-keepalive.ts |   94.31 |    88.28 |     100 |   94.31 | ...37,541-542,581 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  serve-token.ts   |     100 |      100 |     100 |     100 |                   
  server.ts        |   91.16 |    90.45 |   71.42 |   91.16 | ...3012,3042-3043 
  ...-admission.ts |   99.13 |    95.94 |     100 |   99.13 | 308-309           
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...-redaction.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    95.23 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |   93.72 |    77.93 |     100 |   93.72 | ...51,854,867-869 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   93.45 |    86.88 |     100 |   93.45 | ...77-280,323-326 
  ...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.6 |     79.8 |     100 |    98.6 | 108,136,179,182   
  ...tion-store.ts |   89.67 |    88.27 |   92.59 |   89.67 | ...91-400,411-414 
  ...e-registry.ts |   94.98 |    90.55 |     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.88 |     90.9 |     100 |   89.88 | ...05-206,274-295 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.63 |    72.83 |   96.15 |   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 |    80.4 |    80.15 |   94.53 |    80.4 |                   
  ...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      |   75.65 |     77.1 |   93.44 |   75.65 | ...5536,5593-5599 
  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.75 |     100 |   98.26 | 87-88,117         
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   94.06 |    89.09 |     100 |   94.06 | 50,55,134,138-141 
 src/serve/auth    |   86.86 |     79.7 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |    80.57 |   97.61 |   96.35 | ...1358,1453,1519 
  ...w-provider.ts |   44.24 |    74.07 |   71.42 |   44.24 | ...23-284,297,301 
 ...rve/cdp-tunnel |   87.73 |    76.21 |    97.5 |   87.73 |                   
  ...r-emulator.ts |   93.27 |    77.77 |     100 |   93.27 | ...53-256,282-283 
  ...verse-link.ts |      88 |    76.19 |     100 |      88 | ...28-329,420-423 
  ...l-registry.ts |     100 |      100 |     100 |     100 |                   
  cdp-ws.ts        |   76.28 |    61.29 |    87.5 |   76.28 | ...13-217,223-228 
 ...nel/acceptance |    6.12 |    57.89 |   46.15 |    6.12 |                   
  ...helpers.d.mts |       0 |        0 |       0 |       0 | 1                 
  ...e-helpers.mjs |   97.64 |    70.96 |     100 |   97.64 | 22-23             
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-124             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  ...re-server.mjs |       0 |        0 |       0 |       0 | 1-59              
  ...ols-smoke.mjs |       0 |        0 |       0 |       0 | 1-268             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
  ...al-chrome.mjs |       0 |        0 |       0 |       0 | 1-223             
 .../conversations |   90.17 |    85.27 |      95 |   90.17 |                   
  ...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.58 |   88.46 |   87.33 | ...57-558,601-602 
  ...-workspace.ts |   89.09 |    78.66 |     100 |   89.09 | ...91-292,339-340 
 src/serve/fs      |   87.77 |    82.34 |     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.85 |     100 |   88.02 | ...3027,3037-3038 
 src/serve/live    |   77.23 |     70.5 |   90.46 |   77.23 |                   
  discovery.ts     |   85.89 |    82.05 |    91.3 |   85.89 | ...73-579,592-593 
  ...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.7 |    67.47 |   85.71 |    76.7 | ...1885,1976-1977 
  ...controller.ts |   67.82 |    79.66 |      75 |   67.82 | ...66-278,287-295 
  ...sk-service.ts |   87.45 |    65.93 |   95.65 |   87.45 | ...1186-1187,1215 
  ...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 |    88.77 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |    82.75 |   42.85 |   43.58 | ...09-117,130-142 
  ...r-identity.ts |     100 |    85.71 |     100 |     100 | 61                
  service.ts       |    93.4 |       90 |     100 |    93.4 | ...20-222,313-315 
 src/serve/routes  |   86.06 |    81.18 |   95.24 |   86.06 |                   
  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.94 |    91.17 |     100 |   98.94 | 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.94 |    85.26 |   93.75 |   87.94 | ...1539,1584-1585 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |   87.03 |    82.88 |   93.57 |   87.03 | ...6865,6867-6868 
  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.04 |     66.4 |     100 |   75.04 | ...99-604,613-620 
  ...e-git-diff.ts |   97.19 |    89.58 |     100 |   97.19 | 157-158,185-187   
  ...ce-git-log.ts |     100 |       95 |     100 |     100 | 48,73             
  workspace-git.ts |   74.71 |     87.5 |     100 |   74.71 | 83-104            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...al-control.ts |   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.67 |       75 |     100 |   75.67 | ...15-726,732-733 
  ...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.57 |    74.48 |     100 |   82.57 | ...71-473,477-478 
  ...pace-tools.ts |   75.94 |    69.69 |   66.66 |   75.94 | ...59-164,193-194 
  ...pace-trust.ts |   76.92 |     67.1 |      80 |   76.92 | ...38-343,351-352 
  ...pace-voice.ts |   91.33 |    81.02 |     100 |   91.33 | ...70-673,676-678 
 src/serve/server  |   92.66 |    90.29 |   97.22 |   92.66 |                   
  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.87 |       80 |     100 |   97.87 | 27                
  ...r-response.ts |   87.73 |    76.19 |     100 |   87.73 | ...97,814,877-886 
  fs-factory.ts    |     100 |    95.52 |     100 |     100 | 77,144,200        
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...list-cache.ts |   99.01 |    95.52 |     100 |   99.01 | 184-185           
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |       80 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.13 |    95.09 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |      95 |     87.5 |     100 |      95 | 182-188           
  ...on-archive.ts |   91.14 |    89.34 |   97.56 |   91.14 | ...1090,1153-1154 
  ...ion-export.ts |     100 |       95 |     100 |     100 | 64                
  session-list.ts  |      97 |    93.45 |     100 |      97 | ...1068,1273-1277 
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.06 |    97.26 |     100 |   99.06 | ...04,873,952-954 
 src/serve/voice   |    92.7 |    91.53 |   97.72 |    92.7 |                   
  ...ice-config.ts |   84.81 |       30 |     100 |   84.81 | 91-100,104-105    
  voice-ws.ts      |   91.58 |    93.44 |      96 |   91.58 | ...68,483,521-523 
  ...oordinator.ts |     100 |    98.24 |     100 |     100 | 176               
 ...kspace-service |    90.9 |    88.03 |   91.66 |    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.67 |   98.13 |   92.69 |                   
  ...mandLoader.ts |     100 |       95 |     100 |     100 | 106               
  ...killLoader.ts |   97.19 |    85.71 |     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.42 |   85.71 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.77 |     92.3 |     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.29 |     100 |     100 | 88                
  setup-github.ts  |    90.8 |    80.95 |     100 |    90.8 | ...49-450,457-458 
  ...-args-file.ts |   93.93 |    91.66 |    87.5 |   93.93 | 208-210,224-230   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.77 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |    90.4 |    87.87 |     100 |    90.4 | ...81,288,353-358 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   91.77 |    87.11 |   97.22 |   91.77 | ...96-898,901-903 
 ...s/housekeeping |      93 |    88.34 |      95 |      93 |                   
  scheduler.ts     |      93 |    88.34 |      95 |      93 | ...57-359,411-415 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.94 |    86.86 |   96.29 |   88.94 |                   
  DataProcessor.ts |   88.31 |    86.84 |      95 |   88.31 | ...1368,1372-1379 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.25 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |       85 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.83 |     100 |   97.41 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.27 |    84.61 |     100 |   97.27 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   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.6 |    76.66 |      80 |    94.6 |                   
  ci-env.ts        |      88 |     62.5 |     100 |      88 | 22-23,28          
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...mised-lock.ts |     100 |      100 |   66.66 |     100 |                   
  ...lot-client.ts |     100 |    66.66 |     100 |     100 | 31,39             
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   70.85 |    77.49 |   72.04 |   70.85 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   76.09 |       72 |   69.44 |   76.09 | ...4301,4417-4423 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |    30.3 |      100 |       0 |    30.3 | 26-76             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...AutoUpdate.ts |   93.54 |    94.64 |      90 |   93.54 | 126,131,202-213   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...ractiveUI.tsx |   71.53 |    75.47 |    62.5 |   71.53 | ...11,338,405-410 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  systemInfo.ts    |   95.09 |    90.27 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
 src/ui/auth       |   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.24 |    84.25 |   91.33 |   84.24 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...or-command.ts |     100 |    95.65 |     100 |     100 | 104,182           
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |    93.1 |    95.23 |     100 |    93.1 | 77-82             
  arenaCommand.ts  |   63.89 |    65.71 |   65.21 |   63.89 | ...01-606,691-699 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    77.41 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 28,62             
  cdCommand.ts     |    92.3 |    82.75 |     100 |    92.3 | ...,94-99,178,187 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...28-129,137-146 
  commands.ts      |   97.45 |    96.66 |     100 |   97.45 | 153-155           
  ...essCommand.ts |   80.71 |     64.7 |     100 |   80.71 | ...05-206,220-223 
  ...astCommand.ts |   84.75 |    76.47 |     100 |   84.75 | ...96-102,130-135 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   74.79 |    74.39 |   84.61 |   74.79 | ...89-622,633-634 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   90.56 |    87.83 |    90.9 |   90.56 | ...75-280,327-334 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 26                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  doctorCommand.ts |   70.16 |    84.61 |      95 |   70.16 | ...29-679,682-816 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   80.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.25 |    65.71 |   85.71 |   81.25 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |   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,102-103        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   86.01 |    85.76 |     100 |   86.01 | ...1093,1127-1132 
  ...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.33 |    72.13 |     100 |   77.33 | ...46-150,173-178 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...te-command.ts |     100 |    94.11 |     100 |     100 | 74,148            
  vimCommand.ts    |     100 |      100 |     100 |     100 |                   
  voice-command.ts |   93.63 |       88 |     100 |   93.63 | 36,98-103         
  ...owsCommand.ts |   94.38 |    85.29 |     100 |   94.38 | ...78-183,282-287 
 src/ui/components |   73.25 |    80.19 |    77.7 |   73.25 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   95.65 |    66.66 |     100 |   95.65 | 27,52             
  ...TextInput.tsx |   89.06 |    90.78 |     100 |   89.06 | ...87-289,303-305 
  Composer.tsx     |   94.54 |    66.66 |     100 |   94.54 | ...-76,88,143,158 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  CronPill.tsx     |     100 |    93.75 |     100 |     100 | 19                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.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          
  ...gsDisplay.tsx |     100 |    96.87 |   83.33 |     100 | 69                
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  ...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  |   86.26 |     83.3 |      80 |   86.26 | ...2231,2252,2348 
  ...Shortcuts.tsx |     100 |       88 |     100 |     100 | 98,119            
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.88 |    96.03 |   46.15 |   95.88 | ...20,523-527,530 
  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.17 |     100 |   85.22 | ...1042,1098,1100 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...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.55 |    73.89 |   69.23 |   71.55 | ...1252,1258-1259 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      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-171             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.9 |    86.88 |     100 |    93.9 | ...20,282,302-304 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   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.86 |     85.1 |   92.98 |   85.86 |                   
  ...sksDialog.tsx |   82.66 |    83.09 |   85.71 |   82.66 | ...1854,1977-1983 
  ...TasksPill.tsx |   78.84 |    94.28 |     100 |   78.84 | 64,109-129        
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 258               
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.32 |    76.78 |   83.33 |   84.32 |                   
  ...gerDialog.tsx |   82.15 |    76.08 |     100 |   82.15 | ...91-198,258,260 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.26 |       85 |   58.82 |   46.26 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.26 |    88.37 |   66.66 |   75.26 | ...53,174,203-209 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   71.92 |    68.21 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.44 |   83.33 |   75.49 | ...77,782-783,820 
  SourcesTab.tsx   |   71.67 |    70.47 |   77.77 |   71.67 | ...28,547,621-633 
 ...tensions/views |    50.7 |    52.38 |   20.83 |    50.7 |                   
  ...tionsView.tsx |   73.75 |    56.36 |   66.66 |   73.75 | ...30,353,369-374 
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...98-405,408-420 
  ...etailView.tsx |    9.24 |      100 |       0 |    9.24 | 40-67,70-163      
 ...mponents/hooks |   87.11 |    81.37 |   91.89 |   87.11 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   40.91 |    63.44 |   70.58 |   40.91 |                   
  ...ealthPill.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   32.09 |    26.19 |      40 |   32.09 | ...12,914,927-933 
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   53.94 |    73.51 |   57.14 |   53.94 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   62.83 |       60 |   33.33 |   62.83 | ...87-296,307-332 
  ...rListStep.tsx |   88.53 |    81.25 |     100 |   88.53 | ...64,170,175-180 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   90.57 |    87.45 |   85.84 |   90.57 |                   
  ...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 |   93.24 |       85 |     100 |   93.24 | 73-75,77,79       
  ...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.51 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |   93.96 |    88.66 |   93.75 |   93.96 | ...1070,1115-1117 
 ...ponents/shared |   86.52 |    82.35 |   86.72 |   86.52 |                   
  ...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 |    86.95 |      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 |   90.37 |    82.85 |   18.18 |   90.37 | ...60-63,65,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.54 |   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 |    79.56 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 237-238           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   89.51 |    76.92 |   95.65 |   89.51 |                   
  ...ui-adapter.ts |   89.51 |    76.92 |   95.65 |   89.51 | ...59,877-878,964 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   86.03 |     84.2 |   87.85 |   86.03 |                   
  ...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.41 |    82.08 |   66.66 |   92.41 | ...12,514-515,670 
  ...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 |   96.03 |    88.75 |     100 |   96.03 | ...04-205,362-365 
  ...ompletion.tsx |   97.09 |    87.23 |     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.42 |    84.33 |   78.72 |   87.42 | ...5827-5829,5831 
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.44 |     98.9 |     100 |   98.44 | 157-160           
  ...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 |   96.51 |    90.19 |     100 |   96.51 | 279,306-311       
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.19 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.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.79 |    85.33 |   94.73 |   82.79 | ...86-688,696-732 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.32 |    93.93 |     100 |   97.32 | ...18-422,518-525 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...mInProcess.ts |   27.35 |       80 |      25 |   27.35 | ...82-183,186-188 
  ...tification.ts |     100 |     87.5 |     100 |     100 | 50                
  ...alProgress.ts |   67.34 |    58.82 |   66.66 |   67.34 | 52-53,61-68,79-85 
  ...rminalSize.ts |     100 |      100 |     100 |     100 |                   
  ...emeCommand.ts |    79.2 |    35.29 |     100 |    79.2 | ...15-116,120-121 
  useTimer.ts      |   97.59 |    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.19 |     100 |   93.56 |                   
  screen-buffer.ts |   94.73 |    66.66 |     100 |   94.73 | 51-52             
  ...ion-coords.ts |     100 |      100 |     100 |     100 |                   
  ...ction-span.ts |   93.81 |     92.1 |     100 |   93.81 | ...1,45-46,99-100 
  ...tion-state.ts |     100 |      100 |     100 |     100 |                   
  ...ction-text.ts |   93.85 |    93.44 |     100 |   93.85 | 30-34,130-131     
  ...selection.tsx |   91.88 |    78.57 |     100 |   91.88 | ...16-417,446-447 
 src/ui/state      |      95 |    81.81 |     100 |      95 |                   
  extensions.ts    |      95 |    81.81 |     100 |      95 | 69-70,89          
 src/ui/themes     |    98.5 |    73.17 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.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.95 |    86.03 |   96.09 |   87.95 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   80.07 |     75.6 |     100 |   80.07 | ...70,274,332-333 
  ...wnDisplay.tsx |   92.87 |     93.5 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   93.63 |    81.77 |   95.23 |   93.63 | ...47-750,803-808 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |    96.7 |     87.5 |     100 |    96.7 | 170-177,278       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |    52.9 |    74.15 |    92.3 |    52.9 | ...29,632-641,644 
  commandUtils.ts  |   98.61 |    93.27 |     100 |   98.61 | 189,217-218,424   
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  ...coalescing.ts |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   94.87 |    98.21 |     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.1 |     100 |   96.07 | 104-107           
  ...mage-parts.ts |   97.75 |       95 |     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 |   84.37 |    81.09 |     100 |   84.37 | ...03-625,759-760 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |   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.73 |     100 |     100 | 35,78             
  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  |   95.74 |    92.06 |     100 |   95.74 | ...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.24 |    79.78 |   81.69 |   81.24 |                   
  ...d-recorder.ts |     6.2 |      100 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |   84.61 |    93.33 |   57.14 |   84.61 | ...16-117,131-136 
  ...me-session.ts |   91.09 |     92.1 |     100 |   91.09 | ...99,305,316-319 
  sox-recorder.ts  |    92.7 |    71.87 |     100 |    92.7 | ...34-135,153-154 
  ...ailability.ts |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |     100 |      100 |     100 |     100 |                   
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  ...e-recorder.ts |   88.29 |    67.74 |   81.81 |   88.29 | ...,98-99,112,115 
  voice-refine.ts  |     100 |    93.33 |     100 |     100 | 92                
  ...ream-retry.ts |   86.79 |       70 |     100 |   86.79 | 16-18,48-49,59-60 
  ...am-session.ts |   88.02 |    66.66 |   84.61 |   88.02 | ...26,343-345,363 
  ...ranscriber.ts |     100 |      100 |     100 |     100 |                   
 src/utils         |   92.23 |    89.62 |   96.39 |   92.23 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.14 |     100 |   97.36 | ...09-210,214-215 
  apiPreconnect.ts |   96.74 |    94.59 |     100 |   96.74 | 167-170           
  ...ol-call-id.ts |   84.61 |       60 |     100 |   84.61 | 26-27,37-38       
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  ...-api-error.ts |     100 |    96.42 |     100 |     100 | 14                
  cleanup.ts       |   84.05 |    94.11 |      80 |   84.05 | 80,111-121        
  ...y-identity.ts |   87.06 |    81.91 |     100 |   87.06 | ...70-371,378-379 
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.38 |    71.83 |   88.88 |   70.38 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 50-52,58          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  ...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 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.81 |    94.69 |     100 |   97.81 | ...03,420-421,466 
  ...projection.ts |   95.27 |    95.58 |     100 |   95.27 | 140-145           
  jsonc-editor.ts  |   93.18 |    92.66 |     100 |   93.18 | ...80-381,384-385 
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   86.64 |    77.02 |     100 |   86.64 | ...03-304,335-345 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   94.25 |    91.17 |     100 |   94.25 | ...30,436,439-443 
  ...-part-list.ts |     100 |      100 |     100 |     100 |                   
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  processUtils.ts  |    92.3 |       80 |     100 |    92.3 | 45-46             
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   95.87 |    89.28 |     100 |   95.87 | 103-105,131       
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  shell-args.ts    |     100 |      100 |     100 |     100 |                   
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       90 |     100 |     100 | 23                
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   76.47 |       25 |     100 |   76.47 | 13,17,23-24       
  ...on-handler.ts |    73.8 |       75 |     100 |    73.8 | 17-18,25-26,67-73 
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |    66.66 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   94.35 |    94.11 |     100 |   94.35 |                   
  cleanup.ts       |   92.59 |    93.75 |     100 |   92.59 | ...02-205,209-211 
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  throttledOnce.ts |   95.95 |    93.93 |     100 |   95.95 | 77-78,153-154     
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   88.59 |    87.04 |   90.31 |   88.59 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/agents        |   90.24 |    84.51 |   94.55 |   90.24 |                   
  ...transcript.ts |   88.49 |    84.09 |     100 |   88.49 | ...32,640,646-650 
  ...ent-resume.ts |   85.64 |       78 |    85.1 |   85.64 | ...1793-1797,1800 
  ...ound-tasks.ts |   95.19 |    90.75 |   96.42 |   95.19 | ...1889,1897-1898 
  forkedAgent.ts   |   93.18 |    83.47 |   94.44 |   93.18 | ...90,698,703-710 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   95.27 |    88.23 |   98.33 |   95.27 | ...1478,1492-1494 
  ...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.96 |    68.22 |   78.94 |   76.96 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   75.91 |     65.2 |   78.57 |   75.91 | ...1888,1894-1895 
  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.07 |    85.19 |   76.12 |   78.07 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   90.87 |    85.24 |   93.18 |   90.87 | ...83,685,687-688 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   93.32 |    87.44 |   91.34 |   93.32 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   90.27 |    80.44 |   80.95 |   90.27 | ...2525,2571-2573 
  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 
  ...ta-literal.ts |   95.96 |    92.68 |     100 |   95.96 | ...78-379,395-396 
  ...chestrator.ts |   93.87 |    90.47 |   91.48 |   93.87 | ...2216,2309-2312 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   95.77 |    84.16 |      95 |   95.77 | ...88,356,376-379 
  ...ow-sandbox.ts |   97.29 |    88.84 |     100 |   97.29 | ...1835,1841-1842 
  ...flow-saved.ts |   96.51 |    94.36 |     100 |   96.51 | 134-135,234-237   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 170-171,270       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   84.25 |    85.18 |   91.03 |   84.25 |                   
  TeamManager.ts   |   77.21 |    83.04 |   83.87 |   77.21 | ...1832,1855-1856 
  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   |   73.68 |      100 |   66.66 |   73.68 | 140-144,151-155   
  teamHelpers.ts   |   91.71 |    94.44 |      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        |   85.58 |    87.79 |   77.53 |   85.58 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   84.12 |     87.1 |   75.28 |   84.12 | ...9001,9008-9009 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  models.ts        |     100 |      100 |     100 |     100 |                   
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  storage.ts       |   96.02 |    93.38 |   89.28 |   96.02 | ...18-719,722-723 
 ...nfirmation-bus |   98.27 |    97.22 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.14 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   92.66 |    88.53 |   93.83 |   92.66 |                   
  ...on-restore.ts |   88.23 |    85.41 |     100 |   88.23 | ...60,63-64,67-68 
  baseLlmClient.ts |    88.4 |    83.68 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |   92.24 |     88.1 |   91.48 |   92.24 | ...4522,4620-4621 
  ...tGenerator.ts |   87.45 |    88.09 |   88.88 |   87.45 | ...08-509,554-560 
  ...lScheduler.ts |   89.82 |    84.83 |   94.73 |   89.82 | ...6483,6511-6527 
  ...entContext.ts |   96.63 |    90.13 |   96.66 |   96.63 | ...42,444-445,512 
  geminiChat.ts    |   95.18 |    90.76 |   96.69 |   95.18 | ...5700,5745-5746 
  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 | 46-47             
  output-styles.ts |     100 |      100 |     100 |     100 |                   
  ...on-helpers.ts |   93.49 |    78.57 |     100 |   93.49 | ...10-211,228-229 
  ...issionFlow.ts |   98.98 |    96.96 |     100 |   98.98 | 109               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   94.89 |    88.54 |     100 |   94.89 | ...51-252,297-298 
  prompts.ts       |   93.89 |    91.66 |      85 |   93.89 | ...1272,1475-1476 
  ...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        
  ...-arguments.ts |     100 |      100 |     100 |     100 |                   
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...tion-guard.ts |   90.38 |    94.73 |     100 |   90.38 | 83-87             
  ...allIdUtils.ts |   98.81 |    91.22 |     100 |   98.81 | 43,52             
  ...okTriggers.ts |   99.45 |    92.43 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.19 |    94.48 |     100 |   99.19 | 707-708,777       
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   96.59 |    89.11 |   97.43 |   96.59 |                   
  ...tGenerator.ts |   97.67 |    88.91 |   97.43 |   97.67 | ...1497,1526,1537 
  converter.ts     |   96.19 |    89.25 |     100 |   96.19 | ...1334,1555-1557 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   89.24 |    72.72 |   94.11 |   89.24 |                   
  ...tGenerator.ts |   87.54 |    71.42 |   93.75 |   87.54 | ...93-294,356-362 
  index.ts         |     100 |    85.71 |     100 |     100 | 51                
 ...ntentGenerator |   96.65 |     91.3 |   95.23 |   96.65 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   96.59 |    90.75 |      95 |   96.59 | ...1299-1300,1328 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |    92.2 |    90.85 |   96.58 |    92.2 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   91.26 |    89.66 |   96.87 |   91.26 | ...1948,2117-2132 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   68.25 |    82.35 |      50 |   68.25 | 44-53,74-78,90-94 
  ...tGenerator.ts |      70 |    73.33 |     100 |      70 | ...07-112,121-127 
  pipeline.ts      |   95.39 |    91.56 |     100 |   95.39 | ...1458-1459,1566 
  ...ix-caching.ts |   95.23 |    92.85 |     100 |   95.23 | 45-46,69-70       
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   92.11 |    92.25 |     100 |   92.11 | ...21-522,542-545 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.23 |    91.92 |   98.64 |   97.23 |                   
  dashscope.ts     |   98.42 |    95.27 |   96.55 |   98.42 | ...51-752,894-895 
  deepseek.ts      |   95.23 |    89.79 |     100 |   95.23 | ...49-150,163-164 
  default.ts       |   98.87 |       96 |     100 |   98.87 | 178,304           
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |      90 |    76.31 |     100 |      90 | ...,72-73,173-175 
 src/extension     |   88.79 |    86.19 |   93.46 |   88.79 |                   
  ...ive-safety.ts |   97.77 |    93.75 |     100 |   97.77 | 100-101           
  ...-converter.ts |   80.55 |    73.66 |     100 |   80.55 | ...1133,1179-1180 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |     100 |      100 |     100 |     100 |                   
  ...git-client.ts |     100 |      100 |     100 |     100 |                   
  ...redentials.ts |   95.33 |    89.47 |     100 |   95.33 | ...21-122,173-175 
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   92.82 |     89.1 |    98.3 |   92.82 | ...1641-1647,1691 
  ...ionManager.ts |   84.52 |    83.52 |      83 |   84.52 | ...3139,3177-3178 
  ...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        |   92.43 |    87.52 |     100 |   92.43 | ...1293-1294,1304 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |       96 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   88.39 |    83.11 |     100 |   88.39 | ...08,494,507-508 
  ...ork-policy.ts |   89.72 |    90.16 |     100 |   89.72 | ...36,148-154,156 
  npm.ts           |   89.02 |    81.81 |     100 |   89.02 | ...86-688,695-700 
  override.ts      |   94.11 |    93.54 |     100 |   94.11 | 63-64,81-82       
  ...-converter.ts |   94.89 |    90.41 |     100 |   94.89 | ...50-151,222-224 
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.33 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    84.21 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |       81 |   89.47 |   85.77 | ...02-205,260-261 
 ...ent-plugins-v1 |   84.94 |    79.51 |     100 |   84.94 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  manifest.ts      |   81.87 |    84.48 |     100 |   81.87 | ...55-156,161-174 
  mcp.ts           |   84.98 |    79.56 |     100 |   84.98 | ...88-389,419-420 
  paths.ts         |     100 |    94.44 |     100 |     100 | 59                
  skills.ts        |   82.31 |    63.88 |     100 |   82.31 | ...38-141,150-151 
 src/followup      |   84.72 |    81.87 |   86.84 |   84.72 |                   
  followupState.ts |   98.44 |    95.74 |     100 |   98.44 | 236-237           
  index.ts         |     100 |      100 |     100 |     100 |                   
  overlayFs.ts     |   96.29 |    88.88 |     100 |   96.29 | 78,108,122        
  speculation.ts   |   76.36 |     70.4 |   58.33 |   76.36 | ...42-743,750-751 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   86.11 |    87.17 |     100 |   86.11 | ...39-244,356-358 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   93.01 |    89.39 |   94.67 |   93.01 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   96.27 |    91.17 |     100 |   96.27 | ...20,143-146,163 
  ...checkpoint.ts |   81.48 |    76.19 |     100 |   81.48 | ...02-105,115-118 
  ...ion-prompt.ts |     100 |      100 |     100 |     100 |                   
  goal-evidence.ts |   88.54 |    87.98 |   97.67 |   88.54 | ...1200,1223-1226 
  ...projection.ts |   66.66 |    72.97 |   33.33 |   66.66 | ...87,190,194-196 
  ...ersistence.ts |   87.36 |    85.71 |    87.5 |   87.36 | ...53-154,185-190 
  goal-protocol.ts |   96.87 |    95.65 |     100 |   96.87 | 215-216           
  goal-reducer.ts  |   95.27 |    92.82 |   97.29 |   95.27 | ...87,566,584-585 
  goal-runtime.ts  |   96.38 |    89.73 |   95.83 |   96.38 | ...1349-1350,1480 
  goal-tools.ts    |   98.38 |    94.17 |   95.83 |   98.38 | ...05-206,307-308 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    93.02 |     100 |   92.46 | ...69-172,185-187 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-28              
  goalHook.ts      |   96.91 |    92.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.67 |   66.49 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |    72.22 |   95.65 |   80.55 | ...02-504,508-514 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   75.73 |     80.1 |   79.66 |   75.73 | ...1346,1352-1382 
  ...eLspClient.ts |   32.78 |    81.81 |   21.05 |   32.78 | ...89-293,299-300 
  ...LspService.ts |      60 |    73.36 |   78.26 |      60 | ...1575,1635-1645 
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    82.3 |    77.81 |   78.33 |    82.3 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.31 |    58.06 |     100 |   79.31 | ...26-933,940-942 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.48 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.48 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.71 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   88.97 |    85.08 |   91.31 |   88.97 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.36 |    96.63 |   96.42 |   97.36 | ...91-293,367-368 
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    83.33 |     100 |     100 | 135,145           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   93.82 |    84.09 |     100 |   93.82 | 78-83,122,154-157 
  ...entPlanner.ts |   91.55 |    76.74 |     100 |   91.55 | ...05,118-121,296 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   90.16 |    78.76 |   94.44 |   90.16 | ...06,629,642-648 
  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.51 |    83.16 |   77.77 |   78.51 | ...1487,1500-1502 
  ...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             
  ...yDiscovery.ts |   93.42 |    90.72 |     100 |   93.42 | ...11,370,592-595 
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   97.26 |    86.79 |     100 |   97.26 | ...10-218,222,225 
  recall.ts        |   86.86 |    86.23 |   92.85 |   86.86 | ...33-538,571-582 
  refresh.ts       |   93.58 |    89.58 |     100 |   93.58 | ...75-176,183-184 
  ...ceSelector.ts |    93.2 |    85.71 |     100 |    93.2 | ...45-146,148-149 
  remember.ts      |   98.88 |    90.19 |     100 |   98.88 | 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 |   76.89 |    74.07 |   72.22 |   76.89 | ...47-451,454,460 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   92.92 |    81.81 |     100 |   92.92 | ...16-117,147-148 
  ...git-status.ts |     100 |    85.71 |     100 |     100 | 27                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...66-280,294-299 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   92.82 |    89.39 |   91.35 |   92.82 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   97.77 |    91.83 |     100 |   97.77 | 155,161,171       
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   79.43 |    64.51 |   85.71 |   79.43 | ...,89-96,131-142 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.11 |     100 |     100 | 177,262           
  modelsConfig.ts  |   89.36 |    86.93 |   88.09 |   89.36 | ...1407,1436-1437 
  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.18 |   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.74 |     100 |   94.49 | ...1447,1481-1483 
  ...-semantics.ts |   70.44 |    91.07 |   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.78 |    78.34 |   81.25 |   83.78 |                   
  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.91 |    73.48 |   78.26 |   75.91 | ...74-475,503-504 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   98.04 |    91.66 |   63.63 |   98.04 |                   
  ...oding-plan.ts |   87.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 |                   
  moonshot.ts      |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.36 |    78.59 |   95.94 |   85.36 |                   
  ...tGenerator.ts |    98.6 |    98.14 |     100 |    98.6 | 103-104           
  qwenOAuth2.ts    |   82.79 |    73.45 |    90.9 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |     76.8 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.71 |    86.32 |   96.82 |   90.71 |                   
  ...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.72 |    96.53 |     100 |   97.72 | ...1081,1224-1232 
  ...ingService.ts |   92.43 |    87.77 |   94.73 |   92.43 | ...2843,2858-2859 
  ...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 |   96.34 |    91.96 |     100 |   96.34 | ...11,336-337,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 |   86.58 |    74.39 |     100 |   86.58 | ...56-460,498-499 
  ...references.ts |   98.57 |    91.42 |     100 |   98.57 | 156-157,217-218   
  ...ionService.ts |   98.26 |    97.23 |     100 |   98.26 | ...65-866,889-890 
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   95.82 |    90.52 |   97.05 |   95.82 | ...60,861,875-877 
  ...orRegistry.ts |   97.22 |    90.99 |     100 |   97.22 | ...55-456,609-610 
  ...ttachments.ts |   97.74 |     90.9 |     100 |   97.74 | 298-308,646       
  ...pi-history.ts |   98.94 |    89.13 |     100 |   98.94 | 43                
  ...ersistence.ts |   91.67 |    80.64 |     100 |   91.67 | ...1062-1063,1091 
  ...tory-state.ts |     100 |       95 |     100 |     100 | 31                
  ...on-service.ts |   94.61 |    92.44 |   97.22 |   94.61 | ...11-613,669-677 
  ...pr-service.ts |   96.26 |    89.13 |     100 |   96.26 | 90-93             
  ...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.7 |    91.09 |    97.8 |    93.7 | ...2791-2792,2869 
  ...turn-state.ts |   94.11 |     90.9 |   91.66 |   94.11 | 108-112,129-130   
  ...est-helper.ts |       0 |        0 |       0 |       0 | 1-65              
  ...iter-lease.ts |   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 |   90.72 |    86.62 |   94.28 |   90.72 | ...3530-3531,3572 
  sessionTitle.ts  |   96.35 |    79.71 |     100 |   96.35 | ...08-311,342-343 
  ...ContextEnv.ts |     100 |    94.73 |     100 |     100 | 76,111            
  ...ionService.ts |   84.43 |    78.45 |   97.18 |   84.43 | ...2496,2502-2507 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...Estimation.ts |     100 |    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.77 |    84.92 |     100 |   90.77 | ...43-546,598-599 
  ...reeCleanup.ts |   14.42 |      100 |   33.33 |   14.42 | 58-186            
  ...ionService.ts |   88.36 |     87.8 |     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.8 |    92.12 |     100 |    98.8 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |   98.72 |    82.35 |     100 |   98.72 | 65,71             
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   89.77 |    86.05 |   94.73 |   89.77 |                   
  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 |   86.09 |    85.64 |   86.11 |   86.09 | ...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.07 |     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     |   88.56 |    89.42 |    98.3 |   88.56 |                   
  ...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 |   85.51 |    86.52 |   97.43 |   85.51 | ...1583,1660-1661 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |   82.73 |     84.6 |   86.17 |   82.73 |                   
  ...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.38 |    83.33 |      50 |   65.38 | ...08-109,112-113 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |    99.02 |     100 |     100 | 106               
  ...ai-request.ts |   87.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.44 |      75 |   93.95 | ...41,483-484,500 
  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.26 |    88.66 |   86.36 |   83.26 | ...1467,1471-1478 
  uiTelemetry.ts   |   98.74 |    95.45 |   96.55 |   98.74 | ...26,475,622-623 
 ...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.64 |   84.09 |   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 |      80 |   94.85 | ...53,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   87.44 |    85.88 |   90.04 |   87.44 |                   
  ...erQuestion.ts |   89.71 |    81.13 |    92.3 |   89.71 | ...66-367,374-375 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.72 |    91.48 |   83.33 |   89.72 | ...06-307,318-325 
  cron-create.ts   |   90.64 |     93.1 |      75 |   90.64 | ...,73-74,223-231 
  cron-delete.ts   |   97.56 |      100 |   85.71 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.45 |   88.88 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  display-image.ts |   87.42 |    85.71 |    90.9 |   87.42 | ...29-134,194-195 
  edit.ts          |   82.76 |    86.88 |   82.35 |   82.76 | ...45-746,865-915 
  ...r-worktree.ts |   83.14 |    68.42 |   88.88 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |       84 |      90 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.29 |     83.8 |   94.73 |   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.71 |   86.36 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    78.12 |   91.66 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   94.11 |    83.33 |   85.71 |   94.11 | 31-32,47-48       
  loop-wakeup.ts   |   99.27 |     93.1 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.54 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.9 |    90.9 |   72.71 | ...1212,1214-1215 
  ...nt-manager.ts |   82.06 |    80.15 |   85.71 |   82.06 | ...3234,3236-3237 
  mcp-client.ts    |   86.08 |     87.5 |   93.93 |   86.08 | ...2483,2487-2490 
  ...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 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |    97.5 |    93.93 |     100 |    97.5 | 178-179           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  ...ion-config.ts |     100 |      100 |     100 |     100 |                   
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   97.95 |    92.37 |     100 |   97.95 | ...1161,1216-1217 
  ...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.39 |   82.35 |   85.71 | ...96-912,958-959 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   83.21 |    90.69 |     100 |   83.21 | 147-158,207-220   
  read-file.ts     |   95.49 |    88.61 |    87.5 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  readManyFiles.ts |   96.04 |    82.25 |     100 |   96.04 | ...41,594,604-608 
  ...d-artifact.ts |   85.68 |    81.59 |   94.73 |   85.68 | ...1071,1095-1096 
  ...t-findings.ts |   99.08 |    93.75 |    92.3 |   99.08 | 217-219           
  ...t-shutdown.ts |    87.2 |    86.66 |   77.77 |    87.2 | ...,75-79,162-165 
  ripGrep.ts       |    94.6 |    87.34 |   95.45 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |      80 |    89.74 |   66.66 |      80 | ...59-265,333-340 
  ...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         |   92.77 |    93.22 |   86.36 |   92.77 | ...80,584,630-652 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.75 |   83.33 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   80.43 |    86.95 |   85.71 |   80.43 | ...67,121,125-132 
  task-stop.ts     |   93.14 |    96.29 |    87.5 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.87 |     86.5 |   92.85 |   82.87 | ...54-564,588-599 
  team-create.ts   |   97.24 |    86.36 |   85.71 |   97.24 | 48-49,129-130     
  team-delete.ts   |   86.74 |    84.61 |   85.71 |   86.74 | 37-38,42-48,72-73 
  ...n-approval.ts |   92.14 |    96.96 |   81.81 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   95.13 |    87.85 |   93.33 |   95.13 | ...23-527,540-545 
  ...repeat-key.ts |     100 |      100 |     100 |     100 |                   
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   80.35 |    81.52 |   85.71 |   80.35 | ...1017,1025-1026 
  ...-finalizer.ts |    98.1 |     92.3 |   93.33 |    98.1 | ...34-235,237-241 
  ...iagnostics.ts |   99.06 |    97.69 |   91.66 |   99.06 | 133-134,205       
  ...-retention.ts |     100 |    95.83 |     100 |     100 | 116               
  tool-search.ts   |   96.19 |    89.79 |   93.75 |   96.19 | ...09,259-264,426 
  tool-utils.ts    |   97.46 |    96.55 |     100 |   97.46 | 26-27             
  tools.ts         |   92.93 |    92.18 |      92 |   92.93 | ...64-565,581-587 
  truncation.ts    |   90.61 |    90.35 |     100 |   90.61 | ...53-461,498-504 
  ...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.06 |    85.71 |   89.47 |   87.06 | ...29-832,869-904 
  zoom-image.ts    |   95.76 |    93.93 |    90.9 |   95.76 | 54-59,203-204     
 src/tools/agent   |   87.49 |    88.65 |   89.56 |   87.49 |                   
  agent.ts         |   86.18 |    87.83 |   87.36 |   86.18 | ...4383,4417-4427 
  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 |                   
 ...tools/workflow |   88.61 |    86.99 |   81.48 |   88.61 |                   
  workflow.ts      |   88.61 |    86.99 |   81.48 |   88.61 | ...51,796,798-799 
 src/utils         |   92.78 |    89.75 |   96.91 |   92.78 |                   
  LruCache.ts      |     100 |      100 |     100 |     100 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |      95 |    92.76 |     100 |      95 | ...49-550,657-661 
  auth-type.ts     |     100 |      100 |     100 |     100 |                   
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.79 |     100 |   98.45 | 132-133,159-160   
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.06 |    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   |     100 |    97.18 |     100 |     100 | 79,86             
  ...qwen-model.ts |     100 |      100 |     100 |     100 |                   
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...27-428,462-463 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  encoding.ts      |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   88.92 |    93.08 |      68 |   88.92 | ...92,394,410-411 
  fetch.ts         |   90.68 |    82.63 |     100 |   90.68 | ...72,483-484,503 
  ...ng-options.ts |     100 |      100 |     100 |     100 |                   
  file-identity.ts |     100 |      100 |     100 |     100 |                   
  fileUtils.ts     |   94.79 |    92.16 |   96.29 |   94.79 | ...2076,2084-2085 
  formatters.ts    |     100 |      100 |     100 |     100 |                   
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.39 |    94.28 |     100 |   94.39 | ...29-132,343-348 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  git-branches.ts  |    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.47 |     100 |   95.08 | ...62-166,234-238 
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  is-tool.ts       |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   96.15 |    93.63 |     100 |   96.15 | ...86-387,429-432 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iconv-lite.ts |     100 |      100 |     100 |     100 |                   
  ...simple-git.ts |   96.77 |    91.66 |     100 |   96.77 | 38                
  ...m-headless.ts |      96 |    88.88 |     100 |      96 | 34                
  ...-constants.ts |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...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 | 154               
  ...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.36 |     100 |   96.98 | ...87-688,763-764 
  retry.ts         |   96.09 |    92.52 |     100 |   96.09 | ...72,563-564,582 
  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 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   84.87 |    86.71 |   96.29 |   84.87 | ...71,696,725-734 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |   97.77 |    91.48 |     100 |   97.77 | 172-173           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...-child-env.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   98.22 |    98.01 |     100 |   98.22 | 100,102-103       
  ...aValidator.ts |   92.09 |    83.65 |   90.47 |   92.09 | ...60,882-883,896 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.78 |    92.18 |     100 |   91.78 | ...66-569,645-646 
  ...nIdContext.ts |     100 |       90 |     100 |     100 | 95                
  ...orageUtils.ts |   96.21 |    86.44 |     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.37 |    88.59 |     100 |   86.37 | ...2361,2368-2372 
  ...lAstParser.ts |    98.3 |    91.59 |     100 |    98.3 | ...1340-1342,1352 
  ...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 |    57.14 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminal-env.ts  |      50 |      100 |       0 |      50 | 18-19             
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...error-type.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ultCleanup.ts |   54.62 |       64 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.82 |    92.48 |     100 |   96.82 | ...37-342,344-349 
  ...pt-records.ts |   87.61 |    86.23 |     100 |   87.61 | ...80-484,514-529 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...-directory.ts |    83.7 |    80.95 |    87.5 |    83.7 | ...37-238,252-253 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.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.75 |   94.78 |   83.94 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    82.9 |    76.81 |   95.08 |    82.9 | ...1563,1597-1598 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.86 |      90 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |    92.3 |      100 |   88.88 |    92.3 |                   
  ...ageFormats.ts |   81.81 |      100 |   66.66 |   81.81 | 56-61             
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
-------------------|---------|----------|---------|---------|-------------------

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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline.

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

  • R1-1 redundant nested CompactModeContext.Provider value={true} wrappers at App.tsx:13562/13632 — already reported in the triage stage-2 comment (5407207072)

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

中文说明

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

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

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

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

Comment on lines +117 to 119
// Compact behavior is fixed on in the web shell; the daemon schema still
// carries the retired setting, so keep it hidden from the panel.
'ui.compactMode',

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] This retirement removes the last reader/writer of ui.compactMode, but two user-facing surfaces the triage thread did not cover still present the key as functional: docs/users/configuration/settings.md:140 says "Still honored by the web shell.", and packages/vscode-ide-companion/schemas/settings.schema.json:453 still describes it as "Compact view (web shell only; not used by the TUI)". A user following the settings reference sets ui.compactMode: false to get the expanded view back — the daemon accepts and persists the write (the key is still in WEB_SHELL_SETTINGS, so the settings route serves it), nothing reads it, and the web shell silently stays compact with no error and no documented explanation. This extends the stale-schema-comment / WEB_SHELL_SETTINGS nit already flagged in triage to the surfaces users actually read; the PR's stated scope decision covers keeping the registration, not the now-false claims about it. Update the settings.md row and the VS Code schema description to say the setting is retired everywhere (kept only so existing config files don't warn) — or retire the key end-to-end.

中文说明

此次退役删除了 ui.compactMode 的最后一个读写方,但分诊讨论未覆盖的两个用户可见表面仍宣称该设置有效:docs/users/configuration/settings.md:140 写着"Still honored by the web shell."(web shell 仍然遵守),packages/vscode-ide-companion/schemas/settings.schema.json:453 仍描述为"Compact view (web shell only; not used by the TUI)"。用户按设置文档把 ui.compactMode: false 写入配置以恢复完整视图——daemon 接受并持久化该写入(此键仍在 WEB_SHELL_SETTINGS 中,设置路由照常返回它),却没有任何代码读取它,web shell 静默保持紧凑视图,无报错、无说明。这一点把分诊中已指出的"schema 注释过时 / WEB_SHELL_SETTINGS 残留"延伸到了用户真正会读到的表面;PR 声明的范围决定覆盖的是"保留注册",而不是这些现已失真的说法。请将 settings.md 对应行与 VS Code schema 描述更新为"该设置已在所有端退役(仅为兼容既有配置文件而保留)",或者端到端彻底移除该键。

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

Comment on lines +11718 to +11720
{/* Compact view is fixed on for every message surface (main chat,
split panes, subagent detail, drawer) — no toggle remains. */}
<CompactModeContext.Provider value={true}>

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] No discriminating test pins this invariant. A probe flipped this provider to value={false} in an isolated tree: the web-shell unit suite still passes and the rewritten web-shell.compact-thinking.spec.ts still passes — the spec streams a lone thought with no tool groups, mergeCompactToolGroups keeps a lone thought standalone in both modes, and ThinkingMessage never reads the context, so the oracle is mode-blind; App.test.tsx mocks MessageList, the component-level tests inject their own provider values, and the visuals suite only writes PNG artifacts. The mechanism is observable — rendering the real MessageList shows the merged summary row under true and the standalone tool group under false — but nothing in the suite asserts it, so a regression to non-compact rendering (unmerged tool groups, wide spacing) on the main chat, split panes, or the drawer ships with no red test. Extend the e2e spec (or add one) to stream two consecutive tool-call events and assert the merged compact summary row (a single "Ran 2 tools" aggregate) appears, so flipping this provider fails the suite.

中文说明

没有任何判别性测试钉住这一不变量。验证探针在隔离树中把这个 Provider 翻转为 value={false}:web-shell 单测套件仍然全绿,重写后的 web-shell.compact-thinking.spec.ts 也仍然通过——该 spec 只流式推送一条没有工具组的思考,mergeCompactToolGroups 在两种模式下都让孤立思考保持独立行,且 ThinkingMessage 根本不消费该 context,所以其断言对模式不敏感;App.test.tsx mock 了 MessageList,组件级测试自带 Provider 值,视觉套件只写 PNG 产物。该机制是可观测的——渲染真实 MessageList 时,true 会显示合并后的摘要行,false 显示独立工具组——但套件中没有任何断言覆盖它,因此主聊天、分屏或抽屉回归到非紧凑渲染(工具组不合并、间距变宽)时不会有任何测试变红。请扩展该 e2e spec(或新增一个):流式推送两个连续工具调用事件,并断言出现合并后的紧凑摘要行(单个"Ran 2 tools"聚合),使得翻转此 Provider 时套件失败。

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

Comment on lines +117 to 119
// Compact behavior is fixed on in the web shell; the daemon schema still
// carries the retired setting, so keep it hidden from the panel.
'ui.compactMode',

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] No test exercises HIDDEN_SETTING_KEYS. A probe removed 'ui.compactMode' from this set in an isolated tree: SettingsMessage.test.ts, SettingsMessage.dom.test.tsx and App.test.tsx all stay green (558/558) — and the daemon still lists the key, so the settings panel would then show a non-functional "Compact Mode" toggle (the daemon descriptor label via the translateSettingText fallback); flipping it writes a workspace setting nothing reads. Since this PR also deleted the key's i18n labels, such a cleanup is plausible. Add a SettingsMessage unit test rendering a settings list that includes ui.compactMode and asserting it is absent from the panel (with a visible control setting present to keep the assertion discriminating).

中文说明

没有任何测试覆盖 HIDDEN_SETTING_KEYS。验证探针在隔离树中把 'ui.compactMode' 从该集合移除:SettingsMessage.test.tsSettingsMessage.dom.test.tsxApp.test.tsx 全部保持绿色(558/558)——而 daemon 仍会返回该键,于是设置面板将显示一个不起作用的"紧凑模式"开关(经 translateSettingText 回退显示 daemon 描述标签);切换它只会写入一个无人读取的工作区设置。鉴于本 PR 同时删除了该键的 i18n 标签,这类"顺手清理"是可能发生的。请新增一个 SettingsMessage 单测:渲染包含 ui.compactMode 的设置列表,断言它不出现在面板中(同时保留一个可见的设置项,使断言具有判别性)。

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

store,
t,
]);
}, [interactionBlocked, handleClearScreen, handleRetry, store, t]);

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] Removing the Ctrl+O branch orphans the composer's CodeMirror swallow binding { key: 'Ctrl-o', run: () => true } (useComposerCore.ts:2898-2900, untouched here) and un-suppresses the browser default. At the merge base the removed branch called e.preventDefault() on Ctrl+O in the capture-phase window handler regardless of focus; a sweep of all 23 keydown registrations in packages/web-shell/client finds nothing else preventDefault-ing Ctrl+O after this diff. So pressing Ctrl+O with focus outside the composer (e.g. right after clicking a toolbar button or the message list) hits nothing and the browser default fires — the "Open File" dialog on Chrome/Edge/Firefox — while inside the composer the orphaned binding still silently swallows the key (a probe on the real keymap shows defaultPrevented=true with the binding, false once it is deleted). It is the only one of the three swallows with no surviving global handler, and it carries no comment; if a maintainer later deletes it as dead code, the dialog starts appearing while typing too — the Test Plan's "Press Ctrl+O: nothing happens" holds only inside the composer. If the swallow is intentionally kept to suppress the browser default, say so in a one-line comment on the binding; otherwise delete it, or restore a no-op e.preventDefault() branch for e.key === 'o' here if Ctrl+O must stay inert everywhere.

中文说明

移除 Ctrl+O 分支后,编辑器 CodeMirror 中的吞键绑定 { key: 'Ctrl-o', run: () => true }useComposerCore.ts:2898-2900,本 diff 未触及)成为孤儿,且浏览器默认行为不再被抑制。在 merge base 上,被删除的分支会在捕获阶段的 window 处理器中对 Ctrl+O 调用 e.preventDefault()(与焦点位置无关);扫描 packages/web-shell/client 全部 23 处 keydown 注册,此 diff 之后没有任何其他代码对 Ctrl+O 调用 preventDefault。因此,焦点在编辑器之外按 Ctrl+O(例如刚点击过工具栏按钮或消息列表)不会命中任何处理器,浏览器默认行为生效——Chrome/Edge/Firefox 上弹出"打开文件"对话框——而在编辑器内部,孤儿绑定仍静默吞掉该键(对真实键位映射的探针显示:保留绑定时 defaultPrevented=true,删除后为 false)。它是三个吞键绑定中唯一没有对应全局处理器的,且没有任何注释;若后续维护者把它当死代码删除,输入时也会弹出该对话框——测试计划中"按 Ctrl+O 无反应"只在编辑器内成立。如果保留该吞键是有意为之以抑制浏览器默认行为,请在绑定上加一行注释说明;否则删除它,或者如果 Ctrl+O 必须在任何位置都保持无反应,在此处恢复一个仅调用 e.preventDefault()e.key === 'o' 空分支。

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

@ytahdn

ytahdn commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /verify

@qwen-code-ci-bot

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

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

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

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

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

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

Verification report

PR #9993 deep verification — feat(web-shell): make compact view the only mode

Verdict: merge-ready — 65/65 scripted assertions passed (0 unexpected failures). Verified head: e0a526a0d89cc19ca0299155daf72c484cb74658 (merge base tip: 43d7596d9d4ea44b9fc5b305d01a313d837c8c81). First round (no previous report).

中文摘要
  • 结论merge-ready。65 项脚本化断言全部通过,0 项意外失败。
  • A/B 结论:中心主张成立。base 上主聊天消息面的 CompactModeContext 值随 ui.compactMode 设置变化(默认 false),Ctrl+O 会写 ('workspace','ui.compactMode',true) 并翻转上下文;head 上该值在所有场景(无设置 / 设置 true / 设置 false)恒为 true,Ctrl+O 不再产生任何设置写入(见下表与 01-ab-wiring-base-cells.png02-ab-wiring-head-cells.png)。帮助对话框的 Ctrl+O 条目(中英)在 head 已移除,Ctrl+L 对照项两臂均在。
  • Findings(均不阻塞):(1) Suggestion——没有任何仓库测试钉住“紧凑视图固定开启”的根接线:把根 Provider value={true} 突变回 false 后全部 4209 个仓库行为测试仍绿(08-mutation-matrix.png),PR 删掉了旧开关测试但未补钉住新行为的测试;(2) Nit——ui.compactInline 从隐藏集合移除后,若 daemon 下发该描述符将直接渲染,但当前 daemon schema 无此键,生产不可达;(3) Nit——daemon 侧 settingsSchema.ts 中关于 compactMode 保留原因的注释在 PR 后过时(PR 按范围决定未动 daemon 文件)。
  • 未覆盖:Playwright e2e(含被修改的 spec,容器无浏览器);真实 daemon + 浏览器的手工验证;base 全量套件(head 零失败,无需归因)。

Central claim + A/B table

Central claim: the web shell renders every message surface compact unconditionally (root CompactModeContext.Provider value={true}), and the toggle path (Ctrl+O handler → compactMode state → ui.compactMode settings write → per-surface providers) is fully removed.

Harness: harness/verify-compact-wiring.verify.test.tsx renders the real App in jsdom using the scaffolding extracted verbatim from App.test.tsx (lines 1–1737 + 4768–5232, byte-identical on both arms — verified by diff), with the mocked MessageList instrumented to print the CompactModeContext value it receives at the main-chat slot. Same scenarios on both builds; VERIFY_ARM selects the expectation set. Witness captures: 01-ab-wiring-base-cells.png, 02-ab-wiring-head-cells.png.

Cell (identical scenario both arms) Oracle base head
no daemon setting context at main-chat MessageList slot false true (the flip)
ui.compactMode effective=true same true true
ui.compactMode effective=false same false true (setting ignored)
Ctrl+O dispatched settingsSetValue calls with ui.compactMode + context after 1 write ('workspace','ui.compactMode',true), context false→true 0 writes, context stays true

Secondary surfaces and controls (witnesses 03-consumer-aa-control.png, 04-help-settings-base-cells.png, 05-help-settings-head-cells.png):

Cell base head
HelpDialog en: Ctrl+O / Toggle compact mode present yes no (Ctrl+L control present on both)
HelpDialog zh-CN: Ctrl+O / 切换紧凑模式 present yes no
Settings panel: served ui.compactMode descriptor renders hidden hidden (unchanged, as described)
Settings panel: served ui.compactInline descriptor renders hidden shown (see Finding 2; unreachable in production)
Real MessageList with context true tool groups separated by thinking merge into one msg-summary-* row (data-tool-ids=call-g1,call-g2) identical (A/A control)
Real MessageList with context false separate rows, no summary identical (A/A control)

The consumer A/A rows prove the context value maps to the visible merged-row structure the PR description claims, and that the harness infrastructure behaves identically on both arms.

Static wiring checks (21/21 on head, logs/static-checks-head.log): exactly 3 CompactModeContext.Provider opens, all value={true} (root + 2 drawer); no compactMode state, no handleToggleCompact, no COMPACT_MODE_SETTING_KEY, no if (e.key === 'o') branch; all four removed i18n keys gone; ui.compactMode still in HIDDEN_SETTING_KEYS; ui.compactInline no longer in it; daemon schema still carries compactMode and the /workspace/settings allowlist still lists it; WebShellTranscript still provides value={false} (pinned by the existing WebShellTranscript.test.tsx, green in the gate). Base control run (logs/static-checks-base.log) shows the pre-PR state: 4 providers bound to compactMode, Ctrl+O branch present, compactInline hidden.

Corrections

  • The daemon-side comment at packages/cli/src/config/settingsSchema.ts:1180-1185 says compactMode is kept "so the web shell's independent compact toggle can still persist via the daemon settings routes". After this PR no web-shell writer of that setting exists (verified: the only remaining web-shell reference is the HIDDEN_SETTING_KEYS entry). The comment's stated rationale is now stale. This is a correction to an adjacent comment the PR intentionally left untouched (scope decision), not a defect in the diff.

Findings (non-blocking)

  1. Nothing pins the always-on wiring (Suggestion, coverage gap). Mutation M1 (root provider value={true}value={false} in a scratch worktree, nothing else changed) leaves all 4209 repo behavioral tests green — the only reds are my harness (4 cells, expected 'false' to be 'true') and 13 build-artifact.test.ts cases that fail with ENOENT …/dist/index.js because the scratch worktree has no build output (environmental; they pass on the head tree). The PR deleted the two toggle tests and the HelpDialog test file but added no test that asserts the fixed-on state, so reverting the central change is invisible to CI. The matrix (08-mutation-matrix.png) includes the positive control: an interface-preserving mutation in the same file ('voiceModel''voiceModelX' at the setWorkspaceSetting write site, logs/matrix-m2prime-suite.log) turned exactly two App.test.tsx tests red with an expected-vs-actual mismatch, proving the chosen command collects App.tsx and can fail. A pinning fixture already exists in this round's harness: render App with no settings and assert the message-list slot sees true (or assert the merged msg-summary-* row shape at the App level) — that is the test to add.
  2. ui.compactInline would now render in the settings panel if ever served (Nit). Removing it from HIDDEN_SETTING_KEYS flips the panel behavior for a served descriptor (base hidden → head shown, behavioral cell above), and its i18n label/description were deleted, so it would render with the raw daemon label. Unreachable in production today: the daemon schema has no compactInline key at all (daemon.schema-no-compactInline static check), so no descriptor can arrive. Worth a comment or keeping the entry; not a defect as shipped.
  3. Stale daemon comment — see Corrections.
  4. The changed e2e spec no longer discriminates base from head (Note). web-shell.compact-thinking.spec.ts dropped the ui.compactMode=true fixture; on base-without-fixture compact was off, and the assertions it keeps (Thinking visible while streaming, raw thought text hidden) describe behavior that also holds in non-compact rendering, so the spec is regression coverage for head rather than an A/B discriminator. Not executable here (no Playwright browsers in the container) — static analysis only.
  5. Cosmetic stray edit (Note). App.tsx also deletes an unrelated blank line between availableSkillInfos and availableSessionSkillInfos. Prettier-clean and harmless.

Not covered

  • Playwright e2e, including the changed spec and the Reviewer Test Plan's browser steps — the container has no Playwright browsers (~/.cache/ms-playwright absent); I did not install one over the network. The plan's daemon+browser steps (expandable summary rows in a live shell, Ctrl+O inertness in-page, settings panel) are covered at the jsdom level instead.
  • Base full suite — the head suite had zero failures, so no pre-existing-failure attribution was needed; the base arm ran the three harnesses (9/9 green under base expectations) but not the full 201-file suite.
  • Per-commit attribution beyond the web-shell slice — the checkout is shallow (rev-list HEAD^1..HEAD^2 = 1 vs 3 commits in the metadata, the shallow-boundary trap). The two merge commits' objects exist locally and their tree diffs touch zero packages/web-shell files (scripted checks commits.merge1-no-webshell / merge2-no-webshell), so the aggregate HEAD^1..HEAD diff is exactly the feature commit's change; deeper per-commit history was out of reach by design.
  • Split-pane and artifact-drawer behavioral cells — covered by the root-provider wrap (source check: no inner provider with a different value remains; the two drawer providers are redundant value={true}) plus the A/A consumer rows, not by driving split sessions in jsdom.
  • packages/vscode-ide-companion schema still lists compactMode — outside the PR's stated scope (web shell only); noted, not judged.

Methodology

Environment: CI merge-ref checkout (depth 2; HEAD merge commit, HEAD^1 base tip, HEAD^2 PR head), npm ci + npm run build pre-run at HEAD. A/B control: git worktree add tmp/base-tree HEAD^1; the PR leaves package.json/lockfile untouched, so the base tree reused the root node_modules (realpath-checked: @qwen-code/sdk/@qwen-code/webui symlinks point into the head tree, but every runtime cross-workspace import on the harness path is mocked identically on both arms, making them a constant confound) plus symlinked per-package nested node_modules (hoisted conflicts, e.g. @datafe-open/*, absent from the root) — without that link the base arm fails module resolution, which is how I discovered it. Mutations ran in a third scratch worktree at HEAD; all worktrees removed afterwards. Harnesses are mock-free with respect to the units under test (real App, real MessageList, real HelpDialog/SettingsMessage; only the daemon SDK and heavy siblings are mocked, using the repo's own test scaffolding). Gates: web-shell vitest suite (201 files / 4231 tests, incl. the 9 harness tests), tsc --noEmit, ESLint + Prettier on the 7 changed files, each with a planted-violation liveness control. Raw logs in logs/, harness sources in harness/, captures in evidence/.

Flakiness gate log

e2e suite, out of gate scope: packages/web-shell/client/e2e/web-shell.compact-thinking.spec.ts
rounds=5 files=1 skipped=1
file packages/web-shell/client/App.test.tsx: (cd packages/web-shell) npx --no-install vitest run ./client/App.test.tsx


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/web-shell/client/App.test.tsx: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 2 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 3 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 4 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 5 · packages/web-shell/client/App.test.tsx: P (exit 0)

Evidence images

01-ab-wiring-base-cells

02-ab-wiring-head-cells

03-consumer-aa-control

04-help-settings-base-cells

05-help-settings-head-cells

06-m1-repo-suite-green

07-gate-head-suite-summary

08-mutation-matrix

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

Qwen Code · sandboxed verification

@ytahdn

ytahdn commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /takeover

@qwen-code-dev-bot qwen-code-dev-bot added the autofix/takeover Summon the autofix loop to manage this PR (remove to release; needs triage+) label Aug 25, 2026
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

🤝 Takeover engaged: the autofix loop now manages this PR — it will address new review feedback and resolve base conflicts until the label is removed or the round cap is reached. Remove the autofix/takeover label (or comment @qwen-code /takeover stop) to release.

中文说明

🤝 已接管:autofix 循环现在管理此 PR —— 将持续处理新的评审反馈与 base 冲突,直到移除标签或达到轮次上限。移除 autofix/takeover 标签(或评论 @qwen-code /takeover stop)即可释放。

@qwen-code-dev-bot

qwen-code-dev-bot commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

AutoFix round 3 finishedview run. See this round's report below.

中文说明

AutoFix 第 3 轮已完成 —— 查看运行。本轮报告见下方。

钉萁 added 2 commits August 25, 2026 11:57
…ct-mode

# Conflicts:
#	packages/web-shell/client/components/WebShellTranscript.tsx
- Mark ui.compactMode retired everywhere in the settings docs and schema
  description (regenerated), matching the always-on compact view; mark the
  long-gone ui.compactInline row as removed.
- Keep Ctrl+O suppressed globally after the toggle removal so the key never
  falls through to the browser's Open File dialog, with a pinning unit test.
- Add discriminating coverage: a settings-panel test that fails if
  ui.compactMode leaves HIDDEN_SETTING_KEYS, and an e2e spec asserting the
  merged compact summary row so flipping the app-level provider fails.
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

🤖 Addressed the latest review feedback (round 1/100). What changed, and what I pushed back on: · 已处理最新评审反馈(第 1/100 轮)。改动内容与我反驳保留之处如下:

Round summary — PR #9993 (make compact view the only mode)

Conflict resolution (--conflict true)

Merged origin/main (now b331509de4, which includes refactor(web-shell): extract shared contexts (#9954)) into the PR branch. One conflict in packages/web-shell/client/components/WebShellTranscript.tsx: main refactored the two todo context providers into TodoContextsProvider (imported from the new WebShellContexts module), while this PR had added an explanatory comment above the transcript's CompactModeContext.Provider value={false}. Resolution: took main's TodoContextsProvider structure and re-applied the PR's comment above the provider. Verified the resolved file differs from main only by that comment. App.tsx and i18n.tsx auto-merged cleanly; re-inspected the provider nesting (top-level value={true}, drawer providers, removed split-pane/main-chat wrappers) and the Ctrl+O/i18n removals after the merge. Merge commit: 8bfbeb2e74.

Feedback points

[rc:3852212496] — stale "still functional" claims for ui.compactMode → Fixed

The finding was correct: after this PR nothing reads ui.compactMode, yet docs/users/configuration/settings.md said "Still honored by the web shell." and the VS Code schema described it as "Compact view (web shell only; not used by the TUI)". Following the PR's stated scope decision (keep the key registered so existing config files don't warn), the claims were corrected rather than retiring the key end-to-end:

  • packages/cli/src/config/settingsSchema.ts: rewrote the compactMode comment and description to say the setting is retired everywhere and kept only so existing settings files do not warn.
  • Ran npm run generate:settings-schema; the regenerated packages/vscode-ide-companion/schemas/settings.schema.json (description line) is committed in the same commit.
  • docs/users/configuration/settings.md: the ui.compactMode row now reads "RETIRED everywhere. … writes are accepted but nothing reads the value." The adjacent ui.compactInline row — which the schema no longer defines and which still claimed "Requires ui.compactMode to be enabled" — is marked "REMOVED. … silently ignored (no startup warning)", matching the doc's existing REMOVED convention.

[rc:3852212502] — no discriminating test pins the always-on provider → Fixed

Extended packages/web-shell/client/e2e/web-shell.compact-thinking.spec.ts with a second test: it seeds a background Agent tool call followed by a grep_search tool call (the background agent keeps its own tool group, so the transcript adapter cannot pre-merge them), and asserts the merged compact summary row Ran 1 agent · Ran 1 tool appears in the message list. With the app-level CompactModeContext.Provider flipped to false the two groups render standalone and the aggregate row never appears, so the suite fails — pinning the invariant end-to-end.

One deviation from the suggested oracle: two consecutive generic tool-call events are merged into a single tool_group by the transcript adapter's adjacency rule before MessageList ever sees them, so a "Ran 2 tools" assertion would pass in both modes; the agent + tool pair is the minimal shape that is genuinely discriminating. The oracle text itself is unit-pinned (formatToolGroupSummary in ToolGroup.test.tsx), and the merge mechanism is pinned by the existing MessageList.dom.test.tsx compact-mode cases. Note: this runner has no Playwright browsers (and no sudo to install system deps), so the spec could not be executed locally; its event shape is copied from the passing visuals parallel agents group scenario and its assertion from unit-pinned format functions.

[rc:3852212506] — no test exercises HIDDEN_SETTING_KEYS → Fixed

Added a SettingsMessage.dom.test.tsx case rendering a daemon settings list that includes ui.compactMode (label "Compact Mode") alongside a visible boolean setting, asserting the panel shows the visible control but not "Compact Mode". Mutation probe confirms it bites: removing 'ui.compactMode' from HIDDEN_SETTING_KEYS fails the test; restoring it returns to green (see Probes).

[rc:3852212513] — orphaned composer Ctrl+O swallow → Fixed (option: restore a no-op global suppression)

Reproduced the analysis against the code: at the merge base the removed branch globally preventDefault-ed Ctrl+O in the capture-phase window handler; after the removal, nothing outside the composer suppresses the key, so the browser's Open File dialog can fire, and the composer's bare { key: 'Ctrl-o', run: () => true } binding is the only thing stopping it while typing — with no comment, a future dead-code sweep would reintroduce the dialog even there. Of the three options offered, restoring the inert global branch best matches the PR's own Test Plan ("Press Ctrl+O: nothing happens"): added a no-op e.preventDefault() branch for e.key === 'o' to the global shortcut handler in App.tsx with a one-line why-comment. The composer binding stays, now consistent with the Ctrl-l/Ctrl-y swallows that accompany their global handlers. Pinned by a new App.test.tsx test asserting defaultPrevented after dispatching Ctrl+O (mutation probe below).

[rv:5018003613] — review wrapper

Its confirmed suggestion (R1-1 redundant nested value={true} providers) was already reported in the triage stage-2 comment and is not part of this round's actionable set; the four inline findings above are the actionable content and are all addressed.

[ic:5407242035] — web-shell visual preview reported a failed scenario render

Investigated, not locally reproducible: the Capture web-shell visuals check for that run concluded SUCCESS, no visuals scenario references any surface this PR removed (no compact/help/settings assertions in the visuals suite), and this sandbox has no Playwright browsers or sudo to install them, so the suite cannot run here. The preview is informational (regenerates on every push); the new head will produce a fresh one. If a scenario fails again there, its logs will name it.

[ic:5409688774] — sandboxed verification status comment

Informational only; no action.

Mutation probes

  • Probe A (new Ctrl+O branch): removed the e.key === 'o' branch from App.tsx → new App global shortcuts test FAILED (expected false to be true, 1 failed); restored → PASSED (1 passed | 539 skipped).
  • Probe B (hidden key): removed 'ui.compactMode' from HIDDEN_SETTING_KEYS → new keeps retired daemon keys like ui.compactMode out of the panel FAILED (textContent contained "Compact Mode"); restored → PASSED (10/10 in the file).
  • The e2e provider-flip probe needs Playwright browsers unavailable in this sandbox; its mechanism is covered by the existing compact-mode unit cases (see rc:3852212502 above).

Verification

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed (eslint . + integration-tests)
  • npx prettier --check on all changed files — passed (settings.md reformatted with prettier --write after the table edit)
  • npm run generate:settings-schema — ran (settings source changed); regenerated settings.schema.json committed
  • Focused Vitest (web-shell): client/App.test.tsx, SettingsMessage.dom.test.tsx, SettingsMessage.test.ts, MessageList.dom.test.tsx, ToolGroup.test.tsx — 778 passed (5 files)
  • Full web-shell suite (npm test in packages/web-shell) — 4235 passed (198 files)
  • Focused Vitest (cli): src/config/settingsSchema.test.ts, src/config/settings.test.ts — 214 passed with the sandbox's QWEN_HOME scrubbed (env -u QWEN_HOME). With the sandbox's QWEN_HOME exported, 12 env-resolution tests in settings.test.ts fail — verified identical failures with the pre-change (HEAD/main) settingsSchema.ts, and this branch does not modify settings.test.ts/settings.ts, so that is a sandbox-environment artifact, not a regression.
  • Integration tests after npm run bundle: not run — nothing in this change is exercised only through the bundled CLI or the integration harness (web-shell client behavior + schema description text).

Commit: 0e6b76a171 on top of merge 8bfbeb2e74.

中文说明

本轮总结 — PR #9993(让紧凑视图成为唯一模式)

冲突解决(--conflict true

已将 origin/main(现为 b331509de4,包含 refactor(web-shell): extract shared contexts (#9954))合并进 PR 分支。唯一冲突在 packages/web-shell/client/components/WebShellTranscript.tsx:main 把两个 todo context provider 重构成了 TodoContextsProvider(从新的 WebShellContexts 模块导入),而本 PR 曾在 transcript 的 CompactModeContext.Provider value={false} 上方添加了一段说明性注释。解决方式:采用 main 的 TodoContextsProvider 结构,并把 PR 的注释重新放回该 provider 上方。已验证解决后的文件与 main 的差异仅为这段注释。App.tsxi18n.tsx 自动合并成功;合并后重新检查了 provider 嵌套(顶层 value={true}、drawer 的两个 provider、已移除的分屏/主聊天包装层)以及 Ctrl+O/i18n 的删除。合并提交:8bfbeb2e74

反馈条目

[rc:3852212496] — 关于 ui.compactMode 的"仍然有效"表述已过时 → 已修复

该发现属实:本 PR 之后没有任何代码再读取 ui.compactMode,但 docs/users/configuration/settings.md 仍写着"Still honored by the web shell."(web shell 仍然遵守),VS Code schema 仍描述为"Compact view (web shell only; not used by the TUI)"。按照 PR 已声明的范围决定(保留该键的注册,使现有配置文件不产生警告),选择修正表述而不是端到端移除该键:

  • packages/cli/src/config/settingsSchema.ts:重写 compactMode 的注释与 description,说明该设置已在所有端退役、保留仅为让现有配置文件不产生警告。
  • 运行了 npm run generate:settings-schema;重新生成的 packages/vscode-ide-companion/schemas/settings.schema.json(description 行)与本次修改在同一提交中。
  • docs/users/configuration/settings.mdui.compactMode 行现改为"RETIRED everywhere. ……写入会被接受但没有任何代码读取该值"。相邻的 ui.compactInline 行——schema 中早已不再定义、却仍宣称"需要先启用 ui.compactMode"——按文档既有的 REMOVED 惯例标记为"REMOVED. ……静默忽略(无启动警告)"。

[rc:3852212502] — 没有判别性测试钉住"始终开启"的 provider → 已修复

packages/web-shell/client/e2e/web-shell.compact-thinking.spec.ts 中新增第二个测试:预置一个后台 Agent 工具调用 + 随后的 grep_search 工具调用(后台 agent 保持独立的工具组,因此转录适配器无法预先合并它们),断言消息列表中出现合并后的紧凑摘要行 Ran 1 agent · Ran 1 tool。若把应用层 CompactModeContext.Provider 翻转为 false,两个工具组将各自独立渲染,聚合行不会出现,测试套件因此失败——端到端钉住该不变量。

与建议 oracle 的一处偏差:两个连续的普通工具调用事件会在 MessageList 看到之前,被转录适配器的相邻规则合并进同一个 tool_group,因此"Ran 2 tools"断言在两种模式下都会通过;agent + 普通工具的组合才是真正具有判别性的最小形态。oracle 文本本身已有单测钉住(ToolGroup.test.tsx 中的 formatToolGroupSummary),合并机制由现有的 MessageList.dom.test.tsx compact-mode 用例钉住。注意:本 runner 没有 Playwright 浏览器(也没有 sudo 安装系统依赖),该 spec 无法在本地执行;其事件形状复制自通过的 visuals parallel agents group 场景,断言文本来自已被单测钉住的格式化函数。

[rc:3852212506] — 没有测试覆盖 HIDDEN_SETTING_KEYS → 已修复

SettingsMessage.dom.test.tsx 新增用例:渲染包含 ui.compactMode(标签"Compact Mode")与一个可见布尔设置的 daemon 设置列表,断言面板显示可见控件但不出现"Compact Mode"。变异探针确认该测试有效:把 'ui.compactMode'HIDDEN_SETTING_KEYS 移除会使测试失败;恢复后回到绿色(见探针部分)。

[rc:3852212513] — 孤儿化的编辑器 Ctrl+O 吞键绑定 → 已修复(选用"恢复全局空抑制分支"方案)

对代码复现了该分析:在 merge base 上,被删除的分支会在捕获阶段的 window 处理器中全局 preventDefault Ctrl+O;删除之后,编辑器之外没有任何代码抑制该键,浏览器可能弹出"打开文件"对话框;而编辑器内裸露的 { key: 'Ctrl-o', run: () => true } 绑定是打字时唯一拦住它的东西——且没有注释,后续"死代码清理"会连它一起删掉,使打字时也弹出对话框。在三个选项中,恢复一个无副作用的全局分支最符合 PR 自己的测试计划("按 Ctrl+O 无反应"):在 App.tsx 的全局快捷键处理器中为 e.key === 'o' 添加了仅调用 e.preventDefault() 的分支,并附一行 why 注释。编辑器绑定保留,现在与伴随各自全局处理器的 Ctrl-l/Ctrl-y 吞键保持一致。由新增的 App.test.tsx 测试(派发 Ctrl+O 后断言 defaultPrevented)钉住(变异探针见下)。

[rv:5018003613] — 评审包装体

其确认的建议(R1-1 冗余的嵌套 value={true} provider)已在分诊 stage-2 评论中报告过,不属于本轮可操作集合;上方四个行内发现即本轮可操作内容,均已处理。

[ic:5407242035] — web-shell 视觉预览报告某场景渲染失败

已调查,本地无法复现:该轮的 Capture web-shell visuals 检查结论为 SUCCESS;visuals 套件没有任何场景引用本 PR 删除的表面(没有 compact/help/settings 相关断言);本沙箱没有 Playwright 浏览器、也没有 sudo 安装系统依赖,无法运行该套件。该预览评论是信息性的(每次推送都会重新生成);新的 head 会产生新的预览。如果那边再次有场景失败,其日志会指明具体场景。

[ic:5409688774] — 沙箱验证状态评论

纯信息性,无需处理。

变异探针

  • 探针 A(新 Ctrl+O 分支):App.tsx 删除 e.key === 'o' 分支 → 新增的 App global shortcuts 测试失败(expected false to be true,1 failed);恢复后 → 通过(1 passed | 539 skipped)。
  • 探针 B(隐藏键):HIDDEN_SETTING_KEYS 移除 'ui.compactMode' → 新增的 keeps retired daemon keys like ui.compactMode out of the panel 失败(textContent 出现了"Compact Mode");恢复后 → 通过(该文件 10/10)。
  • e2e 的 provider 翻转探针需要本沙箱不具备的 Playwright 浏览器;其机制由现有 compact-mode 单测用例覆盖(见上文 rc:3852212502)。

验证

  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过(eslint . + integration-tests)
  • 对所有改动文件运行 npx prettier --check — 通过(表格编辑后用 prettier --write 重新格式化了 settings.md)
  • npm run generate:settings-schema — 已运行(设置源有改动);重新生成的 settings.schema.json 已随提交入库
  • 聚焦 Vitest(web-shell):client/App.test.tsxSettingsMessage.dom.test.tsxSettingsMessage.test.tsMessageList.dom.test.tsxToolGroup.test.tsx — 778 通过(5 个文件)
  • web-shell 全量套件(packages/web-shellnpm test)— 4235 通过(198 个文件)
  • 聚焦 Vitest(cli):src/config/settingsSchema.test.tssrc/config/settings.test.ts — 在清除沙箱的 QWEN_HOME 后(env -u QWEN_HOME)214 全部通过。若带着沙箱导出的 QWEN_HOMEsettings.test.ts 中 12 个环境变量解析测试会失败——已验证使用改动前(HEAD/main)的 settingsSchema.ts 时失败完全相同,且本分支未改动 settings.test.ts/settings.ts,故属沙箱环境产物,非本轮回归。
  • npm run bundle 之后的集成测试:未运行——本次改动没有任何只能经由打包 CLI 或集成测试框架验证的行为(web-shell 客户端行为 + schema 描述文本)。

提交:0e6b76a171,位于合并提交 8bfbeb2e74 之上。

🧭 Gate advisory — this round modified areas outside the PR footprint (machine-measured, not agent-authored):

  • docs
  • packages/cli
  • packages/vscode-ide-companion
    Review the expansion deliberately; the footprint gate is in advisory mode. · 本轮改动了 PR 足迹之外的区域(门自动测量,非 agent 文本),当前足迹门为 advisory 模式,请有意识地审阅该扩张。

Base-conflict check · 基分支冲突检查: conflicted with main — resolved in this push. · 与 main 有冲突——已在本次推送中解决。

Re-review when you have a moment. After round 100 this bot stops and leaves the PR for a human. · 有空请复审;第 100 轮后本 bot 停止并将 PR 交给人工。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline.

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

  • redundant nested CompactModeContext.Provider value={true} wrappers at App.tsx:13633/13703 — already reported (triage stage-2 comment 5407207072)

Not explored to full depth (tool budget reached): "agent 5": did not execute the new/changed tests (App.test.tsx, SettingsMessage.dom.test.tsx, the e2e spec) — the review worktree has no node_modules and npm install + pre….

中文说明

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

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

未探索到全部深度(达到工具调用预算):"agent 5"did not execute the new/changed tests (App.test.tsx, SettingsMessage.dom.test.tsx, the e2e spec) — the review worktree has no node_modules and npm install + pre…

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

Comment on lines +64 to +69
const toolCallEvent = (
id: number,
toolCallId: string,
toolName: string,
rawInput: Record<string, unknown>,
): DaemonEvent => ({

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] The new toolCallEvent builder hand-rolls the same session_update / tool_call daemon-event envelope as the pre-existing agentToolCallEvent in e2e/visuals/screenshots.spec.ts (lines 70-89) — same v: 1, type: 'session_update', and toolCallId/toolName/title/kind/status/rawInput fields; this is only its generalized version. Counting two further inline tool_call envelopes in screenshots.spec.ts, the envelope is now hand-rolled in four places. The canonical home is e2e/utils/mockDaemon.ts: this spec already imports userTextEvent/turnCompleteEvent from it, and every sibling builder delegates to its private sessionUpdateEvent helper. A daemon event contract change (a v bump or a new required field on tool_call updates) must then be applied to every copy and can silently miss one — one spec fails or emits a stale shape while the others move on. Lift a generalized toolCallEvent into mockDaemon.ts and rewrite agentToolCallEvent as a thin call into it, finishing the pattern this diff started:

// e2e/utils/mockDaemon.ts — reuse the existing helper:
export function toolCallEvent(
  toolCallId: string,
  toolName: string,
  rawInput: Record<string, unknown>,
  { id }: { id?: number } = {},
): DaemonEvent {
  return sessionUpdateEvent(
    { sessionUpdate: 'tool_call', toolCallId, toolName, title: toolName, kind: 'other', status: 'completed', rawInput },
    id,
  );
}
// then import { toolCallEvent } here and in screenshots.spec.ts
中文说明

新增的 toolCallEvent 构建器手工构造的 session_update / tool_call daemon 事件封装,与 e2e/visuals/screenshots.spec.ts(70-89 行)中已有的 agentToolCallEvent 完全相同——同样的 v: 1type: 'session_update' 以及 toolCallId/toolName/title/kind/status/rawInput 字段,新构建器只是它的泛化版本。加上 screenshots.spec.ts 中另外两处内联的 tool_call 封装,该封装目前共有四处手工副本。规范位置是 e2e/utils/mockDaemon.ts:本 spec 已从该模块导入 userTextEvent/turnCompleteEvent,且所有兄弟构建器都委托其私有的 sessionUpdateEvent 辅助函数。daemon 事件契约一旦变化(v 升级或 tool_call 新增必填字段),就必须在每处副本同步修改,且很可能漏掉一处——某个 spec 会失败或悄悄发出过时的形状。建议把泛化的 toolCallEvent 提升到 mockDaemon.ts,并将 agentToolCallEvent 改写为对它的薄封装,完成本 diff 已经开始的模式。

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

Comment on lines +5281 to +5283
// The toggle is gone, but the key must stay inert: without the global
// preventDefault the browser's Open File dialog fires on Ctrl+O.
expect(event.defaultPrevented).toBe(true);

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] This replacement test pins only defaultPrevented; it never asserts that the retired toggle's settings write is gone. A mutation probe in an isolated tree at this commit confirmed the gap: re-adding void setWorkspaceSetting('workspace', 'ui.compactMode', true); to the global handler's e.key === 'o' branch leaves this test green — the revived write fires (settingsSetValue called once with ["workspace", "ui.compactMode", true]), defaultPrevented stays true, 1 passed. Nothing else in the suite catches it either: the SettingsMessage test covers the panel surface only, and the e2e merge-row test only reacts to provider changes — so the retired write path can be revived with no red test anywhere. The settingsSetValue mock the deleted compact-mode tests used is still in scope here (reset by the file-level beforeEach), so the guard is one line:

Suggested change
// The toggle is gone, but the key must stay inert: without the global
// preventDefault the browser's Open File dialog fires on Ctrl+O.
expect(event.defaultPrevented).toBe(true);
// The toggle is gone, but the key must stay inert: without the global
// preventDefault the browser's Open File dialog fires on Ctrl+O.
expect(event.defaultPrevented).toBe(true);
expect(settingsSetValue).not.toHaveBeenCalledWith(
'workspace',
'ui.compactMode',
expect.anything(),
);

The probe also verified the fix: the mutant fails with this assertion (spy call quoted above), and clean code with it passes.

中文说明

这个替代测试只钉住了 defaultPrevented,从未断言退役开关的设置写入已经消失。在本提交的隔离树中做的变异探针确认了这个缺口:在全局处理器的 e.key === 'o' 分支中重新加入 void setWorkspaceSetting('workspace', 'ui.compactMode', true);,本测试仍然通过——复活的写入确实触发(settingsSetValue 被以 ["workspace", "ui.compactMode", true] 调用一次),defaultPrevented 保持为 true,1 passed。套件中也没有其他测试能捕获它:SettingsMessage 测试只覆盖设置面板表面,e2e 合并行测试只对 Provider 变化有反应——因此退役的写入路径可以在没有任何测试变红的情况下被复活。被删除的 compact-mode 测试所用的 settingsSetValue mock 在此处仍然可用(由文件级 beforeEach 重置),所以补丁只需一行(见上方 suggestion)。探针同样验证了该修复:变异体加上此断言后失败(spy 调用见上),干净代码加上此断言后通过。

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

钉萁 and others added 2 commits August 25, 2026 15:09
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
The verification gate rejected the round-2 commit because it added
dangerouslyIgnoreUnhandledErrors to packages/web-shell/vitest.config.ts,
a test-config file this PR never legitimately touched. Review feedback
cannot authorize changes to CI/verification machinery, so revert the
file to main. The failing Windows/macOS test lanes the guard targeted
are escalated to a maintainer as an open question instead.

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

Copy link
Copy Markdown
Collaborator

🤖 Addressed the latest review feedback (round 2/100). What changed, and what I pushed back on: · 已处理最新评审反馈(第 2/100 轮)。改动内容与我反驳保留之处如下:

Round summary — PR #9993 (same-run verification repair)

The previous commit (2e00d0f6c7) was REJECTED by deterministic verification for a single reason: it expanded into CI/verification machinery outside the PR footprint — it added dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux' (plus a 7-line comment) to packages/web-shell/vitest.config.ts, a test-config file this PR never legitimately touched. Per the gate's instruction ("Revert these files; if the feedback genuinely requires them, escalate it to a maintainer as an open question instead of implementing it"), this follow-up commit preserves the rejected commit and reverts that one file to byte-identical origin/main. Nothing else changed.

Feedback points

[rc:3853769669] — hand-rolled tool_call envelopes → Resolved (carried by the preserved commit)

Re-verified at this HEAD: the canonical toolCallEvent(toolCallId, toolName, rawInput, { id?, rawOutput? }) lives in e2e/utils/mockDaemon.ts and delegates to the private sessionUpdateEvent helper exactly like the sibling builders; sessionUpdate: 'tool_call' now appears exactly once in the entire e2e tree (inside that builder); web-shell.compact-thinking.spec.ts imports toolCallEvent/thoughtTextEvent from mockDaemon (its local copies deleted); in visuals/screenshots.spec.ts, agentToolCallEvent and the two inline record_artifact envelopes are thin calls into it. This round's revert does not touch these files.

[rc:3853769680] — Ctrl+O replacement test never pinned the retired settings write → Resolved (carried by the preserved commit)

Re-verified at this HEAD: keeps Ctrl+O suppressed after the compact toggle retirement (App.test.tsx) asserts both expect(event.defaultPrevented).toBe(true) and expect(settingsSetValue).not.toHaveBeenCalledWith('workspace', 'ui.compactMode', expect.anything()). Round 2's mutation probe (re-adding the retired write → old test still passed, reproducing the gap → mutant fails with the assertion → clean code passes) is recorded in the round-2 summary. This round's revert does not touch this file.

Redundant nested CompactModeContext.Provider value={true} wrappers (re-confirmed by the review) → Resolved (carried by the preserved commit)

App.tsx now contains only the single round-1 root provider; both inner wrappers are removed. Re-verified at this HEAD.

Failed checks — Test (macos-latest, Node 22.x) / Test (windows-latest, Node 22.x)Escalated as an open question for a maintainer

Round 2's evidence-based diagnosis stands: nothing in this PR's diff is host-platform-sensitive (the Ubuntu lane of the same run was green; both non-Linux lanes failed near the end of their runs); the failure class matches the worker→main onTaskUpdate RPC stall documented by b331509, which v8 coverage report generation at the end of the run triggers under Windows/macOS runner resource pressure, and web-shell's test:ci has carried --coverage since after those lanes went dark.

The only evidence-backed fix lives in web-shell's test config/scripts — the exact area this PR may not touch, as the gate just enforced. So instead of implementing it, the decision is escalated:

Open question for a maintainer: apply on main (or authorize a follow-up PR to apply) the same treatment the cli/core/scripts suites already received in b331509:

--- a/packages/web-shell/vitest.config.ts
     outputFile: {
       junit: '../junit.xml',
     },
+    // The worker->main `onTaskUpdate` RPC runs on a 60s budget; under the
+    // resource pressure of the Windows/macOS runners a stall longer than that
+    // surfaces as an unhandled error and exits an all-green run red (the same
+    // failure mode the cli/core/scripts suites already guard against).
+    dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux',
     coverage: {
+      enabled: !process.env.CI || process.platform === 'linux',
       provider: 'v8',

plus removing --coverage from web-shell's test:ci script so the config's enabled flag actually controls coverage (round 2 probed against vitest 3.2.7 that the CLI flag overrides enabled: false). packages/vscode-ide-companion carries the same unguarded --coverage, for reference.

Until then, these two lanes may stay red for reasons unrelated to this PR's code; the workflow's CI remains the final gate.

What this round changed

  • packages/web-shell/vitest.config.ts — reverted to byte-identical origin/main (removed the 7-line comment and dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux'). No other file touched; the PR's net diff shrinks by 8 lines.

Conflicts

None (--conflict false); no merge performed.

Mutation probes

None applicable: this commit adds no guard, branch, or behavior — it is a pure revert. On Linux the reverted line evaluated to false, which equals vitest's default, so Linux lane behavior is bit-identical before and after (confirmed by the full green web-shell suite below).

Verification

  • npm run build — passed
  • npm run typecheck — passed (all workspace typechecks + typecheck:integration)
  • npm run lint — passed (eslint . --ext .ts,.tsx + eslint integration-tests)
  • Focused Vitest (packages/web-shell, the package owning the changed file), lane command CI=true npm run test:ci with coverage — 198 files, 4235 tests passed (identical to the round-2 baseline)
  • git diff origin/main -- packages/web-shell/vitest.config.ts — empty (file byte-identical to main)
  • Integration tests after npm run bundle — not run; nothing in this change is exercised only through the bundled CLI or integration harness
  • npm run generate:settings-schema — not needed (no settings source changed this round)

Commit: bc3b75f95a on top of 2e00d0f6c7.

中文说明

本轮总结 — PR #9993(同轮验证修复)

上一个提交(2e00d0f6c7)被确定性验证拒绝,原因只有一个:它扩展到了 PR 足迹之外的 CI/验证机制 —— 在 packages/web-shell/vitest.config.ts(一个本 PR 从未正当触碰过的测试配置文件)中添加了 dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux'(外加 7 行注释)。按照门禁的指示("回退这些文件;如果反馈确实需要它们,作为开放问题升级给维护者,而不是直接实现"),本后续提交保留了被拒绝的提交,并将该文件还原为与 origin/main 逐字节一致。没有其他改动。

反馈点

[rc:3853769669] — 手工构造的 tool_call 封装 → 已解决(由保留的提交承载)

在当前 HEAD 上重新验证:规范的 toolCallEvent(toolCallId, toolName, rawInput, { id?, rawOutput? }) 位于 e2e/utils/mockDaemon.ts,与兄弟构建器完全一致地委托给私有 sessionUpdateEvent 辅助函数;sessionUpdate: 'tool_call' 现在整个 e2e 目录中只出现一次(就在该构建器内);web-shell.compact-thinking.spec.ts 从 mockDaemon 导入 toolCallEvent/thoughtTextEvent(本地副本已删除);visuals/screenshots.spec.ts 中的 agentToolCallEvent 与两处内联的 record_artifact 封装都是对它的薄封装调用。本轮的还原不触碰这些文件。

[rc:3853769680] — Ctrl+O 替代测试从未钉住退役的设置写入 → 已解决(由保留的提交承载)

在当前 HEAD 上重新验证:keeps Ctrl+O suppressed after the compact toggle retirement(App.test.tsx)同时断言 expect(event.defaultPrevented).toBe(true)expect(settingsSetValue).not.toHaveBeenCalledWith('workspace', 'ui.compactMode', expect.anything())。第 2 轮的变异探针(重新加入退役写入 → 旧测试仍然通过,缺口复现 → 变异体在新断言下失败 → 干净代码通过)记录于第 2 轮总结。本轮的还原不触碰该文件。

冗余嵌套的 CompactModeContext.Provider value={true} 包裹(评审再次确认)→ 已解决(由保留的提交承载)

App.tsx 现在只包含第 1 轮的唯一根 provider;两个内层包裹已移除。在当前 HEAD 上重新验证。

失败检查 — Test (macos-latest, Node 22.x) / Test (windows-latest, Node 22.x)作为开放问题升级给维护者

第 2 轮基于证据的诊断依然成立:本 PR 的 diff 中没有任何主机平台敏感内容(同一运行的 Ubuntu 通道为绿;两个非 Linux 通道都在运行末尾附近失败);该失败类别与 b331509 记录的 worker→main onTaskUpdate RPC 停滞一致 —— 在 Windows/macOS runner 资源压力下,运行末尾的 v8 coverage 报告生成会触发该停滞,而 web-shell 的 test:ci 自这些通道暗停之后一直带着 --coverage

唯一有证据支撑的修复位于 web-shell 的测试配置/脚本 —— 正是本 PR 不得触碰的区域,门禁刚刚执行了这条规则。因此不直接实现,而是将决定升级:

给维护者的开放问题: 在 main 上应用(或授权一个后续 PR 应用)cli/core/scripts 套件在 b331509 中已经获得的同样处理:

--- a/packages/web-shell/vitest.config.ts
     outputFile: {
       junit: '../junit.xml',
     },
+    // The worker->main `onTaskUpdate` RPC runs on a 60s budget; under the
+    // resource pressure of the Windows/macOS runners a stall longer than that
+    // surfaces as an unhandled error and exits an all-green run red (the same
+    // failure mode the cli/core/scripts suites already guard against).
+    dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux',
     coverage: {
+      enabled: !process.env.CI || process.platform === 'linux',
       provider: 'v8',

外加从 web-shell 的 test:ci 脚本中移除 --coverage,让配置中的 enabled 标志真正控制 coverage(第 2 轮已在 vitest 3.2.7 上探针确认 CLI 标志会覆盖 enabled: false)。供参考:packages/vscode-ide-companion 也带着同样未设防的 --coverage

在此之前,这两个通道可能因与本 PR 代码无关的原因保持红色;工作流的 CI 仍是最终门禁。

本轮改动

  • packages/web-shell/vitest.config.ts — 还原为与 origin/main 逐字节一致(移除 7 行注释与 dangerouslyIgnoreUnhandledErrors: process.platform !== 'linux')。未触碰其他文件;PR 的净 diff 缩小 8 行。

冲突

无(--conflict false);未执行合并。

变异探针

不适用:本提交没有添加任何守卫、分支或行为 —— 是纯粹的还原。在 Linux 上,被还原的那行求值为 false,与 vitest 的默认值相同,因此 Linux 通道行为在还原前后逐位一致(下方 web-shell 全绿套件已确认)。

验证

  • npm run build — 通过
  • npm run typecheck — 通过(所有工作区 typecheck + typecheck:integration
  • npm run lint — 通过(eslint . --ext .ts,.tsx + eslint integration-tests
  • 定向 Vitest(packages/web-shell,改动文件所属包),通道命令 CI=true npm run test:ci 带 coverage — 198 个文件,4235 个测试通过(与第 2 轮基线一致)
  • git diff origin/main -- packages/web-shell/vitest.config.ts — 为空(文件与 main 逐字节一致)
  • npm run bundle 之后的集成测试 — 未运行;本改动没有任何仅通过打包 CLI 或集成 harness 才能验证的行为
  • npm run generate:settings-schema — 无需(本轮未改动 settings 源)

提交:bc3b75f95a,基于 2e00d0f6c7

⚖️ Gate advisory — test coverage shrank this round (machine-measured, not agent-authored): net -55 test lines.

The justification must be in the round summary above; a deletion is only sound when the pinned behavior itself was wrong (evidence shown) or the coverage demonstrably survives elsewhere. · 本轮测试覆盖净减少(门自动测量,非 agent 文本);删除是否成立请对照上方轮次摘要中的理由——仅当被钉住的行为本身有误(需给出证据)或覆盖确有替代时才合理。
🦷 Gate advisory — this round's changed tests all pass on the pre-round tree (machine-measured, not agent-authored). Expected for a refactor or coverage addition; if this round was meant to FIX a defect, that defect did not reproduce. · 本轮改动的测试在轮前树上全部通过(门自动测量,非 agent 文本)。对重构或补充覆盖属正常;若本轮意在修复缺陷,则该缺陷未能复现。

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。

Re-review when you have a moment. After round 100 this bot stops and leaves the PR for a human. · 有空请复审;第 100 轮后本 bot 停止并将 PR 交给人工。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下:

Autofix round summary — PR #9993: no action taken

No new review feedback required a change this round; the PR remains in the
converged state established by the earlier rounds. Nothing was committed and
the working tree is unchanged.

Feedback triage

  • Reviews / inline comments / issue-level comments: none newer than the last evaluation (2026-08-25T14:07:07Z). Verified against the raw payloads, not just the summary: all 6 inline review comments and both automated reviews predate the cutoff and were already resolved in rounds 1–2. The single issue comment newer than the cutoff (2026-08-25T15:42:18Z) is the bot's own round-2 status summary, not new reviewer feedback.
  • Prior findings, re-confirmed resolved at this head: the hand-rolled tool_call envelopes finding (rc:3853769669), the Ctrl+O replacement-test finding (rc:3853769680), and the redundant nested CompactModeContext.Provider wrappers were all verified resolved by the round-2 repair and are unchanged since.

Cancelled checks — diagnosis

All three cancellations (delay-automatic-review, Test (macos-latest, Node 22.x), Test (windows-latest, Node 22.x)) completed at the same second (2026-08-25T16:45:32Z) across two different workflow runs — a coordinated run-level cancellation, not a code failure. Evidence:

  • The primary Test (ubuntu-latest, Node 22.x) lane for the current head is SUCCESS, as are all other checks (Dependency CVE audit, Secret scan, web-shell visuals, Desktop Shell ×2, web-shell E2E smoke, coverage comment).
  • delay-automatic-review is review-workflow plumbing (the delayed-review wait gate), not a signal about the code.
  • The two non-Linux test lanes are the known pre-existing issue already escalated to a maintainer in round 2. The only evidence-backed fix lives in packages/web-shell/vitest.config.ts and the test:ci script — precisely the CI/test-config area this PR is forbidden to touch (the deterministic gate rejected that exact change in round 2, and it was reverted in bc3b75f95a). That open question still stands for a maintainer; it is deliberately not re-implemented here, as doing so would fail the footprint gate again.

Verification (at head bc3b75f95a, clean working tree)

  • npm run build — passed
  • npm run typecheck — passed (all workspace typechecks + typecheck:integration)
  • npm run lint — passed (eslint . --ext .ts,.tsx + eslint integration-tests)
  • Focused Vitest on the changed unit-test files (client/App.test.tsx, client/components/messages/SettingsMessage.dom.test.tsx) — 550 tests passed
  • git diff origin/main -- packages/web-shell/vitest.config.ts — empty (file byte-identical to main)
  • Integration tests after npm run bundle — not run; nothing in this PR's changed behavior is exercised only through the bundled CLI or integration harness (the changes are web-shell UI, covered by the unit/dom suites above).
中文说明

Autofix 轮次总结 — PR #9993:未做任何改动

本轮没有新的评审反馈需要处理;PR 仍保持此前各轮已收敛的状态。本轮未提交任何内容,工作区保持不变。

反馈分诊

  • 评审(Reviews)/ 行内评论(inline comments)/ 议题级评论(issue-level comments): 没有比上次评估时间(2026-08-25T14:07:07Z)更新的内容。我不仅依据摘要,还核对了对应的原始数据:全部 6 条行内评审评论和两次自动评审均早于该截止时间,且已在第 1–2 轮中解决。唯一晚于该截止时间的议题级评论(2026-08-25T15:42:18Z)是机器人自身的第 2 轮状态总结,并非新的评审反馈。
  • 此前各发现项在本 HEAD 上再次确认已解决: 手写 tool_call 封装的发现项(rc:3853769669)、Ctrl+O 替换测试的发现项(rc:3853769680)以及冗余嵌套的 CompactModeContext.Provider 包裹,均已由第 2 轮修复验证为已解决,此后未再改动。

被取消的检查 — 诊断

三个被取消的检查(delay-automatic-reviewTest (macos-latest, Node 22.x)Test (windows-latest, Node 22.x))都在同一秒(2026-08-25T16:45:32Z)、且跨越两个不同的工作流运行完成取消 —— 这是一次协同的、运行级别的取消,而非代码失败。证据如下:

  • 当前 head 的主要测试通道 Test (ubuntu-latest, Node 22.x)SUCCESS,其余各项检查也全部通过(依赖 CVE 审计、密钥扫描、web-shell 视觉、桌面端 Shell ×2、web-shell E2E 冒烟、覆盖率评论)。
  • delay-automatic-review 属于评审工作流的流程环节(延迟评审的等待门),并非针对代码的信号。
  • 两个非 Linux 测试通道是已在第 2 轮升级给维护者的已知既有问题。唯一有证据支撑的修复位于 packages/web-shell/vitest.config.tstest:ci 脚本中 —— 而这正是本 PR 被禁止触碰的 CI/测试配置区域(确定性门禁在第 2 轮已拒绝了这一改动,并已在 bc3b75f95a 中将其回退)。该开放问题仍待维护者决策;此处刻意不再重复实现,否则将再次触发足迹(footprint)门禁而失败。

验证(位于 head bc3b75f95a,工作区干净)

  • npm run build — 通过
  • npm run typecheck — 通过(全部工作区类型检查 + typecheck:integration
  • npm run lint — 通过(eslint . --ext .ts,.tsx + eslint integration-tests
  • 针对改动单元测试文件的聚焦 Vitest(client/App.test.tsxclient/components/messages/SettingsMessage.dom.test.tsx)— 550 个测试全部通过
  • git diff origin/main -- packages/web-shell/vitest.config.ts — 为空(该文件与 main 逐字节一致)
  • npm run bundle 之后的集成测试 — 未运行;本 PR 改动的行为没有任何仅通过打包后的 CLI 或集成测试框架才能覆盖的部分(改动均为 web-shell UI,已由上述单元/ DOM 测试套件覆盖)。

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

@ytahdn

ytahdn commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /verify

@qwen-code-ci-bot

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

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

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

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

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

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

Verification report

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

Ran the PR in an isolated, token-free container: A/B against the base build, mock-free harness assertions, mutation matrix, targeted gates. Advisory evidence for human reviewers — not a review, an approval, or a CI check. Follow-up round: previous findings re-measured at the new head (status table below).

Scripted assertions: 71 passed · 0 failed · 71 total

Verified head: bc3b75f95ac3199cbf06cd2f1a35f6a7b05fa6cb (merge base tip: 2ef511a07ff98acd76a172c12ae5479a839394e3).

中文 — 判定:✅ 通过 · 可合入(agent 判定)
  • 结论merge-ready,71 项脚本化断言全部通过,0 项意外失败。本轮为跟进轮,对上一轮 5 项 finding 在新 head(bc3b75f9)上全部重新测量(见 "Previous findings" 表)。
  • A/B 结论:中心主张成立且 load-bearing。base 臂 10/10:主聊天槽位 CompactModeContextui.compactMode 设置变化(无设置/true/false → false/true/false),Ctrl+O 写 ('workspace','ui.compactMode',true) 并翻转上下文,Help 中英 Ctrl+O 条目在、ui.compactInline 描述符隐藏;head 臂 10/10:上下文恒 true、Ctrl+O 零写入且仍 preventDefault、Help 条目移除、compactInline 若被下发将渲染(daemon schema 无此键,生产不可达)。
  • 本轮新增验证:(1) 文档/注释新声明"nothing reads the value anymore"经全仓 census 证实(ui.compactMode 仅剩 daemon allowlist、隐藏集合与两个测试);(2) 文档"silently ignored (no startup warning)"用真实 settings 加载器证实(head 与 base 均零可见告警,legacy-key 阳性对照可观测告警);(3) 新 Playwright 合并断言在组件级被证实可判别(context on → 单条合并摘要行 call-agent-audit,call-grep-logs;off → 两条独立行);(4) 突变矩阵:M1(根 Provider true→false)下仓库 198 个测试文件/4235 测试仍全绿(单元门禁仍未钉住常开接线,但新 e2e 钉住,且仅在 nightly 回归运行,见 Finding 1/2);M2(删 preventDefault)、M3(删隐藏键)各被 PR 新增的对应测试精确杀死(各 1 红,断言信息为预期 vs 实际)。
  • Findings(均不阻塞):Finding 1(Suggestion)单元门禁未钉住常开接线,残留但已被 nightly e2e 缓解;Finding 2(Note)新钉住测试不进 PR CI;Finding 3(Nit)ui.compactInline 若被下发将渲染(生产不可达);Finding 4(Nit)"保留键以免告警"的理由措辞不准确(嵌套未知键本就不告警,声明本身为真);Finding 5(Nit)无关空行删除仍在。
  • 未覆盖:Playwright e2e 本容器无浏览器未运行(新测试的判别力以组件级 harness 代替验证);逐 commit 归因(shallow checkout);base 全量套件(仅做 settings.test.ts 失败归因,两臂 12 个失败逐名相同,系环境性、与本 PR 无关)。
Verification report

PR #9993 deep verification (round 2) — feat(web-shell): make compact view the only mode

Verdict: merge-ready — 71/71 scripted assertions passed (0 unexpected failures). Verified head: bc3b75f95ac3199cbf06cd2f1a35f6a7b05fa6cb; base tip 2ef511a07f. Follow-up round after the round-1 report (verified head e0a526a0); the delta is a merge of main plus three fix commits (0e6b76a1 review feedback, 2e00d0f6 round-2 review, bc3b75f9 revert of an out-of-footprint test-config guard). Per-commit attribution is out of reach (shallow checkout: rev-list HEAD^1..HEAD^2 = 1 vs 7 commits in the metadata); the aggregate HEAD^1..HEAD diff is what was verified.

Previous findings — status at the new head (re-measured, not diffed)

# Finding (round 1) Severity Status at bc3b75f9
1 Nothing pins the always-on wiring (M1 mutation survived all 4209 repo tests) Suggestion Partially addressed. The PR added a Playwright test (web-shell.compact-thinking.spec.ts, "compact view merges an agent group and a following tool into one summary row") whose assertion discriminates the provider value — verified at the component level with the real MessageList (context on → one merged summary row data-tool-ids=call-agent-audit,call-grep-logs; off → two standalone rows, no summary; 01/02 captures). Re-measured M1 at the new head: the repo's own 198 test files / 4235 tests stay green under the revert (only my 4 harness cells go red), so the unit gate still does not pin the wiring. However the pin now exists in the nightly web-shell-browser-regression job (e2e.yml, full test:e2e) — see Finding 2 for the CI-topology caveat.
2 ui.compactInline would render in the settings panel if ever served Nit Stands (by design). Re-measured on both arms: served descriptor hidden on base, shown on head. Still unreachable in production: the daemon schema has no compactInline key (re-verified at both arms), so no descriptor can arrive.
3 Stale daemon comment ("kept so the web shell's independent compact toggle can still persist") Nit Fixed. The PR updated settingsSchema.ts comment + description, the vscode companion schema, and docs/users/configuration/settings.md. New claims verified: census shows zero readers of the ui.compactMode value repo-wide (only the daemon write allowlist, the web-shell hidden-set entry, and two tests reference the key); writes are still accepted (workspace-settings.ts:55); settings files carrying the key load with zero visible warnings (real loader, both arms). One wording nuance survives — see Finding 4.
4 Changed e2e spec no longer discriminates base from head Note Addressed. The new merge test discriminates (component-level proof above). The renamed first test remains a regression-only test for head, which is fine once a discriminator exists.
5 Cosmetic stray blank-line deletion in App.tsx Note Stands. The blank line between availableSkillInfos and availableSessionSkillInfos is still deleted; Prettier-clean, harmless.

Central claim + A/B table

Central claim: the web shell renders every message surface compact unconditionally (single root CompactModeContext.Provider value={true}; the embedded read-only WebShellTranscript keeps its explicit value={false}), and the toggle path (Ctrl+O handler → compactMode state → ui.compactMode workspace write → per-surface providers) is fully removed while Ctrl+O stays suppressed.

Harness: harness/build-harnesses.mjs extracts the App.test.tsx scaffold (lines 1–1737 + 4768–5232, verified byte-identical on both arms) with exactly two instrumentation insertions in the mocked MessageList (read CompactModeContext, record it), plus a help/settings harness and a real-MessageList merge harness. Same files on both arms; VERIFY_ARM selects expectations. Base control: git worktree add tmp/base-tree HEAD^1; the PR leaves package.json/lockfile untouched; PR-modified workspaces resolve from the base tree (realpath-asserted), PR-untouched internal workspaces (sdk, webui, core, web-templates — diff-verified content-identical) use the pre-built head copies because a scratch worktree has no dist/. Witnesses: 01-ab-cells-base-arm.png, 02-ab-cells-head-arm.png.

Cell (identical scenario both arms) Oracle base (2ef511a0) head (bc3b75f9)
no daemon setting context at the main-chat MessageList slot false true (the flip)
ui.compactMode effective=true same true true
ui.compactMode effective=false same false true (setting ignored)
Ctrl+O dispatched writes + context + defaultPrevented 1 write ('workspace','ui.compactMode',true), context flips to true, defaultPrevented=true 0 writes, context stays true, defaultPrevented=true
HelpDialog en / zh-CN Ctrl+O + Toggle compact mode / 切换紧凑模式 rows present absent (Ctrl+L control present on both)
Settings panel: served ui.compactMode row rendered hidden hidden (unchanged, as described)
Settings panel: served ui.compactInline row rendered hidden shown (Finding 3; unreachable in production)
Real MessageList, context on agent group + following tool group one merged msg-summary-* row, data-tool-ids=call-agent-audit,call-grep-logs identical (A/A)
Real MessageList, context off same fixture two standalone rows, no summary identical (A/A)

Static census (logs/static-checks-head.log / -base.log): head has exactly 2 provider opens (root value={true}, transcript value={false}), zero toggle remnants in App.tsx, zero residue of the removed i18n keys; base has 5 providers (4 bound to compactMode state + transcript) and the full toggle wiring.

Secondary delta checks:

Check Oracle Result
toolCallEvent/thoughtTextEvent refactor (screenshots.spec.ts ×3, compact-thinking.spec.ts ×1) helper output vs the deleted inline literals, deep-equal 4/4 byte-equal (05-fixture-byte-compare.png, harness/fixture-compare.ts)
Docs claim "no startup warning" for retired keys real loadSettings + getSettingsWarnings on scratch QWEN_HOME files, both arms zero visible warnings; legacy-key positive control observed (04-settings-doc-claim-cells.png)
Web-shell suite at head vitest 198 files / 4235 tests green (06-gate-head-suite-summary.png)

Corrections

  • The new settingsSchema.ts comment and docs/users/configuration/settings.md row justify keeping ui.compactMode registered "so settings files that still carry the key load without warnings". The claim is true, but the stated rationale is not the mechanism: I ran the real loader against a settings file carrying the unregistered ui.compactInline and it produced zero visible warnings on both arms (nested unknown keys are never validated; unknown top-level keys are debug-log-only). Registration's real effects are elsewhere (daemon write routes accept the key; /config get ui.compactMode resolves). This is a correction to the description's rationale, not a request to change the code — see Finding 4.

Findings (non-blocking)

  1. The unit gate still does not pin the always-on wiring (Suggestion, coverage gap, residual from round 1). Re-measured: reverting the root provider to value={false} in a scratch tree leaves all 198 repo web-shell test files / 4235 tests green; only my 4 harness cells go red (03-mutation-matrix.png). The new Playwright merge test closes this at the browser level, and its discriminating assertion is real (component-level proof in the A/B table), but see Finding 2 for where it runs. The cheapest unit-level pin remains what round 1 named: an App-level test asserting the message-list slot sees true with no settings (my wiring cell 1 is exactly that test). Reproduce: git worktree add tmp/m1 HEAD && # edit App.tsx: <CompactModeContext.Provider value={true}> -> value={false} && cd tmp/m1/packages/web-shell && npx vitest run → 198/198 repo files green. Positive control in the same file: deleting e.preventDefault() in the e.key === 'o' branch turns exactly the new keeps Ctrl+O suppressed test red (expected false to be true), proving the command collects App.tsx and can fail.
  2. The new pinning test runs only in the nightly regression, not in PR CI (Note). web-shell-browser-regression (e2e.yml) is gated on schedule/workflow_dispatch; the PR smoke job (ci.yml) runs test:e2e:smoke = --grep @smoke, and neither new test carries the tag; the PR visuals job runs only e2e/visuals/. So a future revert of the wiring goes red at most once a day, never on the PR that reverts it. Not blocking (nightly signal exists; the unit pin from Finding 1 would make it instant). Reproduce: grep -n "schedule\|workflow_dispatch\|@smoke" .github/workflows/e2e.yml .github/workflows/ci.yml packages/web-shell/client/e2e/web-shell.compact-thinking.spec.ts.
  3. ui.compactInline would render in the settings panel if ever served (Nit, stands). Re-measured on both arms; unreachable in production (no daemon descriptor can exist). Worth a comment or restoring the hidden-set entry; not a defect as shipped. Reproduce: render SettingsMessage with a served ui.compactInline descriptor (harness help-settings.verify.test.tsx, cell "served ui.compactInline descriptor").
  4. "Kept so settings files do not warn" rationale is inaccurate (Nit). See Corrections. The observable claim holds (zero warnings, both arms, 04-settings-doc-claim-cells.png); the rationale understates the loader (nested unknown keys never warn). Suggest wording like "kept schema-registered so the key remains writable/readable via the settings routes and /config". Reproduce: npx tsx harness/settings-warning-check.ts 1 with CLI_ROOT pointed at either arm — zero visible warnings for the unregistered ui.compactInline.
  5. Cosmetic stray blank-line deletion in App.tsx (Nit, stands). Prettier-clean, harmless.

Not covered

  • Playwright e2e execution — the container has no Playwright browsers; the changed spec and the Reviewer Test Plan's browser steps were verified at the jsdom/component level instead (wiring, help, settings, merge cells). The harness reproduces the shapes the e2e asserts (same fixture event sequence), not a live browser render.
  • Per-commit attribution — shallow checkout (7 commits in metadata, 1 reachable); the aggregate diff was verified; the out-of-footprint guard reverted by bc3b75f9 is visible only as its absence in the aggregate diff.
  • Base full suite — head's web-shell suite had zero failures (198 files / 4235 tests), so no broad attribution was needed; the cli settings.test.ts 12 failures were attributed by byte-identical failing-test names on both arms (logs/settings-test-fails-*.log — env/HOME-dependent tests in this container, unrelated to the PR; the same file's passing legacy/unknown-key tests corroborate the warnings mechanism my harness measured).
  • vscode-ide-companion schema — description-only change; no repo test consumes that file; validated by Prettier (valid JSON) only.
  • Flakiness gate — run by CI separately, not duplicated here.

Methodology

Environment: CI merge-ref checkout (depth 2; HEAD merge commit, HEAD^1 base tip, HEAD^2 PR head), npm ci + npm run build pre-run at HEAD. A/B control: scratch worktree at HEAD^1 with nested per-package node_modules symlinked (lockfile untouched by the PR) and internal @qwen-code/* links realpath-asserted — PR-modified workspaces resolve into the base tree; PR-untouched ones (diff-verified identical) use head's built copies since a scratch tree has no dist/. Mutations ran in a third scratch worktree at HEAD (self-contained links + head dist symlink for the build-artifact test); all worktrees removed afterwards. Harnesses are mock-free with respect to the units under test (real App, real MessageList, real HelpDialog/SettingsMessage, real settings loader via QWEN_HOME scratch dirs; only the daemon SDK and heavy siblings mocked, using the repo's own scaffolding). Gates: web-shell vitest 198 files / 4235 tests green at head; cli settingsSchema/settingsUtils/loadedSettingsAdapter suites green; npm run typecheck exit 0; ESLint + Prettier on the changed files, each with a planted-violation liveness control that was caught. Raw logs in logs/, harness sources in harness/, captures in evidence/ (6 PNGs via scripts/verify-capture.mjs).

Flakiness gate log

e2e suite, out of gate scope: packages/web-shell/client/e2e/visuals/screenshots.spec.ts
e2e suite, out of gate scope: packages/web-shell/client/e2e/web-shell.compact-thinking.spec.ts
rounds=5 files=2 skipped=2
file packages/web-shell/client/App.test.tsx: (cd packages/web-shell) npx --no-install vitest run ./client/App.test.tsx
file packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: (cd packages/web-shell) npx --no-install vitest run ./client/components/messages/SettingsMessage.dom.test.tsx


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/web-shell/client/App.test.tsx: PPPPP
  packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 1 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 2 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 2 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 3 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 3 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 4 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 4 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 5 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 5 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)

Evidence images

01-ab-cells-base-arm

02-ab-cells-head-arm

03-mutation-matrix

04-settings-doc-claim-cells

05-fixture-byte-compare

06-gate-head-suite-summary

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

Qwen Code · sandboxed verification

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

🤖 Reviewed the latest feedback — no changes needed. Why, point by point: · 已审阅最新反馈——无需改动。逐点说明原因如下:

Autofix round summary — no changes needed (PR #9993)

Reviewed all feedback newer than the last evaluation (2026-08-25T16:45:32Z). Nothing actionable this round:

  • Reviews: none.
  • Inline comments: none. All existing inline findings predate the last evaluation and were already triaged in earlier rounds.
  • Failed / still-red checks: none. Three checks show CANCELLED (delay-automatic-review, Test (macos-latest, Node 22.x), Test (windows-latest, Node 22.x)), but all three were cancelled at exactly the last-evaluation timestamp (2026-08-25T16:45:32Z) — superseded by this round's evaluation, not failed by the code. The workflow's failed-checks and still-red-checks sections are empty.
  • Issue-level comments: one new item — the CI bot's status note that sandboxed verification is running, triggered by a maintainer /verify command. It is informational: it requests no code change, and the verification run is owned by the workflow, which will post its own report when it completes.
  • Retry context: no prior verification-gate rejection, no budget warning, no same-run repair.
  • Diff growth: source 24 / test 44 net lines vs budgets of 400/400 — well within budget; no growth audit required.

No code changes were made and nothing was committed. The branch remains at bc3b75f95a.

中文说明

Autofix 轮次总结 — 无需改动(PR #9993

已审阅上次评估(2026-08-25T16:45:32Z)之后的全部反馈。本轮没有可处理的事项:

  • 评审(Reviews): 无。
  • 行内评论(Inline comments): 无。所有现存行内发现均早于上次评估,且已在之前的轮次中处理完毕。
  • 失败 / 持续失败的检查: 无。有 3 个检查显示为 CANCELLEDdelay-automatic-reviewTest (macos-latest, Node 22.x)Test (windows-latest, Node 22.x)),但三者均恰好在上次评估的时间点(2026-08-25T16:45:32Z)被取消——是被本轮评估取代,而非代码导致失败。工作流的"失败检查"和"仍然失败的检查"两个部分均为空。
  • Issue 级评论: 仅一条新评论——CI 机器人发布的通知,说明沙箱验证正在运行(由维护者的 /verify 命令触发)。该评论仅为信息性内容:不要求任何代码改动;该验证运行由工作流本身负责,完成后会自行发布报告。
  • 重试上下文: 无此前的验证门禁拒绝记录,无预算警告,无同轮修复任务。
  • Diff 增长: 源码净增 24 行 / 测试净增 44 行,预算为 400/400——远低于预算,无需增长审计。

本轮未做任何代码改动,也未提交任何内容。分支仍停留在 bc3b75f95a

Base-conflict check · 基分支冲突检查: no conflict with main. · 与 main 无冲突。


🧠 Handled by Qwen Code · model/模型 qwen3.8-max

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

Scope: web-shell source (App.tsx, SettingsMessage.tsx, WebShellTranscript.tsx, HelpDialog.tsx), settings schema + docs, i18n, and tests. useComposerCore.ts (CodeMirror swallow binding) read but not in diff.

Checked: (1) Root CompactModeContext.Provider value={true} wraps correctly from line 11789 to 13713, enclosing split panes, main chat, and the artifact drawer. (2) WebShellTranscript explicit value={false} override for embedded API — correct, documented with comment. (3) Ctrl+O global handler retains e.preventDefault(); only handleToggleCompact() call removed. (4) ui.compactInline removal from HIDDEN_SETTING_KEYS is clean — confirmed not present in settingsSchema.ts at head. (5) toolCallEvent builder in mockDaemon.ts — exported from one canonical location, imported by both spec files. (6) SubagentDetail.integration.test.tsx supplies its own CompactModeContext.Provider value={true} — consistent with the root provider in the live app.

CI: Ubuntu tests pass. macOS and Windows jobs report cancelled (not failure) in the jobs API — both have conclusion:null on the active step, consistent with external cancellation by the delay-automatic-review job that timed out at 1 h 2 m and cancelled the run. Integration Tests (CLI, No Sandbox) SKIPPED — web-shell-only change, CLI integration tests not relevant. No code-level test failures.

Cross-check against the bot's six suggestions (all refuted by the PR as written):

  1. settings.md / VS Code schema still say the setting is honored by the web shellrefuted. Both are updated in this diff: settings.md:140 now reads "RETIRED everywhere"; settings.schema.json:453 now reads "Retired: compact view is always on in both...".

  2. No discriminating test for the root CompactModeContext.Provider value={true}refuted. The new e2e test "compact view merges an agent group and a following tool into one summary row" streams two tool calls and asserts the merged "Ran 1 agent · Ran 1 tool" text — this assertion fails when the provider is false.

  3. No test for HIDDEN_SETTING_KEYSrefuted. SettingsMessage.dom.test.tsx adds a discriminating test that renders a settings list including ui.compactMode and asserts it is absent from the panel (with a visible sibling control to keep the assertion non-vacuous).

  4. Ctrl+O outside the composer fires the browser Open File dialogrefuted. The global handler retains e.preventDefault() with an explicit comment documenting the intent; only handleToggleCompact() was removed from the branch. The CodeMirror swallow binding in useComposerCore.ts is now redundant but harmless.

  5. toolCallEvent builder duplicated in four placesrefuted. This PR lifts toolCallEvent into mockDaemon.ts (the canonical home) and both spec files import it from there. The suggestion code the bot provided is exactly what the PR already does.

  6. Replacement test does not assert the settings write is gonerefuted. The test in App.test.tsx already includes both assertions: expect(event.defaultPrevented).toBe(true) and expect(settingsSetValue).not.toHaveBeenCalledWith('workspace', 'ui.compactMode', expect.anything()).

No blockers. Code is correct, scope is complete, test coverage is discriminating.

Reviewed with AI assistance.

@ytahdn

ytahdn commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

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

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

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

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

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

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

Verification report

PR #9993 deep verification (round 3) — feat(web-shell): make compact view the only mode

Verdict: merge-ready — 68/68 scripted assertions passed (0 unexpected failures). Verified head: bc3b75f95ac3199cbf06cd2f1a35f6a7b05fa6cb; base tip 2ef511a07ff98acd76a172c12ae5479a839394e3 (merge commit 2ab46b2c). Follow-up round after the round-2 report, which verified the identical head and base tip — see the input-identity note below; all central measurements were nonetheless re-run fresh in this round.

中文 — 判定:✅ 通过 · 可合入(agent 判定)
  • 结论merge-ready,68 项脚本化断言全部通过,0 项意外失败。本轮为跟进轮:上一轮(round 2)验证的 head(bc3b75f9)与 base tip(2ef511a0)与本轮完全相同(输入闭包被证明字节级一致),但本轮仍对所有核心测量做了全新重跑,不依赖旧报告数字。
  • A/B 结论:中心主张成立且 load-bearing(见 "Central claim + A/B" 表,证据图 01-ab-cells-head-arm.png / 02-ab-cells-base-arm.png)。base 臂:主聊天槽位 context 随 ui.compactMode 设置变化(无设置/true/false → false/true/false),Ctrl+O 触发 1 次 ('workspace','ui.compactMode',true) 写入并翻转 context,Help 中英文 Ctrl+O 条目在;head 臂:context 恒为 true(设置被忽略)、Ctrl+O 零写入但仍 preventDefault、Help 条目移除、ui.compactInline 若被下发将显示(生产不可达)。
  • 本轮新增/重跑:突变矩阵(M1 根 Provider true→false 下仓库 198 文件/4235 测试仍全绿,仅 4 个 wiring 单元变红;M2 删 preventDefault、M3 删隐藏键各被 PR 新增测试精确杀死,均 1 红且断言为预期 vs 实际);e2e helper 重构 F1–F4 与删除的字面量逐字节一致(4/4);文档"无启动告警"声明用真实加载器在两臂重测(零可见告警,legacy 键阳性对照可告警);全仓 census 证实 ui.compactMode 无任何值读取方(仅 daemon 写入白名单、隐藏集合、两个测试);门禁:head 套件 198/4235 绿、npm run typecheck exit 0、ESLint/Prettier 于改动文件干净且各带种植违规的活性对照。
  • Findings(均不阻塞,全部自 round 2 原样复存):F1(Suggestion)单元门禁未钉住常开接线,钉住在 nightly e2e;F2(Note)新钉住测试不进 PR CI(schedule-only lane,无 @​smoke 标签,本轮重新核实);F3(Nit)ui.compactInline 若被下发将显示(生产不可达);F4(Nit)"保留键以免告警"的措辞不准确(嵌套未知键本就不告警);F5(Nit)无关空行删除仍在。
  • 未覆盖:Playwright e2e 实际执行(容器无浏览器二进制,已核实 ~/.cache/ms-playwright 不存在;判别力以组件级 harness 代替验证);逐 commit 归因(shallow checkout,1 个可达 vs 元数据 7 个);base 臂全量套件(仅做 A/B 与 census,未跑全套)。

Input identity with round 2 (why this is a delta-zero follow-up)

The round-2 report cites verified head bc3b75f95ac3199cbf06cd2f1a35f6a7b05fa6cb and merge base tip 2ef511a07ff98acd76a172c12ae5479a839394e3. This round's checkout has HEAD^2 = bc3b75f95ac… and HEAD^1 = 2ef511a07…the same commit objects, so the verified input closure (the entire merged tree, including lockfile — which the PR does not touch — fixtures, and config) is byte-identical to what round 2 measured. Per the follow-up rule's input-closure shortcut, round-2 findings could be carried forward on that basis alone; instead, every central measurement below was re-executed fresh in this round and reproduced round 2's numbers exactly (head suite 198 files / 4235 tests; M1 survival; census; fixture byte-equality). What was compared: git rev-parse HEAD^1 HEAD^2 against the OIDs quoted in previous-report.md, plus the aggregate git diff HEAD^1..HEAD footprint (14 files, none of them package.json/package-lock.json/vitest.config.ts).

Previous findings — status at the new head (re-measured, not diffed)

# Finding (round 2) Severity Status at bc3b75f9 (round 3)
1 Nothing pins the always-on wiring at the unit level (M1 survived the repo suite) Suggestion Stands. Re-measured fresh: reverting the root provider to value={false} leaves all 198 repo test files / 4235 tests green (03-m1-mutation-vs-repo-suite.png); only my 4 wiring cells go red. The pin remains the nightly Playwright merge test, whose discriminating assertion is re-proven at the component level (cells M-on/M-off + T1).
2 The new pinning e2e runs only in the nightly regression, not PR CI Note Stands. Re-verified at this head: web-shell-browser-regression is gated on schedule/workflow_dispatch (.github/workflows/e2e.yml:267-268); test:e2e:smoke greps @smoke (packages/web-shell/package.json:28); neither changed spec carries the tag (logs/ci-topology-recheck.log).
3 ui.compactInline would render in the settings panel if ever served Nit Stands (by design). Re-measured on both arms (cell S2): hidden on base, shown on head; still unreachable in production — zero ui.compactInline references remain in non-test code at head (census below).
4 "Kept so settings files do not warn" rationale understates the loader Nit Stands. Re-measured with the real loader on both arms (cells C1/C2, 08-settings-doc-claim-cells.png): zero visible warnings for the retired keys, and the mechanism is that nested unknown keys are never validated (getSettingsFileKeyWarnings iterates top-level keys only; top-level unknowns are debug-log-only) — see Corrections.
5 Cosmetic stray blank-line deletion in App.tsx Nit Stands. Present in the aggregate diff (availableSkillInfos / availableSessionSkillInfos); Prettier-clean, harmless.

Central claim + A/B table

Central claim: the web shell renders every message surface compact unconditionally (single root CompactModeContext.Provider value={true}; the embedded read-only WebShellTranscript keeps its explicit value={false}), and the toggle path (Ctrl+O handler → compactMode state → ui.compactMode workspace write → per-surface providers) is fully removed while Ctrl+O stays suppressed.

Harness: harness/build-harnesses.mjs extracts the repo's own scaffolds — App.test.tsx lines 1–1737 + 4768–5232 and MessageList.dom.test.tsx lines 1–155 — sentinel-checked and sha256-verified byte-identical across both arms (logs/scaffold-hashes-{head,base}.json), with exactly two instrumentation insertions in the mocked MessageList (read CompactModeContext, record it as data-compact-mode). Arm expectations are selected by VERIFY_ARM. Base control: scratch worktree at HEAD^1 with root + per-package node_modules symlinked (the PR touches no package.json/lockfile — clean control); PR-untouched internal workspaces (sdk, webui, core, web-templates, acp-bridge) diff-verified content-identical (git diff HEAD^1..HEAD --stat empty for all five), so their head copies are confound-free. Witnesses: 01-ab-cells-head-arm.png, 02-ab-cells-base-arm.png.

Cell (identical scenario both arms) Oracle base (2ef511a0) head (bc3b75f9)
W1: no daemon setting context at the main-chat MessageList slot false true (the flip)
W2: ui.compactMode effective=true same true true
W3: ui.compactMode effective=false same false true (setting ignored)
K1: Ctrl+O dispatched writes + context + defaultPrevented 1 write ('workspace','ui.compactMode',true), context flips to true, defaultPrevented=true 0 writes, context stays true, defaultPrevented=true
H1/H2: HelpDialog en / zh-CN Ctrl+O + Toggle compact mode / 切换紧凑模式 rows present absent (control row Ctrl+L present on both)
S1: served ui.compactMode descriptor settings-panel row hidden hidden (unchanged, as described)
S2: served ui.compactInline descriptor settings-panel row hidden shown (Finding 3; unreachable in production)
M-on: real MessageList, context on agent group + following grep group one merged msg-summary-* row, data-tool-ids=call-agent-audit,call-grep-logs, no standalone rows identical (A/A — MessageList untouched by the PR)
M-off: real MessageList, context off same fixture two standalone rows, no summary identical (A/A)
T1: merged-group summary text real formatToolGroupSummary + real EN i18n Ran 1 agent · Ran 1 tool identical (A/A) — ties the exact e2e literal to the merged array

Static census (logs/static-checks-both-arms.log): head has exactly 1 provider in App.tsx (value={true}) + the transcript's value={false}; zero handleToggleCompact/COMPACT_MODE_SETTING_KEY/compactModeRef remnants; zero residue of the removed i18n keys. Base has 4 state-bound providers in App.tsx + transcript, with the full toggle wiring and the removed i18n keys present.

Secondary checks:

Check Oracle Result
toolCallEvent/thoughtTextEvent refactor (screenshots.spec.ts ×3, compact-thinking.spec.ts ×1) helper output vs the deleted inline literals, JSON-string + deep-equal 4/4 byte-equal (07-fixture-byte-compare.png, harness/generated/verify-fixture-compare.test.ts)
Docs claim "no startup warning" for retired keys real loadSettings + getSettingsWarnings on scratch QWEN_HOME files, both arms zero visible warnings, files loaded; legacy-key positive control warns on both arms (08-settings-doc-claim-cells.png)
Repo-wide census of ui.compactMode grep exactly 4 non-schema code files at head: daemon write allowlist (workspace-settings.ts:55), web-shell hidden set (SettingsMessage.tsx:119), and the 2 tests asserting the retirement; zero ui.compactInline references; zero value readers
Web-shell suite at head vitest 198 files / 4235 tests green (06-gate-head-suite-summary.png)
CI topology (Finding 2) workflow/script grep nightly-only lane, no @smoke tag (logs/ci-topology-recheck.log)

Corrections

  • (Carried from round 2, re-derived fresh) The new settingsSchema.ts comment and docs/users/configuration/settings.md row justify keeping ui.compactMode registered "so settings files that still carry the key load without warnings". The observable claim is true (re-measured, both arms, cell C1), but the stated rationale is not the mechanism: nested unknown keys are never validated at all — getSettingsFileKeyWarnings (packages/cli/src/config/settings.ts:209) iterates only top-level keys, and unknown top-level keys go to debugLogger.warn, not the visible warning list. So even an unregistered ui.compactInline under ui loads silently (re-measured in cell C1, which carries both keys). Registration's real effects are elsewhere: daemon write routes accept the key (workspace-settings.ts:55) and the schema description documents the retirement. This is a correction to the description's rationale, not a request to change the code — see Finding 4.

Findings (non-blocking; all carried over from round 2, all re-measured)

  1. The unit gate still does not pin the always-on wiring (Suggestion, coverage gap). Reverting the root provider to value={false} in a scratch tree leaves all 198 repo web-shell test files / 4235 tests green (03-m1-mutation-vs-repo-suite.png); only my 4 harness wiring cells go red (W1/W2/W3/K1, expected reds). The pin exists at the browser level (the new Playwright merge test), and its discriminating assertion is real — component-level cells M-on/M-off show the merge shape flips with the context, and T1 shows the merged array formats to exactly the asserted string — but see Finding 2 for where that test runs. Cheapest unit-level pin remains round 1's suggestion: an App-level test asserting the message-list slot sees true with no settings (harness cell W1 is exactly that test). Reproduce: apply M1 (<CompactModeContext.Provider value={true}>value={false} in App.tsx:11789) and run (cd packages/web-shell && npx vitest run) → 198/198 files green. Positive control landed in the mutated file: M2 below turns exactly one test of App.test.tsx red, proving the command collects the file and can fail.
  2. The new pinning test runs only in the nightly regression, not in PR CI (Note). Re-verified at this head (logs/ci-topology-recheck.log): web-shell-browser-regression (.github/workflows/e2e.yml:267-268) requires schedule or workflow_dispatch; test:e2e:smoke runs --grep @smoke; neither changed spec carries the tag. A future revert of the wiring goes red at most once a day, never on the PR that reverts it. Not blocking (nightly signal exists; the unit pin from Finding 1 would make it instant).
  3. ui.compactInline would render in the settings panel if ever served (Nit, stands). Re-measured on both arms (cell S2); unreachable in production (zero non-test references at head, no daemon descriptor can exist). Worth a comment or restoring the hidden-set entry; not a defect as shipped. Reproduce: harness/generated/verify-help-settings.test.tsx, cell S2.
  4. "Kept so settings files do not warn" rationale is inaccurate (Nit, stands). See Corrections. Reproduce: npx tsx harness/settings-warning-check.ts <treeRoot> — C1 zero visible warnings on both arms including the unregistered nested ui.compactInline.
  5. Cosmetic stray blank-line deletion in App.tsx (Nit, stands). Prettier-clean, harmless.

Not covered

  • Playwright e2e execution — this container ships no Playwright browser binaries (~/.cache/ms-playwright absent, verified); the changed spec and the Reviewer Test Plan's browser steps were verified at the jsdom/component level instead (wiring, help, settings, merge-shape + summary-text cells). This reproduces the shape the e2e asserts (same fixture event sequence, same literal string via T1), not a live browser render; the model-side streaming behavior of step 1 is likewise shape-only.
  • Per-commit attribution — shallow checkout: git rev-list HEAD^1..HEAD^2 returns 1 commit at the shallow boundary vs 7 in the metadata snapshot; the aggregate HEAD^1..HEAD diff is what was verified. The out-of-footprint guard reverted by bc3b75f9 is visible only as its absence in the aggregate diff (vitest.config.ts untouched — asserted) and its byte-identity with base (diffed across arms — asserted).
  • Base-arm full suite — the head suite is the gate (zero failures, 198/4235); the base arm was used for A/B cells, census, and the settings-warning control only, not a full base-suite run.
  • vscode-ide-companion schema — description-only change; no repo test consumes that file; validated as JSON by Prettier (gate live-checked).
  • Flakiness gate — run by the workflow separately, not duplicated here.

Methodology

Environment: CI merge-ref checkout (depth 2; HEAD = merge commit 2ab46b2c, HEAD^1 = base tip 2ef511a0, HEAD^2 = PR head bc3b75f9 — the latter two identical to round 2's verified OIDs), node v22.23.2, npm ci + npm run build pre-run at HEAD. A/B control: scratch worktree at HEAD^1 with root and per-package node_modules symlinked (lockfile untouched by the PR — asserted); internal @qwen-code/* links realpath-asserted (readlink -f into head-tree packages/sdk-typescript, packages/webui, …) and every such workspace diff-verified content-identical, so no head code leaked into the base arm's code-under-test, which resolves via relative imports inside the base tree (base App.tsx still carries COMPACT_MODE_SETTING_KEY ×3 vs head ×0 — asserted). Mutations ran in a third scratch worktree at HEAD (same wiring plus head dist/ symlink so the build-artifact tests run); each mutation was reverted before the next; all worktrees removed afterwards. Harnesses are mock-free with respect to the units under test (real App, real MessageList, real HelpDialog/SettingsMessage/ToolGroup formatter, real settings loader via scratch QWEN_HOME; only the daemon SDK and heavy row children mocked, using the repo's own scaffolding). Gates: web-shell vitest 198 files / 4235 tests green at head (junit-parsed); npm run typecheck exit 0; ESLint on all 11 changed source files exit 0 with a planted-violation liveness control that was caught (unused var + any); Prettier --check clean on all 13 changed files with a planted-misformat liveness control that was caught (first probe attempt landed in an unchecked path and proved nothing — discarded, re-run at a checked path). Raw logs in logs/, harness sources in harness/ (+ generated copies in harness/generated/), captures in evidence/ (8 PNGs via scripts/verify-capture.mjs). One setup iteration is disclosed rather than hidden: the first M1 full-suite run failed 13 build-artifact.test.ts tests with ENOENT because the scratch worktree had no dist/; after symlinking head's built dist/ (which the M1 source mutation does not alter) the suite ran green — the failed run measured my setup, not the PR.

Flakiness gate log

e2e suite, out of gate scope: packages/web-shell/client/e2e/visuals/screenshots.spec.ts
e2e suite, out of gate scope: packages/web-shell/client/e2e/web-shell.compact-thinking.spec.ts
rounds=5 files=2 skipped=2
file packages/web-shell/client/App.test.tsx: (cd packages/web-shell) npx --no-install vitest run ./client/App.test.tsx
file packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: (cd packages/web-shell) npx --no-install vitest run ./client/components/messages/SettingsMessage.dom.test.tsx


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/web-shell/client/App.test.tsx: PPPPP
  packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 1 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 2 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 2 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 3 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 3 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 4 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 4 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)
round 5 · packages/web-shell/client/App.test.tsx: P (exit 0)
round 5 · packages/web-shell/client/components/messages/SettingsMessage.dom.test.tsx: P (exit 0)

Evidence images

01-ab-cells-head-arm

02-ab-cells-base-arm

03-m1-mutation-vs-repo-suite

04-m2-control-preventdefault

05-m3-control-hidden-key

06-gate-head-suite-summary

07-fixture-byte-compare

08-settings-doc-claim-cells

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 — clean retirement, green CI and sandboxed A/B verification on this exact commit. Approved pinned to the reviewed SHA. ✅

@ytahdn
ytahdn added this pull request to the merge queue Aug 26, 2026
Merged via the queue into main with commit 48645c5 Aug 26, 2026
54 of 58 checks passed
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Released in v0.22.2.

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

Labels

autofix/takeover Summon the autofix loop to manage this PR (remove to release; needs triage+)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants