Skip to content

test(integration): migrate acp-cron to fake-openai-server (#8076) - #8082

Merged
wenshao merged 7 commits into
mainfrom
autofix/issue-8076
Jul 31, 2026
Merged

test(integration): migrate acp-cron to fake-openai-server (#8076)#8082
wenshao merged 7 commits into
mainfrom
autofix/issue-8076

Conversation

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

What this PR does

Migrates the acp-cron integration test from real model API calls to deterministic fake-openai-server scripted responses. The test now controls exactly what the model returns at each step (a cron_create tool call, confirmation text, interactive response, cron-fired response, and cleanup), eliminating model output variance as a failure source. Also adds per-agent QWEN_HOME isolation to prevent concurrent test interference with auth/model config.

Why it's needed

The test failed on main CI (run 30506000682) because it depended on real model inference to correctly call cron_create with specific parameters and return specific content. Real-model tests are inherently non-deterministic: the model may not call the right tool, may use wrong parameters, or may respond slowly enough to exceed timeouts. This is the same class of flakiness addressed in #7934, which migrated 39 test cases to fake-openai-server. The cron scheduler still uses real minute-boundary timing, so the test continues to validate the actual cron fire → sessionUpdate → streaming pipeline.

Reviewer Test Plan

How to verify

Run the integration test locally and confirm it passes deterministically:

npm run build && npm run bundle
cd integration-tests && QWEN_SANDBOX=false npx vitest run cli/acp-cron.test.ts

Expected: 1 test passed in ~55-65 seconds (the wait is the real cron minute-boundary timing).

Evidence (Before & After)

N/A — test-only change, no user-visible behavior.

Tested on

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

Environment (optional)

Integration test with fake-openai-server; no real model calls.

Risk & Scope

  • Main risk or tradeoff: the test no longer validates that a real model can correctly interpret the cron_create instruction. This is acceptable because tool-call correctness is covered by unit tests and other integration tests; this test's purpose is the cron fire → sessionUpdate pipeline.
  • Not validated / out of scope: macOS and Windows (CI covers those).
  • Breaking changes / migration notes: none.

Linked Issues

Fixes #8076

中文说明

本 PR 做了什么

acp-cron 集成测试从真实模型 API 调用迁移为确定性的 fake-openai-server 脚本化响应。测试现在精确控制模型在每一步返回的内容(cron_create 工具调用、确认文本、交互式响应、cron 触发响应和清理),消除了模型输出方差作为失败源。同时添加了每个 agent 独立的 QWEN_HOME 隔离,防止并发测试在认证/模型配置上的干扰。

为什么需要

该测试在主分支 CI(run 30506000682)上失败,因为它依赖真实模型推理来正确调用 cron_create 并传入特定参数、返回特定内容。真实模型测试本质上是不确定的:模型可能不调用正确的工具、使用错误的参数,或响应过慢导致超时。这与 #7934 中解决的不稳定性属于同一类别,该 PR 将 39 个测试用例迁移到了 fake-openai-server。cron 调度器仍然使用真实的分钟边界计时,因此测试继续验证实际的 cron 触发 → sessionUpdate → 流式传输管道。

审阅者测试计划

如何验证

在本地运行集成测试并确认其确定性通过:

npm run build && npm run bundle
cd integration-tests && QWEN_SANDBOX=false npx vitest run cli/acp-cron.test.ts

预期:1 个测试在约 55-65 秒内通过(等待时间是真实的 cron 分钟边界计时)。

证据(修改前后)

N/A — 仅测试变更,无用户可见行为。

测试平台

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

环境(可选)

使用 fake-openai-server 的集成测试;无真实模型调用。

风险与范围

  • 主要风险或权衡:测试不再验证真实模型能否正确解释 cron_create 指令。这是可以接受的,因为工具调用的正确性已由单元测试和其他集成测试覆盖;本测试的目的是 cron 触发 → sessionUpdate 管道。
  • 未验证 / 超出范围:macOS 和 Windows(由 CI 覆盖)。
  • 破坏性变更 / 迁移说明:无。

关联 Issue

修复 #8076

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

E2E Test Report

Root Cause

The acp-cron.test.ts integration test used real model API calls, making it inherently flaky. The model could fail to call cron_create correctly, return unexpected content, or respond slowly — any of which would cause the test to time out or fail assertions. This is the same class of flakiness that was addressed in #7934, which migrated 39 test cases to fake-openai-server.

Fix

Migrated the test to use fake-openai-server with scripted, deterministic model responses:

  • Request 0: returns a cron_create tool call with the expected parameters
  • Request 1: confirmation text after the tool result
  • Request 2: interactive prompt response ("INTERACTIVE8899")
  • Request 3: cron-fired prompt response ("CRONFIRE7742")
  • Request 4+: cleanup response ("Done.")

Also added QWEN_HOME isolation (per-agent config directory) to prevent concurrent test interference, following the pattern in acp-integration.test.ts.

The cron scheduler still operates on real minute-boundary timing — only model responses are deterministic.

Test Result

 ✓ cli/acp-cron.test.ts (1 test) 58375ms
   ✓ acp cron integration > cron job fires and streams results via sessionUpdate after prompt returns  58374ms

 Test Files  1 passed (1)
      Tests  1 passed (1)

Verification

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • npm run bundle — passed
  • vitest run cli/acp-cron.test.ts (integration, touched) — 1 passed (58s)
中文说明

E2E 测试报告

根本原因

acp-cron.test.ts 集成测试使用了真实的模型 API 调用,导致测试本质上不稳定。模型可能无法正确调用 cron_create、返回意外内容或响应缓慢——这些都会导致测试超时或断言失败。这与 #7934 中解决的不稳定性属于同一类别,该 PR 将 39 个测试用例迁移到了 fake-openai-server

修复方案

将测试迁移为使用 fake-openai-server,配合脚本化的确定性模型响应:

  • 请求 0:返回带有预期参数的 cron_create 工具调用
  • 请求 1:工具结果后的确认文本
  • 请求 2:交互式提示响应("INTERACTIVE8899")
  • 请求 3:cron 触发的提示响应("CRONFIRE7742")
  • 请求 4+:清理响应("Done.")

同时添加了 QWEN_HOME 隔离(每个 agent 独立的配置目录),以防止并发测试干扰,遵循 acp-integration.test.ts 中的模式。

cron 调度器仍然使用真实的分钟边界计时——只有模型响应是确定性的。

测试结果

 ✓ cli/acp-cron.test.ts (1 test) 58375ms
   ✓ acp cron integration > cron job fires and streams results via sessionUpdate after prompt returns  58374ms

 Test Files  1 passed (1)
      Tests  1 passed (1)

验证

  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过
  • npm run bundle — 通过
  • vitest run cli/acp-cron.test.ts(集成测试,已修改)— 1 通过(58秒)

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

@qwen-code-ci-bot

qwen-code-ci-bot commented Jul 30, 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 Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Thanks for the PR!

Template looks good ✓

Problem: observed, not theoretical — issue #8076 documents the acp-cron integration test failing on main CI (run 30506000682) because real model inference is non-deterministic. Same flakiness class as #7934.

Direction: well-aligned. Migrating flaky real-model integration tests to fake-openai-server is an established repo pattern (#7934 migrated 39 cases). The cron scheduler still runs on real minute-boundary timing, so the test keeps validating the actual cron fire → sessionUpdate → streaming pipeline.

Size: not applicable — single test file, no core paths.

Approach: scope is right. The diff does one thing — swap real model calls for scripted responses and add QWEN_HOME isolation. The follow-up commits since the last review (fa4d759 comment / no-op-cleanup fix, 87a02fb diagnostics + isolation hardening, f781009 clear stale qwenHome) are all directly in service of this goal — no drive-by changes. Placing qwenHome outside the workspace cwd (a sibling -home dir rather than .qwen-home inside testDir) is a deliberate improvement over the sibling pattern so workspace scans never see it.

Risk: no elevated risk signals — the only changed file is a .test.ts, which the high-risk path filter excludes.

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓

问题:已观测到,非理论性——issue #8076 记录了 acp-cron 集成测试在主分支 CI(run 30506000682)上因真实模型推理不确定而失败。与 #7934 属同一类不稳定。

方向:完全对齐。将不稳定的真实模型集成测试迁移到 fake-openai-server 是仓库既有模式(#7934 迁移了 39 个用例)。cron 调度器仍使用真实分钟边界计时,测试继续验证实际的 cron 触发 → sessionUpdate → 流式管道。

规模:不适用——仅单个测试文件,未触及核心路径。

方案:范围合理。diff 只做一件事——将真实模型调用替换为脚本化响应并添加 QWEN_HOME 隔离。上次 review 之后的后续提交(fa4d759 注释/空操作清理修正、87a02fb 诊断与隔离加固、f781009 清理陈旧 qwenHome)都直接服务于该目标——无顺手改动。将 qwenHome 放在工作区 cwd 之外(同级 -home 目录而非 testDir 内的 .qwen-home)是相对同级测试模式的刻意改进,使工作区扫描永远看不到它。

风险:无升级风险信号——唯一变更文件是 .test.ts,被高风险路径过滤器排除。

进入代码审查 🔍

Qwen Code · qwen3.8-max-preview

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code Review

Independent proposal: swap real model calls for startFakeOpenAIServer scripted responses, pass the fake server's baseUrl + a dummy key to the spawned agent via env vars, isolate QWEN_HOME so concurrent runs don't share auth/model config, fail fast if dispatch shifts, and close the server in finally.

Comparison with the diff: the PR does exactly this and follows the repo's established integration-test conventions. Verified against the helper API (fake-openai-server.ts exposes baseUrl, requests, close, and the handler receives requestIndex) — the PR uses all of these correctly. The scripted sequence (cron_create tool call at index 0, default reply thereafter) maps to the conversation flow, and the comment honestly flags that only index 0 is load-bearing because the CLI makes internal model calls between user-facing turns. The fail-fast guard on requests[0] turns what would otherwise be an opaque 75s timeout into a ~1s diagnostic if dispatch ever shifts — a real hardening. Env vars go to the spawned child (correct for ACP tests), and NO_PROXY/no_proxy for localhost matches sibling tests.

The QWEN_HOME dir is placed outside the workspace cwd and rmSync'd both before setup and in cleanup — this is the substantive isolation @wenshao confirmed (0 leaked files vs 9 without it, including the global cron lock). Removing the old Part 4 cron_delete prompt is safe: the scripted tool result is session-only, so with fixed parameters there is no persisted job to clean up.

No critical blockers. No convention violations.

Testing

This is a test-only change with no user-visible behavior — real-scenario testing is N/A.

CI evidence for e7d63fb: the unit suite and smoke checks are green. Note that the modified test itself lives in the Integration Tests (CLI, No Sandbox) job, which is skipped pending authorization on this branch — so CI did not execute acp-cron.test.ts. That gap is closed by @wenshao's independent manual run in this thread: mutation testing (M1 _meta.source flip, M2 cron-echo removal, M3 injected model delay) each failed the test as expected, the clean bundle passes, and the QWEN_HOME isolation was verified at the filesystem level. The evidence below is the maintainer's independent run, not the author's self-report.

Check Conclusion
Test (ubuntu-latest, Node 22.x) ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success
Classify PR ✅ success
Integration Tests (CLI, No Sandbox) ⏭️ skipped (pending authorization)
Test (macos-latest, Node 22.x) ⏭️ skipped
Test (windows-latest, Node 22.x) ⏭️ skipped

Latest run per check; the material skipped jobs are shown so the integration-test gap is visible. / 每个检查名取最新一次运行;列出关键的 skipped 任务以便看到集成测试缺口。

中文说明

代码审查

独立方案: 将真实模型调用替换为 startFakeOpenAIServer 脚本化响应,通过环境变量把 fake server 的 baseUrl 与虚拟 key 传给子进程,隔离 QWEN_HOME 防止并发共享认证/模型配置,分发错位时快速失败,在 finally 中关闭服务器。

与 diff 对比: PR 完全按此实现,并遵循仓库既有的集成测试约定。已对照 helper API 核实(fake-openai-server.ts 暴露 baseUrlrequestsclose,handler 接收 requestIndex)——PR 全部正确使用。脚本化序列(index 0 返回 cron_create 工具调用,其余返回默认回复)与对话流程对应,注释也诚实说明只有 index 0 是承重的,因为 CLI 会在用户轮次之间发起内部模型调用。针对 requests[0] 的快速失败守卫,把原本会是 75 秒不透明超时的情况变成约 1 秒的诊断——是实打实的加固。环境变量传给子进程(对 ACP 测试正确),NO_PROXY/no_proxy 与同级测试一致。

QWEN_HOME 目录放在工作区 cwd 之外,并在 setup 前和 cleanup 中各 rmSync 一次——这正是 @wenshao 确认的实质性隔离(0 个泄漏文件 vs 不隔离时 9 个,包括全局 cron 锁)。移除旧的 Part 4 cron_delete 提示是安全的:脚本化工具结果是 session-only,参数固定后没有需要清理的持久化任务。

无关键阻塞。无规范违反。

测试

仅测试变更,无用户可见行为——真实场景测试不适用。

e7d63fb 的 CI 证据:单元测试与冒烟检查全绿。注意被修改的测试本身位于 Integration Tests (CLI, No Sandbox) 任务,在该分支上因等待授权而 skipped——所以 CI 并未执行 acp-cron.test.ts。该缺口由本线程中 @wenshao 的独立手动运行弥补:变异测试(M1 翻转 _meta.source、M2 移除 cron 回显、M3 注入模型延迟)均按预期使测试失败,干净 bundle 通过,且 QWEN_HOME 隔离在文件系统层面得到验证。以下证据来自 maintainer 的独立运行,而非作者自报。

Qwen Code · qwen3.8-max-preview

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Confidence: 5/5 — clean, focused test migration that follows the repo's own fake-openai-server pattern, with an observed problem and independent maintainer verification behind it.

This is a textbook flaky-test fix. The problem is observed (main CI failure, issue #8076), the solution follows the established pattern (#7934), and the diff does one thing. Since the last review the author pushed three follow-up commits — a comment / no-op-cleanup correction, diagnostics + isolation hardening, and clearing the stale qwenHome before setup — all directly in service of the goal, no scope creep. The fail-fast guard on requests[0] and the filesystem-level QWEN_HOME isolation are genuine improvements over the first revision.

What settles it for me is @wenshao's independent mutation testing in this thread: flipping _meta.source, removing the cron echo, or injecting model delay each makes the test fail, and the clean bundle passes — so the migration removes the model-variance failure source without weakening the assertion. That's exactly the "does the test still pin the behavior" question, answered with evidence rather than trust.

The only thing this test no longer validates is that a real model can interpret the cron_create instruction — explicitly called out in the PR, and the right tradeoff since tool-call correctness is covered elsewhere.

CI is green on e7d63fb (unit suite + smoke); the integration job that runs this test is skipped pending authorization, but the maintainer's manual run covers it. Approving pinned to the reviewed commit.

中文说明

置信度:5/5 — 干净、专注的测试迁移,遵循仓库自身的 fake-openai-server 模式,且有已观测到的问题和 maintainer 的独立验证支撑。

这是一个教科书式的不稳定测试修复。问题已观测到(主分支 CI 失败,issue #8076),方案遵循既有模式(#7934),diff 只做一件事。上次 review 之后作者推了三个后续提交——注释/空操作清理修正、诊断与隔离加固、setup 前清理陈旧 qwenHome——都直接服务于目标,无范围蔓延。针对 requests[0] 的快速失败守卫和文件系统级的 QWEN_HOME 隔离是相对第一版的实质改进。

真正让我放心的是本线程中 @wenshao 的独立变异测试:翻转 _meta.source、移除 cron 回显、注入模型延迟,每一种都使测试失败,干净 bundle 通过——所以这次迁移在不削弱断言的前提下消除了模型方差这一失败源。这正是"测试是否仍然钉住行为"这个问题,用证据而非信任来回答。

该测试不再验证真实模型能否解释 cron_create 指令——PR 明确说明了这一点,这是正确的权衡,因为工具调用正确性已在别处覆盖。

CI 在 e7d63fb 上全绿(单元测试 + 冒烟);运行本测试的集成任务因等待授权而 skipped,但 maintainer 的手动运行已覆盖。审批将固定到所 review 的提交。

Qwen Code · qwen3.8-max-preview

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

@github-actions github-actions Bot added the review/self-reported The linked issue was opened by the PR author (self-reported) label Jul 30, 2026
@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 83.2% 83.2% 89.29% 82.52%
Core 87.46% 87.46% 89.09% 86.07%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |    83.2 |    82.52 |   89.29 |    83.2 |                   
 src               |   83.97 |     81.1 |   88.17 |   83.97 |                   
  cli.ts           |   96.03 |    84.61 |     100 |   96.03 | ...37-538,548-549 
  gemini.tsx       |   72.21 |    76.81 |   80.76 |   72.21 | ...1253-1257,1378 
  ...ractiveCli.ts |   85.65 |    81.55 |   87.17 |   85.65 | ...2390,2396,2448 
  ...liCommands.ts |   88.34 |     83.6 |      90 |   88.34 | ...63,480,514,635 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |    69.8 |    72.64 |   89.81 |    69.8 |                   
  acpAgent.ts      |   69.47 |     72.5 |   89.84 |   69.47 | ...43,11348-11350 
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  errorCodes.ts    |       0 |        0 |       0 |       0 | 1-22              
  ...ion-skills.ts |     100 |    88.23 |     100 |     100 | 17,32             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |   97.04 |    95.71 |   93.33 |   97.04 |                   
  filesystem.ts    |   97.04 |    95.71 |   93.33 |   97.04 | ...21-122,238-239 
 ...ration/session |   91.56 |    86.62 |    96.5 |   91.56 |                   
  Session.ts       |   91.14 |     85.5 |   96.03 |   91.14 | ...9148,9175-9179 
  ...entTracker.ts |   91.87 |    89.18 |   88.88 |   91.87 | ...33,197,280-289 
  ...stop-guard.ts |     100 |    98.07 |     100 |     100 | 37,127            
  ...eplay-page.ts |    93.1 |    90.72 |     100 |    93.1 | 71,82-85,111-121  
  ...y-replayer.ts |   98.53 |    95.52 |     100 |   98.53 | 238-240           
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.76 |    86.76 |     100 |   89.76 | ...54-270,326-328 
  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.68 |     93.7 |   96.66 |   95.68 |                   
  ...ageEmitter.ts |   95.34 |    94.11 |     100 |   95.34 | 52-59             
  PlanEmitter.ts   |     100 |    83.33 |     100 |     100 | 59                
  base-emitter.ts  |   78.26 |       75 |     100 |   78.26 | 23-24,26-28       
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   99.17 |    97.43 |     100 |   99.17 | 352-353           
 ...ession/rewrite |    91.8 |    89.13 |   94.44 |    91.8 |                   
  LlmRewriter.ts   |    82.4 |     86.2 |     100 |    82.4 | ...,88-89,166-170 
  ...Middleware.ts |   96.96 |    88.09 |     100 |   96.96 | 144,152-154       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/commands      |   89.02 |    73.18 |   64.51 |   89.02 |                   
  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.03 |      100 |      50 |   98.03 | 62                
  serve.ts         |   86.85 |     67.3 |     100 |   86.85 | ...32-635,649-653 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   86.99 |    87.03 |   89.67 |   86.99 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |      80 |    84.61 |      80 |      80 | 37-40,49-52,63-66 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   95.87 |    96.35 |     100 |   95.87 | ...08-213,271-274 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.89 |    85.39 |   94.11 |   93.89 | ...1209,1216-1217 
  loop-runtime.ts  |   91.66 |      100 |      50 |   91.66 | 15,22             
  ...classifier.ts |   98.49 |    96.51 |     100 |   98.49 | 115-116,161       
  ...tact-store.ts |   93.51 |    87.65 |     100 |   93.51 | ...71,288-289,337 
  pairing.ts       |   72.85 |      100 |      50 |   72.85 | 22-28,57-68       
  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         |   75.05 |    73.17 |   76.92 |   75.05 | ...31,537-540,552 
  ...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.82 |    87.82 |   87.09 |   88.82 |                   
  consent.ts       |   72.53 |       90 |   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 |    55.55 |     100 |      75 | ...27-131,133-137 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...amples/starter |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-64              
 src/commands/mcp  |   90.17 |    84.39 |   83.33 |   90.17 |                   
  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.59 |    83.87 |      80 |   92.59 | ...62-164,180-181 
  reconnect.ts     |   78.85 |    66.66 |   85.71 |   78.85 | 42-55,169-191     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |    85.1 |    86.35 |   85.85 |    85.1 |                   
  agent-prompt.ts  |   90.88 |    92.78 |      96 |   90.88 | ...1268,1738-1807 
  capture-local.ts |   68.57 |     90.9 |      75 |   68.57 | 107-111,158-189   
  ...k-coverage.ts |   48.38 |    14.28 |   66.66 |   48.38 | ...21-226,239-249 
  cleanup.ts       |   90.25 |    83.14 |   83.33 |   90.25 | ...77-482,484-485 
  ...ent-status.ts |   93.03 |    83.87 |   83.33 |   93.03 | 291,531-551       
  ...ose-review.ts |   95.85 |    91.25 |   93.75 |   95.85 | ...1439,1467-1489 
  fetch-pr.ts      |   74.02 |    53.57 |      50 |   74.02 | ...98,332,402-407 
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  parse-args.ts    |   99.27 |       96 |     100 |   99.27 | 345,417           
  plan-diff.ts     |   64.04 |      100 |   66.66 |   64.04 | 127-163           
  pr-context.ts    |   84.44 |    79.38 |   91.66 |   84.44 | ...29-910,939-941 
  presubmit.ts     |   83.75 |    92.72 |   88.88 |   83.75 | ...77-578,655-685 
  ...ve-anchors.ts |   77.02 |    88.46 |      75 |   77.02 | ...70-175,187-204 
  run.ts           |   81.14 |    86.17 |    90.9 |   81.14 | ...13,429-477,490 
  script-lint.ts   |   83.67 |    78.41 |   88.88 |   83.67 | ...59-773,775-797 
  submit.ts        |   76.74 |    82.05 |   81.81 |   76.74 | ...03-639,641-642 
  test-efficacy.ts |   87.11 |    83.43 |   93.33 |   87.11 | ...1394,1402-1422 
 ...nds/review/lib |   95.77 |    93.13 |   95.74 |   95.77 |                   
  agent-briefs.ts  |   98.68 |      100 |       0 |   98.68 | 520-521           
  anchors.ts       |     100 |    94.79 |     100 |     100 | ...33,169,178,225 
  coverage.ts      |   95.47 |    94.25 |   95.45 |   95.47 | ...98,335,433-450 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 63                
  diff-plan.ts     |   98.73 |    93.01 |     100 |   98.73 | ...41,264,290-291 
  effort.ts        |     100 |      100 |     100 |     100 |                   
  gh.ts            |    85.6 |    88.37 |   71.42 |    85.6 | ...20,257-258,285 
  git.ts           |   97.64 |    95.65 |     100 |   97.64 | 180-181           
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  local-diff.ts    |    84.4 |    88.46 |     100 |    84.4 | ...63-473,475-483 
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |     100 |    85.71 |     100 |     100 | 70                
  prompt-record.ts |   94.73 |    88.23 |     100 |   94.73 | ...28,151-152,156 
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  report.ts        |   94.38 |    93.75 |     100 |   94.38 | 173-177           
  roster.ts        |     100 |    94.23 |     100 |     100 | 143,161,206       
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  test-utils.ts    |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   96.27 |    93.18 |     100 |   96.27 | ...83,269-270,294 
  workspaces.ts    |   97.76 |     91.2 |     100 |   97.76 | 186-187,212-213   
 ...mands/sessions |   91.56 |    86.95 |   83.33 |   91.56 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
 src/config        |   94.22 |    88.75 |   95.91 |   94.22 |                   
  auth.ts          |   89.35 |    83.56 |     100 |   89.35 | ...97-298,314-315 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   88.33 |    88.34 |   84.84 |   88.33 | ...2394,2396-2404 
  ...cy-monitor.ts |   88.75 |    76.19 |     100 |   88.75 | ...3,90-92,98,101 
  ...ust-policy.ts |   83.04 |    88.28 |     100 |   83.04 | ...39,253,352-353 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  environment.ts   |   94.33 |    89.61 |   94.73 |   94.33 | ...35-639,655-656 
  ...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.41 |       50 |     100 |   97.41 | 239-242           
  ...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  |   96.55 |    95.55 |     100 |   96.55 | 223-224,229-231   
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      95 |    94.73 |     100 |      95 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |     100 |      100 |     100 |     100 |                   
  ...n-settings.ts |   99.15 |    93.75 |     100 |   99.15 | 63                
  sandboxConfig.ts |   61.64 |    71.87 |   66.66 |   61.64 | ...54-68,73,77-89 
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |   90.99 |     92.3 |      90 |   90.99 | ...1006,1008-1009 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...l-settings.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |       88 |     100 |   89.47 | 43-44,53-54,56-57 
  ...tedFolders.ts |   93.35 |    94.11 |     100 |   93.35 | ...90-391,427-438 
 ...nfig/migration |   95.23 |    77.77 |   83.33 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |    77.77 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |    71.8 |    70.31 |   66.66 |    71.8 |                   
  ...tputBridge.ts |   71.95 |    70.96 |   68.42 |   71.95 | ...08-409,417-420 
  ...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/i18n          |   85.98 |    81.92 |   89.65 |   85.98 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |      80 |    76.31 |   81.35 |      80 |                   
  session.ts       |   84.08 |    75.27 |   93.61 |   84.08 | ...1007,1016-1026 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...24-625,628-629 
 ...active/control |   76.11 |    89.09 |      80 |   76.11 |                   
  ...rolContext.ts |    6.45 |        0 |       0 |    6.45 | 56-95             
  ...Dispatcher.ts |   91.79 |    92.45 |   88.88 |   91.79 | ...49-367,387,390 
  ...rolService.ts |     7.4 |        0 |       0 |     7.4 | 46-185            
 ...ol/controllers |   39.78 |    63.24 |   47.22 |   39.78 |                   
  ...Controller.ts |   39.49 |      100 |      80 |   39.49 | 88-92,127-210     
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   49.11 |    62.96 |   54.54 |   49.11 | ...63-568,570-575 
  ...Controller.ts |   14.06 |      100 |       0 |   14.06 | ...82-117,130-133 
  ...Controller.ts |   37.92 |    60.71 |   46.66 |   37.92 | ...41-653,662-691 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.07 |    94.05 |   95.23 |   98.07 |                   
  ...putAdapter.ts |   97.98 |     93.2 |   98.07 |   97.98 | ...1415,1431-1432 
  ...putAdapter.ts |      96 |    91.66 |   85.71 |      96 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.38 |      100 |   90.47 |   98.38 | 84-85,125-126     
  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/serve         |   87.25 |    83.36 |   91.06 |   87.25 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |    93.4 |    92.95 |     100 |    93.4 | ...19-320,323-325 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    97.87 |     100 |     100 | 638               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...horization.ts |   92.79 |    93.33 |    87.5 |   92.79 | 75-80,135-136     
  ...livery-ipc.ts |     100 |     90.9 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  ...op-mcp-ipc.ts |   81.06 |    73.68 |   94.11 |   81.06 | ...37-242,267,289 
  ...nt-service.ts |   93.89 |    86.61 |     100 |   93.89 | ...66-468,475,477 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   85.85 |    91.78 |   95.83 |   85.85 | ...94-206,366-369 
  ...ebhook-ipc.ts |    98.5 |    86.66 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.27 |     85.2 |     100 |   87.27 | ...10,816-820,838 
  ...er-manager.ts |   89.39 |    83.88 |   93.33 |   89.39 | ...98,711,722-724 
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 88-89             
  ...supervisor.ts |   92.41 |    84.44 |    97.1 |   92.41 | ...1460,1514-1518 
  ...e-grouping.ts |     100 |    94.11 |     100 |     100 | 69,132            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |   92.04 |    77.77 |     100 |   92.04 | ...36-445,470,508 
  daemon-logger.ts |    82.2 |    77.26 |   91.76 |    82.2 | ...1720,1747-1753 
  ...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.37 |    90.06 |     100 |   98.37 | ...1041,1043-1044 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  demo.ts          |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |    91.3 |       80 |     100 |    91.3 | ...24-127,205-212 
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  ...h-settings.ts |   94.41 |    88.75 |     100 |   94.41 | ...24,702,718,728 
  fast-path.ts     |   90.33 |    80.23 |   95.45 |   90.33 | ...83-492,558-559 
  ...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-143             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...back-binds.ts |     100 |    88.88 |     100 |     100 | 32                
  ...-workspace.ts |    90.9 |    85.71 |     100 |    90.9 | ...27-128,139-140 
  ...iders-edit.ts |     100 |    82.14 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |     100 |    86.95 |     100 |     100 | 36,66,92          
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  rate-limit.ts    |   92.77 |    88.42 |     100 |   92.77 | ...93-295,307-309 
  ...qwen-serve.ts |   82.64 |    79.24 |   74.06 |   82.64 | ...6725,6730-6731 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  ...-keepalive.ts |   94.19 |    88.57 |     100 |   94.19 | ...26,530-531,571 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  server.ts        |    93.5 |    93.54 |   72.97 |    93.5 | ...2088,2109-2113 
  ...on-helpers.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 |                   
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |    93.3 |    76.57 |     100 |    93.3 | ...13,816,829-831 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   91.07 |    86.66 |     100 |   91.07 | ...79-182,216-219 
  ...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 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...-summaries.ts |   86.66 |       50 |     100 |   86.66 | 11,19             
  ...ace-memory.ts |      83 |    74.54 |     100 |      83 | ...30-537,597-604 
  ...ers-status.ts |   98.58 |       79 |     100 |   98.58 | 106,134,174,177   
  ...tion-store.ts |   89.67 |    88.27 |   92.59 |   89.67 | ...91-400,411-414 
  ...e-registry.ts |   93.89 |     87.5 |     100 |   93.89 | ...18-519,525-526 
  ...ber-errors.ts |     100 |    95.32 |     100 |     100 | 53,93-94,172,192  
  ...e-remember.ts |   98.14 |    88.92 |     100 |   98.14 | ...31,335-340,381 
  ...te-runtime.ts |   83.98 |    90.19 |     100 |   83.98 | ...48-156,216-237 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.63 |    72.72 |      96 |   72.63 | ...88-889,896-900 
  ...ls-mapping.ts |     100 |      100 |     100 |     100 |                   
  ...lls-status.ts |     100 |    92.85 |     100 |     100 | 127               
  ...reconciler.ts |    91.6 |     83.9 |     100 |    91.6 | ...70-272,305-306 
 ...serve/acp-http |      77 |    78.26 |   93.19 |      77 |                   
  ...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 |    98.2 |    88.62 |     100 |    98.2 | 1015,1041-1052    
  dispatch.ts      |   71.44 |    73.89 |   95.34 |   71.44 | ...4733,4781-4787 
  index.ts         |   81.81 |    79.72 |   90.56 |   81.81 | ...2279,2349-2350 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   93.96 |    88.57 |   84.61 |   93.96 | ...57-159,161-163 
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   91.86 |       80 |     100 |   91.86 | 45,50,96,100-103  
 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 |   85.73 |    73.17 |    97.5 |   85.73 |                   
  ...r-emulator.ts |   88.57 |    63.63 |     100 |   88.57 | ...72-175,194-195 
  ...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 |       0 |        0 |       0 |       0 |                   
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-119             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
 src/serve/fs      |    86.4 |    80.69 |     100 |    86.4 |                   
  audit.ts         |     100 |    96.15 |     100 |     100 | 204               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |     73.8 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.42 |    89.18 |     100 |   90.42 | 161-169           
  text-cursor.ts   |   88.23 |       90 |     100 |   88.23 | 74-77,92-95       
  ...ile-system.ts |   86.17 |    79.47 |     100 |   86.17 | ...2506,2516-2517 
 src/serve/routes  |   85.54 |    79.48 |   95.46 |   85.54 |                   
  a2ui-action.ts   |   96.84 |     88.5 |    87.5 |   96.84 | ...70-272,309-311 
  capabilities.ts  |     100 |      100 |     100 |     100 |                   
  ...nel-notify.ts |   85.22 |       88 |     100 |   85.22 | ...,83-87,103-104 
  ...l-webhooks.ts |   93.56 |    84.09 |     100 |   93.56 | ...42,292,332,334 
  daemon-status.ts |   85.45 |    83.33 |     100 |   85.45 | 98-105            
  goals.ts         |   98.92 |     90.9 |     100 |   98.92 | 146               
  health-demo.ts   |   94.73 |     86.2 |     100 |   94.73 | 62-66,154         
  permission.ts    |     100 |     92.3 |     100 |     100 | 50,98             
  ...uled-tasks.ts |   87.12 |    82.73 |   92.59 |   87.12 | ...1263,1306-1307 
  ...on-runtime.ts |     100 |    90.47 |     100 |     100 | 58,94             
  session.ts       |   85.19 |    81.58 |   95.08 |   85.19 | ...4433,4435-4436 
  sse-events.ts    |   84.45 |     87.5 |   77.77 |   84.45 | ...36,453-456,485 
  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.19 |    77.68 |     100 |   90.19 | ...47-448,467-468 
  ...d-contacts.ts |     100 |      100 |     100 |     100 |                   
  ...controller.ts |   83.09 |       79 |      90 |   83.09 | ...1032,1038,1041 
  ...extensions.ts |   87.23 |    72.76 |   94.11 |   87.23 | ...1826,1871-1872 
  ...-file-read.ts |      91 |    80.91 |     100 |      91 | ...20-621,624-625 
  ...file-write.ts |   84.44 |    64.51 |     100 |   84.44 | ...73-275,355-357 
  ...t-branches.ts |   75.43 |    66.66 |     100 |   75.43 | ...13-618,627-634 
  ...e-git-diff.ts |   97.32 |    90.56 |     100 |   97.32 | 161-162,189-191   
  ...ce-git-log.ts |     100 |    93.18 |     100 |     100 | 52,77,188         
  workspace-git.ts |   77.08 |    89.65 |     100 |   77.08 | 97-118            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...management.ts |   88.22 |    85.29 |     100 |   88.22 | ...1546,1566-1571 
  ...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 |   74.81 |    70.31 |     100 |   74.81 | ...47-658,664-665 
  ...tup-github.ts |   77.97 |    70.58 |   84.21 |   77.97 | ...46-352,397-398 
  ...ace-skills.ts |   69.87 |    78.12 |     100 |   69.87 | ...59-284,290-324 
  ...ace-status.ts |   82.94 |     74.5 |     100 |   82.94 | ...84-486,490-491 
  ...pace-tools.ts |   75.94 |    69.69 |   66.66 |   75.94 | ...59-164,193-194 
  ...pace-trust.ts |   78.42 |    64.78 |      80 |   78.42 | ...31-336,344-345 
  ...pace-voice.ts |   91.33 |    80.92 |     100 |   91.33 | ...70-673,676-678 
 src/serve/server  |   90.69 |    89.17 |   96.55 |   90.69 |                   
  access-log.ts    |   98.68 |     97.1 |     100 |   98.68 | 115,186           
  ...er-helpers.ts |   63.82 |    77.96 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.29 |       75 |     100 |   97.29 | 17                
  ...r-response.ts |   85.66 |    76.83 |     100 |   85.66 | ...02,719,782-791 
  fs-factory.ts    |     100 |    92.59 |     100 |     100 | 34,42,103,159     
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |    73.33 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.11 |    95.14 |     100 |   95.11 | ...65-167,422-427 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |   94.81 |    90.32 |     100 |   94.81 | 175-181           
  ...on-archive.ts |   89.55 |    87.78 |   97.14 |   89.55 | ...32-836,888-889 
  ...ion-export.ts |     100 |    94.44 |     100 |     100 | 64                
  session-list.ts  |   93.55 |    91.01 |     100 |   93.55 | ...79,681-687,827 
  telemetry.ts     |   99.01 |    97.45 |     100 |   99.01 | ...19,633,775-777 
 src/serve/voice   |   83.35 |    92.22 |   90.47 |   83.35 |                   
  ...ice-config.ts |   84.61 |       30 |     100 |   84.61 | 90-99,103-104     
  voice-ws.ts      |   77.16 |    94.73 |   83.33 |   77.16 | ...68,483,521-523 
  ...oordinator.ts |     100 |    98.21 |     100 |     100 | 176               
 ...kspace-service |   89.11 |    86.15 |   90.69 |   89.11 |                   
  index.ts         |   88.66 |    85.77 |   89.47 |   88.66 | ...1286-1290,1293 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   92.23 |    88.48 |   97.82 |   92.23 |                   
  ...mandLoader.ts |     100 |    88.88 |     100 |     100 | 104-117           
  ...killLoader.ts |   97.14 |    87.87 |     100 |   97.14 | 140,151-152       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   86.83 |    83.87 |     100 |   86.83 | ...30-335,340-345 
  ...omptLoader.ts |   79.55 |    88.29 |   83.33 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.36 |    92.68 |     100 |   97.36 | 153,160-161       
  ...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 |   88.29 |    86.48 |     100 |   88.29 | ...91-196,229-230 
  ...low-loader.ts |     100 |    96.15 |     100 |     100 | 88                
  setup-github.ts  |    90.8 |    80.95 |     100 |    90.8 | ...49-450,457-458 
  ...-args-file.ts |   93.54 |    90.47 |    87.5 |   93.54 | 201-203,217-223   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.71 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |   90.37 |    87.87 |     100 |   90.37 | ...80,287,352-357 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   90.46 |    82.19 |      96 |   90.46 | ...66-668,671-673 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.91 |    86.29 |   96.15 |   88.91 |                   
  DataProcessor.ts |   88.28 |    86.24 |   94.73 |   88.28 | ...1352,1356-1363 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.04 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.65 |     100 |   97.41 | 95-98             
  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    |   93.26 |       75 |   83.33 |   93.26 |                   
  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 
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   72.15 |    75.51 |   64.63 |   72.15 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   73.26 |    72.45 |   67.85 |   73.26 | ...4122,4164-4174 
  ...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        |      60 |      100 |   35.29 |      60 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...ractiveUI.tsx |   68.12 |    64.86 |   33.33 |   68.12 | ...98,321,341-346 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   58.53 |    66.18 |   51.06 |   58.53 |                   
  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.6 |    73.52 |     100 |    94.6 | ...21-222,241-247 
  ...rSetupFlow.ts |   43.18 |    33.33 |      50 |   43.18 | ...78-399,416-459 
 src/ui/commands   |    81.4 |    82.99 |    89.4 |    81.4 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  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 |    81.25 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 27,61             
  cdCommand.ts     |    92.3 |    82.75 |     100 |    92.3 | ...,94-99,178,187 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...24-125,133-142 
  ...essCommand.ts |   67.95 |    55.88 |      75 |   67.95 | ...86-187,201-204 
  ...astCommand.ts |   84.17 |       75 |     100 |   84.17 | ...,91-97,125-130 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   68.28 |    70.14 |   84.61 |   68.28 | ...66-599,610-611 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   81.64 |    87.67 |    90.9 |   81.64 | ...73-278,325-332 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 25                
  doctorCommand.ts |   65.37 |    81.88 |   94.11 |   65.37 | ...85-535,538-672 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   82.97 |    78.57 |     100 |   82.97 | 47-52,67-70,91-96 
  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   |   91.13 |    83.72 |      90 |   91.13 | ...81-184,196-199 
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.13 |    65.71 |   85.71 |   81.13 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |   52.83 |    81.25 |      70 |   52.83 | ...74-319,321-330 
  initCommand.ts   |   91.86 |       80 |     100 |   91.86 | 48,83-88          
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   93.45 |    89.06 |     100 |   93.45 | ...68-169,196-206 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   86.27 |    83.01 |     100 |   86.27 | ...22-935,969-974 
  ...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.06 |    88.37 |     100 |   89.06 | ...72-176,202-209 
  ...oreCommand.ts |    90.9 |    86.04 |     100 |    90.9 | ...41-146,176-177 
  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 |    6.43 |      100 |      50 |    6.43 | 31-330            
  tasksCommand.ts  |   77.22 |    72.13 |     100 |   77.22 | ...46-150,172-177 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...te-command.ts |     100 |    94.11 |     100 |     100 | 74,148            
  vimCommand.ts    |   54.54 |      100 |      50 |   54.54 | 19-29             
  voice-command.ts |   93.57 |       88 |     100 |   93.57 | 35,97-102         
  ...owsCommand.ts |   91.82 |    78.87 |   66.66 |   91.82 | ...59-160,169-174 
 src/ui/components |   70.64 |    78.44 |   76.29 |   70.64 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  ...ateScreen.tsx |   97.29 |     87.5 |   66.66 |   97.29 | 49                
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   95.65 |    66.66 |     100 |   95.65 | 27,52             
  ...TextInput.tsx |   88.65 |    90.41 |     100 |   88.65 | ...84-286,300-302 
  Composer.tsx     |   94.49 |    66.66 |     100 |   94.49 | ...-72,84,139,153 
  ...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 |       0 |        0 |       0 |       0 | 1-597             
  DiffDialog.tsx   |    53.5 |     37.5 |   69.23 |    53.5 | ...32-737,747-760 
  ...ngsDialog.tsx |       0 |        0 |       0 |       0 | 1-195             
  EffortDialog.tsx |   97.36 |      100 |     100 |   97.36 | 55-56             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   75.11 |     61.4 |      50 |   75.11 | ...48-253,271-275 
  ...ngSpinner.tsx |   68.42 |    85.71 |      50 |   68.42 | 35-52,73,80-81    
  GoalPill.tsx     |   83.33 |    76.92 |     100 |   83.33 | 24-30             
  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 |   78.51 |     65.3 |     100 |   78.51 | ...99,502,505-511 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   83.08 |    81.73 |      80 |   83.08 | ...2197,2223,2297 
  ...Shortcuts.tsx |   20.65 |      100 |       0 |   20.65 | ...7,50-52,68-126 
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.82 |    92.53 |      50 |   95.82 | ...97,440-444,447 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   83.41 |    71.65 |     100 |   83.41 | ...69,971,976-992 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |       0 |        0 |       0 |       0 | 1-56              
  ...onsDialog.tsx |       0 |        0 |       0 |       0 | 1-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 |       0 |        0 |       0 |       0 | 1-134             
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |       0 |        0 |       0 |       0 | 1-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 |   72.56 |       80 |      40 |   72.56 | ...06-109,114-117 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.49 |    73.89 |   69.23 |   71.49 | ...1244,1250-1251 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |       0 |        0 |       0 |       0 | 1-40              
  ...iewDialog.tsx |   97.77 |    87.67 |     100 |   97.77 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-172             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.5 |    85.18 |     100 |    93.5 | ...05,267,287-289 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   92.97 |    83.87 |     100 |   92.97 | ...45,248,275-277 
  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             
  ...criptView.tsx |   98.27 |    84.21 |     100 |   98.27 | 45,53             
  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 |       0 |        0 |       0 |       0 | 1-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 |   55.05 |    69.09 |      50 |   55.05 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |   21.05 |      100 |       0 |   21.05 | 21-39             
  ...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 |    42.3 |    68.69 |   73.68 |    42.3 |                   
  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 |       0 |        0 |       0 |       0 | 1-166             
  ...tusDialog.tsx |       0 |        0 |       0 |       0 | 1-288             
  ...topDialog.tsx |       0 |        0 |       0 |       0 | 1-213             
 ...ackground-view |    82.2 |    81.36 |    90.9 |    82.2 |                   
  ...sksDialog.tsx |   77.53 |     76.9 |   80.76 |   77.53 | ...1781,1803-1809 
  ...TasksPill.tsx |   67.03 |     86.2 |     100 |   67.03 | ...02-122,130-138 
  ...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.14 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.28 |   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.97 |    52.38 |   20.83 |   50.97 |                   
  ...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.56 |      100 |       0 |    9.56 | 40-67,70-158      
 ...mponents/hooks |   86.99 |    81.37 |   91.89 |   86.99 |                   
  ...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.04 |    61.53 |   70.58 |   40.04 |                   
  ...ealthPill.tsx |   68.42 |    85.71 |     100 |   68.42 | 40-46             
  ...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 |   89.82 |    86.17 |   85.29 |   89.82 |                   
  ...ionDialog.tsx |   89.23 |    84.27 |   81.81 |   89.23 | ...75,593,611-613 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    94.73 |     100 |     100 | ...43,289,402,432 
  ...onMessage.tsx |   92.06 |    82.35 |     100 |   92.06 | 58-60,62,64       
  ...nMessages.tsx |   94.44 |    97.77 |   78.57 |   94.44 | ...53-355,358-361 
  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 |   76.52 |     42.1 |   66.66 |   76.52 | ...00,102,125,156 
  ...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 |   89.75 |     79.1 |     100 |   89.75 | ...33-635,642-644 
  ...upMessage.tsx |   98.32 |    95.16 |     100 |   98.32 | 184-187,414       
  ToolMessage.tsx  |   92.49 |       85 |   93.33 |   92.49 | ...61-966,993-995 
 ...ponents/shared |   85.79 |    82.11 |   94.11 |   85.79 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.71 |    86.86 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |    83.33 |     100 |     100 | 73,93-95          
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   81.48 |    84.84 |     100 |   81.48 | 46-66,73-76       
  StaticRender.tsx |   72.72 |      100 |     100 |   72.72 | 31-33             
  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 |   88.51 |    85.11 |   81.81 |   88.51 | ...51-779,792,887 
  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 |       0 |        0 |       0 |       0 |                   
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-681             
 ...ents/subagents |       0 |        0 |       0 |       0 |                   
  constants.ts     |       0 |        0 |       0 |       0 | 1-71              
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |       0 |        0 |       0 |       0 | 1-190             
  types.ts         |       0 |        0 |       0 |       0 | 1-125             
  utils.ts         |       0 |        0 |       0 |       0 | 1-102             
 ...bagents/create |       0 |        0 |       0 |       0 |                   
  ...ionWizard.tsx |       0 |        0 |       0 |       0 | 1-299             
  ...rSelector.tsx |       0 |        0 |       0 |       0 | 1-85              
  ...onSummary.tsx |       0 |        0 |       0 |       0 | 1-331             
  ...tionInput.tsx |       0 |        0 |       0 |       0 | 1-177             
  ...dSelector.tsx |       0 |        0 |       0 |       0 | 1-63              
  ...nSelector.tsx |       0 |        0 |       0 |       0 | 1-58              
  ...EntryStep.tsx |       0 |        0 |       0 |       0 | 1-78              
  ToolSelector.tsx |       0 |        0 |       0 |       0 | 1-253             
 ...bagents/manage |   14.14 |    53.19 |    37.5 |   14.14 |                   
  ...ctionStep.tsx |       0 |        0 |       0 |       0 | 1-103             
  ...eleteStep.tsx |       0 |        0 |       0 |       0 | 1-62              
  ...tEditStep.tsx |       0 |        0 |       0 |       0 | 1-124             
  ...ctionStep.tsx |   35.61 |    59.52 |     100 |   35.61 | ...21-433,438-440 
  ...iewerStep.tsx |       0 |        0 |       0 |       0 | 1-73              
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-341             
 ...mponents/views |   69.81 |    72.64 |   61.11 |   69.81 |                   
  ContextUsage.tsx |   70.88 |    63.88 |      80 |   70.88 | ...20-426,463-557 
  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   |   84.11 |    81.79 |    86.3 |   84.11 |                   
  ...ewContext.tsx |   64.83 |    88.88 |      50 |   64.83 | ...16-219,225-235 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   92.45 |    62.79 |      50 |   92.45 | ...69-270,272-276 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.92 |    85.15 |     100 |   85.92 | ...1607-1609,1615 
  ...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 | 155-156           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 234-235           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   88.35 |    73.51 |   95.45 |   88.35 |                   
  ...ui-adapter.ts |   88.35 |    73.51 |   95.45 |   88.35 | ...74,792-793,879 
 src/ui/editors    |       0 |        0 |       0 |       0 |                   
  ...ngsManager.ts |       0 |        0 |       0 |       0 | 1-67              
 src/ui/hooks      |   84.99 |    82.51 |   89.57 |   84.99 |                   
  ...dProcessor.ts |   83.95 |    83.95 |     100 |   83.95 | ...39-871,918-919 
  ...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 | ...86-287,292-293 
  ...dProcessor.ts |   85.21 |     66.4 |   81.81 |   85.21 | ...1407,1428-1432 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.36 |    81.95 |   66.66 |   92.36 | ...00,502-503,658 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      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.73 |    76.59 |     100 |   94.73 | 162-166,255,261   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   94.85 |    80.76 |     100 |   94.85 | ...54,229,292-295 
  ...ompletion.tsx |   97.09 |    87.09 |     100 |   97.09 | ...23-324,334-335 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   96.29 |    90.56 |     100 |   96.29 | ...17-218,222-223 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   78.26 |       50 |     100 |   78.26 | ...2,75-79,96-104 
  ...eteCommand.ts |   78.53 |    88.57 |     100 |   78.53 | ...96-104,112-113 
  ...ialogClose.ts |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  useDiffData.ts   |       0 |        0 |       0 |       0 | 1-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 |   85.66 |    81.38 |   96.15 |   85.66 | ...3943,4111-4119 
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.01 |    98.36 |     100 |   98.01 | 139-142           
  ...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 |    9.67 |      100 |       0 |    9.67 | 11-32,39-90       
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   63.15 |       80 |      50 |   63.15 | 42-52,64-67       
  ...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.5 |     100 |     100 | 99                
  ...delCommand.ts |     100 |       95 |     100 |     100 | 53                
  ...ouseEvents.ts |   94.38 |    97.36 |   83.33 |   94.38 | 77-81             
  ...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 |    87.4 |    78.78 |     100 |    87.4 | ...71,321-333,381 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   88.95 |    86.95 |     100 |   88.95 | ...37-439,471-481 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   94.67 |    74.28 |     100 |   94.67 | ...19,174,233-238 
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.22 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.35 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |   85.48 |    58.33 |     100 |   85.48 | 22-28,40,71       
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.85 |    85.13 |   94.73 |   82.85 | ...78-680,688-724 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.13 |    93.33 |     100 |   97.13 | ...78-382,478-485 
  ...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 |   67.01 |    29.41 |     100 |   67.01 | ...10-111,115-116 
  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.2 |    89.47 |     100 |    91.2 |                   
  ...AppLayout.tsx |    90.9 |     87.5 |     100 |    90.9 | 60-62,110-115,151 
  ...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  |   86.47 |    79.88 |   96.66 |   86.47 |                   
  screen-buffer.ts |   94.73 |    64.28 |     100 |   94.73 | 51-52             
  ...ion-coords.ts |     100 |      100 |     100 |     100 |                   
  ...ction-span.ts |   92.72 |       90 |     100 |   92.72 | 37-38,67-68       
  ...tion-state.ts |   85.71 |      100 |   88.88 |   85.71 | 51-58             
  ...ction-text.ts |   92.85 |    92.45 |     100 |   92.85 | 30-34,114-115     
  ...selection.tsx |   80.31 |    59.64 |     100 |   80.31 | ...13-314,330-331 
 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      |   86.59 |       85 |    95.3 |   86.59 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   79.84 |     75.6 |     100 |   79.84 | ...66,270,328-329 
  ...wnDisplay.tsx |   92.87 |    93.46 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   92.38 |    81.91 |   95.23 |   92.38 | ...43-746,799-804 
  ...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.52 |    73.25 |   91.66 |   52.52 | ...23,626-635,638 
  commandUtils.ts  |   96.17 |    88.88 |     100 |   96.17 | ...77,179-180,323 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  formatters.ts    |    95.4 |    98.38 |     100 |    95.4 | 123-126           
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |       95 |     100 |     100 | 44,103            
  historyUtils.ts  |      96 |    97.05 |     100 |      96 | 102-105           
  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.23 |    69.06 |   95.12 |   86.23 | ...1284,1324-1330 
  ...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          |   90.43 |    78.33 |     100 |   90.43 | ...59,244,248-249 
  ...red-height.ts |   98.38 |     97.1 |     100 |   98.38 | 195-197           
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |     100 |      100 |     100 |     100 |                   
  ...storyUtils.ts |   79.32 |    77.37 |     100 |   79.32 | ...32-554,685-686 
  ...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 |   94.94 |      100 |   88.88 |   94.94 | 112-117           
  ...nal-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...wOptimizer.ts |     100 |    96.77 |     100 |     100 | 69                
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   95.97 |    94.06 |   94.44 |   95.97 | ...29-330,490-491 
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   90.42 |    92.85 |     100 |   90.42 | ...06-207,240-241 
  ...isplay-map.ts |     100 |      100 |     100 |     100 |                   
  updateCheck.ts   |     100 |    92.75 |     100 |     100 | 227-239,331       
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |   75.03 |    59.89 |   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 |    50.68 |     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      |   80.94 |    72.69 |   80.55 |   80.94 |                   
  ...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 |   89.72 |    65.33 |   93.75 |   89.72 | ...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 |    68.42 |     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         |   81.24 |    86.97 |   92.54 |   81.24 |                   
  ...p-profiler.ts |   98.39 |    90.56 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.19 |     100 |   97.36 | ...09-210,214-215 
  apiPreconnect.ts |   96.74 |    94.59 |     100 |   96.74 | 167-170           
  ...ol-call-id.ts |   84.61 |       60 |     100 |   84.61 | 26-27,37-38       
  ...ng-failure.ts |     100 |       95 |     100 |     100 | 72                
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  ...-api-error.ts |     100 |    96.42 |     100 |     100 | 14                
  cleanup.ts       |   84.05 |    94.11 |      80 |   84.05 | 80,111-121        
  commands.ts      |   97.45 |    96.66 |     100 |   97.45 | 153-155           
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |       90 |     100 |     100 | 41-43,49          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  ...putCapture.ts |   90.65 |    86.17 |     100 |   90.65 | ...72,370,372-373 
  ...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 
  ...AutoUpdate.ts |    93.1 |       94 |      90 |    93.1 | 103,108,179-190   
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.68 |    94.28 |     100 |   97.68 | ...59,376-377,422 
  jsonc-editor.ts  |   93.18 |    92.72 |     100 |   93.18 | ...80-381,384-385 
  languageUtils.ts |   98.88 |    97.05 |     100 |   98.88 | 184-185           
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   86.32 |    76.05 |     100 |   86.32 | ...02-303,331-341 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   94.25 |    91.17 |     100 |   94.25 | ...30,436,439-443 
  ...iveHelpers.ts |   95.13 |    91.79 |     100 |   95.13 | ...53-454,552,565 
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  ...uggestions.ts |   74.38 |    69.56 |     100 |   74.38 | ...92-103,105-116 
  processUtils.ts  |    92.3 |       80 |     100 |    92.3 | 45-46             
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   95.87 |    89.28 |     100 |   95.87 | 103-105,131       
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   45.67 |    56.93 |   76.92 |   45.67 | ...1034,1046-1069 
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  settingsUtils.ts |   82.35 |    89.57 |      90 |   82.35 | ...25-743,750-758 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |     87.5 |     100 |     100 | 23                
  systemInfo.ts    |   95.12 |    90.27 |     100 |   95.12 | ...54-255,260-264 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   76.47 |       25 |     100 |   76.47 | 13,17,23-24       
  ...on-handler.ts |    73.8 |       75 |     100 |    73.8 | 17-18,25-26,67-73 
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |    66.66 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  windowTitle.ts   |   95.45 |    93.33 |     100 |   95.45 | 54-55             
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   91.63 |    91.02 |      95 |   91.63 |                   
  cleanup.ts       |   95.77 |    95.83 |     100 |   95.77 | 70-72             
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  scheduler.ts     |   91.91 |    90.47 |    87.5 |   91.91 | 58-62,73,131-135  
  throttledOnce.ts |   86.66 |     86.2 |     100 |   86.66 | ...99,105,137-138 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   87.46 |    86.07 |   89.09 |   87.46 |                   
 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.12 |   95.16 |   90.24 |                   
  ...transcript.ts |   87.63 |    83.52 |     100 |   87.63 | ...79,587,593-597 
  ...ent-resume.ts |   85.52 |    77.55 |   83.33 |   85.52 | ...1779-1783,1786 
  ...ound-tasks.ts |   96.15 |     90.1 |   98.76 |   96.15 | ...1732,1752-1755 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   95.65 |    89.41 |     100 |   95.65 | ...12-413,485-489 
  ...w-snapshot.ts |   91.86 |       75 |     100 |   91.86 | ...54,178,185-187 
 src/agents/arena  |   76.32 |    67.71 |   78.94 |   76.32 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   75.11 |    64.51 |   78.57 |   75.11 | ...1887,1893-1894 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   78.09 |    85.23 |   76.28 |   78.09 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |    90.9 |    85.36 |   93.33 |    90.9 | ...70,672,674-675 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   90.37 |    85.82 |   87.44 |   90.37 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   85.05 |    76.73 |   77.77 |   85.05 | ...2287,2333-2335 
  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.34 |      100 |    92.3 |   98.34 | 81-82             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...ow-journal.ts |   91.76 |    75.86 |     100 |   91.76 | ...38-139,179-181 
  ...chestrator.ts |   91.79 |    87.79 |   82.35 |   91.79 | ...1774,1823-1826 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...ow-sandbox.ts |   96.87 |    94.51 |     100 |   96.87 | ...24-325,330-331 
  ...flow-saved.ts |   96.51 |    94.36 |     100 |   96.51 | 134-135,234-237   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 138-139,236       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   81.81 |    83.99 |    87.5 |   81.81 |                   
  TeamManager.ts   |   72.02 |    79.41 |   79.24 |   72.02 | ...1632,1655-1656 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   94.76 |    86.36 |   92.85 |   94.76 | 86-87,348-354     
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   88.85 |    82.56 |   96.29 |   88.85 | ...-990,1034-1035 
  team-events.ts   |   60.52 |      100 |      50 |   60.52 | ...40-144,151-155 
  teamHelpers.ts   |   92.02 |    94.91 |   95.23 |   92.02 | ...31-332,368-378 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   94.39 |    94.26 |   98.21 |   94.39 |                   
  ...on-harness.ts |   96.49 |    84.21 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |   98.49 |    95.08 |     100 |   98.49 | 201-203           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   84.89 |    86.99 |    75.1 |   84.89 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   84.18 |     86.7 |   73.46 |   84.18 | ...8166,8170-8171 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   94.39 |    91.57 |   88.23 |   94.39 | ...45-446,449-450 
 ...nfirmation-bus |   98.27 |    97.14 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   91.79 |    87.98 |   93.08 |   91.79 |                   
  baseLlmClient.ts |   88.28 |    82.48 |   81.81 |   88.28 | ...47,660,666-668 
  client.ts        |   91.92 |    87.39 |   91.56 |   91.92 | ...3915,4011-4012 
  ...tGenerator.ts |   86.34 |    87.34 |   84.61 |   86.34 | ...81-482,527-533 
  ...lScheduler.ts |   90.01 |    85.74 |      96 |   90.01 | ...5604,5632-5643 
  geminiChat.ts    |   92.42 |    89.26 |      96 |   92.42 | ...4429,4477-4478 
  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 | 47-48             
  ...on-helpers.ts |   93.49 |    78.57 |     100 |   93.49 | ...10-211,228-229 
  ...issionFlow.ts |   98.97 |    96.96 |     100 |   98.97 | 107               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   95.19 |    89.47 |     100 |   95.19 | ...44-245,290-291 
  prompts.ts       |   93.57 |    91.42 |   83.33 |   93.57 | ...1187,1390-1391 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |   96.89 |    80.88 |   88.23 |   96.89 | ...10,117-118,123 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |     92.3 |     100 |     100 | 87,122-139        
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...allIdUtils.ts |   98.41 |    93.47 |     100 |   98.41 | 36,45             
  ...okTriggers.ts |   99.45 |    92.43 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   98.52 |    91.66 |     100 |   98.52 | ...14,642-643,690 
 ...ntentGenerator |    96.2 |    87.41 |      96 |    96.2 |                   
  ...tGenerator.ts |   97.23 |    86.48 |   94.73 |   97.23 | ...1423,1452,1463 
  converter.ts     |   95.92 |    88.16 |     100 |   95.92 | ...1305,1484-1486 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   88.78 |    72.36 |   89.47 |   88.78 |                   
  ...tGenerator.ts |   87.18 |    71.83 |   88.88 |   87.18 | ...58-364,382-383 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |   95.21 |    86.46 |    92.3 |   95.21 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   95.12 |     85.4 |   91.89 |   95.12 | ...1169-1170,1198 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   91.65 |    90.23 |   95.23 |   91.65 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   91.15 |    89.32 |   96.87 |   91.15 | ...1914,2083-2098 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   60.31 |       75 |      50 |   60.31 | ...71,74-78,90-94 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   96.63 |    90.94 |     100 |   96.63 | ...1100,1108,1203 
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   92.24 |     92.4 |     100 |   92.24 | ...28-529,549-552 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   96.73 |    89.76 |   98.27 |   96.73 |                   
  dashscope.ts     |   97.48 |    91.91 |      95 |   97.48 | ...85-386,528-529 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |   99.16 |    96.96 |     100 |   99.16 | 198               
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |   92.13 |    82.14 |     100 |   92.13 | ...,39-40,135-137 
 src/extension     |    86.2 |    83.21 |   92.33 |    86.2 |                   
  ...ive-safety.ts |     100 |      100 |     100 |     100 |                   
  ...-converter.ts |   78.32 |    71.83 |     100 |   78.32 | ...1122,1168-1169 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |   80.39 |     87.5 |     100 |   80.39 | 50-59             
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   90.82 |    86.14 |   97.82 |   90.82 | ...1215-1221,1265 
  ...ionManager.ts |   81.06 |    78.78 |   81.52 |   81.06 | ...2705,2727-2728 
  ...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 |    84.61 |   85.71 |    75.9 | ...98,202,214-248 
  github.ts        |   88.58 |    82.13 |     100 |   88.58 | ...62,952-953,963 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |       96 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   88.39 |    83.11 |     100 |   88.39 | ...08,494,507-508 
  ...ork-policy.ts |   89.72 |       90 |     100 |   89.72 | ...36,148-154,156 
  npm.ts           |   89.02 |    81.81 |     100 |   89.02 | ...86-688,695-700 
  override.ts      |   94.11 |    93.33 |     100 |   94.11 | 63-64,81-82       
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.14 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    83.78 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |    80.61 |   89.47 |   85.77 | ...02-205,260-261 
 src/followup      |   77.48 |    79.84 |    90.9 |   77.48 |                   
  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   |   65.58 |    62.63 |   71.42 |   65.58 | ...21-622,629-630 
  ...onToolGate.ts |     100 |    96.55 |     100 |     100 | 97                
  ...nGenerator.ts |   72.03 |    81.15 |   83.33 |   72.03 | ...68-219,331-333 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   94.17 |    88.82 |   95.93 |   94.17 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   86.66 |   87.61 | ...85-188,196-204 
  goal-evidence.ts |   87.59 |     85.1 |   95.65 |   87.59 | ...12-613,636-639 
  ...projection.ts |   89.41 |    72.22 |   66.66 |   89.41 | ...28,131,135-137 
  ...ersistence.ts |   87.73 |    84.84 |      80 |   87.73 | ...-94,97,101-106 
  goal-protocol.ts |    91.3 |       90 |     100 |    91.3 | 107-108           
  goal-reducer.ts  |   92.21 |    85.48 |     100 |   92.21 | ...67-368,381,436 
  goal-runtime.ts  |   99.01 |    93.44 |     100 |   99.01 | ...83-684,707-708 
  goal-tools.ts    |   98.32 |    93.18 |   95.23 |   98.32 | ...48-149,256-257 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    92.85 |     100 |   92.46 | ...67-170,183-185 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-27              
  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.06 |    86.42 |   88.54 |   88.06 |                   
  ...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.48 |    84.61 |   94.59 |   95.48 | ...1019-1020,1030 
  hookPlanner.ts   |    87.5 |    85.36 |   86.66 |    87.5 | ...21-225,232-243 
  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.55 |      100 |   70.21 |   87.55 | ...45-746,752-753 
  ...HookRunner.ts |   79.06 |    66.66 |      80 |   79.06 | ...33-434,452-456 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   94.19 |    84.37 |   81.81 |   94.19 | ...76-384,458-459 
  ...SkillHooks.ts |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   94.87 |    88.88 |     100 |   94.87 | ...84,325,327-329 
  ssrfGuard.ts     |   86.45 |    89.13 |     100 |   86.45 | ...85,289-295,301 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   94.24 |    96.12 |   88.88 |   94.24 | ...44-545,630-634 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
  ...it-context.ts |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.98 |    85.03 |   79.03 |   76.98 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   69.16 |    84.65 |   68.29 |   69.16 | ...1068,1097-1105 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/lsp           |   58.96 |    70.57 |   66.14 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |       72 |   95.45 |   80.55 | ...02-504,508-514 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   75.73 |     80.1 |   79.66 |   75.73 | ...1346,1352-1382 
  ...eLspClient.ts |   32.78 |       80 |   16.66 |   32.78 | ...89-293,299-300 
  ...LspService.ts |      60 |    73.36 |   78.26 |      60 | ...1575,1635-1645 
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    82.3 |    77.81 |   78.33 |    82.3 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.31 |    58.06 |     100 |   79.31 | ...26-933,940-942 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.48 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.19 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.03 |   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        |   87.17 |    82.76 |   90.29 |   87.17 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.11 |    95.72 |   96.29 |   97.11 | ...85-287,361-362 
  const.ts         |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    81.81 |     100 |     100 | 126,136           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   91.48 |    75.75 |     100 |   91.48 | ...99,118-121,189 
  ...entPlanner.ts |   91.51 |    76.19 |     100 |   91.51 | ...04,113-116,290 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   81.83 |       75 |   83.33 |   81.83 | ...51,474,478-507 
  indexer.ts       |   94.14 |       84 |     100 |   94.14 | ...32-233,334,337 
  ...kill-agent.ts |   97.94 |    89.36 |     100 |   97.94 | 82-83,179-180     
  manager.ts       |    78.4 |    82.29 |   77.77 |    78.4 | ...1482,1495-1497 
  ...ent-config.ts |   82.27 |    77.92 |   83.33 |   82.27 | ...66,285,292-298 
  memoryAge.ts     |   90.47 |       80 |     100 |   90.47 | 50-51             
  paths.ts         |   94.73 |    95.94 |     100 |   94.73 | ...35-336,357-358 
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   97.26 |    87.03 |     100 |   97.26 | ...10-218,222,225 
  recall.ts        |   82.06 |       75 |    90.9 |   82.06 | ...59-364,395-406 
  refresh.ts       |   89.85 |    82.92 |     100 |   89.85 | ...54-155,162-163 
  ...ceSelector.ts |    93.1 |    81.81 |     100 |    93.1 | ...25,127-128,136 
  remember.ts      |   98.89 |    89.79 |     100 |   98.89 | 50,70             
  scan.ts          |   93.12 |    77.41 |     100 |   93.12 | ...08-109,154,157 
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   71.68 |    65.51 |   68.75 |   71.68 | ...90-394,397,403 
  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 |     87.5 |     100 |     100 | 30                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...63-277,291-296 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   92.54 |    88.64 |   91.13 |   92.54 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   97.77 |    91.83 |     100 |   97.77 | 155,161,171       
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |       44 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.13 |     100 |     100 | 177,260           
  modelsConfig.ts  |   89.36 |    86.93 |   88.09 |   89.36 | ...1404,1433-1434 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   83.58 |    91.02 |   70.71 |   83.58 |                   
  autoMode.ts      |   97.65 |    93.13 |     100 |   97.65 | ...79-586,632,709 
  ...transcript.ts |      98 |    84.61 |     100 |      98 | 200-201           
  classifier.ts    |      94 |    94.54 |     100 |      94 | 158-165,389-393   
  ...erousRules.ts |     100 |    89.36 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |   86.54 |    89.63 |      80 |   86.54 | ...1096,1202-1206 
  rule-parser.ts   |   94.18 |    91.89 |     100 |   94.18 | ...1345,1379-1381 
  ...-semantics.ts |   70.36 |    91.02 |   46.66 |   70.36 | ...2237,2300-2303 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.04 |    95.23 |     100 |   99.04 |                   
  system-prompt.ts |   99.04 |    95.23 |     100 |   99.04 | 220               
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   83.71 |     78.5 |   81.25 |   83.71 |                   
  all-providers.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   93.11 |     84.5 |     100 |   93.11 | ...56-257,330-331 
  ...der-config.ts |   75.85 |    73.84 |   78.26 |   75.85 | ...73-474,502-503 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.82 |    91.66 |   63.63 |   97.82 |                   
  ...oding-plan.ts |   87.34 |      100 |       0 |   87.34 | 82-84,87-89,91-94 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.05 |    81.25 |      75 |   97.05 | 118-119           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  grok.ts          |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.41 |    78.76 |   95.89 |   85.41 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   82.79 |    73.75 |   90.62 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |    76.61 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   89.54 |    84.26 |   96.93 |   89.54 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   97.68 |    85.71 |     100 |   97.68 | ...96,119,490-491 
  ...ionService.ts |   96.71 |    95.79 |     100 |   96.71 | ...83,699,832-840 
  ...ingService.ts |   90.91 |    84.17 |   95.45 |   90.91 | ...2058,2085-2086 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |    97.2 |    94.05 |     100 |    97.2 | ...39-340,378-381 
  cronScheduler.ts |   94.17 |    90.45 |      98 |   94.17 | ...1333,1736-1737 
  cronTasksFile.ts |   96.31 |    91.81 |     100 |   96.31 | ...11,336-337,483 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |     100 |      100 |     100 |     100 |                   
  ...temService.ts |   91.78 |    81.81 |   94.11 |   91.78 | ...37,463-470,517 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |    73.7 |    68.49 |   95.83 |    73.7 | ...2196,2225-2226 
  ...on-service.ts |   87.38 |       72 |     100 |   87.38 | ...01-305,343-344 
  ...references.ts |   98.39 |    88.76 |     100 |   98.39 | 154-155,215-216   
  ...ionService.ts |   98.22 |    97.34 |     100 |   98.22 | ...75-676,723-724 
  ...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.3 |    91.22 |     100 |    97.3 | ...53-454,611-612 
  ...ttachments.ts |   97.74 |     90.8 |     100 |   97.74 | 298-308,646       
  ...ersistence.ts |   90.95 |    78.75 |     100 |   90.95 | ...78,963-964,992 
  ...on-service.ts |   94.49 |    92.26 |   97.14 |   94.49 | ...98-600,656-664 
  ...ce-service.ts |   98.38 |    93.75 |   88.88 |   98.38 | 63-64             
  ...ipt-reader.ts |   94.51 |    89.14 |      98 |   94.51 | ...1102-1103,1167 
  ...est-helper.ts |       0 |        0 |       0 |       0 | 1-65              
  ...iter-lease.ts |   82.81 |    74.08 |    97.5 |   82.81 | ...2364,2376-2379 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   88.94 |    83.69 |   97.14 |   88.94 | ...2450,2520-2540 
  sessionTitle.ts  |   94.19 |    73.21 |     100 |   94.19 | ...43-246,277-278 
  ...ionService.ts |   84.35 |    78.37 |   97.14 |   84.35 | ...2472,2478-2483 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...Estimation.ts |     100 |    88.23 |     100 |     100 | 118-119           
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...rd-service.ts |     100 |    88.37 |     100 |     100 | ...29,145-146,241 
  ...oryService.ts |   90.72 |    84.07 |     100 |   90.72 | ...06-509,561-562 
  ...reeCleanup.ts |   14.42 |      100 |   33.33 |   14.42 | 58-186            
  ...ionService.ts |   87.98 |    86.95 |     100 |   87.98 | ...38-439,455-456 
 ...icrocompaction |   99.41 |    96.55 |     100 |   99.41 |                   
  microcompact.ts  |   99.41 |    96.55 |     100 |   99.41 | 244-245,677       
 ...s/visionBridge |   98.81 |    92.12 |     100 |   98.81 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |   98.72 |    82.35 |     100 |   98.72 | 65,71             
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   88.52 |     87.7 |   90.47 |   88.52 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |    93.33 |     100 |     100 | 93,112            
  skill-load.ts    |   94.84 |     87.5 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   84.07 |    83.67 |   83.33 |   84.07 | ...1233,1240-1244 
  skill-paths.ts   |   89.65 |    86.95 |     100 |   89.65 | ...11-112,117-118 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |       98 |     100 |   97.91 | 277-278           
 ...ataviz/scripts |   80.06 |    95.23 |   88.23 |   80.06 |                   
  ...te_palette.js |   80.06 |    95.23 |   88.23 |   80.06 | 261-296,306-328   
 ...s/bundled/loop |   97.48 |    95.77 |     100 |   97.48 |                   
  ...omous-loop.ts |     100 |      100 |     100 |     100 |                   
  ...-task-file.ts |   94.85 |     92.4 |     100 |   94.85 | ...56,367,375-376 
  ...k-resolver.ts |     100 |      100 |     100 |     100 |                   
 src/subagents     |   87.63 |    88.64 |   96.55 |   87.63 |                   
  ...ter-schema.ts |     100 |    98.07 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   84.25 |    85.31 |   94.87 |   84.25 | ...1566,1643-1644 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |   80.91 |    83.37 |   84.44 |   80.91 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   99.07 |    80.95 |     100 |   99.07 | 183,197           
  ...on-tracing.ts |   76.31 |    74.62 |   73.68 |   76.31 | ...80,387-389,405 
  ...attributes.ts |   95.15 |    87.27 |     100 |   95.15 | ...97-198,216-217 
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |     100 |    90.47 |     100 |     100 | 49,76             
  ...-exporters.ts |   65.78 |    83.33 |   55.55 |   65.78 | ...04-105,108-109 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |       99 |     100 |     100 | 99                
  ...ai-request.ts |   87.52 |    92.79 |   83.78 |   87.52 | ...55-561,564-570 
  gen-ai-usage.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.09 |    95.61 |      95 |   99.09 | 141,365-366       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |    56.1 |    71.15 |   64.15 |    56.1 | ...1376,1393-1413 
  metrics.ts       |   78.44 |    79.62 |   79.66 |   78.44 | ...1079,1082-1093 
  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      |   91.06 |    87.15 |   68.75 |   91.06 | ...32,478-479,495 
  sdk.ts           |   79.22 |    89.18 |   63.63 |   79.22 | ...57-161,199-221 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   90.83 |    90.05 |   96.77 |   90.83 | ...1666,1697-1700 
  ...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         |   82.35 |    87.23 |   86.04 |   82.35 | ...1361,1365-1372 
  uiTelemetry.ts   |   97.18 |    93.93 |      88 |   97.18 | ...70,314,461-462 
 ...ry/qwen-logger |   74.11 |     80.7 |      70 |   74.11 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.11 |    80.53 |   69.49 |   74.11 | ...1118,1156-1157 
 src/test-utils    |      94 |    98.24 |   78.94 |      94 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   92.57 |      100 |   75.75 |   92.57 | ...63,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   85.94 |    84.73 |   88.32 |   85.94 |                   
  ...erQuestion.ts |   89.71 |    80.76 |   91.66 |   89.71 | ...66-367,374-375 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.67 |     91.3 |   81.81 |   89.67 | ...03-304,315-322 
  cron-create.ts   |   90.64 |    92.85 |   72.72 |   90.64 | ...,73-74,223-231 
  cron-delete.ts   |   97.56 |      100 |   83.33 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.34 |    87.5 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |    82.7 |    86.77 |   81.25 |    82.7 | ...43-744,863-913 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |     82.6 |    87.5 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.29 |    83.65 |   94.44 |   83.29 | ...14-515,537-538 
  exitPlanMode.ts  |      95 |    85.29 |     100 |      95 | ...21-325,344,378 
  ...permission.ts |     100 |      100 |     100 |     100 |                   
  glob.ts          |   96.33 |     88.5 |     100 |   96.33 | ...24-225,373,376 
  grep.ts          |   90.73 |    86.61 |   85.71 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    77.41 |    90.9 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   94.02 |    82.35 |   83.33 |   94.02 | 31-32,47-48       
  loop-wakeup.ts   |   99.27 |    92.85 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.5 |   90.32 |   72.71 | ...1212,1214-1215 
  ...nt-manager.ts |   81.49 |     80.1 |   85.71 |   81.49 | ...3217,3219-3220 
  mcp-client.ts    |   79.87 |    85.58 |   89.47 |   79.87 | ...2259,2263-2266 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   77.56 |    84.11 |   77.14 |   77.56 | ...1291,1299-1300 
  ...ool-events.ts |       8 |      100 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |   97.46 |    93.93 |     100 |   97.46 | 175-176           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |    97.2 |    93.47 |     100 |    97.2 | ...00-801,856-857 
  ...sport-pool.ts |   83.49 |    80.15 |   84.61 |   83.49 | ...1409,1416-1420 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 101,108           
  monitor.ts       |   91.74 |    84.28 |   88.46 |   91.74 | ...93,606,804-809 
  notebook-edit.ts |   85.55 |    77.39 |   81.25 |   85.55 | ...86-902,948-949 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   82.57 |    90.24 |     100 |   82.57 | 174-185,234-247   
  read-file.ts     |   95.49 |    88.52 |   86.66 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  ...d-artifact.ts |   91.18 |    86.71 |    87.5 |   91.18 | ...26-427,441-453 
  ripGrep.ts       |    94.6 |    87.26 |   95.23 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   81.13 |    89.74 |    62.5 |   81.13 | ...80-286,363-371 
  ...n-mcp-view.ts |   93.57 |     92.3 |      90 |   93.57 | 122-130           
  shell.ts         |   78.78 |    84.06 |   91.91 |   78.78 | ...5019,5082-5083 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   91.06 |    93.33 |   89.47 |   91.06 | ...71,475,520-542 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.33 |   81.81 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   73.38 |    77.77 |   83.33 |   73.38 | ...02,105,109-116 
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.89 |    83.92 |    92.3 |   82.89 | ...14-422,454-465 
  team-create.ts   |   97.22 |    85.71 |   83.33 |   97.22 | 48-49,129-130     
  team-delete.ts   |   86.74 |    83.33 |   83.33 |   86.74 | 37-38,42-48,72-73 
  ...n-approval.ts |   92.14 |    96.77 |   77.77 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   94.36 |    84.61 |   92.85 |   94.36 | ...10-415,437-438 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   78.57 |    79.59 |    82.6 |   78.57 | ...89-990,998-999 
  tool-search.ts   |   96.19 |    89.72 |   93.33 |   96.19 | ...09,259-264,426 
  tools.ts         |   92.74 |    91.52 |    91.3 |   92.74 | ...63-564,580-586 
  ...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.53 |    83.57 |      80 |   90.53 | ...1007,1065-1068 
  write-file.ts    |    86.7 |    84.92 |   88.88 |    86.7 | ...24-827,864-899 
  zoom-image.ts    |   95.76 |    93.75 |      90 |   95.76 | 54-59,203-204     
 src/tools/agent   |   86.08 |    85.96 |   87.73 |   86.08 |                   
  agent.ts         |   85.37 |    85.71 |   86.31 |   85.37 | ...4219,4241-4251 
  fork-subagent.ts |   99.32 |       90 |     100 |   99.32 | 81                
 ...tools/artifact |   95.78 |    92.51 |   88.63 |   95.78 |                   
  artifact-tool.ts |   91.46 |    88.46 |   71.42 |   91.46 | ...13-314,322-325 
  ...-publisher.ts |     100 |    85.71 |     100 |     100 | 32                
  ...-publisher.ts |   96.74 |    97.72 |    87.5 |   96.74 | 29-30,156-157     
  html.ts          |     100 |    96.77 |     100 |     100 | 122               
  ...-publisher.ts |     100 |       80 |     100 |     100 | 30                
  oss-publisher.ts |    98.1 |    91.48 |     100 |    98.1 | 43-45             
  publisher.ts     |     100 |      100 |     100 |     100 |                   
 ...s/computer-use |   90.21 |    82.17 |   78.08 |   90.21 |                   
  bootstrap.ts     |   59.42 |    80.95 |   41.66 |   59.42 | ...35-339,341-345 
  client.ts        |   80.11 |       90 |   77.77 |   80.11 | ...97,242-243,274 
  constants.ts     |     100 |    94.73 |     100 |     100 | 129,256           
  downloader.ts    |   65.29 |    52.77 |   58.33 |   65.29 | ...99-300,316-355 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install-state.ts |   94.44 |    72.72 |     100 |   94.44 | 44-45             
  ...n-detector.ts |     100 |     87.5 |     100 |     100 | 50                
  schemas.ts       |     100 |      100 |     100 |     100 |                   
  tool.ts          |    96.3 |    85.71 |     100 |    96.3 | 75-76,184,252-258 
 ...tools/workflow |   87.46 |    79.41 |   85.71 |   87.46 |                   
  workflow.ts      |   87.46 |    79.41 |   85.71 |   87.46 | ...51-652,664-667 
 src/utils         |   92.81 |    89.71 |   96.82 |   92.81 |                   
  LruCache.ts      |     100 |      100 |     100 |     100 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |   94.94 |    92.47 |     100 |   94.94 | ...43-544,651-655 
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.45 |     100 |   98.45 | 132-133,159-160   
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...ncyLimiter.ts |   94.64 |    95.23 |     100 |   94.64 | 64-66             
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.06 |    89.47 |     100 |   91.06 | ...46-147,154-155 
  ...n-branches.ts |   95.81 |    93.95 |      95 |   95.81 | ...91-492,504-517 
  ...tion-chain.ts |     100 |      100 |     100 |     100 |                   
  cronDisplay.ts   |     100 |    97.61 |     100 |     100 | 46                
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   96.66 |    96.61 |   88.88 |   96.66 | 192-196           
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...27-428,462-463 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  encoding.ts      |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |   96.63 |    90.13 |   96.66 |   96.63 | ...42,444-445,512 
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   82.62 |    94.32 |    61.9 |   82.62 | ...62-378,382-388 
  fetch.ts         |   90.68 |    82.51 |     100 |   90.68 | ...72,483-484,503 
  fileUtils.ts     |   94.96 |    93.47 |   96.15 |   94.96 | ...1865,1890-1891 
  forkedAgent.ts   |   92.45 |    82.35 |   93.75 |   92.45 | ...34,642,647-654 
  formatters.ts    |   81.81 |       75 |     100 |   81.81 | 15-16             
  ...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 
  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.02 |    81.25 |   85.71 |   78.02 | ...22-123,147-198 
  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.12 |    93.33 |     100 |   95.12 | ...68-172,240-244 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   95.27 |     93.1 |     100 |   95.27 | ...16-317,359-362 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iconv-lite.ts |     100 |      100 |     100 |     100 |                   
  ...simple-git.ts |   96.77 |    91.66 |     100 |   96.77 | 38                
  ...m-headless.ts |      96 |    88.88 |     100 |      96 | 34                
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |    92.4 |    89.13 |     100 |    92.4 | ...28,331,522-525 
  ...tProcessor.ts |   94.01 |       90 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.21 |     100 |   98.96 | 153               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  notebook.ts      |   94.57 |    89.91 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   91.66 |    89.74 |     100 |   91.66 | ...26-228,251-256 
  osc8.ts          |   54.26 |    64.86 |   83.33 |   54.26 | ...72-195,197-257 
  partUtils.ts     |     100 |    98.64 |     100 |     100 | 211               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   93.95 |    92.79 |     100 |   93.95 | ...78-479,481-483 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  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 |   97.29 |    86.93 |     100 |   97.29 | ...59-660,735-736 
  readManyFiles.ts |   96.29 |    87.23 |     100 |   96.29 | 225,276,286-290   
  retry.ts         |   96.09 |    92.52 |     100 |   96.09 | ...67,558-559,577 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.02 |     100 |   97.63 | ...17,251-252,278 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   90.04 |    93.43 |   95.45 |   90.04 | ...55-565,598-599 
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   84.87 |    86.61 |   96.29 |   84.87 | ...71,696,725-734 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |    97.5 |       90 |     100 |    97.5 | 162-163           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...-child-env.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   98.03 |    97.75 |     100 |   98.03 | 100,102-103       
  ...aValidator.ts |   92.09 |    83.65 |   90.47 |   92.09 | ...60,882-883,896 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.78 |    92.18 |     100 |   91.78 | ...66-569,645-646 
  ...nIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...orageUtils.ts |   95.98 |    83.96 |     100 |   95.98 | ...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.07 |    88.36 |     100 |   86.07 | ...2269,2276-2280 
  ...lAstParser.ts |   98.16 |    91.91 |     100 |   98.16 | ...1244-1246,1256 
  ...ContextEnv.ts |     100 |       92 |     100 |     100 | 50-52             
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |    86.66 |     100 |   86.82 | ...79-185,187-193 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |       50 |     100 |   77.77 | 44,54-59          
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...-finalizer.ts |   97.66 |     90.9 |     100 |   97.66 | 165-166,168-172   
  tool-utils.ts    |    95.2 |    93.61 |     100 |    95.2 | ...58-159,162-163 
  ...ultCleanup.ts |   54.62 |       64 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.13 |    96.36 |     100 |   96.13 | ...34-339,341-346 
  ...pt-records.ts |   85.85 |    83.63 |     100 |   85.85 | ...90-394,424-439 
  truncation.ts    |   90.56 |    90.43 |     100 |   90.56 | ...35-443,480-486 
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...aceContext.ts |   95.81 |    89.39 |     100 |   95.81 | ...74-275,299-301 
  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.68 |    80.38 |   94.69 |   83.68 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |   82.47 |    76.22 |      95 |   82.47 | ...1525,1559-1560 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.43 |   89.47 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |   69.76 |    75.47 |   85.29 |   69.76 |                   
  ...eTokenizer.ts |   65.72 |    74.02 |    92.3 |   65.72 | ...65-466,479-533 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |   76.92 |      100 |   33.33 |   76.92 | 46-49,56-57       
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

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

@qwen-code-review-bot

Copy link
Copy Markdown
Collaborator

Review: PR #8082 — test(integration): migrate acp-cron to fake-openai-server

Clean, well-scoped test-only change. Single file, follows the established fake-openai-server migration pattern from #7934.

No actionable issues found. A few observations:

  1. Correctness — The scripted requestIndex switch covers the full flow (tool call → confirmation → interactive → cron-fire → cleanup) with a safe default fallback. fakeServer.close() is properly in finally.

  2. Isolation — Per-agent QWEN_HOME via mkdirSync + NO_PROXY/no_proxy for localhost are good hygiene for parallel CI.

  3. Minor nit (non-blocking)setupAcpCronTest(rig, fakeServer) only reads fakeServer.baseUrl; passing the URL string would be a tighter interface. But this matches how other migrated tests pass the server object, so consistency wins.

  4. Tradeoff acknowledged — Test no longer validates real-model tool-call interpretation, but that's the correct scope split: this test owns the cron-fire → sessionUpdate pipeline, not model correctness.

LGTM, ship it.

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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. 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-preview via Qwen Code /review

@qwen-code-dev-bot

qwen-code-dev-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator Author

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

中文说明

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

Autofix Review Response — PR #8082

No changes made this round.

Feedback triage

# Source Type Disposition Reason
1 @qwen-code-ci-bot (automated reviewer) COMMENTED review No action Informational only — noted that integration tests were skipped in CI. No defect or change requested.
2 @qwencodeqaq (issue-level comment) LGTM review No action "No actionable issues found. LGTM, ship it."
3 @qwencodeqaq, observation #3 Non-blocking nit Decline Suggested passing fakeServer.baseUrl instead of the server object to setupAcpCronTest. The reviewer themselves concluded "this matches how other migrated tests pass the server object, so consistency wins." No change needed.

No inline comments, no failed checks, no changes-requested reviews.

中文说明

Autofix 审查回应 — PR #8082

本轮未做任何更改。

反馈分类

# 来源 类型 处理 原因
1 @qwen-code-ci-bot(自动审查) COMMENTED 审查 无需操作 仅供参考——指出集成测试在 CI 中被跳过。未报告缺陷,也未要求更改。
2 @qwencodeqaq(Issue 级评论) LGTM 审查 无需操作 "未发现可操作的问题。LGTM,可以合并。"
3 @qwencodeqaq,观察 #3 非阻塞建议 拒绝 建议将 fakeServer.baseUrl 而非服务器对象传给 setupAcpCronTest。审查者自己总结道:"这与其他已迁移测试传递服务器对象的方式一致,因此一致性优先。"无需更改。

无行内评论、无失败检查、无要求更改的审查。

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


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

@wenshao

wenshao commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Local verification round — real build, real ACP session, no credentials

Verdict: merge-ready. 75/75 executed assertions produced their expected
outcome (0 unexpected failures). Two non-blocking findings, both about comments
and documented expectations rather than behaviour. Verified PR head
32070ea55b761749320be176e3e106d62f56c159 against base 4dab39c8.

Built and run on a real local macOS environment (npm run build && npm run bundle,
Node v24.18.1, Darwin 25.6.0): 11 integration-test executions, no provider
credentials in scope, no external model calls.

中文完整版本(点击展开)

本地验证轮次 —— 真实构建、真实 ACP 会话、无凭据

结论:可以合并(merge-ready)。 已执行的 75 项断言全部得到预期结果(0 项非预期失败)。
两项非阻塞发现,都涉及注释与文档化的预期,而非行为本身。已验证的 PR head 为
32070ea55b761749320be176e3e106d62f56c159,base 为 4dab39c8

在真实的本地 macOS 环境完成构建与运行(npm run build && npm run bundle
Node v24.18.1,Darwin 25.6.0):共 11 次集成测试执行,全程无 provider 凭据,无任何外部模型调用。

核心主张与 A/B 对照

这个 PR 要让一件事成立:acp-cron.test.ts 的结果不再取决于模型说了什么。
下面所有单元格跑的都是同一个真实产物(PR 只改测试,产物代码与 base 相同),
每格唯一的变量都在表中写明。

# 单元格 差异 判据 结果
A PR 测试,未做任何修改(7 次运行) vitest 退出码 + 7 项脚本化断言 7/7 通过(11.1s / 17.1s / 38.2s / 46.8s / 52.3s / 56.2s / 65.0s)
B 同一套 harness,模型对第 1 个 prompt 用自然语言回答,而不调用 cron_create 仅一条脚本化回复 等待 cron 触发的 user_message_chunk 超时 如预期变红 —— Timed out waiting for sessionUpdate: cron-fired user_message_chunk with CRONFIRE7742 (after 75000ms, saw 5 updates)
C PR 测试跑在把 _meta.sourcecron 改成 loop 的产物副本上 dist/chunks/acpAgent-*.js 中的一个表达式 expect(_meta.source).toBe('cron') 如预期变红 —— expected 'loop' to be 'cron'
C′ A/A 对照:同一 PR 测试跑在同路径下未被篡改的产物副本上 同样的断言 通过(46.8s)—— 证明 C 变红不是复制机制导致的
D PR 测试 + 接缝计数器(2 次运行) 仅插桩 fake server 实际收到的请求 通过 —— modelRequestsSeenByFakeServer=6cronPromptReachedModel=truehosts=["127.0.0.1:*"]cronCreateToolResultObserved=true

B 格是承重的那一格:同一产物、同一批断言、同样的时序,只把模型回复换掉,测试就变红,
而且失败签名正是这个 PR 想消除的那一种。PR 的版本因为把回复写死,根本无法进入该状态。
C 格则证明迁移后的测试仍然是承重的,而不是"空绿"。

次要主张

"没有真实模型调用"。 这是在接缝上测到的,不是靠读代码推断:两次插桩运行中 fake server
共收到 6 次模型请求,每一次的 Host 头都是回环地址(127.0.0.1:61152 / 127.0.0.1:60348),
并且观测到 cron 触发的 prompt 确实抵达了模型。整轮验证没有任何 provider 凭据在作用域内。

每个 agent 独立的 QWEN_HOME 隔离。 由产物证实:每次运行的
.integration-tests/<ts>/acp-cron-e2e/.qwen-home/ 下都有该 agent 的 settings.json
installation_idoutput-language.mdusage/token-usage-*.jsonl
extension-store/state.jsonextensions/extension-enablement.json,以及此处最关键的
cron 调度器 tmp/<hash>/scheduled_tasks.lock。截图 02、03 里 CLI 自己打印的警告行,
显示它把 QWEN_HOME 解析到了这个按测试隔离的目录。

对 PR 描述的更正

  • 测试计划写的是"预期:1 个测试在约 55–65 秒内通过"。 真实区间更宽:7 次通过的实测为
    11.1s – 65.0s,因为耗时主要由距下一个整分钟边界的距离(0–60 秒)决定,再加约 10 秒的
    启动与轮次流量。11 秒跑完是正确行为,不代表 cron 环节被跳过 —— 在那次 11.1s 的运行里,
    接缝计数器同样显示 cron prompt 到达了模型。
  • "测试平台:🍏 macOS ⚠️" 可以升级为 ✅ —— 本轮就是 macOS(Darwin 25.6.0、Node v24.18.1),7/7 通过。

发现

1.(低,非阻塞)新增注释里 requestIndex → 用例的映射与 CLI 实际发起的轮次不符。
注释承诺的是 0: cron_create 工具调用 / 1: 工具结果后的确认文本 / 2: 交互式 prompt / 3: cron 触发的 prompt / 4: 清理 prompt。把 fake server 应答过的每个请求逐一枚举后可以看到,
中间夹了两次内部模型调用 —— 下标 1 处的 "Pending tool call to classify" 请求,以及下标 4 处的
[SUGGESTION MODE: ...] 请求 —— 它们把后面每个下标都顶偏了两位:

下标 实际被送出的脚本响应 真实轮次
0 cron_create 工具调用 用户 prompt #1 ✅ 与注释一致
1 'Cron job created.' 内部:工具调用分类
2 'INTERACTIVE8899' 工具执行后的续写(工具结果:"Scheduled recurring job")
3 'CRONFIRE7742' 用户 prompt #2Say INTERACTIVE8899 …
4 'Done.'(default) 内部:suggestion mode
5 'Done.'(default) cron 触发的 prompt

也就是说,cron 触发的那一轮拿到的是 default'Done.',而 'CRONFIRE7742' 反而被送给了
交互式 prompt。这不会破坏测试,也不影响确定性,因为没有任何断言读取脚本化的响应内容:
断言 3a 匹配的是 cron prompt 本身(由 cron 管道回显,来自 cron_create 的参数,而非模型回复),
3b 只要求其后出现某个 agent_message_chunk。代价落在下一位维护者身上:这段注释会诱使别人
requestIndex 添加内容断言,从而悄悄钉在错误的轮次上;而且这个下标映射还耦合了 CLI
恰好发起多少次内部模型调用。建议的修法:按请求体匹配(例如最后一条 user 消息的文本)而不是按
requestIndex,或者把注释改成描述真实序列。

2.(低,非阻塞)"Part 4: Clean up the cron job" 现在是空操作。 handler 只在
requestIndex 0 发出工具调用,其他下标一律返回纯文本。因此清理 prompt("Delete all cron jobs
using cron_delete")得到的回复是 'Done.'cron_delete 从未被调用 —— 那个
*/1 * * * * 循环任务从未被删除。目前无害(任务位于会被丢弃的按测试隔离的 QWEN_HOME 中,
且 agent 随后立即被杀死),但注释已不再描述真实发生的事,读者可能误以为删除路径被覆盖了,
而实际上没有任何用例触达 cron_delete

3.(信息性,既有问题 —— 与本 PR 无关)
tsc -p integration-tests/tsconfig.json 会立刻失败并报
error TS5063: Substitutions for pattern '//' should be an array —— paths 里有一个当注释用的
"//" 键。同时 integration-tests/ 没有 package.json,因此不在
npm run typecheck --workspaces --if-present 的范围内。净效果是:这个目录实际上从未被类型检查,
而且 vitest 每次运行都会打印同样的警告(四张截图里都能看到)。已做 A/A 确认:base 上失败完全相同,
integration-tests/tsconfig.json 在 base 与 PR head 之间字节一致(8e94434c)。
在本地修复该配置后,PR 文件内唯一的报错是
expect(cronUserMsg.update?._meta?.source) 上的 TS4111 —— 而这一行 PR 根本没有改动
(base 第 358 行完全相同;diff 中该表达式出现 0 次)。

门禁

门禁 结果
prettier --check integration-tests/cli/acp-cron.test.ts(PR head 上) ✅ 通过
eslint integration-tests/cli/acp-cron.test.ts(PR head 上) ✅ 通过
tsc -p integration-tests/tsconfig.json ⛔ 未能运行 —— 既有的 TS5063,见发现 3(已在 base 上 A/A 确认)

未覆盖范围

  • 真实模型的 base 分支。 我没有让改动前的测试去打真实模型,因此原始 CI flake
    (run 30506000682)本轮没有被复现。原因:这台机器的 ~/.qwen/settings.json 里有真实
    provider 凭据(security.auth.apiKeymodelProviders.*、若干 env.*_API_KEY),
    跑原样的 base 测试会消耗维护者的额度,并把一个循环 cron 任务写进真实的 ~/.qwen
    B 格是它的替代:在不触碰真实凭据的前提下,隔离出同一个自由度(模型回复)。
  • base 测试配空 QWEN_HOME 作为参考跑过一次,在 791ms 时于 ACP authenticate 请求失败
    Internal error,无环境凭据)。这说明 base 测试无法像 PR 版本那样自带 endpoint,
    但它不是关于模型方差的证据 —— 而且要说明:该失败是我提供的空 home 造成的,
    并非这台机器上没有凭据。
  • Windows 与 Linux —— 本轮仅 macOS。
  • 容器 sandbox 路径。 所有运行都用 QWEN_SANDBOX=false,所以
    fakeServerHostOptions() 分支(listenHost 0.0.0.0 / baseUrlHost host.docker.internal
    和新加的 NO_PROXY 接线都未被测试;那条通道由 CI 覆盖。
  • 并发这一主张。 QWEN_HOME 隔离已作为"状态隔离"被验证,但我没有同时跑两个 acp-cron
    agent 来证明干扰确已消除。
  • 负载下的超时余量(120s 预算 vs 最坏情况的边界等待)未做压力测量,全仓测试套件未运行。

方法

macOS Darwin 25.6.0,Node v24.18.1。通过 npm run build && npm run bundle 完成真实构建,
于 18:53:32 产出 dist/cli.js + dist/chunks/*每一格都用的是这同一份产物
(本轮结束时重新核对 mtime 未变)。构建树是 b260e3696 = base 4dab39c8 加四个非产物的工具文件;
git diff --stat b260e3696 HEAD -- packages/ 只触及 packages/web-shell/client/**
没有任何匹配 acp|cron|scheduler|session 的文件,因此产物中的 cron/ACP 代码就是 base 的产物代码。
由于 PR 只改测试,head 与 base 共用这份产物,A/B 的变量就是测试文件本身。

PR 的测试文件从 refs/pull/8082/head 提取并验证字节一致
git hash-object = eed14902fab523ac61b939cc96d9694f69afa234,与
refs/remotes/origin/pr/8082:integration-tests/cli/acp-cron.test.ts 相同)。
各变体由该文件经明确且会打印出来的替换生成(gen-variants.mjs),每个变体只改一处。
变异格修改的是构建产物的一份副本
source: job.cronExpr === "@wakeup" ? "loop" : "cron""loop"),
锚点已断言唯一,并通过 rig.bundlePath 让测试指向它;工作树自身的 dist/ 从未被修改。
门禁在 PR head 的一个 detached worktree 中运行。

⚠️ 两点环境注意事项,之所以写出来是因为它们可被核查:(1) 本轮跑在维护者的工作副本里,
而不是 verify-pr skill 要求的无凭据容器 —— 我先读完了整个 diff,确认它只改测试;
(2) 有一个并发进程在本轮中途把这个工作树切到了别的分支。事后我确认
integration-tests/test-helper.ts87323d9d)与 fake-openai-server.ts7ba74a20
在切换前后字节一致,且 dist/cli.js 从未被重写,因此没有任何单元格被污染。
本轮期间还有一个无关的并发 qwen 进程在写真实的 ~/.qwen —— 而这恰恰是本 PR 的
QWEN_HOME 隔离要防止的那种干扰,且本轮运行未受其影响。


Central claim and A/B

The PR exists to make one thing true: the outcome of acp-cron.test.ts no
longer depends on what the model chooses to say.
Every cell below runs the
same real bundle built from the base product code (the PR is test-only), so the
only variable per cell is the one stated in the table.

# Cell What differs Oracle Result
A PR test, unmodified (7 runs) vitest exit + 7 scripted assertions 7/7 PASS (11.1s / 17.1s / 38.2s / 46.8s / 52.3s / 56.2s / 65.0s)
B Same harness, model answers prompt #1 in prose instead of calling cron_create one scripted reply timeout waiting for the cron-fired user_message_chunk RED as predictedTimed out waiting for sessionUpdate: cron-fired user_message_chunk with CRONFIRE7742 (after 75000ms, saw 5 updates)
C PR test against a bundle copy with _meta.source mutated cronloop one expression in dist/chunks/acpAgent-*.js expect(_meta.source).toBe('cron') RED as predictedexpected 'loop' to be 'cron'
C′ A/A control: same PR test against an unmutated copy of the same bundle at the same scratch path nothing same assertions PASS (46.8s) — the copy mechanism is not what turned C red
D PR test + seam counters (2 runs) instrumentation only requests the fake server actually received PASSmodelRequestsSeenByFakeServer=6, cronPromptReachedModel=true, hosts=["127.0.0.1:*"], cronCreateToolResultObserved=true

Cell B is the load-bearing one: identical bundle, identical assertions,
identical timings — only the model's reply changes, and the test flips red with
exactly the failure signature this PR set out to remove. The PR's version cannot
reach that state because the reply is scripted. Cell C proves the migrated test
is still load-bearing rather than vacuously green.

01-pr-test-passes-offline

02-model-variance-turns-it-red

03-mutation-proves-test-load-bearing

Secondary claims

"No real model calls." Confirmed at the seam, not by inspection: across two
instrumented runs the fake server received 6 model requests, every one carrying
a loopback Host header (127.0.0.1:61152 / 127.0.0.1:60348), and the
cron-fired prompt was observed arriving at the model. The whole round ran with
no provider credentials in scope.

Per-agent QWEN_HOME isolation. Confirmed by artifacts: each run's
.integration-tests/<ts>/acp-cron-e2e/.qwen-home/ contains the agent's
settings.json, installation_id, output-language.md,
usage/token-usage-*.jsonl, extension-store/state.json,
extensions/extension-enablement.json, and — the one that matters here — the
cron scheduler's tmp/<hash>/scheduled_tasks.lock. The CLI's own warning line
in captures 02 and 03 shows it resolving QWEN_HOME to that per-test directory.

Corrections to the PR description

  • Reviewer Test Plan says "Expected: 1 test passed in ~55-65 seconds". The
    real envelope is wider: 11.1s – 65.0s across 7 passing runs, because the
    wait is dominated by the distance to the next minute boundary (0–60s) plus
    ~10s of startup and turn traffic. A run finishing in 11s is correct
    behaviour, not a sign the cron step was skipped — in the 11.1s run the seam
    counters still show the cron prompt reaching the model.
  • "Tested on: 🍏 macOS ⚠️" can be upgraded to ✅ — this round is macOS
    (Darwin 25.6.0, Node v24.18.1), 7/7 passes.

Findings

1. (Low, non-blocking) The new requestIndex → case mapping comment does not
match the turns the CLI actually makes.
The comment block promises
0: cron_create tool call / 1: confirmation after tool result / 2: interactive / 3: cron-fired / 4: cleanup. Enumerating every request the fake server answered
shows two internal model calls in between — a "Pending tool call to classify"
request at index 1 and a [SUGGESTION MODE: ...] request at index 4 — which
shift every later index by two:

idx served actual turn
0 cron_create tool call user prompt #1 ✅ as documented
1 'Cron job created.' INTERNAL tool-call classification
2 'INTERACTIVE8899' post-tool continuation (tool result: "Scheduled recurring job")
3 'CRONFIRE7742' user prompt #2 (Say INTERACTIVE8899 …)
4 'Done.' (default) INTERNAL suggestion mode
5 'Done.' (default) the cron-fired prompt

So the cron-fired turn is answered with the default 'Done.', and
'CRONFIRE7742' is delivered to the interactive prompt instead. This does not
break the test or its determinism
, because no assertion reads a scripted
response body: assertion 3a matches CRONFIRE7742 in the cron prompt echoed
by the cron pipeline (it comes from the cron_create arguments, not from a
model reply), and 3b only requires that some agent_message_chunk follows. The
cost falls on the next maintainer: the comment invites someone to add a content
assertion keyed to requestIndex, which would silently pin the wrong turn, and
the index mapping is coupled to how many internal model calls the CLI happens
to make. Suggested fix: match on the request body (e.g. the last user message
text) instead of requestIndex, or correct the comment to describe the real
sequence.

04-requestindex-mapping-mismatch

2. (Low, non-blocking) "Part 4: Clean up the cron job" is now a no-op. The
handler emits a tool call only at requestIndex 0; every other index returns
plain text. The cleanup prompt ("Delete all cron jobs using cron_delete") is
therefore answered with 'Done.' and cron_delete is never invoked — the
recurring */1 * * * * job is never deleted. Harmless today (the job lives in
the discarded per-test QWEN_HOME, and the agent is killed immediately after),
but the comment no longer describes what happens, and a reader may assume
deletion is covered when nothing exercises cron_delete.

3. (Informational, pre-existing — not caused by this PR)
tsc -p integration-tests/tsconfig.json fails immediately with
error TS5063: Substitutions for pattern '//' should be an arraypaths
contains a "//" key used as a comment. integration-tests/ also has no
package.json, so it is outside npm run typecheck --workspaces --if-present.
Net effect: this directory is effectively never typechecked, and vitest prints
the same warning on every run (visible in all four captures). A/A confirmed:
identical failure at base, and integration-tests/tsconfig.json is
byte-identical between base and PR head (8e94434c). Under a locally repaired
config the only error inside the PR's file is TS4111 on
expect(cronUserMsg.update?._meta?.source) — a line the PR does not touch
(identical at base line 358; the diff contains zero occurrences).

Gates

Gate Result
prettier --check integration-tests/cli/acp-cron.test.ts (at PR head) ✅ pass
eslint integration-tests/cli/acp-cron.test.ts (at PR head) ✅ pass
tsc -p integration-tests/tsconfig.json ⛔ did not run — pre-existing TS5063, see finding 3 (A/A confirmed at base)

Not covered

  • The real-model base arm. I did not run the pre-PR test against a live
    model, so the original CI flake (run 30506000682) is not reproduced here.
    Reason: this machine's ~/.qwen/settings.json holds real provider credentials
    (security.auth.apiKey, modelProviders.*, several env.*_API_KEY), so
    running the shipped base test would spend the maintainer's credits and write a
    recurring cron job into the real ~/.qwen. Cell B substitutes for it by
    isolating the same degree of freedom (the model's reply) without touching real
    credentials.
  • Base test with an empty QWEN_HOME was run for reference and fails in
    791ms at the ACP authenticate request (Internal error, no ambient
    credentials). That shows the base test cannot self-provision an endpoint the
    way the PR's version does, but it is not evidence about model variance — and
    note the failure is caused by the empty home I supplied, not by an absence of
    credentials on this box.
  • Windows and Linux — macOS only this round.
  • Container sandbox path. All runs used QWEN_SANDBOX=false, so the
    fakeServerHostOptions() branch (listenHost 0.0.0.0 /
    baseUrlHost host.docker.internal) and the new NO_PROXY wiring are
    untested; CI covers that lane.
  • The concurrency claim. QWEN_HOME isolation is verified as state
    isolation, but I did not run two acp-cron agents simultaneously to prove
    interference is gone.
  • Timeout headroom under load (120s budget vs. worst-case boundary wait) was
    not stress-measured, and the whole repo test suite was not run.

Methodology

macOS Darwin 25.6.0, Node v24.18.1. Real build via
npm run build && npm run bundle producing dist/cli.js + dist/chunks/* at
18:53:32; every cell used that one bundle (mtime re-checked unchanged at the
end of the round). The build tree was b260e3696 = base 4dab39c8 plus four
non-product tooling files; git diff --stat b260e3696 HEAD -- packages/ touches
only packages/web-shell/client/** and no file matching
acp|cron|scheduler|session, so the cron/ACP code in the bundle is the base
product code. The PR is test-only, so head and base share that bundle and the
A/B variable is the test file itself.

The PR's test file was extracted from refs/pull/8082/head and verified
byte-identical (git hash-object = eed14902fab523ac61b939cc96d9694f69afa234,
matching refs/remotes/origin/pr/8082:integration-tests/cli/acp-cron.test.ts).
Variants were generated from that file by explicit printed substitutions, each
changing exactly one thing. The mutation cell patched a copy of the built bundle
(source: job.cronExpr === "@wakeup" ? "loop" : "cron""loop") in a scratch
directory, with the anchor asserted unique, and the test pointed at it via
rig.bundlePath; the working tree's own dist/ was never modified. Gates ran in
a detached worktree at the PR head.

⚠️ Two environment caveats, stated because they are checkable: (1) this ran in a
maintainer's working copy rather than the credential-free container the
verify-pr skill prescribes — I read the full diff first and it is test-only;
(2) a concurrent process switched this working tree to another branch mid-round.
I verified afterwards that integration-tests/test-helper.ts (87323d9d) and
fake-openai-server.ts (7ba74a20) were byte-identical before, during and
after, and that dist/cli.js was never rewritten, so no cell is contaminated. A
concurrent unrelated qwen process was also writing the real ~/.qwen during
the round — precisely the interference this PR's QWEN_HOME isolation exists to
prevent, and the runs were unaffected.

Local maintainer verification round; advisory evidence, not an approval. 11 test executions, raw logs and harness generators kept locally.

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

Review feedback — round summary

Finding 1 (Low, non-blocking): requestIndex → case mapping comment is inaccurate

Decision: Implemented.

The comment block promised a 1:1 mapping between requestIndex values and user-facing prompts (0: cron_create, 1: confirmation, 2: interactive, 3: cron-fired, 4: cleanup). In reality the CLI makes internal model calls (tool-call classification, suggestion mode) between user-facing turns, shifting later indices by two. The cron-fired turn receives the default 'Done.' reply, not 'CRONFIRE7742'.

This did not break the test — no assertion reads scripted response content — but the comment invited future maintainers to add content assertions keyed to the wrong turn.

Changes:

  • Replaced the misleading index-mapping comment with an accurate explanation: only requestIndex 0 is load-bearing (the cron_create tool call); internal CLI model calls shift later indices; no assertion reads scripted response content.
  • Simplified the handler from a five-case switch to if (requestIndex === 0) + default return, removing cases 1–3 that targeted turns they never reached.

Finding 2 (Low, non-blocking): "Part 4: Clean up the cron job" is a no-op

Decision: Implemented.

The handler only emits a tool call at requestIndex 0; every other index returns plain text. The cleanup prompt ("Delete all cron jobs using cron_delete") was answered with 'Done.' and cron_delete was never invoked. The comment implied deletion coverage that did not exist.

Changes:

  • Removed the entire Part 4 section (the sendRequest call with the cleanup prompt). The cron job lives in a per-test QWEN_HOME that is discarded when the agent is killed, so no cleanup is needed.

Finding 3 (Informational, pre-existing): tsc config issue in integration-tests/

Decision: No action. Pre-existing TS5063 in integration-tests/tsconfig.json, byte-identical between base and PR head. Out of scope for this PR.

Verification

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • npx prettier --check integration-tests/cli/acp-cron.test.ts — passed
  • npx eslint integration-tests/cli/acp-cron.test.ts — passed
  • npm run bundle — passed
  • Integration test cli/acp-cron (QWEN_SANDBOX=false npx vitest run cli/acp-cron) — 1 passed (7.29s)
中文说明

审查反馈 — 本轮总结

发现 1(低优先级,非阻塞):requestIndex → 用例映射注释不准确

决定:已实施。

注释块承诺 requestIndex 值与用户可见的 prompt 之间存在一一对应关系(0: cron_create、1: 确认文本、2: 交互式 prompt、3: cron 触发的 prompt、4: 清理 prompt)。实际上 CLI 在用户可见的轮次之间会发起内部模型调用(工具调用分类、建议模式),导致后续下标整体偏移了两位。cron 触发的那一轮拿到的是 default'Done.' 回复,而非 'CRONFIRE7742'

这并没有破坏测试——没有任何断言读取脚本化的响应内容——但注释会诱使未来的维护者按错误的轮次添加内容断言。

变更:

  • 将误导性的下标映射注释替换为准确的说明:只有 requestIndex 0 是承重的(cron_create 工具调用);CLI 的内部模型调用会偏移后续下标;没有任何断言读取脚本化的响应内容。
  • 将处理器从五分支 switch 简化为 if (requestIndex === 0) + 默认返回,移除了从未到达目标轮次的 case 1–3。

发现 2(低优先级,非阻塞):"Part 4: Clean up the cron job" 现在是空操作

决定:已实施。

处理器仅在 requestIndex 0 发出工具调用;其他所有下标返回纯文本。清理 prompt("Delete all cron jobs using cron_delete")得到的回复是 'Done.'cron_delete 从未被调用。注释暗示了实际不存在的删除覆盖。

变更:

  • 移除了整个 Part 4 部分(包含清理 prompt 的 sendRequest 调用)。cron 任务位于按测试隔离的 QWEN_HOME 中,agent 被杀死后该目录会被丢弃,因此无需清理。

发现 3(信息性,既有问题):integration-tests/ 中的 tsc 配置问题

决定:不处理。 integration-tests/tsconfig.json 中既有的 TS5063 错误,在 base 和 PR head 之间字节一致。不在本 PR 范围内。

验证

  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过
  • npx prettier --check integration-tests/cli/acp-cron.test.ts — 通过
  • npx eslint integration-tests/cli/acp-cron.test.ts — 通过
  • npm run bundle — 通过
  • 集成测试 cli/acp-cronQWEN_SANDBOX=false npx vitest run cli/acp-cron)— 1 项通过(7.29 秒)

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

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


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

@wenshao

wenshao commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Review: test(integration): migrate acp-cron to fake-openai-server (#8082)

Overview

Converts integration-tests/cli/acp-cron.test.ts from real-model inference to scripted fake-openai-server responses, adds per-agent QWEN_HOME isolation, and drops the trailing cron_delete prompt. Net −26/+50 in one file. The direction is right and matches the precedent set by #7934 — the cron fire → sessionUpdate pipeline is still exercised against real minute-boundary timing, which is the part this test actually owns.

I verified the mechanics that matter:

  • fakeToolCall('cron_create', { cron, prompt, recurring }) matches the live schema in packages/core/src/tools/cron-create.ts:163-188 (required: ['cron', 'prompt']).
  • durable is unset, so execute() takes the scheduler.create() branch (cron-create.ts:91-92) — the job is session-only, in-memory, so removing the cleanup prompt leaks nothing. Good.
  • cron_create.getDefaultPermission() returns 'ask', and the harness auto-approves session/request_permission with proceed_once. Consistent.
  • The env block (OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_MODEL / QWEN_MODEL / NO_PROXY / no_proxy) mirrors integration-tests/cli/daemon-invocation-context.test.ts:140-151 verbatim. Following the house convention.

Issues

1. requestIndex === 0 fails 75 s late and opaquely (medium)

The comment is honest that later indices don't map 1:1, but index 0 is load-bearing and carries the same risk it disclaims: if the CLI ever issues any model call before the first user prompt (session-title generation, a warm-up, a classifier pass during session/new), the cron_create tool call lands on the wrong turn. No job is created, Part 1 and Part 2 still pass ('Done.'end_turn), and the failure surfaces 75 s later as:

Timed out waiting for sessionUpdate: cron-fired user_message_chunk with CRONFIRE7742

which points at the cron scheduler, not at the dispatch that actually broke. Cheap fix — fail fast right after Part 1:

expect(
  fakeServer.requests[0]?.body['messages'],
  'requestIndex 0 was not the cron_create prompt — dispatch shifted',
).toBeDefined();
// or, stronger: assert a tool_call sessionUpdate for cron_create arrived

Alternatively dispatch on content instead of index (match the last user message against the cron marker), which is immune to index drift entirely. requestIndex-based dispatch is the established pattern here (file-system-interactive.test.ts, gen-ai-telemetry.test.ts), so either is acceptable — but this test pays a 75 s penalty for a wrong guess, unlike those.

2. fakeServer leaks if setupAcpCronTest throws (low)

setupAcpCronTest(rig, fakeServer) sits outside the try, so a throw from mkdirSync or spawn skips the finally and leaves the HTTP server listening — vitest then hangs on open handles instead of reporting the real error. Move the setup call inside the try, or wrap the server in its own try/finally.

3. FAKE_SERVER_OPTIONS is dead code, and inconsistent with the hardcoded NO_PROXY (low)

IS_SANDBOX skips the entire describe whenever QWEN_SANDBOX is set to anything but false — which includes docker and podman. So fakeServerHostOptions() (test-helper.ts:134-138) can only ever return undefined on a run that actually executes. And if it somehow did return the container options, baseUrlHost would be host.docker.internal while the hardcoded NO_PROXY: '127.0.0.1,localhost' omits exactly that host — so the two would contradict each other. Either drop FAKE_SERVER_OPTIONS and keep NO_PROXY purely as ambient-proxy defense (with a one-line comment saying so), or use CONTAINER_SANDBOX_NO_PROXY and make container mode genuinely supported.

4. QWEN_HOME lives inside the workspace cwd (nit)

join(rig.testDir!, '.qwen-home') puts the global config dir under the agent's cwd, where workspace scans (memory discovery, glob/file tooling) can see it. daemon-invocation-context.test.ts keeps it under a separate HOME instead. A sibling of testDir would be cleaner and costs nothing.

Coverage & description

  • Dropping the cron_delete prompt is safe (see above) but removes this file's only cron_delete exercise. Acceptable given the stated scope — worth confirming it's covered elsewhere.
  • The PR description still lists "cleanup" among the scripted steps, and says the change "adds per-agent QWEN_HOME isolation to prevent concurrent test interference" though only one agent is spawned. Both are stale relative to the diff.
  • Assertion 3b now only checks ordering (agent_message_chunk after cronUserMsg) while the server returns a generic 'Done.'. Determinism is the whole point of this migration — scripting the cron-fired turn to return a unique marker and asserting on its content would be a free strengthening, and would also catch the failure mode in issue 1.

Timing

Worst case is ~66 s: up to 60 s to the minute boundary plus ≤6 s recurring jitter (10 % of period, cronScheduler.ts:57-58,155), against a 75 s window and a 120 s test timeout with retry: 0. Roughly 9 s of slack on the inner wait. Tight but sound — and strictly better than before, since model latency no longer eats into it. No change needed; just don't shrink the window later.

Verdict

Approve once issue 1 is addressed (or consciously accepted) — it's the difference between a clear failure and a 75 s red herring. Issues 2–4 are small cleanups.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline. Not 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-preview via Qwen Code /review

Comment thread integration-tests/cli/acp-cron.test.ts Outdated
Comment thread integration-tests/cli/acp-cron.test.ts Outdated
Fail fast when the cron_create tool call is not served to the first user
prompt instead of timing out opaquely 75s later, and dump the fake server
request log on failure so a dispatch shift is quick to diagnose. Close the
fake server even when test setup throws, drop the dead FAKE_SERVER_OPTIONS
(container mode is skipped by IS_SANDBOX), and move QWEN_HOME out of the
agent workspace cwd so workspace scans never see it.
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

Review feedback addressed

All changes are in integration-tests/cli/acp-cron.test.ts. No conflict (--conflict false), so no merge was performed.

Inline comments (automated reviewer)

  • rc:3683080924 — log the fake server request log in the catch block — Implemented. The catch now dumps fakeServer.requests (index, model, and a truncated messages snippet) in addition to agent stderr. The messages snippet is what actually diagnoses a requestIndex shift, since model is constant (fake-model) for every request.
  • rc:3683080942 — fakeServer leaks if setupAcpCronTest throws — Implemented. The setup call now sits inside an outer try whose finally always calls fakeServer.close(); the test body keeps its own inner try/catch/finally for stderr logging and cleanup(). A throw from mkdirSync/spawn no longer leaks the HTTP server for the worker's lifetime.

Issue-level review (@wenshao)

  1. requestIndex === 0 fails 75s late and opaquely (medium, gating) — Implemented the fail-fast option. Right after Part 1 asserts stopReason === 'end_turn', a new assertion checks that fakeServer.requests[0]'s messages contain the CRONFIRE7742 cron prompt. If an internal model call before the first prompt shifts dispatch, the test now fails immediately with a message pointing at the dispatch (requestIndex 0 was not the cron_create prompt — dispatch shifted) instead of timing out 75s later in Part 3. Combined with the request-log dump above, the failure mode is both fast and diagnosable. I kept index-based dispatch (the established house pattern) rather than switching to content dispatch.
  2. fakeServer leaks if setup throws (low) — Same fix as rc:3683080942 above.
  3. FAKE_SERVER_OPTIONS is dead code, inconsistent with hardcoded NO_PROXY (low) — Implemented the removal option. Dropped FAKE_SERVER_OPTIONS and the fakeServerHostOptions import (container mode is skipped by IS_SANDBOX, so it could only ever be undefined on a run that actually executes), and added a one-line comment marking NO_PROXY as ambient-proxy defense only.
  4. QWEN_HOME lives inside the workspace cwd (nit) — Implemented. QWEN_HOME is now a sibling of testDir (<testDir basename>-home under the same parent) instead of .qwen-home under the agent cwd, so workspace scans (memory discovery, file tooling) never see it; cleanup() removes it.

Not changed (recorded)

  • Assertion 3b content-marker strengthening (optional) — Declined. Scripting a unique marker for the cron-fired turn deterministically would require switching from index-based to content-based dispatch, which is a larger change carrying its own risk (an internal classifier call that also carries the user message could double-match). The fail-fast assertion in item 1 already converts the opaque 75s timeout into an immediate, clearly-worded failure, which was the substance of the concern — not worth the diff growth.
  • Stale PR description (still lists a "cleanup" step and "concurrent test interference") — Acknowledged; no code action this round. PR text is owned by the workflow, not this review round. The description should be refreshed to drop the "cleanup" step and note that QWEN_HOME isolation is about keeping the config dir out of the workspace scan path (only a single agent is spawned).

Verification

  • npm run typecheck — passed
  • npm run lint (full: eslint . --ext .ts,.tsx && eslint integration-tests) — passed
  • npm run build — passed
  • npm run bundle — passed
  • npx eslint integration-tests/cli/acp-cron.test.ts — passed
  • focused integration test QWEN_SANDBOX=false npx vitest run cli/acp-cron.test.ts (after bundle) — 1 passed (4.25s)
中文说明

已处理的审查反馈

所有改动均在 integration-tests/cli/acp-cron.test.ts。无冲突(--conflict false),因此未执行合并。

行内评论(自动审查器)

  • rc:3683080924 — 在 catch 块中记录 fake server 的请求日志 — 已实现。catch 现在除了 agent 的 stderr 外,还会转储 fakeServer.requests(索引、model,以及截断后的 messages 片段)。由于每个请求的 model 都是常量(fake-model),真正能诊断 requestIndex 错位的是 messages 片段。
  • rc:3683080942 — 若 setupAcpCronTest 抛异常则 fakeServer 泄漏 — 已实现。setup 调用现在位于一个外层 try 内,其 finally 始终调用 fakeServer.close();测试主体保留自己的内层 try/catch/finally 用于 stderr 记录与 cleanup()mkdirSync/spawn 抛异常时不会再在 worker 生命周期内泄漏该 HTTP 服务器。

Issue 级审查(@wenshao

  1. requestIndex === 0 失败时晚 75 秒且不透明(中等,门槛项) — 采用了快速失败方案。在 Part 1 断言 stopReason === 'end_turn' 之后,新增一个断言,检查 fakeServer.requests[0] 的 messages 是否包含 CRONFIRE7742 这条 cron prompt。如果首个用户 prompt 之前存在内部模型调用导致 dispatch 错位,测试现在会立即失败,并给出指向 dispatch 的信息(requestIndex 0 was not the cron_create prompt — dispatch shifted),而不是在 Part 3 中 75 秒后才超时。结合上面的请求日志转储,该失败模式既快速又可诊断。我保留了基于索引的 dispatch(既有的项目惯例),而没有改用基于内容的 dispatch。
  2. setup 抛异常时 fakeServer 泄漏(低) — 与上面 rc:3683080942 的修复相同。
  3. FAKE_SERVER_OPTIONS 是死代码,且与硬编码的 NO_PROXY 不一致(低) — 采用了移除方案。删除了 FAKE_SERVER_OPTIONSfakeServerHostOptions 导入(容器模式会被 IS_SANDBOX 跳过,因此在真正执行的运行中它只可能是 undefined),并添加一行注释,标明 NO_PROXY 仅用于防御环境代理。
  4. QWEN_HOME 位于 workspace cwd 内部(nit) — 已实现。QWEN_HOME 现在是 testDir 的同级目录(同一父目录下的 <testDir basename>-home),而不再是 agent cwd 下的 .qwen-home,因此 workspace 扫描(memory 发现、文件工具)永远看不到它;cleanup() 会将其删除。

未改动(已记录)

  • 断言 3b 的内容标记强化(可选) — 拒绝。要为 cron 触发的回合确定性地编排一个唯一标记,需要把基于索引的 dispatch 改为基于内容的 dispatch,这是一处更大的改动,且自带风险(同样携带用户消息的内部 classifier 调用可能会双重匹配)。第 1 项中的快速失败断言已经把不透明的 75 秒超时转变为一个即时且措辞清晰的失败,这正是该关切的核心——不值得增加 diff 体积。
  • 过时的 PR 描述(仍列出 "cleanup" 步骤和 "concurrent test interference") — 已知悉;本轮不做代码改动。PR 文本由工作流负责,不属于本轮审查范围。描述应更新为删除 "cleanup" 步骤,并说明 QWEN_HOME 隔离的目的是把配置目录移出 workspace 扫描路径(只启动了一个 agent)。

验证

  • npm run typecheck — 通过
  • npm run lint(完整:eslint . --ext .ts,.tsx && eslint integration-tests)— 通过
  • npm run build — 通过
  • npm run bundle — 通过
  • npx eslint integration-tests/cli/acp-cron.test.ts — 通过
  • 聚焦集成测试 QWEN_SANDBOX=false npx vitest run cli/acp-cron.test.ts(bundle 之后)— 1 通过(4.25 秒)

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

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


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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. 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-preview via Qwen Code /review

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🤖 AutoFix could not start — a setup step failed (or the run was cancelled) before the agent ran, so no fix was attempted. This is normally a transient infra issue, a broken base build, or a cancelled run — not this PR. It will retry on the next scan.

AutoFix failed before producing a verified commit (the run crashed or timed out before it could explain why).

Run log: https://github.com/QwenLM/qwen-code/actions/runs/30553093684


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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

No code changes this round

The only feedback was an informational [COMMENTED] note from the automated reviewer — not a CHANGES_REQUESTED review. It named no defect, raised no inline comment, and reported no failed or still-red check. Its sole substance was that the build-and-test — Integration Tests (CLI, No Sandbox) suite was skipped in CI and did not run locally, so that part of the change went unverified.

Because this PR is itself an integration-test change (integration-tests/cli/acp-cron.test.ts), the meaningful response is to run that suite locally rather than to edit code. I built the bundle and ran the exact suite the reviewer flagged; it passes. No defect was found and no change is warranted, so there is nothing to commit.

Verification

Commands run this round (all on the PR head, sandbox disabled as in the CI suite):

  • npm run typecheck — passed
  • npx eslint integration-tests/cli/acp-cron.test.ts — passed (0 problems)
  • npm run build — passed
  • npm run bundle — passed
  • cd integration-tests && QWEN_SANDBOX=false npx vitest run cli/acp-cron.test.ts1 passed (1), ~19.3s

The integration suite the reviewer could not verify now runs and passes locally, so the previously-unverified build-and-test path is confirmed on this branch.

中文说明

本轮不做代码改动

唯一的反馈是自动审查机器人的一条信息性 [COMMENTED] 备注,并非 CHANGES_REQUESTED(要求修改)审查。它没有指出任何缺陷,没有提出任何行内评论,也没有报告任何失败或持续飘红的检查。它唯一的内容是:build-and-test — Integration Tests (CLI, No Sandbox) 这套集成测试在 CI 中被跳过、也未在本地运行,因此这部分改动未经验证。

由于本 PR 本身就是一处集成测试改动(integration-tests/cli/acp-cron.test.ts),有意义的回应是在本地运行该测试套件,而不是修改代码。我构建了 bundle,并运行了审查者所指出的那套测试,结果通过。未发现任何缺陷,也没有任何需要改动之处,因此没有内容可提交。

验证

本轮运行的命令(均在 PR head 上执行,并像 CI 套件一样禁用了沙箱):

  • npm run typecheck — 通过
  • npx eslint integration-tests/cli/acp-cron.test.ts — 通过(0 个问题)
  • npm run build — 通过
  • npm run bundle — 通过
  • cd integration-tests && QWEN_SANDBOX=false npx vitest run cli/acp-cron.test.ts1 通过(共 1 个),约 19.3 秒

审查者此前无法验证的集成测试套件,如今已能在本地运行并通过,因此本分支上原先未经验证的 build-and-test 路径已得到确认。

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


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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline. Not 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-preview via Qwen Code /review

Comment thread integration-tests/cli/acp-cron.test.ts
)

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

Copy link
Copy Markdown
Collaborator Author

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

Review feedback addressed

[rc:3684242502] Stale qwenHome directory from killed runs — Implemented

Suggestion: Add rmSync(qwenHome, { recursive: true, force: true }) before mkdirSync to clear stale contents left by a previous run killed before cleanup() executes.

Decision: Implemented. The failure mode is real — a killed CI run (timeout, OOM, vitest worker crash) leaves the deterministic qwenHome path populated, and the next run's mkdirSync is a no-op on the existing directory. This matches the exact pattern TestRig.setup() uses (rmSyncmkdirSync, test-helper.ts:213-214) for the same reason.

Change: One line added in setupAcpCronTest() before the existing mkdirSync call. rmSync was already imported. No conflict (--conflict false).

Verification

  • npm run build — passed
  • npm run typecheck — passed
  • npm run lint — passed
  • Integration test (acp-cron.test.ts) — not runnable in this environment (the test skips when QWEN_SANDBOX is set; the CI reviewer also noted "Integration Tests (CLI, No Sandbox) was skipped in CI"). The change is a one-line defensive rmSync with force: true (no-op when the directory does not exist) that does not alter test logic or assertions.
中文说明

已处理的审查反馈

[rc:3684242502] 被终止的运行留下旧 qwenHome 目录 — 已实现

建议:mkdirSync 之前添加 rmSync(qwenHome, { recursive: true, force: true }),以清除上一次在 cleanup() 执行前被终止的运行所留下的旧内容。

决定: 已实现。该故障模式是真实的——被终止的 CI 运行(超时、OOM、vitest worker 崩溃)会在确定性的 qwenHome 路径下留下文件,而下一次运行的 mkdirSync 对已存在的目录是空操作。这与 TestRig.setup() 使用的模式完全一致(rmSyncmkdirSynctest-helper.ts:213-214),原因也相同。

变更:setupAcpCronTest() 中现有的 mkdirSync 调用之前添加了一行。rmSync 已在导入中。无冲突(--conflict false)。

验证

  • npm run build — 通过
  • npm run typecheck — 通过
  • npm run lint — 通过
  • 集成测试(acp-cron.test.ts)— 在此环境中无法运行(该测试在设置了 QWEN_SANDBOX 时跳过;CI 审查者也指出 "Integration Tests (CLI, No Sandbox) was skipped in CI")。该变更是一行防御性的 rmSync,带有 force: true(目录不存在时为空操作),不改变测试逻辑或断言。

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

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


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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

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

— qwen3.8-max-preview via Qwen Code /review

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

Autofix Review Round — No Action Needed

The only feedback this round is a COMMENTED review from the automated reviewer noting that the Integration Tests (CLI, No Sandbox) suite was skipped in CI and did not run locally, so it could not verify the test changes end-to-end.

This is informational, not a defect finding or change request:

  • No inline comments were filed.
  • No failed or still-red checks are present.
  • The review status is COMMENTED, not CHANGES_REQUESTED.

The integration test suite (integration-tests/cli/acp-cron.test.ts) requires a built bundle and real minute-boundary cron timing, so it is expected to be skipped in standard CI unit-test jobs. The workflow's independent CI gate remains the final verification.

No code changes are warranted this round.

中文说明

Autofix 审查轮次 — 无需操作

本轮唯一的反馈是自动审查机器人的一条 COMMENTED(已评论)审查,指出集成测试(CLI,无沙箱)套件在 CI 中被跳过且未在本地运行,因此无法端到端验证测试变更。

这是一条信息性说明,而非缺陷发现或变更请求:

  • 没有提交任何行内评论。
  • 没有失败或持续红色的检查项。
  • 审查状态为 COMMENTED(已评论),而非 CHANGES_REQUESTED(请求变更)。

集成测试套件(integration-tests/cli/acp-cron.test.ts)需要构建好的 bundle 和真实的分钟边界 cron 计时,因此在标准 CI 单元测试任务中被跳过是预期行为。工作流的独立 CI 门控仍然是最终验证。

本轮无需进行代码变更。

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


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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

🔀 Base updated: red check(s) [Test (ubuntu-latest, Node 22.x)] pass on current main — merged current main via update-branch; CI will re-run.

中文说明

🔀 已更新 base:红色检查 [Test (ubuntu-latest, Node 22.x)] 在当前 main 上通过 —— 已通过 update-branch 合入当前 main,CI 将重新运行。

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. 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-preview via Qwen Code /review

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

No action required

The only feedback this round is a COMMENTED review from the automated reviewer (qwen-code-ci-bot) noting that the "Integration Tests (CLI, No Sandbox)" suite was skipped in CI and did not run locally. This is an informational observation, not a change request:

  • No inline comments were filed.
  • No issue-level comments were filed.
  • No checks are failing or still-red.
  • The review verdict is COMMENTED, not CHANGES_REQUESTED.

There is nothing actionable to address in the code. The integration test skip is a CI scheduling/trigger condition outside the scope of this PR's code changes.

中文说明

无需操作

本轮唯一的反馈是自动审查器(qwen-code-ci-bot)的一条 COMMENTED 审查,指出 "Integration Tests (CLI, No Sandbox)" 测试套件在 CI 中被跳过且未在本地运行。这是一条信息性观察,而非变更请求:

  • 没有提交任何行内评论。
  • 没有提交任何 issue 级别的评论。
  • 没有失败或持续红色的检查项。
  • 审查结论为 COMMENTED(已评论),而非 CHANGES_REQUESTED(请求变更)。

代码中没有需要处理的可操作项。集成测试被跳过是 CI 调度/触发条件的问题,不在本 PR 代码变更的范围内。

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


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

@wenshao

wenshao commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

Local verification — built and actually ran this test

Integration Tests (CLI, No Sandbox) is gated on merge_group, so it is skipped on PR events, and every automated review round on this PR closes with "Not reviewed: build-and-test — … was skipped in CI and its suite did not run locally." So I built PR head e7d63fb and ran the migrated test for real, plus negative controls to check it still has teeth.

Setup: npm run bundle at PR head → the test drives the real bundled CLI (dist/cli.js --acp) over ACP against fake-openai-server. Linux, Node v22.22.2, QWEN_SANDBOX=false. The PR's own file was run unmodified everywhere except where noted.

Verdict: LGTM, safe to merge. One non-blocking nit at the end.


1. Determinism — 8/8 with retry: 0

8 consecutive local runs of acp-cron.test.ts, all passing

Eight consecutive runs, rc=0 every time, 20.5s–64.5s. The whole spread is the real minute-boundary wait — a run starting at :45 finishes in 21s, one starting at :01 takes 65s — so the scheduler is still doing real timing work, exactly as the PR claims. Nothing in the spread comes from model latency.

2. The migrated test still fails when the pipeline breaks

Green on a rewritten test proves little on its own, so I broke the production path in three ways and re-ran the PR's file unmodified:

Three negative controls: mislabelled _meta.source, dropped cron echo, and slow post-fire model response — all caught

# Mutation Result
M1 Session.ts: source: job.cronExpr === '@wakeup' ? 'loop' : 'cron''loop' ❌ caught at acp-cron.test.ts:408 in 33s
M2 Session.ts: drop the cron user_message_chunk echo ❌ caught at step 3a (75s window)
M3 20s model latency on the cron-fired turn only (CLI untouched) ❌ caught at step 3b (15s window)
pristine bundle, same test ✅ passes

M3 is the interesting one — it identifies what actually broke on main. Both the run the PR cites (30506000682) and the most recent recurrence (30628967374) failed the same way:

Error: Timed out waiting for sessionUpdate: agent_message_chunk after cron fire
(after 15000ms, saw 53 updates: [… agent_message_chunk, user_message_chunk])

The last update seen is user_message_chunk — the cron did fire and did echo; what blew the budget was the real model's first response chunk not landing inside the 15s post-fire window. The description frames the flake mostly as tool-call variance ("may not call the right tool, may use wrong parameters"); the observed failures were the third clause, model latency. Same fix either way — scripted responses come back in ~ms — and M3 shows that 15s budget is still enforced, so the migration removes the cause without removing the assertion. Worth correcting in the description if you touch it again.

3. The QWEN_HOME isolation is load-bearing, not cosmetic

Both variants pass, so the difference is contamination, not the result. I exported an ambient QWEN_HOME to make the shared/global config dir observable, then ran the PR's file and a copy with only the QWEN_HOME line removed:

Global config dir footprint: 0 files with the PR, 9 files without it

  • With the PR's line: 0 files.
  • Without it: 9 files, including settings.json rewritten to security.auth.selectedType: "openai", installation_id, usage_record.jsonl, and tmp/<project-hash>/scheduled_tasks.lock — the global cron-scheduler lock, held while other test files in the same repo run concurrently (fileParallelism, maxThreads: 4). That is a concrete cross-test interference channel, and it is now gone.

4. Other checks

  • Cold start: passes with an empty global config dir (no pre-seeded auth/settings), so it does not depend on a warm developer machine.
  • Hostile proxy env: with ambient HTTP_PROXY / HTTPS_PROXY / ALL_PROXY pointed at a dead port, the test still passes — the NO_PROXY-only defence is sufficient here (sibling tests like gen-ai-telemetry.test.ts also unset the proxy vars; not needed for this one).
  • No leakage: after runs, no orphan --acp processes and no leftover <testdir>-home directory.
  • Dropping Part 4 is safe: the tool result from the scripted call reads "Session-only (not written to disk, dies when Qwen exits)", so with the arguments now pinned there is no durable job to clean up — the cron_delete prompt really was a no-op. Under the old real-model version the model chose durable itself, so pinning the arguments is what makes that removal safe.
  • eslint --max-warnings 0 and prettier --check clean on the changed file.

5. Nit (non-blocking, follow-up at most) — index-keyed dispatch

Model call log: 6 calls per run, i=1 also carries the CRONFIRE7742 marker

Instrumenting the fake server shows 6 model calls per run; only i=0 is the user prompt, and i=1/i=2/i=4 are internal (tool-call classification, post-tool turn, suggestion mode) — exactly as the added comment describes.

The requests[0] fail-fast guard does work: inserting one extra session/prompt before Part 1 fails the test in 1.2s with requestIndex 0 was not the cron_create prompt — dispatch shifted, instead of an opaque 75s timeout.

But note i=1 — the classification pass quotes the cron_create arguments, so its payload also contains CRONFIRE7742. A future internal call that lands ahead of the first prompt while quoting the prompt or the tool arguments (title generation is the obvious candidate) would satisfy the guard and still shift dispatch, handing back the opaque timeout the guard exists to prevent. Keying on message content instead removes the class — I ran this with the same inserted turn and it passes:

const fakeServer = await startFakeOpenAIServer(({ body }) => {
  const msgs = (body['messages'] ?? []) as Array<Record<string, unknown>>;
  const lastText = JSON.stringify(msgs[msgs.length - 1]?.['content'] ?? '');
  if (lastText.includes('Call cron_create with cron expression')) {
    return { toolCalls: [fakeToolCall('cron_create', { /* … */ })] };
  }
  return { content: 'Done.' };
});

Not worth another round on this PR — the current form is correct today and fails loudly for the common shift.

中文说明

本地验证 —— 实际构建并运行了这个测试

Integration Tests (CLI, No Sandbox)merge_group 为触发条件,因此在 PR 事件上被跳过;本 PR 的每一轮自动评审最后都写着 "Not reviewed: build-and-test — … was skipped in CI and its suite did not run locally." 所以我基于 PR head e7d63fb 做了构建,真实运行了迁移后的测试,并补充了反向对照实验,确认它仍然能发现问题。

环境: 在 PR head 执行 npm run bundle → 测试驱动真实的打包 CLI(dist/cli.js --acp)通过 ACP 与 fake-openai-server 交互。Linux、Node v22.22.2、QWEN_SANDBOX=false。除特别说明处外,PR 自身的测试文件均未改动。

结论:LGTM,可以合并。 末尾有一个不阻塞合并的小建议。


1. 确定性 —— retry: 0 下 8/8 通过

连续 8 次运行,每次 rc=0,耗时 20.5s–64.5s。耗时差异完全来自真实的分钟边界等待——在 :45 启动的run 21 秒结束,在 :01 启动的需要 65 秒——说明调度器仍在做真实的计时工作,与 PR 描述一致。差异中没有任何一部分来自模型延迟。

2. 迁移后的测试在管道被破坏时仍然会失败

改写后的测试变绿本身说明不了什么,所以我从三个位置破坏了生产代码路径,并用 PR 未改动的测试文件重新运行:

# 变异 结果
M1 Session.tssource: job.cronExpr === '@wakeup' ? 'loop' : 'cron''loop' ❌ 33 秒内在 acp-cron.test.ts:408 捕获
M2 Session.ts:去掉 cron 的 user_message_chunk 回显 ❌ 在 3a 步(75s 窗口)捕获
M3 仅对 cron 触发的那一轮注入 20s 模型延迟(CLI 未改) ❌ 在 3b 步(15s 窗口)捕获
干净的 bundle,同一测试 ✅ 通过

M3 最有价值——它定位了 main 上真正的失败原因。 PR 引用的那次运行(30506000682)和最近一次复现(30628967374)失败方式完全相同:

Error: Timed out waiting for sessionUpdate: agent_message_chunk after cron fire
(after 15000ms, saw 53 updates: [… agent_message_chunk, user_message_chunk])

最后一条更新是 user_message_chunk——也就是 cron 确实触发了、也确实回显了;真正超时的是真实模型的首个响应分片没能落在 15 秒的触发后窗口内。PR 描述主要把这次不稳定归因于工具调用的方差("可能不调用正确的工具、使用错误的参数");而实际观测到的失败属于第三种情况,即模型延迟。两者的修复方式相同——脚本化响应在毫秒级返回——而且 M3 表明那个 15 秒预算仍然有效,所以这次迁移是在不削弱断言的前提下消除了诱因。如果之后还要改描述,建议顺手修正这一点。

3. QWEN_HOME 隔离是实质性的,不是装饰

两个变体都能通过,所以差异在于污染而非结果。我导出了一个环境级 QWEN_HOME,让共享/全局配置目录可观测,然后分别运行 PR 的文件和一个仅删除 QWEN_HOME 那一行的副本:

  • 带 PR 这一行:0 个文件。
  • 不带:9 个文件,包括被改写为 security.auth.selectedType: "openai"settings.jsoninstallation_idusage_record.jsonl,以及 tmp/<project-hash>/scheduled_tasks.lock —— 也就是全局的 cron 调度锁,而它是在同一仓库中其他测试文件并发运行(fileParallelismmaxThreads: 4)期间被持有的。这是一条实实在在的跨测试干扰通道,现在被消除了。

4. 其他检查

  • 冷启动: 在空的全局配置目录(没有预置的认证/设置)下通过,说明它不依赖"热"的开发机环境。
  • 恶劣代理环境: 把环境级 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 指向一个死端口后测试仍然通过——这里只设 NO_PROXY 的做法是够用的(gen-ai-telemetry.test.ts 等同类测试还会清空这些代理变量,本例不需要)。
  • 无残留: 运行结束后没有游离的 --acp 进程,也没有残留的 <testdir>-home 目录。
  • 去掉 Part 4 是安全的: 脚本化调用返回的工具结果写着 "Session-only (not written to disk, dies when Qwen exits)",因此在参数已被固定的情况下没有需要清理的持久化任务——那条 cron_delete 提示确实是空操作。而在旧的真实模型版本里,durable 是由模型自己决定的,所以正是"固定参数"这一点让这次删除变得安全。
  • 变更文件上 eslint --max-warnings 0prettier --check 均干净。

5. 小建议(不阻塞,最多作为后续跟进)—— 基于索引的分发

对 fake server 加上埋点后可以看到每次运行有 6 次模型调用;只有 i=0 是用户提示,i=1/i=2/i=4 都是内部调用(工具调用分类、工具结果后的一轮、建议模式)——与新增注释描述的完全一致。

requests[0] 的快速失败守卫确实有效:在 Part 1 之前插入一次额外的 session/prompt 后,测试在 1.2 秒内以 requestIndex 0 was not the cron_create prompt — dispatch shifted 失败,而不是给出一个 75 秒的模糊超时。

但请注意 i=1——分类那一轮会引用 cron_create 的参数,所以它的载荷里同样包含 CRONFIRE7742。将来若有内部调用排到首个提示之前,并且其中引用了提示词或工具参数(标题生成是最典型的候选),就会同时满足这个守卫、又确实发生了分发错位,于是又退回到守卫本想避免的那种模糊超时。改为按消息内容匹配可以整体消除这一类问题——我在同样插入额外一轮的情况下验证过,可以通过:

const fakeServer = await startFakeOpenAIServer(({ body }) => {
  const msgs = (body['messages'] ?? []) as Array<Record<string, unknown>>;
  const lastText = JSON.stringify(msgs[msgs.length - 1]?.['content'] ?? '');
  if (lastText.includes('Call cron_create with cron expression')) {
    return { toolCalls: [fakeToolCall('cron_create', { /* … */ })] };
  }
  return { content: 'Done.' };
});

不值得为此再走一轮——当前写法在今天是正确的,并且对常见的错位会明确报错。


🤖 Generated with Claude Code — Claude Opus 5 (1M context)

@wenshao

wenshao commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

@qwen-code /triage

@wenshao
wenshao enabled auto-merge July 31, 2026 13:48
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator Author

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

Review triage — no changes this round

PR #8082 (issue #8076) received one issue-level comment from maintainer @wenshao: a thorough local verification report (determinism 8/8, three negative-control mutations all caught, QWEN_HOME isolation confirmed load-bearing, cold-start/proxy/leakage checks clean). Verdict: LGTM, safe to merge.

Feedback classification

# Item Type Decision
1 Verification report (§1–4) Positive review No action needed
2 §5 nit — index-keyed dispatch Non-blocking suggestion Decline

§5 nit — index-keyed dispatch → Decline

The suggestion is to key the fake server's response dispatch on message content (lastText.includes('Call cron_create with cron expression')) instead of request index (requests[0]). The concern: a future internal call (e.g. title generation) that lands before the first user prompt while quoting the prompt content could satisfy the index guard and still shift dispatch.

Declined because:

  1. The maintainer explicitly says it is not worth another round: "Not worth another round on this PR — the current form is correct today and fails loudly for the common shift."
  2. The current guard already works: an inserted extra session/prompt before Part 1 fails in 1.2 s with a clear diagnostic (requestIndex 0 was not the cron_create prompt — dispatch shifted), not an opaque 75 s timeout.
  3. The failure scenario is hypothetical: it requires a future internal call that both precedes the first prompt and quotes its content — no such call exists today.
  4. Simplicity First (AGENTS.md): adding defense for a scenario that cannot currently occur is the kind of speculative hardening the project's guidelines discourage.

If this becomes a real problem, it is a straightforward follow-up change.

中文说明

评审分类 — 本轮无变更

PR #8082(issue #8076)收到维护者 @wenshao 的一条 issue 级评论:一份详尽的本地验证报告(确定性 8/8、三个反向变异均被捕获、QWEN_HOME 隔离确认为实质性隔离、冷启动/代理/残留检查均干净)。结论:LGTM,可以合并。

反馈分类

# 条目 类型 决定
1 验证报告(§1–4) 正面评审 无需操作
2 §5 小建议 — 基于索引的分发 不阻塞合并的建议 拒绝

§5 小建议 — 基于索引的分发 → 拒绝

该建议将 fake server 的响应分发从按请求索引(requests[0])改为按消息内容匹配(lastText.includes('Call cron_create with cron expression'))。担忧在于:未来若有内部调用(如标题生成)排在首个用户提示之前且引用了提示内容,就可能同时满足索引守卫、又确实发生分发错位。

拒绝理由:

  1. 维护者明确表示不值得再走一轮"Not worth another round on this PR — the current form is correct today and fails loudly for the common shift."
  2. 当前守卫已经有效:在 Part 1 之前插入一次额外的 session/prompt 后,测试在 1.2 秒内以清晰的诊断信息失败(requestIndex 0 was not the cron_create prompt — dispatch shifted),而非模糊的 75 秒超时。
  3. 失败场景是假设性的:它要求未来出现一个既排在首个提示之前、又引用了提示内容的内部调用——目前不存在这样的调用。
  4. 简洁优先(AGENTS.md):为当前不可能发生的场景添加防御属于项目指南不鼓励的推测性加固。

如果这成为实际问题,是一个简单的后续跟进变更。

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


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

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

@wenshao
wenshao added this pull request to the merge queue Jul 31, 2026
Merged via the queue into main with commit e8d7267 Jul 31, 2026
55 checks passed
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Released in v0.21.3.

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Main CI failed: E2E Tests — cli/acp-cron.test.ts > … > cron job fires and streams results via sessionUpdate after prompt returns

4 participants