Skip to content

Sanitize subagent result tags - #6027

Merged
yiliang114 merged 11 commits into
mainfrom
codex/subagent-result-tags
Jun 30, 2026
Merged

Sanitize subagent result tags#6027
yiliang114 merged 11 commits into
mainfrom
codex/subagent-result-tags

Conversation

@yiliang114

@yiliang114 yiliang114 commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

This PR sanitizes subagent final results before they are fed back into the parent agent context. Raw subagent transcripts still preserve the model output, but the parent receives only the model-visible result: internal-looking <analysis> blocks are removed, and <summary> tags are stripped while keeping their contents visible.

It applies the same boundary to foreground agents, background agents, resumed background agents, and worktree-isolated agent runs, with focused regression coverage for the normal agent tool path and the resume path.

Why it's needed

A subagent can sometimes return internal-looking tags as ordinary assistant text. If Qwen Code forwards that raw final text into the parent context, the parent model and daemon UI can both see those implementation markers, making the response look like leaked analysis or malformed markdown. The correct boundary is to keep raw output in the child transcript/debug trail while returning only the model-visible summary to the parent.

Reviewer Test Plan

How to verify

Run the targeted core tests and inspect that the parent-facing result contains only the summary text when a subagent returns <analysis>...<summary>.... Manual tmux verification results are posted in a PR comment.

Evidence (Before & After)

Before: the logged failing session showed a subagent final answer with <analysis> and <summary> tags visible in the parent/daemon UI path. After: the targeted core tests pass, and manual tmux verification recorded no raw tag leakage in parent follow-up requests.

Local checks: npx vitest run src/agents/subagent-result.test.ts src/tools/agent/agent.test.ts src/agents/background-agent-resume.test.ts src/agents/runtime/workflow-orchestrator.test.ts passed with 275 tests; git diff --check passed.

npm run typecheck was also attempted, but the full workspace check failed before validating this change because of existing unrelated errors in packages/cli around findExistingProviderModels and string | string[] handling, then a later workspace exited with a Node heap OOM.

Tested on

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

Environment (optional)

macOS local checkout, Node.js 22.22.0. Targeted tests were run from a clean PR worktree using the local dependency install.

Risk & Scope

  • Main risk or tradeoff: this intentionally treats literal <analysis> as internal-only when it appears in subagent final text, so a subagent that truly wants to return a literal analysis XML-like block to the parent would have that block removed.
  • Not validated / out of scope: full workspace typecheck is currently blocked by unrelated existing errors and a later OOM; Windows and Linux were not run locally.
  • Follow-up: daemon UI rendering should still escape or render unknown XML-like tags as plain text so display cannot be confused by raw model output. That is UI hardening only; this PR fixes the runtime context pollution at the subagent-to-parent boundary.
  • Breaking changes / migration notes: none expected.

Linked Issues

Fixes #6023

中文说明

这个 PR 做了什么

这个 PR 在 subagent 最终结果回传给父 agent context 之前做清理。子 agent 的原始 transcript 仍然保留模型原始输出,但父 agent 只会收到模型可见结果:移除内部样式的 <analysis> 块,并剥离 <summary> 标签但保留其中的可见内容。

它同时覆盖了前台 agent、后台 agent、恢复后台 agent、以及 worktree 隔离 agent 的返回路径,并为普通 agent tool 路径和 resume 路径补了聚焦的回归测试。

为什么需要

subagent 有时会把内部样式标签作为普通 assistant 文本返回。如果 Qwen Code 把这段原始最终文本直接放进父 context,父模型和 daemon UI 都可能看到这些实现标记,表现为 analysis 泄漏或 markdown/html 渲染异常。正确边界是:原始输出保留在 child transcript/debug 里,父 agent 只收到模型可见 summary。

Reviewer Test Plan

如何验证

运行目标 core 测试,确认当 subagent 返回 <analysis>...<summary>... 时,父侧结果只包含 summary 文本。手动 tmux 验证结果已作为 PR 评论发布。

证据(Before & After)

Before:失败 session 日志显示 subagent 最终答案中的 <analysis><summary> 标签进入了 parent/daemon UI 路径。After:目标 core 测试通过,手动 tmux 验证记录到父 follow-up 请求中没有原始标签泄漏。

本地检查:npx vitest run src/agents/subagent-result.test.ts src/tools/agent/agent.test.ts src/agents/background-agent-resume.test.ts src/agents/runtime/workflow-orchestrator.test.ts 通过,共 275 个测试;git diff --check 通过。

也尝试了 npm run typecheck,但全 workspace 检查在验证本次改动前就因为 packages/cli 中已有的 findExistingProviderModels 导出问题和 string | string[] 类型问题失败,随后另一个 workspace 又因 Node heap OOM 退出。

Tested on

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

Environment (optional)

macOS 本地 checkout,Node.js 22.22.0。目标测试在 clean PR worktree 中复用本地依赖安装运行。

风险和范围

  • 主要风险或取舍:这会把 subagent 最终文本里的字面量 <analysis> 当成内部内容处理,所以如果 subagent 真的想把这种 XML-like analysis block 返回给父 agent,这个块会被移除。
  • 未验证 / 不在范围内:全 workspace typecheck 当前被已有无关错误和后续 OOM 阻塞;本地没有跑 Windows 和 Linux。
  • 后续问题:daemon UI 渲染层仍可以补一层防御,把未知 XML-like 标签按普通文本 escape/render,避免原始模型输出影响展示。它属于 UI hardening;本 PR 处理的是 subagent 到父 agent 边界的 runtime context 污染。
  • Breaking changes / migration notes:预期没有。

Linked Issues

Fixes #6023

@github-actions

github-actions Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 78.26% 78.26% 83.48% 80.18%
Core 84.43% 84.43% 85.66% 84.74%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   78.26 |    80.18 |   83.48 |   78.26 |                   
 src               |   77.64 |    76.89 |   81.13 |   77.64 |                   
  gemini.tsx       |   67.06 |    72.07 |   81.25 |   67.06 | ...-976,1015-1019 
  ...ractiveCli.ts |   78.34 |    76.04 |   74.07 |   78.34 | ...1989-1991,2026 
  ...liCommands.ts |   88.86 |    84.25 |     100 |   88.86 | ...38,407,441,562 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   58.08 |    63.14 |   83.97 |   58.08 |                   
  acpAgent.ts      |   57.96 |    63.18 |   84.18 |   57.96 | ...7915,7923-7924 
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  errorCodes.ts    |       0 |        0 |       0 |       0 | 1-22              
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |   91.17 |       90 |   83.33 |   91.17 |                   
  filesystem.ts    |   91.17 |       90 |   83.33 |   91.17 | 24-25,31-32,98-99 
 ...ration/session |   87.24 |     80.2 |   90.34 |   87.24 |                   
  ...ryReplayer.ts |   76.84 |    85.33 |   85.71 |   76.84 | ...50-365,378-379 
  Session.ts       |      88 |    79.44 |   91.74 |      88 | ...5221,5248-5252 
  ...entTracker.ts |   91.39 |    89.47 |   88.88 |   91.39 | ...31,195,266-275 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   84.21 |    83.33 |     100 |   84.21 | ...37-153,209-211 
  tasksSnapshot.ts |   94.06 |    86.66 |     100 |   94.06 | 60-66             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ssion/emitters |   96.25 |    94.18 |   96.96 |   96.25 |                   
  BaseEmitter.ts   |    92.3 |    81.81 |     100 |    92.3 | 23-24             
  ...ageEmitter.ts |   95.23 |    95.23 |     100 |   95.23 | 48-55             
  PlanEmitter.ts   |     100 |      100 |     100 |     100 |                   
  ...allEmitter.ts |   98.44 |    94.56 |     100 |   98.44 | 318-319,420,428   
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
 ...ession/rewrite |    91.3 |    88.09 |   94.44 |    91.3 |                   
  LlmRewriter.ts   |      81 |       84 |     100 |      81 | ...,88-89,155-159 
  ...Middleware.ts |   96.74 |    86.84 |     100 |   96.74 | 135,143-145       
  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      |   83.73 |    61.85 |   59.25 |   83.73 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   56.66 |      100 |       0 |   56.66 | 15-19,27-34       
  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        |   51.85 |      100 |       0 |   51.85 | 24-35,38          
  serve.ts         |   84.19 |    57.31 |     100 |   84.19 | ...31-534,547-551 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
 ...mmands/channel |   54.07 |    82.03 |   59.09 |   54.07 |                   
  ...l-registry.ts |    6.66 |      100 |       0 |    6.66 | 6-32,35-53        
  config-utils.ts  |   93.33 |      100 |      75 |   93.33 | 21-26             
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  pairing.ts       |   26.31 |      100 |       0 |   26.31 | ...30,40-50,52-65 
  pidfile.ts       |   97.11 |    94.73 |     100 |   97.11 | 27-28,45          
  start.ts         |    57.8 |       65 |   76.47 |    57.8 | ...01,507-510,521 
  status.ts        |   17.85 |      100 |       0 |   17.85 | 15-26,32-76       
  stop.ts          |      20 |      100 |       0 |      20 | 14-48             
 ...nds/extensions |   87.25 |     89.3 |   85.24 |   87.25 |                   
  consent.ts       |   72.53 |       90 |   42.85 |   72.53 | ...86-142,157-163 
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |   85.05 |    83.33 |      75 |   85.05 | ...05-208,211-220 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |     87.5 |     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     |    37.5 |      100 |   33.33 |    37.5 | 23-45,57-64,67-70 
  update.ts        |   96.29 |      100 |     100 |   96.29 | 101-105           
  utils.ts         |      75 |    53.84 |     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.15 |    84.39 |   83.33 |   90.15 |                   
  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.73 |    66.66 |   85.71 |   78.73 | 42-55,168-190     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   11.57 |      100 |       0 |   11.57 |                   
  cleanup.ts       |   17.94 |      100 |       0 |   17.94 | ...01-106,108-109 
  deterministic.ts |   13.75 |      100 |       0 |   13.75 | ...22-738,740-741 
  fetch-pr.ts      |   11.36 |      100 |       0 |   11.36 | ...80-201,203-204 
  load-rules.ts    |   11.32 |      100 |       0 |   11.32 | ...41-153,155-156 
  pr-context.ts    |    6.22 |      100 |       0 |    6.22 | ...97-312,314-315 
  presubmit.ts     |    9.35 |      100 |       0 |    9.35 | ...62-287,289-290 
 ...nds/review/lib |      30 |      100 |       0 |      30 |                   
  gh.ts            |   22.58 |      100 |       0 |   22.58 | ...49,53-54,62-69 
  git.ts           |   22.72 |      100 |       0 |   22.72 | 15-18,29-39,43-44 
  paths.ts         |   52.94 |      100 |       0 |   52.94 | ...26,37-38,42-43 
 ...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        |   93.53 |    87.06 |    94.5 |   93.53 |                   
  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 
  config.ts        |   86.92 |    85.53 |   82.75 |   86.92 | ...2190,2192-2200 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  environment.ts   |   87.37 |    85.84 |   92.85 |   87.37 | ...43-544,550-551 
  hot-reload.ts    |     100 |    86.11 |     100 |     100 | 46,156,165,216    
  keyBindings.ts   |    97.1 |       50 |     100 |    97.1 | 212-215           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  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 |      92 |     90.9 |     100 |      92 | 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 
  settings.ts      |   88.05 |    88.06 |   89.65 |   88.05 | ...-966,1000-1006 
  ...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 |                   
  ...paths-lite.ts |   89.47 |     87.5 |     100 |   89.47 | 43-44,53-54,56-57 
  ...tedFolders.ts |   93.78 |    94.73 |     100 |   93.78 | ...43-344,380-391 
 ...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    |   69.39 |    66.66 |   63.15 |   69.39 |                   
  ...tputBridge.ts |   69.48 |     67.3 |    64.7 |   69.48 | ...82-383,391-394 
  ...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          |   83.22 |       80 |    86.2 |   83.22 |                   
  index.ts         |    65.4 |    76.92 |      80 |    65.4 | ...70-271,294-299 
  languages.ts     |   96.92 |    86.66 |     100 |   96.92 | 134-135,167,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 |   78.99 |    76.11 |   81.03 |   78.99 |                   
  session.ts       |   83.18 |       75 |   93.47 |   83.18 | ...63-964,973-983 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...00-601,604-605 
 ...active/control |   75.88 |    88.46 |      80 |   75.88 |                   
  ...rolContext.ts |    6.45 |        0 |       0 |    6.45 | 56-95             
  ...Dispatcher.ts |   91.69 |       92 |   88.88 |   91.69 | ...49-367,384,387 
  ...rolService.ts |     7.4 |        0 |       0 |     7.4 | 46-185            
 ...ol/controllers |   27.87 |    44.44 |    37.5 |   27.87 |                   
  ...Controller.ts |   39.49 |      100 |      80 |   39.49 | 88-92,127-210     
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   31.32 |     38.7 |      40 |   31.32 | ...68-577,592-597 
  ...Controller.ts |   14.06 |      100 |       0 |   14.06 | ...82-117,130-133 
  ...Controller.ts |   24.52 |       40 |   33.33 |   24.52 | ...64-476,485-514 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |    98.1 |    94.18 |   95.23 |    98.1 |                   
  ...putAdapter.ts |   98.02 |    93.33 |   98.07 |   98.02 | ...1303,1398-1399 
  ...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 | 83-84,124-125     
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/remoteInput   |   83.12 |    73.43 |    87.5 |   83.12 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   83.77 |    74.19 |   92.85 |   83.77 | ...05-306,317-320 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/serve         |   84.56 |    82.03 |   84.68 |   84.56 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |    93.4 |    92.85 |     100 |    93.4 | ...16-317,320-322 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    96.29 |     100 |     100 | 415               
  daemon-logger.ts |   98.24 |    86.95 |   96.29 |   98.24 | 119-120,196       
  ...s-provider.ts |   67.01 |    51.42 |     100 |   67.01 | ...40-245,278-286 
  daemon-status.ts |   97.78 |    82.71 |     100 |   97.78 | ...28,630-631,682 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  demo.ts          |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   90.47 |    78.57 |     100 |   90.47 | ...20-123,189-196 
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  ...h-settings.ts |   94.88 |    88.93 |     100 |   94.88 | ...08,683,699,709 
  fast-path.ts     |   82.24 |    77.51 |      80 |   82.24 | ...95-496,504-507 
  index.ts         |       0 |        0 |       0 |       0 | 1-143             
  ...back-binds.ts |     100 |      100 |     100 |     100 |                   
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  rate-limit.ts    |   92.43 |    88.17 |     100 |   92.43 | ...81-283,295-297 
  ...qwen-serve.ts |   78.52 |    81.12 |   54.87 |   78.52 | ...2404,2418-2421 
  server.ts        |   95.44 |    93.82 |   79.16 |   95.44 | ...92-699,795-802 
  ...t-event-id.ts |     100 |    91.66 |     100 |     100 | 12                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   91.07 |     86.2 |     100 |   91.07 | ...79-182,216-219 
  ...ace-agents.ts |   62.47 |    70.34 |   90.47 |   62.47 | ...1332,1342-1352 
  ...ace-memory.ts |   87.17 |    78.46 |     100 |   87.17 | ...56-363,423-430 
  ...ers-status.ts |   97.05 |    79.38 |     100 |   97.05 | ...47,150,263-269 
 ...serve/acp-http |   71.27 |     72.2 |    91.6 |   71.27 |                   
  ...r-registry.ts |   93.15 |    83.33 |     100 |   93.15 | 206,220-225       
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   96.68 |    85.81 |   97.22 |   96.68 | ...65,929,949-963 
  dispatch.ts      |   64.89 |    66.66 |     100 |   64.89 | ...3116,3164-3170 
  index.ts         |   71.31 |    67.98 |   78.94 |   71.31 | ...1262,1291-1293 
  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.23 |   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.18 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |       80 |   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 |   81.64 |    70.28 |   86.84 |   81.64 |                   
  ...r-emulator.ts |   87.14 |    57.14 |   85.71 |   87.14 | ...72-175,194-195 
  ...verse-link.ts |   85.42 |    72.46 |     100 |   85.42 | ...17-321,325-330 
  ...l-registry.ts |     100 |      100 |     100 |     100 |                   
  cdp-ws.ts        |   67.68 |       60 |   42.85 |   67.68 | ...13-218,232,244 
 ...nel/acceptance |       0 |        0 |       0 |       0 |                   
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-103             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-329             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-77              
 src/serve/fs      |   85.31 |    81.43 |     100 |   85.31 |                   
  audit.ts         |     100 |    96.15 |     100 |     100 | 204               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.82 |    77.08 |     100 |   77.82 | ...64,493-497,510 
  policy.ts        |   90.32 |    89.18 |     100 |   90.32 | 142-150           
  ...ile-system.ts |    84.3 |    79.27 |     100 |    84.3 | ...2061,2088-2089 
 src/serve/routes  |   81.48 |    77.35 |   89.83 |   81.48 |                   
  a2ui-action.ts   |     100 |     94.2 |     100 |     100 | 120,124,169,273   
  capabilities.ts  |     100 |      100 |     100 |     100 |                   
  daemon-status.ts |   83.33 |    83.33 |     100 |   83.33 | 79-86             
  health-demo.ts   |    92.3 |    83.33 |     100 |    92.3 | 55-59             
  permission.ts    |     100 |     91.3 |     100 |     100 | 39,78             
  session.ts       |   76.28 |    80.64 |      75 |   76.28 | ...1183,1190-1215 
  sse-events.ts    |   85.71 |    86.11 |   77.77 |   85.71 | ...69,375,392-395 
  ...space-auth.ts |    83.7 |       75 |     100 |    83.7 | ...23,328,340-344 
  ...extensions.ts |   84.42 |    72.72 |   86.36 |   84.42 | ...63-965,984-987 
  ...-file-read.ts |   94.41 |    76.92 |     100 |   94.41 | ...28-329,390-392 
  ...file-write.ts |    82.1 |    60.52 |     100 |    82.1 | ...42-244,247-249 
  ...-lifecycle.ts |     100 |    91.66 |     100 |     100 | 65                
  ...cp-control.ts |   71.42 |    83.72 |     100 |   71.42 | ...04-210,215-218 
  ...ermissions.ts |   87.38 |    76.19 |     100 |   87.38 | ...05-106,132-133 
  ...e-settings.ts |   43.26 |       55 |   66.66 |   43.26 | ...71-281,286-291 
  ...tup-github.ts |   77.52 |    70.27 |   84.21 |   77.52 | ...87,309,352-353 
  ...ace-status.ts |    73.1 |    57.69 |     100 |    73.1 | ...45-146,155-156 
  ...pace-tools.ts |   77.77 |       75 |     100 |   77.77 | 47-52,62-67,91-94 
  ...pace-trust.ts |   76.84 |    72.22 |      50 |   76.84 | ...,63-64,117-118 
  ...pace-voice.ts |   87.09 |     82.6 |    90.9 |   87.09 | ...96,322-323,452 
 src/serve/server  |   84.28 |     86.4 |   93.33 |   84.28 |                   
  access-log.ts    |   97.72 |    95.45 |     100 |   97.72 | 51                
  ...er-helpers.ts |   63.82 |    77.96 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |   98.38 |    88.23 |     100 |   98.38 | 81                
  ...r-handlers.ts |   81.81 |       50 |     100 |   81.81 | 16,23,27-28       
  ...r-response.ts |   79.05 |     74.5 |     100 |   79.05 | ...39-463,522-531 
  fs-factory.ts    |     100 |    83.33 |     100 |     100 | 27,35             
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |   66.66 |    66.66 |   33.33 |   66.66 | 28-33,36-41       
  ...st-helpers.ts |   93.97 |    93.47 |     100 |   93.97 | ...31-133,387-392 
  self-origin.ts   |     100 |      100 |     100 |     100 |                   
  ...e-features.ts |   91.13 |    94.44 |     100 |   91.13 | 103-109           
  session-list.ts  |     100 |    91.89 |     100 |     100 | 34,128,130        
  telemetry.ts     |   95.62 |    96.87 |     100 |   95.62 | ...27-129,199-201 
 src/serve/voice   |   70.58 |    95.74 |   72.72 |   70.58 |                   
  ...ice-config.ts |   13.33 |      100 |       0 |   13.33 | 35-63,71-87       
  voice-ws.ts      |   78.03 |    95.74 |   84.21 |   78.03 | ...84,399,437-439 
 ...kspace-service |    85.4 |    83.68 |      92 |    85.4 |                   
  index.ts         |   84.86 |    83.33 |    90.9 |   84.86 | ...76-681,741-806 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   91.82 |    88.18 |   98.24 |   91.82 |                   
  ...mandLoader.ts |     100 |    88.88 |     100 |     100 | 99-112            
  ...killLoader.ts |     100 |    93.33 |     100 |     100 | 48,67             
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   86.83 |    83.87 |     100 |   86.83 | ...30-335,340-345 
  ...omptLoader.ts |   75.84 |    80.64 |   83.33 |   75.84 | ...10-211,277-278 
  ...mandLoader.ts |     100 |    97.14 |     100 |     100 | 66                
  ...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 |                   
  ...low-loader.ts |     100 |    96.15 |     100 |     100 | 88                
  setup-github.ts  |    90.5 |    81.81 |     100 |    90.5 | ...35-436,443-444 
  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 |   85.99 |    87.09 |     100 |   85.99 | ...68,275,329-343 
  ...e-settings.ts |     100 |    95.45 |     100 |     100 | 19                
  ...ranscriber.ts |   90.01 |       81 |   95.83 |   90.01 | ...29-631,634-636 
 ...ght/generators |    88.3 |    85.49 |   92.59 |    88.3 |                   
  DataProcessor.ts |   88.22 |    85.48 |      95 |   88.22 | ...1341,1345-1352 
  ...tGenerator.ts |   98.21 |    85.71 |     100 |   98.21 | 46                
  ...teRenderer.ts |   45.45 |      100 |       0 |   45.45 | 13-51             
 .../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.35 |    84.84 |     100 |   97.35 |                   
  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       |   80.53 |     74.6 |     100 |   80.53 |                   
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |   94.01 |    83.33 |      80 |   94.01 |                   
  ...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            |   68.86 |    70.18 |   61.11 |   68.86 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   69.88 |     65.4 |   57.14 |   69.88 | ...3633,4142-4146 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |   29.23 |      100 |       0 |   29.23 | 25-75             
  ...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.22 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...ractiveUI.tsx |   56.25 |    33.33 |      40 |   56.25 | ...30-231,236-241 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...96,401,409-411 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   58.45 |    66.18 |   51.06 |   58.45 |                   
  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.03 |    70.73 |   57.69 |   60.03 | ...87,791,800,803 
  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   |   78.95 |    81.48 |   87.67 |   78.95 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |   89.47 |    81.25 |     100 |   89.47 | 92-93,95-100      
  arenaCommand.ts  |   62.81 |    58.73 |   65.21 |   62.81 | ...90-595,680-688 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    77.41 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 27,61             
  cdCommand.ts     |   89.44 |    80.35 |     100 |   89.44 | ...81,106-111,190 
  clearCommand.ts  |   79.64 |       68 |     100 |   79.64 | ...24-125,133-142 
  ...essCommand.ts |   67.95 |    55.88 |      75 |   67.95 | ...86-187,201-204 
  ...astCommand.ts |   70.86 |    74.07 |      75 |   70.86 | ...,61-93,117-122 
  ...extCommand.ts |    65.8 |    68.25 |   84.61 |    65.8 | ...57-590,601-602 
  copyCommand.ts   |   98.49 |    95.78 |     100 |   98.49 | ...80,280,321,327 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |     87.5 |     100 |     100 | ...61,224-225,238 
  ...ryCommand.tsx |   80.62 |    84.93 |   91.66 |   80.62 | ...72-277,324-331 
  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 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |    50.3 |    48.14 |   69.23 |    50.3 | ...08,262-314,375 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 96,147            
  goalCommand.ts   |   91.46 |    84.44 |      90 |   91.46 | ...87-190,202-205 
  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   |   84.33 |    72.72 |     100 |   84.33 | 68,82-87,89-94    
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   92.17 |    82.69 |     100 |   92.17 | ...39,159,168-178 
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   79.31 |    86.36 |   83.33 |   79.31 | ...66-471,561-566 
  ...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             
  ...berCommand.ts |      96 |       70 |     100 |      96 | 58,63             
  renameCommand.ts |   85.71 |    86.04 |     100 |   85.71 | ...02-209,216-221 
  ...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 |    85.5 |    81.25 |     100 |    85.5 | 36-44,70          
  statsCommand.ts  |    90.6 |    77.95 |     100 |    90.6 | ...91-694,785-792 
  ...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 |                   
  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 |   64.17 |    78.07 |    72.6 |   64.17 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  ...ateScreen.tsx |   77.41 |    66.66 |      50 |   77.41 | 34-40             
  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 |   16.27 |      100 |       0 |   16.27 | 19-58             
  ...TextInput.tsx |   88.36 |    88.57 |     100 |   88.36 | ...80-282,296-298 
  Composer.tsx     |   94.39 |    66.66 |     100 |   94.39 | ...-71,83,138,151 
  ...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 | 18                
  ...ification.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |       0 |        0 |       0 |       0 | 1-582             
  DiffDialog.tsx   |   31.17 |    19.51 |   30.76 |   31.17 | ...07-712,722-735 
  ...ngsDialog.tsx |       0 |        0 |       0 |       0 | 1-195             
  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.54 |       54 |     100 |   75.54 | ...09-214,232-236 
  ...ngSpinner.tsx |   68.42 |       80 |      50 |   68.42 | 35-52,73,80-81    
  GoalPill.tsx     |   83.33 |    76.92 |     100 |   83.33 | 24-30             
  Header.tsx       |   98.62 |    94.28 |     100 |   98.62 | 162,164           
  Help.tsx         |   98.32 |       90 |     100 |   98.32 | ...24,381,447-448 
  ...emDisplay.tsx |   73.66 |    64.19 |     100 |   73.66 | ...46,449,452-458 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   81.07 |    80.12 |   77.77 |   81.07 | ...1976,2002,2054 
  ...Shortcuts.tsx |   20.87 |      100 |       0 |   20.87 | ...6,49-51,67-125 
  ...Indicator.tsx |   98.14 |    97.82 |     100 |   98.14 | 157-158           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   98.43 |    94.82 |   66.66 |   98.43 | 89,166-170        
  MemoryDialog.tsx |   64.84 |     77.9 |    62.5 |   64.84 | ...02,421,470-472 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   82.81 |    75.64 |     100 |   82.81 | ...82-798,855-859 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |       0 |        0 |       0 |       0 | 1-58              
  ...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 |    84.21 |     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 |    69.6 |    73.01 |      75 |    69.6 | ...34-842,848-849 
  ...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 |   92.78 |    82.35 |      75 |   92.78 | ...5,77-79,93,124 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-172             
  ...tivityTab.tsx |       0 |        0 |       0 |       0 | 1-275             
  StatsDialog.tsx  |       0 |        0 |       0 |       0 | 1-238             
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |       0 |        0 |       0 |       0 | 1-258             
  ...atmapView.tsx |       0 |        0 |       0 |       0 | 1-107             
  ...essionTab.tsx |       0 |        0 |       0 |       0 | 1-215             
  ...ineDialog.tsx |    93.5 |    85.18 |     100 |    93.5 | ...05,267,287-289 
  ...yTodoList.tsx |   96.33 |    88.23 |     100 |   96.33 | 137-140           
  ...nsDisplay.tsx |   91.73 |    80.55 |     100 |   91.73 | ...75,178,205-207 
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  ...ingViewer.tsx |   74.01 |    55.55 |     100 |   74.01 | ...02,111-118,130 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    81.81 |     100 |     100 | 71-86             
  ...ification.tsx |       0 |        0 |       0 |       0 | 1-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 |   91.42 |    64.28 |     100 |   91.42 | 15,21,24          
  ...s-helpers.tsx |       0 |        0 |       0 |       0 | 1-102             
 ...nts/agent-view |   53.71 |    70.87 |   42.85 |   53.71 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |   21.05 |      100 |       0 |   21.05 | 21-39             
  ...tComposer.tsx |   64.78 |    29.41 |   33.33 |   64.78 | ...51,269,277-279 
  AgentFooter.tsx  |   17.07 |      100 |       0 |   17.07 | 28-66             
  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.38 |    68.69 |   73.68 |   42.38 |                   
  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-164             
  ...tusDialog.tsx |       0 |        0 |       0 |       0 | 1-288             
  ...topDialog.tsx |       0 |        0 |       0 |       0 | 1-213             
 ...ackground-view |   78.59 |    78.07 |   88.37 |   78.59 |                   
  ...sksDialog.tsx |   73.81 |    74.32 |   79.16 |   73.81 | ...1546,1568-1574 
  ...TasksPill.tsx |   67.03 |     86.2 |     100 |   67.03 | ...02-122,130-138 
  ...gentPanel.tsx |   97.43 |    85.39 |     100 |   97.43 | 121,436-440       
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.58 |    78.18 |   83.33 |   84.58 |                   
  ...gerDialog.tsx |   82.46 |    77.77 |     100 |   82.46 | ...89,191-198,258 
  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.15 |    84.74 |   58.82 |   46.15 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.13 |    88.09 |   66.66 |   75.13 | ...52,173,202-208 
  ...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 |   66.18 |    67.65 |   66.66 |   66.18 |                   
  DiscoverTab.tsx  |   57.21 |     63.2 |   55.55 |   57.21 | ...98,661-665,669 
  InstalledTab.tsx |   71.62 |    68.65 |   83.33 |   71.62 | ...68,773-774,811 
  SourcesTab.tsx   |   69.25 |     70.4 |   66.66 |   69.25 | ...16,535,607-619 
 ...tensions/views |   23.73 |    44.82 |       5 |   23.73 |                   
  ...tionsView.tsx |    6.02 |      100 |       0 |    6.02 | 52-65,68-368      
  ...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.85 |    81.37 |   91.89 |   86.85 |                   
  ...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.96 |    61.53 |   70.58 |   40.96 |                   
  ...ealthPill.tsx |   68.42 |    85.71 |     100 |   68.42 | 40-46             
  ...entDialog.tsx |      33 |    26.19 |      40 |      33 | ...81,883,896-902 
  ...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 |   54.25 |    74.31 |   57.14 |   54.25 |                   
  ...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 |    64.8 |    62.26 |   33.33 |    64.8 | ...75-284,295-317 
  ...rListStep.tsx |   88.46 |    81.25 |     100 |   88.46 | ...63,169,174-179 
  ...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 |   86.81 |     82.5 |   80.45 |   86.81 |                   
  ...ionDialog.tsx |   86.77 |    79.85 |      80 |   86.77 | ...17,535,553-555 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    91.83 |     100 |     100 | 27,31,33,35       
  ...onMessage.tsx |   91.93 |    82.35 |     100 |   91.93 | 57-59,61,63       
  ...nMessages.tsx |   89.89 |    86.66 |    90.9 |   89.89 | ...12-318,375-381 
  DiffRenderer.tsx |   93.19 |    86.17 |     100 |   93.19 | ...09,237-238,304 
  ...tsDisplay.tsx |   97.82 |    77.27 |     100 |   97.82 | 87,89             
  ...usMessage.tsx |   76.31 |     42.1 |   66.66 |   76.31 | ...99,101,124,155 
  ...tsDisplay.tsx |    95.6 |    88.46 |     100 |    95.6 | ...48,150,183-188 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   16.66 |      100 |       0 |   16.66 | 22-38             
  ...sMessages.tsx |   58.65 |       50 |    37.5 |   58.65 | ...20-125,146-158 
  ...ryMessage.tsx |   14.28 |      100 |       0 |   14.28 | 23-62             
  ...onMessage.tsx |   82.31 |    74.02 |   33.33 |   82.31 | ...69-471,478-480 
  ...upMessage.tsx |   98.23 |       95 |     100 |   98.23 | 173-176,390       
  ToolMessage.tsx  |   88.72 |    76.66 |    92.3 |   88.72 | ...66-771,798-800 
 ...ponents/shared |   85.14 |    81.41 |    95.5 |   85.14 |                   
  ...ctionList.tsx |     100 |      100 |     100 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  MaxSizedBox.tsx  |   83.01 |    86.25 |   88.88 |   83.01 | ...12-513,618-619 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |    82.7 |    84.84 |     100 |    82.7 | 46-64,71-74       
  StaticRender.tsx |   72.72 |      100 |     100 |   72.72 | 31-33             
  TextInput.tsx    |    80.8 |    67.24 |      80 |    80.8 | ...36-240,252-258 
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |   88.54 |    83.64 |      90 |   88.54 | ...15,745-773,869 
  text-buffer.ts   |   85.94 |    81.73 |   97.91 |   85.94 | ...2651,2749-2750 
  ...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-694             
 ...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.04 |    53.19 |    37.5 |   14.04 |                   
  ...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.42 |    59.52 |     100 |   35.42 | ...20-432,437-439 
  ...iewerStep.tsx |       0 |        0 |       0 |       0 | 1-73              
  ...gerDialog.tsx |       0 |        0 |       0 |       0 | 1-341             
 ...mponents/views |   70.21 |    67.32 |    64.7 |   70.21 |                   
  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 |   87.87 |    73.68 |     100 |   87.87 | 69-76             
  McpStatus.tsx    |   89.49 |    60.52 |     100 |   89.49 | ...72,175-177,262 
  SkillsList.tsx   |   27.27 |      100 |       0 |   27.27 | 18-35             
  ToolsList.tsx    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   81.55 |    78.24 |   83.07 |   81.55 |                   
  ...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 
  ...deContext.tsx |   88.88 |      100 |       0 |   88.88 | 21                
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   81.86 |    81.65 |     100 |   81.86 | ...1257,1262-1264 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   78.68 |    73.77 |   91.66 |   78.68 | ...86-389,398-401 
  ...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             
  ...erContext.tsx |     100 |      100 |      50 |     100 |                   
  ...edContext.tsx |     100 |      100 |     100 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 142-143           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 225-226           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
 src/ui/daemon     |   90.65 |    73.61 |   95.45 |   90.65 |                   
  ...ui-adapter.ts |   90.65 |    73.61 |   95.45 |   90.65 | ...44,762-763,849 
 src/ui/editors    |       0 |        0 |       0 |       0 |                   
  ...ngsManager.ts |       0 |        0 |       0 |       0 | 1-67              
 src/ui/hooks      |   83.48 |    81.43 |   88.25 |   83.48 |                   
  ...dProcessor.ts |   80.38 |    81.48 |     100 |   80.38 | ...53-654,660-665 
  ...ention-ref.ts |   97.67 |       84 |     100 |   97.67 | 63                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.62 |    73.58 |     100 |   94.62 | ...86-287,292-293 
  ...dProcessor.ts |   84.63 |    64.28 |   84.21 |   84.63 | ...1109,1130-1134 
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.36 |    81.95 |   66.66 |   92.36 | ...00,502-503,658 
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      42 |       75 |     100 |      42 | 42-44,53-59,62-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |    90.6 |     87.9 |     100 |    90.6 | ...28-435,475-484 
  ...ifications.ts |   86.91 |    96.29 |     100 |   86.91 | 116-130           
  ...tIndicator.ts |   83.49 |    70.96 |     100 |   83.49 | ...58,166,168-176 
  ...waySummary.ts |   96.22 |    69.69 |     100 |   96.22 | 125-127,169       
  ...ndTaskView.ts |   93.84 |    74.46 |     100 |   93.84 | ...25-129,218,224 
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   93.37 |     73.8 |     100 |   93.37 | ...37,186,259-262 
  ...ompletion.tsx |   96.75 |    81.81 |     100 |   96.75 | ...78-279,289-290 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   94.11 |    89.65 |     100 |   94.11 | ...32-133,137-138 
  ...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.76 |    10.52 |     100 |   36.76 | ...75-181,188-193 
  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.64 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |    93.5 |     92.3 |     100 |    93.5 | ...87-291,304-310 
  ...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 |      100 |     100 |     100 |                   
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...miniStream.ts |   83.53 |    79.87 |      95 |   83.53 | ...3306,3391-3399 
  ...BranchName.ts |     100 |    91.66 |     100 |     100 | 30                
  ...oryManager.ts |   97.94 |    98.24 |     100 |   97.94 | 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 |       0 |        0 |       0 |       0 | 1-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.07 |    85.29 |     100 |   93.07 | ...23-126,138-139 
  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 |      100 |     100 |     100 |                   
  ...delCommand.ts |     100 |     92.3 |     100 |     100 | 40                
  ...ouseEvents.ts |   92.42 |    95.65 |      75 |   92.42 | 43-47             
  ...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 |   86.95 |    77.41 |   91.66 |   86.95 | ...70,311-323,371 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   88.54 |    91.83 |     100 |   88.54 | ...73-278,381-391 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...tleRepaint.ts |     100 |      100 |     100 |     100 |                   
  ...umeCommand.ts |   93.66 |    72.41 |     100 |   93.66 | ...17,155,196-201 
  ...ompletion.tsx |   90.59 |    83.33 |     100 |   90.59 | ...01,104,137-140 
  ...ectionList.ts |   97.05 |    96.11 |     100 |   97.05 | ...90-191,245-248 
  ...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 |       0 |        0 |       0 |       0 | 1-73              
  ...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.1 |       93 |     100 |    97.1 | ...70-374,475-482 
  ...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 |   53.06 |       50 |   66.66 |   53.06 | ...53,61-68,79-85 
  ...rminalSize.ts |   76.19 |      100 |      50 |   76.19 | 21-25             
  ...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 |      100 |     100 |     100 |                   
  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    |    90.9 |    90.62 |     100 |    90.9 |                   
  ...AppLayout.tsx |   90.72 |       90 |     100 |   90.72 | 57-59,101-106     
  ...AppLayout.tsx |   91.17 |    91.66 |     100 |   91.17 | 70-75             
 src/ui/models     |   80.24 |    79.16 |   71.42 |   80.24 |                   
  ...ableModels.ts |   80.24 |    79.16 |   71.42 |   80.24 | ...,61-71,123-125 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/state      |   94.91 |    81.81 |     100 |   94.91 |                   
  extensions.ts    |   94.91 |    81.81 |     100 |   94.91 | 68-69,88          
 src/ui/themes     |    98.5 |    73.06 |     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.33 |     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      |   83.82 |    83.28 |   93.46 |   83.82 |                   
  ...Colorizer.tsx |   80.42 |    85.41 |     100 |   80.42 | ...00-201,298-324 
  ...nRenderer.tsx |   68.83 |    70.14 |      50 |   68.83 | ...52-254,274-293 
  ...wnDisplay.tsx |   86.01 |    87.66 |     100 |   86.01 | ...87,704,729-754 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   92.08 |    80.45 |      95 |   92.08 | ...76-679,723-728 
  ...odeDisplay.ts |   96.55 |     90.9 |     100 |   96.55 | 34                
  asciiCharts.ts   |   96.77 |    87.62 |     100 |   96.77 | 173-180,281       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |   51.92 |    72.72 |   91.66 |   51.92 | ...21,624-633,636 
  commandUtils.ts  |    96.1 |    88.77 |     100 |    96.1 | ...73,175-176,320 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   90.38 |    73.91 |     100 |   90.38 | 23,25,29,31,33    
  formatters.ts    |    95.4 |    98.41 |     100 |    95.4 | 123-126           
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    96.77 |     100 |     100 | 43                
  historyUtils.ts  |    95.6 |    95.16 |     100 |    95.6 | 96-99             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |    8.23 |      100 |       0 |    8.23 | ...31-132,135-136 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |       95 |     100 |     100 | 81                
  ...nUtilities.ts |   90.21 |    85.71 |     100 |   90.21 | ...,91-95,107-108 
  ...t-position.ts |     100 |      100 |     100 |     100 |                   
  ...ToolGroups.ts |   98.65 |    96.72 |     100 |   98.65 | 48-49             
  ...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.14 |    73.77 |     100 |   92.14 | ...29,136,140-143 
  osc8.ts          |   94.84 |    88.74 |     100 |   94.84 | ...57,442,446-447 
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |   99.02 |    97.56 |     100 |   99.02 | 106               
  ...storyUtils.ts |   68.54 |    78.07 |   93.33 |   68.54 | ...41-463,589-590 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...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 
  ...izedOutput.ts |   94.94 |      100 |   88.88 |   94.94 | 112-117           
  ...wOptimizer.ts |     100 |    96.77 |     100 |     100 | 69                
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   93.99 |    90.47 |   93.33 |   93.99 | ...89-290,425-426 
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   89.33 |    93.47 |     100 |   89.33 | ...,66-78,180-181 
  updateCheck.ts   |     100 |    80.95 |     100 |     100 | 30-42             
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |      57 |     40.8 |   79.41 |      57 |                   
  collect.ts       |   55.92 |    50.58 |   86.36 |   55.92 | ...25-640,642-647 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   58.11 |    20.51 |      80 |   58.11 | ...13-314,328-363 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |      40 |      100 |       0 |      40 | 11-13             
 ...ort/formatters |    3.38 |      100 |       0 |    3.38 |                   
  html.ts          |    9.61 |      100 |       0 |    9.61 | ...28,34-76,82-84 
  json.ts          |      50 |      100 |       0 |      50 | 14-15             
  jsonl.ts         |     3.5 |      100 |       0 |     3.5 | 14-76             
  markdown.ts      |    0.94 |      100 |       0 |    0.94 | 13-295            
 src/ui/voice      |   81.12 |    72.76 |    79.1 |   81.12 |                   
  ...d-recorder.ts |     6.2 |        0 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |   84.61 |    93.33 |   57.14 |   84.61 | ...16-117,131-136 
  ...me-session.ts |   91.14 |     64.7 |   92.85 |   91.14 | ...76,282,292-295 
  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 |     100 |    88.88 |     100 |     100 | 18                
  ...am-session.ts |   87.45 |    63.33 |   81.81 |   87.45 | ...03,320-322,339 
  ...ranscriber.ts |     100 |      100 |     100 |     100 |                   
 src/utils         |   74.13 |    89.14 |   91.29 |   74.13 |                   
  acpModelUtils.ts |   94.44 |     92.3 |     100 |   94.44 | 44,68-69,73-74    
  apiPreconnect.ts |   96.72 |    97.14 |     100 |   96.72 | 165-168           
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   82.53 |    93.33 |      80 |   82.53 | 74,105-115        
  commands.ts      |     100 |      100 |     100 |     100 |                   
  commentJson.ts   |   90.51 |    91.89 |     100 |   90.51 | 67-76,116         
  ...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          
  ...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        |   90.85 |    96.36 |    92.3 |   90.85 | 69-70,298-310     
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...on-mention.ts |   88.48 |     82.6 |     100 |   88.48 | ...56-160,164-168 
  gitUtils.ts      |    92.7 |    84.09 |     100 |    92.7 | ...07-110,158-161 
  ...AutoUpdate.ts |    92.2 |    95.23 |   88.88 |    92.2 | 130-141           
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.71 |    94.18 |     100 |   97.71 | ...57,274-275,320 
  languageUtils.ts |   98.47 |    97.72 |     100 |   98.47 | 153-154           
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   96.04 |     94.4 |     100 |   96.04 | ...7-78,83-84,324 
  ...iveHelpers.ts |   95.33 |    92.08 |     100 |   95.33 | ...51-452,550,563 
  osc.ts           |    97.5 |      100 |   88.88 |    97.5 | 195-196           
  package.ts       |   88.88 |       80 |     100 |   88.88 | 31-32             
  processUtils.ts  |     100 |      100 |     100 |     100 |                   
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   93.22 |    81.25 |     100 |   93.22 | 65-67,80          
  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       |       0 |        0 |       0 |       0 | 1-1042            
  ...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.03 |    88.81 |      90 |   82.03 | ...11-729,736-744 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   27.55 |    76.11 |   45.83 |   27.55 | ...44-845,848-867 
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       60 |     100 |     100 | 23,32             
  systemInfo.ts    |   95.12 |    89.06 |     100 |   95.12 | ...43-244,249-253 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   94.11 |    83.33 |     100 |   94.11 | 13                
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |       50 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  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          |   84.43 |    84.74 |   85.66 |   84.43 |                   
 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.07 |    82.04 |   94.92 |   90.07 |                   
  ...transcript.ts |    92.3 |    85.93 |     100 |    92.3 | ...06,325-326,457 
  ...ent-resume.ts |   83.47 |    71.75 |   79.41 |   83.47 | ...1269-1273,1276 
  ...ound-tasks.ts |   96.83 |    89.13 |     100 |   96.83 | ...1171,1191-1194 
  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.28 |     100 |   95.65 | ...12-413,485-489 
  ...w-snapshot.ts |   91.86 |       75 |     100 |   91.86 | ...54,178,185-187 
 src/agents/arena  |   75.91 |    66.34 |   78.72 |   75.91 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   74.58 |    62.65 |   78.26 |   74.58 | ...1860,1866-1867 
  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 |   76.47 |    86.27 |   73.75 |   76.47 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |   92.06 |    91.04 |      90 |   92.06 | ...95,250-270,329 
  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 |   88.05 |    84.94 |   82.21 |   88.05 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |    79.2 |    74.69 |   65.95 |    79.2 | ...1834,1861-1908 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   87.93 |    79.06 |   63.63 |   87.93 | ...00-401,404-405 
  ...nteractive.ts |   79.52 |       80 |   74.07 |   79.52 | ...83,485-488,491 
  ...statistics.ts |   98.19 |    82.35 |     100 |   98.19 | 127,151,192,225   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...ow-journal.ts |   91.76 |    75.86 |     100 |   91.76 | ...38-139,179-181 
  ...chestrator.ts |   91.61 |    87.69 |   82.35 |   91.61 | ...1743,1792-1795 
  ...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   |   80.38 |    83.26 |    86.5 |   80.38 |                   
  TeamManager.ts   |    67.4 |    76.54 |   74.41 |    67.4 | ...1444,1467-1468 
  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.47 |   96.29 |   88.85 | ...-990,1034-1035 
  team-events.ts   |   60.52 |      100 |      50 |   60.52 | ...37-141,148-152 
  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 |    93.38 |   98.21 |   94.39 |                   
  ...on-harness.ts |   96.49 |    77.77 |     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        |   81.55 |    85.65 |   68.42 |   81.55 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   80.32 |    85.08 |   65.17 |   80.32 | ...5925,5930-5931 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   94.63 |    91.86 |   89.58 |   94.63 | ...15-416,419-420 
 ...nfirmation-bus |   98.29 |    97.14 |     100 |   98.29 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   88.96 |    84.52 |   92.01 |   88.96 |                   
  baseLlmClient.ts |   86.12 |    79.27 |   77.77 |   86.12 | ...91,601,649-651 
  client.ts        |   87.84 |    81.41 |   90.32 |   87.84 | ...2673,2768-2769 
  ...tGenerator.ts |   88.07 |       75 |     100 |   88.07 | ...79-383,391-395 
  ...lScheduler.ts |   88.16 |     82.7 |   95.06 |   88.16 | ...4310,4338-4349 
  geminiChat.ts    |    89.1 |    87.45 |   95.06 |    89.1 | ...3283,3350-3351 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |    95.83 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   92.59 |       75 |      50 |   92.59 | 41-42             
  ...on-helpers.ts |   86.72 |    73.68 |     100 |   86.72 | ...00-201,215-224 
  ...issionFlow.ts |   98.78 |       96 |     100 |   98.78 | 93                
  prompts.ts       |   88.93 |    87.87 |   72.72 |   88.93 | ...-910,1113-1114 
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |    89.28 |     100 |     100 | 25,60-61          
  ...allIdUtils.ts |   98.23 |     92.1 |     100 |   98.23 | 36,45             
  ...okTriggers.ts |   99.43 |    91.58 |     100 |   99.43 | 175,186           
  ...terruption.ts |     100 |       92 |     100 |     100 | 86,104            
  turn.ts          |   97.22 |    88.88 |     100 |   97.22 | ...96,509-510,556 
 ...ntentGenerator |   95.12 |    82.79 |   94.11 |   95.12 |                   
  ...tGenerator.ts |   96.69 |    84.48 |    93.1 |   96.69 | ...1004,1032-1034 
  converter.ts     |   94.51 |    80.72 |     100 |   94.51 | ...06-607,617,823 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   91.53 |    71.64 |   93.33 |   91.53 |                   
  ...tGenerator.ts |      90 |    70.96 |   92.85 |      90 | ...80-286,304-305 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |   94.61 |    84.69 |    92.1 |   94.61 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   94.51 |    83.39 |   91.66 |   94.51 | ...1113-1114,1142 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   88.63 |    85.05 |   93.97 |   88.63 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |    87.7 |    82.36 |   96.15 |    87.7 | ...1508,1677-1692 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   58.33 |    71.42 |      50 |   58.33 | ...70,73-77,85-89 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   95.51 |     88.6 |     100 |   95.51 | ...07-708,716,784 
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |    90.2 |    87.65 |     100 |    90.2 | ...39-343,373-374 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |    97.1 |    90.49 |   96.07 |    97.1 |                   
  dashscope.ts     |   97.78 |     92.3 |   94.44 |   97.78 | ...13-314,456-457 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |    97.5 |    96.55 |   88.88 |    97.5 | 122-123,193       
  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 |                   
 src/extension     |   77.79 |    79.89 |   84.61 |   77.79 |                   
  ...-converter.ts |   78.29 |    70.87 |     100 |   78.29 | ...1108,1153-1154 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |    73.8 |       75 |     100 |    73.8 | 44-54             
  ...ionManager.ts |   60.68 |    71.42 |   55.17 |   60.68 | ...1613,1638-1639 
  ...references.ts |     100 |    89.58 |     100 |     100 | ...05,129,197,200 
  ...onSettings.ts |   92.65 |    91.89 |     100 |   92.65 | ...28-232,312-313 
  ...-converter.ts |    75.9 |    83.33 |   85.71 |    75.9 | ...98,202,214-248 
  github.ts        |   84.71 |     85.4 |     100 |   84.71 | ...61-662,670-671 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |    95.83 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   87.11 |    84.28 |     100 |   87.11 | ...44,348-354,429 
  npm.ts           |   74.67 |    71.64 |     100 |   74.67 | ...19-421,428-432 
  override.ts      |   94.11 |    88.88 |     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 |   93.96 |    83.14 |     100 |   93.96 | ...35-341,362-363 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.75 |    83.33 |     100 |   88.75 | ...28-231,234-237 
 src/followup      |   76.02 |    74.12 |   90.62 |   76.02 |                   
  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   |   63.01 |    40.29 |   71.42 |   63.01 | ...73-574,577-582 
  ...onToolGate.ts |     100 |    96.55 |     100 |     100 | 95                
  ...nGenerator.ts |   67.96 |    77.58 |      80 |   67.96 | ...67-218,297-299 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   89.57 |    83.57 |   94.44 |   89.57 |                   
  ...eGoalStore.ts |    85.1 |    95.45 |   84.61 |    85.1 | ...63-166,174-182 
  goalHook.ts      |   97.26 |    91.66 |     100 |   97.26 | 100-105           
  goalJudge.ts     |   84.33 |    74.28 |     100 |   84.33 | ...57-358,366-368 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   87.01 |    85.68 |    88.1 |   87.01 |                   
  ...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.35 |    90.69 |     100 |   96.35 | ...00-301,382,384 
  ...entHandler.ts |   95.34 |    85.05 |   94.11 |   95.34 | ...74,931-932,942 
  hookPlanner.ts   |   86.29 |    83.33 |   85.71 |   86.29 | ...15-219,226-237 
  hookRegistry.ts  |   91.48 |    84.61 |     100 |   91.48 | ...97,416,420,424 
  hookRunner.ts    |   62.42 |    72.04 |   66.66 |   62.42 | ...64-765,774-775 
  hookSystem.ts    |   87.05 |      100 |   68.88 |   87.05 | ...21-722,728-729 
  ...HookRunner.ts |   75.51 |     61.9 |      80 |   75.51 | ...05-406,424-425 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   96.37 |     90.9 |      90 |   96.37 | 342-350,424-425   
  ...SkillHooks.ts |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   96.66 |    91.66 |     100 |   96.66 | ...90,209-210,223 
  ssrfGuard.ts     |   77.22 |    86.74 |     100 |   77.22 | ...57,261-267,273 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   92.83 |       94 |    87.5 |   92.83 | ...87-488,573-577 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.51 |     84.8 |   78.68 |   76.51 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   68.16 |    84.24 |    67.5 |   68.16 | ...1028,1057-1065 
  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           |   43.47 |     58.9 |   52.48 |   43.47 |                   
  ...nfigLoader.ts |   78.28 |     64.7 |      95 |   78.28 | ...35-437,441-447 
  ...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 |   25.31 |    62.06 |   41.66 |   25.31 | ...85-704,710-740 
  ...eLspClient.ts |   32.77 |       80 |   17.64 |   32.77 | ...84-288,294-295 
  ...LspService.ts |   51.85 |    65.98 |   68.57 |   51.85 | ...1339,1399-1409 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |   82.39 |    77.73 |   78.33 |   82.39 |                   
  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.52 |    58.06 |     100 |   79.52 | ...33-940,947-949 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.24 |    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.27 |   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        |   77.81 |    79.78 |   76.54 |   77.81 |                   
  const.ts         |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  dream.ts         |      66 |    73.33 |      50 |      66 | 51,108-149        
  ...entPlanner.ts |   57.84 |    72.72 |   33.33 |   57.84 | ...35,140-147,152 
  entries.ts       |   63.77 |    79.16 |      50 |   63.77 | ...72-180,183-189 
  extract.ts       |   91.36 |    72.41 |     100 |   91.36 | ...99,118-121,189 
  ...entPlanner.ts |   67.59 |     73.8 |      50 |   67.59 | ...32,241-244,416 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   46.21 |    61.53 |   44.44 |   46.21 | ...06,213,216-348 
  indexer.ts       |   94.14 |    83.67 |     100 |   94.14 | ...32-233,334,337 
  manager.ts       |   78.57 |    82.29 |   77.77 |   78.57 | ...1474,1487-1489 
  memoryAge.ts     |   90.47 |       80 |     100 |   90.47 | 50-51             
  paths.ts         |   80.48 |    92.53 |     100 |   80.48 | ...45-346,354-355 
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   95.49 |    79.41 |     100 |   95.49 | ...66,169,364-365 
  recall.ts        |   82.06 |       75 |    90.9 |   82.06 | ...59-364,395-406 
  ...ceSelector.ts |    93.1 |    81.81 |     100 |    93.1 | ...25,127-128,136 
  scan.ts          |   93.12 |    77.41 |     100 |   93.12 | ...08-109,154,157 
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   58.33 |    67.34 |   56.25 |   58.33 | ...61-282,358-403 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   93.33 |    81.25 |     100 |   93.33 | ...,94-95,119-120 
  ...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 |   79.38 |    78.33 |   81.81 |   79.38 | ...58-272,286-291 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   91.19 |    88.08 |   89.74 |   91.19 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   90.24 |    91.42 |     100 |   90.24 | 142,148,151-160   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |       44 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.66 |    92.75 |     100 |   98.66 | 163,325,331       
  modelRegistry.ts |     100 |    98.91 |     100 |     100 | 177               
  modelsConfig.ts  |   88.06 |    86.54 |   85.36 |   88.06 | ...1348,1377-1378 
  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   |   82.91 |     91.3 |   69.56 |   82.91 |                   
  autoMode.ts      |   97.74 |       94 |     100 |   97.74 | ...29,557-564,673 
  ...transcript.ts |      98 |       84 |     100 |      98 | 200-201           
  classifier.ts    |      94 |    94.44 |     100 |      94 | 158-165,385-389   
  ...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 |   84.91 |     89.1 |      80 |   84.91 | ...1026,1132-1136 
  rule-parser.ts   |   97.42 |    93.82 |     100 |   97.42 | ...-890,1039-1041 
  ...-semantics.ts |   70.36 |    91.07 |   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 | 219               
 src/plan-gate     |   76.16 |    91.42 |      80 |   76.16 |                   
  ...viewAgents.ts |   52.28 |    88.46 |   66.66 |   52.28 | ...24-220,242-243 
  ...provalGate.ts |   92.47 |    92.85 |   85.71 |   92.47 | ...86-187,268-274 
  state.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 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     |   79.06 |    74.45 |   68.75 |   79.06 |                   
  all-providers.ts |   69.23 |      100 |       0 |   69.23 | 71-72,76-82,86-92 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   92.78 |    84.12 |     100 |   92.78 | ...39-240,313-314 
  ...der-config.ts |    72.6 |    69.49 |   73.91 |    72.6 | ...94-495,502-511 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.56 |    89.28 |   55.55 |   97.56 |                   
  ...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 |                   
  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.3 |     78.8 |   95.89 |    85.3 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   82.55 |    73.71 |   90.62 |   82.55 | ...1183-1199,1229 
  ...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      |   88.27 |    85.08 |   94.79 |   88.27 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   97.35 |    85.34 |     100 |   97.35 | ...94,117,417-418 
  ...ionService.ts |   96.56 |    95.49 |     100 |   96.56 | ...56,672,801-809 
  ...ingService.ts |   87.18 |    83.14 |   83.72 |   87.18 | ...1456,1471-1472 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |   99.52 |    96.42 |     100 |   99.52 | 98                
  cronScheduler.ts |   95.34 |    91.21 |     100 |   95.34 | ...1011,1320-1321 
  cronTasksFile.ts |   93.78 |     87.5 |     100 |   93.78 | ...72-173,182-183 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   82.07 |       92 |      80 |   82.07 | ...43,149-150,155 
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |     100 |      100 |     100 |     100 |                   
  ...temService.ts |   91.27 |    82.69 |    90.9 |   91.27 | ...94,196,294-301 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |   69.81 |    69.35 |   93.33 |   69.81 | ...2064,2092-2093 
  ...ionService.ts |   98.09 |    97.07 |     100 |   98.09 | ...90-591,638-639 
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   96.06 |    91.48 |   96.96 |   96.06 | ...49,850,864-866 
  ...orRegistry.ts |   97.27 |    91.22 |     100 |   97.27 | ...50-451,606-607 
  ...ttachments.ts |   97.24 |    90.34 |     100 |   97.24 | ...08,646,661-662 
  sessionRecap.ts  |     9.7 |      100 |       0 |     9.7 | 42-172            
  ...ionService.ts |   86.32 |    78.72 |   94.87 |   86.32 | ...1592,1662-1682 
  sessionTitle.ts  |   93.87 |    71.15 |     100 |   93.87 | ...32-235,266-267 
  ...ionService.ts |   84.03 |    77.77 |   96.96 |   84.03 | ...2381,2387-2392 
  ...pInhibitor.ts |   97.34 |    92.68 |     100 |   97.34 | ...28,167,361-362 
  ...Estimation.ts |     100 |    86.66 |     100 |     100 | 96-97             
  ...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 
  ...oryService.ts |   89.03 |    65.38 |     100 |   89.03 | ...23-325,330-331 
  ...reeCleanup.ts |   14.56 |      100 |   33.33 |   14.56 | 58-185            
  ...ionService.ts |   87.98 |    86.84 |     100 |   87.98 | ...38-439,455-456 
 ...icrocompaction |   99.35 |    95.69 |     100 |   99.35 |                   
  microcompact.ts  |   99.35 |    95.69 |     100 |   99.35 | 224-225,618       
 ...s/visionBridge |      97 |    94.44 |   94.11 |      97 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ge-service.ts |   96.05 |    91.07 |      90 |   96.05 | ...14,221,307,404 
 src/skills        |    88.2 |    86.98 |   90.16 |    88.2 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |     93.1 |     100 |     100 | 93,112            
  skill-load.ts    |   94.84 |     87.3 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   83.44 |    82.16 |   82.35 |   83.44 | ...1202,1209-1213 
  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           
 ...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     |      86 |     85.9 |   94.33 |      86 |                   
  ...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 |   81.51 |    80.66 |   91.17 |   81.51 | ...1450,1527-1528 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |   78.94 |    87.05 |    80.8 |   78.94 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   98.96 |    79.48 |     100 |   98.96 | 169,183           
  ...on-tracing.ts |   74.55 |    73.21 |   70.58 |   74.55 | ...95,336-338,354 
  ...attributes.ts |   97.47 |    93.15 |     100 |   97.47 | 39-44             
  ...-exporters.ts |   65.78 |    83.33 |   55.55 |   65.78 | ...04-105,108-109 
  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       |   52.49 |    66.66 |   59.18 |   52.49 | ...1308,1325-1345 
  metrics.ts       |   76.07 |    78.57 |   78.94 |   76.07 | ...1021,1024-1035 
  ...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       
  sdk.ts           |   86.75 |     88.4 |   66.66 |   86.75 | ...17-621,659-681 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   90.06 |    88.25 |   96.55 |   90.06 | ...1541,1572-1575 
  ...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         |   78.75 |    85.27 |   83.54 |   78.75 | ...1295,1299-1306 
  uiTelemetry.ts   |   93.07 |    92.85 |   83.33 |   93.07 | ...62,290,410-411 
 ...ry/qwen-logger |   69.86 |    82.69 |   65.51 |   69.86 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   69.86 |    82.52 |   64.91 |   69.86 | ...1078,1116-1117 
 src/test-utils    |   93.44 |    96.15 |   77.77 |   93.44 |                   
  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     |   91.71 |    97.36 |   74.19 |   91.71 | ...54,218-219,232 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   83.47 |    82.78 |   87.33 |   83.47 |                   
  ...erQuestion.ts |   90.74 |    82.43 |    92.3 |   90.74 | ...23-424,431-432 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  cron-create.ts   |   88.69 |    94.73 |   66.66 |   88.69 | ...,45-46,183-191 
  cron-delete.ts   |   97.56 |      100 |   83.33 |   97.56 | 31-32             
  cron-list.ts     |   98.16 |    93.75 |    87.5 |   98.16 | 50-51             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |    82.3 |    83.19 |   81.25 |    82.3 | ...46-747,866-916 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |   81.08 |    66.66 |   85.71 |   81.08 | ...,74-79,112-126 
  exit-worktree.ts |   83.29 |    83.65 |   94.44 |   83.29 | ...14-515,537-538 
  exitPlanMode.ts  |   82.53 |    77.19 |     100 |   82.53 | ...91-394,426-429 
  glob.ts          |   95.92 |    87.69 |    92.3 |   95.92 | ...16,172,303,306 
  grep.ts          |   83.09 |    86.66 |   80.95 |   83.09 | ...60-661,711-712 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  loop-wakeup.ts   |   99.24 |    92.85 |     100 |   99.24 | 44                
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.77 |    60.09 |   90.32 |   72.77 | ...1211,1213-1214 
  ...nt-manager.ts |   81.09 |    79.55 |    85.1 |   81.09 | ...3135,3137-3138 
  mcp-client.ts    |   75.11 |    82.64 |      85 |   75.11 | ...1900,1904-1907 
  ...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-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   91.43 |     89.9 |   96.66 |   91.43 | ...72-673,723-724 
  ...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 | 102,109           
  monitor.ts       |   91.65 |    84.05 |   88.46 |   91.65 | ...87,600,796-801 
  notebook-edit.ts |    85.6 |    77.39 |   81.25 |    85.6 | ...89-905,951-952 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   82.57 |    89.74 |     100 |   82.57 | 174-185,234-247   
  read-file.ts     |   94.79 |    90.32 |   81.81 |   94.79 | ...04,307,390-391 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  ripGrep.ts       |   95.87 |     88.4 |   94.73 |   95.87 | ...56-657,663-664 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   81.39 |    88.88 |    62.5 |   81.39 | ...22-228,311-319 
  ...n-mcp-view.ts |   93.57 |     92.3 |      90 |   93.57 | 122-130           
  shell.ts         |   77.35 |    81.92 |   91.48 |   77.35 | ...4809,4872-4873 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |    90.2 |     93.1 |   88.88 |    90.2 | ...64,468,497-519 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |   93.85 |     92.3 |   81.81 |   93.85 | 41-45,59-60,91    
  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   |   80.67 |       78 |    92.3 |   80.67 | ...75-383,415-426 
  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 
  todoWrite.ts     |   89.27 |    82.05 |   92.85 |   89.27 | ...50-555,577-578 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   76.09 |     76.1 |   81.39 |   76.09 | ...62-863,871-872 
  tool-search.ts   |   93.99 |     88.8 |   93.33 |   93.99 | ...58-263,370-379 
  tools.ts         |   92.36 |    90.74 |   90.47 |   92.36 | ...99-500,516-522 
  web-fetch.ts     |   90.12 |    85.71 |   92.85 |   90.12 | ...11-312,326-327 
  write-file.ts    |   84.04 |     82.1 |   84.61 |   84.04 | ...92-695,732-767 
 src/tools/agent   |   81.51 |    83.96 |      80 |   81.51 |                   
  agent.ts         |   81.48 |    84.09 |   79.51 |   81.48 | ...3168,3195-3258 
  fork-subagent.ts |   82.35 |    77.77 |   85.71 |   82.35 | 83-101,133-134    
 ...tools/artifact |   95.58 |    91.01 |   88.37 |   95.58 |                   
  artifact-tool.ts |   90.23 |    81.39 |   69.23 |   90.23 | ...81-282,290-293 
  ...-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         |   90.38 |    88.76 |   94.96 |   90.38 |                   
  LruCache.ts      |       0 |        0 |       0 |       0 | 1-41              
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |   94.76 |    93.26 |     100 |   94.76 | ...30-531,634-638 
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  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 |                   
  ...ncyLimiter.ts |   94.64 |    95.23 |     100 |   94.64 | 64-66             
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.11 |    89.47 |     100 |   91.11 | ...46-147,154-155 
  cronDisplay.ts   |     100 |    91.66 |     100 |     100 | 15,43,57          
  cronParser.ts    |   95.34 |     93.1 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   96.42 |    94.11 |   88.23 |   96.42 | 185-189           
  editHelper.ts    |   93.63 |    83.52 |     100 |   93.63 | ...28-429,463-464 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |   96.78 |    89.13 |      95 |   96.78 | ...51-252,257,403 
  errorParsing.ts  |    97.7 |    97.05 |     100 |    97.7 | 72-73             
  ...rReporting.ts |   88.46 |       90 |     100 |   88.46 | 69-74             
  errors.ts        |   73.14 |    79.48 |   55.55 |   73.14 | ...59-275,279-285 
  fetch.ts         |   72.45 |    81.81 |   71.42 |   72.45 | ...31,142-143,162 
  fileUtils.ts     |   91.66 |    86.06 |   95.23 |   91.66 | ...1232,1236-1242 
  forkedAgent.ts   |   80.54 |    78.12 |   83.33 |   80.54 | ...42-548,553-559 
  formatters.ts    |   81.81 |       75 |     100 |   81.81 | 15-16             
  ...eUtilities.ts |   89.21 |    86.66 |     100 |   89.21 | 16-17,49-55,65-66 
  ...rStructure.ts |   94.36 |    94.28 |     100 |   94.36 | ...17-120,330-335 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  gitDiff.ts       |   92.36 |    80.09 |     100 |   92.36 | ...55-856,928-929 
  gitDirect.ts     |   98.46 |    90.17 |     100 |   98.46 | 148,268,352       
  ...noreParser.ts |   93.84 |     91.3 |     100 |   93.84 | ...03-104,185-186 
  gitUtils.ts      |   72.91 |    90.32 |   83.33 |   72.91 | ...,77-78,102-153 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   93.13 |     92.3 |     100 |   93.13 | ...16-317,356-359 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |    92.4 |    89.01 |     100 |    92.4 | ...28,331,522-525 
  ...tProcessor.ts |   93.77 |    89.02 |     100 |   93.77 | ...13-319,406-407 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.18 |     100 |   98.96 | 153               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  notebook.ts      |   94.57 |    89.74 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   90.85 |    87.87 |     100 |   90.85 | ...97-199,222-227 
  partUtils.ts     |     100 |    98.63 |     100 |     100 | 206               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |    93.3 |    92.22 |     100 |    93.3 | ...92-393,395-397 
  pdf.ts           |   93.68 |    87.05 |     100 |   93.68 | ...96-297,321-325 
  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 |   58.57 |       76 |     100 |   58.57 | ...4,88-89,95-100 
  ...noreParser.ts |   92.45 |     90.9 |     100 |   92.45 | ...72-173,186-187 
  rateLimit.ts     |   93.75 |    88.34 |     100 |   93.75 | ...13,218-219,262 
  readManyFiles.ts |   95.13 |    85.18 |     100 |   95.13 | ...24-226,252-253 
  retry.ts         |   95.93 |    91.83 |     100 |   95.93 | ...33,524-525,543 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.52 |    96.84 |     100 |   97.52 | ...05,255-256,282 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   50.94 |    85.71 |      70 |   50.94 | ...54-255,268-346 
  ...sDiscovery.ts |   97.42 |    92.85 |     100 |   97.42 | ...04,182-183,202 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |      83 |    86.77 |   95.45 |      83 | ...68,593,622-631 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |    97.5 |    89.74 |     100 |    97.5 | 162-163           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |   74.07 |    83.33 |     100 |   74.07 | 40-46             
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   90.78 |    88.23 |     100 |   90.78 | ...41-42,93,95-96 
  ...aValidator.ts |   92.09 |    83.56 |   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.72 |    92.12 |     100 |   91.72 | ...36-539,615-616 
  ...nIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...orageUtils.ts |   95.98 |     83.8 |     100 |   95.98 | ...70,386,466,485 
  shell-utils.ts   |   86.24 |    89.61 |     100 |   86.24 | ...2003,2010-2014 
  ...lAstParser.ts |   95.57 |    85.88 |     100 |   95.57 | ...1066-1068,1078 
  ...ContextEnv.ts |     100 |      100 |     100 |     100 |                   
  ...nlyChecker.ts |   95.08 |    91.66 |     100 |   95.08 | ...15-316,324-325 
  sideQuery.ts     |   86.82 |     86.2 |     100 |   86.82 | ...81-187,189-195 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   81.48 |    77.77 |     100 |   81.48 | 54-59             
  ...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 
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    92.85 |     100 |     100 | 71                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  tool-utils.ts    |    93.6 |     91.3 |     100 |    93.6 | ...58-159,162-163 
  ...ultCleanup.ts |   15.74 |    33.33 |      25 |   15.74 | 33-134            
  ...Compaction.ts |   95.68 |    95.32 |     100 |   95.68 | ...29-334,533-534 
  truncation.ts    |   75.55 |    86.02 |   71.42 |   75.55 | ...44-449,453-477 
  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.5 |     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 |   68.81 |    73.82 |   83.87 |   68.81 |                   
  ...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.

@yiliang114
yiliang114 force-pushed the codex/subagent-result-tags branch from 9a17afd to a0adf15 Compare June 29, 2026 16:48
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Manual tmux verification result:

I ran a local tmux-driven probe against the dev CLI with a fake OpenAI-compatible server. The subagent final answer deliberately included <analysis>...</analysis> and <summary>...</summary> across 3 rounds.

Observed result:

  • 3 rounds completed
  • 18 fake OpenAI requests recorded
  • 3 parent follow-up requests inspected
  • each parent follow-up included the safe summary marker for that round
  • no parent follow-up contained <analysis>, </analysis>, <summary>, </summary>, or the raw analysis marker
  • rawLeakCount=0
  • missingSafeSummaryCount=0
  • pass=true

I kept this as manual PR evidence instead of committing the local tmux probe script; the committed regression coverage is the focused core test coverage for the agent tool path and background resume path.

@yiliang114 yiliang114 changed the title [codex] Sanitize subagent result tags Sanitize subagent result tags Jun 29, 2026
@yiliang114
yiliang114 force-pushed the codex/subagent-result-tags branch from a0adf15 to 501ae9b Compare June 29, 2026 16:55
@yiliang114
yiliang114 marked this pull request as ready for review June 29, 2026 16:59
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Thanks for the PR, @yiliang114!

Template looks good — all required sections present, bilingual, linked to #6023. ✓

On direction: this is a straightforward bug fix. #6023 documents real evidence of <analysis> and <summary> tags leaking from subagent final text into the parent context and daemon UI. The fix correctly scopes to the agent-result boundary — strip internal tags before the parent sees them. No CHANGELOG reference needed; this is an internal quality fix, not a feature.

On approach: the scope feels right — one pure function (toModelVisibleSubagentResult), wired into all four call sites (foreground, background, resumed, worktree), with focused regression tests. No unrelated changes, no drive-by refactors. The regex approach is pragmatic for the problem.

Moving on to code review. 🔍

中文说明

感谢 PR,@yiliang114

模板完整——所有必需章节齐全,双语,关联了 #6023。✓

方向:这是一个清晰的 bug 修复。#6023 记录了 <analysis><summary> 标签从子 agent 最终文本泄漏到父 context 和 daemon UI 的真实证据。修复正确地将范围限定在 agent 结果边界——在父 agent 看到之前剥离内部标签。无需 CHANGELOG 参考;这是内部质量修复,不是新功能。

方案:范围合理——一个纯函数(toModelVisibleSubagentResult),接入所有四个调用点(前台、后台、恢复、worktree),配有聚焦的回归测试。没有无关改动,没有顺手重构。正则方案对这个问题来说务实合理。

进入代码审查 🔍

Qwen Code · qwen3.7-max

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Code Review

Independent proposal (before reading diff): I'd extract a single pure function that strips <analysis> blocks and conditionally unwraps <summary> envelopes, wire it into all subagent-to-parent result paths, and add regression tests. That's exactly what this PR does — no simpler path missed.

The implementation is clean:

  • toModelVisibleSubagentResult is a well-scoped 18-line function with clear intent via regex
  • The <analysis> strip handles unclosed tags (|$ fallback) and stray closing tags (second pass)
  • The <summary> unwrap is correctly gated to whole-result matches via ^\s*...\s*$ anchors
  • All four call sites are covered: foreground agent, background agent, resumed background agent, worktree-isolated agent
  • No existing shared utility covers this — the function is appropriately placed in agents/subagent-result.ts

No correctness bugs, no security issues, no AGENTS.md violations. The diff is focused — every line serves the stated goal.

Test Results

Unit tests (worktree, PR branch):

agent.test.ts:           112 passed (112)
background-agent-resume:  29 passed (29)

Both new regression tests (strips internal analysis and summary tags from subagent result, returns only model-visible subagent output when resumed background agents complete) pass.

Direct function tests:

PASS analysis+summary
PASS analysis only
PASS clean text
PASS partial summary
4 passed, 0 failed

