Skip to content

refactor(core): centralize worktree config derivation - #9915

Merged
yiliang114 merged 10 commits into
mainfrom
codex/8083-worktree-context
Aug 27, 2026
Merged

yiliang114 merged 10 commits into
mainfrom
codex/8083-worktree-context

Conversation

@yiliang114

@yiliang114 yiliang114 commented Aug 24, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

This PR moves both worktree launch paths behind the shared derived-Config boundary. Newly provisioned isolation worktrees and caller-owned worktrees now rebind workspace paths, workspace context, and file discovery state through the same ownership operation, including both public getters and the internal state those getters depend on.

It also preserves approval-mode overlays layered above a derived worktree Config: a bare derived Config remains unable to mutate approval state, while the specialized child overlay can change modes without changing its canonical parent.

Stacked-scope note: #9918 (centralize agent config derivation) was merged INTO this branch rather than main, so this PR's diff against main additionally migrates the approval, in-process-agent, subagent, memory, remember, and skill-review derivations behind the same boundary and adds the no-config-object-create lint rule that keeps hand-rolled overlays from bypassing it. Merging this PR lands both slices together.

Why it's needed

The two launch paths previously rebuilt the same prototype overlay independently. That duplication allowed target directory, cwd, workspace context, file service, custom ignore files, and approval ownership to drift apart. Centralizing this slice completes the first production caller migration after the ownership contract landed in #8100; #9918 continued the same direction for the agent-execution paths and was stacked onto this branch, so both slices land together.

Reviewer Test Plan

How to verify

  1. Confirm both provisioned and caller-owned worktree launches resolve every cwd/project getter to the child worktree while leaving the parent unchanged.
  2. Confirm each child owns a distinct workspace context and file service while inheriting the configured custom ignore files.
  3. Confirm a specialized approval overlay above a derived worktree can exit plan mode, while a bare derived worktree Config cannot mutate approval state.
  4. Confirm the no-config-object-create lint rule flags a hand-rolled Object.create Config overlay under packages/core/src (flat-config integration test included).

Evidence (Before & After)

N/A — internal refactor with no user-visible behavior change.

Tested on

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

Environment (optional)

Node.js 22; clean dependency install and full build, repository typecheck, focused ESLint and Prettier checks, and 753 focused Config/Agent/Workflow tests.

Risk & Scope

Linked Issues

Refs #8083

中文说明

这个 PR 做了什么

这个 PR 将两条 worktree 启动路径迁移到共享的派生 Config 边界。新创建的隔离 worktree 和调用方已有的 worktree 现在通过同一个所有权操作重绑定工作区路径、工作区上下文和文件发现状态,同时覆盖公共 getter 及其依赖的内部状态。

它也保留了叠加在派生 worktree Config 之上的 approval mode 覆盖:普通派生 Config 仍不能修改 approval 状态,而专用子级覆盖可以切换模式且不修改规范父 Config。

堆叠范围说明:#9918(集中 agent config 派生)是合入到本分支而不是 main 的,因此本 PR 相对 main 的 diff 还会把 approval、进程内 agent、subagent、memory、remember 和 skill-review 派生一并迁移到同一边界之后,并新增 no-config-object-create lint 规则,防止手写 overlay 绕过该边界。合入本 PR 会同时落地这两个切片。

为什么需要

此前两条启动路径各自重建同一套 prototype overlay,容易让目标目录、cwd、工作区上下文、文件服务、自定义 ignore 文件和 approval 所有权发生漂移。集中这一切片后,完成了 #8100 所有权契约落地后的第一组生产调用方迁移;#9918 沿同一方向继续迁移了 agent 执行路径并堆叠到本分支,因此两个切片会一起合入。

Reviewer Test Plan

如何验证

  1. 确认新建和调用方已有的 worktree 启动都会让全部 cwd/project getter 指向子 worktree,同时父 Config 保持不变。
  2. 确认每个子 Config 拥有独立的工作区上下文和文件服务,并继承已配置的自定义 ignore 文件。
  3. 确认叠加在派生 worktree 上的专用 approval 覆盖可以退出 plan mode,而普通派生 worktree Config 不能修改 approval 状态。
  4. 确认 no-config-object-create lint 规则会在 packages/core/src 下拦截手写 Object.create Config overlay(附 flat-config 集成测试)。

Evidence (Before & After)

N/A —— 内部重构,没有用户可见行为变化。

Tested on

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

Environment (optional)

Node.js 22;独立依赖安装与全仓构建、仓库 typecheck、聚焦 ESLint/Prettier 检查,以及 753 个 Config/Agent/Workflow 聚焦测试。

Risk & Scope

Linked Issues

Refs #8083

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Re-run on 8f7779a1 — this head is a merge of current main into the branch, and the gate still passes. I diffed the PR-against-main diff at the previously approved head (ded65e61) and at this one: every added/removed line is byte-identical — the only differences are context drift from main's own changes. The merge itself carried two conflict resolutions, both verified correct: workflow-orchestrator.test.ts keeps this PR's captured runtimeContext alongside main's new taskName/subagentId options shape, and skillReviewAgentPlanner.ts combines this PR's deriveConfig migration with main's new isToolDisabledByCoreToolsAllowList shim method.

  • Template: complete ✓ — all sections present, Risk & Scope filled, bilingual body included.
  • Problem: real and documented, not theoretical. The base code carried three hand-maintained copies of the same prototype-overlay work — the inline rebind block in agent.ts, createDirScopedConfigOverride in workflow-orchestrator.ts (whose comment said it mirrors the agent.ts block), and the per-agent overlay in InProcessBackend.ts — plus five more one-off Object.create(config) derivations. This diff deletes all of them, which is the strongest evidence the duplication existed.
  • Direction: aligned. Continues the design(core): make derived Config context ownership explicit #8083 derivation migration behind the ownership contract refactor(core): make derived Config ownership explicit #8100 landed; maintainer-authored, with the stacked refactor(core): centralize agent config derivation #9918 scope disclosed in the body, risk section, and test plan.
  • Size: maintainer-authored → the Tier-1 core-refactor gate does not apply. 1336 changed lines = 925 production logic (config.ts 328, InProcessBackend.ts 187, agent.ts 166, workflow-orchestrator.ts 98, lint rule + wiring 81, memory/skill-review/subagent migrations 65) / 375 tests / 36 docs. Under the 1000-line advisory.
  • Approach: unchanged from the approved state — one named factory per concern, paired getter/private-field rebinding as a single operation, approval lifecycle owned by a dedicated profile, and a lint tripwire behind it. Nothing to cut.
  • Risk: no elevated signals — none of the revert-correlated paths (streaming/MCP/shell/sandbox/ACP/relaunch) are touched.

Moving on to code review. 🔍

中文说明

8f7779a1 上 re-run —— 该 head 是把当前 main 合入分支的合并提交,门禁仍然通过。我对比了上一个已批准 head(ded65e61)与本 head 相对 main 的 PR diff:所有新增/删除行逐字节一致——差异只有 main 自身改动带来的上下文漂移。合并本身有两处冲突解决,均已核实正确:workflow-orchestrator.test.ts 在 main 新的 taskName/subagentId 选项形态旁保留了本 PR 捕获的 runtimeContextskillReviewAgentPlanner.ts 把本 PR 的 deriveConfig 迁移与 main 新增的 isToolDisabledByCoreToolsAllowList 垫片方法合并。

  • 模板:完整 ✓ —— 各小节齐全,Risk & Scope 已填写,含双语正文。
  • 问题:真实且有据可查,不是理论问题。改动前存在三份手工维护的同原型覆盖代码——agent.ts 的内联重绑定块、workflow-orchestrator.tscreateDirScopedConfigOverride(注释明说是镜像 agent.ts 的块)、InProcessBackend.ts 的 per-agent 覆盖层——外加五处一次性 Object.create(config) 派生。本 diff 将它们全部删除,这本身就是重复存在的最强证据。
  • 方向:对齐。延续 design(core): make derived Config context ownership explicit #8083 派生迁移、落在 refactor(core): make derived Config ownership explicit #8100 所有权契约之后;维护者本人提交;堆叠的 refactor(core): centralize agent config derivation #9918 范围已在正文、风险小节和测试计划中披露。
  • 规模:维护者提交 → 不适用 Tier-1 核心重构门禁。1336 行改动 = 925 行生产逻辑(config.ts 328、InProcessBackend.ts 187、agent.ts 166、workflow-orchestrator.ts 98、lint 规则+接线 81、memory/skill-review/subagent 迁移 65)/ 375 行测试 / 36 行文档。低于 1000 行大 PR 提醒线。
  • 方案:与已批准状态一致——每个关注点一个具名工厂、成对 getter/私有字段重绑定作为一次操作、approval 生命周期由专用 profile 拥有、外加 lint 门禁。无可砍部分。
  • 风险:无升级信号——未触及任何与 revert 相关的高风险路径。

进入代码审查。🔍

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code review