Before (installed build)

$ echo '=== BEFORE: Installed qwen ===' && qwen --version
=== BEFORE: Installed qwen ===
0.19.3

Installed v0.19.3 does not include subagent result sanitization. The bug from #6023 (raw <analysis>/<summary> tags in parent context) is reproducible in long sessions when the model produces these tags in subagent output.

After (this PR)

$ npm run dev -- --version
dev

Dev build starts cleanly. Sanitization function verified with 4 targeted inputs:

$ node --input-type=module -e "..."
=== Sanitization function test (PR code) ===
PASS analysis+summary
PASS analysis only
PASS clean text
PASS partial summary
4 passed, 0 failed

Note on end-to-end tmux testing: The bug requires a subagent model to produce <analysis> tags in its output, which is non-deterministic and can't be triggered with a simple prompt. The committed unit tests and direct function tests cover the sanitization logic comprehensively. The author's manual tmux probe (posted in PR comments) confirmed zero tag leakage across 3 rounds with a fake OpenAI server.

中文说明

代码审查

独立方案(看 diff 之前):我会提取一个纯函数来剥离 <analysis> 块并有条件地展开 <summary> 信封,然后接入所有子 agent 到父 agent 的结果路径,并添加回归测试。这正是 PR 所做的——没有发现更简单的路径。

实现干净:

  • toModelVisibleSubagentResult 是一个范围明确的 18 行函数,正则意图清晰
  • <analysis> 剥离处理了未关闭标签(|$ 回退)和残留关闭标签(第二轮)
  • <summary> 展开通过 ^\s*...\s*$ 锚点正确限定为全结果匹配
  • 四个调用点全部覆盖:前台 agent、后台 agent、恢复后台 agent、worktree 隔离 agent
  • 没有已有的共享工具覆盖此功能——函数合理地放在 agents/subagent-result.ts

无正确性 bug、无安全问题、无 AGENTS.md 违规。diff 聚焦——每一行都服务于既定目标。

测试结果

单元测试(worktree,PR 分支):

agent.test.ts:           112 passed (112)
background-agent-resume:  29 passed (29)

两个新回归测试均通过。

直接函数测试:

PASS analysis+summary
PASS analysis only
PASS clean text
PASS partial summary
4 passed, 0 failed

Before(已安装版本)

$ qwen --version
0.19.3

已安装 v0.19.3 不包含子 agent 结果清理。#6023 中的 bug(原始 <analysis>/<summary> 标签进入父 context)在长会话中可复现。

After(此 PR)

$ npm run dev -- --version
dev

Dev 构建正常启动。清理函数经 4 个针对性输入验证通过。

关于端到端 tmux 测试说明: 该 bug 需要子 agent 模型在输出中产生 <analysis> 标签,这是非确定性的,无法用简单 prompt 触发。已提交的单元测试和直接函数测试全面覆盖了清理逻辑。作者在 PR 评论中发布的手动 tmux 探测确认了 3 轮零标签泄漏。

Qwen Code · qwen3.7-max

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

This is a clean, focused bug fix that does exactly what it says. The motivation is well-documented in #6023, the implementation is a minimal pure function applied at the right boundary, and the test coverage is thorough — unit tests for both the normal agent path and the resume path, plus the author's manual tmux probe showing zero tag leakage.

Going back to my independent proposal: I would have done the same thing. One function, regex-based stripping, conditional summary unwrap, wired into all call sites. The PR's approach matches — no simpler path was missed.

The risk tradeoff (literal <analysis> in subagent output gets stripped even if intentional) is documented and acceptable. The code is easy to maintain and the tests make the intent clear.

No concerns. Approving.

中文说明

这是一个干净、聚焦的 bug 修复,完全如其所述。动机在 #6023 中有充分记录,实现是一个最小化的纯函数在正确的边界应用,测试覆盖全面——普通 agent 路径和恢复路径的单元测试,加上作者手动 tmux 探测显示零标签泄漏。

回到我的独立方案:我会做同样的事情。一个函数,基于正则的剥离,条件性 summary 展开,接入所有调用点。PR 的方案完全匹配——没有遗漏更简单的路径。

风险取舍(子 agent 输出中的字面量 <analysis> 即使是有意的也会被剥离)已记录且可接受。代码易于维护,测试使意图清晰。

无顾虑。批准。

Qwen Code · qwen3.7-max

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, looks ready to ship. ✅

@qwen-code-ci-bot qwen-code-ci-bot added category/core Core engine and logic roadmap/subagents-tools Roadmap: Subagents and tool system type/bug Something isn't working as expected labels Jun 29, 2026

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

Two Critical issues block merge:

  1. Unclosed <analysis> tag = silent data loss. The $ fallback in the analysis regex causes an unclosed <analysis> (common when subagent output is truncated by token limits) to consume all subsequent content — including <summary> blocks. The function returns "". Fix: drop |$ from the alternation.

  2. ReDoS in summary regex. The summary regex has quadratic backtracking on whitespace-heavy input without a closing </summary>. Empirically: 5,000 chars = 16s. Fix: replace with O(n) string-based tag detection.

Additional suggestions and missed call sites (workflow-orchestrator.ts:469 and :836, forkedAgent.ts:535) are detailed in the inline comments below.

— qwen3.7-max via Qwen Code /review

Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/subagent-result.ts

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

Automated code review — critical findings in this PR were already documented by the existing review. No new findings to add at this commit.


Generated by Claude Code

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

No new blocking issues found at this head — the two existing unresolved threads on subagent-result.ts (unclosed-<analysis>-consumes-all and summary-regex ReDoS) already cover the highest-severity findings in this diff.

Additional observations from this pass (not duplicating existing threads):

  • The new test mock in background-agent-resume.test.ts (the sanitization regression test) returns { totalTokens: 0, totalDurationMs: 0 } from getExecutionSummary, omitting outputTokens, inputTokens, and other AgentStatsSummary fields. getCompletionStats accesses summary.outputTokens, so the mock produces undefined there. The test still passes because it only asserts on registry.get(agentId)?.result, not on the stored stats. This is a minor test-mock incompleteness rather than a production bug, but a strict-mode typecheck on the test file would flag it.

  • forkedAgent.ts:535 and workflow-orchestrator.ts:469,836 are not touched by this PR and still pass raw getFinalText() output toward callers. The existing thread at line 8 already flags this; confirming the observation is accurate.

— claude-sonnet-4-6 via Qwen Code /review


Generated by Claude Code

Comment thread packages/core/src/agents/subagent-result.ts
Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/subagent-result.ts Outdated
@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

Comment thread packages/core/src/agents/subagent-result.test.ts
@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Thanks for the PR, @yiliang114!

Template looks good — all required sections present, bilingual, linked to #6023. ✓

On direction: this is a clean bug fix. #6023 documents real evidence — session JSONL shows <analysis> and <summary> tags from subagent final text entering the parent context and corrupting daemon UI rendering. The fix correctly scopes to the agent-result boundary. This is core subagent reliability work, aligned with the roadmap.

On approach: minimal and focused — one pure function (toModelVisibleSubagentResult) applied at all 7 getFinalText() return-to-parent call sites. Non-GOAL terminate modes correctly preserve raw diagnostics. No scope creep, no drive-by refactors. The scope is exactly what the bug requires.

Moving on to code review. 🔍

中文说明

感谢 PR,@yiliang114

模板完整——所有章节齐全,双语,关联了 #6023。✓

方向:清晰的 bug 修复。#6023 记录了真实证据——会话 JSONL 显示子 agent 最终文本中的 <analysis><summary> 标签进入父 context 并破坏 daemon UI 渲染。修复正确地限定在 agent 结果边界。这属于核心子 agent 可靠性工作,与路线图一致。

方案:最小化且聚焦——一个纯函数 (toModelVisibleSubagentResult) 应用于所有 7 个 getFinalText() 返回父级调用点。非 GOAL 终止模式正确保留原始诊断信息。无范围蔓延,无顺手重构。范围恰好是 bug 所需的。

进入代码审查 🔍

Qwen Code · qwen3.7-max

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code review: I independently proposed what I'd do to fix this bug — one pure sanitizer function at the subagent→parent boundary that strips <analysis> blocks (with nesting support) and strips <summary> tags, gated on successful termination. The PR matches this exactly.

The implementation is clean:

  • toModelVisibleSubagentResult uses a depth-tracking scanner (findAnalysisCloseEnd) for nested <analysis> blocks — no ReDoS risk, unlike naive regex approaches
  • stripAnalysisOutsideSummary correctly preserves <analysis> inside <summary> (e.g., when the model mentions fixing an <analysis> tag)
  • Terminate-mode guard preserves raw diagnostics for ERROR/CANCELLED/MAX_TURNS
  • Empty-result fallback ('(subagent produced no model-visible output)') prevents confusing empty strings
  • All 7 call sites covered: foreground agent (x2), background agent, background-agent-resume (x2), workflow-orchestrator (x2), forkedAgent
  • No correctness bugs, security issues, or AGENTS.md violations found

Test results (289 total, all passing):

Test file Tests Result
subagent-result.test.ts 18 ✅ pass
agent.test.ts 116 ✅ pass
background-agent-resume.test.ts 30 ✅ pass
workflow-orchestrator.test.ts 117 ✅ pass
forkedAgent.agent.test.ts 8 ✅ pass

Core package typecheck (tsc --noEmit): clean ✓

Smoke test (tmux, dev build from PR branch):

$ npm run dev -- -p 'What is 2+2? Answer with just the number.' --approval-mode yolo

> @qwen-code/qwen-code@0.19.3 dev
> node scripts/dev.js -p "What is 2+2? Answer with just the number." --approval-mode yolo

Warning: QWEN_HOME points to ".../qwen-home" but no settings.json was found there.
Warning: running headless with --yolo / approval-mode=yolo and no sandbox.

4

CLI runs cleanly, no regressions. The bug fix targets subagent return-text processing which requires a subagent model to produce <analysis> tags — non-deterministic and can't be triggered in a simple smoke test. The 289 unit tests with mocked getFinalText() are the appropriate verification and cover the sanitization comprehensively.

No blocking issues. ✅

中文说明

代码审查: 我独立提出了修复此 bug 的方案——在子 agent→父 agent 边界添加一个纯清理函数,剥离 <analysis> 块(支持嵌套)并剥离 <summary> 标签,仅在成功终止时生效。PR 完全匹配。

实现干净:

  • toModelVisibleSubagentResult 使用深度跟踪扫描器处理嵌套 <analysis> 块——无 ReDoS 风险
  • stripAnalysisOutsideSummary 正确保留 <summary> 内部的 <analysis>(例如模型提到修复某个 <analysis> 标签时)
  • 终止模式守卫保留 ERROR/CANCELLED/MAX_TURNS 的原始诊断信息
  • 空结果回退防止出现令人困惑的空字符串
  • 全部 7 个调用点已覆盖
  • 未发现正确性 bug、安全问题或 AGENTS.md 违规

测试结果(共 289 个,全部通过): 见上表

Core 包类型检查:clean ✓

冒烟测试(tmux,PR 分支 dev 构建): CLI 正常运行,回答 "4",无回归。bug 修复针对子 agent 返回文本处理,需要子 agent 模型产生 <analysis> 标签——非确定性,无法在简单冒烟测试中触发。289 个单元测试使用 mock getFinalText() 全面覆盖了清理逻辑。

无阻塞问题。✅

Qwen Code · qwen3.7-max

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Clean, focused bug fix. The motivation is well-documented in #6023 with real session JSONL evidence, the implementation is a minimal pure function applied at exactly the right boundary, and all 289 tests pass with a clean typecheck.

Going back to my independent proposal: I'd do the same thing — one function with depth-tracking for nested analysis blocks, conditional on successful termination, wired into all return-to-parent call sites. The PR's approach matches. The implementation handles the tricky edge cases well: nested <analysis> blocks, <analysis> mentioned inside <summary> content, unclosed tags, and empty-after-strip results.

The risk tradeoff (literal <analysis> in subagent output gets stripped even if intentional) is documented and acceptable for this boundary. The code is straightforward and easy to maintain.

No concerns. Approving.

中文说明

干净、聚焦的 bug 修复。动机在 #6023 中有真实会话 JSONL 证据支持,实现是一个最小化的纯函数应用在正确的边界,全部 289 个测试通过且类型检查干净。

回到我的独立方案:我会做同样的事情——一个带深度跟踪的函数处理嵌套 analysis 块,仅在成功终止时生效,接入所有返回父级的调用点。PR 的方案完全匹配。实现很好地处理了棘手的边界情况:嵌套 <analysis> 块、<summary> 内容中提到的 <analysis>、未关闭标签、以及剥离后为空的结果。

风险取舍(子 agent 输出中的字面量 <analysis> 即使有意也会被剥离)已记录且对此边界来说可接受。代码直观且易于维护。

无顾虑。批准。

Qwen Code · qwen3.7-max

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, looks ready to ship. ✅

Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/runtime/workflow-orchestrator.ts Outdated
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/utils/forkedAgent.ts
chiga0
chiga0 previously approved these changes Jun 30, 2026

@chiga0 chiga0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Overview — Independent Review (Phase 1 blind → Phase 2 cross-validation)

Verdict: LGTM. Well-structured sanitization fix that evolved significantly across 8 commits in response to review feedback. The implementation moved from a fragile regex-based approach to a proper state machine parser. All 12 existing inline findings (5 Critical, 5 Suggestion) are stale against HEAD 54f5f7d9.

Round 0 — Design & Intent

The PR fixes a real bug (#6023): subagent final results leak <analysis> and <summary> internal tags into the parent context, appearing as implementation markers in the model and daemon UI. The fix applies a pure sanitization function at the subagent-to-parent boundary across all 5 call sites (standard agent, worktree agent, background resume, forked agent, workflow orchestrator). Raw transcripts are preserved for debugging — only the parent-facing result is sanitized.

Round 1 — Architecture

toModelVisibleSubagentResult is a well-scoped pure function in its own module (subagent-result.ts):

  1. Terminate-mode guard: Non-GOAL terminations (ERROR, TIMEOUT, CANCELLED) return raw text unchanged — preserves crash/timeout diagnostics
  2. stripAnalysisOutsideSummary: State machine parser that correctly handles nested tags, unclosed analysis blocks, and multiple summary blocks. Tracks summaryDepth to know when inside <summary>, strips <analysis> blocks outside summary, preserves everything inside summary
  3. stripVisibleTags: Regex cleanup that removes residual <analysis> blocks (including nested inside summary), strips <summary> tag markers, and collapses whitespace
  4. Trim: Final whitespace cleanup

The two-pass design is correct: the state machine handles the complex nesting semantics, the regex pass cleans up residual markers and whitespace.

Round 2 — Robustness

Traced the state machine through all critical edge cases:

  • Unclosed <analysis>: State machine finds <summary> in remaining text and consumes only up to <summary> start — does NOT consume all content (test: '<analysis>scratch\n<summary>visible</summary>' → 'visible')
  • Analysis inside summary: State machine preserves everything inside <summary> (including nested <analysis>). Second pass strips the nested analysis — correct (test: '<summary>visible <analysis>hidden</analysis></summary>' → 'visible')
  • Multiple analysis blocks: Each stripped independently (test: 'a<analysis>one</analysis>b<analysis>two</analysis>' → 'ab')
  • Multiple summary blocks: Each handled independently (test: '<summary>part1</summary> middle <summary>part2</summary>' → 'part1 middle part2')
  • Summary mentioning <analysis> as literal text: State machine skips analysis inside summary depth, second pass strips it — preserves the summary content (test verified in parametrized cases)
  • Stray </analysis> closing tag: Regex lazy match doesn't backtrack, passes through as literal text (test: 'literal </analysis> marker' → 'literal </analysis> marker')
  • All-analysis output (no summary): Returns empty string after sanitization, agent.ts handles with '(subagent produced no model-visible output)' fallback

No ReDoS risk: state machine is O(n), regex patterns use [^>]* (no .*), and [\s\S]*? is bounded by <\/analysis>.

Round 4 — Integration Points

Verified toModelVisibleSubagentResult applied at all 5 call sites:

  1. agent.ts:1645 — standard agent path
  2. agent.ts:2585 — worktree-isolated agent path
  3. agent.ts:3016 — worktree agent second site
  4. background-agent-resume.ts:939 — background resume path
  5. forkedAgent.ts:535 — forked agent path
  6. workflow-orchestrator.ts:470,837 — workflow dispatch (both fast and override paths)

Round 5 — Test Coverage

Comprehensive across unit + integration:

  • subagent-result.test.ts: 15 parametrized cases + non-GOAL preservation test
  • agent.test.ts: 3 new tests (strip tags, preserve diagnostics on ERROR, empty-result fallback)
  • background-agent-resume.test.ts: 1 new test (resume path sanitization)
  • forkedAgent.agent.test.ts: 1 new test (forked agent sanitization)
  • workflow-orchestrator.test.ts: 2 new tests (fast-path + override-path sanitization)

Cross-Validation

Finding Reviewer My Assessment
C1: Unclosed <analysis> consumes all content qwen-code-ci-bot Stale — HEAD uses state machine, consumes only to <summary> start
C2: ReDoS in summary regex qwen-code-ci-bot Stale — HEAD uses state machine + safe regex patterns
C3: Tag strip collapses adjacent words qwen-code-ci-bot Stale — HEAD replaces tags with space, then collapses whitespace
C4: Envelope unwrap mishandles multiple summaries qwen-code-ci-bot Stale — HEAD uses depth-tracking state machine
C5: Sanitizer runs unconditionally on all modes qwen-code-ci-bot Stale — HEAD has terminateMode !== GOAL guard
C6: Analysis-stripping regex destroys summary content qwen-code-ci-bot Stale — HEAD state machine preserves content inside summary
S1: Missing workflow-orchestrator call sites qwen-code-ci-bot Stale — both sites wired
S2: No dedicated unit test file qwen-code-ci-bot Stalesubagent-result.test.ts with 15+ cases
S3: Missing happy-path <summary> test qwen-code-ci-bot Stale — covered in parametrized tests
S4: No workflow-orchestrator integration test qwen-code-ci-bot Stale — 2 new tests added
S5: No empty-string fallback qwen-code-ci-bot Stale'(subagent produced no model-visible output)' at agent.ts:3049
S6: No forkedAgent test qwen-code-ci-bot StaleforkedAgent.agent.test.ts test added

Additional Audit Coverage

  • State machine correctness: traced all 15 parametrized test cases through both passes manually, verified each produces the expected output
  • ReDoS safety: verified no .* or unbounded quantifiers in any regex, state machine is strictly O(n) with single forward pass
  • stripVisibleTags residual analysis regex: uses [\s\S]*? bounded by <\/analysis> — safe against backtracking, catches analysis blocks nested inside summary that the state machine intentionally preserves
  • Tag attribute handling: \b[^>]* pattern correctly matches tags with attributes (spaces, quotes, multiple attributes)
  • Whitespace normalization: replace(/ {2,}/g, ' ') collapses multi-space to single — appropriate for model-visible text

This review was generated by QoderWork AI

Comment thread packages/core/src/agents/subagent-result.ts
Comment thread packages/core/src/agents/subagent-result.ts
Comment thread packages/core/src/tools/agent/agent.ts

@doudouOUC doudouOUC left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Review Summary

Overall this is a well-designed and well-tested change. The two-step sanitization approach (state-machine pass + regex cleanup) is sound, and the call-site coverage is thorough — all parent-facing paths are wrapped while hook/telemetry/gate paths correctly retain raw text.

Verdict: Approve once CI is green. A few inline observations below (none blocking).

Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/subagent-result.ts
Comment thread packages/core/src/tools/agent/agent.ts
Comment thread packages/core/src/agents/subagent-result.test.ts
@DragonnZhang

Copy link
Copy Markdown
Collaborator

E2E Tmux Test Report -- PR #6027

Tested on: Linux (Ubuntu x86_64, server) | Branch: codex/subagent-result-tags at 248227168aa | Build: OK (deps already installed via worktree)

Test Results

Test Description Result
1 Subagent result sanitization unit tests (subagent-result.test.ts, 16 cases) PASS
2 Agent tool integration tests (agent.test.ts, 115 cases) PASS
3 Background agent resume tests (background-agent-resume.test.ts, 29 cases) PASS
4 Workflow orchestrator tests (workflow-orchestrator.test.ts, 117 cases) PASS
5 Forked agent tests (forkedAgent.agent.test.ts, 8 cases) PASS
6 Core package typecheck (tsc --noEmit) PASS

Total: 285 tests passed, 0 failed.

Details

Test 1: subagent-result.test.ts (16/16 passed)
 RUN  v3.2.4 packages/core
      Coverage enabled with v8

 PASS src/agents/subagent-result.test.ts (16 tests) 30ms

 Test Files  1 passed (1)
      Tests  16 passed (16)
   Duration  24.96s
Test 2: agent.test.ts (115/115 passed)
 RUN  v3.2.4 packages/core
      Coverage enabled with v8

 PASS src/tools/agent/agent.test.ts (115 tests) 3656ms

 Test Files  1 passed (1)
      Tests  115 passed (115)
   Duration  48.57s
Test 3: background-agent-resume.test.ts (29/29 passed)
 RUN  v3.2.4 packages/core
      Coverage enabled with v8

 PASS src/agents/background-agent-resume.test.ts (29 tests) 1162ms

 Test Files  1 passed (1)
      Tests  29 passed (29)
   Duration  42.25s
Test 4: workflow-orchestrator.test.ts (117/117 passed)
 RUN  v3.2.4 packages/core
      Coverage enabled with v8

 PASS src/agents/runtime/workflow-orchestrator.test.ts (117 tests) 1448ms

 Test Files  1 passed (1)
      Tests  117 passed (117)
   Duration  42.10s
Test 5: forkedAgent.agent.test.ts (8/8 passed)
 RUN  v3.2.4 packages/core
      Coverage enabled with v8

 PASS src/utils/forkedAgent.agent.test.ts (8 tests) 165ms

 Test Files  1 passed (1)
      Tests  8 passed (8)
   Duration  38.94s
Test 6: Typecheck (passed)
> @qwen-code/qwen-code-core@0.19.3 typecheck
> tsc --noEmit

No errors emitted; clean exit.

Verdict

PASS -- All 285 tests across 5 test files pass. TypeScript typecheck is clean. The subagent result sanitization logic, agent tool integration, background agent resume, workflow orchestrator, and forked agent utilities all behave correctly.

中文测试报告

E2E Tmux 测试报告 -- PR #6027

测试环境: Linux (Ubuntu x86_64, 服务器) | 分支: codex/subagent-result-tags,提交 248227168aa | 构建: 正常(worktree 已包含依赖)

测试结果

测试 描述 结果
1 子代理结果清理单元测试(subagent-result.test.ts,16 个用例) 通过
2 Agent 工具集成测试(agent.test.ts,115 个用例) 通过
3 后台代理恢复测试(background-agent-resume.test.ts,29 个用例) 通过
4 工作流编排器测试(workflow-orchestrator.test.ts,117 个用例) 通过
5 分叉代理测试(forkedAgent.agent.test.ts,8 个用例) 通过
6 Core 包类型检查(tsc --noEmit 通过

总计:285 个测试全部通过,0 个失败。

结论

通过 -- 所有 5 个测试文件中的 285 个测试均通过。TypeScript 类型检查无误。子代理结果清理逻辑、Agent 工具集成、后台代理恢复、工作流编排器及分叉代理工具均表现正常。

Comment thread packages/core/src/agents/subagent-result.ts Outdated
Comment thread packages/core/src/agents/background-agent-resume.ts Outdated
chiga0
chiga0 previously approved these changes Jun 30, 2026

@chiga0 chiga0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Re-Review at HEAD d4dd28a3

HEAD advanced from 54f5f7d9 (my prior APPROVE) with two new commits:

  • 2482271 — fix(core): address remaining subagent result feedback
  • d4dd28a — Merge branch 'main' into codex/subagent-result-tags

New Changes Verified

The new commit adds:

  1. Self-closing <analysis/> handling — New regex /<analysis\b[^>]*\/>/gi in stripVisibleTags correctly strips self-closing analysis tags that could leak inside summary blocks. ✓
  2. Self-closing analysis test case['<summary>Done<analysis/>leaked</summary>', 'Done leaked'] correctly validates the fix. ✓
  3. Background registry sanitization test — "stores sanitized background results in the registry" verifies the sanitization is applied at the registry.complete call site. ✓

Cross-Validation of All 21 Existing Inline Findings

# Finding Reviewer Status at d4dd28a
1 Unclosed <analysis> consumes to end-of-string qwen-code-ci-bot ✓ Stale — state machine handles unclosed blocks
2 ReDoS quadratic backtracking qwen-code-ci-bot ✓ Stale — anchored lazy match, no nested quantifiers
3 Missed workflow-orchestrator call sites qwen-code-ci-bot ✓ Stale — addressed in prior commit
4 No dedicated unit test file qwen-code-ci-bot ✓ Stale — subagent-result.test.ts with 15+ parametrized cases
5 Fallback tag-strip collapses adjacent words qwen-code-ci-bot ✓ Stale — uses space replacement ' '
6 Multiple summary blocks leak stray tags qwen-code-ci-bot ✓ Stale — state machine with depth tracking
7 Sanitizer runs unconditionally on all termination modes qwen-code-ci-bot ✓ Stale — guarded by terminateMode !== GOAL
8 Missing test for single summary block qwen-code-ci-bot ✓ Stale — '<summary>just summary</summary>' case exists
9 Analysis-stripping regex destroys summary content qwen-code-ci-bot ✓ Stale — state machine preserves analysis inside summary
10 No integration test in workflow-orchestrator qwen-code-ci-bot ✓ Stale — tests added in prior commit
11 No empty-string fallback on success path qwen-code-ci-bot Author deferral — foreground already adds placeholder
12 No forkedAgent sanitization test qwen-code-ci-bot ✓ Stale — test added in prior commit
13 Empty-output fallback at only 1 of 6 call sites qwen-code-ci-bot Author deferral — different callers have different contracts
14 Self-closing <analysis/> bypasses sanitizer qwen-code-ci-bot Fixed in 2482271 — new regex added
15 No test for background agent sanitized registry qwen-code-ci-bot Fixed in 2482271 — new test added
16 Nested <analysis> bypasses sanitizer qwen-code-ci-bot ✓ Stale — state machine tracks summaryDepth
17 Empty-result fallback missing on background agent path qwen-code-ci-bot Author deferral — same as #13
18 Lazy match vs nested close tags doudouOUC Author deferral — known limitation
19 Whitespace normalization doudouOUC Author deferral — only normalizes tag-introduced spacing
20 Inconsistent empty-result fallback doudouOUC Author deferral — same as #13
21 Additional edge-case test doudouOUC Author deferral — literal analysis in code-fenced text

Additional Audit Coverage

  • Self-closing regex correctness: Verified <analysis/> is matched by /<analysis\b[^>]*\/>/gi and replaced with space. The \b prevents false matches on <analysisfoo/>. ✓
  • Test case validation: Traced '<summary>Done<analysis/>leaked</summary>' through the state machine (preserves all content inside summary) → stripVisibleTags (strips <analysis/> and <summary> tags) → 'Done leaked'. ✓
  • Background registry test: Verified the new test mocks getFinalText to return tagged content and asserts registry.complete receives the sanitized text. ✓

Final Verdict

APPROVE — The new commit correctly addresses the self-closing analysis tag bypass and adds background registry sanitization coverage. All 21 existing findings verified: 16 stale, 2 fixed in the new commit, 5 author-deferred with reasonable justifications. No blocking issues.


This review was generated by QoderWork AI

@yiliang114

Copy link
Copy Markdown
Collaborator Author

@qwen-code /triage

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

LGTM, looks ready to ship. ✅

@yiliang114
yiliang114 disabled auto-merge June 30, 2026 11:51
@yiliang114
yiliang114 enabled auto-merge June 30, 2026 11:51

@doudouOUC doudouOUC left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Updated Review (v2)

The latest revision addresses all observations from the first review round:

  1. Nested <analysis> handlingfindAnalysisCloseEnd now uses proper depth tracking, eliminating the lazy *? regex truncation concern.
  2. Self-closing <analysis/> — handled explicitly via isSelfClosingTag() in both stripClosedAnalysisBlocks and stripAnalysisOutsideSummary.
  3. Consistent empty-result fallback'(subagent produced no model-visible output)' is now applied uniformly across foreground, background, and resume paths.
  4. Additional edge-case tests — nested analysis (<analysis>outer<analysis>inner</analysis>LEAKED</analysis>) and self-closing (<analysis/>) are both covered.

The sanitization logic is now demonstrably more robust: depth-aware for nested blocks, handles self-closing tags, and has consistent fallback behavior across all execution paths.

CI status: Test (ubuntu-latest, Node 22.x) passed.

Approving — no blocking issues found.

}

/** Keeps successful subagent scratchpad tags out of the parent model context. */
export function toModelVisibleSubagentResult(

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.

[Nit, non-blocking] Double sanitization in foreground path

In the foreground execution path, toModelVisibleSubagentResult is called twice on the same subagent.getFinalText() result:

  1. Once inside runSubagentWithHooks (line ~1648 of agent.ts) for the display/registry result field
  2. Once in the outer try block (line ~3025 of agent.ts) for the llmContent tool return

Since this is a pure function with no side effects, it produces the same result both times — so this is purely a minor redundancy, not a bug. Could be deduplicated by having runSubagentWithHooks return the sanitized text alongside stopHookWarning, but that's a larger refactor not worth doing in this PR.

continue;
}

result += text.slice(index, start) + ' ';

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.

[Nit, non-blocking] Whitespace after multi-line analysis removal

The space replacement for removed analysis blocks (result += text.slice(index, start) + ' ') is good for inline removals, but when a multi-line <analysis> block sits on its own lines:

text before\n\n<analysis>\nscratch\n</analysis>\n\ntext after

→ produces text before\n\n \n\ntext after (extra space + blank lines). The final trim() handles leading/trailing, but internal blank runs remain. Not a problem in practice since models typically emit <analysis> adjacent to <summary>, and the compressed output is still readable.

@yiliang114
yiliang114 added this pull request to the merge queue Jun 30, 2026
Merged via the queue into main with commit cc0a639 Jun 30, 2026
78 checks passed
function findAnalysisCloseEnd(text: string, from: number): number {
const tagPattern = /<\/?analysis\b[^>]*>/gi;
let depth = 1;
tagPattern.lastIndex = from;

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.

[Critical] Quoted-attribute bypass in tag-matching regex

All tag-matching regexes use [^>]* to consume attributes, which stops at the first > regardless of whether it's inside a quoted attribute value. A crafted tag like <analysis note=">"> causes the regex to misparse the tag boundary: <analysis note="> is matched as the opening tag, and findAnalysisCloseEnd pairs it with the first </analysis>, leaving subsequent content to leak through.

Confirmed at runtime:

  • Input: <analysis note=">"></analysis>INJECTION</analysis>
  • Output: INJECTION</analysis> (injection content survives)

Impact: A malicious or hallucinating subagent can inject arbitrary text into the parent model's context, defeating the sanitizer's stated purpose.

Suggested change
tagPattern.lastIndex = from;
function findAnalysisCloseEnd(text: string, from: number): number {
const tagPattern = /<\/?analysis\b(?:[^>"']|"[^"]*"|'[^']*')*>/gi;

Apply the same fix to the regex patterns in stripClosedAnalysisBlocks (line 49) and stripAnalysisOutsideSummary (line 93).

— qwen3.7-max via Qwen Code /review

continue;
}

result += text.slice(index, start) + ' ';

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.

[Critical] Unclosed <analysis> inside <summary> leaks content to parent model

When a subagent produces <analysis> opened but never closed inside a <summary> block (common when output is truncated by token limits), Pass 1 (stripAnalysisOutsideSummary) preserves it verbatim because inside-summary content is passed through. Pass 2 (stripClosedAnalysisBlocks) then hits closeEnd === -1 and executes result += text.slice(index, end), preserving the <analysis> tag plus all subsequent content.

Confirmed at runtime:

  • Input: <summary>Task done<analysis>INJECTION</summary>
  • Output: Task done<analysis>INJECTION (tag and injection survive)

Impact: Truncated subagent output leaks internal analysis content into the parent model context.

Suggested change
result += text.slice(index, start) + ' ';
const closeEnd = findAnalysisCloseEnd(text, end);
if (closeEnd === -1) {
result += text.slice(index, start) + ' ';
index = end;
continue;
}

— qwen3.7-max via Qwen Code /review

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

Labels

category/core Core engine and logic roadmap/subagents-tools Roadmap: Subagents and tool system type/bug Something isn't working as expected

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Subagent final result leaks <analysis>/<summary> tags into parent context and breaks daemon UI markdown rendering

5 participants