The PR content at this head is byte-identical to what I fully reviewed and approved at ded65e61 — I diffed both heads' PR-against-main diffs and every added/removed line matches; only context lines moved. So this pass verified the merge rather than re-reviewing the change:

  • Conflict resolutions are correct. Both conflict files composed cleanly: workflow-orchestrator.test.ts keeps the captured runtimeContext assertion alongside main's new taskName/subagentId mock shape; skillReviewAgentPlanner.ts carries main's new isToolDisabledByCoreToolsAllowList shim method and this PR's Object.createderiveConfig migration. Neither side dropped the other's semantics.
  • Load-bearing claims re-verified at this head (defense against drift from main's own refactors, e.g. refactor(core): break config client runtime cycle #9959's config rework): the relaxed guard in Config.prototype.setApprovalMode still admits exactly derived Configs with an own setApprovalMode and throws for bare ones; deriveApprovalModeConfig remains the sole installer of an own setApprovalMode repo-wide (checked both assignment and Object.defineProperty forms — one hit, config.ts); getPlansAnchorTargetDir() still anchors the plan containment assertions at the plans-owning Config; the no-config-object-create rule remains wired over packages/core/src with tests and config.ts exempt.
  • No new findings. Non-blocking notes carry over: the lint-rule bypass documentation (R1-6) is still consciously deferred; the forked-agent trust-demotion nuance (internal agents no longer bypass an explicitly-untrusted folder's gate via YOLO — the right direction, but user-visible) is still not spelled out in the Risk section.
Files changed (19 of 19 shown)
File What changed
packages/core/src/config/config.ts The heart: three named derivation profiles (approval, agent, worktree), the relaxed approval guard, and the plans-anchor fix for derived Configs
packages/core/src/config/config.test.ts Pairing tests for both workspace profiles plus the savePlan-on-derived-agent regression case
packages/core/src/tools/agent/agent.ts Deletes the 145-line inline overlay + approval overlay; both now delegate to the named factories, with cleanup-on-rebuild-failure
packages/core/src/tools/agent/agent-override.test.ts Approval-over-worktree layering test and AUTO-strip restore when registry setup fails
packages/core/src/agents/backends/InProcessBackend.ts Per-agent config now derives agent profile over approval profile; always child-local approval state
packages/core/src/agents/backends/InProcessBackend.test.ts Teammate without explicit mode switches modes child-locally, parent untouched
packages/core/src/agents/runtime/workflow-orchestrator.ts Both dispatch modes use deriveWorktreeConfig; approval profile layered on top; cleanup in outer finally
packages/core/src/agents/runtime/workflow-orchestrator.test.ts Dispatch context rebinding assertions (getters, ignore files, parent immutability)
packages/core/src/subagents/subagent-manager.ts Subagent context wrapper now goes through deriveConfig
packages/core/src/subagents/subagent-manager-override.test.ts Chained-override registry-inheritance test retargeted at the factories
packages/core/src/subagents/subagent-manager.test.ts Comment/expectation updates for the derived wrapper
packages/core/src/memory/memory-scoped-agent-config.ts Scoped memory profile migrated to deriveConfig
packages/core/src/memory/remember.ts Hidden/blank-slate remember configs migrated to deriveConfig
packages/core/src/memory/skillReviewAgentPlanner.ts Skill-scoped profile migrated to deriveConfig
eslint-rules/no-config-object-create.js New tripwire rule: non-null Object.create in modules importing Config
eslint.config.js Wires the rule over packages/core/src (tests and config.ts exempt)
scripts/tests/no-config-object-create.test.js Rule unit tests (catch, null-dictionary allow, unrelated-import allow)
scripts/tests/no-config-object-create-config.test.js Flat-config integration test against the real eslint.config.js
docs/design/derived-config-ownership.md Ownership table updated: approval state "shared or explicitly copied", lint boundary noted

Testing

Evidence below is the PR's own CI fetched via the API for the reviewed commit; per triage policy no PR code is built or executed here, and checks are fetched once — no polling.

  • Qwen Code CI on this head is stuck in queued — created 2026-08-26 15:01 UTC, zero jobs materialized more than 20 hours later. The workflow's concurrency group has nothing in flight to wait on (cancel-in-progress is on for branches), so this reads as a runner-scheduling stall on the self-hosted lane, not a test outcome. A maintainer can re-run the workflow or check the ecs-qwen runner pool; the deferred approval below only lands once this run completes.
  • The identical change content is green on the two earlier heads: Qwen Code CI completed success on 56ca877f (run 32930772331) and on ded65e61 — the same added/removed lines against an older main. Strong evidence, but not terminal for this head: CI still has to confirm the composition with the newer main (e.g. refactor(core): break config client runtime cycle #9959's config.ts rework, which touched the same file).
  • Also settled on this head: PR Force-Push Reminder (success), PR self-report label (success), Qwen Autofix triggered by wenshao's review (success). macOS/Windows/integration lanes remain merge-queue-only by design (ci.yml gates them on merge_group).
Check Conclusion
Qwen Code CI — Test (ubuntu-latest, Node 22.x) + gates ⏳ queued since 2026-08-26 15:01 UTC, no jobs yet — see note above
Test (macos-latest / windows-latest, Node 22.x) ⏭️ skipped (merge-queue-only)
Integration Tests (CLI, No Sandbox) ⏭️ skipped (merge-queue-only)
PR Force-Push Reminder ✅ success
PR self-report label ✅ success
Qwen Autofix (on wenshao's review) ✅ success

The unit suite pins each behavior round 1 broke. What it cannot compose is a live spawn end-to-end: sandboxed verification would settle that — @qwen-code /verify for A/B proof that teammate mode switches and worktree rebinding hold through a real agent spawn, which is also the useful fallback while the queued CI run stays stuck.

Real-scenario (tmux) testing: N/A — internal refactor with no user-visible behavior change; there is nothing a terminal session could show before vs after.

中文说明

代码审查

本 head 上的 PR 内容与我在 ded65e61 上完整审查并批准的版本逐字节一致——两个 head 相对各自 merge-base 的 PR diff 逐行比对,新增/删除行完全相同,只有上下文行移动。因此这一轮核实的是合并本身,而不是重复审代码:

  • **冲突解决正确。**两处冲突文件都干净地合成:workflow-orchestrator.test.ts 在 main 新的 taskName/subagentId mock 形态旁保留了 runtimeContext 捕获断言;skillReviewAgentPlanner.ts 同时带上 main 新增的 isToolDisabledByCoreToolsAllowList 垫片方法本 PR 的 Object.createderiveConfig 迁移。两侧都没有丢掉对方的语义。
  • 关键结论已在本 head 复核(防 main 自身重构如 refactor(core): break config client runtime cycle #9959 的 config 改动造成漂移):Config.prototype.setApprovalMode 放宽后的守卫依旧只放行带自有 setApprovalMode 的派生 Config、对裸派生 Config 抛异常;deriveApprovalModeConfig 仍是全仓库唯一的自有 setApprovalMode 安装点(赋值与 Object.defineProperty 两种形态都查过——仅一处命中);getPlansAnchorTargetDir() 仍把 plan 包含断言锚定在拥有 plans 的 Config 上;no-config-object-create 规则仍作用于 packages/core/src(豁免测试与 config.ts)。
  • **无新发现。**非阻塞事项延续:lint 规则绕过方式的文档(R1-6)仍有意延后;派生 agent 信任降级细节(内部 agent 不再以 YOLO 绕过显式不受信文件夹的门禁——方向正确但用户可见)仍未写进 Risk 小节。

(改动文件总表见英文版。)

测试

以下证据来自按受审提交抓取的 PR 自身 CI(API 获取);按 triage 策略,此处不构建、不执行任何 PR 代码,检查只抓取一次、不轮询。

  • 本 head 上的 Qwen Code CI 卡在 queued——创建于 2026-08-26 15:01 UTC,20 多小时后仍没有任何 job 产生。工作流并发组中没有在跑的任务可等(分支上 cancel-in-progress 已开),更像 self-hosted 通道的调度停顿,而不是测试结果。维护者可以重跑该 workflow 或检查 ecs-qwen runner 池;下面的延迟批准只在该运行完成后才会落地。
  • 同样的改动内容在更早的两个 head 上是绿的Qwen Code CI56ca877f(run 32930772331)与 ded65e61 上均 completed success——相对旧 main 的同一套新增/删除行。是强证据,但对本 head 不是终局证据:CI 仍需确认与 main(如 refactor(core): break config client runtime cycle #9959 的 config.ts 重构,改动的是同一个文件)的合成。
  • 本 head 上已落定:PR Force-Push Reminder(success)、PR self-report label(success)、wenshao 评审触发的 Qwen Autofix(success)。macOS/Windows/集成通道按设计只在合并队列运行(ci.yml 限定 merge_group)。

(CI 结果表见英文版区域标记内,由 finalize 工作流在 CI 完成后原地更新。)

单测套件钉住了 round-1 破坏的每一项行为;套件无法组合出真实启动的端到端链路:沙箱验证可以补上——@qwen-code /verify 可做 A/B 证明队友模式切换与 worktree 重绑定在真实 agent 启动中成立,在 CI 卡住时也是有用的替代手段。

真实场景(tmux)测试:N/A——内部重构、无用户可见行为变化;终端会话里不存在可对比的前后差异。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Confidence: 4/5 — the change content is byte-identical to what was fully reviewed and approved at ded65e61, and the merge with main was trivial with both conflict resolutions verified. What keeps this at 4 is the evidence gap, not the code: CI on this head is stuck in queued (20+ hours, zero jobs), so the composition with the newer main is not yet confirmed by a green run.

Stepping back: nothing in this re-run changed my read of the PR. My independent proposal for "the worktree rebind overlays and the per-agent overlay drift apart" was exactly this shape — one derivation boundary per concern, paired getter/private-field rebinding as a single operation, approval lifecycle owned by a dedicated profile, and a lint tripwire so the next hand-rolled overlay can't sneak in. The delta since the approved head is only the merge with current main: I diffed the PR-against-main diff at both heads and every added/removed line matches, and the two conflict resolutions (the test mock shape in workflow-orchestrator.test.ts, the import block + permission-manager shim in skillReviewAgentPlanner.ts) each keep both sides' changes intact. The load-bearing claims were re-grepped at this head rather than assumed — sole setApprovalMode installer, guard shape, plans anchor, lint wiring — and all hold. Six months from now this reads better than the three mirrored overlay blocks it replaces, and wenshao's approval on this head already reflects a maintainer's read to the same effect.

Verdict: approve — deferred until CI lands. The Qwen Code CI run on the reviewed commit has been queued for over a day without producing jobs (a runner stall, not a test outcome), and I won't attest ahead of it. The approval is staged to land pinned to the reviewed commit automatically once every check on it completes green; if the run stays stuck, re-running the workflow or checking the ecs-qwen runner pool will unblock it — @yiliang114.

中文说明

Confidence: 4/5 —— 改动内容与在 ded65e61 上被完整审查并批准的版本逐字节一致,与 main 的合并是平凡的,两处冲突解决均已核实。没到 5 分是证据缺口而非代码问题:本 head 上的 CI 卡在 queued(20 多小时、零 job),与新 main 的合成还没有绿色运行确认。

退一步看:这次 re-run 没有改变我对 PR 的判断。我对"两份 worktree 重绑定覆盖层与 per-agent 覆盖层互相漂移"的独立方案正是这个形状——每个关注点一条派生边界、成对 getter/私有字段重绑定作为一次操作、approval 生命周期由专用 profile 拥有、外加 lint 门禁让下一个手写覆盖层无法溜进来。距已批准 head 的变化只有与当前 main 的合并:我把两个 head 相对 main 的 PR diff 逐行比对,新增/删除行完全一致,两处冲突解决(workflow-orchestrator.test.ts 的 test mock 形态、skillReviewAgentPlanner.ts 的 import 块 + permission-manager 垫片)各自完整保留双方改动。关键结论是在本 head 重新 grep 核实的而非假设——唯一的 setApprovalMode 安装点、守卫形态、plans 锚点、lint 接线——全部成立。六个月后再看,这份代码比它替换掉的三份镜像覆盖层块好读得多;wenshao 在本 head 上的批准也反映了维护者相同的判断。

**结论:approve——等 CI 落定后生效。**受审提交上的 Qwen Code CI 排队超过一天未产生任何 job(是 runner 停顿,不是测试结果),我不会在它之前背书。批准已准备好钉在受审提交上、待其全部检查变绿后自动落地;如果该运行持续卡住,重跑 workflow 或检查 ecs-qwen runner 池即可解锁——@yiliang114

(延迟批准标记见英文版,供 finalize 工作流在 CI 变绿后执行。)

Qwen Code · qwen3.8-max

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

@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 85.46% 85.46% 90.87% 84.46%
Core 88.64% 88.64% 90.42% 87.09%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   85.46 |    84.46 |   90.87 |   85.46 |                   
 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.07 |    86.72 |   95.51 |   91.07 |                   
  Session.ts       |   90.43 |    85.48 |   94.79 |   90.43 | ...67,12694-12698 
  ...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.57 |   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.93 |    85.66 |   94.33 |   93.93 | ...1267,1274-1275 
  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  |   91.19 |    88.76 |   85.71 |   91.19 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |    92.9 |    84.84 |      80 |    92.9 | ...79-181,199-200 
  reconnect.ts     |   85.54 |    86.76 |    90.9 |   85.54 | 45-58,337-359     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   91.72 |    90.08 |   93.03 |   91.72 |                   
  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.08 |    93.54 |   98.52 |   97.08 | ...5811-5855,6130 
  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.38 |    88.52 |     100 |   96.38 | ...2419,2520-2536 
  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   |   83.78 |    78.57 |   88.88 |   83.78 | ...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 | 605,823           
  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.52 |   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.58 |    90.93 |   83.78 |   89.58 | ...2507,2509-2517 
  ...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.59 |   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.87 |     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.65 |    84.93 |   91.01 |   87.65 |                   
  ...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.32 |    85.33 |     100 |   87.32 | ...14,820-824,842 
  ...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 |   93.24 |    85.42 |    97.4 |   93.24 | ...1765,1819-1823 
  ...e-grouping.ts |     100 |    94.28 |     100 |     100 | 71,137            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |    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 |                   
  ...ate-blocks.ts |   99.03 |    94.73 |     100 |   99.03 | 133               
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  ...nal-ledger.ts |    94.9 |    84.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 |   85.12 |    81.68 |   77.39 |   85.12 | ...8993,9011-9015 
  ...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.69 |   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.89 |     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.4 |    82.05 |    86.6 |    86.4 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...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.62 |   86.48 |   86.01 |                   
  ...ewContext.tsx |   87.56 |       80 |      75 |   87.56 | ...37-240,246-256 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |       80 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 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.05 |    84.17 |   87.85 |   86.05 |                   
  ...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 |      52 |    63.63 |     100 |      52 | ...59,67-70,76-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |   86.44 |    88.48 |     100 |   86.44 | ...14-515,525-541 
  ...ifications.ts |   87.82 |    96.77 |     100 |   87.82 | 138-152           
  ...tIndicator.ts |   88.28 |    81.57 |     100 |   88.28 | ...66,175,179-187 
  ...waySummary.ts |   96.26 |       75 |     100 |   96.26 | 126-128,170       
  ...ndTaskView.ts |   94.89 |    77.55 |     100 |   94.89 | 164-168,257,263   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   96.03 |    88.75 |     100 |   96.03 | ...04-205,362-365 
  ...ompletion.tsx |   97.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.04 |   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.24 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   91.42 |       95 |     100 |   91.42 | 32-34             
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    95.65 |     100 |     100 | 45,151            
  historyUtils.ts  |   96.07 |     97.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.25 |    89.67 |   96.39 |   92.25 |                   
  ...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.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 50-52,58          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  ...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.64 |    87.09 |   90.42 |   88.64 |                   
 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 |   77.29 |    86.38 |   75.52 |   77.29 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   91.41 |    90.21 |   96.87 |   91.41 | ...64-465,584-590 
  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.31 |    87.44 |   92.37 |   93.31 |                   
  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.82 |    90.47 |     100 |   93.82 | ...2200,2293-2296 
  ...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.92 |    88.09 |   78.46 |   85.92 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   84.55 |    87.47 |   76.45 |   84.55 | ...9339,9346-9347 
  ...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.79 |    88.57 |   93.83 |   92.79 |                   
  ...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 |   90.25 |    84.99 |   94.73 |   90.25 | ...6509,6537-6553 
  ...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.39 |    89.96 |   94.77 |   93.39 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   99.45 |    97.05 |     100 |   99.45 | 155               
  ...checkpoint.ts |   86.08 |    85.18 |     100 |   86.08 | ...29-132,142-145 
  ...ion-prompt.ts |     100 |      100 |     100 |     100 |                   
  goal-evidence.ts |   88.59 |    88.02 |   97.67 |   88.59 | ...1203,1226-1229 
  ...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 |   97.01 |    95.65 |     100 |   97.01 | 234-235           
  goal-reducer.ts  |   95.34 |    92.95 |   97.29 |   95.34 | ...95,578,596-597 
  goal-runtime.ts  |   96.56 |    90.35 |   96.07 |   96.56 | ...1438-1439,1569 
  goal-tools.ts    |   98.57 |    95.12 |   96.15 |   98.57 | ...36-237,345-346 
  ...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.25 |   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 |    87.91 |     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        |   89.19 |     85.2 |   91.66 |   89.19 |                   
  ...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 |   91.71 |    84.21 |    91.3 |   91.71 | ...90,398-399,403 
  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.38 |     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 |    77.1 |       75 |   73.68 |    77.1 | ...55-459,462,468 
  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   |   84.37 |    91.33 |   72.06 |   84.37 |                   
  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.79 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |   88.62 |    90.19 |   85.71 |   88.62 | ...1389,1495-1499 
  rule-parser.ts   |   94.89 |    92.79 |     100 |   94.89 | ...1550,1584-1586 
  ...-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.7 |     86.3 |   96.82 |    90.7 |                   
  ...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 |   95.52 |    90.99 |     100 |   95.52 | ...37,346-347,483 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |   74.75 |    70.76 |   96.07 |   74.75 | ...2296,2325-2326 
  ...on-service.ts |   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 | 280-281           
 ...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 | ...1582,1659-1660 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |   82.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.48 |    85.94 |   90.07 |   87.48 |                   
  ...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.07 |    80.15 |   85.71 |   82.07 | ...3243,3245-3246 
  mcp-client.ts    |   86.25 |    87.61 |   93.93 |   86.25 | ...2552,2556-2559 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   79.21 |    85.71 |   81.57 |   79.21 | ...1342,1350-1351 
  ...ool-events.ts |       8 |        0 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |    97.5 |    93.93 |     100 |    97.5 | 178-179           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  ...ion-config.ts |     100 |      100 |     100 |     100 |                   
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |    98.1 |       93 |     100 |    98.1 | ...1233,1288-1289 
  ...sport-pool.ts |   83.98 |     80.3 |   88.46 |   83.98 | ...1411,1418-1422 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 101,108           
  monitor.ts       |   91.82 |    83.09 |   88.46 |   91.82 | ...99,612,810-815 
  notebook-edit.ts |   85.71 |    77.39 |   82.35 |   85.71 | ...96-912,958-959 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   83.21 |    90.69 |     100 |   83.21 | 147-158,207-220   
  read-file.ts     |   95.49 |    88.61 |    87.5 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  readManyFiles.ts |   96.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.66 |     82.2 |   85.71 |   80.66 | ...1039,1047-1048 
  ...-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.24 |    88.51 |   89.71 |   87.24 |                   
  agent.ts         |   85.85 |    87.64 |   87.35 |   85.85 | ...4259,4293-4303 
  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.03 |      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 |    66.66 |      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.

LGTM, looks ready to ship — CI landed green after the review. ✅

* refactor(core): centralize agent config derivation

* refactor(core): centralize scoped config profiles (#9920)

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.

中文说明

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

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。

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

Comment thread packages/core/src/config/config.ts
Comment thread packages/core/src/config/config.ts
Comment thread eslint-rules/no-config-object-create.js
Comment thread eslint.config.js
Comment thread packages/core/src/config/config.ts
Comment on lines +14 to +17
function isObjectCreate(node) {
return (
node.callee.type === 'MemberExpression' &&
!node.callee.computed &&

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 rule only catches literal Object.create(...) in modules that import the Config name from a path ending in /config/config.js. Verified bypasses: (1) aliased/computed calls — const create = Object.create; create(base), const O = Object; O.create(base), Object['create'](base) (the !node.callee.computed + Identifier checks skip all three); (2) non-Object.create derivation — { __proto__: base }, Object.setPrototypeOf({}, base); (3) modules that overlay a Config without importing the Config name itself (importsConfig keys on the import specifier, not the argument type). Cost: the next hand-rolled overlay — the exact regression this rule exists to prevent — lands undetected when written in one of these shapes. Suggested fix: document the known bypasses beside the rule (it reads as a deliberate tripwire), or broaden detection: also flag computed Object['create'] and module-scope aliased create bindings, and/or key on any import from a path ending /config/config.js rather than the Config specifier specifically.

中文说明

该规则只能捕获在从 /config/config.js 结尾路径导入了 Config 名称的模块中的字面 Object.create(...)。已验证的绕过方式:(1) 别名/计算调用——const create = Object.create; create(base)const O = Object; O.create(base)Object['create'](base)!node.callee.computed + Identifier 检查会跳过这三种);(2) 非 Object.create 的派生——{ __proto__: base }Object.setPrototypeOf({}, base);(3) 没有导入 Config 名称本身、却对 Config 做覆盖层的模块(importsConfig 以导入说明符为判据,而不是参数类型)。代价:下一个手写覆盖层——正是这条规则要防止的回归——以这些形态写出时会不被发现地落地。建议修复:在规则旁记录已知的绕过方式(它读起来像一个有意为之的绊线),或者扩大检测:同时标记计算形式的 Object['create'] 和模块作用域内别名的 create 绑定,以及/或者以任意来自 /config/config.js 结尾路径的导入为判据,而不限于 Config 说明符。

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

… and dispatch configs

Give every per-agent config child-local approval state, not just the ones
spawned with an explicit mode: tools bind to the config and teammate mode
switches (Shift+Tab) plus 'Proceed always' confirmations call setApprovalMode
on it, which the derived-Config guard rejects without an approval profile.
Snapshot the base mode when none is requested so no AUTO strip is acquired
and cleanup stays a no-op.

Layer an approval profile over the workflow-orchestrator's derived dispatch
contexts (worktree isolation / workingDir) as agent.ts does, with cleanup in
the outer finally.
… Config

Derived agent profiles rebind targetDir to their own workspace, but the plan
file stays in the owning base's configured plans directory. The containment
assertions in savePlan/loadPlan compared against the derived workspace and
threw FatalConfigError for teammates whose cwd differs from the parent project
root, which savePlanBestEffort swallowed into a debug warning — silently
dropping the plan. Resolve the anchor to the Config that owns the
plans-directory state instead.
Mirror the deriveWorktreeConfig pairing test: assert the public getter
overrides (getCwd/getProjectRoot/getWorkingDir/getTargetDir, plan-file path)
and the paired private targetDir/cwd field writes plus own
workspaceContext/fileDiscoveryService, so a refactor that drops any rebind
fails loudly instead of leaking parent-tree reads into spawned agents.
…create

Mirror no-core-root-barrel-config.test.js: load the real eslint.config.js via
new ESLint({overrideConfigFile}) and lintText virtual packages/core/src/**
paths, so a future edit to the flat-config wiring (plugin key, rule name,
ignores) that silently stops the gate applying to packages/core/src/** turns
this test red instead of degrading the invariant with no signal.
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Closeout — round 1 (cap-4 + scope correction):

  • Critical R1 (derived bare Configs throw on approval-mode transitions — teammate Shift+Tab / "Proceed always" paths): fixed in 23349f1 — every per-agent config now gets child-local approval state via the derivation boundary (mirrors deriveApprovalModeConfig).
  • Critical R2 (deriveAgentConfig's own targetDir breaks savePlan's plans-directory assertions for child cwds with plansDirectory configured): fixed in 94d0174 — plans-directory assertions now anchor at the plans-owning base Config.
  • Suggestion (lint-gate wiring untested): added in b553b21 — scripts/tests/no-config-object-create-config.test.js mirrors the sibling flat-config integration test against the real eslint.config.js.
  • Suggestion (deriveAgentConfig rebinds untested): added in feca442 — config.test.ts pairing case covers getCwd/getProjectRoot and the private-field rebinds.
  • Suggestion (PR description contradicted the stacked diff): addressed via PR-body update — refactor(core): centralize agent config derivation #9918 merged into THIS branch, so the description/risk/test-plan now disclose that both slices land together (thread resolved with evidence).
  • Remaining open: the lint-rule known-bypass documentation Suggestion (deferred to a next round).

Also merged current origin/main (ded65e6). One non-force push 9fd6266..ded65e6. No /triage — the push auto-triggers re-review.

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Qwen Code review did not complete successfully. Qwen review aborted with an API error before posting comments. A transient error is retried automatically; if you are seeing this, retry with @qwen-code /review. See workflow logs.

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

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

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

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

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

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

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

Verification report

PR 9915 Deep Verification — refactor(core): centralize worktree config derivation

Verdict: merge-ready — 95/95 scripted assertions passed (0 unexpected failures).
Verified head: ded65e61d5c403c4c8b17580ec1edb70aa84c5e4 (git rev-parse HEAD^2); base tip 65c2bb01c0 (HEAD^1, matches baseRefOid).
No blocking findings; two informational behavior notes and one design observation below.

中文摘要

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

  • A/B 结论(见 "A/B table" 与 01-…/02-… 截图):两条 worktree 启动路径经由 deriveWorktreeConfig/deriveAgentConfig 的重绑定与 base 逐点对齐(公共 getter + 私有字段 + 父 Config 不变,C1/C2 全绿);02-ab-base-flip-control.png 中的 C3 翻转证明本 PR 还顺带修复了一个 main 上真实存在的隐患:配置了 plansDirectory 时,workflow dispatch(worktree 隔离/workingDir)派生 Config 上的 savePlan 在 base 上抛出 containment 错误、被 savePlanBestEffort 吞掉、计划被静默丢弃;head 上正常落盘并可回读(C3.1–C3.5)。approval 过渡、裸派生 Config 守卫、信任降级矩阵在两臂完全对齐(C4/C5/C7 10 格)。
  • 变异矩阵03-mutation-matrix.png):7 个变异全部被新测试以"预期断言"杀死(M1 计划锚点、M2 守卫例外、M3/M4 字段重绑定配对、M5/M6 lint 接线与规则体、M7 与 M2 构成分层对);反向变异(豁免 import type)两侧皆绿,说明 type-only 导入这一轴无测试钉住(见 Finding 3)。
  • Findings:均为信息级(详见正文)——① per-agent getCwd() 从"解析父 cwd"变为"解析子工作区"(实测的 base 漂移,属本 PR 有意消除的漂移,已被配对测试钉住);② 无显式模式的 teammate 改为"派生时快照父模式"而非原型跟随(有意的 child-local 语义,新测试已钉住);③ 新 lint 规则对 import type { Config } + 无关 Object.create 也会误报(与设计文档表述一致,当前无命中文件;建议补一个钉住该轴的 fixture)。
  • 未覆盖范围:逐提交归因(浅克隆 depth 2,本地仅 1 个可达提交,元数据列 8 个);background-agent 派生(PR 声明的后续切片);Windows/Linux 运行时;全仓测试套件与全仓 lint(仅运行受影响工作区域与改动文件);install-script.test.js 与 3 个 subagent home-path 失败为环境/既有问题(已在 base 上 A/A 复现,字节级一致)。

Central claim and A/B proof

Central claim. Both worktree launch paths (agent.ts provisioned isolation; workflow-orchestrator isolation:'worktree' + caller-owned workingDir) rebind workspace state through the shared derived-Config boundary behavior-preserving: every public cwd/project getter and the private field reads behind them resolve to the child worktree, the parent Config stays unchanged, and approval-mode transitions keep working via the layered approval profile. Secondary: plans-anchor fix (S1), child-local approval state (S2), no-config-object-create lint gate (S3).

One harness (ab-harness.mjs) drives the real compiled Config from each arm's packages/core/dist (head: CI-built merge commit; base: rebuilt packages/core at HEAD^1 in a scratch worktree, lockfile unchanged by the PR so reusing the root install is a clean control — packages/core has zero @qwen-code/* workspace deps, so no cross-tree link exists). Base-side builders are verbatim copies of base-era production code (createDirScopedConfigOverride, method-only per-agent override, getTrustedInitialApprovalMode). Witnesses: 01-ab-head-all-green.png, 02-ab-base-flip-control.png.

Cell Oracle base (65c2bb01) head (ded65e6)
C1.1–C1.9 dispatch rebind (getters, workspace ctx, file service, private targetDir/cwd, parent unchanged) scripted equality on real Config 9/9 ✅ parity 9/9 ✅ parity
C2.1–C2.5 per-agent rebind scripted equality 5/5 + drift cell C2.1b 6/6 ✅
C2.1b getCwd() resolution getCwd() value parent cwd (field never rebound; getCwd() reads this.targetDir) agent workspace (field rebound)
C3.1 plans anchor (dispatch config + configured plansDirectory, worktree outside project root) savePlan throw vs file on disk ❌ throws plansDirectory must resolve within the project rootsavePlanBestEffort drops the plan ✅ saves; file exists in base's plans dir; loadPlan round-trips
C3.5 per-agent plan save savePlan ✅ (method-only override never rebound the field — bug was dispatch-path specific)
C4.1–C4.3 mode switch on dispatch config (Shift+Tab shape) no throw; child-local; parent unchanged ✅ parity ✅ parity
C5.1 bare deriveConfig cannot setApprovalMode guard throws ✅ parity (#8100 guard) ✅ parity (new hasOwn exception does not weaken it)
C6.1 approval-profile cleanup idempotent no-op parent mode unchanged n/a (no profile)
C7 trust-gate downgrade matrix (trusted/untrusted × AUTO/YOLO/AUTO_EDIT/PLAN/DEFAULT) initial mode 11/11 ✅ 11/11 ✅ parity
Totals 34/34 (all encoded expectations incl. predicted reds) 37/37

Key reading: the C3 flip is not just preservation — on the base arm the dispatch path really does drop the plan (the containment assertion anchored at the rebound targetDir while plansDir stayed in the parent root). That is a latent bug on main for isolation:'worktree'/workingDir dispatch + configured plansDirectory, and this PR fixes it via getPlansAnchorTargetDir() (chain-walk to the plans-owning base). The 3-level chain shape (approval profile over worktree profile over canonical) was exercised in the same cell, matching the production layering in runOverridePath.

Corrections

None needed (first round; no prior bot claims to correct).

Findings (informational; none blocking)

F1 — behavior change (intended, measured): per-agent getCwd() now resolves the agent workspace. On base the InProcessBackend per-agent override rebound the methods (getWorkingDir/getTargetDir/getProjectRoot) but not the targetDir field, and Config.getCwd() reads this.targetDir — so getCwd() answered the parent's cwd (cell C2.1b, measured on the base arm). Head's deriveAgentConfig rebinds the field, so getCwd() follows the workspace. This is exactly the drift the PR exists to remove; the pairing tests pin it (M3/M4 below kill any revert). Callers that read getCwd() on a per-agent config get a corrected value, not a regression.

F2 — behavior change (intended, pinned): teammates spawned without an explicit approval mode snapshot the parent mode instead of prototype-following it. Base's raw Object.create override inherited approvalMode live from the parent; head's always-layered approval profile copies it at derivation (fix commit 23349f1's "child-local approval state"). If the parent session switches mode mid-run, a running teammate keeps its spawn-time mode on head. Pinned by the new InProcessBackend test (asserts the parent is never called and the child transitions independently). No guard regression: bare derived configs still throw (C5 parity).

F3 — lint gate coarseness (as designed; one unpinned axis). qwen-code/no-config-object-create fires on any non-null Object.create in a file whose imports include the name Config from …/config/config.js — including import type { Config } where the create is unrelated (measured: error-clone shape Object.create(Object.getPrototypeOf(e)) flagged; candidate fix node.importKind !== 'type' clears it). This matches the design doc's wording ("modules that import Config are linted against non-null Object.create(…)"), and no current production file matches (all 4 residual non-null Object.create sites lint clean). Reverse-mutation test: with the type-only exemption applied, both new lint test files stayed green — the suite pins nothing along this axis. If the author cares about that corner, ship the one-line importKind check with a fixture ("type-only Config import + non-null create ⇒ no violation"), since today nothing would go red without it. (Live probes: 04-lint-gate-live.png, 6/6 including exemptions for *.test.ts, config.ts, Object.create(null), and non-core paths.)

Mutation matrix (vacuity of the new/changed tests)

Every mutant reverted a real hunk in a scratch copy, ran, then restored (final git status clean; restoration control re-ran the lint tests green). Witnesses: 03-mutation-matrix.png, raw logs logs/m1…m7.txt.

# Mutant (guard/hunk) Suite that caught it Result
M1 plans-anchor assertions reverted to this.targetDir config.test.ts new plans test killed — intended not.toThrow() got plansDirectory must resolve within the project root (the exact mismatch the fix removes)
M2 setApprovalMode guard exception (hasOwn) removed InProcessBackend.test.ts killed ×3 — incl. the new teammate test, failing at its setApprovalMode(AUTO_EDIT) call with Derived Configs cannot change approval mode
M3 deriveWorktreeConfig field rebinds dropped config.test.ts pairing test killedexpected '/path/to/target' to be '/tmp/worktree'
M4 deriveAgentConfig field rebinds dropped config.test.ts pairing test killedexpected '/path/to/target' to be '/tmp/agent-workspace'
M5 rule severity erroroff in eslint.config.js flat-config integration test killedexpected false to be true on the production-path assertion
M6 rule body early-returns both lint test files killed both (unit + integration)
M7 installed setApprovalMode property renamed (guard exception kept) InProcessBackend.test.ts killed ×3 — same three tests as M2

M2 + M7 are the layered pair: the guard exception and the own-method install are each independently load-bearing (reverting either alone breaks the transition), so no single-hunk survivor exists to reclassify. Positive controls: every kill quotes expected-vs-actual values; the two M6-negative tests ("allows deriveConfig…", "ignores unrelated…") correctly stayed green under M6, proving the harness discriminates. Reverse mutation: see F3.

Targeted gates

  • Focused core suites at head (config, InProcessBackend, workflow-orchestrator, agent+agent-override, subagent-manager+-override, memory-scoped-agent-config, remember, skillReviewAgentPlanner): 1285 passed | 3 failed (1288), 9/10 files green. Witness 05-focused-gate-summary.png.
  • The 3 fails are pre-existing, proven by A/A on base. All three (SubagentManager > loadSubagent/deleteSubagent home-path tests) fail byte-identically at HEAD^1Received: "/__w/_temp/verify-agent-home/.qwen/agents/user-agent.md" vs expected /home/user/… on both arms. Mechanism: the test mocks 'os' while storage.ts imports 'node:os'; in this environment the mock does not alias, so os.homedir() returns the real HOME. Unrelated to this PR (its subagent-manager.ts hunk is buildSubagentContextOverride only; the failing tests never touch it).
  • Scripts gate (npm run test:scripts): 1609 passed, 1 file failed at collection — install-script.test.js throws `zip`/`unzip` missing on a CI host and this container ships unzip but no zip (one shell command to confirm). A/A on base: identical failure. Not PR-related; both new lint-rule test files passed in this run (3 tests + 1 integration test).
  • Lint gate proven live, not assumed: planted violations flagged (Object.create(base) in a production path), exemptions honored (*.test.ts, config.ts, Object.create(null)), all 8 changed production files + the rule file lint clean (CHANGED_FILES_LINT_EXIT=0), and the 4 pre-existing non-null Object.create sites lint clean.
  • Typecheck/build: npm ci + npm run build completed at HEAD before this round (workflow contract); the base arm additionally rebuilt packages/core from HEAD^1 cleanly.

Not covered

  • Per-commit attribution: the checkout is depth 2 — git rev-list HEAD^1..HEAD^2 yields 1 commit locally while the metadata lists 8, so individual commits (incl. the stacked refactor(core): centralize agent config derivation #9918 slice and the two fix commits) were verified only as the aggregate HEAD^1..HEAD diff.
  • Background-agent derivation — declared follow-up of design(core): make derived Config context ownership explicit #8083 in the PR body; untouched here.
  • Windows/Linux runtime behavior of both slices (declared unvalidated by the author; this round is Linux dist/unit level).
  • Repo-wide test suite and repo-wide npm run lint — targeted workspaces/files only, per budget.
  • AUTO strip/restore lifecycle with a live PermissionManager — requires initialize(); verified structurally (cleanup contract C6.1) plus the existing approval-override suites in the gate, not with a live PM.
  • The A/B exercised the derivation layer, not a full daemon/teammate E2E (the trigger for the S2 fix — a real Shift+Tab — is reproduced at its config boundary, i.e. the wire shape, not the UI event path).
  • install-script.test.js could not run anywhere (no zip in the image) — A/A'd as environmental.

Methodology

Environment: the CI verify container (node:22-bookworm), working tree at refs/pull/9915/merge (HEAD merge commit, HEAD^1 base tip, HEAD^2 PR head), npm ci + npm run build pre-run at HEAD. A/B: base worktree at HEAD^1 under tmp/base-tree with packages/core rebuilt in isolation (lockfile unchanged → shared root node_modules is a clean control; packages/core has no workspace deps, so no symlink could leak head code — verified by grep '@qwen-code/' packages/core/package.json); one harness (ab-harness.mjs) drives both arms' compiled dist/src/config/config.js, arm selected by env, base builders copied verbatim from base sources. Vacuity: hunks reverted in scratch copies of packages/core/src/config/config.ts / eslint.config.js / eslint-rules/no-config-object-create.js (backups in /tmp, restored after each mutant; final git status --porcelain empty). Gates: vitest run per affected file with --coverage.enabled=false (a first parallel run raced on the shared coverage dir and was discarded — the clean serial run is the cited one). Raw per-cell logs in logs/ (ab-head/base.txt+json, m1…m7.txt, gate-*.txt, matrix.txt, lint-live.txt); harnesses ab-harness.mjs, assert-matrix.mjs, lint-live.mjs kept in this directory for rerun. Assertion totals: 37 (head arm) + 34 (base arm) + 18 (matrix verifier over saved logs) + 6 (live lint probes) = 95 scripted assertions, 0 unexpected failures.

Flakiness gate log

rounds=5 files=8 skipped=0
file packages/core/src/agents/backends/InProcessBackend.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/backends/InProcessBackend.test.ts
file packages/core/src/agents/runtime/workflow-orchestrator.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/runtime/workflow-orchestrator.test.ts
file packages/core/src/config/config.test.ts: (cd packages/core) npx --no-install vitest run ./src/config/config.test.ts
file packages/core/src/subagents/subagent-manager-override.test.ts: (cd packages/core) npx --no-install vitest run ./src/subagents/subagent-manager-override.test.ts
file packages/core/src/subagents/subagent-manager.test.ts: (cd packages/core) npx --no-install vitest run ./src/subagents/subagent-manager.test.ts
file packages/core/src/tools/agent/agent-override.test.ts: (cd packages/core) npx --no-install vitest run ./src/tools/agent/agent-override.test.ts
file scripts/tests/no-config-object-create-config.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/no-config-object-create-config.test.js
file scripts/tests/no-config-object-create.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/no-config-object-create.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/core/src/agents/backends/InProcessBackend.test.ts: PPPPP
  packages/core/src/agents/runtime/workflow-orchestrator.test.ts: PPPPP
  packages/core/src/config/config.test.ts: PPPPP
  packages/core/src/subagents/subagent-manager-override.test.ts: PPPPP
  packages/core/src/subagents/subagent-manager.test.ts: PPPPP
  packages/core/src/tools/agent/agent-override.test.ts: PPPPP
  scripts/tests/no-config-object-create-config.test.js: PPPPP
  scripts/tests/no-config-object-create.test.js: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 1 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 1 · packages/core/src/config/config.test.ts: P (exit 0)
round 1 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 1 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 1 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 1 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 1 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 2 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 2 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 2 · packages/core/src/config/config.test.ts: P (exit 0)
round 2 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 2 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 2 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 2 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 2 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 3 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 3 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 3 · packages/core/src/config/config.test.ts: P (exit 0)
round 3 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 3 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 3 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 3 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 3 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 4 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 4 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 4 · packages/core/src/config/config.test.ts: P (exit 0)
round 4 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 4 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 4 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 4 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 4 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 5 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 5 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 5 · packages/core/src/config/config.test.ts: P (exit 0)
round 5 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 5 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 5 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 5 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 5 · scripts/tests/no-config-object-create.test.js: P (exit 0)

Evidence images

01-ab-head-all-green

02-ab-base-flip-control

03-mutation-matrix

04-lint-gate-live

05-focused-gate-summary

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

Qwen Code · sandboxed verification

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, looks ready to ship. ✅ Round-1 Criticals verified fixed; CI green on the reviewed commit.

@wenshao
wenshao requested a review from qqqys as a code owner August 26, 2026 04:35

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed. Suggestions are inline.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally.

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

  • eslint-rules/no-config-object-create.js:4 — [probe] no-config-object-create misses Config imported via the same-directory './config.js' specifier
中文说明

仅完成部分审查,审查缺口已披露。 建议见行内评论。

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。

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

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

Comment on lines +999 to +1002
const approvalHandle = deriveApprovalModeConfig(
effectiveContext,
config.getApprovalMode(),
);

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 approval profile layered over derived dispatch contexts here — and the approvalCleanup?.() call in the outer finally — has no test pairing. I mutation-tested it at this commit: deleting this block and the cleanup call leaves the entire workflow-orchestrator suite green (BASE(mutated): Tests 169 passed (169)), while a control mutation corrupting deriveWorktreeConfig's getTargetDir rebind turns exactly two of this PR's new tests red (CONTROL: Tests 2 failed | 167 passed (169)) — so the suite can see the worktree rebinds but not this layering. If a future refactor drops this block (or the cleanup call), any setApprovalMode during a workflow dispatch throws Derived Configs cannot change approval mode from the bare-derived guard, and a dispatch that does transition into AUTO leaks the strip on the parent's PermissionManager; no test turns red under either mutation. The sibling InProcessBackend change got a dedicated regression test ("lets a teammate without an explicit approval mode switch modes child-locally"); this orchestrator-side equivalent got none. Suggested fix — add an orchestrator test that exposes the recorded dispatch runtimeContext and asserts setApprovalMode(...) on it does not throw and leaves the parent's getApprovalMode() unchanged, mirroring the InProcessBackend test:

it('lets a derived dispatch context switch modes child-locally', async () => {
  // ... drive a dispatch with isolation: 'worktree' and capture runtimeContext
  expect(() => runtimeContext.setApprovalMode(ApprovalMode.AUTO_EDIT)).not.toThrow();
  expect(config.getApprovalMode()).toBe(ApprovalMode.DEFAULT); // parent untouched
});
中文说明

这里叠加在派生派发上下文之上的 approval profile——以及外层 finally 中的 approvalCleanup?.() 调用——没有任何测试配对。我在本提交上做了变异测试:删除这个代码块和 cleanup 调用后,整个 workflow-orchestrator 测试套件仍然全绿(BASE(mutated): Tests 169 passed (169));而对照变异——破坏 deriveWorktreeConfiggetTargetDir 重绑定——恰好让本 PR 新增的两个测试变红(CONTROL: Tests 2 failed | 167 passed (169))——说明套件能看见 worktree 重绑定,却看不见这层 approval 叠加。如果未来某次重构删掉这个块(或 cleanup 调用),workflow 派发期间的任何 setApprovalMode 都会撞上裸派生 Config 守卫抛出 Derived Configs cannot change approval mode;真正切换到 AUTO 的派发还会在父级 PermissionManager 上泄漏 AUTO strip——两种变异下都没有测试变红。同批的 InProcessBackend 改动有专门的回归测试("lets a teammate without an explicit approval mode switch modes child-locally"),orchestrator 这一侧的等价物却没有。建议修复——新增一个 orchestrator 测试:暴露记录的派发 runtimeContext,断言对它调用 setApprovalMode(...) 不抛异常、且父级 getApprovalMode() 保持不变,与 InProcessBackend 的测试对称。

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

Comment on lines +16 to +17
node.callee.type === 'MemberExpression' &&
!node.callee.computed &&

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] R1-6: Still stands at this commit — the rule only catches literal Object.create(...) in modules that import the Config name from a path ending in /config/config.js. Verified bypasses, re-checked against the unchanged rule: (1) aliased/computed calls — const create = Object.create; create(base), const O = Object; O.create(base), Object['create'](base) (the !node.callee.computed + Identifier checks skip all three); (2) non-Object.create derivation — { __proto__: base }, Object.setPrototypeOf({}, base); (3) modules that overlay a Config without importing the Config name itself (importsConfig keys on the import specifier, not the argument type). Cost: the next hand-rolled overlay — the exact regression this rule exists to prevent — lands undetected when written in one of these shapes. Suggested fix: document the known bypasses beside the rule (it reads as a deliberate tripwire), or broaden detection: also flag computed Object['create'] and module-scope aliased create bindings, and/or key on any import from a path ending /config/config.js rather than the Config specifier specifically.

中文说明

R1-6:在本提交上仍然存在——该规则只能捕获在从 /config/config.js 结尾路径导入了 Config 名称的模块中的字面 Object.create(...)。已对未改动的规则重新核实绕过方式:(1) 别名/计算调用——const create = Object.create; create(base)const O = Object; O.create(base)Object['create'](base)!node.callee.computed + Identifier 检查会跳过这三种);(2) 非 Object.create 的派生——{ __proto__: base }Object.setPrototypeOf({}, base);(3) 没有导入 Config 名称本身、却对 Config 做覆盖层的模块(importsConfig 以导入说明符为判据,而不是参数类型)。代价:下一个手写覆盖层——正是这条规则要防止的回归——以这些形态写出时会不被发现地落地。建议修复:在规则旁记录已知的绕过方式(它读起来像一个有意为之的绊线),或者扩大检测:同时标记计算形式的 Object['create'] 和模块作用域内别名的 create 绑定,以及/或者以任意来自 /config/config.js 结尾路径的导入为判据,而不限于 Config 说明符。

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

# Conflicts:
#	packages/core/src/agents/runtime/workflow-orchestrator.test.ts
#	packages/core/src/memory/skillReviewAgentPlanner.ts
@yiliang114
yiliang114 enabled auto-merge August 27, 2026 11:58
@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

@qwen-code-ci-bot

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

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

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

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

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

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

Verification report

PR 9915 Deep Verification (round 2) — refactor(core): centralize worktree config derivation

Verdict: merge-ready — 146/146 scripted assertions passed (0 unexpected failures).
Verified head: 8f7779a12660814d8caa66af3be5ffee4092a401 (git rev-parse HEAD^2); base tip 2bd0ff923e (HEAD^1).
Follow-up round — the previous round verified head ded65e6; this round's head is the merge of origin/main into the branch (base moved 65c2bb012bd0ff92), with conflict resolution in workflow-orchestrator.test.ts and skillReviewAgentPlanner.ts. Every carried-forward measurement was re-run at the new head/base, not diffed from the old report.

中文摘要

结论:merge-ready(146/146 脚本化断言通过,无意外失败)。本轮为跟进轮:PR 头已前移为"合入 origin/main 并解决冲突"的合并提交,base 同步前移;上一轮的全部测量已在新 head/base 上重新执行。

  • A/B 结论(见 01-…/02-… 截图与 "A/B table"):两条 worktree 启动路径的派生重绑定在新 base 上仍与 base 逐点对齐(C1/C2/C4/C5/C7/C9/D2),且上一轮发现的三个翻转在新 base 上复现:getCwd() 漂移修复(C2.1b)、配置 plansDirectory 时 dispatch 派生 Config 的 savePlan 在 base 上抛 containment 错误并被静默丢弃、在 head 上正常落盘回读(C3.1–C3.4)、以及裸派生 Config 守卫覆盖面的有意扩大(C8.1:base 静默切换、head 响亮报错)。
  • 变异矩阵03-… 截图):8 个变异(含分层组合行)全部被各自的预期测试以预期断言杀死,反向变异仍两侧皆绿(type-only 导入轴无测试钉住)。
  • Findings:无新增阻断项。F1/F2/F3 状态见 "Previous findings"(F1/F2 属有意行为、已被钉住;F3 的 type-only 误报角仍在、作者未采纳建议的豁免+夹具,当前无生产文件命中)。
  • 未覆盖范围:逐提交归因(浅克隆仅 1 个可达提交,元数据列 10 个;HEAD^2 的父提交——含上一轮 head——不可达);background-agent 派生;Windows/Linux 运行时;全仓测试与全仓 lint;真实 PermissionManager 的 strip/restore 生命周期;完整 daemon/teammate E2E。subagent-manager.test.ts 3 个失败与 install-script.test.js 收集失败均已在新 base 上 A/A 复现(环境/既有问题)。

Previous findings (round 1 → this round)

# Finding (round 1) Severity Status at head 8f7779a
F1 Per-agent getCwd() drift: base answered the parent dir (field never rebound); head rebinds it informational (intended) stands, re-measured — cell C2.1b re-ran on the new base (getCwd() = parent targetDir) and head (= agent workspace); pinned by the pairing tests (M3/M4 below kill any revert)
F2 Teammates without an explicit mode snapshot the parent mode instead of prototype-following it informational (intended) stands, re-measured — snapshot cells C6.6–C6.8; pinned by InProcessBackend.test.ts ("lets a teammate without an explicit approval mode switch modes child-locally" — an M2/M7 killer)
F3 Lint rule flags import type { Config } + unrelated Object.create; suggested exemption + fixture shipped together informational stands — re-measured: probe L7 still flags the corner; reverse mutation R1 (declaration-level import type exemption) leaves both lint test files green, so the suite still pins nothing along this axis. No production file matches (L8–L11: all 4 residual non-null Object.create sites lint clean), so the false positive remains latent, not active. The author did not adopt the one-line exemption; acceptable as-is since nothing in-tree trips it
C3 Base flip: dispatch-path savePlan with configured plansDirectory threw and savePlanBestEffort silently dropped the plan on main latent bug fixed by PR fix holds at new head — re-measured against the new base 2bd0ff92: base still throws + drops (C3.1/C3.2), head saves + loadPlan round-trips (C3.1–C3.4); M1 re-proves the test pins it

Delta since round 1 (what this round probed additionally)

The new head is the conflict-resolving merge of origin/main. The parents of HEAD^2 (including the previous head ded65e6) are not reachable in this depth-2 checkout, so the delta was examined as the aggregate HEAD^1..HEAD diff plus the merged state of the two conflict files, and everything was re-measured rather than diffed:

  • workflow-orchestrator.test.ts — the resolution integrates the PR's runtimeContext capture/rebind assertions with main's P3 suite. Coherent: the fake config now provides getApprovalMode/isTrustedFolder stubs (required because dispatch now layers deriveApprovalModeConfig over the worktree profile), and the new assertions check getTargetDir/getCwd/getWorkingDir/getProjectRoot on the spawned subagent context — i.e. rebind propagation through the full derivation chain. Suite green at head (inside the 798/798 run).
  • skillReviewAgentPlanner.tscreateSkillScopedAgentConfig migrated to deriveConfig(config, { getPermissionManager }). Observable shape re-verified in harness cells D2.1–D2.4 (override applies, everything else delegates; head stamps it so the approval guard now covers it) and its existing suite is green at head.
  • New base tip — the base arm was rebuilt at 2bd0ff92 (lockfile unchanged → root node_modules reused; packages/core has zero @qwen-code/* workspace deps, so no cross-tree link exists; nested third-party node_modules borrowed via symlink after verifying it contains no workspace links).

Central claim and A/B proof

Central claim. Both worktree launch paths rebind workspace state through the shared derived-Config boundary behavior-preserving: every public cwd/project getter and the private field reads behind them resolve to the child, the parent Config stays unchanged, and approval-mode transitions keep working through the layered approval profile. Secondaries: plans-anchor fix (S1), child-local approval state on every per-agent config (S2), no-config-object-create lint gate (S3).

One harness (ab-harness.mjs) drives the real compiled Config from each arm's packages/core/dist (head: CI-built merge commit; base: packages/core rebuilt at HEAD^1 in a scratch worktree). Base-arm builders are verbatim copies of base-era production code. Reviewer Test Plan steps 1–4 map to C1/C2, C1.5–C1.7/C2.5, C4+C5, and L1+M5/M6 respectively. Witnesses: 01-ab-head-all-green.png, 02-ab-base-flip-control.png. Raw logs: logs/ab-head.txt, logs/ab-base.txt.

Cell Oracle base (2bd0ff92) head (8f7779a)
C1.1–C1.9 dispatch rebind (4 getters, workspace ctx dirs, file service distinct, ignore display, private targetDir/cwd, parent unchanged) scripted equality on real Config 9/9 ✅ parity 9/9 ✅ parity
C2.1–C2.7 per-agent rebind + own-field checks scripted equality 7/7 incl. drift cell 7/7 ✅
C2.1b getCwd() resolution getCwd() value parent targetDir (method-only override, field not rebound) agent workspace (field rebound)
C3.1–C3.4 plans anchor (dispatch + configured plansDirectory, worktree outside project root) throw vs file on disk + round-trip ❌ throws plansDirectory must resolve within the project root; file absent (plan dropped) ✅ saves into the parent plans dir; loadPlan round-trips
C3.5 per-agent plan save savePlan no-throw ✅ (bug was dispatch-specific)
C4.1–C4.6 mode switch on dispatch config (Shift+Tab shape) no throw; child-local; parent unchanged; own-method presence 6/6 ✅ (un-stamped child, prototype method) 6/6 ✅ (approval profile owns it)
C5.1 bare deriveConfig cannot setApprovalMode guard throws ✅ parity ✅ parity (hasOwn exception does not weaken bare derivation)
C6.1–C6.8 approval lifecycle via hooks (acquire/release counts, idempotent cleanup, DEFAULT snapshot) hook call counts + modes 8/8 ✅ (base-era override copy) 8/8 ✅
C7 trust-gate matrix (trusted/untrusted × DEFAULT/AUTO/AUTO_EDIT/PLAN/YOLO + no-strip-on-downgrade) initial mode vs arm-independent oracle 11/11 ✅ 11/11 ✅ parity
C8.1–C8.3 subagent-context shape setApprovalMode (sibling sweep) throw vs silent write silent child-local write (un-stamped Object.create) guard throws (stamped bare derived)
C8.4–C8.6 subagent context over an approval profile transition works, child-local, parent unchanged ✅ inherits own method via prototype ✅ parity
C9.1–C9.3 ownership contract (FileReadCache child-local, toolResultBudget shared) identity checks ✅ parity ✅ parity
D2.1–D2.4 scoped-config shape (skill/memory/remember) override + delegation + guard coverage 4/4 (un-stamped: silently switches) 4/4 (stamped: guard-protected)
Totals 58/58 (all encoded expectations incl. predicted reds) 59/59

Key readings:

  • The C3 flip reproduces against the new base tip — the latent plan-drop on main for isolation:'worktree'/workingDir dispatch + configured plansDirectory is still present at 2bd0ff92 and fixed at head via getPlansAnchorTargetDir() (chain-walk to the plans-owning base).
  • C8 is the sibling sweep of the guard change. Base's raw Object.create children were never stamped, so setApprovalMode silently switched them child-locally with no strip/restore lifecycle. Head stamps every deriveConfig output, so the same call now throws unless an approval profile owns it. All interactive transition sites are profile-covered at head (per-agent configs always get one — the 23349f1 fix; dispatch contexts get one layered over the worktree profile; subagent contexts inherit it through the prototype). The residual bare-derived configs (memory/skill-scoped fork agents, remember configs) are headless paths where an interactive "Proceed always" cannot fire. Bounded, intentional per the design doc ("approval mode mutation: prohibited") — recorded as a behavior change, not a defect.

Corrections

None. (Round-1 claims re-checked and hold; no bot claims about this PR were found inaccurate.)

Findings (informational; none blocking)

F1/F2/F3 — carried over, statuses in the table above. No new blocking findings this round. The only behavioral deltas at head remain the three intended ones (drift fix, snapshot semantics, guard coverage expansion) plus the C3 latent-bug fix, all pinned by tests whose load-bearingness the mutation matrix re-proved at this head.

Mutation matrix (vacuity of the new/changed tests, re-run at new head)

Every mutant applied an exact hunk revert to the head source, ran its killer suite, and restored the file (runner verified byte-identical restoration for each; final git status --porcelain empty). Witness: 03-mutation-matrix.png; raw logs logs/m-M*.txt, runner matrix-runner.mjs.

# Mutant (guard/hunk) Suite that caught it Result
M1 plans assertions reverted to this.targetDir config.test.ts — "saves a plan on a derived agent config whose cwd differs from the project root" (only) killednot.toThrow() got plansDirectory must resolve within the project root
M2 setApprovalMode guard hasOwn exception removed InProcessBackend.test.ts ×3 (teammate switch / plan-mode restore / safety checks) killed — got Derived Configs cannot change approval mode where a transition was expected
M3 deriveWorktreeConfig field rebinds dropped config.test.ts — "rebinds worktree getters and private field reads together" (only) killedexpected '/path/to/target' to be '/tmp/worktree'
M4 deriveAgentConfig field rebinds dropped config.test.ts — "rebinds agent workspace getters…" (only) killedexpected '/path/to/target' to be '/tmp/agent-workspace'
M5 rule severity erroroff in eslint.config.js flat-config integration test (only) killedexpected false to be true
M6 rule body early-returns both lint test files killed both
M7 installed setApprovalMode property renamed (guard exception kept) InProcessBackend.test.ts ×3 (same three as M2) killedexpected 'plan' to be 'default'
M2+M7 combination row (layered pair reverted together) InProcessBackend.test.ts ×3 killed — the hazard appears in every single-hunk row, so the set is load-bearing and no survivor exists to reclassify
R1 reverse: exempt declaration-level import type { Config } both lint test files green both sides — the suite pins nothing along the type-only axis (F3 stands)

No survivors. Positive controls: M1/M3/M4 mutants live in config.ts and were killed by the same-file suite command; M2/M7 mutants (also config.ts) were killed by InProcessBackend.test.ts, whose import chain (InProcessBackend.ts../../config/config.js) collects the mutated file; every kill quoted expected-vs-actual values, and the unmutated control was green (798/798 + 232/235 + 4/4 runs below).

Targeted gates

  • Focused core suites at head: config + InProcessBackend + workflow-orchestrator = 798 passed (798); agent-override + subagent-manager(+override) + memory-scoped/remember/skillReviewAgentPlanner = 232 passed, 3 failed (235). Witness 05-focused-gate-summary.png; logs gate-core-1.txt, gate-core-2.txt.
  • The 3 fails are pre-existing, re-proven by A/A on the new base. SubagentManager > loadSubagent/deleteSubagent home-path tests fail identically at HEAD^1 (131 passed, 3 failed on both arms; same test names, same Received: /__w/_temp/verify-agent-home/.qwen/agents/… vs expected /home/user/…). Mechanism: the test mocks 'os' while storage.ts imports 'node:os'; the mock does not alias here, so the real HOME leaks. Unrelated to this PR (subagent-manager.ts hunk is deriveConfig(runtimeContext) only).
  • Scripts gate (npm run test:scripts): head 1674 passed, 1 file failed at collection — install-script.test.js requires the zip binary; this image ships unzip but no zip (checked: command -v zip empty). A/A on base: identical failure, 1670 passed (+4 at head = exactly the PR's 4 new lint-rule tests).
  • Lint gate proven live (lint-live.mjs, 11/11): fires on a planted production-path violation (L1); honors all exemptions (*.test.ts, config.ts, Object.create(null), no-Config-import, non-core paths — L2–L6); F3 corner still flagged (L7); all 4 residual non-null Object.create production sites lint clean (L8–L11).
  • Typecheck/build: npm ci + npm run build completed at HEAD before this round (workflow contract); base arm rebuilt packages/core at HEAD^1 cleanly; a forced full tsc --build of head packages/core exited 0.

Not covered

  • Per-commit attribution: depth-2 checkout — git rev-list HEAD^1..HEAD^2 yields 1 commit locally while the metadata lists 10, and HEAD^2's parents (including the previous head ded65e6) are unreachable. The two fix commits and the stacked refactor(core): centralize agent config derivation #9918 slice were verified only as the aggregate diff. The delta-vs-round-1 was therefore examined through the merged file states, not a byte diff against the old head.
  • Background-agent derivation — declared follow-up of design(core): make derived Config context ownership explicit #8083.
  • Windows/Linux runtime behavior of both slices (author-declared unvalidated; this round is Linux dist/unit level).
  • Repo-wide test suite and repo-wide npm run lint — targeted workspaces/files only, per budget.
  • AUTO strip/restore with a live PermissionManagerpermissionManager is null before initialize(); verified via the hooks contract (C6, hook call counts) plus the existing approval suites in the gate, not a live PM.
  • A/B drove the derivation layer; a full daemon/teammate E2E (a real Shift+Tab keystroke) was not run — the transition is reproduced at its config boundary (wire shape, not the UI event path).
  • install-script.test.js could not run anywhere (no zip in the image) — A/A'd as environmental.
  • The metadata snapshot's baseRefOid (83da723) predates the checkout's base tip; per the merge-ref contract HEAD^1 (2bd0ff92) was used as base throughout. Whether origin/main advanced past HEAD^1 after checkout is not observable here (no network).

Methodology

Environment: the CI verify container (node:22-bookworm), working tree at refs/pull/9915/merge, npm ci + npm run build pre-run at HEAD. A/B: base worktree at HEAD^1 under tmp/base-tree with packages/core rebuilt in isolation; lockfile unchanged by the PR, so reusing the root install is a clean control — packages/core declares no workspace deps, and the only borrow (the nested third-party packages/core/node_modules) was verified free of @qwen-code/* links before symlinking. Two base-build incidents were environmental, not arm differences: the nested-dir type packages were absent until symlinked, and the tsconfig paths entry for @lydell/node-pty resolves against each tree's own root — settled by a forced clean typecheck of head packages/core exiting 0 under the identical layout. One harness (ab-harness.mjs) drove both arms' compiled dist, arm selected by env, base builders copied verbatim from HEAD^1 sources. Vacuity: exact-string hunk reverts with per-mutant byte-identical restoration (matrix-runner.mjs); final git status --porcelain empty. Gates: vitest per affected file, --coverage.enabled=false, serial. Raw logs in logs/ (ab-head/base.txt, m-M*.txt, gate-*.txt, matrix.txt, lint-live.txt); harnesses kept in this directory for rerun. Assertion totals: 59 (head arm) + 58 (base arm) + 18 (matrix: 9 expectations + 9 restoration checks) + 11 (live lint probes) = 146 scripted assertions, 0 unexpected failures.

Flakiness gate log

rounds=5 files=8 skipped=0
file packages/core/src/agents/backends/InProcessBackend.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/backends/InProcessBackend.test.ts
file packages/core/src/agents/runtime/workflow-orchestrator.test.ts: (cd packages/core) npx --no-install vitest run ./src/agents/runtime/workflow-orchestrator.test.ts
file packages/core/src/config/config.test.ts: (cd packages/core) npx --no-install vitest run ./src/config/config.test.ts
file packages/core/src/subagents/subagent-manager-override.test.ts: (cd packages/core) npx --no-install vitest run ./src/subagents/subagent-manager-override.test.ts
file packages/core/src/subagents/subagent-manager.test.ts: (cd packages/core) npx --no-install vitest run ./src/subagents/subagent-manager.test.ts
file packages/core/src/tools/agent/agent-override.test.ts: (cd packages/core) npx --no-install vitest run ./src/tools/agent/agent-override.test.ts
file scripts/tests/no-config-object-create-config.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/no-config-object-create-config.test.js
file scripts/tests/no-config-object-create.test.js: (cd .) npx --no-install vitest run --config ./scripts/tests/vitest.config.ts ./scripts/tests/no-config-object-create.test.js


per-file results (P=pass F=fail I=infra-exit, one letter per run):
  packages/core/src/agents/backends/InProcessBackend.test.ts: PPPPP
  packages/core/src/agents/runtime/workflow-orchestrator.test.ts: PPPPP
  packages/core/src/config/config.test.ts: PPPPP
  packages/core/src/subagents/subagent-manager-override.test.ts: PPPPP
  packages/core/src/subagents/subagent-manager.test.ts: PPPPP
  packages/core/src/tools/agent/agent-override.test.ts: PPPPP
  scripts/tests/no-config-object-create-config.test.js: PPPPP
  scripts/tests/no-config-object-create.test.js: PPPPP

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

--- per-invocation detail (full copy in the artifact) ---
round 1 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 1 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 1 · packages/core/src/config/config.test.ts: P (exit 0)
round 1 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 1 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 1 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 1 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 1 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 2 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 2 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 2 · packages/core/src/config/config.test.ts: P (exit 0)
round 2 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 2 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 2 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 2 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 2 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 3 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 3 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 3 · packages/core/src/config/config.test.ts: P (exit 0)
round 3 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 3 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 3 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 3 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 3 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 4 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 4 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 4 · packages/core/src/config/config.test.ts: P (exit 0)
round 4 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 4 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 4 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 4 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 4 · scripts/tests/no-config-object-create.test.js: P (exit 0)
round 5 · packages/core/src/agents/backends/InProcessBackend.test.ts: P (exit 0)
round 5 · packages/core/src/agents/runtime/workflow-orchestrator.test.ts: P (exit 0)
round 5 · packages/core/src/config/config.test.ts: P (exit 0)
round 5 · packages/core/src/subagents/subagent-manager-override.test.ts: P (exit 0)
round 5 · packages/core/src/subagents/subagent-manager.test.ts: P (exit 0)
round 5 · packages/core/src/tools/agent/agent-override.test.ts: P (exit 0)
round 5 · scripts/tests/no-config-object-create-config.test.js: P (exit 0)
round 5 · scripts/tests/no-config-object-create.test.js: P (exit 0)

Evidence images

01-ab-head-all-green

02-ab-base-flip-control

03-mutation-matrix

04-lint-gate-live

05-focused-gate-summary

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

Qwen Code · sandboxed verification

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Triage re-run completed without a new review.

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

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

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

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

@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: diff + cross-file context for the factory functions (config.ts, agent.ts, workflow-orchestrator.ts, InProcessBackend.ts). NOT reviewed: runtime execution (no working tree available), Windows/Linux runtime behaviour (author's own disclosure).


CI disclosure — mandatory: Every check is SKIPPED except routing/label automation. No build, typecheck, lint, or test job ran against this branch in CI. The author reports 753 focused Config/Agent/Workflow tests and a full build pass locally on macOS (Node 22); Windows and Linux behaviour is explicitly unvalidated. Rungs 1–2 of the execution tier are therefore unverified.


No blocking findings.

Checked:

  • deriveWorktreeConfig / deriveAgentConfig / deriveApprovalModeConfig factories — getter and private-field rebound together; no split-path hazard.
  • setApprovalMode guard (isDerivedConfig && !hasOwnProperty('setApprovalMode')) — correctly allows only the approval-profile factory's own method through; bare derived Configs still throw.
  • getPlansAnchorTargetDir() prototype-chain walk — correctly anchors the containment assertion at the plans-owning base Config when cwd differs; test case "saves a plan on a derived agent config whose cwd differs from the project root" covers this path.
  • createApprovalModeOverride in agent.ts — cleanup now invoked in the catch block on registry-build failure; the AUTO-strip leak from the old implementation is closed.
  • approvalCleanup?.() in workflow-orchestrator.ts — correctly placed in the finally block; a no-op unless the dispatch context transitions into AUTO.
  • deriveConfig(runtimeContext) in SubagentManager.buildSubagentContextOverride — distinct instance triggers lazy fileReadCache install; marker Symbol still inherited via prototype for the "skip rebuild" path.
  • no-config-object-create ESLint rule — all migrated call sites confirmed; integration test covers production vs test vs config.ts exemption paths.

Suggestion (confirmed; already filed as R1-6 by qwen-code-ci-bot, still present): The importsConfig predicate in eslint-rules/no-config-object-create.js requires the import specifier to endsWith('/config/config.js'). A same-directory import using './config.js' evades the rule. The risk is narrow today (only non-config.ts siblings in packages/core/src/config/ would use the short form, and they are not excluded), but a future utility in that directory that derives Config via the short specifier would be silently unguarded. Extending the predicate to also match === './config.js' or anchoring on /config.js more broadly would close the gap.

Cross-check against prior rounds:

  • Round 1 Critical (setApprovalMode guard on bare derived Config, plans containment assertion, lint gate with no test, deriveAgentConfig test coverage): all fixed per author commits 23349f1, 94d0174, b553b21, feca442 — confirmed at head.
  • R1-6 (lint rule path gap): still present → confirmed above.
  • R2-1 (approvalCleanup in finally — suggestion): pattern is correct; no concern.

Reviewed with AI assistance.

function importsConfig(node) {
return (
typeof node.source.value === 'string' &&
node.source.value.endsWith('/config/config.js') &&

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.

The importsConfig predicate requires node.source.value.endsWith('/config/config.js'). A same-directory specifier './config.js' (used by siblings of config.ts within packages/core/src/config/) would evade the rule. The risk is narrow today — the exemption list already excludes config.ts itself, and no current sibling uses the short form — but a future utility added to that directory that derives Config would be silently unguarded. Extending the predicate to also match === './config.js' would close the gap. (Confirms qwen-code-ci-bot R1-6, still present.)

@yiliang114
yiliang114 added this pull request to the merge queue Aug 27, 2026
Merged via the queue into main with commit 6652fdc Aug 27, 2026
49 checks passed
@wenshao

wenshao commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Local real-stack verification of #9915 (post-merge confirmation)

I rebuilt this change from scratch on a local machine and drove it through the real bundled CLI (dist/cli.js + chunks) against a fake OpenAI provider and real git worktrees, rather than only running the unit suites. It landed as 6652fdc while the run was in flight, so this is a post-merge confirmation, not a merge gate.

Tested tree == merged tree. The change set I exercised (83da723 → 8f7779a) is byte-identical to what landed (10c5b3e → 6652fdc): same 19 files, same 1896-line diff, every added/removed line matching after normalising hunk offsets. 17 of 19 blobs share a SHA; config.ts / config.test.ts differ only because main moved underneath, and their PR-attributable change sets compare identical.

Verdict: the four Reviewer-Test-Plan claims all hold on the real stack, and there is no user-visible behaviour change on either worktree launch path. Two follow-ups worth filing — a coverage gap (§4) and a latent, currently-unreachable invariant (§5).


1 · Environment and repository gates

macOS 15 (darwin 25.6.0) · Node v24.18.1 · npm 11.16.0 · clean node_modules · full npm run build + npm run bundle on both arms (main @ 83da723 and PR @ 8f7779a).

gates

Every failure above was A/B'd: the two systemController > get_usage_info failures reproduce identically on main (pre-existing), and every other one passes when its file runs in isolation on both arms — load-induced flakes, none of them in a file this PR touches.

2 · Claims 1 + 2 — real CLI end-to-end, both worktree launch paths

Fixture: a throwaway git repo with a committed .probeignore (hidden-*), hidden-secret.txt and kept-visible.txt; settings carry context.fileFiltering.customIgnoreFiles: ['.probeignore']. A scripted provider makes the parent call agent(...); the child then runs pwd / git rev-parse / a relative write / glob, and the parent re-reports its own cwd afterwards. The child's tool results are read back off the wire, so the evidence is what the child's tools actually resolved — not a log line.

e2e

  • isolation: 'worktree' (provisioned) and working_dir (caller-owned) both bind the child's shell cwd, git toplevel, git branch, glob root and relative write to the child worktree.
  • The child's FileDiscoveryService inherits the configured custom ignore file — hidden-secret.txt filtered, kept-visible.txt not.
  • The parent's cwd is unchanged and the parent tree stays clean.
  • main and this PR are indistinguishable across all of it — the "internal refactor, no user-visible behaviour change" claim, discharged on the real binary.

The mutation row is the load-bearing part: reverting just the deriveWorktreeConfig call in agent.ts puts the child on main in the parent repo and writes child-marker.txt straight into the parent tree.

3 · Claims 3 + 4

Claim 3 (approval overlay above a derived worktree) was probed against the compiled packages/core/dist on both arms — table in §5. A bare deriveWorktreeConfig(...) throws Derived Configs cannot change approval mode; a deriveApprovalModeConfig(...) layered above it goes plan → default while staying bound to the worktree, leaving the parent's mode and target dir untouched.

Claim 4 — the same hand-rolled Object.create(base) as Config file dropped into packages/core/src on each arm:

lint

Scope note: the rule keys on an import … { Config } from '…/config/config.js' declaration. A barrel-imported Config would slip past, but architecture/no-core-root-barrel-import already rejects that import inside packages/core/src, so the two rules close each other's gap. An Object.create(someConfig) in a module that never imports Config at all remains invisible to it — acceptable, worth a line in the rule's docblock.

4 · Mutation matrix — is the test suite load-bearing?

One reverted hunk at a time against the 961 focused Config/Agent/Subagent/Workflow tests:

mutations

Seven of nine are killed, several precisely (S3 kills 11; S5 pins the new getPlansAnchorTargetDir prototype walk with a dedicated plan-persistence test). Two survive:

  • S6 — agent.ts no longer derives a worktree Config for isolation launches: 0 failing tests. The production call site this PR is named after has no automated coverage; only the deriveWorktreeConfig helper is unit-tested. The end-to-end probe in §2 kills it instantly, so a small AgentToolInvocation regression test — or promoting that probe into integration-tests/ — would close it cheaply.
  • S9 — workflow-orchestrator drops the approval profile over the derived dispatch context: 0 failing tests. See below.

5 · Latent finding — two dispatch chains end up with a bare derived Config that binds tools

Because deriveConfig stamps DERIVED_CONFIG and Object.create did not, every derivation this PR migrates now falls under the ownership guards. setApprovalMode is the one guard with an escape hatch (an own setApprovalMode). Probed on the compiled artifact, reproducing each arm's actual production overlay stack verbatim:

ownership

agent.ts, InProcessBackend and runForkedAgent all layer an approval profile unconditionally, so task / teammate / working_dir / memory-and-skill-review chains are unaffected. runOverridePath layers one only under if (effectiveContext !== config), so the plain agent() dispatch and the agent({schema}) dispatch reach SubagentManager with no approval owner anywhere in the chain; its deriveConfig(runtimeContext) then produces a stamped context that owns the subagent's tool registry but cannot change its own mode. A ProceedAlways on such a tool reaches Config.prototype.setApprovalMode, throws, and handleConfirmationResponse converts it into UNHANDLED_EXCEPTION on the tool call.

It is not reachable today, and I drove the real TUI to establish that rather than assuming it. A workflow-dispatched agent's edit parks in the background panel, which offers only allow once / No:

tui-workflow

The identical edit issued by the main agent does offer Yes, allow always, so the option is not globally absent — it is specifically suppressed for parked approvals:

tui-direct

The suppression is hideAlwaysAllow: true, hard-set in BackgroundTasksDialog.tsx:1532 and in four places in workflow-run-registry.ts (still true on current main). So the guard's safety on these two chains rests on an unrelated UI decision. If allow always is ever offered on a parked approval, workflow-dispatched edits start failing with Derived Configs cannot change approval mode.

Cheap follow-up — drop the condition in runOverridePath so the plain and schema dispatches get the owner the other paths already have (it runs before createSchemaConfigOverride, so the schema layer inherits it):

-  if (effectiveContext !== config) {
+  {
     const approvalHandle = deriveApprovalModeConfig(
       effectiveContext,
       config.getApprovalMode(),
     );
     approvalCleanup = approvalHandle.cleanup;
     effectiveContext = approvalHandle.config;
   }

The initial mode equals the base mode, so no AUTO strip is acquired and cleanup stays a no-op — the PROPOSED FIX row above is that exact chain, measured. Worth pairing with a test, since S9 shows nothing currently fails when the layer is removed.

6 · One measured behaviour delta worth naming

Unifying both approval-override builders onto deriveApprovalModeConfig extends InProcessBackend's untrusted-folder clamp to agent.ts's createApprovalModeOverride, which runForkedAgent calls with YOLO:

forked-mode

In an untrusted folder, remember / memory-extraction / dream / skill-review agents now start in default instead of yolo. This reads as the intended tightening rather than a regression, and I saw no functional impact — those agents run under a scoped PermissionManager that grants their tools independently of approval mode — but it is a real delta on that path and is not called out in the PR description.

7 · What I did not cover

Windows and Linux runtime behaviour (macOS only, matching the PR's own "Tested on"); background-agent derivation, which the PR explicitly scopes out; and ACP / web-shell as approval surfaces for parked approvals — I verified the TUI only, though Session.ts builds its option list from the same confirmationDetails, so hideAlwaysAllow should carry.

中文说明

#9915 本地真实环境验证(合入后确认)

我在本地从零重建了这个改动,并用真实打包的 CLIdist/cli.js + chunks)配合伪 OpenAI provider 和真实 git worktree 跑通,而不是只跑单测。验证过程中它已以 6652fdc 合入,所以这是一份合入后确认,不是合并门禁。

实测树 == 合入树。 我实测的改动集(83da723 → 8f7779a)与实际落地的(10c5b3e → 6652fdc)逐字节一致:同样 19 个文件、同样 1896 行 diff,归一化 hunk 偏移后每一行增删都相同。19 个 blob 中 17 个 SHA 相同;config.ts / config.test.ts 的差异只因为 main 在期间前进了,两者归属本 PR 的改动集比对完全一致。

结论:Reviewer Test Plan 的四条断言在真实链路上全部成立,两条 worktree 启动路径都没有用户可见的行为变化。 有两点值得开后续单:一个覆盖盲区(§4)和一个潜伏但当前不可达的不变量(§5)。


1 · 环境与仓库门禁

macOS 15(darwin 25.6.0)· Node v24.18.1 · npm 11.16.0 · 干净 node_modules · 两条腿main @ 83da723PR @ 8f7779a)都完整跑了 npm run build + npm run bundle

见上方门禁表。所有失败项都做了 A/B:两个 systemController > get_usage_info 失败在 main完全复现(既有问题);其余在单独跑该文件时两条腿都通过,属于负载抖动,且都不在本 PR 改动的文件里。

2 · 断言 1 + 2 —— 真实 CLI 端到端,两条 worktree 启动路径

夹具:临时 git 仓库,已提交 .probeignorehidden-*)、hidden-secret.txtkept-visible.txt;设置里配 context.fileFiltering.customIgnoreFiles: ['.probeignore']。脚本化 provider 让父会话调 agent(...),子 agent 再跑 pwd / git rev-parse / 相对路径写文件 / glob,随后父会话再报告自己的 cwd。子 agent 的工具结果是从线协议上读回来的,所以判据是它的工具真正解析到的位置,而不是一行日志。

  • isolation: 'worktree'(新建)与 working_dir(调用方已有)都把子 agent 的 shell cwd、git toplevel、git 分支、glob 根目录和相对写入绑定到子 worktree。
  • 子 agent 的 FileDiscoveryService 继承了配置的自定义 ignore 文件:hidden-secret.txt 被过滤,kept-visible.txt 没有。
  • 父 Config 的 cwd 不变,父目录树保持干净。
  • main 与本 PR 在所有这些项上完全一致,这就是"内部重构、无用户可见行为变化"在真实二进制上的兑现。

表中的变异行是判别力所在:只回退 agent.ts 里的 deriveWorktreeConfig 调用,子 agent 就跑在父仓库的 main 上,并把 child-marker.txt 直接写进父目录树。

3 · 断言 3 + 4

断言 3(派生 worktree 之上的 approval 覆盖)是对两条腿的编译产物 packages/core/dist 做的探针,见 §5 的表:裸 deriveWorktreeConfig(...)Derived Configs cannot change approval mode;叠在其上的 deriveApprovalModeConfig(...)plan → default,同时仍绑定 worktree,父 Config 的 mode 和 target dir 不受影响。

断言 4 —— 把同一个手写 Object.create(base) as Config 文件分别放进两条腿的 packages/core/src,只有本 PR 这条腿报错。

范围说明:该规则以 import … { Config } from '…/config/config.js' 声明为触发条件。走 barrel 导入的 Config 会绕过它,但 architecture/no-core-root-barrel-import 已在 packages/core/src 里禁止了这种导入,两条规则互相补位。真正的盲区是"完全不导入 Config 却对某个 config 对象做 Object.create"——可以接受,建议在规则注释里写明。

4 · 变异矩阵 —— 测试有没有判别力?

每次只回退一个 hunk,跑 961 个聚焦的 Config/Agent/Subagent/Workflow 测试:9 个变异 7 个被杀,且相当精准(S3 杀 11 个;S5 用一个专门的 plan 持久化测试钉住了新的 getPlansAnchorTargetDir 原型链回溯)。两个存活:

  • S6 —— agent.ts 不再为 isolation 启动派生 worktree Config:0 个测试失败。 本 PR 得名的那个生产调用点没有自动化覆盖,只有 deriveWorktreeConfig 这个 helper 有单测。§2 的端到端探针一击即中,补一个针对 AgentToolInvocation 的回归测试(或把该探针提升进 integration-tests/)成本很低。
  • S9 —— workflow-orchestrator 去掉派生 dispatch context 之上的 approval profile:0 个测试失败。 见下。

5 · 潜伏问题 —— 两条分发链最终拿到的是绑定了工具的裸派生 Config

因为 deriveConfig 会打 DERIVED_CONFIG 标记而 Object.create 不会,本 PR 迁移的每一处派生现在都落进了所有权守卫。setApprovalMode 是唯一带逃生舱(自有 setApprovalMode)的守卫。探针在编译产物上逐字复刻了每条腿真实的生产 overlay 栈。

agent.tsInProcessBackendrunForkedAgent 都是无条件叠 approval profile,所以 task / teammate / working_dir / 记忆与 skill-review 各链都不受影响。runOverridePath 只在 if (effectiveContext !== config) 时叠,于是普通 agent() 分发agent({schema}) 分发到达 SubagentManager 时整条链上没有任何 approval owner;其 deriveConfig(runtimeContext) 产出的 context 拥有该 subagent 的工具注册表,却无法修改自己的 mode。这类工具上一次 ProceedAlways 会走到 Config.prototype.setApprovalMode 抛异常,handleConfirmationResponse 再把它变成该工具调用的 UNHANDLED_EXCEPTION

但当前不可达,而且我是真的跑了 TUI 去确认,而不是靠推断。workflow 分发的 agent 的编辑会停在后台面板,只提供 allow once / No;同一个编辑由主 agent 发起时 Yes, allow always 是有的——说明这个选项不是全局缺失,而是专门对停泊审批做了抑制。

抑制来自 hideAlwaysAllow: true,硬写在 BackgroundTasksDialog.tsx:1532workflow-run-registry.ts 的四处(当前 main 上依然如此)。也就是说,这两条链上守卫的安全性目前依赖一个无关的 UI 决策。一旦有人给停泊审批加上 allow always,workflow 分发的编辑就会以 Derived Configs cannot change approval mode 失败。

低成本的后续修法——去掉 runOverridePath 里的条件,让普通分发和 schema 分发也拿到其它路径早就有的 owner(它在 createSchemaConfigOverride 之前执行,schema 层能继承):见上方 diff。初始 mode 等于 base mode,所以不会获取 AUTO strip,cleanup 保持空操作——表中 PROPOSED FIX 那一行就是这条链的实测结果。建议同时补测试,毕竟 S9 说明现在拿掉这层没有任何测试会红。

6 · 一个实测到、值得点名的行为变化

把两个 approval override 构造器统一到 deriveApprovalModeConfig,等于把 InProcessBackend 原有的 untrusted folder 钳制扩展到了 agent.tscreateApprovalModeOverride,而 runForkedAgent 正是以 YOLO 调用它的。

在不受信任的目录下,remember / 记忆抽取 / dream / skill-review 这几个 agent 现在的初始 mode 从 yolo 变成了 default。这看起来是有意的收紧而非回归,我也没有观察到功能影响——这些 agent 运行在作用域 PermissionManager 之下,其工具的放行与 approval mode 无关——但这条路径上确实存在实测差异,而 PR 描述里没有提到。

7 · 未覆盖的部分

Windows / Linux 运行时行为(只测了 macOS,与 PR 自述的 Tested on 一致);PR 明确划到范围外的 background-agent 派生;以及 ACP / web-shell 作为停泊审批的呈现面——我只验了 TUI,不过 Session.ts 的选项列表同样由 confirmationDetails 构造,hideAlwaysAllow 应当同样生效。

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Released in v0.22.3.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants