Skip to content

feat(cli): add /advisor command for second-opinion conversation review - #7567

Merged
yiliang114 merged 50 commits into
mainfrom
feat/advisor-command
Aug 17, 2026
Merged

feat(cli): add /advisor command for second-opinion conversation review#7567
yiliang114 merged 50 commits into
mainfrom
feat/advisor-command

Conversation

@yiliang114

@yiliang114 yiliang114 commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

Adds a manual /advisor [focus] slash command that asks a reviewer model for an independent second opinion on the current conversation. The review runs as a read-only forked side query that shares the main conversation's context (same mechanism as /btw: forked agent cache path with tools stripped at the request level), so the main session history is never mutated and the advisor cannot take any actions. The advisor requests a schema-constrained JSON object with Verdict / Risks / Missing evidence / Recommendation fields, validates the parsed result, and formats it as the same four-section Markdown review for display. Invalid, incomplete, empty, or extra-field output is surfaced through the existing advisor failure path instead of being shown as a partial review. A new advisorModel setting selects a dedicated reviewer model (a model at least as capable as the main model is recommended); when unset, the main model is used.

This is Phase 1 (manual command) of the Advisor proposal in #6542. The structured result remains internal to the command and is only rendered for the user. Exposing the advisor as a model-callable tool with system-prompt guidance (Phase 3) is intentionally out of scope and needs its own design.

Why it's needed

Long agentic sessions tend to converge early on an interpretation and declare completion without an independent check. Claude Code ships an advisor tool for exactly this loop, but theirs is a server-side Anthropic API feature (the API forwards the whole conversation to a stronger reviewer model), which cannot be replicated for multi-provider setups. The client-side forked query is the equivalent shape for this project, and the building blocks (forked agent cache path, model override, request-level tool stripping, and structured-output support) already exist — this PR only adds the command surface and its bounded response contract.

Reviewer Test Plan

How to verify

  1. Start an interactive session and have a short conversation (for example, ask it to investigate a file and propose a fix).
  2. Run /advisor — expect a "Consulting advisor..." pending state, then an info message with the four sections (Verdict / Risks / Missing evidence / Recommendation). The main conversation history should be unaffected; the next user turn should behave as if /advisor never happened.
  3. Run /advisor is the proposed fix safe? — expect the review to address the focus question.
  4. Run /advisor at the start of a fresh session — expect a "No conversation context available" error rather than a crash.
  5. Set advisorModel to another configured model and rerun — expect the forked query to use that model.
  6. Press ESC while the advisor is pending — expect the pending state to clear and no stale result to appear later.
  7. Return an incomplete or otherwise invalid structured response from a test provider — expect an advisor failure message and no partial review.

The focused command suite passes all 26 tests, and the OpenAI pipeline suite passes all 147 tests. Prettier and ESLint pass for the changed files, and the core package build and typecheck pass. The broader CLI package build remains locally blocked because the shared dependency tree mixes artifacts from another worktree.

Evidence (Before & After)

Before: there was no manual command for an independent, read-only second opinion on the current conversation.

After: earlier manual PR-thread evidence showed the four-section review and an unaffected next turn. A later exact-head macOS run exposed startup-only context and a dropped OpenAI JSON-mode request; both root causes are fixed, while post-fix live provider re-verification remains pending.

Tested on

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

Environment (optional)

Interactive CLI session with a configured reviewer model; focused Vitest, Prettier, and ESLint checks in the CLI and core packages.

Risk & Scope

  • Main risk or tradeoff: each explicit /advisor invocation adds one reviewer-model request and its latency/cost; a provider that does not honor the requested schema now produces an explicit failure instead of unvalidated prose.
  • Not validated / out of scope: post-fix live provider re-verification, automatic or model-callable advisor invocation, Phase 3 system-prompt guidance, the broader locally blocked CLI build, and Windows/Linux manual interaction.
  • Breaking changes / migration notes: none; the command and advisorModel setting are additive, and the structured response remains internal to the command.

Linked Issues

Implements Phase 1 of #6542 without auto-closing it.

中文说明

本 PR 做了什么

新增手动斜杠命令 /advisor [focus],让 reviewer 模型针对当前对话给出独立的第二意见。评审通过只读的 forked side query 运行并共享主对话上下文(与 /btw 使用同一机制:走 forked agent cache,并在请求层移除工具),因此不会修改主会话历史,advisor 也不能执行任何操作。advisor 现在请求包含 Verdict / Risks / Missing evidence / Recommendation 字段、受 schema 约束的 JSON 对象,校验解析结果后,再格式化成相同的四段 Markdown 评审展示给用户。无效、不完整、空字段或包含额外字段的输出会进入现有 advisor 失败路径,不会作为残缺评审展示。新增 advisorModel 设置可指定专用 reviewer 模型(建议不弱于主模型);未设置时复用主模型。

这是 #6542 Advisor 提案的 Phase 1(手动命令)。结构化结果仍是命令内部实现,只会渲染给用户。把 advisor 暴露为可由模型调用的工具并加入 system prompt 指引属于 Phase 3,本 PR 明确不包含,需要单独设计。

为什么需要

长时间运行的 agent 会话容易过早收敛到一种解释,并在缺少独立检查时宣布完成。Claude Code 为这个闭环提供了 advisor 工具,但它依赖 Anthropic API 在服务端把完整对话转发给更强的 reviewer 模型,无法直接复用于多 provider 场景。客户端 forked query 是本项目对应的实现形态,而且 forked agent cache、模型覆盖、请求级工具移除和结构化输出等基础能力已经存在;本 PR 只增加命令入口及其有限的响应契约。

Reviewer 测试计划

如何验证

  1. 启动交互会话并进行一段简短对话,例如让它调查一个文件并提出修复方案。
  2. 运行 /advisor:应先显示 "Consulting advisor..." pending 状态,再显示包含 Verdict / Risks / Missing evidence / Recommendation 四部分的信息;主对话历史不应受影响,下一轮用户消息应表现得像从未运行过 /advisor
  3. 运行 /advisor is the proposed fix safe?:评审应针对该 focus 问题作答。
  4. 在全新会话一开始运行 /advisor:应返回 "No conversation context available" 错误,而不是崩溃。
  5. advisorModel 设置为另一个已配置模型后再次运行:forked query 应使用该模型。
  6. advisor pending 时按 ESC:pending 状态应清除,之后不应追加过期结果。
  7. 让测试 provider 返回不完整或其他无效结构化响应:应显示 advisor 失败消息,且不展示残缺评审。

聚焦的 command 测试 26 项和 OpenAI pipeline 测试 147 项全部通过。改动文件的 Prettier 与 ESLint 通过,core package 的 build 与 typecheck 通过。由于共享依赖树混用了另一 worktree 的构建产物,本地更广泛的 CLI package build 仍被阻断。

证据(前后对比)

之前:没有手动命令能针对当前对话请求独立、只读的第二意见。

之后:早期 PR thread 手工证据显示四部分评审及下一轮主会话不受影响;后续 exact-head macOS 实测暴露了启动上下文误判和 OpenAI JSON mode 丢失,两个根因均已修复,修复后的真实 provider 复验仍待完成。

测试平台

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

环境(可选)

使用已配置 reviewer 模型的交互式 CLI 会话;在 CLI 和 core package 中执行聚焦 Vitest、Prettier 和 ESLint 检查。

风险与范围

  • 主要风险或取舍:每次显式运行 /advisor 都会增加一次 reviewer 模型请求及相应延迟和成本;不遵循所请求 schema 的 provider 现在会产生明确失败,而不是返回未经校验的文本。
  • 未验证 / 范围外:修复后的真实 provider 复验、advisor 的自动或模型调用入口、Phase 3 system prompt 指引、本地被阻断的更广泛 CLI build,以及 Windows/Linux 手工交互。
  • 破坏性变更 / 迁移说明:无;命令和 advisorModel 设置均为增量能力,结构化响应仍是命令内部实现。

关联 Issue

实现 #6542 的 Phase 1,但不会自动关闭该 Issue。

Adds a manual /advisor slash command that asks a reviewer model for an
independent second opinion on the current conversation. The review runs
as a read-only forked side query sharing the main conversation context
(runForkedAgent cache path, NO_TOOLS), so the main session is never
mutated. A new advisorModel setting selects a dedicated reviewer model,
falling back to the main model when unset.

Refs #6542
@github-actions

github-actions Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 84.72% 84.72% 90.1% 83.8%
Core 88.05% 88.05% 89.6% 86.62%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   84.72 |     83.8 |    90.1 |   84.72 |                   
 src               |   85.74 |    81.76 |   88.03 |   85.74 |                   
  cli.ts           |   95.68 |    84.11 |     100 |   95.68 | ...60-561,565-566 
  gemini.tsx       |    73.4 |    78.04 |   80.76 |    73.4 | ...1338-1342,1469 
  ...ractiveCli.ts |   88.12 |    82.41 |   88.88 |   88.12 | ...3108,3114,3180 
  ...liCommands.ts |   88.93 |    83.21 |      80 |   88.93 | ...97-599,615,721 
  ...ActiveAuth.ts |     100 |     87.5 |     100 |     100 | 66-80             
 ...cp-integration |   72.35 |    74.78 |   91.58 |   72.35 |                   
  acpAgent.ts      |   71.76 |    74.61 |   91.13 |   71.76 | ...79,12884-12886 
  ...k-reporter.ts |     100 |       80 |     100 |     100 | 81,84,119,141     
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  errorCodes.ts    |     100 |      100 |     100 |     100 |                   
  ...ion-skills.ts |     100 |    88.23 |     100 |     100 | 17,32             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...figuration.ts |     100 |      100 |     100 |     100 |                   
  ...DirContext.ts |     100 |      100 |     100 |     100 |                   
 ...ration/service |    97.1 |    95.83 |   93.33 |    97.1 |                   
  filesystem.ts    |    97.1 |    95.83 |   93.33 |    97.1 | ...22-123,246-247 
 ...ration/session |   91.24 |    86.27 |   96.37 |   91.24 |                   
  Session.ts       |   90.59 |    84.85 |      96 |   90.59 | ...09,11836-11840 
  ...entTracker.ts |    96.8 |    89.36 |      90 |    96.8 | 137-143,221       
  ...projection.ts |   98.85 |    91.59 |     100 |   98.85 | 234,250,262       
  ...stop-guard.ts |     100 |    98.07 |     100 |     100 | 37,127            
  ...eplay-page.ts |   94.11 |     86.3 |     100 |   94.11 | ...11,315,395,399 
  ...y-replayer.ts |   83.17 |    92.98 |   94.11 |   83.17 | ...24-142,260-262 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  ...ssionUtils.ts |   89.76 |    87.32 |     100 |   89.76 | ...54-270,326-328 
  ...oal-update.ts |   98.61 |    97.29 |     100 |   98.61 | 64                
  ...lure-guard.ts |   98.32 |    97.72 |     100 |   98.32 | 294-295,340-341   
  tasksSnapshot.ts |    94.3 |     87.5 |     100 |    94.3 | 65-71             
  ...on-tracker.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ssion/emitters |    95.7 |    93.37 |   96.87 |    95.7 |                   
  ...ageEmitter.ts |   95.25 |    93.54 |     100 |   95.25 | ...08-115,128-129 
  PlanEmitter.ts   |     100 |       90 |     100 |     100 | 66                
  base-emitter.ts  |   78.26 |       75 |     100 |   78.26 | 23-24,26-28       
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
  ...ll-emitter.ts |   99.18 |    96.47 |     100 |   99.18 | 355-356           
 ...ession/rewrite |    91.8 |    89.13 |   94.44 |    91.8 |                   
  LlmRewriter.ts   |    82.4 |     86.2 |     100 |    82.4 | ...,88-89,166-170 
  ...Middleware.ts |   96.96 |    88.09 |     100 |   96.96 | 144,152-154       
  TurnBuffer.ts    |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/agent-view    |   89.03 |    81.37 |   89.09 |   89.03 |                   
  ...t-cli-argv.ts |     100 |      100 |     100 |     100 |                   
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  ...sor-client.ts |   80.38 |    72.54 |   76.66 |   80.38 | ...22-626,652-656 
  ...or-process.ts |   96.61 |    89.47 |   84.61 |   96.61 | 129-130,150-151   
  ...sor-runner.ts |    84.9 |     75.6 |      85 |    84.9 | ...44,468,471-481 
  ...sor-server.ts |   85.71 |    83.06 |   95.45 |   85.71 | ...67-468,471-488 
  ...isor-store.ts |   97.73 |    81.16 |     100 |   97.73 | ...92,594,607,643 
  ...nal-bridge.ts |   93.98 |     91.3 |   83.33 |   93.98 | 228-238           
 src/commands      |   91.04 |       80 |   66.66 |   91.04 |                   
  auth.ts          |     100 |    83.33 |     100 |     100 | 11,14             
  channel.ts       |   55.55 |      100 |       0 |   55.55 | 18-22,30-40       
  extensions.tsx   |   96.77 |      100 |      50 |   96.77 | 39                
  hooks.tsx        |   66.66 |      100 |       0 |   66.66 | 20-24             
  mcp.ts           |   95.45 |      100 |      50 |   95.45 | 31                
  review.ts        |   98.79 |      100 |      50 |   98.79 | 94                
  serve.ts         |   90.08 |    77.84 |     100 |   90.08 | ...81,884-887,899 
  sessions.ts      |     100 |      100 |      50 |     100 |                   
  update.ts        |   98.13 |    94.44 |   66.66 |   98.13 | 82-83             
 ...mmands/channel |   89.08 |    88.56 |   90.64 |   89.08 |                   
  channel-cwd.ts   |     100 |      100 |     100 |     100 |                   
  ...l-registry.ts |   94.88 |    95.49 |      90 |   94.88 | ...20-323,368-371 
  ...entry-path.ts |      75 |       50 |     100 |      75 | 8-9               
  config-utils.ts  |   95.88 |    96.35 |     100 |   95.88 | ...08-213,271-274 
  configure.ts     |    14.7 |      100 |       0 |    14.7 | 18-21,23-84       
  daemon-worker.ts |   93.91 |    85.55 |   94.33 |   93.91 | ...1264,1271-1272 
  loop-runtime.ts  |   91.66 |      100 |      50 |   91.66 | 15,22             
  ...classifier.ts |   98.53 |    96.66 |     100 |   98.53 | 115-116,161       
  ...tact-store.ts |   93.51 |    87.65 |     100 |   93.51 | ...71,288-289,337 
  pairing.ts       |      75 |      100 |      50 |      75 | 22-28,59-70       
  pidfile.ts       |   95.55 |       90 |     100 |   95.55 | ...50-251,315-316 
  proxy.ts         |     100 |      100 |     100 |     100 |                   
  reload.ts        |    77.5 |    86.95 |      75 |    77.5 | 72-84,93-97       
  runtime.ts       |   82.43 |    86.44 |     100 |   82.43 | ...87-191,251-253 
  set.ts           |   75.72 |    85.71 |      50 |   75.72 | 65-83,111-116     
  start.ts         |    85.8 |    82.17 |      88 |    85.8 | ...85,591-594,606 
  ...ure-format.ts |   93.65 |    82.45 |     100 |   93.65 | ...42,48-49,74-75 
  status.ts        |   78.57 |    59.25 |   66.66 |   78.57 | ...36-137,150-161 
  stop.ts          |   57.83 |    82.35 |      50 |   57.83 | ...3,74-76,85-111 
 ...nds/extensions |   88.85 |    87.73 |   87.09 |   88.85 |                   
  consent.ts       |   72.53 |    90.32 |   42.85 |   72.53 | ...86-142,157-163 
  disable.ts       |     100 |       90 |     100 |     100 | 30                
  enable.ts        |     100 |    91.66 |     100 |     100 | 38                
  install.ts       |   82.95 |    81.57 |      75 |   82.95 | ...96-199,202-211 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |     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     |   74.57 |       40 |   66.66 |   74.57 | 45-47,60-67,70-73 
  update.ts        |   96.71 |    97.05 |     100 |   96.71 | 114-118           
  utils.ts         |   75.63 |    55.55 |     100 |   75.63 | ...30-134,136-140 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...amples/starter |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-64              
 src/commands/mcp  |   90.31 |    84.61 |   83.33 |   90.31 |                   
  add.ts           |    99.3 |    96.07 |     100 |    99.3 | 154-155           
  approve.ts       |   76.19 |     87.5 |   66.66 |   76.19 | ...,89-99,114-124 
  list.ts          |   93.15 |    84.84 |      80 |   93.15 | ...78-180,198-199 
  reconnect.ts     |   78.85 |    66.66 |   85.71 |   78.85 | 42-55,169-191     
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 ...ommands/review |   90.03 |    89.45 |    90.3 |   90.03 |                   
  agent-prompt.ts  |      94 |    92.55 |   97.43 |      94 | ...2785,2940-3020 
  base-tree.ts     |   76.16 |    80.76 |   77.77 |   76.16 | ...50-371,373-386 
  capture-local.ts |      70 |     90.9 |      75 |      70 | 112-116,163-194   
  ...k-coverage.ts |   50.71 |       35 |   66.66 |   50.71 | ...40-245,279-289 
  cleanup.ts       |   92.79 |     88.7 |   84.61 |   92.79 | ...43-648,650-651 
  comment-body.ts  |   69.92 |    92.85 |   66.66 |   69.92 | ...18,145,147-152 
  ...ent-status.ts |   93.03 |    83.87 |   83.33 |   93.03 | 291,531-551       
  ...ose-review.ts |   97.06 |    92.48 |   97.43 |   97.06 | ...3027,3055-3077 
  cost-ledger.ts   |   94.58 |     94.4 |   81.25 |   94.58 | ...53-654,694-704 
  drive.ts         |   76.07 |    85.71 |   81.81 |   76.07 | ...90-492,497-499 
  extract-step.ts  |   91.36 |    90.62 |   88.88 |   91.36 | ...90-707,714-729 
  fetch-diff.ts    |   73.41 |      100 |   66.66 |   73.41 | 75-95             
  fetch-pr.ts      |   98.29 |    95.83 |   90.47 |   98.29 | ...1159,1293-1298 
  findings.ts      |   96.01 |    92.08 |     100 |   96.01 | ...1227,1236-1237 
  issue-context.ts |    88.1 |     93.1 |   85.71 |    88.1 | 247-274           
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  match-remote.ts  |   85.54 |     92.3 |   66.66 |   85.54 | 67-72,131-136     
  meta.ts          |   76.84 |     91.3 |   66.66 |   76.84 | 91-96,115-130     
  mock-provider.ts |   95.44 |    90.25 |   89.47 |   95.44 | 145,690-709       
  parse-args.ts    |    99.4 |    95.16 |     100 |    99.4 | 472,645,701       
  plan-diff.ts     |    68.1 |      100 |   66.66 |    68.1 | 162-205           
  pr-context.ts    |   94.09 |    82.69 |     100 |   94.09 | ...1454,1526-1542 
  presubmit.ts     |   90.36 |    89.15 |      90 |   90.36 | ...50-751,837-867 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...75-479,506-552 
  repo-context.ts  |   94.62 |    90.75 |     100 |   94.62 | ...66-467,482-487 
  ...ve-anchors.ts |   78.34 |    89.28 |      75 |   78.34 | ...83-188,200-217 
  run.ts           |   83.92 |    88.37 |   94.11 |   83.92 | ...16,632-680,693 
  save-artifact.ts |   90.06 |    81.81 |   93.75 |   90.06 | ...18-321,414-417 
  script-lint.ts   |   83.67 |    78.41 |   88.88 |   83.67 | ...59-773,775-797 
  submit.ts        |   85.01 |    86.36 |      90 |   85.01 | ...99,588,615-651 
  test-delta.ts    |   86.34 |       92 |      60 |   86.34 | 171-202,465-473   
  test-efficacy.ts |   88.04 |    84.12 |   95.45 |   88.04 | ...2602,2610-2630 
  test-plan.ts     |   91.44 |    91.39 |   89.47 |   91.44 | ...38-839,903-920 
 ...w/__fixtures__ |     100 |      100 |     100 |     100 |                   
  ...r-default.mjs |     100 |      100 |     100 |     100 |                   
  ...der-empty.mjs |     100 |      100 |     100 |     100 |                   
  ...der-named.mjs |     100 |      100 |     100 |     100 |                   
 ...nds/review/lib |   97.78 |     95.1 |   98.65 |   97.78 |                   
  agent-briefs.ts  |      99 |      100 |      50 |      99 | 748-749           
  ...t-identity.ts |     100 |      100 |     100 |     100 |                   
  anchors.ts       |     100 |    96.42 |     100 |     100 | ...39,175,184,231 
  assets.ts        |     100 |      100 |     100 |     100 |                   
  audit-layers.ts  |   98.67 |    96.15 |     100 |   98.67 | 288-290           
  authorization.ts |   93.02 |    94.11 |     100 |   93.02 | 152-158           
  budget.ts        |     100 |    97.89 |     100 |     100 | 876,916           
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  coverage.ts      |    96.6 |    93.05 |     100 |    96.6 | ...1115,1669-1670 
  deadline.ts      |   98.67 |    94.05 |     100 |   98.67 | 207,625,657,725   
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   98.73 |    93.08 |     100 |   98.73 | ...41,264,290-291 
  disk.ts          |     100 |      100 |     100 |     100 |                   
  effort.ts        |     100 |      100 |     100 |     100 |                   
  failing-files.ts |     100 |    93.33 |     100 |     100 | 41                
  gh.ts            |   89.09 |    95.31 |   77.77 |   89.09 | ...29,366-367,394 
  git.ts           |   97.84 |    96.15 |     100 |   97.84 | 207-208           
  heavy.ts         |     100 |      100 |     100 |     100 |                   
  inline-counts.ts |     100 |      100 |     100 |     100 |                   
  ...audit-gate.ts |     100 |    97.56 |     100 |     100 | 138               
  ledger.ts        |     100 |      100 |     100 |     100 |                   
  local-diff.ts    |   84.86 |    90.38 |     100 |   84.86 | ...63-473,475-483 
  ...ry-context.ts |   96.61 |    95.48 |     100 |   96.61 | ...47-450,496-499 
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.17 |    95.39 |     100 |   98.17 | ...,755,1126,1143 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   91.48 |       75 |     100 |   91.48 | 31-32,35-36       
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   97.26 |    91.42 |     100 |   97.26 | 49-50             
  report.ts        |   94.89 |    93.75 |     100 |   94.89 | 207-211           
  ...ry-context.ts |     100 |    98.66 |     100 |     100 | 187               
  retirement.ts    |     100 |    93.52 |     100 |     100 | ...38-539,729,883 
  review-footer.ts |     100 |      100 |     100 |     100 |                   
  ...w-settings.ts |     100 |    94.73 |     100 |     100 | 79                
  roster.ts        |     100 |    95.52 |     100 |     100 | 136,154,199       
  run-ledger.ts    |   98.15 |     93.7 |     100 |   98.15 | ...23,521,627,650 
  same-file.ts     |     100 |    94.11 |     100 |     100 | 35                
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.11 |    94.11 |     100 |   98.11 | 416,457,497-498   
  test-utils.ts    |     100 |      100 |     100 |     100 |                   
  toolchain.ts     |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   98.05 |    95.03 |     100 |   98.05 | ...67,415,684-685 
  ...pace-scope.ts |     100 |    96.96 |     100 |     100 | 186               
  workspaces.ts    |     100 |    96.77 |     100 |     100 | 222,452,499,512   
  worktree.ts      |     100 |      100 |     100 |     100 |                   
 ...w/lib/platform |   95.48 |       75 |     100 |   95.48 |                   
  github.ts        |   95.23 |    74.28 |     100 |   95.23 | 25-28,210-211     
  registry.ts      |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mands/sessions |   94.11 |    89.06 |   89.47 |   94.11 |                   
  common.ts        |     100 |      100 |     100 |     100 |                   
  list.ts          |   90.96 |    86.66 |   81.81 |   90.96 | 208-219,221-222   
  ps.ts            |     100 |    94.44 |     100 |     100 | 58                
 src/config        |   94.95 |    89.88 |   96.28 |   94.95 |                   
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   89.35 |    83.56 |     100 |   89.35 | ...97-298,314-315 
  ...eMcpImport.ts |   87.91 |    81.52 |     100 |   87.91 | ...63-371,453-454 
  compile-cache.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   89.12 |    88.69 |   83.78 |   89.12 | ...2497,2499-2507 
  ...cy-monitor.ts |      90 |    77.27 |     100 |      90 | ...72-73,90-92,98 
  ...ust-policy.ts |   83.02 |    88.88 |     100 |   83.02 | ...02-209,232-240 
  ...heme-names.ts |     100 |      100 |     100 |     100 |                   
  environment.ts   |    96.5 |    93.58 |      95 |    96.5 | ...85-586,640-641 
  ...le-watcher.ts |   90.86 |    83.65 |   95.83 |   90.86 | ...23-325,370,418 
  ...resh-state.ts |   90.57 |    97.29 |   93.75 |   90.57 | 137-142,146-152   
  ...ime-reload.ts |     100 |    69.69 |     100 |     100 | ...12-113,122-123 
  hot-reload.ts    |     100 |    89.13 |     100 |     100 | 47,172-178,238    
  keyBindings.ts   |    97.4 |       50 |     100 |    97.4 | 240-243           
  ...ngsAdapter.ts |     100 |    94.11 |     100 |     100 | 64                
  ...ig-watcher.ts |   95.17 |    83.05 |     100 |   95.17 | ...78,200,292-293 
  ...er-secrets.ts |   98.97 |    96.96 |     100 |   98.97 | 85                
  mcpApprovals.ts  |   96.55 |    95.55 |     100 |   96.55 | 223-224,229-231   
  mcpJson.ts       |     100 |      100 |     100 |     100 |                   
  mcpServers.ts    |   92.85 |     87.5 |     100 |   92.85 | 46-47             
  ...idersScope.ts |      95 |    94.73 |     100 |      95 | 11-12             
  ...abledTools.ts |     100 |      100 |     100 |     100 |                   
  ...comparison.ts |     100 |      100 |     100 |     100 |                   
  ...n-settings.ts |   99.15 |    93.75 |     100 |   99.15 | 63                
  sandboxConfig.ts |   93.33 |    93.33 |     100 |   93.33 | ...42-147,216-217 
  session-id.ts    |     100 |      100 |     100 |     100 |                   
  ...ings-cache.ts |   96.52 |    93.93 |     100 |   96.52 | 90-91,201-202     
  settings.ts      |   91.27 |    92.64 |      90 |   91.27 | ...1030,1032-1033 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...ngsWatcher.ts |   95.54 |    88.34 |     100 |   95.54 | ...28,277-278,293 
  ...d-env-keys.ts |     100 |      100 |     100 |     100 |                   
  ...l-settings.ts |     100 |      100 |     100 |     100 |                   
  ...paths-lite.ts |   89.47 |       88 |     100 |   89.47 | 43-44,53-54,56-57 
  ...precedence.ts |   98.79 |     92.3 |     100 |   98.79 | 62                
  ...tedFolders.ts |   92.53 |    93.47 |     100 |   92.53 | ...36-337,373-384 
 ...nfig/migration |   95.23 |    77.77 |   83.33 |   95.23 |                   
  index.ts         |   95.65 |     87.5 |     100 |   95.65 | 117-118           
  scheduler.ts     |   96.55 |    77.77 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   94.91 |      100 |     100 |   94.91 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |      100 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |     100 |      100 |     100 |     100 |                   
  v5-to-v4.ts      |      96 |      100 |     100 |      96 | 94-95,99          
 src/core          |     100 |      100 |     100 |     100 |                   
  auth.ts          |     100 |      100 |     100 |     100 |                   
  initializer.ts   |     100 |      100 |     100 |     100 |                   
  theme.ts         |     100 |      100 |     100 |     100 |                   
 src/dualOutput    |   75.08 |    67.64 |   71.42 |   75.08 |                   
  ...tputBridge.ts |   75.33 |    68.18 |   73.68 |   75.33 | ...09-410,418-421 
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/export        |       0 |        0 |       0 |       0 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-7               
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/hooks         |     100 |      100 |     100 |     100 |                   
  ...elete-hook.ts |     100 |      100 |     100 |     100 |                   
 src/i18n          |   86.22 |    81.92 |   89.65 |   86.22 |                   
  index.ts         |   73.45 |    77.77 |      90 |   73.45 | ...70-271,294-299 
  languages.ts     |   93.07 |     92.3 |   85.71 |   93.07 | ...35,164-169,184 
  ...nslateKeys.ts |     100 |      100 |     100 |     100 |                   
  ...lationDict.ts |   93.33 |    66.66 |     100 |   93.33 | 15                
 src/i18n/locales  |     100 |      100 |     100 |     100 |                   
  ca.js            |     100 |      100 |     100 |     100 |                   
  de.js            |     100 |      100 |     100 |     100 |                   
  en.js            |     100 |      100 |     100 |     100 |                   
  fr.js            |     100 |      100 |     100 |     100 |                   
  ja.js            |     100 |      100 |     100 |     100 |                   
  pt.js            |     100 |      100 |     100 |     100 |                   
  ru.js            |     100 |      100 |     100 |     100 |                   
  zh-TW.js         |     100 |      100 |     100 |     100 |                   
  zh.js            |     100 |      100 |     100 |     100 |                   
 ...nonInteractive |   80.98 |    77.27 |   84.12 |   80.98 |                   
  session.ts       |   84.97 |    76.31 |   96.07 |   84.97 | ...1048,1057-1067 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...31-632,635-636 
 ...active/control |   75.54 |    89.83 |      80 |   75.54 |                   
  ...rolContext.ts |    6.06 |        0 |       0 |    6.06 | 57-99             
  ...Dispatcher.ts |   91.95 |    92.98 |   88.88 |   91.95 | ...54-372,392,395 
  ...rolService.ts |    6.89 |        0 |       0 |    6.89 | 46-188            
 ...ol/controllers |   45.95 |    69.03 |   55.26 |   45.95 |                   
  ...Controller.ts |    42.4 |      100 |   83.33 |    42.4 | 101-105,140-223   
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |   55.01 |    67.14 |   58.33 |   55.01 | ...15-624,639-644 
  ...Controller.ts |   49.23 |       60 |      50 |   49.23 | ...07-108,111-121 
  ...Controller.ts |   40.64 |    68.11 |   46.66 |   40.64 | ...72-684,693-722 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   98.12 |    94.18 |   95.29 |   98.12 |                   
  ...putAdapter.ts |   97.98 |    93.23 |   98.07 |   97.98 | ...1416,1432-1433 
  ...putAdapter.ts |      96 |    91.66 |   85.71 |      96 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.49 |      100 |   90.47 |   98.49 | 85-86,126-127     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/remoteInput   |   87.31 |    75.32 |   88.23 |   87.31 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.01 |       76 |   93.33 |   88.01 | ...49-350,361-364 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/runtime       |   99.61 |    95.04 |     100 |   99.61 |                   
  ...livery-ipc.ts |     100 |     90.9 |     100 |     100 | 94,106,134        
  ...l-delivery.ts |     100 |      100 |     100 |     100 |                   
  cpu-percent.ts   |     100 |      100 |     100 |     100 |                   
  ...erver-name.ts |     100 |      100 |     100 |     100 |                   
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...-summaries.ts |   86.66 |       50 |     100 |   86.66 | 11,19             
  ...ber-errors.ts |     100 |    95.32 |     100 |     100 | 53,93-94,172,192  
  ...ls-mapping.ts |     100 |      100 |     100 |     100 |                   
 src/serve         |   88.14 |    84.69 |   90.94 |   88.14 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.43 |    92.95 |     100 |   93.43 | ...20-321,324-326 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    98.07 |     100 |     100 | 692               
  ...cp-command.ts |     100 |      100 |     100 |     100 |                   
  ...horization.ts |   92.79 |    93.54 |    87.5 |   92.79 | 75-80,135-136     
  ...op-mcp-ipc.ts |   81.06 |    73.68 |   94.11 |   81.06 | ...37-242,267,289 
  ...nt-service.ts |    94.1 |    86.89 |     100 |    94.1 | ...75-477,484,486 
  ...-selection.ts |     100 |      100 |     100 |     100 |                   
  ...ings-store.ts |   89.64 |    94.11 |   96.29 |   89.64 | ...57-269,521-524 
  ...ebhook-ipc.ts |    98.5 |    86.66 |     100 |    98.5 | 47                
  ...iagnostics.ts |     100 |      100 |     100 |     100 |                   
  ...worker-env.ts |     100 |      100 |     100 |     100 |                   
  ...rker-group.ts |   87.27 |     85.2 |     100 |   87.27 | ...10,816-820,838 
  ...er-manager.ts |   89.39 |    83.88 |   93.33 |   89.39 | ...98,711,722-724 
  ...horization.ts |     100 |      100 |     100 |     100 |                   
  ...tartup-ipc.ts |   97.72 |    96.66 |     100 |   97.72 | 88-89             
  ...supervisor.ts |   92.54 |    84.53 |   97.14 |   92.54 | ...1489,1543-1547 
  ...e-grouping.ts |     100 |    94.28 |     100 |     100 | 71,137            
  core-runtime.ts  |     100 |      100 |     100 |     100 |                   
  ...ub-session.ts |    90.1 |    77.83 |   94.73 |    90.1 | ...1014,1021-1026 
  ...tree-guard.ts |   92.89 |    87.55 |     100 |   92.89 | ...2766,2836-2840 
  daemon-logger.ts |   82.82 |    78.68 |   92.04 |   82.82 | ...1775,1802-1808 
  ...y-pressure.ts |     100 |    96.96 |     100 |     100 | 135               
  ...trics-ring.ts |     100 |      100 |     100 |     100 |                   
  ...s-provider.ts |   68.04 |    52.77 |     100 |   68.04 | ...44-249,282-290 
  daemon-status.ts |   98.64 |    91.77 |     100 |   98.64 | ...1503,1505-1506 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   93.37 |    85.18 |     100 |   93.37 | 114-117,195-202   
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...d-provider.ts |   92.06 |    87.09 |     100 |   92.06 | ...72,287-293,316 
  ...h-settings.ts |   94.94 |    90.41 |     100 |   94.94 | ...30,708,724,734 
  fast-path.ts     |   90.99 |    81.38 |   95.45 |   90.99 | ...33-542,608-609 
  ...ration-sse.ts |   42.55 |    33.33 |     100 |   42.55 | 23-24,30,33-56    
  health-query.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-149             
  ...e-observer.ts |   89.89 |    83.24 |      96 |   89.89 | ...11-512,541-543 
  ...back-binds.ts |     100 |    88.88 |     100 |     100 | 32                
  ...-workspace.ts |    90.9 |    85.71 |     100 |    90.9 | ...30-131,142-143 
  ...iders-edit.ts |     100 |    82.14 |     100 |     100 | 58-60,65,81       
  ...ory-picker.ts |     100 |    86.95 |     100 |     100 | 36,66,92          
  ...sion-audit.ts |     100 |      100 |   93.33 |     100 |                   
  rate-limit.ts    |   92.68 |    88.29 |     100 |   92.68 | ...89-291,303-305 
  ...qwen-serve.ts |   84.08 |    80.89 |   76.15 |   84.08 | ...7893,7911-7915 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  ...-keepalive.ts |   94.25 |    87.96 |     100 |   94.25 | ...28,532-533,572 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  server.ts        |   91.02 |    90.54 |   73.27 |   91.02 | ...2902,2932-2933 
  ...-admission.ts |   98.24 |    94.73 |     100 |   98.24 | 79-80,303-304     
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...-redaction.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    95.23 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |   93.72 |    77.93 |     100 |   93.72 | ...51,854,867-869 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   92.18 |    88.37 |     100 |   92.18 | ...21-224,267-270 
  ...ace-agents.ts |   66.13 |    70.57 |   92.68 |   66.13 | ...2246,2256-2266 
  ...generation.ts |    95.4 |    82.35 |   66.66 |    95.4 | 55-56,78,92       
  ...-git-state.ts |     100 |    91.93 |    90.9 |     100 | 161,172,202,265   
  ...ace-inputs.ts |     100 |      100 |     100 |     100 |                   
  ...ace-memory.ts |      83 |    74.54 |     100 |      83 | ...30-537,597-604 
  ...ers-status.ts |   98.58 |       79 |     100 |   98.58 | 106,134,174,177   
  ...tion-store.ts |   89.67 |    88.27 |   92.59 |   89.67 | ...91-400,411-414 
  ...e-registry.ts |   94.98 |     90.5 |     100 |   94.98 | ...67-568,575-576 
  ...e-remember.ts |   98.23 |    92.56 |     100 |   98.23 | ...36,340-345,386 
  ...te-runtime.ts |    89.4 |    90.47 |     100 |    89.4 | ...89-190,258-279 
  ...me-storage.ts |     100 |      100 |     100 |     100 |                   
  ...visibility.ts |     100 |      100 |     100 |     100 |                   
  ...management.ts |   72.63 |    72.72 |      96 |   72.63 | ...88-889,896-900 
  ...lls-status.ts |     100 |    95.45 |     100 |     100 | 152               
  ...reconciler.ts |   91.63 |    84.09 |     100 |   91.63 | ...71-273,306-307 
 ...serve/acp-http |   79.37 |    80.17 |   94.04 |   79.37 |                   
  ...r-registry.ts |   96.92 |    94.87 |     100 |   96.92 | 184-187           
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   93.03 |    84.13 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |   73.78 |    76.77 |   91.37 |   73.78 | ...5363,5420-5426 
  index.ts         |   82.41 |    80.11 |   91.07 |   82.41 | ...2375,2459-2460 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  ...ach-budget.ts |     100 |      100 |     100 |     100 |                   
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   98.26 |    88.75 |     100 |   98.26 | 87-88,117         
  ...ort-stream.ts |       0 |        0 |       0 |       0 | 1                 
  ws-stream.ts     |   94.06 |    89.09 |     100 |   94.06 | 50,55,134,138-141 
 src/serve/auth    |   86.86 |     79.7 |   93.87 |   86.86 |                   
  device-flow.ts   |   96.35 |    80.57 |   97.61 |   96.35 | ...1358,1453,1519 
  ...w-provider.ts |   44.24 |    74.07 |   71.42 |   44.24 | ...23-284,297,301 
 ...rve/cdp-tunnel |   87.73 |    76.21 |    97.5 |   87.73 |                   
  ...r-emulator.ts |   93.27 |    77.77 |     100 |   93.27 | ...53-256,282-283 
  ...verse-link.ts |      88 |    76.19 |     100 |      88 | ...28-329,420-423 
  ...l-registry.ts |     100 |      100 |     100 |     100 |                   
  cdp-ws.ts        |   76.28 |    61.29 |    87.5 |   76.28 | ...13-217,223-228 
 ...nel/acceptance |    6.12 |    57.89 |   46.15 |    6.12 |                   
  ...helpers.d.mts |       0 |        0 |       0 |       0 | 1                 
  ...e-helpers.mjs |   97.64 |    70.96 |     100 |   97.64 | 22-23             
  ...mcp-smoke.mjs |       0 |        0 |       0 |       0 | 1-124             
  ...cceptance.mjs |       0 |        0 |       0 |       0 | 1-473             
  ...re-server.mjs |       0 |        0 |       0 |       0 | 1-59              
  ...ols-smoke.mjs |       0 |        0 |       0 |       0 | 1-268             
  real-tab.mjs     |       0 |        0 |       0 |       0 | 1-218             
  ...al-chrome.mjs |       0 |        0 |       0 |       0 | 1-223             
 .../conversations |   89.46 |    86.19 |   95.23 |   89.46 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |     100 |      100 |     100 |     100 |                   
  ...-ownership.ts |   85.33 |    81.31 |   88.46 |   85.33 | ...73-577,597-598 
  ...-workspace.ts |   88.26 |    82.53 |     100 |   88.26 | ...33-234,246-247 
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
 src/serve/fs      |   87.27 |    82.01 |     100 |   87.27 |                   
  audit.ts         |     100 |    96.15 |     100 |     100 | 204               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |    74.01 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.52 |    89.18 |     100 |   90.52 | 172-180           
  text-cursor.ts   |   88.23 |       90 |     100 |   88.23 | 74-77,92-95       
  ...ile-system.ts |   87.37 |    81.39 |     100 |   87.37 | ...2811,2821-2822 
 src/serve/live    |   77.87 |    69.57 |   90.13 |   77.87 |                   
  ...en-context.ts |   95.74 |    81.25 |     100 |   95.74 | ...0,66-67,99-100 
  discovery.ts     |   85.42 |    80.66 |    90.9 |   85.42 | ...69-575,588-589 
  ...structions.ts |     100 |      100 |     100 |     100 |                   
  ...oordinator.ts |   82.67 |    76.63 |   97.01 |   82.67 | ...1319,1351-1353 
  ...-installer.ts |    64.3 |    82.35 |   80.76 |    64.3 | ...45-446,460-472 
  ...oordinator.ts |   75.99 |    65.18 |   85.71 |   75.99 | ...1883,1974-1975 
  ...controller.ts |   67.82 |    79.31 |   72.72 |   67.82 | ...66-278,287-295 
  ...ak-to-user.ts |   96.66 |      100 |   83.33 |   96.66 | 37-38             
  ...sk-service.ts |   86.28 |    60.95 |   93.33 |   86.28 | ...1167,1191-1198 
  ...task-tools.ts |      99 |      100 |   85.71 |      99 | 205-206           
  ...redentials.ts |   96.26 |    93.47 |     100 |   96.26 | 91-94             
  ...me-session.ts |   65.63 |    57.24 |   88.88 |   65.63 | ...2270,2275-2282 
  ...up-context.ts |   94.85 |    77.39 |     100 |   94.85 | ...18,327-330,350 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/serve/routes  |   85.61 |    80.43 |   94.72 |   85.61 |                   
  a2ui-action.ts   |   96.84 |     88.5 |    87.5 |   96.84 | ...70-272,309-311 
  capabilities.ts  |   98.73 |    96.15 |     100 |   98.73 | 82                
  ...nel-notify.ts |   79.16 |    85.18 |     100 |   79.16 | ...03-104,120-126 
  ...l-webhooks.ts |   93.56 |    84.09 |     100 |   93.56 | ...42,292,332,334 
  daemon-status.ts |   85.71 |    83.33 |     100 |   85.71 | 101-108           
  goals.ts         |   98.92 |     90.9 |     100 |   98.92 | 143               
  health.ts        |   99.09 |    91.17 |     100 |   99.09 | 147               
  live-setup.ts    |   33.33 |     37.5 |      50 |   33.33 | ...18-123,130-135 
  live.ts          |   84.61 |    76.47 |     100 |   84.61 | ...04,106-111,131 
  permission.ts    |     100 |     92.3 |     100 |     100 | 50,98             
  ...uled-tasks.ts |   87.52 |    84.22 |   93.33 |   87.52 | ...1383,1426-1427 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |    85.5 |    81.38 |   91.26 |    85.5 | ...6194,6196-6197 
  sse-events.ts    |   86.85 |    85.64 |   94.11 |   86.85 | ...18-929,932,939 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  ...space-auth.ts |   85.55 |    75.64 |     100 |   85.55 | ...21-326,331,345 
  ...el-control.ts |   86.26 |    78.94 |     100 |   86.26 | ...17-318,339-347 
  ...management.ts |   90.35 |    78.94 |     100 |   90.35 | ...52-553,576-577 
  ...d-contacts.ts |   83.62 |    94.59 |     100 |   83.62 | 123,125-142       
  ...controller.ts |   83.11 |    79.31 |      90 |   83.11 | ...1033,1039,1042 
  ...extensions.ts |   88.46 |    75.19 |    93.1 |   88.46 | ...2037,2082-2083 
  ...-file-read.ts |      91 |    80.91 |     100 |      91 | ...20-621,624-625 
  ...file-write.ts |   89.58 |    79.16 |     100 |   89.58 | ...84,698-705,786 
  ...t-branches.ts |   75.43 |    66.66 |     100 |   75.43 | ...13-618,627-634 
  ...e-git-diff.ts |   97.32 |    90.56 |     100 |   97.32 | 161-162,189-191   
  ...ce-git-log.ts |     100 |    93.18 |     100 |     100 | 52,77,188         
  workspace-git.ts |   77.08 |    89.65 |     100 |   77.08 | 97-118            
  ...github-prs.ts |   88.26 |    63.46 |     100 |   88.26 | ...38-239,264-265 
  ...-lifecycle.ts |   95.23 |    75.75 |     100 |   95.23 | ...50-151,186-187 
  ...management.ts |   87.47 |       85 |     100 |   87.47 | ...1733,1743-1748 
  ...cp-control.ts |    73.2 |    67.54 |   85.71 |    73.2 | ...27-633,644-645 
  ...ace-models.ts |   95.53 |    89.74 |     100 |   95.53 | ...52-157,296-297 
  ...ermissions.ts |    77.9 |    72.41 |     100 |    77.9 | ...69-277,298-316 
  ...e-settings.ts |   75.04 |    72.99 |     100 |   75.04 | ...79-690,696-697 
  ...tup-github.ts |   77.97 |    70.58 |   84.21 |   77.97 | ...46-352,397-398 
  ...ace-skills.ts |    76.9 |    87.15 |     100 |    76.9 | ...29-354,360-394 
  ...ace-status.ts |   82.94 |     74.5 |     100 |   82.94 | ...84-486,490-491 
  ...pace-tools.ts |   75.94 |    69.69 |   66.66 |   75.94 | ...59-164,193-194 
  ...pace-trust.ts |   76.92 |     67.1 |      80 |   76.92 | ...38-343,351-352 
  ...pace-voice.ts |   91.33 |    81.02 |     100 |   91.33 | ...70-673,676-678 
 src/serve/server  |   91.84 |     89.3 |      97 |   91.84 |                   
  access-log.ts    |    98.7 |    97.18 |     100 |    98.7 | 118,189           
  ...er-helpers.ts |   63.82 |    77.96 |   81.81 |   63.82 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.29 |       75 |     100 |   97.29 | 17                
  ...r-response.ts |   86.92 |     73.6 |     100 |   86.92 | ...68,785,848-857 
  fs-factory.ts    |     100 |    94.54 |     100 |     100 | 42,103,159        
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...list-cache.ts |   99.01 |    95.52 |     100 |   99.01 | 184-185           
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |       80 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.13 |    95.09 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |      95 |     87.5 |     100 |      95 | 182-188           
  ...on-archive.ts |   89.73 |     86.4 |   97.36 |   89.73 | ...78,905,933-934 
  ...ion-export.ts |     100 |    94.73 |     100 |     100 | 64                
  session-list.ts  |   95.86 |    93.37 |     100 |   95.86 | ...-848,1026-1030 
  telemetry.ts     |   99.07 |    97.43 |     100 |   99.07 | ...55,670,815-817 
 src/serve/voice   |    92.7 |    91.48 |   97.67 |    92.7 |                   
  ...ice-config.ts |   84.81 |       30 |     100 |   84.81 | 91-100,104-105    
  voice-ws.ts      |   91.58 |    93.44 |      96 |   91.58 | ...68,483,521-523 
  ...oordinator.ts |     100 |    98.21 |     100 |     100 | 176               
 ...kspace-service |    90.9 |    87.96 |    91.3 |    90.9 |                   
  index.ts         |   90.41 |    87.29 |      90 |   90.41 | ...1505-1509,1512 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services      |   92.69 |    89.52 |   98.06 |   92.69 |                   
  ...mandLoader.ts |     100 |    88.88 |     100 |     100 | 106-120           
  ...killLoader.ts |   97.19 |    85.29 |     100 |   97.19 | 142,153-154       
  ...andService.ts |   98.73 |      100 |     100 |   98.73 | 107               
  ...mandLoader.ts |   87.09 |    83.07 |     100 |   87.09 | ...35-340,345-350 
  ...omptLoader.ts |   79.55 |    88.29 |   83.33 |   79.55 | ...48,178,245-246 
  ...mandLoader.ts |   97.77 |    92.15 |     100 |   97.77 | 176,183-184       
  ...nd-factory.ts |   91.42 |    91.66 |     100 |   91.42 | 128,137-144       
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...ndMetadata.ts |   98.23 |    96.72 |     100 |   98.23 | 83,87             
  commandUtils.ts  |      96 |     90.9 |     100 |      96 | 48                
  ...and-parser.ts |   90.69 |    85.71 |     100 |   90.69 | 63-66             
  ...ionService.ts |     100 |      100 |     100 |     100 |                   
  prompt-stash.ts  |   96.66 |    92.85 |     100 |   96.66 | 34-35             
  ...tree-lease.ts |   92.14 |    92.42 |     100 |   92.14 | ...91-296,329-330 
  ...low-loader.ts |     100 |    96.15 |     100 |     100 | 88                
  setup-github.ts  |    90.8 |    80.95 |     100 |    90.8 | ...49-450,457-458 
  ...-args-file.ts |   93.93 |    91.66 |    87.5 |   93.93 | 208-210,224-230   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |   98.64 |    95.77 |     100 |   98.64 | 116,142-143       
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  voice-service.ts |    90.4 |    87.87 |     100 |    90.4 | ...81,288,353-358 
  ...e-settings.ts |     100 |    95.23 |     100 |     100 | 19                
  ...ranscriber.ts |   91.77 |    87.11 |   97.22 |   91.77 | ...99-901,904-906 
 ...rvices/insight |     100 |      100 |     100 |     100 |                   
  dates.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   88.91 |     86.8 |   96.15 |   88.91 |                   
  DataProcessor.ts |   88.28 |    86.77 |   94.73 |   88.28 | ...1362,1366-1373 
  ...tGenerator.ts |   98.24 |    85.71 |     100 |   98.24 | 47                
  ...teRenderer.ts |     100 |      100 |     100 |     100 |                   
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.27 |    94.04 |     100 |   97.27 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.41 |    95.65 |     100 |   97.41 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/services/tips |   97.27 |    84.61 |     100 |   97.27 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  tipHistory.ts    |   92.59 |       70 |     100 |   92.59 | ...24,146,153,162 
  tipRegistry.ts   |     100 |      100 |     100 |     100 |                   
  tipScheduler.ts  |     100 |    91.66 |     100 |     100 | 55                
 src/startup       |   88.99 |    83.47 |    90.9 |   88.99 |                   
  ...p-prefetch.ts |   98.09 |    94.23 |    87.5 |   98.09 | 50,209,225-226    
  ...reeStartup.ts |   80.53 |     74.6 |     100 |   80.53 | ...94,403,409-412 
 src/test-utils    |   94.09 |    79.16 |   77.77 |   94.09 |                   
  ci-env.ts        |      88 |     62.5 |     100 |      88 | 22-23,28          
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...mised-lock.ts |     100 |      100 |   66.66 |     100 |                   
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   73.33 |    75.65 |   68.47 |   73.33 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   74.45 |    72.14 |   69.44 |   74.45 | ...4188,4304-4310 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |    30.3 |      100 |       0 |    30.3 | 26-76             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.91 |    97.14 |     100 |   95.91 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  ...ractiveUI.tsx |   71.42 |     74.5 |    62.5 |   71.42 | ...10,337,404-409 
  ...inePresets.ts |   96.27 |    83.87 |     100 |   96.27 | ...97,402,410-412 
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   58.76 |    66.66 |   51.06 |   58.76 |                   
  AuthDialog.tsx   |   59.01 |     42.1 |   16.66 |   59.01 | ...25,332-354,358 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  ...etupSteps.tsx |   60.21 |    70.73 |   57.69 |   60.21 | ...90,794,803,806 
  useAuth.ts       |   94.83 |       75 |     100 |   94.83 | ...33-234,253-259 
  ...rSetupFlow.ts |   43.18 |    33.33 |      50 |   43.18 | ...78-399,416-459 
 src/ui/commands   |   83.61 |    83.77 |   90.02 |   83.61 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...or-command.ts |     100 |    95.65 |     100 |     100 | 104,182           
  agentsCommand.ts |   83.78 |      100 |      60 |   83.78 | 30-32,42-44       
  ...odeCommand.ts |    93.1 |    95.23 |     100 |    93.1 | 77-82             
  arenaCommand.ts  |   63.89 |    65.71 |   65.21 |   63.89 | ...01-606,691-699 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  branchCommand.ts |     100 |      100 |     100 |     100 |                   
  btwCommand.ts    |   94.32 |    77.41 |     100 |   94.32 | 35-36,114-119     
  bugCommand.ts    |     100 |    77.77 |     100 |     100 | 27,61             
  cdCommand.ts     |    92.3 |    82.75 |     100 |    92.3 | ...,94-99,178,187 
  clearCommand.ts  |    80.9 |    70.83 |     100 |    80.9 | ...28-129,137-146 
  ...essCommand.ts |   68.06 |    54.05 |      75 |   68.06 | ...96-197,211-214 
  ...astCommand.ts |   84.17 |       75 |     100 |   84.17 | ...,91-97,125-130 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   69.07 |     72.6 |   84.61 |   69.07 | ...78-611,622-623 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   81.64 |    87.67 |    90.9 |   81.64 | ...73-278,325-332 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 25                
  doctorCommand.ts |   70.16 |    84.61 |      95 |   70.16 | ...29-679,682-816 
  dreamCommand.ts  |   85.45 |    88.88 |     100 |   85.45 | 58-65             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...rt-command.ts |   80.48 |       75 |     100 |   80.48 | 49-54,69-72,93-98 
  effort-utils.ts  |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   98.25 |    91.02 |     100 |   98.25 | ...81,198-199,364 
  ...onsCommand.ts |   52.31 |    56.25 |   69.23 |   52.31 | ...09,277-329,390 
  forgetCommand.ts |     100 |       90 |     100 |     100 | 59                
  forkCommand.ts   |     100 |    94.11 |     100 |     100 | 96,147            
  goalCommand.ts   |     100 |    96.49 |     100 |     100 | 139,192           
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ...oryCommand.ts |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   81.13 |    65.71 |   85.71 |   81.13 | ...,86-93,131-132 
  ideCommand.ts    |   60.75 |    64.28 |   41.17 |   60.75 | ...05-306,310-324 
  ...figCommand.ts |   52.83 |    81.25 |      70 |   52.83 | ...74-319,321-330 
  initCommand.ts   |   91.86 |       80 |     100 |   91.86 | 48,83-88          
  ...ghtCommand.ts |   77.87 |    71.42 |     100 |   77.87 | ...44-245,250-272 
  ...ageCommand.ts |   94.44 |    90.14 |     100 |   94.44 | ...13-214,241-251 
  learn-command.ts |     100 |      100 |     100 |     100 |                   
  lspCommand.ts    |     100 |    86.95 |     100 |     100 | 31,101-102        
  mcpCommand.ts    |     100 |      100 |     100 |     100 |                   
  memoryCommand.ts |     100 |      100 |     100 |     100 |                   
  modelCommand.ts  |   85.02 |    82.53 |     100 |   85.02 | ...1089,1123-1128 
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  planCommand.ts   |   78.82 |    76.92 |     100 |   78.82 | 30-35,51-56,68-73 
  quitCommand.ts   |     100 |      100 |     100 |     100 |                   
  recapCommand.ts  |   21.81 |      100 |      50 |   21.81 | 24-73             
  ...ns-command.ts |   98.83 |    81.81 |     100 |   98.83 | 100               
  ...berCommand.ts |     100 |     87.5 |     100 |     100 | 46                
  renameCommand.ts |    89.6 |       90 |     100 |    89.6 | ...72-176,212-219 
  ...oreCommand.ts |   90.96 |    86.04 |     100 |   90.96 | ...41-146,177-178 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  rewindCommand.ts |   81.25 |      100 |      50 |   81.25 | 20-22             
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   89.47 |       75 |      80 |   89.47 | 54-59             
  skillsCommand.ts |   78.82 |    81.81 |     100 |   78.82 | 37-52,78,97       
  statsCommand.ts  |   90.65 |    76.73 |     100 |   90.65 | ...30-733,825-832 
  ...ineCommand.ts |     100 |      100 |     100 |     100 |                   
  ...aryCommand.ts |   73.04 |     82.3 |      90 |   73.04 | ...20-547,561-565 
  tasksCommand.ts  |   77.22 |    72.13 |     100 |   77.22 | ...46-150,172-177 
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  trustCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...te-command.ts |     100 |    94.11 |     100 |     100 | 74,148            
  vimCommand.ts    |   54.54 |      100 |      50 |   54.54 | 19-29             
  voice-command.ts |   93.57 |       88 |     100 |   93.57 | 35,97-102         
  ...owsCommand.ts |   92.92 |       85 |   66.66 |   92.92 | ...72-177,276-281 
 src/ui/components |   72.79 |    79.77 |   77.58 |   72.79 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |   65.57 |      100 |      50 |   65.57 | 69-90             
  ApiKeyInput.tsx  |       0 |        0 |       0 |       0 | 1-97              
  AppHeader.tsx    |    88.7 |       75 |     100 |    88.7 | 36,38-43,45       
  ...odeDialog.tsx |   87.24 |    72.22 |   33.33 |   87.24 | ...85,233-238,245 
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   95.65 |    66.66 |     100 |   95.65 | 27,52             
  ...TextInput.tsx |   88.65 |    90.41 |     100 |   88.65 | ...84-286,300-302 
  Composer.tsx     |   94.49 |    66.66 |     100 |   94.49 | ...-76,88,143,157 
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   68.42 |    57.14 |     100 |   68.42 | 16-17,31-32,42-50 
  CronPill.tsx     |     100 |    93.75 |     100 |     100 | 19                
  ...ification.tsx |      84 |       60 |     100 |      84 | 23-24,40-42       
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   11.28 |      100 |       0 |   11.28 | 71-598            
  DiffDialog.tsx   |    53.5 |     37.5 |   69.23 |    53.5 | ...32-737,747-760 
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  EffortDialog.tsx |   97.36 |      100 |     100 |   97.36 | 55-56             
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...hProgress.tsx |    87.8 |    33.33 |     100 |    87.8 | 28-31,56          
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   81.27 |    69.23 |      50 |   81.27 | ...06,245,267-272 
  ...ngSpinner.tsx |   68.42 |    85.71 |      50 |   68.42 | 35-52,73,80-81    
  GoalPill.tsx     |   93.51 |    81.81 |     100 |   93.51 | 37-38,106-109,123 
  Header.tsx       |   98.65 |    94.73 |     100 |   98.65 | 173,175           
  Help.tsx         |   98.33 |       90 |     100 |   98.33 | ...25,382,448-449 
  ...emDisplay.tsx |   79.69 |    67.61 |     100 |   79.69 | ...17,520,523-529 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   84.26 |    82.94 |      80 |   84.26 | ...2215,2236,2332 
  ...Shortcuts.tsx |     100 |       88 |     100 |     100 | 98,119            
  ...Indicator.tsx |   98.18 |    97.82 |     100 |   98.18 | 161-162           
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   95.58 |    95.06 |   46.15 |   95.58 | ...79,482-486,489 
  MemoryDialog.tsx |   86.59 |    80.15 |     100 |   86.59 | ...34-435,485,553 
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   85.22 |    74.08 |     100 |   85.22 | ...1041,1097,1099 
  ...tsDisplay.tsx |     100 |    97.22 |     100 |     100 | 270               
  ...fications.tsx |   16.66 |      100 |       0 |   16.66 | 14-56             
  ...onsDialog.tsx |    2.13 |      100 |       0 |    2.13 | 62-133,148-1004   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...icePrompt.tsx |   92.64 |    85.71 |     100 |   92.64 | 102-106,134-139   
  PrepareLabel.tsx |   91.66 |    77.27 |     100 |   91.66 | 73-75,77-79,110   
  ...atePrompt.tsx |    8.57 |      100 |       0 |    8.57 | 24-55,58-134      
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   85.25 |    88.46 |     100 |   85.25 | 121-147           
  ...dSelector.tsx |   92.79 |    82.65 |     100 |   92.79 | ...19-323,354-370 
  ...ionPicker.tsx |   83.66 |    72.13 |     100 |   83.66 | ...96,402,444-466 
  ...onPreview.tsx |   93.58 |    83.78 |     100 |   93.58 | ...,70-71,195-197 
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   92.06 |    86.36 |   83.33 |   92.06 | ...,70-72,120-123 
  ...tedDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   71.49 |    73.89 |   69.23 |   71.49 | ...1244,1250-1251 
  ...ionDialog.tsx |    92.3 |    96.15 |   33.33 |    92.3 | 60-63,68-75,164   
  ...putPrompt.tsx |    15.9 |      100 |       0 |    15.9 | 20-63             
  ...Indicator.tsx |   57.14 |      100 |       0 |   57.14 | 12-15             
  ...MoreLines.tsx |      28 |      100 |       0 |      28 | 18-40             
  ...iewDialog.tsx |   97.77 |    87.67 |     100 |   97.77 | ...97,305-307,324 
  ...tsDisplay.tsx |   95.86 |       75 |     100 |   95.86 | 67-71             
  ...ionPicker.tsx |       0 |        0 |       0 |       0 | 1-172             
  ...tivityTab.tsx |    3.94 |      100 |       0 |    3.94 | 27-275            
  StatsDialog.tsx  |    8.64 |      100 |       0 |    8.64 | ...76-111,130-322 
  StatsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ciencyTab.tsx |    78.9 |    56.52 |     100 |    78.9 | ...26,213,262-288 
  ...atmapView.tsx |    8.98 |      100 |       0 |    8.98 | 20-107            
  ...essionTab.tsx |      80 |    66.66 |     100 |      80 | ...70-277,283-300 
  ...ineDialog.tsx |    93.9 |    86.88 |     100 |    93.9 | ...20,282,302-304 
  ...yTodoList.tsx |   96.36 |    88.23 |     100 |   96.36 | 138-141           
  ...nsDisplay.tsx |   95.62 |    87.09 |     100 |   95.62 | ...24-125,273-275 
  ...inalImage.tsx |     100 |    93.93 |     100 |     100 | 75,129            
  ThemeDialog.tsx  |   89.95 |    46.15 |      75 |   89.95 | ...71-173,243-245 
  Tips.tsx         |   93.54 |       75 |     100 |   93.54 | 39-40             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  TrustDialog.tsx  |     100 |    83.33 |     100 |     100 | 72-87             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...Indicator.tsx |    92.5 |     87.5 |     100 |    92.5 | 50-53             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
  ...xitDialog.tsx |   80.36 |    43.47 |      60 |   80.36 | ...24-238,248-251 
  ...odeVisuals.ts |   97.22 |    85.71 |     100 |   97.22 | 25                
  ...s-helpers.tsx |   66.25 |    81.25 |      50 |   66.25 | 25-32,46-53,62-72 
 ...nts/agent-view |   55.05 |    69.09 |      50 |   55.05 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |   21.05 |      100 |       0 |   21.05 | 21-39             
  ...tComposer.tsx |   69.48 |    33.33 |   66.66 |   69.48 | ...51,269,277-279 
  AgentFooter.tsx  |   15.38 |      100 |       0 |   15.38 | 28-65             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.51 |    70.53 |   60.86 |   45.51 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.77 |      100 |       0 |    9.77 | 27-166            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   85.34 |    84.91 |   92.98 |   85.34 |                   
  ...sksDialog.tsx |   81.87 |    82.77 |   85.71 |   81.87 | ...1853,1965-1971 
  ...TasksPill.tsx |   78.84 |    94.28 |     100 |   78.84 | 64,109-129        
  ...gentPanel.tsx |   97.08 |    86.31 |     100 |   97.08 | 132,442-446,520   
  agent-forest.ts  |    99.2 |    93.93 |     100 |    99.2 | 258               
  ...Visibility.ts |     100 |      100 |     100 |     100 |                   
  ...e-overlay.tsx |    88.2 |    76.47 |     100 |    88.2 | ...36-138,140-142 
 ...nts/extensions |   84.32 |    76.78 |   83.33 |   84.32 |                   
  ...gerDialog.tsx |   82.15 |    76.08 |     100 |   82.15 | ...91-198,258,260 
  TabBar.tsx       |   97.29 |    88.88 |     100 |   97.29 | 33                
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   46.26 |       85 |   58.82 |   46.26 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |       0 |        0 |       0 |       0 | 1-145             
  ...nListStep.tsx |   75.26 |    88.37 |   66.66 |   75.26 | ...53,174,203-209 
  ...electStep.tsx |       0 |        0 |       0 |       0 | 1-83              
  ...nfirmStep.tsx |   16.32 |      100 |       0 |   16.32 | 28-74             
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
 ...xtensions/tabs |   71.92 |    68.21 |   70.83 |   71.92 |                   
  DiscoverTab.tsx  |   68.22 |    67.66 |   55.55 |   68.22 | ...93,656-660,664 
  InstalledTab.tsx |   75.49 |    67.44 |   83.33 |   75.49 | ...77,782-783,820 
  SourcesTab.tsx   |   71.67 |    70.47 |   77.77 |   71.67 | ...28,547,621-633 
 ...tensions/views |    50.7 |    52.38 |   20.83 |    50.7 |                   
  ...tionsView.tsx |   73.75 |    56.36 |   66.66 |   73.75 | ...30,353,369-374 
  ...tionsView.tsx |   43.45 |    44.82 |    6.66 |   43.45 | ...98-405,408-420 
  ...etailView.tsx |    9.24 |      100 |       0 |    9.24 | 40-67,70-163      
 ...mponents/hooks |   87.11 |    81.37 |   91.89 |   87.11 |                   
  ...rListBody.tsx |   95.29 |    85.18 |     100 |   95.29 | 95-98             
  ...etailStep.tsx |   75.32 |    71.42 |      60 |   75.32 | ...56-169,173-186 
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entHeader.tsx |     100 |    85.71 |     100 |     100 | 47                
  ...rListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...abledStep.tsx |     100 |      100 |     100 |     100 |                   
  ...sListStep.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   72.29 |    70.49 |     100 |   72.29 | ...51,563-568,572 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-13              
  ...erGrouping.ts |     100 |      100 |     100 |     100 |                   
  sourceLabels.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |   40.91 |    63.44 |   70.58 |   40.91 |                   
  ...ealthPill.tsx |     100 |      100 |     100 |     100 |                   
  ...entDialog.tsx |   32.09 |    26.19 |      40 |   32.09 | ...12,914,927-933 
  ...valDialog.tsx |   15.06 |      100 |       0 |   15.06 | 40-109            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-35              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |      97 |       95 |     100 |      97 | 24,113-114        
 ...ents/mcp/steps |   53.94 |    73.51 |   57.14 |   53.94 |                   
  ...icateStep.tsx |    5.65 |      100 |       0 |    5.65 | 40-66,69-308      
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |     100 |      100 |     100 |     100 |                   
  ...eListStep.tsx |   99.09 |    97.36 |     100 |   99.09 | 71                
  ...etailStep.tsx |   62.83 |       60 |   33.33 |   62.83 | ...87-296,307-332 
  ...rListStep.tsx |   88.53 |    81.25 |     100 |   88.53 | ...64,170,175-180 
  ...etailStep.tsx |    10.3 |      100 |       0 |    10.3 | ...1,67-79,82-140 
  ToolListStep.tsx |   69.29 |       50 |     100 |   69.29 | ...23,126,135-144 
 ...nents/messages |   90.35 |    86.92 |   85.71 |   90.35 |                   
  ...orMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...ionDialog.tsx |   89.23 |     84.9 |   81.81 |   89.23 | ...75,593,611-613 
  BtwMessage.tsx   |     100 |      100 |     100 |     100 |                   
  ...upDisplay.tsx |     100 |    94.73 |     100 |     100 | ...43,289,402,432 
  ...onMessage.tsx |   92.06 |    82.35 |     100 |   92.06 | 58-60,62,64       
  ...nMessages.tsx |   94.11 |    95.91 |   76.92 |   94.11 | ...47-349,352-355 
  DiffRenderer.tsx |   93.17 |    86.02 |     100 |   93.17 | ...07,235-236,302 
  ...tsDisplay.tsx |   97.08 |    77.77 |     100 |   97.08 | 95,97,106         
  ...usMessage.tsx |   81.73 |     65.9 |      75 |   81.73 | ...10-214,222,245 
  ...tsDisplay.tsx |   95.52 |    88.31 |     100 |   95.52 | ...40,142,175-180 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...edMessage.tsx |   21.05 |      100 |       0 |   21.05 | 23-39             
  ...sMessages.tsx |   59.04 |       50 |    37.5 |   59.04 | ...21-126,147-159 
  ...ryMessage.tsx |   13.63 |      100 |       0 |   13.63 | 23-64             
  ...onMessage.tsx |   91.87 |    82.63 |     100 |   91.87 | ...49-651,658-660 
  ...upMessage.tsx |   98.38 |    95.38 |     100 |   98.38 | 188-191,422       
  ToolMessage.tsx  |   93.06 |    86.32 |   93.75 |   93.06 | ...1037,1082-1084 
 ...ponents/shared |   86.29 |    82.42 |   94.17 |   86.29 |                   
  ...ctionList.tsx |     100 |      100 |      75 |     100 |                   
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  ...rBoundary.tsx |     100 |      100 |     100 |     100 |                   
  MaxSizedBox.tsx  |   84.71 |    87.05 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |    83.33 |     100 |     100 | 73,93-95          
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   81.48 |    84.84 |     100 |   81.48 | 46-66,73-76       
  StaticRender.tsx |     100 |      100 |     100 |     100 |                   
  TextInput.tsx    |    80.8 |    67.24 |      80 |    80.8 | ...36-240,252-258 
  ...ontroller.tsx |     100 |    81.81 |     100 |     100 | 59-62             
  ...apsedTime.tsx |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...lizedList.tsx |   91.49 |    86.66 |   83.33 |   91.49 | ...18-846,859,959 
  text-buffer.ts   |   85.98 |    81.81 |   97.91 |   85.98 | ...2664,2762-2763 
  ...er-actions.ts |   73.93 |    67.22 |     100 |   73.93 | ...32-733,934-936 
 ...ponents/skills |    3.96 |      100 |       0 |    3.96 |                   
  ...gerDialog.tsx |    3.96 |      100 |       0 |    3.96 | 79-137,140-681    
 ...ents/subagents |   30.87 |        0 |       0 |   30.87 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-11              
  reducers.tsx     |    12.1 |      100 |       0 |    12.1 | 33-190            
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   10.95 |      100 |       0 |   10.95 | ...1,56-57,60-102 
 ...bagents/create |    9.13 |      100 |       0 |    9.13 |                   
  ...ionWizard.tsx |    7.28 |      100 |       0 |    7.28 | 34-299            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    4.26 |      100 |       0 |    4.26 | 27-331            
  ...tionInput.tsx |    8.63 |      100 |       0 |    8.63 | 23-177            
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |    21.6 |    59.52 |   27.27 |    21.6 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |   35.61 |    59.52 |     100 |   35.61 | ...21-433,438-440 
  ...iewerStep.tsx |   13.72 |      100 |       0 |   13.72 | 18-73             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...mponents/views |    70.1 |    72.89 |   61.11 |    70.1 |                   
  ContextUsage.tsx |   71.49 |    64.86 |      80 |   71.49 | ...30-436,473-567 
  DoctorReport.tsx |     9.8 |      100 |       0 |     9.8 | 25-54,57-131      
  ...sionsList.tsx |   88.05 |       75 |     100 |   88.05 | 70-77             
  McpStatus.tsx    |   92.01 |     73.8 |     100 |   92.01 | ...36,175-177,262 
  SkillsList.tsx   |   20.51 |      100 |       0 |   20.51 | 17-20,27-57       
  ToolsList.tsx    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   84.16 |    81.76 |   85.13 |   84.16 |                   
  ...ewContext.tsx |   64.83 |    88.88 |      50 |   64.83 | ...16-219,225-235 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |    79.56 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 235-236           
  ...deContext.tsx |      80 |     87.5 |      75 |      80 | ...11-112,118-120 
  ...rtContext.tsx |     100 |      100 |     100 |     100 |                   
 src/ui/daemon     |   88.35 |    73.51 |   95.45 |   88.35 |                   
  ...ui-adapter.ts |   88.35 |    73.51 |   95.45 |   88.35 | ...74,792-793,879 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   85.95 |    83.96 |   87.78 |   85.95 |                   
  ...dProcessor.ts |   85.53 |    85.13 |     100 |   85.53 | ...-970,1017-1018 
  ...ention-ref.ts |   97.72 |       84 |     100 |   97.72 | 65                
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...esourceRef.ts |     100 |      100 |     100 |     100 |                   
  ...completion.ts |     100 |    95.45 |     100 |     100 | 95                
  ...ention-ref.ts |     100 |      100 |     100 |     100 |                   
  ...dProcessor.ts |   94.62 |    73.58 |     100 |   94.62 | ...87-288,293-294 
  ...dProcessor.ts |   86.79 |    71.86 |   83.33 |   86.79 | ...1529,1558-1562 
  ...rt-command.ts |     100 |      100 |     100 |     100 |                   
  ...sced-flush.ts |     100 |      100 |     100 |     100 |                   
  ...ng-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...oice-input.ts |   92.36 |    81.95 |   66.66 |   92.36 | ...00,502-503,658 
  ...ke-repaint.ts |     100 |      100 |     100 |     100 |                   
  ...amingState.ts |   12.22 |      100 |       0 |   12.22 | 54-157            
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...dScrollbar.ts |     100 |      100 |     100 |     100 |                   
  ...ationFrame.ts |      42 |       75 |     100 |      42 | 42-44,53-59,62-87 
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...enaCommand.ts |      85 |      100 |     100 |      85 | 23-24,29          
  ...aInProcess.ts |   27.92 |       80 |      25 |   27.92 | ...69-170,173-175 
  ...Completion.ts |   86.44 |    88.48 |     100 |   86.44 | ...14-515,525-541 
  ...ifications.ts |   87.82 |    96.77 |     100 |   87.82 | 138-152           
  ...tIndicator.ts |   88.28 |    81.57 |     100 |   88.28 | ...66,175,179-187 
  ...waySummary.ts |   96.26 |       75 |     100 |   96.26 | 126-128,170       
  ...ndTaskView.ts |   94.89 |    77.55 |     100 |   94.89 | 164-168,257,263   
  ...chedScroll.ts |     100 |      100 |     100 |     100 |                   
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...nchCommand.ts |   95.53 |    83.01 |     100 |   95.53 | ...64-165,289-292 
  ...ompletion.tsx |   97.09 |    87.09 |     100 |   97.09 | ...23-324,334-335 
  ...dMigration.ts |    92.1 |    88.88 |     100 |    92.1 | 42-44             
  useCompletion.ts |   96.29 |    90.56 |     100 |   96.29 | ...17-218,222-223 
  ...nitMessage.ts |     100 |      100 |     100 |     100 |                   
  ...extualTips.ts |   78.26 |       50 |     100 |   78.26 | ...2,75-79,96-104 
  ...eteCommand.ts |   89.52 |    90.69 |     100 |   89.52 | ...98-106,114-115 
  ...ialogClose.ts |   36.11 |       10 |     100 |   36.11 | ...89-195,202-207 
  useDiffData.ts   |   11.62 |      100 |       0 |   11.62 | 44-87             
  ...oublePress.ts |   53.12 |       75 |     100 |   53.12 | 33-35,41-54       
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...Completion.ts |   99.12 |    97.67 |     100 |   99.12 | 182-183           
  ...ionUpdates.ts |   93.72 |    92.98 |     100 |   93.72 | ...87-291,314-320 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |    63.9 |    76.47 |   66.66 |    63.9 | ...66-168,190-191 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |    93.33 |     100 |     100 | 62                
  ...ggestions.tsx |   96.47 |    78.94 |     100 |   96.47 | 121,155-156       
  ...miniStream.ts |   87.36 |    84.33 |   77.77 |   87.36 | ...5692-5694,5696 
  ...BranchName.ts |     100 |    94.44 |     100 |     100 | 54                
  ...oryManager.ts |   98.38 |    98.85 |     100 |   98.38 | 141-144           
  ...ooksDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |   92.59 |    85.71 |     100 |   92.59 | 63-64,72,94-96    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 69                
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |   22.58 |      100 |      50 |   22.58 | 11-32,44-85       
  ...gIndicator.ts |     100 |    96.66 |     100 |     100 | 109               
  useLogger.ts     |      16 |      100 |       0 |      16 | 15-45             
  useMCPHealth.ts  |   10.52 |      100 |       0 |   10.52 | 36-75             
  ...cpApproval.ts |   93.12 |    86.11 |     100 |   93.12 | ...24-127,139-140 
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...moryDialog.ts |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |   83.14 |    78.57 |     100 |   83.14 | 54-63,74-79       
  ...ssageQueue.ts |     100 |     97.4 |     100 |     100 | 175,262           
  ...delCommand.ts |     100 |       96 |     100 |     100 | 61                
  ...ouseEvents.ts |   94.89 |       95 |   83.33 |   94.89 | 78-82             
  ...raseCycler.ts |   84.74 |    76.47 |     100 |   84.74 | ...49,52-53,69-71 
  ...rredEditor.ts |   58.33 |    22.22 |     100 |   58.33 | 23-27,29-33       
  ...derUpdates.ts |   85.29 |    80.28 |    92.3 |   85.29 | ...36,351-361,441 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   89.13 |     86.9 |     100 |   89.13 | ...61-463,496-506 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   95.34 |    77.14 |     100 |   95.34 | 124-125,227-232   
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.19 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.35 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |   85.48 |    58.33 |     100 |   85.48 | 22-28,40,71       
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.85 |    85.13 |   94.73 |   82.85 | ...78-680,688-724 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.32 |    93.93 |     100 |   97.32 | ...18-422,518-525 
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...mInProcess.ts |   27.35 |       80 |      25 |   27.35 | ...82-183,186-188 
  ...tification.ts |     100 |     87.5 |     100 |     100 | 50                
  ...alProgress.ts |   67.34 |    58.82 |   66.66 |   67.34 | 52-53,61-68,79-85 
  ...rminalSize.ts |     100 |      100 |     100 |     100 |                   
  ...emeCommand.ts |    79.2 |    35.29 |     100 |    79.2 | ...15-116,120-121 
  useTimer.ts      |   97.59 |    94.73 |     100 |   97.59 | 17-18             
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...rustModify.ts |     100 |    90.47 |     100 |     100 | 112,134           
  useTurnDiffs.ts  |   95.12 |    78.57 |     100 |   95.12 | 133-134,156-157   
  ...elcomeBack.ts |   87.36 |     90.9 |     100 |   87.36 | ...,94-96,114-115 
  ...reeSession.ts |   93.75 |       70 |     100 |   93.75 | 47-48,72          
  vim.ts           |      74 |    67.56 |   69.23 |      74 | ...1854-1861,1869 
 src/ui/layouts    |   91.25 |    89.47 |     100 |   91.25 |                   
  ...AppLayout.tsx |   90.99 |     87.5 |     100 |   90.99 | 61-63,111-116,152 
  ...AppLayout.tsx |   91.66 |    92.85 |     100 |   91.66 | 75-80             
 src/ui/models     |   80.72 |       80 |   71.42 |   80.72 |                   
  ...ableModels.ts |   80.72 |       80 |   71.42 |   80.72 | ...,61-71,125-127 
 ...noninteractive |     100 |      100 |    6.66 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    6.66 |     100 |                   
 src/ui/selection  |   93.56 |    86.13 |     100 |   93.56 |                   
  screen-buffer.ts |   94.73 |    64.28 |     100 |   94.73 | 51-52             
  ...ion-coords.ts |     100 |      100 |     100 |     100 |                   
  ...ction-span.ts |   93.81 |     92.1 |     100 |   93.81 | ...1,45-46,99-100 
  ...tion-state.ts |     100 |      100 |     100 |     100 |                   
  ...ction-text.ts |   93.85 |    93.44 |     100 |   93.85 | 30-34,130-131     
  ...selection.tsx |   91.88 |    78.57 |     100 |   91.88 | ...16-417,446-447 
 src/ui/state      |      95 |    81.81 |     100 |      95 |                   
  extensions.ts    |      95 |    81.81 |     100 |      95 | 69-70,89          
 src/ui/themes     |    98.5 |    73.17 |     100 |    98.5 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |   99.23 |    97.05 |     100 |   99.23 | 277-278           
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  ...inal-theme.ts |   88.59 |    85.96 |     100 |   88.59 | ...57-261,266-270 
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   88.68 |    84.52 |     100 |   88.68 | ...83-392,397-398 
  theme.ts         |     100 |    38.02 |     100 |     100 | ...34-449,457-461 
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   87.64 |     85.7 |   95.81 |   87.64 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   80.07 |     75.6 |     100 |   80.07 | ...70,274,332-333 
  ...wnDisplay.tsx |   92.87 |     93.5 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   93.63 |    81.77 |   95.23 |   93.63 | ...47-750,803-808 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |    96.7 |     87.5 |     100 |    96.7 | 170-177,278       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |    52.9 |    74.15 |    92.3 |    52.9 | ...29,632-641,644 
  commandUtils.ts  |   98.46 |    92.38 |     100 |   98.46 | 121,149-150,356   
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  formatters.ts    |   94.87 |    98.24 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   91.42 |       95 |     100 |   91.42 | 32-34             
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |       95 |     100 |     100 | 44,103            
  historyUtils.ts  |   96.07 |    97.14 |     100 |   96.07 | 104-107           
  ...mage-parts.ts |   97.75 |    94.59 |     100 |   97.75 | 82-83             
  inline-math.ts   |   98.48 |    95.23 |     100 |   98.48 | 129-130           
  input-mouse.ts   |     100 |    85.71 |     100 |     100 | 48,93             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |   68.81 |       75 |   66.66 |   68.81 | ...27-132,160-161 
  latexRenderer.ts |   94.95 |     73.8 |     100 |   94.95 | ...76-178,184-187 
  layoutUtils.ts   |     100 |      100 |     100 |     100 |                   
  list-mouse.ts    |     100 |      100 |     100 |     100 |                   
  ...ightLoader.ts |     100 |       95 |     100 |     100 | 81                
  ...nUtilities.ts |   98.72 |    94.36 |     100 |   98.72 | 145-146           
  ...t-position.ts |     100 |     87.5 |     100 |     100 | 85                
  ...geRenderer.ts |   86.51 |    70.16 |   95.12 |   86.51 | ...1286,1326-1332 
  ...alRenderer.ts |   86.69 |     71.9 |     100 |   86.69 | ...1476,1513-1519 
  ...lsBySource.ts |     100 |    95.23 |     100 |     100 | 84                
  mouse.ts         |   92.85 |    74.19 |     100 |   92.85 | ...38,145,149-152 
  osc8.ts          |   91.33 |    79.03 |     100 |   91.33 | ...73,273,277-278 
  ...red-height.ts |   98.38 |    97.14 |     100 |   98.38 | 195-197           
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  restoreGoal.ts   |     100 |      100 |     100 |     100 |                   
  ...storyUtils.ts |   83.24 |       80 |     100 |   83.24 | ...02-624,755-756 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  ...evel-label.ts |   77.77 |    66.66 |     100 |   77.77 | 18,22-24          
  ...are-cursor.ts |   89.47 |    85.71 |     100 |   89.47 | 39-44             
  ...ataService.ts |   93.17 |     79.1 |     100 |   93.17 | ...14,227,254-256 
  suggestions.ts   |     100 |      100 |     100 |     100 |                   
  ...izedOutput.ts |   95.19 |      100 |   88.88 |   95.19 | 121-126           
  ...nal-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...e-renderer.ts |   90.61 |    83.44 |     100 |   90.61 | ...80,482-484,607 
  ...ize-reflow.ts |     100 |     92.3 |     100 |     100 | 57,62,209,217,347 
  ...wOptimizer.ts |     100 |    94.11 |     100 |     100 | 33,76             
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   97.94 |    95.49 |   94.11 |   97.94 | ...82-283,443-444 
  ...background.ts |     100 |      100 |     100 |     100 |                   
  todoSnapshot.ts  |   90.42 |    92.85 |     100 |   90.42 | ...06-207,240-241 
  ...isplay-map.ts |     100 |      100 |     100 |     100 |                   
  updateCheck.ts   |     100 |    92.75 |     100 |     100 | 227-239,331       
  windowTitle.ts   |   96.55 |    94.73 |     100 |   96.55 | 56-57             
  ...ow-keyword.ts |     100 |      100 |     100 |     100 |                   
 ...i/utils/export |   75.03 |     60.1 |   94.59 |   75.03 |                   
  collect.ts       |   71.27 |    65.81 |      96 |   71.27 | ...90-633,655-656 
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |   80.42 |    51.35 |     100 |   80.42 | ...59-364,376-378 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |     100 |      100 |     100 |     100 |                   
 ...ort/formatters |   52.92 |    47.22 |   71.42 |   52.92 |                   
  html.ts          |   84.61 |       50 |     100 |   84.61 | ...53,57-58,62-63 
  json.ts          |     100 |      100 |     100 |     100 |                   
  jsonl.ts         |   82.45 |     37.5 |     100 |   82.45 | ...48,50-51,65-66 
  markdown.ts      |   36.32 |    47.05 |      50 |   36.32 | ...16-219,233-295 
 src/ui/voice      |   81.27 |    79.64 |   81.94 |   81.27 |                   
  ...d-recorder.ts |     6.2 |        0 |       0 |     6.2 | ...33-159,162-163 
  ...o-recorder.ts |   84.61 |    93.33 |   57.14 |   84.61 | ...16-117,131-136 
  ...me-session.ts |   91.09 |     92.1 |     100 |   91.09 | ...99,305,316-319 
  sox-recorder.ts  |    92.7 |    71.87 |     100 |    92.7 | ...34-135,153-154 
  ...ailability.ts |     100 |      100 |     100 |     100 |                   
  ...e-keyterms.ts |     100 |      100 |     100 |     100 |                   
  voice-model.ts   |     100 |      100 |     100 |     100 |                   
  ...e-recorder.ts |   88.29 |    67.74 |   81.81 |   88.29 | ...,98-99,112,115 
  voice-refine.ts  |     100 |    93.33 |     100 |     100 | 92                
  ...ream-retry.ts |   86.79 |       70 |     100 |   86.79 | 16-18,48-49,59-60 
  ...am-session.ts |   88.02 |    66.66 |   84.61 |   88.02 | ...26,343-345,363 
  ...ranscriber.ts |     100 |      100 |     100 |     100 |                   
 src/utils         |   81.67 |    87.32 |    92.7 |   81.67 |                   
  ...p-profiler.ts |   98.39 |    92.59 |     100 |   98.39 | 141,185,235       
  acpModelUtils.ts |   97.36 |    95.19 |     100 |   97.36 | ...09-210,214-215 
  apiPreconnect.ts |   96.74 |    94.59 |     100 |   96.74 | 167-170           
  ...ol-call-id.ts |   84.61 |       60 |     100 |   84.61 | 26-27,37-38       
  ...ng-failure.ts |     100 |      100 |     100 |     100 |                   
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  ...-api-error.ts |     100 |    96.42 |     100 |     100 | 14                
  cleanup.ts       |   84.05 |    94.11 |      80 |   84.05 | 80,111-121        
  commands.ts      |   97.45 |    96.66 |     100 |   97.45 | 153-155           
  ...Calculator.ts |     100 |      100 |     100 |     100 |                   
  cpuProfiler.ts   |   70.73 |    73.23 |   88.88 |   70.73 | ...27,430-431,438 
  deepMerge.ts     |     100 |    89.65 |     100 |     100 | 41-43,49          
  ...re-runtime.ts |     100 |      100 |     100 |     100 |                   
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  doctorChecks.ts  |   70.31 |    74.57 |     100 |   70.31 | ...95-301,325-341 
  ...putCapture.ts |   90.65 |    86.31 |     100 |   90.65 | ...73,371,373-374 
  ...arResolver.ts |   97.14 |    96.55 |     100 |   97.14 | 125-126           
  errors.ts        |   97.56 |    94.64 |     100 |   97.56 | 69-70,304-305     
  events.ts        |     100 |      100 |     100 |     100 |                   
  ...on-mention.ts |   88.48 |     82.6 |     100 |   88.48 | ...56-160,164-168 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...AutoUpdate.ts |    93.1 |       94 |      90 |    93.1 | 103,108,179-190   
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.68 |    94.28 |     100 |   97.68 | ...64,381-382,427 
  ...projection.ts |   95.27 |    95.58 |     100 |   95.27 | 140-145           
  jsonc-editor.ts  |   93.18 |    92.66 |     100 |   93.18 | ...80-381,384-385 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   89.31 |    77.33 |     100 |   89.31 | ...87,303-304,344 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   94.25 |    91.17 |     100 |   94.25 | ...30,436,439-443 
  ...iveHelpers.ts |   95.13 |    91.79 |     100 |   95.13 | ...53-454,552,565 
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  ...uggestions.ts |   84.29 |    70.83 |     100 |   84.29 | 70-76,92-103      
  processUtils.ts  |    92.3 |       80 |     100 |    92.3 | 45-46             
  readStdin.ts     |   93.67 |    94.11 |   85.71 |   93.67 | 79-83             
  relaunch.ts      |   95.87 |    89.28 |     100 |   95.87 | 103-105,131       
  resolvePath.ts   |     100 |      100 |     100 |     100 |                   
  runBudget.ts     |   99.35 |    96.77 |     100 |   99.35 | 119               
  sandbox-path.ts  |     100 |      100 |     100 |     100 |                   
  sandbox.ts       |   45.52 |    57.35 |   76.92 |   45.52 | ...1040,1052-1075 
  ...xImageName.ts |     100 |    77.77 |     100 |     100 | 10,18             
  sandboxMounts.ts |     100 |      100 |     100 |     100 |                   
  ...-path-argv.ts |     100 |      100 |     100 |     100 |                   
  sessionPaths.ts  |   90.84 |    90.56 |     100 |   90.84 | ...81-182,185-186 
  settingsUtils.ts |   82.35 |    89.57 |      90 |   82.35 | ...25-743,750-758 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...ate-verify.ts |     100 |      100 |     100 |     100 |                   
  ...one-update.ts |   39.81 |    77.44 |   62.16 |   39.81 | ...1193,1196-1215 
  ...upProfiler.ts |   98.47 |    94.66 |     100 |   98.47 | 132-133,308       
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       90 |     100 |     100 | 23                
  systemInfo.ts    |   95.09 |    90.27 |     100 |   95.09 | ...54-255,260-264 
  ...InfoFields.ts |    87.5 |    65.85 |     100 |    87.5 | ...24-125,146-147 
  ...alSequence.ts |     100 |    97.61 |     100 |     100 | 60                
  ...iffPreview.ts |   76.47 |       25 |     100 |   76.47 | 13,17,23-24       
  ...on-handler.ts |    73.8 |       75 |     100 |    73.8 | 17-18,25-26,67-73 
  ...e-relaunch.ts |   89.61 |    86.66 |      50 |   89.61 | 56-61,83-84       
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...ansionHook.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   87.75 |       75 |     100 |   87.75 | 47-48,53-54,57-58 
  version.ts       |     100 |    66.66 |     100 |     100 | 11                
  ...ingHandler.ts |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |   65.04 |    77.77 |     100 |   65.04 | 97,112,133-172    
 ...s/housekeeping |   93.51 |    90.95 |   96.96 |   93.51 |                   
  cleanup.ts       |   92.59 |    93.75 |     100 |   92.59 | ...02-205,209-211 
  ...eractionAt.ts |     100 |      100 |     100 |     100 |                   
  scheduler.ts     |      93 |    88.34 |      95 |      93 | ...57-359,411-415 
  throttledOnce.ts |   95.95 |    93.93 |     100 |   95.95 | 77-78,153-154     
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   88.05 |    86.62 |    89.6 |   88.05 |                   
 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.45 |    84.65 |   94.88 |   90.45 |                   
  ...transcript.ts |   88.49 |    84.09 |     100 |   88.49 | ...32,640,646-650 
  ...ent-resume.ts |   85.59 |    77.75 |   83.33 |   85.59 | ...1794-1798,1801 
  ...ound-tasks.ts |   94.63 |    90.13 |   96.38 |   94.63 | ...1773,1793-1796 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-result.ts |    96.8 |    92.68 |     100 |    96.8 | 106,129-131       
  ...n-registry.ts |   94.79 |     87.7 |     100 |   94.79 | ...1067,1081-1083 
  ...w-snapshot.ts |   92.12 |    77.14 |     100 |   92.12 | ...65,189,196-198 
 src/agents/arena  |   76.94 |    68.22 |   78.94 |   76.94 |                   
  ...gentClient.ts |   79.47 |    88.88 |   81.81 |   79.47 | ...68-183,189-204 
  ArenaManager.ts  |   75.89 |     65.2 |   78.57 |   75.89 | ...1887,1893-1894 
  arena-events.ts  |   64.44 |      100 |      50 |   64.44 | ...71-175,178-183 
  diff-summary.ts  |    87.5 |    72.34 |     100 |    87.5 | ...32-133,137-138 
  index.ts         |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...gents/backends |   78.09 |    85.23 |   76.28 |   78.09 |                   
  ITermBackend.ts  |   97.97 |    93.93 |     100 |   97.97 | ...78-180,255,307 
  ...essBackend.ts |    90.9 |    85.36 |   93.33 |    90.9 | ...70,672,674-675 
  TmuxBackend.ts   |    90.7 |    76.55 |   97.36 |    90.7 | ...87,697,743-747 
  detect.ts        |   31.25 |      100 |       0 |   31.25 | 34-88             
  index.ts         |     100 |      100 |     100 |     100 |                   
  iterm-it2.ts     |     100 |     92.1 |     100 |     100 | 37-38,106         
  tmux-commands.ts |    6.64 |      100 |    3.03 |    6.64 | ...93-363,386-503 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...agents/runtime |   91.22 |    86.83 |   89.31 |   91.22 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   85.07 |     76.8 |   77.77 |   85.07 | ...2291,2337-2339 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.49 |    89.41 |   83.33 |   93.49 | ...96-497,500-501 
  ...nteractive.ts |   81.01 |    82.35 |   76.66 |   81.01 | ...33,535-538,541 
  ...statistics.ts |   98.29 |    82.55 |     100 |   98.29 | 141,165,206,239   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ool-policy.ts |   98.38 |      100 |    92.3 |   98.38 | 85-86             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...-scheduler.ts |   97.43 |    96.36 |     100 |   97.43 | 128-130           
  ...ow-journal.ts |   91.76 |    75.86 |     100 |   91.76 | ...38-139,179-181 
  ...chestrator.ts |   92.92 |    90.57 |   84.61 |   92.92 | ...2012,2061-2064 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   94.85 |     87.5 |   92.85 |   94.85 | ...93,260,280-283 
  ...ow-sandbox.ts |   96.85 |    91.28 |     100 |   96.85 | ...1705,1711-1712 
  ...flow-saved.ts |   96.51 |    94.36 |     100 |   96.51 | 134-135,234-237   
  ...flow-stall.ts |    97.9 |    83.33 |     100 |    97.9 | 138-139,236       
 src/agents/tasks  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/agents/team   |   82.67 |    84.54 |   88.97 |   82.67 |                   
  TeamManager.ts   |    73.6 |    80.82 |   79.62 |    73.6 | ...1706,1729-1730 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   96.02 |    87.23 |     100 |   96.02 | 352-358           
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   89.24 |    82.82 |     100 |   89.24 | ...-994,1038-1039 
  team-events.ts   |   60.52 |      100 |      50 |   60.52 | ...40-144,151-155 
  teamHelpers.ts   |   91.71 |    94.54 |      95 |   91.71 | ...18-319,355-365 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...eam/test-utils |   94.39 |    94.35 |   98.21 |   94.39 |                   
  ...on-harness.ts |   96.49 |       85 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |   98.49 |    95.16 |     100 |   98.49 | 201-203           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   84.21 |    86.79 |   75.31 |   84.21 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   83.52 |    86.51 |   73.78 |   83.52 | ...8844,8848-8849 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   94.39 |    91.57 |   88.23 |   94.39 | ...45-446,449-450 
 ...nfirmation-bus |   98.27 |    97.14 |     100 |   98.27 |                   
  message-bus.ts   |   98.14 |    97.05 |     100 |   98.14 | 42-43             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   92.46 |    88.19 |    93.3 |   92.46 |                   
  baseLlmClient.ts |    88.4 |     83.8 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |   92.46 |    87.73 |   91.76 |   92.46 | ...4146,4244-4245 
  ...tGenerator.ts |   86.34 |    87.34 |   84.61 |   86.34 | ...96-497,542-548 
  ...lScheduler.ts |   90.05 |    84.67 |   96.15 |   90.05 | ...6219,6247-6263 
  geminiChat.ts    |    94.7 |    90.13 |   95.53 |    94.7 | ...5059,5107-5108 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  genai-compat.ts  |     100 |      100 |     100 |     100 |                   
  ...MediaLimit.ts |     100 |       96 |     100 |     100 | 96                
  ...htProtocol.ts |    9.09 |      100 |       0 |    9.09 | ...9,62-66,69-110 
  ...ream-error.ts |     100 |      100 |     100 |     100 |                   
  logger.ts        |   87.41 |    87.02 |     100 |   87.41 | ...64-568,614-628 
  ...lay-buffer.ts |     100 |      100 |     100 |     100 |                   
  ...dispatcher.ts |     100 |      100 |     100 |     100 |                   
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   93.54 |    83.33 |      50 |   93.54 | 49-50             
  ...on-helpers.ts |   93.49 |    78.57 |     100 |   93.49 | ...10-211,228-229 
  ...issionFlow.ts |   98.97 |    96.96 |     100 |   98.97 | 107               
  ...try-policy.ts |     100 |      100 |     100 |     100 |                   
  ...ell-policy.ts |   94.89 |    88.54 |     100 |   94.89 | ...51-252,297-298 
  prompts.ts       |   93.64 |    91.42 |   83.33 |   93.64 | ...1209,1412-1413 
  ...ing-effort.ts |     100 |      100 |     100 |     100 |                   
  ...n-recovery.ts |   95.13 |       80 |     100 |   95.13 | ...06-107,142-144 
  ...t-profiler.ts |    97.9 |    81.15 |   88.23 |    97.9 | 117,124-125,130   
  ...port-retry.ts |     100 |      100 |     100 |     100 |                   
  tokenLimits.ts   |     100 |    91.89 |     100 |     100 | 87,122-139        
  ...reparation.ts |     100 |      100 |     100 |     100 |                   
  ...tion-guard.ts |   90.38 |    94.73 |     100 |   90.38 | 83-87             
  ...allIdUtils.ts |   98.41 |    93.47 |     100 |   98.41 | 36,45             
  ...okTriggers.ts |   99.45 |    92.43 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.19 |    94.48 |     100 |   99.19 | 680-681,750       
  ...l-fallback.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   96.33 |    88.12 |   96.15 |   96.33 |                   
  ...tGenerator.ts |   97.24 |    86.72 |   94.87 |   97.24 | ...1436,1465,1476 
  converter.ts     |   96.19 |    89.25 |     100 |   96.19 | ...1329,1550-1552 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
  usage.ts         |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |   88.78 |    72.36 |   89.47 |   88.78 |                   
  ...tGenerator.ts |   87.18 |    71.83 |   88.88 |   87.18 | ...58-364,382-383 
  index.ts         |     100 |       80 |     100 |     100 | 50                
 ...ntentGenerator |   96.12 |     91.3 |    90.9 |   96.12 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   96.06 |    90.75 |   90.47 |   96.06 | ...1309-1310,1338 
  ...tDetection.ts |     100 |      100 |     100 |     100 |                   
 ...ntentGenerator |    91.9 |    90.54 |   95.76 |    91.9 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |    91.3 |    89.49 |   96.87 |    91.3 | ...1942,2111-2126 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |   68.25 |    82.35 |      50 |   68.25 | 44-53,74-78,90-94 
  ...tGenerator.ts |    66.4 |    70.58 |   88.88 |    66.4 | ...51-157,168-169 
  pipeline.ts      |   95.27 |     90.9 |     100 |   95.27 | ...1434,1442,1541 
  ...ix-caching.ts |   95.23 |    92.85 |     100 |   95.23 | 45-46,69-70       
  ...ureContext.ts |     100 |      100 |     100 |     100 |                   
  ...ingOptions.ts |       0 |        0 |       0 |       0 | 1                 
  ...CallParser.ts |   92.24 |     92.4 |     100 |   92.24 | ...28-529,549-552 
  ...kingParser.ts |     100 |    96.87 |     100 |     100 | 42                
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...rator/provider |   97.39 |    92.28 |    98.5 |   97.39 |                   
  dashscope.ts     |   98.36 |    95.08 |   96.42 |   98.36 | ...08-709,851-852 
  deepseek.ts      |   94.91 |    89.36 |     100 |   94.91 | ...31-132,145-146 
  default.ts       |   99.18 |    97.05 |     100 |   99.18 | 208               
  index.ts         |     100 |      100 |     100 |     100 |                   
  mimo.ts          |   94.11 |    66.66 |     100 |   94.11 | 29,52-53          
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  mistral.ts       |   96.07 |    73.33 |     100 |   96.07 | 32-33             
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
  utils.ts         |     100 |      100 |     100 |     100 |                   
  zai.ts           |   92.13 |    82.14 |     100 |   92.13 | ...,39-40,135-137 
 src/extension     |   87.71 |    84.62 |   92.57 |   87.71 |                   
  ...ive-safety.ts |     100 |      100 |     100 |     100 |                   
  ...-converter.ts |   80.55 |    73.66 |     100 |   80.55 | ...1133,1179-1180 
  corruptFile.ts   |     100 |       50 |     100 |     100 | 40-45             
  ...-converter.ts |     100 |      100 |     100 |     100 |                   
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   90.94 |    86.26 |   97.91 |   90.94 | ...1230-1236,1280 
  ...ionManager.ts |   83.89 |    82.86 |   81.72 |   83.89 | ...2832,2861-2862 
  ...references.ts |     100 |     90.9 |     100 |     100 | ...05,129,197,200 
  ...onSettings.ts |    92.3 |     94.4 |     100 |    92.3 | ...98-501,570-571 
  ...-converter.ts |    75.9 |    85.71 |   85.71 |    75.9 | ...98,202,214-248 
  github.ts        |   90.48 |    82.71 |     100 |   90.48 | ...4,994-995,1005 
  http-client.ts   |   84.61 |       80 |     100 |   84.61 | 20-21             
  i18n.ts          |   78.26 |       96 |      50 |   78.26 | 104-110,116-123   
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   88.39 |    83.11 |     100 |   88.39 | ...08,494,507-508 
  ...ork-policy.ts |   89.72 |       90 |     100 |   89.72 | ...36,148-154,156 
  npm.ts           |   89.02 |    81.81 |     100 |   89.02 | ...86-688,695-700 
  override.ts      |   94.11 |    93.33 |     100 |   94.11 | 63-64,81-82       
  ...-converter.ts |   94.89 |    90.41 |     100 |   94.89 | ...50-151,222-224 
  redaction.ts     |     100 |      100 |     100 |     100 |                   
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-107,141-146    
  ...ceRegistry.ts |   94.01 |    83.14 |     100 |   94.01 | ...38-344,365-366 
  storage.ts       |     100 |      100 |     100 |     100 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   88.95 |    84.21 |     100 |   88.95 | ...32-235,238-241 
  ...extraction.ts |   85.77 |       81 |   89.47 |   85.77 | ...02-205,260-261 
 ...ent-plugins-v1 |   84.94 |    79.51 |     100 |   84.94 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  manifest.ts      |   81.87 |    84.48 |     100 |   81.87 | ...55-156,161-174 
  mcp.ts           |   84.98 |    79.56 |     100 |   84.98 | ...88-389,419-420 
  paths.ts         |     100 |    94.44 |     100 |     100 | 59                
  skills.ts        |   82.31 |    63.88 |     100 |   82.31 | ...38-141,150-151 
 src/followup      |   79.94 |    79.28 |    90.9 |   79.94 |                   
  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   |   71.88 |    65.71 |   71.42 |   71.88 | ...55-656,663-664 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   72.03 |    81.15 |   83.33 |   72.03 | ...68-219,331-333 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   92.96 |    89.06 |   94.34 |   92.96 |                   
  ...eGoalStore.ts |   87.61 |    88.88 |   86.66 |   87.61 | ...85-188,196-204 
  ...t-verifier.ts |   96.27 |     90.9 |     100 |   96.27 | ...20,143-146,163 
  ...checkpoint.ts |   81.48 |    76.19 |     100 |   81.48 | ...02-105,115-118 
  goal-evidence.ts |   88.34 |    87.06 |    97.5 |   88.34 | ...1162,1185-1188 
  ...projection.ts |   66.66 |    72.97 |   33.33 |   66.66 | ...87,190,194-196 
  ...ersistence.ts |   87.29 |    85.71 |    87.5 |   87.29 | ...53-154,185-190 
  goal-protocol.ts |   96.87 |    95.65 |     100 |   96.87 | 200-201           
  goal-reducer.ts  |      95 |    92.34 |   97.05 |      95 | ...43,520,538-539 
  goal-runtime.ts  |   96.89 |    89.95 |   95.74 |   96.89 | ...1315-1316,1437 
  goal-tools.ts    |   98.38 |    94.05 |   95.45 |   98.38 | ...98-199,300-301 
  ...rn-context.ts |     100 |      100 |     100 |     100 |                   
  goal-verifier.ts |   92.46 |    92.85 |     100 |   92.46 | ...69-172,185-187 
  goal-wire.ts     |       0 |        0 |       0 |       0 | 1-28              
  goalHook.ts      |   96.91 |    92.42 |     100 |   96.91 | 115-120,221-222   
  goalJudge.ts     |   95.84 |    87.09 |     100 |   95.84 | ...55-356,448-449 
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/hooks         |   88.07 |    86.35 |   88.54 |   88.07 |                   
  ...okRegistry.ts |   86.48 |    77.08 |     100 |   86.48 | ...41-344,362-369 
  ...bortSignal.ts |     100 |      100 |     100 |     100 |                   
  context-usage.ts |     100 |      100 |     100 |     100 |                   
  ...terpolator.ts |   96.66 |    93.33 |     100 |   96.66 | 66-67             
  ...HookRunner.ts |   96.68 |    87.23 |     100 |   96.68 | 110-112,231-233   
  ...Aggregator.ts |   96.57 |    91.48 |     100 |   96.57 | ...20-321,402,404 
  ...entHandler.ts |   95.57 |    84.76 |   94.73 |   95.57 | ...1040-1041,1051 
  hookPlanner.ts   |   87.55 |    85.54 |   86.66 |   87.55 | ...22-226,233-244 
  hookRegistry.ts  |   92.53 |    85.43 |     100 |   92.53 | ...39,458,462,466 
  hookRunner.ts    |   62.65 |    72.34 |   66.66 |   62.65 | ...70-771,780-781 
  hookSystem.ts    |   87.64 |     98.5 |   70.83 |   87.64 | ...58-759,765-766 
  ...HookRunner.ts |   79.06 |    66.66 |      80 |   79.06 | ...33-434,452-456 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...edCallback.ts |     100 |      100 |     100 |     100 |                   
  ...HookRunner.ts |   94.19 |    84.37 |   81.81 |   94.19 | ...76-384,458-459 
  ...SkillHooks.ts |   78.75 |       75 |   66.66 |   78.75 | 62-66,137-152     
  ...oksManager.ts |   94.87 |    88.88 |     100 |   94.87 | ...84,325,327-329 
  ssrfGuard.ts     |   86.45 |    89.13 |     100 |   86.45 | ...85,289-295,301 
  stopHookCap.ts   |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |      90 |    52.63 |     100 |      90 | ...53,66-67,97-98 
  types.ts         |   94.25 |    96.09 |   88.88 |   94.25 | ...46-547,632-636 
  urlValidator.ts  |     100 |      100 |     100 |     100 |                   
  ...it-context.ts |     100 |      100 |     100 |     100 |                   
 src/ide           |   76.98 |    85.03 |   79.03 |   76.98 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   69.16 |    84.65 |   68.29 |   69.16 | ...1068,1097-1105 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/lsp           |   58.96 |    70.57 |   66.14 |   58.96 |                   
  ...nfigLoader.ts |   80.55 |       72 |   95.45 |   80.55 | ...02-504,508-514 
  ...ionFactory.ts |   42.81 |    73.07 |      50 |   42.81 | ...76-427,433-450 
  ...Normalizer.ts |   23.09 |    13.72 |   30.43 |   23.09 | ...04-905,909-924 
  ...verManager.ts |   75.73 |     80.1 |   79.66 |   75.73 | ...1346,1352-1382 
  ...eLspClient.ts |   32.78 |       80 |   16.66 |   32.78 | ...89-293,299-300 
  ...LspService.ts |      60 |    73.36 |   78.26 |      60 | ...1575,1635-1645 
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    82.3 |    77.81 |   78.33 |    82.3 |                   
  configHash.ts    |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   79.31 |    58.06 |     100 |   79.31 | ...26-933,940-942 
  ...en-storage.ts |   98.78 |    97.95 |     100 |   98.78 | 106-107           
  oauth-utils.ts   |   73.61 |    85.48 |    92.3 |   73.61 | ...46-366,392-421 
  ...n-provider.ts |   89.83 |       96 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   82.12 |    88.19 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.03 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   87.83 |    83.81 |   90.47 |   87.83 |                   
  ...y-document.ts |   89.52 |    84.61 |     100 |   89.52 | ...24-325,329-330 
  ...nel-memory.ts |   97.36 |    96.63 |   96.42 |   97.36 | ...91-293,367-368 
  const.ts         |   94.28 |     92.3 |     100 |   94.28 | 66-67             
  dream.ts         |    64.6 |    72.22 |      50 |    64.6 | ...04-109,124-165 
  ...entPlanner.ts |     100 |    83.33 |     100 |     100 | 136,146           
  entries.ts       |   75.59 |    84.84 |   83.33 |   75.59 | ...56-157,172-180 
  extract.ts       |   92.41 |    79.41 |     100 |   92.41 | 56-61,100,119-122 
  ...entPlanner.ts |   91.59 |    76.74 |     100 |   91.59 | ...05,114-117,293 
  ...ionPlanner.ts |       0 |        0 |       0 |       0 | 1                 
  forget.ts        |   81.83 |       75 |   83.33 |   81.83 | ...51,474,478-507 
  indexer.ts       |   94.14 |       84 |     100 |   94.14 | ...32-233,334,337 
  ...kill-agent.ts |   97.94 |    89.36 |     100 |   97.94 | 82-83,179-180     
  manager.ts       |    78.4 |    82.29 |   77.77 |    78.4 | ...1482,1495-1497 
  ...ent-config.ts |   86.99 |    82.69 |   86.36 |   86.99 | ...69,389,396-402 
  memoryAge.ts     |   90.47 |       80 |     100 |   90.47 | 50-51             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...ing-skills.ts |     100 |       72 |     100 |     100 | 31-35,73-78,97    
  prompt.ts        |   97.26 |    86.79 |     100 |   97.26 | ...10-218,222,225 
  recall.ts        |   82.06 |       75 |    90.9 |   82.06 | ...59-364,395-406 
  refresh.ts       |   93.58 |    89.58 |     100 |   93.58 | ...75-176,183-184 
  ...ceSelector.ts |    93.1 |    81.81 |     100 |    93.1 | ...25,127-128,136 
  remember.ts      |   98.89 |    90.19 |     100 |   98.89 | 50,70             
  scan.ts          |   93.12 |    77.41 |     100 |   93.12 | ...08-109,154,157 
  scopes.ts        |     100 |      100 |     100 |     100 |                   
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   77.24 |    74.07 |   72.22 |   77.24 | ...52-456,459,465 
  status.ts        |   10.52 |      100 |       0 |   10.52 | 41-98             
  store.ts         |   92.92 |    81.81 |     100 |   92.92 | ...16-117,147-148 
  ...git-status.ts |     100 |     87.5 |     100 |     100 | 30                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...63-277,291-296 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   92.55 |    88.97 |   91.13 |   92.55 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...tor-config.ts |   97.77 |    91.83 |     100 |   97.77 | 155,161,171       
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |    47.82 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   98.71 |    93.33 |     100 |   98.71 | 166,328,334       
  modelRegistry.ts |     100 |    98.11 |     100 |     100 | 177,261           
  modelsConfig.ts  |   89.36 |    86.93 |   88.09 |   89.36 | ...1404,1433-1434 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/permissions   |   83.79 |    91.17 |   71.07 |   83.79 |                   
  autoMode.ts      |   97.66 |    93.13 |     100 |   97.66 | ...82-589,635,712 
  ...transcript.ts |      98 |       84 |     100 |      98 | 200-201           
  classifier.ts    |      94 |    94.54 |     100 |      94 | 158-165,389-393   
  ...erousRules.ts |     100 |    89.36 |     100 |     100 | 110,133,147,175   
  ...alTracking.ts |     100 |      100 |     100 |     100 |                   
  ...e-commands.ts |   86.77 |     73.8 |     100 |   86.77 | 131-141,210-214   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...on-manager.ts |   86.63 |    89.01 |      80 |   86.63 | ...1111,1217-1221 
  rule-parser.ts   |   94.49 |     92.7 |     100 |   94.49 | ...1447,1481-1483 
  ...-semantics.ts |   70.44 |    91.09 |   46.66 |   70.44 | ...2237,2311-2314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...sifier-prompts |   99.04 |    95.23 |     100 |   99.04 |                   
  system-prompt.ts |   99.04 |    95.23 |     100 |   99.04 | 220               
 src/prompts       |   83.63 |      100 |    87.5 |   83.63 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |     100 |      100 |     100 |     100 |                   
 src/providers     |   83.71 |     78.6 |   81.25 |   83.71 |                   
  all-providers.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  install.ts       |   93.11 |     84.5 |     100 |   93.11 | ...56-257,330-331 
  ...der-config.ts |   75.85 |    74.04 |   78.26 |   75.85 | ...73-474,502-503 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.82 |    91.66 |   63.63 |   97.82 |                   
  ...oding-plan.ts |   87.34 |      100 |       0 |   87.34 | 81-83,86-88,90-93 
  ...a-standard.ts |     100 |      100 |     100 |     100 |                   
  ...token-plan.ts |     100 |      100 |     100 |     100 |                   
  ...m-provider.ts |   97.05 |    81.25 |      75 |   97.05 | 118-119           
  deepseek.ts      |     100 |      100 |     100 |     100 |                   
  grok.ts          |     100 |      100 |     100 |     100 |                   
  idealab.ts       |     100 |      100 |     100 |     100 |                   
  minimax.ts       |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  requesty.ts      |     100 |      100 |     100 |     100 |                   
  zai.ts           |     100 |      100 |     100 |     100 |                   
 src/qwen          |   85.41 |    78.76 |   95.89 |   85.41 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   82.79 |    73.75 |   90.62 |   82.79 | ...1205-1221,1251 
  ...kenManager.ts |   85.36 |    76.61 |     100 |   85.36 | ...52-757,778-783 
 src/resources     |     100 |      100 |     100 |     100 |                   
  ...e-registry.ts |     100 |      100 |     100 |     100 |                   
 src/services      |   90.35 |    85.93 |   96.94 |   90.35 |                   
  ...ionTrailer.ts |     100 |      100 |     100 |     100 |                   
  ...llRegistry.ts |   98.48 |    87.28 |     100 |   98.48 | 81-82,105,474-475 
  branch-points.ts |     100 |    95.23 |     100 |     100 | ...20,211,224,327 
  ...ionService.ts |   97.51 |    96.15 |     100 |   97.51 | ...,929,1072-1080 
  ...ingService.ts |   92.02 |    86.44 |    94.8 |   92.02 | ...2380,2407-2408 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |    97.2 |    94.17 |     100 |    97.2 | ...39-340,378-381 
  cronScheduler.ts |   94.17 |    90.45 |      98 |   94.17 | ...1333,1736-1737 
  cronTasksFile.ts |   96.31 |    91.81 |     100 |   96.31 | ...11,336-337,483 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |    73.7 |    68.49 |   95.83 |    73.7 | ...2196,2225-2226 
  ...on-service.ts |   87.38 |       72 |     100 |   87.38 | ...01-305,343-344 
  ...references.ts |   98.39 |    88.88 |     100 |   98.39 | 154-155,215-216   
  ...ionService.ts |   98.26 |    97.35 |     100 |   98.26 | ...13-714,761-762 
  ...ticsDumper.ts |   98.37 |    95.23 |     100 |   98.37 | 185-186           
  ...ureMonitor.ts |   95.82 |    90.52 |   97.05 |   95.82 | ...60,861,875-877 
  ...orRegistry.ts |   97.22 |    90.99 |     100 |   97.22 | ...55-456,609-610 
  ...ttachments.ts |   97.74 |     90.9 |     100 |   97.74 | 298-308,646       
  ...pi-history.ts |   98.94 |    88.88 |     100 |   98.94 | 43                
  ...ersistence.ts |   91.66 |    80.75 |     100 |   91.66 | ...1060-1061,1089 
  ...tory-state.ts |     100 |       95 |     100 |     100 | 31                
  ...on-service.ts |   94.49 |    92.26 |   97.14 |   94.49 | ...98-600,656-664 
  ...ce-service.ts |    98.5 |    94.11 |    90.9 |    98.5 | 64-65             
  ...n-registry.ts |   98.73 |    96.29 |     100 |   98.73 | 584,638-639,692   
  ...ken-counts.ts |     100 |       96 |     100 |     100 | 58                
  ...ipt-reader.ts |   93.71 |    91.05 |   97.77 |   93.71 | ...2755-2756,2833 
  ...turn-state.ts |   94.11 |     90.9 |   91.66 |   94.11 | 108-112,129-130   
  ...est-helper.ts |       0 |        0 |       0 |       0 | 1-65              
  ...iter-lease.ts |   82.45 |    74.11 |   97.61 |   82.45 | ...2433,2445-2448 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   89.31 |    85.86 |   96.05 |   89.31 | ...2642,2656-2676 
  sessionTitle.ts  |   95.75 |    77.41 |     100 |   95.75 | ...53-256,287-288 
  ...ionService.ts |   84.43 |    78.45 |   97.18 |   84.43 | ...2496,2502-2507 
  ...pInhibitor.ts |   97.42 |    92.77 |     100 |   97.42 | ...30,169,369-370 
  ...Estimation.ts |     100 |    94.11 |     100 |     100 | 118               
  ...ageService.ts |   97.76 |    91.59 |   93.75 |   97.76 | ...61-262,366,567 
  ...ite-origin.ts |     100 |    93.33 |     100 |     100 | 32                
  ...UseSummary.ts |   94.63 |    88.46 |     100 |   94.63 | ...62-164,214-215 
  ...rd-service.ts |     100 |    88.37 |     100 |     100 | ...29,145-146,241 
  ...oryService.ts |   90.72 |    84.07 |     100 |   90.72 | ...06-509,561-562 
  ...reeCleanup.ts |   14.42 |      100 |   33.33 |   14.42 | 58-186            
  ...ionService.ts |   88.36 |     87.7 |     100 |   88.36 | ...48-449,465-466 
 ...icrocompaction |    98.9 |    95.08 |     100 |    98.9 |                   
  microcompact.ts  |    98.9 |    95.08 |     100 |    98.9 | ...40,749,758-759 
 ...s/visionBridge |   98.81 |    92.12 |     100 |   98.81 |                   
  ...capability.ts |     100 |      100 |     100 |     100 |                   
  ...part-utils.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |   98.72 |    82.35 |     100 |   98.72 | 65,71             
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...ge-service.ts |   98.61 |     94.7 |     100 |   98.61 | ...06,666,679-680 
 src/skills        |   89.29 |    85.92 |   93.61 |   89.29 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...activation.ts |     100 |    93.33 |     100 |     100 | 93,112            
  skill-curator.ts |   89.71 |    81.54 |     100 |   89.71 | ...01-902,904-907 
  skill-load.ts    |   94.84 |    87.69 |     100 |   94.84 | ...03,223,235-237 
  skill-manager.ts |   84.82 |    85.29 |   83.33 |   84.82 | ...1243,1250-1254 
  skill-paths.ts   |   90.42 |     87.5 |     100 |   90.42 | ...19-120,125-126 
  symlinkScope.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |   97.91 |    98.03 |     100 |   97.91 | 277-278           
 ...ataviz/scripts |   80.06 |    95.23 |   88.23 |   80.06 |                   
  ...te_palette.js |   80.06 |    95.23 |   88.23 |   80.06 | 261-296,306-328   
 ...s/bundled/loop |   97.48 |    95.77 |     100 |   97.48 |                   
  ...omous-loop.ts |     100 |      100 |     100 |     100 |                   
  ...-task-file.ts |   94.85 |     92.4 |     100 |   94.85 | ...56,367,375-376 
  ...k-resolver.ts |     100 |      100 |     100 |     100 |                   
 src/subagents     |   87.72 |    89.01 |   96.55 |   87.72 |                   
  ...ter-schema.ts |     100 |    98.07 |     100 |     100 | 99                
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nt-manager.ts |   84.48 |    85.91 |   94.87 |   84.48 | ...1582,1659-1660 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |   92.46 |    95.18 |     100 |   92.46 | 47-52,63-68,71-76 
 src/telemetry     |   82.41 |    84.28 |   85.74 |   82.41 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   99.08 |    80.95 |     100 |   99.08 | 185,199           
  ...on-tracing.ts |   76.92 |    75.71 |   73.68 |   76.92 | ...88,395-397,413 
  ...attributes.ts |   96.98 |    91.37 |     100 |   96.98 | ...47-348,366-367 
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |   96.85 |    85.71 |     100 |   96.85 | 170-173           
  ...-exporters.ts |   65.78 |    83.33 |   55.55 |   65.78 | ...04-105,108-109 
  ...ai-content.ts |    74.5 |    66.41 |   91.66 |    74.5 | ...1480,1493-1502 
  ...i-provider.ts |     100 |       99 |     100 |     100 | 99                
  ...ai-request.ts |   87.52 |    92.79 |   83.78 |   87.52 | ...55-561,564-570 
  gen-ai-usage.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...-processor.ts |   99.12 |    96.03 |      95 |   99.12 | 150,379-380       
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   60.73 |    78.01 |   66.66 |   60.73 | ...1507,1524-1544 
  metrics.ts       |   80.37 |    82.35 |   80.95 |   80.37 | ...1150,1153-1164 
  otlp-urls.ts     |     100 |      100 |     100 |     100 |                   
  ...attributes.ts |     100 |      100 |     100 |     100 |                   
  ...ime-config.ts |       0 |        0 |       0 |       0 | 1                 
  sanitize.ts      |      80 |    83.33 |     100 |      80 | 35-36,41-42       
  ...rters-grpc.ts |     100 |      100 |     100 |     100 |                   
  ...rters-http.ts |     100 |      100 |     100 |     100 |                   
  sdk-impl.ts      |   93.89 |    86.32 |      75 |   93.89 | ...39,489-490,506 
  sdk.ts           |    82.7 |     90.9 |   66.66 |    82.7 | ...00-204,242-264 
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...ion-events.ts |     100 |      100 |     100 |     100 |                   
  ...on-tracing.ts |   91.17 |    88.72 |    97.5 |   91.17 | ...1920,1949-1952 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  trace-context.ts |     100 |      100 |     100 |     100 |                   
  ...e-id-utils.ts |     100 |      100 |     100 |     100 |                   
  tracer.ts        |   98.56 |    88.63 |     100 |   98.56 | 52,101            
  types.ts         |   83.09 |    88.31 |   86.36 |   83.09 | ...1467,1471-1478 
  uiTelemetry.ts   |   97.18 |    93.93 |      88 |   97.18 | ...70,314,461-462 
 ...ry/qwen-logger |   74.23 |     80.7 |      70 |   74.23 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   74.23 |    80.53 |   69.49 |   74.23 | ...1122,1160-1161 
 src/test-utils    |   96.38 |    98.61 |   83.33 |   96.38 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...st-helpers.ts |   94.11 |       90 |     100 |   94.11 | 69-70             
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...mised-lock.ts |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   94.85 |      100 |   78.78 |   94.85 | ...53,227-228,241 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   86.29 |     85.1 |   88.82 |   86.29 |                   
  ...erQuestion.ts |   89.71 |    80.76 |   91.66 |   89.71 | ...66-367,374-375 
  ...-registrar.ts |    77.7 |    66.66 |   66.66 |    77.7 | ...72-277,292-294 
  ...ub-session.ts |   89.67 |     91.3 |   81.81 |   89.67 | ...03-304,315-322 
  cron-create.ts   |   90.64 |    92.85 |   72.72 |   90.64 | ...,73-74,223-231 
  cron-delete.ts   |   97.56 |      100 |   83.33 |   97.56 | 31-32             
  cron-list.ts     |   98.23 |    95.34 |    87.5 |   98.23 | 57-58             
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  display-image.ts |   87.42 |    84.84 |   88.88 |   87.42 | ...29-134,194-195 
  edit.ts          |   82.76 |    86.77 |   81.25 |   82.76 | ...45-746,865-915 
  ...r-worktree.ts |   83.14 |    67.56 |    87.5 |   83.14 | ...84-187,278-279 
  enterPlanMode.ts |      85 |     82.6 |    87.5 |      85 | ...28-133,161-175 
  exit-worktree.ts |   83.29 |    83.65 |   94.44 |   83.29 | ...14-515,537-538 
  exitPlanMode.ts  |      95 |    85.29 |     100 |      95 | ...21-325,344,378 
  ...permission.ts |     100 |      100 |     100 |     100 |                   
  glob.ts          |   96.33 |     88.5 |     100 |   96.33 | ...24-225,373,376 
  grep.ts          |   90.73 |    86.61 |   85.71 |   90.73 | ...76-677,727-728 
  ...adTracking.ts |     100 |      100 |     100 |     100 |                   
  image-gen.ts     |   91.66 |    77.41 |    90.9 |   91.66 | ...13-214,221-222 
  list-agents.ts   |   94.02 |    82.35 |   83.33 |   94.02 | 31-32,47-48       
  loop-wakeup.ts   |   99.27 |    92.85 |     100 |   99.27 | 45                
  ls.ts            |   96.74 |    90.27 |     100 |   96.74 | 176-181,212,216   
  lsp.ts           |   72.71 |     59.5 |   90.32 |   72.71 | ...1212,1214-1215 
  ...nt-manager.ts |   82.13 |    80.47 |   85.71 |   82.13 | ...3234,3236-3237 
  mcp-client.ts    |   80.03 |    86.58 |   89.47 |   80.03 | ...2272,2276-2279 
  ...ry-timeout.ts |     100 |      100 |     100 |     100 |                   
  mcp-errors.ts    |     100 |      100 |     100 |     100 |                   
  ...pool-entry.ts |   79.21 |    85.71 |   81.57 |   79.21 | ...1341,1349-1350 
  ...ool-events.ts |       8 |      100 |       0 |       8 | 132-158           
  mcp-pool-key.ts  |   97.46 |    93.93 |     100 |   97.46 | 176-177           
  ...ce-content.ts |   96.55 |    91.17 |     100 |   96.55 | 80-82             
  mcp-retry.ts     |   97.67 |    95.65 |     100 |   97.67 | 131-132           
  ...ion-config.ts |     100 |      100 |     100 |     100 |                   
  mcp-status.ts    |     100 |      100 |     100 |     100 |                   
  mcp-tool.ts      |   98.35 |    93.71 |     100 |   98.35 | ...-990,1045-1046 
  ...sport-pool.ts |   83.98 |     80.3 |   88.46 |   83.98 | ...1409,1416-1420 
  ...ace-budget.ts |   87.27 |     82.6 |     100 |   87.27 | ...00-305,340-345 
  memory-config.ts |     100 |      100 |     100 |     100 |                   
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 101,108           
  monitor.ts       |   91.82 |    83.09 |   88.46 |   91.82 | ...99,612,810-815 
  notebook-edit.ts |   85.71 |    77.08 |   81.25 |   85.71 | ...96-912,958-959 
  ...escendants.ts |   36.17 |    64.51 |   55.55 |   36.17 | ...46-310,385-390 
  ...nforcement.ts |   83.21 |    90.69 |     100 |   83.21 | 147-158,207-220   
  read-file.ts     |   95.49 |    88.52 |   86.66 |   95.49 | ...49,464,536-537 
  ...p-resource.ts |   96.85 |      100 |   91.66 |   96.85 | 92-96             
  ...d-artifact.ts |   91.18 |    86.71 |    87.5 |   91.18 | ...26-427,441-453 
  ripGrep.ts       |    94.6 |    87.26 |   95.23 |    94.6 | ...33-734,740-741 
  ...-transport.ts |   71.42 |    55.55 |   71.42 |   71.42 | ...36-137,143-144 
  send-message.ts  |   81.13 |    89.74 |    62.5 |   81.13 | ...80-286,363-371 
  ...n-mcp-view.ts |   94.07 |    91.89 |    90.9 |   94.07 | 131-139           
  shell.ts         |   78.96 |    84.29 |      93 |   78.96 | ...5036,5111-5112 
  skill-utils.ts   |     100 |      100 |     100 |     100 |                   
  skill.ts         |   91.39 |    92.55 |      90 |   91.39 | ...84,488,534-556 
  ...eticOutput.ts |   95.12 |      100 |      80 |   95.12 | 87-88             
  task-create.ts   |    94.4 |    93.33 |   81.81 |    94.4 | 45-49,63-64,95    
  task-list.ts     |   78.22 |    84.21 |   83.33 |   78.22 | ...66,105,109-116 
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.89 |    83.92 |    92.3 |   82.89 | ...14-422,454-465 
  team-create.ts   |   97.22 |    85.71 |   83.33 |   97.22 | 48-49,129-130     
  team-delete.ts   |   86.74 |    83.33 |   83.33 |   86.74 | 37-38,42-48,72-73 
  ...n-approval.ts |   92.14 |    96.77 |   77.77 |   92.14 | 38-39,42-43,93-99 
  todoWrite.ts     |   95.13 |    87.85 |   93.33 |   95.13 | ...23-527,540-545 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   78.57 |    79.59 |    82.6 |   78.57 | ...89-990,998-999 
  tool-search.ts   |   96.19 |    89.72 |   93.33 |   96.19 | ...09,259-264,426 
  tools.ts         |   93.11 |    92.53 |   91.66 |   93.11 | ...69-570,586-592 
  ...reapproved.ts |   99.27 |    94.11 |     100 |   99.27 | 170               
  web-fetch.ts     |   96.05 |    90.54 |   96.77 |   96.05 | ...85-786,800-801 
  web-search.ts    |   90.58 |    83.57 |      80 |   90.58 | ...1025,1083-1086 
  write-file.ts    |   86.72 |    84.92 |   88.88 |   86.72 | ...25-828,865-900 
  zoom-image.ts    |   95.76 |    93.75 |      90 |   95.76 | 54-59,203-204     
 src/tools/agent   |   86.92 |    87.48 |   88.59 |   86.92 |                   
  agent.ts         |   85.51 |    86.38 |   86.17 |   85.51 | ...4333,4367-4377 
  fork-profile.ts  |   93.65 |       90 |     100 |   93.65 | ...33-134,171-174 
  fork-subagent.ts |   98.73 |       95 |     100 |   98.73 | 101-102,173       
 ...tools/artifact |   95.78 |    92.51 |   88.63 |   95.78 |                   
  artifact-tool.ts |   91.46 |    88.46 |   71.42 |   91.46 | ...13-314,322-325 
  ...-publisher.ts |     100 |    85.71 |     100 |     100 | 32                
  ...-publisher.ts |   96.74 |    97.72 |    87.5 |   96.74 | 29-30,156-157     
  html.ts          |     100 |    96.77 |     100 |     100 | 122               
  ...-publisher.ts |     100 |       80 |     100 |     100 | 30                
  oss-publisher.ts |    98.1 |    91.48 |     100 |    98.1 | 43-45             
  publisher.ts     |     100 |      100 |     100 |     100 |                   
 ...s/computer-use |   90.21 |    82.17 |   78.08 |   90.21 |                   
  bootstrap.ts     |   59.42 |    80.95 |   41.66 |   59.42 | ...35-339,341-345 
  client.ts        |   80.11 |       90 |   77.77 |   80.11 | ...97,242-243,274 
  constants.ts     |     100 |    94.73 |     100 |     100 | 129,256           
  downloader.ts    |   65.29 |    52.77 |   58.33 |   65.29 | ...99-300,316-355 
  index.ts         |     100 |      100 |     100 |     100 |                   
  install-state.ts |   94.44 |    72.72 |     100 |   94.44 | 44-45             
  ...n-detector.ts |     100 |     87.5 |     100 |     100 | 50                
  schemas.ts       |     100 |      100 |     100 |     100 |                   
  tool.ts          |    96.3 |    85.71 |     100 |    96.3 | 75-76,184,252-258 
 ...tools/workflow |   86.51 |    84.81 |      75 |   86.51 |                   
  workflow.ts      |   86.51 |    84.81 |      75 |   86.51 | ...67,512,514-515 
 src/utils         |   92.98 |    89.69 |   96.93 |   92.98 |                   
  LruCache.ts      |     100 |      100 |     100 |     100 |                   
  ...Controller.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...cFileWrite.ts |      95 |     92.7 |     100 |      95 | ...49-550,657-661 
  bareMode.ts      |   81.81 |      100 |      50 |   81.81 | 18-19             
  ...ry-content.ts |   98.45 |    95.45 |     100 |   98.45 | 132-133,159-160   
  browser.ts       |   86.84 |    78.94 |     100 |   86.84 | 34,36-37,65-66    
  btwUtils.ts      |   13.95 |      100 |       0 |   13.95 | 17-31,34-55       
  bundlePaths.ts   |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  ...engthError.ts |   91.06 |    89.47 |     100 |   91.06 | ...46-147,154-155 
  ...n-branches.ts |   95.88 |    94.11 |      95 |   95.88 | ...98-499,511-524 
  ...tion-chain.ts |     100 |      100 |     100 |     100 |                   
  cronDisplay.ts   |     100 |    97.61 |     100 |     100 | 46                
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   96.66 |    96.61 |   88.88 |   96.66 | 192-196           
  editHelper.ts    |   93.63 |     83.9 |     100 |   93.63 | ...27-428,462-463 
  editor.ts        |   97.65 |    95.45 |     100 |   97.65 | ...35-336,338-339 
  encoding.ts      |     100 |      100 |     100 |     100 |                   
  env.ts           |     100 |      100 |     100 |     100 |                   
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |   96.63 |    90.13 |   96.66 |   96.63 | ...42,444-445,512 
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   95.65 |    93.33 |     100 |   95.65 | 37-38             
  errors.ts        |   88.92 |    93.58 |   66.66 |   88.92 | ...92,394,410-411 
  fetch.ts         |   90.68 |    82.51 |     100 |   90.68 | ...72,483-484,503 
  file-identity.ts |     100 |      100 |     100 |     100 |                   
  fileUtils.ts     |   94.87 |    92.97 |   96.15 |   94.87 | ...1907,1915-1916 
  forkedAgent.ts   |   92.64 |    82.85 |   93.75 |   92.64 | ...47,655,660-667 
  formatters.ts    |     100 |      100 |     100 |     100 |                   
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.39 |    94.28 |     100 |   94.39 | ...29-132,343-348 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  git-branches.ts  |    91.6 |    84.21 |    92.3 |    91.6 | ...90,405-410,570 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  gitDiff.ts       |   95.19 |    81.36 |     100 |   95.19 | ...1073,1419-1420 
  gitDirect.ts     |   98.84 |    94.28 |     100 |   98.84 | 234,318           
  ...noreParser.ts |   94.48 |    93.22 |     100 |   94.48 | ...23-124,158-159 
  gitUtils.ts      |   78.83 |    82.35 |    87.5 |   78.83 | ...22-123,164-215 
  github-prs.ts    |   95.74 |    82.27 |     100 |   95.74 | 216,314-322       
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.08 |    93.33 |     100 |   95.08 | ...62-166,234-238 
  ...ionManager.ts |     100 |     90.9 |     100 |     100 | 27                
  ...lPromptIds.ts |     100 |      100 |     100 |     100 |                   
  ...on-context.ts |     100 |      100 |     100 |     100 |                   
  jsonl-utils.ts   |   95.41 |    93.61 |     100 |   95.41 | ...27-328,370-373 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...iconv-lite.ts |     100 |      100 |     100 |     100 |                   
  ...simple-git.ts |   96.77 |    91.66 |     100 |   96.77 | 38                
  ...m-headless.ts |      96 |    88.88 |     100 |      96 | 34                
  ...iagnostics.ts |    96.4 |     94.2 |     100 |    96.4 | ...66,293-294,376 
  ...yDiscovery.ts |    92.4 |    89.13 |     100 |    92.4 | ...28,331,522-525 
  ...tProcessor.ts |   94.01 |       90 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.21 |     100 |   98.96 | 153               
  ...kerChecker.ts |    90.9 |    91.66 |     100 |    90.9 | 73-79             
  notebook.ts      |   94.57 |    89.91 |   95.83 |   94.57 | ...21,333,385-387 
  openaiLogger.ts  |   91.66 |    89.74 |     100 |   91.66 | ...26-228,251-256 
  osc8.ts          |   54.26 |    64.86 |   83.33 |   54.26 | ...72-195,197-257 
  partUtils.ts     |     100 |    98.64 |     100 |     100 | 211               
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.88 |     90.6 |     100 |   90.88 | ...25-626,628-630 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  ...s-liveness.ts |     100 |    93.47 |     100 |     100 | 62,72,108         
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   71.15 |       86 |     100 |   71.15 | ...-90,96-101,147 
  ...noreParser.ts |   92.63 |    91.66 |     100 |   92.63 | ...77-178,197-198 
  rateLimit.ts     |   93.75 |    89.62 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.15 |     100 |   96.98 | ...87-688,763-764 
  readManyFiles.ts |   95.75 |    80.86 |     100 |   95.75 | ...05,558,568-572 
  retry.ts         |   96.09 |    92.52 |     100 |   96.09 | ...67,558-559,577 
  retryContext.ts  |     100 |      100 |     100 |     100 |                   
  ...sification.ts |   97.63 |    97.08 |     100 |   97.63 | ...17,251-252,278 
  retryPolicy.ts   |   97.72 |    90.56 |     100 |   97.72 | 130-131           
  ripgrepUtils.ts  |   90.04 |    93.43 |   95.45 |   90.04 | ...55-565,598-599 
  ...sDiscovery.ts |   97.46 |    93.05 |     100 |   97.46 | ...04,182-183,202 
  ...iagnostics.ts |   83.08 |     67.5 |   92.59 |   83.08 | ...23,543-544,550 
  ...tchOptions.ts |   84.87 |    86.71 |   96.29 |   84.87 | ...71,696,725-734 
  ...odelPrefix.ts |     100 |      100 |     100 |     100 |                   
  runtimeStatus.ts |   97.77 |    91.48 |     100 |   97.77 | 172-173           
  safe-mode.ts     |     100 |      100 |     100 |     100 |                   
  safeJsonParse.ts |     100 |      100 |     100 |     100 |                   
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...-child-env.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   98.03 |    97.75 |     100 |   98.03 | 100,102-103       
  ...aValidator.ts |   92.09 |    83.65 |   90.47 |   92.09 | ...60,882-883,896 
  ...r-launcher.ts |   96.35 |    93.97 |   85.71 |   96.35 | ...35-336,347-348 
  sedEditParser.ts |   91.78 |    92.18 |     100 |   91.78 | ...66-569,645-646 
  ...nIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...orageUtils.ts |   96.21 |    85.34 |     100 |   96.21 | ...70,386,466,485 
  ...-pager-env.ts |     100 |      100 |     100 |     100 |                   
  ...fety-rules.ts |     100 |     89.7 |     100 |     100 | ...01,304,309-311 
  shell-utils.ts   |   86.26 |    88.58 |     100 |   86.26 | ...2295,2302-2306 
  ...lAstParser.ts |    98.3 |    91.59 |     100 |    98.3 | ...1340-1342,1352 
  ...ContextEnv.ts |     100 |    96.42 |     100 |     100 | 75                
  ...nlyChecker.ts |   96.33 |    96.57 |     100 |   96.33 | ...83-284,292-293 
  sideQuery.ts     |   86.82 |    86.66 |     100 |   86.82 | ...79-185,187-193 
  ...pEventSink.ts |     100 |       80 |     100 |     100 | 61                
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  ...ameContext.ts |     100 |      100 |     100 |     100 |                   
  symlink.ts       |   77.77 |       50 |     100 |   77.77 | 44,54-59          
  ...e-encoding.ts |   85.96 |    76.47 |     100 |   85.96 | 58-61,64-65,78-79 
  ...emEncoding.ts |   96.36 |    91.17 |     100 |   96.36 | 59-60,124-125     
  terminalSafe.ts  |     100 |      100 |     100 |     100 |                   
  ...Serializer.ts |   98.72 |       90 |     100 |   98.72 | 42-43,134,201-203 
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  textUtils.ts     |      65 |      100 |      75 |      65 | 56-75             
  thoughtUtils.ts  |     100 |    95.65 |     100 |     100 | 99                
  ...-converter.ts |   95.23 |    85.71 |     100 |   95.23 | 36-37             
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...-finalizer.ts |   97.66 |     90.9 |     100 |   97.66 | 165-166,168-172   
  ...-retention.ts |     100 |    95.83 |     100 |     100 | 116               
  tool-utils.ts    |    95.2 |    93.61 |     100 |    95.2 | ...58-159,162-163 
  ...ultCleanup.ts |   54.62 |       64 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.13 |    96.42 |     100 |   96.13 | ...34-339,341-346 
  ...pt-records.ts |   87.55 |    86.13 |     100 |   87.55 | ...78-482,512-527 
  truncation.ts    |   90.61 |    90.59 |     100 |   90.61 | ...53-461,498-504 
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...aceContext.ts |   95.39 |    89.47 |     100 |   95.39 | ...16-317,321-322 
  xml.ts           |    97.8 |    87.69 |     100 |    97.8 | 98-99             
  yaml-parser.ts   |   83.87 |    77.27 |     100 |   83.87 | ...31-234,239-240 
 ...ils/filesearch |   83.94 |    80.72 |   94.73 |   83.94 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |    82.9 |    76.81 |   95.08 |    82.9 | ...1563,1597-1598 
  fileSearch.ts    |   93.78 |    87.67 |     100 |   93.78 | ...71-272,274-275 
  fzfWorker.ts     |       0 |        0 |       0 |       0 | 1-109             
  ...rkerHandle.ts |   84.05 |    75.43 |   89.47 |   84.05 | ...30-334,340-341 
  ignore.ts        |     100 |    97.36 |     100 |     100 | 187               
  result-cache.ts  |     100 |    93.75 |     100 |     100 | 49                
 ...uest-tokenizer |   69.76 |    75.47 |   85.29 |   69.76 |                   
  ...eTokenizer.ts |   65.72 |    74.02 |    92.3 |   65.72 | ...65-466,479-533 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |   76.92 |      100 |   33.33 |   76.92 | 46-49,56-57       
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

E2E test report (macOS, npm run dev, model bailian/glm-5)

Manual interactive verification of the golden path:

  1. Main conversation — asked the model (tools forbidden) what /btw does; it answered from guesswork.
  2. /advisor (no focus) — showed the Consulting advisor... pending state, then returned the four-section review. The advisor correctly flagged the main model's answer as an unsubstantiated hallucination, citing transcript evidence (AGENTS.md and the skills list never mention /btw).
  3. History isolation — next user turn asked the main model whether it had seen any advisor feedback; it confirmed it had not, proving the review is user-facing only and never injected into the main history. Context usage stayed flat (20% → 20.1%).
  4. /advisor <focus> — ran /advisor 主模型第一次的回答是否可信?; the review addressed the focus question directly and cited additional transcript evidence (branch name feat/advisor-command, latest commit subject).
Transcript excerpt — /advisor result and isolation check
> /advisor
● Consulting advisor...

● ## Verdict
  The answer provided was unsubstantiated. I claimed knowledge about /btw without any
  evidence from the transcript — the AGENTS.md and available_skills list do not mention
  /btw, so the response was speculation.
  ## Risks
  - Hallucinated feature description: ...
  ## Missing evidence
  - Any source file, documentation, or skill definition that describes the /btw command...
  ## Recommendation
  Acknowledge that without tool access ... the honest answer is: "I don't have evidence
  in the transcript to determine what /btw does in this repository."

> 请只用一句话回答,不要用工具:刚才我问过你什么问题?你是否看到过任何 advisor/顾问的审查意见?
◆ 你刚才问的是"这个仓库的 /btw 命令是做什么的";我在当前会话中没有看到任何 advisor/顾问的审查意见。

Not covered manually (unit-tested only): fresh-session no-context error, ESC cancellation, advisorModel override.

gwinthis
gwinthis previously approved these changes Jul 23, 2026

@gwinthis gwinthis 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: APPROVE (C=0)

Summary

Clean feature addition (+481/-0, all new code) that adds a /advisor command for second-opinion conversation review. Follows the established /btw forked-query pattern exactly — same runForkedAgent cache path, same buildBtwCacheSafeParams, tools stripped at request level. The advisor cannot mutate session state or execute tools.

Findings

None blocking. Well-architected:

  1. Security model is sound. Cache path defaults to NO_TOOLS — the advisor sees the conversation but cannot act on it. cacheSafeParams shares history read-only. No mutation path exists.
  2. Follows /btw pattern precisely. Same runForkedAgent primitive, same buildBtwCacheSafeParams, same abort/pending/error handling structure. A developer who understands /btw immediately understands /advisor.
  3. Prompt design is well-structured. buildAdvisorPrompt() uses <system-reminder> tags with explicit constraints (no tools, review only, fixed markdown sections). The four-section format (Verdict / Risks / Missing evidence / Recommendation) produces actionable output.
  4. Model override is clean. advisorModel setting flows through settings.merged → conditional spread into runForkedAgent({ model }). Empty string = use main model. No special-casing.
  5. Test coverage is thorough. 16 tests covering: metadata, max length, no config, interactive success/failure/abort, focus passing, model override/fallback, no context, busy state, empty response, ACP mode. Uses vi.hoisted() and createMockCommandContext() correctly.
  6. Settings schema synced. Both settingsSchema.ts and settings.schema.json updated consistently.

Minor Observations (non-blocking)

  • Reuses BTW_MAX_INPUT_LENGTH (4096) for focus validation — pragmatic, same constraint applies.
  • The pendingItem guard prevents concurrent /advisor with other long operations — correct conservative choice.
  • buildAdvisorPrompt is exported and separately testable — good for maintainability.

Verification Report (tmux)

✓ src/ui/commands/advisor-command.test.ts (16 tests) 28ms
Test Files  1 passed (1)
     Tests  16 passed (16)
  • tsc -p packages/cli --noEmit: exit 0 (TS6305 warnings are pre-existing build artifact issues)
  • Pre-existing mustTranslateKeys.test.ts failure (ajv import) is unrelated to this PR

Architecture Insight

Forked side-query pattern for read-only model features: When adding a feature that needs model access without tool access or session mutation, use runForkedAgent with cacheSafeParams. This shares the prompt cache (saving tokens) while enforcing read-only via NO_TOOLS. The pattern is: build prompt → get cacheSafeParams → runForkedAgent → format result. See /btw and /advisor as reference implementations.

中文说明

评审:APPROVE (C=0)

概要

干净的功能添加(+481/-0,全部新代码),添加 /advisor 命令用于对话的第二意见审查。完全遵循已确立的 /btw forked-query 模式——相同的 runForkedAgent 缓存路径、相同的 buildBtwCacheSafeParams、工具在请求级剥离。advisor 不能修改会话状态或执行工具。

发现

无阻断项。 架构良好:

  1. 安全模型健全 — 缓存路径默认 NO_TOOLS,advisor 只能看不能做
  2. 精确遵循 /btw 模式 — 理解 /btw 的开发者立即理解 /advisor
  3. Prompt 设计结构化 — 四段式输出(Verdict/Risks/Missing evidence/Recommendation)
  4. 模型覆盖干净 — 空字符串 = 用主模型,无特判
  5. 测试覆盖全面 — 16 个测试覆盖所有主要路径
  6. 设置 schema 同步 — TypeScript 和 JSON Schema 一致更新

验证报告(tmux)

  • 16/16 测试通过(28ms)
  • typecheck 通过(exit 0)

架构洞察

Forked side-query 模式用于只读模型功能: 需要模型访问但不需要工具或会话修改时,用 runForkedAgent + cacheSafeParams。共享 prompt cache(省 token)同时通过 NO_TOOLS 强制只读。

— qwen3.7-max via Qwen Code /review

gwinthis pushed a commit that referenced this pull request Jul 23, 2026
@yiliang114
yiliang114 marked this pull request as ready for review July 31, 2026 17:10
@yiliang114 yiliang114 added the autofix/takeover Summon the autofix loop to manage this PR (remove to release; needs triage+) label Jul 31, 2026
@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

🚫 Qwen Triage was cancelledview run. The run was cancelled before finishing. Check for a newer run before re-running.

🚫 Qwen Triage 已取消 —— 查看运行。运行未完成即被取消。重跑前请先确认是否有更新的运行。

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

中文说明

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Thanks for the PR!

Template looks good ✓ (minor: "Risk & Scope" and "Linked Issues" headings are missing, but the content is covered in prose — not blocking).

Problem: This is a feature addition, not a bug fix — no reproduction needed. The motivation is clear: long agentic sessions converge early without an independent check, and the advisor pattern (Claude Code ships one server-side) is a proven loop. The proposal is tracked in #6542.

Direction: Aligned. The building blocks already exist (runForkedAgent cache path, buildBtwCacheSafeParams, model override), and this PR only adds the command surface — no new core infrastructure. Phase 1 (manual command) is the right scope; Phase 3 (model-callable tool) is correctly deferred.

Size: 176 production lines (settingsSchema 11, BuiltinCommandLoader 2, advisor-command 163) + 300 test lines + 5 schema lines. Well under any threshold. Core paths touched (config/, services/) are minimal registration-level changes.

Approach: The scope feels right — reuses the /btw forked-agent pattern almost verbatim, adds a focused system prompt with structured output, and handles both interactive and ACP modes. Every edit in the diff serves the stated goal; no drive-by changes. One observation: unlike /btw which is fire-and-forget (non-blocking btwItem), /advisor uses setPendingItem which blocks the UI during the call. This seems intentional (you wait for the review) and is fine.

Risk: No elevated risk signals — no high-risk paths matched.

Moving on to code review. 🔍

中文说明

感谢贡献!

模板完整 ✓(小问题:缺少 "Risk & Scope" 和 "Linked Issues" 标题,但内容已在正文中覆盖——不阻塞)。

问题:这是功能新增,不是 bug 修复——无需复现。动机清晰:长会话容易过早收敛,advisor 模式(Claude Code 已有服务端实现)是验证过的循环。提案跟踪在 #6542

方向:对齐。基础设施已存在(runForkedAgent 缓存路径、buildBtwCacheSafeParams、模型覆盖),本 PR 只添加命令层——无新核心基础设施。Phase 1(手动命令)范围正确;Phase 3(模型可调用工具)正确推迟。

规模:176 行生产代码 + 300 行测试 + 5 行 schema。远低于任何阈值。触及的核心路径(config/services/)是最小注册级改动。

方案:范围合理——几乎原样复用 /btw 的 forked-agent 模式,添加聚焦的系统提示和结构化输出,处理 interactive 和 ACP 两种模式。diff 中每个编辑都服务于目标,无顺手改动。

风险:无升级风险信号。

进入代码审查 🔍

Qwen Code · qwen3.8-max-preview

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code Review

Independent proposal: I'd reuse the runForkedAgent cache path (same as /btw), add a system prompt instructing structured review output, register in BuiltinCommandLoader, add a settings key for model override, and handle interactive + ACP modes with abort support.

Comparison: The PR matches this almost exactly. Clean implementation — 163 lines that follow the established /btw pattern faithfully. No correctness bugs, no security concerns, no regressions spotted.

Specific observations:

  • The buildAdvisorPrompt system prompt is well-structured — the <system-reminder> wrapper, the explicit "NO tools" constraint, and the fixed four-section output format are all sound. The prompt correctly tells the model it's reviewing, not doing.
  • askAdvisor correctly passes model only when advisorModel is set (empty string is falsy → no override → falls back to cacheSafeParams.model). This matches the CachePathParams.model optional semantics.
  • The interactive path uses setPendingItem (blocking) rather than /btw's fire-and-forget btwItem. This is the right call — you want to wait for the review before continuing.
  • Abort handling is correct: checks abortSignal.aborted after the await, and the finally block always clears the pending state.
  • The pendingItem guard prevents concurrent advisor calls — good.
  • Test coverage is thorough: 16 tests covering metadata, input validation, config-missing, interactive flow (pending → result → clear), focus passthrough, model override/fallback, no-context error, failure handling, busy-state block, abort, empty response, ACP mode success/failure, and prompt building.

Nit (non-blocking): The import in BuiltinCommandLoader.ts is placed after btwCommand — alphabetically by file path, advisor-command.js sorts before btwCommand.js. Trivial.

Reuse check: The PR correctly reuses runForkedAgent, buildBtwCacheSafeParams, and BTW_MAX_INPUT_LENGTH from core rather than reimplementing any of them. No new shared utilities needed.

CI Evidence

CI is still running on the reviewed commit. The ubuntu unit suite is in progress; macOS and Windows tests were skipped (conditional trigger). No failures observed so far.

Final CI results for 5bd917a (auto-updated by the triage finalize job after CI completed):

Check Conclusion
Test (ubuntu-latest, Node 22.x) ❌ failure
Classify PR ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success
review-scan ✅ success
route ✅ success
takeover-ack ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success

One row per check name (latest run); skipped checks omitted; failures sort first. / 每个检查名一行(取最新一次运行),省略 skipped,失败项排在最前。

Sandboxed verification would settle the end-to-end claim: @qwen-code /tmux — that /advisor actually returns the four-section review in a live TUI session and that the next user turn confirms the advisor output was not injected into conversation history. The unit tests mock runForkedAgent, so they verify command logic but not the real model round-trip or the UI rendering of the result.

中文说明

代码审查

独立方案: 复用 runForkedAgent 缓存路径(同 /btw),添加结构化审查输出的系统提示,注册到 BuiltinCommandLoader,添加模型覆盖设置项,处理 interactive + ACP 模式及中止支持。

对比: PR 几乎完全匹配。实现干净——163 行忠实遵循已有的 /btw 模式。未发现正确性 bug、安全隐患或回归。

具体观察:

  • buildAdvisorPrompt 系统提示结构良好——<system-reminder> 包装、明确的"无工具"约束、固定四段输出格式都合理。
  • askAdvisor 仅在 advisorModel 有值时传递 model(空字符串为 falsy → 无覆盖 → 回退到 cacheSafeParams.model)。符合 CachePathParams.model 的可选语义。
  • interactive 路径使用 setPendingItem(阻塞)而非 /btw 的即发即忘 btwItem。这是正确选择——等待审查完成再继续。
  • 中止处理正确:await 后检查 abortSignal.abortedfinally 块始终清除 pending 状态。
  • 测试覆盖全面:16 个测试覆盖元数据、输入验证、配置缺失、交互流程、focus 传递、模型覆盖/回退、无上下文错误、失败处理、忙碌状态阻塞、中止、空响应、ACP 模式、提示构建。

小问题(不阻塞): BuiltinCommandLoader.ts 中的 import 放在 btwCommand 之后——按文件路径字母序,advisor-command.js 应排在 btwCommand.js 之前。极小问题。

复用检查: PR 正确复用了 core 的 runForkedAgentbuildBtwCacheSafeParamsBTW_MAX_INPUT_LENGTH,未重新实现。

CI 证据

CI 仍在运行。ubuntu 单元测试进行中;macOS 和 Windows 测试被跳过(条件触发)。目前无失败。

沙箱验证可以确认端到端行为:@qwen-code /tmux——验证 /advisor 在真实 TUI 会话中确实返回四段审查,且下一个用户轮次确认 advisor 输出未注入对话历史。单元测试 mock 了 runForkedAgent,因此验证的是命令逻辑而非真实模型交互或 UI 渲染。

Qwen Code · qwen3.8-max-preview

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Confidence: 4/5 — clean, minimal feature that reuses proven infrastructure; only gap is CI still in flight.

This is exactly the kind of PR I like to see: 163 lines of production code that solve a real problem by composing existing primitives (runForkedAgent, buildBtwCacheSafeParams, model override) rather than building anything new. The /btw command proved this pattern works; /advisor is the same shape with a different prompt and a blocking UI. The system prompt is well-crafted — explicit constraints (no tools, review only, cite evidence), fixed output structure, and the correct framing that the transcript is the only evidence available.

The test suite is thorough for a command of this size — 16 tests covering the happy path, error paths, abort, busy state, model override, and both execution modes. The mock boundary is at the right level (runForkedAgent), so the tests verify the command's own logic without depending on model behavior.

My independent proposal matched the PR's approach almost exactly, which is a good sign — there isn't a simpler path being missed. The scope is tight (Phase 1 only, Phase 3 explicitly deferred), every edit serves the goal, and the settings addition follows the established visionModel pattern verbatim.

The only reservation: CI hasn't finished yet, and the end-to-end TUI behavior (does the four-section review actually render correctly, does the conversation remain unmutated) rests on the author's manual evidence plus the unit mocks. The /tmux lane named in Stage 2 would close that gap.

Approval deferred until CI lands green on 5bd917a149336816c1f6b945069d25ad07cb9b16.

中文说明

置信度:4/5 ——干净、最小的功能,复用已验证的基础设施;唯一差距是 CI 仍在运行。

这正是我喜欢看到的 PR:163 行生产代码通过组合现有原语(runForkedAgentbuildBtwCacheSafeParams、模型覆盖)解决真实问题,而非构建任何新东西。/btw 命令证明了此模式可行;/advisor 是相同形状,只是不同的提示和阻塞式 UI。系统提示精心设计——明确约束(无工具、仅审查、引用证据)、固定输出结构、正确框架(转录是唯一可用证据)。

测试套件对此规模的命令很全面——16 个测试覆盖正常路径、错误路径、中止、忙碌状态、模型覆盖和两种执行模式。mock 边界在正确层级(runForkedAgent),测试验证命令自身逻辑而不依赖模型行为。

我的独立方案与 PR 方案几乎完全匹配——没有更简路径被遗漏。范围紧凑(仅 Phase 1,Phase 3 明确推迟),每个编辑服务于目标,设置添加完全遵循已有的 visionModel 模式。

唯一保留:CI 尚未完成,端到端 TUI 行为(四段审查是否正确渲染、对话是否保持不变)依赖作者的手动证据和单元 mock。Stage 2 中命名的 /tmux 通道可以弥合此差距。

批准推迟至 CI 在 5bd917a149336816c1f6b945069d25ad07cb9b16 上全绿。

Qwen Code · qwen3.8-max-preview

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

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

中文说明

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

@qwen-code-dev-bot

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

Copy link
Copy Markdown
Collaborator

⚠️ AutoFix round 14 ended without publishing a reportview run.

中文说明

⚠️ AutoFix 第 14 轮结束但未发布报告 —— 查看运行

@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

No action required

This review round contains no actionable feedback:

  • Reviews: none
  • Inline comments: none
  • Failed checks: none
  • Issue-level comments: one E2E test report from @yiliang114 confirming the /advisor command works correctly across four manual scenarios (no-focus review, history isolation, focus-directed review, and pending-state display). No changes requested.

No code changes were made.

中文说明

无需操作

本轮审查不包含任何需要处理的反馈:

  • 审查意见:无
  • 行内评论:无
  • 失败的检查:无
  • Issue 级别评论@yiliang114 提交了一份 E2E 测试报告,确认 /advisor 命令在四个手动测试场景中均正常工作(无焦点审查、历史隔离、带焦点审查、等待状态显示)。未提出任何修改请求。

未做任何代码变更。

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


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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

No issues found. LGTM! ✅

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

@wenshao

wenshao commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

Review: /advisor command

Overview

Adds a manual /advisor [focus] slash command that forks the current conversation into a read-only, tool-stripped side query and asks a reviewer model for a structured second opinion (Verdict / Risks / Missing evidence / Recommendation), plus an advisorModel setting. It reuses the existing /btw primitives (buildBtwCacheSafeParams + runForkedAgent cache path) with zero core changes, so blast radius is small and the main conversation history is genuinely untouched.

The shape is right: pendingItem guard → setPendingItemawait → abort check → finally clear matches the house pattern in compressCommand.ts / summaryCommand.ts, ACP mode is handled, and settingsSchema.ts and vscode-ide-companion/schemas/settings.schema.json are kept in sync.

Verified locally: I ran advisor-command.test.ts against the PR's files — 16/16 pass. I did not run an interactive session.


Issues

1. The four-section markdown output will not render as markdown (main issue)

advisor-command.ts pushes the review into MessageType.INFO:

ui.addItem({ type: MessageType.INFO, text: review }, Date.now());

info items render through InfoMessageStatusMessageRenderInline (components/messages/StatusMessages.tsx:57), which only handles inline markers (**bold**, *italic*, `code`, ~~strike~~, <u>). It has no block-level parsing — so ## Verdict, ## Risks, bullet lists and code fences will appear as literal ## / - / ``` text, wrapped inside a single -prefixed indented block.

This directly undercuts the feature's contract, since the entire prompt is built around a fixed markdown section structure. The direct analog gets this right: /btw uses a dedicated HistoryItemBtw rendered with MarkdownDisplay (components/messages/BtwMessage.tsx:72), and even normalizes code fences so the line-based parser detects them.

Suggestion: render the review with MarkdownDisplay — either a small dedicated history item type (mirroring BtwMessage) or an existing markdown-capable item — rather than info. Worth adding a rendering test, since none of the 16 tests cover display.

2. The advisor sees only the last 40 history entries, but the prompt claims it sees everything

buildBtwCacheSafeParams (core/src/utils/btwUtils.ts) hardcodes getHistoryTail(40, true). That bound was chosen for /btw ("quick side question"), and 40 curated Content entries is far less than 40 turns — a tool-heavy agentic turn burns several entries each, so this can be ~10 real turns.

Meanwhile the advisor prompt asserts:

The transcript above is the complete evidence available to you.

…and then asks for ## Missing evidence — claims asserted but not verified in the transcript.

In exactly the long agentic sessions this feature targets (per the PR description), the advisor will confidently report "missing evidence" for work that was verified, just outside the window — the failure mode is a wrong review that reads as authoritative. Either:

  • give the advisor its own (larger) window — e.g. parametrize the entry count in buildBtwCacheSafeParams and pass an advisor-specific constant; and/or
  • drop the completeness claim from the prompt, say the transcript may be a recent excerpt, and surface that to the user when history was truncated.

3. Missing documentation

Both surfaces have established docs the PR doesn't touch:

  • docs/users/features/commands.md/btw has a full section (§1.6 Side Question) with usage table and examples; /advisor has nothing.
  • docs/users/configuration/settings.mdfastModel, visionModel, visionBridgeTimeoutMs, voiceModel each have a documented settings table; advisorModel has none.

4. advisorModel can route the transcript to another provider with no disclosure

runForkedAgent resolves a bare model id through resolveModelIdresolveAuthTypeForBareModel, so advisorModel may point at a different provider/endpoint, and the payload is the recent conversation including tool outputs and file contents — considerably more sensitive than what the vision bridge sends. Note how visionModel's description handles the same situation explicitly:

Setting this explicitly authorizes bridge calls to that model even when it uses another provider; the tool display discloses the endpoint.

advisorModel's description says nothing equivalent, and the advisor output doesn't disclose which endpoint answered. Recommend mirroring that language in the setting description and showing the model actually used in the review header.

Smaller points

  • No /model --advisor picker. --fast, --voice, --vision, --image all have one (modelCommand.ts:341); advisorModel is settings-only. Fine as a follow-up, but it's an inconsistency users will notice.
  • buildAdvisorPrompt lives in the CLI, while its counterpart buildBtwPrompt lives in core/src/utils/btwUtils.ts. Putting it in core would keep the pair symmetric and make it reusable when Phase 3 (model-callable tool) lands.
  • Borrowed constant. BTW_MAX_INPUT_LENGTH gates the advisor's focus, so the user-visible message "Focus too long (max 4096 chars)" is driven by a btw-named constant. An ADVISOR_MAX_FOCUS_LENGTH (even if aliased to the same value) would age better.
  • i18n. Only the description key was added to en.js/zh.js/zh-TW.js. Consulting advisor..., Advisor review failed: {{error}}, No conversation context available for /advisor, Focus too long (max {{max}} chars) and the busy message fall back to English for zh users. /btw has the same gap so this isn't a regression — but the locale files are already being touched here, so it's cheap to fix.
  • advisorModel isn't trimmed. A value of " " is truthy and gets passed through as a model selector, producing a provider error instead of the intended "unset" fallback. advisorModel?.trim() handles it.
  • Missing getModel() guard. btwCommand returns a clean "No model configured." error; /advisor skips it and lets the failure surface as a provider error. Minor, but the two commands read as siblings.

Tests

16/16 pass; the pending/abort/ACP/no-context paths are well covered and the mocking follows btwCommand.test.ts. Two gaps worth closing:

  • Nothing asserts the prompt actually contains the four required section headings (## Verdict, ## Risks, ## Missing evidence, ## Recommendation) — that fixed structure is the feature's contract, and the current buildAdvisorPrompt tests only check focus substitution.
  • expect.not.objectContaining({ model: expect.anything() }) is a weak assertion for the "no override" case; asserting on the actual call argument (mockRunForkedAgent.mock.calls[0][0] having no model key) is stricter. Also no test asserts abortSignal is forwarded into runForkedAgent.

Verdict

Solid, well-scoped Phase 1 — good reuse of existing primitives and correct UI lifecycle handling. Items 1 and 2 should be fixed before merge: (1) makes the structured output render as literal ## text, and (2) makes the review itself unreliable in exactly the long sessions the feature targets. Items 3 and 4 are cheap and match established project conventions.

@wenshao

wenshao commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

Maintainer verification — real build, real TUI, recorded provider wire

Verified locally at 6f7eb482e00d23b81c0a3b835a14a12cae9137bb (merge-base 912f7399).

Setup. Clean worktree → full npm run build + npm run bundle, then the built dist/cli.js driven in a real tmux TUI (isolated QWEN_HOME) against an OpenAI-compatible mock provider that records every outbound request — model, tools, full messages. Nothing inside the CLI is mocked, so every row below is what actually went on the wire.

1. What the PR claims — all confirmed

# Claim Result
1 Consulting advisor... pending state, then the four-section review
2 Advisor cannot act — tools stripped at request level ✅ main turns carry 68 tool definitions; the advisor request has no tools field at all
3 Main conversation history is never mutated ✅ the next main request contains neither the advisor prompt nor the review — and this still holds after --resume
4 advisorModel selects the reviewer model; unset → main model model=reviewer-model-x on the advisor request while the main turn used mock-model; unset → falls back to the main model
5 /advisor <focus> passes the focus through ✅ focus text appended verbatim after the <system-reminder> block
6 ESC clears the pending state, no stale result Command cancelled., upstream socket closed 4.0 s in (request 08:51:12.703Z → close 08:51:16.682Z), and when the mocked 30 s response finally fired nothing was appended
7 Focus length guard ✅ 4097 chars → Focus too long (max 4096 chars)
8 ACP / non-interactive gating qwen -p "/advisor"The command "/advisor" is not supported in this mode.

Additional probes not in the test plan:

  • Unreachable advisorModel → exactly one request (no retry storm), clean Advisor review failed: 404 …, session stays usable.
  • /advisor typed during a streaming main turn → queued, then executes correctly as a slash command afterwards (tools still absent, override still applied). No steer-as-text leak.
  • i18ngeneral.language: zh renders 让审查模型对当前对话给出第二意见.
  • Static checksadvisor-command.test.ts 16/16, settingsSchema.test.ts 36/36, BuiltinCommandLoader.test.ts 12/12, ESLint clean on all four changed source files, and npm run generate:settings-schema reproduces the committed settings.schema.json with no diff (the hand-written vscode schema entry matches the generator exactly). CI is green on this head.

Wire evidence for claims 2–4 (one log, one session):

2. Findings

F1 — The advisor is told a truncated transcript is complete. (worth one line of prompt text)

buildBtwCacheSafeParams takes getHistoryTail(40, true) and createForkedChat slices to the last 40 entries again. Both are inherited from /btw and are not introduced by this PR — but the advisor prompt asserts:

The transcript above is the complete evidence available to you.

…and then asks the model for a ## Missing evidence section listing "claims asserted but not verified in the transcript".

Measured in the run above: after 27 turns the main turn sent 56 messages, the advisor request sent 42 (1 system + 40 history entries + the advisor prompt), its first history entry was filler turn 7, and the fact planted in turn 1 (SECRET_FACT_ALPHA) was gone — while the main model still had it.

So on a long session the advisor will confidently list as "missing evidence" things that were established, and the user has no signal that it only saw a window. This bites exactly the sessions the PR motivates ("long agentic sessions tend to converge early"). For /btw a truncated window is harmless; for a reviewer whose entire job is auditing the conversation for unsupported claims it inverts the output.

Cheapest fix: change that prompt line to say the transcript may be truncated to the most recent turns. Better: give /advisor a larger cap than /btw's 40.

F2 — Reviewer Test Plan step 4 does not reproduce.

Run /advisor at the very start of a fresh session — expect a "No conversation context available" error rather than a crash.

It does not error. On a fresh session /advisor runs a normal review of an empty conversation and prints a four-section verdict about nothing. buildBtwCacheSafeParams returns null only when getGenerationConfig() is falsy or getChat() throws — never on a healthy fresh session; the unit test covering that branch forces the null through a mock. Either drop the claim, or add an explicit if (!cacheSafeParams.history.length) guard so the promised message is real.

F3 — The ui.pendingItem busy guard is not reachable from the TUI. (minor)

While the advisor is pending the composer is hidden and no input is accepted, so a second /advisor can never be submitted; a /advisor typed during a main-model turn is queued and runs after it (when pendingItem is already null). This is the generic setIsProcessing(true) behaviour shared with e.g. /compress, not something this PR introduces. Fine as defence-in-depth — noting only that the covering unit test doesn't map to a state a user can reach.

F4 — No docs.

/btw has a section in docs/users/features/commands.md; fastModel / visionModel are documented in docs/users/configuration/settings.md. /advisor and advisorModel appear in neither. Also /model supports --fast|--voice|--vision|--image but not --advisor, so /settings (it does show up correctly, screenshot above) or hand-editing settings.json is the only way to set the reviewer model.

F5 — advisor is not in SLASH_COMMANDS_SKIP_RECORDING, unlike btw. (neutral — verified safe)

The invocation and the full review are persisted to the session .jsonl as system / slash_command records. I checked this does not leak into model history: after qwen --resume <session>, the next request contained neither the advisor prompt nor the review. This reads like the right call (past reviews survive a resume) — flagging it only because it is a deliberate divergence from /btw that isn't mentioned anywhere.

3. Verdict

The implementation does what it says, on real code, including the two properties that matter most and that unit tests with a mocked runForkedAgent cannot show: tools are genuinely absent on the wire, and the main history is genuinely untouched, live and after resume. ESC really cancels the upstream request rather than just detaching the UI.

Recommend merge after F1 (one-line prompt change) and F2 (test-plan correction). F3–F5 are non-blocking.

中文说明

维护者验证 —— 真实构建、真实 TUI、记录 provider 请求

6f7eb482e00d23b81c0a3b835a14a12cae9137bb(merge-base 912f7399)本地验证。

环境:干净 worktree 执行完整 npm run build + npm run bundle,用构建产物 dist/cli.js 在真实 tmux TUI 中运行(隔离的 QWEN_HOME),对接一个会记录每一次出站请求(model、tools、完整 messages)的 OpenAI 兼容 mock provider。CLI 内部没有任何 mock,因此下面每一条都是真实上线数据。

1. PR 的声明全部得到确认

# 声明 结果
1 Consulting advisor... 等待态 → 四段式审查
2 advisor 无法执行动作——请求级剥离工具 ✅ 主对话请求带 68 个工具定义;advisor 请求完全没有 tools 字段
3 主对话历史不被污染 ✅ 下一轮主请求既无 advisor 提示也无审查结果——--resume 之后依然如此
4 advisorModel 选择审查模型;未设置则用主模型 ✅ advisor 请求 model=reviewer-model-x,同会话主请求为 mock-model;未设置时回退主模型
5 /advisor <focus> 透传 focus ✅ focus 原样附加在 <system-reminder> 之后
6 ESC 清除等待态且无迟到结果 Command cancelled.4.0 秒时上游 socket 被关闭(请求 08:51:12.703Z → 关闭 08:51:16.682Z),mock 的 30 秒响应到达时没有追加任何内容
7 focus 长度限制 ✅ 4097 字符 → Focus too long (max 4096 chars)
8 ACP / 非交互模式门控 qwen -p "/advisor"The command "/advisor" is not supported in this mode.

测试计划之外的补充探针:

  • advisorModel 指向不存在的模型 → 只发 1 次请求(无重试风暴),错误信息清晰,会话可继续使用。
  • 主模型流式输出期间输入 /advisor → 进入队列,结束后作为 slash command 正常执行(工具仍然缺席、覆盖模型仍然生效),不会被当作文本 steer 进模型。
  • i18ngeneral.language: zh 显示「让审查模型对当前对话给出第二意见」。
  • 静态检查advisor-command.test.ts 16/16、settingsSchema.test.ts 36/36、BuiltinCommandLoader.test.ts 12/12,4 个改动文件 ESLint 全清;npm run generate:settings-schema 重新生成的 settings.schema.json 无 diff(手写的 vscode schema 与生成器完全一致)。当前 head 的 CI 为绿。

2. 发现

F1 —— advisor 被告知「这是全部证据」,但它拿到的是被截断的记录(建议改一行提示词)

buildBtwCacheSafeParamsgetHistoryTail(40, true)createForkedChat 又一次截取最后 40 条。这两处都继承自 /btw,不是本 PR 引入的——但 advisor 提示词写着「The transcript above is the complete evidence available to you」,并要求输出 ## Missing evidence

实测:27 轮对话后,主请求发送 56 条消息,advisor 请求只有 42 条(1 system + 40 条历史 + advisor 提示),其第一条历史是 filler turn 7,第 1 轮埋入的 SECRET_FACT_ALPHA 已丢失,而主模型仍然持有。

于是长会话中 advisor 会把实际已经确立过的内容当作「缺失证据」列出,用户也得不到任何截断提示。而这恰恰是 PR 动机所指的那类会话。对 /btw 而言窗口截断无伤大雅;但对一个专职审查「有无未经证实的断言」的角色,这会直接反转结论。

最低成本修法:把该行提示词改成「以上记录可能只包含最近若干轮」。更好的做法:给 /advisor 设置比 /btw 更大的上限。

F2 —— Reviewer Test Plan 第 4 步无法复现

全新会话执行 /advisor 并不会报错,而是对空对话正常做了一次四段式审查。buildBtwCacheSafeParams 只在 getGenerationConfig() 为假值或 getChat() 抛错时返回 null,健康的新会话永远不会走到;覆盖该分支的单测是用 mock 强制返回 null 的。建议要么删掉这条声明,要么加 if (!cacheSafeParams.history.length) 让承诺的提示真实存在。

F3 —— ui.pendingItem 忙碌保护在 TUI 中不可达(次要)

advisor 等待期间输入框被隐藏、不接受任何输入,第二个 /advisor 根本提交不了;主模型输出期间输入的 /advisor 会进队列、在 pendingItem 已为 null 后才执行。这是 setIsProcessing(true) 的通用行为(/compress 等同样如此),不是本 PR 引入的问题。作为防御性代码没问题,只是对应的单测并不映射到用户可达的状态。

F4 —— 没有文档

/btwdocs/users/features/commands.md 有章节,fastModel / visionModeldocs/users/configuration/settings.md 有条目;/advisoradvisorModel 两处都没有。另外 /model 支持 --fast|--voice|--vision|--image 但没有 --advisor,所以只能通过 /settings(截图显示确实能正确展示)或手改 settings.json 设置。

F5 —— advisor 不在 SLASH_COMMANDS_SKIP_RECORDING 中,与 btw 不同(中性,已验证安全)

调用与完整审查结果会以 system / slash_command 记录写进会话 .jsonl。已验证这不会泄漏进模型历史:qwen --resume <session> 之后的请求既无 advisor 提示也无审查结果。这个选择看起来是对的(resume 后仍能看到历史审查),只是它与 /btw 的刻意差异在任何地方都没有说明。

3. 结论

实现与描述一致,并且用 mock 掉 runForkedAgent 的单测无法证明的两个关键属性在真实链路上成立:工具在 wire 上确实不存在主历史在实时与 resume 之后都确实未被改动;ESC 也确实取消了上游请求,而不只是把 UI 断开。

建议在完成 F1(一行提示词)与 F2(测试计划更正)后合并;F3–F5 不阻塞。

- Fix prompt to acknowledge transcript may be truncated (F1)
- Add empty history guard so fresh sessions get a clean error (F2)
- Add getModel() guard consistent with /btw
- Trim advisorModel to reject whitespace-only values
- Add cross-provider disclosure to advisorModel description
- Add ADVISOR_MAX_FOCUS_LENGTH constant
- Add i18n entries for advisor-specific strings (en/zh/zh-TW)
- Strengthen tests: section headings, abortSignal forwarding,
  empty history, whitespace model, no-override assertion
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

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

Review feedback addressed

Required fixes (maintainer blockers)

F1 — Prompt falsely claims transcript is complete → Fixed

Changed the prompt line from "The transcript above is the complete evidence available to you" to "The transcript above may be truncated to the most recent turns; treat what is shown as the evidence available to you." Also updated the ## Missing evidence section description to note that "earlier verification may exist outside the shown window." This prevents the advisor from confidently reporting verified work as "missing evidence" in long sessions.

F2 — Fresh session does not error as documented → Fixed

Added an explicit cacheSafeParams.history.length === 0 guard in askAdvisor so that a fresh session with no conversation history gets the "No conversation context available for /advisor" error instead of running a meaningless review of nothing. Added a covering test.

Suggestions addressed

advisorModel whitespace-only value → Fixed

advisorModel?.trim() || undefined rejects whitespace-only values that would otherwise be passed through as a model selector, producing a confusing provider error.

Missing getModel() guard → Fixed

Added the same config.getModel() guard that /btw uses, returning a clean "No model configured." error instead of letting the failure surface as a provider error.

i18n gaps → Fixed

Added zh and zh-TW translations for all advisor-specific user-facing strings: Consulting advisor..., Advisor review failed: {{error}}, No conversation context available for /advisor, Focus too long (max {{max}} chars), and the busy-guard message. Also added en.js entries for consistency.

advisorModel cross-provider disclosure (Issue 4) → Fixed

Updated the setting description to include: "Setting this sends the recent conversation transcript to that model, even when it uses another provider." Regenerated settings.schema.json.

Borrowed constant → Fixed

Added ADVISOR_MAX_FOCUS_LENGTH as a local alias for BTW_MAX_INPUT_LENGTH, so the advisor's error message is no longer driven by a btw-named constant.

Test improvements → Fixed

  • Added assertion that the prompt contains all four required section headings (## Verdict, ## Risks, ## Missing evidence, ## Recommendation)
  • Added assertion that the prompt acknowledges truncation and does not claim completeness
  • Added abortSignal forwarding test
  • Strengthened the "no model override" assertion to inspect actual call args (not.toHaveProperty('model')) instead of the weaker not.objectContaining
  • Added tests for: empty history guard, whitespace-only advisorModel, getModel() guard

Suggestions declined

Issue 1 — Markdown rendering via MarkdownDisplay → Declined (follow-up)

Rendering the review through MessageType.INFO shows ## headings as literal text. The proper fix requires a new history item type and rendering component (mirroring HistoryItemBtw / BtwMessage.tsx), which is a structural change across ui/types.ts, a new component, and HistoryItemDisplay.tsx. The maintainer's verification confirmed the feature works and recommended merge after F1+F2 only. Better suited for a follow-up PR.

No /model --advisor picker → Declined (follow-up)

The reviewer noted this is "fine as a follow-up." Adding a new flag to modelCommand.ts is out of scope for this review-fix round.

buildAdvisorPrompt in core → Declined (follow-up)

Moving the prompt builder to packages/core for symmetry with buildBtwPrompt is a Phase 3 concern noted by the reviewer. Not needed for the current feature.

No change needed

F3 — pendingItem busy guard unreachable from TUI — Kept as defence-in-depth. The reviewer confirmed this is generic setIsProcessing(true) behaviour shared with /compress, not introduced by this PR.

F5 — advisor not in SLASH_COMMANDS_SKIP_RECORDING — Verified safe by the maintainer. The deliberate divergence from /btw means past reviews survive --resume, which is the right behavior.

F4 — Missing documentation — Noted. The maintainer classified this as non-blocking. Docs for /advisor in commands.md and advisorModel in settings.md can be added in a follow-up.

Verification

  • npm run build — passed
  • npm run typecheck — passed
  • npx eslint on all 3 changed source files — passed (clean)
  • npx vitest run src/ui/commands/advisor-command.test.ts (packages/cli) — 22 passed
  • npm run generate:settings-schema — regenerated, diff matches committed schema
中文说明

审查反馈处理

必要修复(维护者阻塞项)

F1 — 提示词错误声称记录是完整的 → 已修复

将提示词从「The transcript above is the complete evidence available to you」改为「The transcript above may be truncated to the most recent turns; treat what is shown as the evidence available to you」。同时更新了 ## Missing evidence 段落描述,注明「earlier verification may exist outside the shown window」。防止 advisor 在长会话中将已验证的工作错误地报告为「缺失证据」。

F2 — 全新会话不会按文档描述报错 → 已修复

askAdvisor 中添加了 cacheSafeParams.history.length === 0 守卫,使没有对话历史的全新会话收到「No conversation context available for /advisor」错误,而不是对空对话执行无意义的审查。已添加对应测试。

已处理的建议

advisorModel 纯空白值 → 已修复

advisorModel?.trim() || undefined 拒绝纯空白值,避免其被当作模型选择器传递导致令人困惑的 provider 错误。

缺少 getModel() 守卫 → 已修复

添加了与 /btw 相同的 config.getModel() 守卫,返回清晰的「No model configured.」错误,而非让失败以 provider 错误的形式暴露。

i18n 缺失 → 已修复

为所有 advisor 特有的用户可见字符串添加了 zh 和 zh-TW 翻译:Consulting advisor...Advisor review failed: {{error}}No conversation context available for /advisorFocus too long (max {{max}} chars) 以及忙碌守卫消息。同时在 en.js 中添加了条目以保持一致性。

advisorModel 跨 provider 披露(Issue 4) → 已修复

更新设置描述,增加:「Setting this sends the recent conversation transcript to that model, even when it uses another provider.」已重新生成 settings.schema.json

借用常量 → 已修复

添加 ADVISOR_MAX_FOCUS_LENGTH 作为 BTW_MAX_INPUT_LENGTH 的本地别名,advisor 的错误消息不再由 btw 命名的常量驱动。

测试改进 → 已修复

  • 添加断言:提示词包含全部四个必需段落标题(## Verdict## Risks## Missing evidence## Recommendation
  • 添加断言:提示词承认截断可能性,不声称完整性
  • 添加 abortSignal 转发测试
  • 加强「无模型覆盖」断言,检查实际调用参数(not.toHaveProperty('model'))替代较弱的 not.objectContaining
  • 新增测试:空历史守卫、纯空白 advisorModelgetModel() 守卫

已拒绝的建议

Issue 1 — 通过 MarkdownDisplay 渲染 Markdown → 拒绝(后续 PR)

通过 MessageType.INFO 渲染审查结果会将 ## 标题显示为字面文本。正确的修复需要新的历史条目类型和渲染组件(参照 HistoryItemBtw / BtwMessage.tsx),涉及 ui/types.ts、新组件和 HistoryItemDisplay.tsx 的结构性变更。维护者验证确认功能正常,仅建议修复 F1+F2 后合并。更适合后续 PR。

/model --advisor 选择器 → 拒绝(后续)

审查者指出这「可以作为后续」。在 modelCommand.ts 中添加新标志超出本轮审查修复范围。

buildAdvisorPrompt 移至 core → 拒绝(后续)

将提示词构建器移至 packages/core 以与 buildBtwPrompt 对称是审查者提到的 Phase 3 事项。当前功能不需要。

无需更改

F3 — pendingItem 忙碌守卫在 TUI 中不可达 — 保留作为防御性代码。审查者确认这是 setIsProcessing(true) 的通用行为(/compress 等同样如此),非本 PR 引入。

F5 — advisor 不在 SLASH_COMMANDS_SKIP_RECORDING — 维护者已验证安全。与 /btw 的刻意差异意味着历史审查在 --resume 后仍然可见,这是正确的行为。

F4 — 缺少文档 — 已记录。维护者将其归类为非阻塞。/advisorcommands.mdadvisorModelsettings.md 的文档可在后续添加。

验证

  • npm run build — 通过
  • npm run typecheck — 通过
  • npx eslint(3 个改动的源文件)— 通过(无警告)
  • npx vitest run src/ui/commands/advisor-command.test.ts(packages/cli)— 22 通过
  • npm run generate:settings-schema — 已重新生成,diff 与提交的 schema 一致

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

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


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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed. Suggestions are inline.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP behavior is fully unit-tested and green).

Not reviewed: reverse audit — hit the 5-round hard cap while round 5 was still reporting (no dry convergence).

Not explored to full depth (tool budget reached): chunk 7: running forkedAgent.cache.test.ts — the review worktree has no node_modules ( Cannot find package 'vitest' ), so the two new assertions were verified only b…; "You are review agent reverse-audit — Reverse audit agent…": none — no check left unfinished at the ceiling (~42 of ~52 calls used).; "You are review agent reverse-audit — Reverse audit agent…": none — all checks above completed within budget.; "You are review agent reverse-audit — Reverse audit agent…": none — all checks above completed within budget.; "You are review agent reverse-audit — Reverse audit agent…": none — all checks above completed within budget., and 7 more.

中文说明

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

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP behavior is fully unit-tested and green)。

未审查:reverse audit — hit the 5-round hard cap while round 5 was still reporting (no dry convergence)。

未探索到全部深度(达到工具调用预算):chunk 7:running forkedAgent.cache.test.ts — the review worktree has no node_modules ( Cannot find package 'vitest' ), so the two new assertions were verified only b…"You are review agent reverse-audit — Reverse audit agent…"none — no check left unfinished at the ceiling (~42 of ~52 calls used)."You are review agent reverse-audit — Reverse audit agent…"none — all checks above completed within budget."You are review agent reverse-audit — Reverse audit agent…"none — all checks above completed within budget."You are review agent reverse-audit — Reverse audit agent…"none — all checks above completed within budget.,另有 7 条。

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

Comment thread packages/cli/src/ui/components/messages/AdvisorMessage.test.tsx
Comment thread packages/cli/src/acp-integration/session/Session.ts
Comment thread packages/cli/src/i18n/mustTranslateKeys.ts
Comment thread packages/core/src/core/openaiContentGenerator/pipeline.ts Outdated

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed. Suggestions are inline.

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

Not explored to full depth (tool budget reached): "Restart-pass reverse audit of PR #7567 (/advisor command)…": none — all checks above completed within budget; no verification left unfinished.; "Restart-pass reverse audit of PR #7567 (/advisor command)…": none — the entire assigned range was read untruncated and walked.; "Restart-pass reverse audit of PR #7567 (/advisor command)…": none — all checks completed within budget.; "Restart-pass reverse audit of PR #7567 (/advisor command)…": none — stayed well within budget (about 10 calls).; "Restart-pass reverse audit of PR #7567 (/advisor command)…": none — all planned checks completed within budget (~10 tool calls)., and 4 more.

Not reviewed: reverse audit — stopped before round 4 by the review time budget.

中文说明

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

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

未探索到全部深度(达到工具调用预算):"Restart-pass reverse audit of PR #7567 (/advisor command)…"none — all checks above completed within budget; no verification left unfinished."Restart-pass reverse audit of PR #7567 (/advisor command)…"none — the entire assigned range was read untruncated and walked."Restart-pass reverse audit of PR #7567 (/advisor command)…"none — all checks completed within budget."Restart-pass reverse audit of PR #7567 (/advisor command)…"none — stayed well within budget (about 10 calls)."Restart-pass reverse audit of PR #7567 (/advisor command)…"none — all planned checks completed within budget (~10 tool calls).,另有 4 条。

未审查:反向审计——评审时间预算不足,未能开始第 4 轮。

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

Comment thread packages/cli/src/acp-integration/session/Session.ts Outdated
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Status update from resolve-pr-comments:

Changed: fixed ACP slash-command early-return telemetry so completed /advisor turns emit conversation_finished, and mapped schema-backed OpenAI JSON requests to json_schema instead of dropping the schema.

Verified: focused OpenAI pipeline tests, focused ACP Session advisor/conversation_finished tests, ESLint, Prettier, and git diff --check.

Intentionally not changed: layout/i18n mutation-hardening and command-metadata extraction suggestions were resolved as out of scope for this closeout.

Pending: CI and automatic review on head 485726d.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP/core behavior is fully unit-tested and green in this review).

Not explored to full depth (tool budget reached): "You are review agent reverse-audit — Reverse audit agent…": none — all planned checks completed within budget.; "You are review agent reverse-audit — Reverse audit agent…": none — all checks I started were completed within budget.; "You are review agent reverse-audit — Reverse audit agent…": none — all checks above were completed within budget.; "You are review agent reverse-audit — Reverse audit agent…": none — all checks above completed within budget.; "You are review agent reverse-audit — Reverse audit agent…": none — all checks I started were completed within budget (~8 tool calls)., and 7 more.

中文说明

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

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP/core behavior is fully unit-tested and green in this review)。

未探索到全部深度(达到工具调用预算):"You are review agent reverse-audit — Reverse audit agent…"none — all planned checks completed within budget."You are review agent reverse-audit — Reverse audit agent…"none — all checks I started were completed within budget."You are review agent reverse-audit — Reverse audit agent…"none — all checks above were completed within budget."You are review agent reverse-audit — Reverse audit agent…"none — all checks above completed within budget."You are review agent reverse-audit — Reverse audit agent…"none — all checks I started were completed within budget (~8 tool calls).,另有 7 条。

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

Comment thread packages/core/src/core/openaiContentGenerator/pipeline.ts
Comment thread packages/core/src/core/openaiContentGenerator/pipeline.ts
Comment thread packages/cli/src/acp-integration/session/Session.ts
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Status update from resolve-pr-comments:

Changed: normalized compatible JSON schemas before sending OpenAI strict json_schema, falls back to json_object for schemas that cannot be safely strictified, and emits conversation_finished when ACP /advisor fails with an error message.

Verified: changed-file Prettier, ESLint, and git diff --check passed. Focused core/CLI Vitest collection is still locally blocked by the existing missing ajv/dist/2020.js dependency.

Pending: CI and automatic review on head 78754a0.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and the build-test harness ran zero test suites because the PR's own core build failure blocked the test phase; focused unit suites were run green by review agents instead.

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 5.

中文说明

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

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and the build-test harness ran zero test suites because the PR's own core build failure blocked the test phase; focused unit suites were run green by review agents instead。

未审查:反向审计——在 5 轮的反审轮数上限内未收敛。

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

Comment thread packages/core/src/core/openaiContentGenerator/pipeline.ts Outdated
Comment thread packages/cli/src/acp-integration/session/Session.ts Outdated
Comment thread packages/cli/src/acp-integration/session/Session.ts Outdated
Comment thread packages/cli/src/ui/utils/commandUtils.ts Outdated
Comment thread packages/core/src/core/openaiContentGenerator/pipeline.ts
Comment thread packages/cli/src/acp-integration/session/Session.ts
@yiliang114

Copy link
Copy Markdown
Collaborator Author

Status update from resolve-pr-comments:

Changed: fixed the OpenAI strict-schema TypeScript index-signature compile error and made ACP slash-command error exits emit conversation_finished consistently with fully-handled slash commands.

Verified: ESLint on touched files, Prettier, and git diff --check passed. Focused Vitest collection is still blocked locally by the existing missing ajv/dist/2020.js resolution issue; package typecheck also hits existing dependency/type errors outside this patch.

Intentionally not changed: the /advisor shadowing recording findings need a resolved-command metadata/result-contract decision before a safe fix.

Pending: CI/automatic review on the new head; remaining active test-gap/shadowing threads are not all closed.

@yiliang114

Copy link
Copy Markdown
Collaborator Author

Closeout from resolve-pr-comments automation:

Changed: no product code. The previous exact-head failed CI jobs had empty or non-actionable failed logs, so I requested a failed-job rerun for the Qwen Code CI and SDK Java runs.

Verified: rerun requests were accepted by GitHub.

Pending: rerun CI and automatic review on the current head.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Not reviewed: reverse audit — did not converge within the reverse-audit round cap of 5.

中文说明

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

未审查:反向审计——在 5 轮的反审轮数上限内未收敛。

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

Comment thread packages/core/src/core/openaiContentGenerator/pipeline.ts
R18-6: classify the /advisor recording gate by the resolved command's
kind instead of the raw input string, so user-defined commands shadowing
the name still record their prompt while the built-in /advisor stays out
of the transcript. handleSlashCommand now returns the resolved command's
name+kind alongside every result.

R19-1: gate buildResponseFormat on the official OpenAI endpoint, matching
the prompt-caching precedent; third-party OpenAI-compatible endpoints
(DeepSeek, older vLLM, validating gateways) reject the unknown
response_format field and this pipeline never sent it before.
R18-10: the TUI recording-skip gate now matches the built-in /advisor
by kind+name instead of the bare name in SLASH_COMMANDS_SKIP_RECORDING,
so a user-defined command shadowing the name is recorded like any other
custom command. Regression test covers the FILE-kind shadow.

R18-3: pin the normalizeOpenAIStrictSchema -> json_object fallback with
the goalJudge-shaped partial-required schema and a typeless property.

R18-4: assert logConversationFinishedEvent fires on the fully-handled
non-advisor ACP slash-command path in the existing /btw test.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

Unresolved, please confirm:

  • [Critical] markdownUtilities.ts — normalizeCodeFences math-block tracker toggles on $$ lines unconditionally vs raw render mode (comment 3714938802): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — phantom fence from a second delimiter run in a fence-line remainder (comment 3714938807): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — closesGlued remainder check /^ *$/ rejects \r and \t on CRLF text (comment 3714938811): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — inserted newline can turn the same-line prefix into a fence line the tracker never re-evaluates (comment 3714938826): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — R5-3: inline x closing run promoted to an unterminated fence opener (comment 3717579076): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — R5-6: tilde twin of R5-3 for inline ~~~x~~~ pairs (comment 3717579078): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — R5-4: closesGlued splits an inline pair ending a code-content line (comment 3717579081): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — R5-9: closesGlued splits any mid-line run with a whitespace-only remainder (comment 3717579085): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — R5-8: tab/NBSP prefix makes a line-start run look mid-line and promotes it (comment 3717579090): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR
  • [Critical] markdownUtilities.ts — R7-6: promotes-branch guards miss 1-2 char inline span prefixes (comment 3736619495): file is not in this PR's diff at head 4d2762f; cannot rule on it for this PR

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP/core behavior is fully unit-tested and green in this review).

Not reviewed: reverse audit — hit the 5-round cap without dry convergence; round-5 candidates were ruled already-discussed (R14-5 schema pin deferred twice; AdvisorMessage fence-normalization deferred as follow-up) or pre-existing (/btw ACP recording unchanged at the merge base).

Not explored to full depth (tool budget reached): chunk 6: none — everything completed. I won't write a Budget gap line.I've completed my review of chunk 6. Summary of what I examined and verified against the worktree:.

中文说明

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

未决,请确认:共 10 条(原文未翻译,列表见上方英文部分)。

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP/core behavior is fully unit-tested and green in this review)。

未审查:reverse audit — hit the 5-round cap without dry convergence; round-5 candidates were ruled already-discussed (R14-5 schema pin deferred twice; AdvisorMessage fence-normalization deferred as follow-up) or pre-existing (/btw ACP recording unchanged at the merge base)。

未探索到全部深度(达到工具调用预算):chunk 6:none — everything completed. I won't write a Budget gap line.I've completed my review of chunk 6. Summary of what I examined and verified against the worktree:

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

Comment on lines +4185 to 4189
const resolvedCommandInfo = slashCommandResult.resolvedCommand;
const shouldRecordSlashCommand = !(
resolvedCommandInfo?.kind === CommandKind.BUILT_IN &&
resolvedCommandInfo.name === 'advisor'
);

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] R20-9: Deferred slash-input recording relocates /clear's user-turn record into the NEW session's transcript. /clear (aliases /reset, /new — the only session-switching commands available in ACP mode) passes this gate (not the built-in advisor), its action calls config.startNewSession(), which finalizes the old recorder and assigns a fresh ChatRecordingService mid-turn — so the deferred recordUserMessage below fetches the NEW recorder, and both the /clear user turn and its result record land in the new session's JSONL. Before this PR the user message was recorded before command execution, into the OLD session's transcript. — Failure scenario: run /clear in an ACP session, then resume the new session → SessionApiHistoryAccumulator.add includes plain user records, so the model API history starts with a dangling user "/clear" turn with no assistant reply — permanent context pollution of exactly the session /clear exists to make clean; /export of the old session likewise shows the missing final user turn.

Witness (A/B probe, Session.test.ts harness):

PR:  OLD recordUserMessage count= 0 | NEW recordUserMessage count= 1 args= [["/clear"]]
fix: OLD recordUserMessage count= 1 args= [["/clear"]] | NEW recordUserMessage count= 0

Suggested fix: capture this.config.getChatRecordingService() before handleSlashCommand runs and use it for the deferred user-message record (probe-verified to restore base placement). Alternatively skip recording session-lifecycle commands in the ACP gate the way the TUI skip-set does — but that set also contains btw, so this variant additionally changes /btw ACP recording and needs its own decision.

中文说明

[Critical] R20-9:延迟的斜杠输入记录把 /clear 的用户轮次记录写进了新会话的转录。/clear(别名 /reset/new——ACP 模式下仅有的会话切换命令)能通过这个门控(它不是内置 advisor),其 action 调用 config.startNewSession(),在轮次中途终结旧记录器并指定新的 ChatRecordingService——因此下方延迟执行的 recordUserMessage 拿到的是新记录器,/clear 的用户轮次与结果记录都落入新会话的 JSONL。本 PR 之前,用户消息在命令执行前记录,落入旧会话的转录。— 失败场景:在 ACP 会话中运行 /clear,然后恢复(resume)新会话 → SessionApiHistoryAccumulator.add 会包含普通 user 记录,因此模型 API 历史以一条没有助手回复的悬空用户 "/clear" 轮次开头——恰恰污染了 /clear 本应清理干净的会话;对旧会话执行 /export 同样会看到缺失的最后一个用户轮次。

证据(A/B 探针,Session.test.ts 测试框架):PR 侧旧会话 recordUserMessage 次数为 0、新会话为 1(参数 [["/clear"]]);采用修复后旧会话为 1、新会话为 0。

建议修复:在 handleSlashCommand 执行前捕获 this.config.getChatRecordingService(),并用它执行延迟的用户消息记录(探针验证可恢复 base 的落位)。也可以像 TUI 的 skip-set 那样在 ACP 门控中跳过会话生命周期命令的记录——但该集合同时需要包含 btw,这个变体会额外改变 /btw 的 ACP 记录行为,需要单独决策。

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

Comment on lines +4112 to +4114
} else if (!isSlashInput) {
// record user message for session management. Slash input is
// recorded after command resolution below: a user-defined

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-2: Moving the slash-input user-message recording from before handleSlashCommand to after it drops the user-turn record whenever a command action THROWS — the pre-change unconditional branch had already persisted it before execution. — Failure scenario: in an ACP session, a custom command whose action throws (handleSlashCommand rethrows action errors) → the prompt rejects and the post-resolution recording block is never reached, so the turn is absent from the transcript; after a restart/replay the user's input line is silently gone, where before this PR it survived command failures. Concrete cost: error-path transcript completeness — the user instruction that preceded a failed command disappears from session records and resume.

Witness (A/B probe at this anchor):

BASE (merge base): recordUserMessage calls: 1 [["/mycustom do things"]]
PR:                recordUserMessage calls: 0 []
(both reject with Error: command action blew up)

Suggested fix: record on the rejection path too — wrap the handleSlashCommand call in try/catch, perform the same shouldRecordSlashCommand-gated recordUserMessage on the way out, then rethrow.

中文说明

[Suggestion] R20-2:把斜杠输入的用户消息记录从 handleSlashCommand 之前移到之后,导致命令 action 抛错时用户轮次记录丢失——改动前的无条件分支会在执行前完成持久化。— 失败场景:在 ACP 会话中运行一个 action 会抛错的自定义命令(handleSlashCommand 会原样重抛 action 错误)→ prompt 以拒绝结束,解析后的记录块永远不会执行,该轮次从转录中缺失;重启/回放后用户的输入行被静默丢失,而本 PR 之前命令执行失败也不会丢失。具体代价:错误路径下的转录完整性——失败命令之前的用户指令从会话记录和 resume 中消失。

证据(在该锚点处的 A/B 探针):BASE(merge base)侧 recordUserMessage 调用 1 次(参数 [["/mycustom do things"]]);PR 侧为 0 次(两者都以 Error: command action blew up 拒绝)。

建议修复:在拒绝路径同样记录——用 try/catch 包住 handleSlashCommand 调用,在退出时执行同样受 shouldRecordSlashCommand 门控的 recordUserMessage,然后重抛。

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

Comment on lines +4208 to +4209
try {
parts = await this.#processSlashCommandResult(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-4: The new conversation_finished error-emission catch wraps only #processSlashCommandResult; the adjacent await handleSlashCommand(...) call above sits outside the try/catch, so a command action or loader throw rejects the ACP turn with no ConversationFinishedEvent, while the identical error class thrown one step later (messageType: 'error' result) does emit. — Failure scenario: in ACP mode, a custom command whose action throws (or a CommandService.create loader failure) → the turn silently drops from conversation metrics while its twin (error message result, pinned by this diff's own test 'records completion when /advisor returns an error message') emits; the diff's stated intent is to emit on every terminal slash path.

Witness (probe):

PR:          finishedSpy call count: 0
widened try: finishedSpy call count: 1  (all 4 advisor-telemetry tests still pass with the fix)

Suggested fix: widen the try to start before the handleSlashCommand call — the advisor-cancel early return inside stays valid (it returns, so the catch never double-emits): try { const slashCommandResult = await handleSlashCommand(...); ... parts = await this.#processSlashCommandResult(...); } catch (error) { logConversationFinishedEvent(...); throw error; }.

中文说明

[Suggestion] R20-4:新增的 conversation_finished 错误发射 catch 只包住了 #processSlashCommandResult;上方相邻的 await handleSlashCommand(...) 调用在 try/catch 之外,因此命令 action 或加载器抛错时,ACP 轮次以拒绝结束却不发射 ConversationFinishedEvent,而一步之后抛出的同类错误(messageType: 'error' 结果)却会发射。— 失败场景:ACP 模式下某个自定义命令的 action 抛错(或 CommandService.create 加载失败)→ 该轮次从会话指标中静默消失,而其孪生路径(错误消息结果,本 diff 自己的测试 'records completion when /advisor returns an error message' 已固定)却会发射;diff 声明的意图是在每个终结的斜杠路径上都发射。

证据(探针):PR 侧 finishedSpy 调用次数为 0;扩大 try 范围后为 1(修复下 4 个 advisor 遥测测试仍全部通过)。

建议修复:把 try 提前到 handleSlashCommand 调用之前——内部的 advisor-cancel 提前返回仍然有效(它是 return,catch 不会重复发射):try { const slashCommandResult = await handleSlashCommand(...); ... parts = await this.#processSlashCommandResult(...); } catch (error) { logConversationFinishedEvent(...); throw error; }

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

Comment on lines +576 to +579
const resolvedCommand: ResolvedSlashCommandInfo = {
name: commandToExecute.name,
kind: commandToExecute.kind,
};

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-3: No test pins that handleSlashCommand attaches resolvedCommand with kind: BUILT_IN for built-in commands, yet the ACP transcript-skip gate in Session.ts depends on exactly that pairing. Every Session.test.ts case mocks handleSlashCommand wholesale and hand-feeds resolvedCommand, while nonInteractiveCliCommands.test.ts asserts resolvedCommand only on FILE-kind custom-command results; the new built-in-advisor test there asserts only the abortSignal passthrough. — Failure scenario: mutation executed — dropping resolvedCommand from the generic final return keeps nonInteractiveCliCommands.test.ts 50/50 and Session.test.ts 621/621 green, while the Session gate sees undefined, shouldRecordSlashCommand becomes true, and built-in /advisor reviews start being written into the ACP transcript — the regression this PR exists to prevent.

Witness (executed mutation):

mutation (drop resolvedCommand from generic return): Tests 50 passed (50) + Tests 621 passed (621)
+ suggested assertion under mutation: AssertionError: expected undefined to deeply equal { name: 'advisor', kind: 'built-in' }

Suggested fix: assert on the real result of a BUILT_IN command execution in nonInteractiveCliCommands.test.ts, e.g. extend the existing advisor test with await expect(handleSlashCommand('/advisor check this', ...)).resolves.toEqual(expect.objectContaining({ resolvedCommand: { name: 'advisor', kind: CommandKind.BUILT_IN } })).

中文说明

[Suggestion] R20-3:没有任何测试固定 handleSlashCommand 会为内置命令附带 kind: BUILT_INresolvedCommand,而 Session.ts 中的 ACP 转录跳过门控恰恰依赖这一配对。Session.test.ts 的所有用例都整体 mock 了 handleSlashCommand 并手工喂入 resolvedCommandnonInteractiveCliCommands.test.ts 只在 FILE 类型的自定义命令结果上断言 resolvedCommand,其中新增的内置 advisor 测试只断言了 abortSignal 透传。— 失败场景:已执行变异——从通用最终返回中删除 resolvedCommand 后,nonInteractiveCliCommands.test.ts 50/50 与 Session.test.ts 621/621 仍然全绿,而 Session 门控看到 undefinedshouldRecordSlashCommand 变为 true,内置 /advisor 评审开始被写入 ACP 转录——正是本 PR 要防止的回归。

证据(已执行的变异):变异(从通用返回中删除 resolvedCommand)下两个测试套件分别 50/50、621/621 通过;在变异下加入建议断言则报 AssertionError: expected undefined to deeply equal { name: 'advisor', kind: 'built-in' }

建议修复:在 nonInteractiveCliCommands.test.ts 中对 BUILT_IN 命令的真实执行结果断言,例如在现有 advisor 测试中补充 await expect(handleSlashCommand('/advisor check this', ...)).resolves.toEqual(expect.objectContaining({ resolvedCommand: { name: 'advisor', kind: CommandKind.BUILT_IN } }))

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

Comment on lines +112 to +113
OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS.has(key) ||
!OPENAI_STRICT_SCHEMA_KEYS.has(key)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-8: The allowlist clause !OPENAI_STRICT_SCHEMA_KEYS.has(key) that strips unknown schema keys in normalizeOpenAIStrictSchema is pinned by no test — every new normalizer test feeds only whitelisted keys (plus the minLength family), so deleting the clause keeps the whole suite green while foreign keys leak into the strict OpenAI wire shape. — Failure scenario: runForkedAgent accepts an arbitrary caller jsonSchema, and zod toJsonSchema() output includes $schema by default; under the executed mutation, $schema/title/default leak into response_format.json_schema.schema and the regression ships silently. Concrete cost: the allowlist exists precisely to keep decorated schemas off the strict wire; nothing notices its removal.

Witness (executed mutation + flip probe):

mutation (remove !OPENAI_STRICT_SCHEMA_KEYS.has(key)): pipeline.test.ts 160/160 still pass
probe with {$schema, title, default} keys: leaks + "title": "AdvisorReview", + "default": "" under the mutation; stripped once restored

Suggested fix: add a normalization test supplying a schema with unknown keys ($schema, title, default, $defs) and assert they are stripped from the emitted json_schema (or that the schema falls back to json_object).

中文说明

[Suggestion] R20-8:normalizeOpenAIStrictSchema 中负责剥离未知 schema 键的允许列表子句 !OPENAI_STRICT_SCHEMA_KEYS.has(key) 没有任何测试固定——所有新的 normalizer 测试只喂入白名单内的键(外加 minLength 一族),删除该子句后整个测试套件仍然全绿,而外部键会泄漏进 OpenAI 严格线格式。— 失败场景:runForkedAgent 接受任意调用方的 jsonSchema,zod 的 toJsonSchema() 输出默认包含 $schema;在已执行的变异下,$schema/title/default 会泄漏进 response_format.json_schema.schema,回归会静默上线。具体代价:允许列表正是为了把带装饰的 schema 挡在严格线格式之外;它的删除不会有任何东西察觉。

证据(已执行的变异 + 翻转探针):变异(删除 !OPENAI_STRICT_SCHEMA_KEYS.has(key))后 pipeline.test.ts 160/160 仍全部通过;喂入含 {$schema, title, default} 键的探针在变异下泄漏 + "title": "AdvisorReview"+ "default": "",恢复子句后被剥离。

建议修复:新增一个 normalizer 测试,提供含未知键($schematitledefault$defs)的 schema,断言它们被从发射的 json_schema 中剥离(或 schema 回退为 json_object)。

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

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

Thorough pass over the full diff (39 files, +2082/-58) plus the surrounding code at head 4d2762f — ACP Session flow, nonInteractiveCliCommands, slashCommandProcessor (ESC/abort wiring), forkedAgent, geminiChat fallback gating, the OpenAI pipeline response_format normalization, docs, and i18n.

The design is solid: recording gates key on resolved-command identity, ESC cancellation in both interactive (abortControllerRef + ESC handler clears the pending indicator) and ACP (abort gate) modes is wired end-to-end, the strict-schema normalizer falls back to json_object on anything OpenAI-strict can't express (partial required, typeless properties), and response_format is gated to the official OpenAI endpoint so third-party compatible endpoints are untouched. Test coverage is strong (26 command tests, 147 pipeline tests, plus ACP recording/cancellation cases) and CI is green.

No blockers found. Three minor, non-blocking suggestions inline: one raw-token vs resolved-identity inconsistency in the ACP abort gate, one name-hardcoded abortSignal routing, and one missing markdown-fence normalization in AdvisorMessage. All three could land as-is or in a small follow-up.

pendingSend.signal,
onFullTurnModel,
if (
slashCommandName === 'advisor' &&

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.

This gate classifies by the raw input token (slashCommandName === 'advisor'), while the recording gate a few lines below classifies by the resolved command (resolvedCommand?.kind === CommandKind.BUILT_IN && name === 'advisor', per R18-6).

For a user-defined advisor command (kind FILE) that returns a message result after the ACP prompt is cancelled, this branch: (1) swallows the resolved message and reports stopReason: 'cancelled' instead of emitting it with end_turn — diverging from how other commands behave post-abort (e.g. the /btw path in the new Session tests), and (2) returns before the deferred recordUserMessage block below, so the shadowing command loses the user-turn record R18-6 explicitly preserves.

Consider keying this on the resolved identity too, e.g. slashCommandResult.resolvedCommand?.kind === CommandKind.BUILT_IN && slashCommandResult.resolvedCommand?.name === 'advisor'.

const context: CommandContext = {
executionMode,
abortSignal:
commandToExecute.name === 'advisor' ? abortController.signal : undefined,

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.

Hard-coding commandToExecute.name === 'advisor' here means every future built-in that needs a real AbortSignal in ACP has to be manually added to this condition. Is there a reason not to pass abortController.signal to all commands' CommandContext (or gate on a small built-in allowlist)? If the narrow name-match is deliberate — e.g. because /btw's fire-and-forget contract or another command's behavior depends on context.abortSignal staying undefined — a short comment saying so would help the next reader.

</Box>
<Box flexDirection="column" marginTop={1}>
<MarkdownDisplay
text={text}

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.

BtwMessage normalizes its body through normalizeCodeFences before MarkdownDisplay because models sometimes emit an opening ``` fence directly after prose without a preceding newline, and the line-based parser then renders it as prose. The advisor review fields are model-generated markdown too (the model composes risks/`recommendation` text), so an inline fence would render incorrectly here. Consider extracting that helper and reusing it for the advisor body.

R20-9: /clear (and its session-switching aliases) swaps in a fresh recorder inside its action, so its user-turn record must land before the action runs. Restore pre-resolution recording for every slash command except /advisor, which alone defers to after resolution so a user-defined command shadowing the built-in name keeps its record (R18-6).

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed. Suggestions are inline.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP/core behavior is fully unit-tested and green in this review).

Not explored to full depth (tool budget reached): chunk 5: run advisor-command.test.ts under vitest (worktree lacks node_modules; install cost exceeded remaining budget).

中文说明

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

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI (merge-queue-only job) and its suite did not run locally (the touched CLI/ACP/core behavior is fully unit-tested and green in this review)。

未探索到全部深度(达到工具调用预算):chunk 5:run advisor-command.test.ts under vitest (worktree lacks node_modules; install cost exceeded remaining budget)

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

Comment on lines +4194 to +4200
if (
slashCommandName === 'advisor' &&
shouldRecordSlashCommand &&
goalTurn?.origin !== 'runtime' &&
!isRetry
) {
const recorder = this.config.getChatRecordingService();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R21-1: The three-branch recordUserMessage shape (displayText+hookContext / goalTurn.permit / bare) is now duplicated verbatim in two places of #executePromptInner — the pre-action recording branch (~line 4119) and this deferred /advisor-shadow block. — Failure scenario: the two copies must stay byte-identical for a shadowing custom advisor command's transcript record to match every other slash command's record (the stated R18-6 intent). Any future change to the recording metadata applied to one site but not the other silently gives /advisor-named custom commands a different transcript record shape, which no test pins. Suggested fix: extract the shared body into a small private helper (e.g. #recordUserTurn(promptText, promptDisplayText, goalTurn)) and call it from both branches.

中文说明

[建议] R21-1:三分支的 recordUserMessage 形状(displayText+hookContext / goalTurn.permit / 裸调用)现在在 #executePromptInner 中逐字重复出现于两处——执行前记录分支(约 4119 行)与这个 /advisor 影子命令延迟记录块。— 失败场景:这两份拷贝必须逐字保持一致,命名为 advisor 的自定义影子命令的转录记录才能与其他斜杠命令的记录形状一致(即 R18-6 注释声明的意图)。未来对记录元数据的任何修改若只应用到其中一处,会静默地让名为 advisor 的自定义命令得到不同的转录记录形状,而没有任何测试能捕获这种漂移。建议修复:把共享主体提取为一个小的私有辅助方法(如 #recordUserTurn(promptText, promptDisplayText, goalTurn)),两处分支都调用它。

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

Comment on lines +112 to +113
OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS.has(key) ||
!OPENAI_STRICT_SCHEMA_KEYS.has(key)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R21-2: OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS is dead logic — none of its five members (minLength, maxLength, minItems, maxItems, uniqueItems) is in the OPENAI_STRICT_SCHEMA_KEYS allowlist, so !OPENAI_STRICT_SCHEMA_KEYS.has(key) already skips every one of them; the extra .has(key) condition cannot change the outcome for any key (measured: the two sets are disjoint). — Failure scenario: misleading dead code implying a two-tier strip policy that does not exist — adding a new unsupported keyword (e.g. pattern) to the unsupported set yields no behavior change and may misdiagnose the normalizer; a key ever added to both sets is silently won by the OR with nothing documenting or testing it.

Suggested change
OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS.has(key) ||
!OPENAI_STRICT_SCHEMA_KEYS.has(key)
!OPENAI_STRICT_SCHEMA_KEYS.has(key)
中文说明

[建议] R21-2:OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS 是死逻辑——它的五个成员(minLengthmaxLengthminItemsmaxItemsuniqueItems)都不在 OPENAI_STRICT_SCHEMA_KEYS 白名单中,因此 !OPENAI_STRICT_SCHEMA_KEYS.has(key) 已经会跳过它们中的每一个;额外的 .has(key) 条件对任何键都不可能改变结果(已实测:两个集合交集为空)。— 失败场景:这是误导性的死代码,暗示了一个并不存在的两级剥离策略——向 unsupported 集合新增关键字(如 pattern)不会产生任何行为变化,可能导致对 normalizer 的误判;而任何同时加入两个集合的键会被 OR 静默地交由前者处理,既无文档也无测试。建议直接删除该集合及其条件(白名单是唯一权威)。

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

prompt: [{ type: 'text', text: '/advisor check my work' }],
});

expect(mockChatRecordingService.recordUserMessage).toHaveBeenCalled();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R21-4: This R18-6 shadowing test asserts only toHaveBeenCalled() with no argument match or call count, unlike the sibling /btw test which pins toHaveBeenCalledWith('/btw question'). — Failure scenario: a regression of the pre-action gate (!isSlashInput || slashCommandName !== 'advisor', Session.ts:4112) that records advisor-token input pre-action while the deferred block also records for a shadowing custom command lands the user turn in the JSONL transcript twice — replay re-emits a duplicated user turn — yet toHaveBeenCalled() stays satisfied. A wrong recorded payload (display text instead of raw prompt text) also passes. Probe-verified: seeding the double-recording regression keeps this test green; the strengthened assertion below fails it with expected "spy" to be called 1 times, but got 2 times.

Suggested change
expect(mockChatRecordingService.recordUserMessage).toHaveBeenCalled();
expect(mockChatRecordingService.recordUserMessage).toHaveBeenCalledTimes(1);
expect(mockChatRecordingService.recordUserMessage).toHaveBeenCalledWith(
'/advisor check my work',
);
中文说明

[建议] R21-4:这个 R18-6 影子命令测试只断言了 toHaveBeenCalled(),没有参数匹配也没有调用次数约束,而同级的 /btw 测试钉住了 toHaveBeenCalledWith('/btw question')。— 失败场景:如果执行前门控(!isSlashInput || slashCommandName !== 'advisor',Session.ts:4112)回归为对 advisor token 输入也在执行前记录,同时延迟块又为影子自定义命令再记录一次,用户轮次会在 JSONL 转录中落两次——重放时会重复发出用户轮次——而 toHaveBeenCalled() 依然满足。错误的记录载荷(用 display text 而非原始 prompt 文本)同样能通过。已用探针验证:植入双记录回归后本测试仍然绿色;采用下面加强后的断言则会以 expected "spy" to be called 1 times, but got 2 times 失败。

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

Comment on lines 1060 to +1061
...this.buildGenerateContentConfig(request),
...this.buildResponseFormat(request),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R21-6: buildResponseFormat spreads AFTER buildGenerateContentConfig, silently overriding a user-supplied samplingParams.response_format on official-endpoint JSON-mode requests, while the default provider spreads extra_body last so the same override via extra_body wins — asymmetric precedence between the two documented escape hatches. Pre-PR the pipeline never sent response_format, so samplingParams was the only way to get structured output on the official endpoint. — Failure scenario: a user who configured samplingParams.response_format with a schema OpenAI-strict cannot express (oneOf, partial required, minLength) used to send their exact shape; now it is silently replaced with json_object — constraints lost with no warning — while the identical override in extra_body wins in the opposite direction. No test pins either precedence. Suggested fix: honor an explicit user-supplied response_format (from samplingParams or extra_body) and skip buildResponseFormat when one is present, or document the precedence and add a test pinning whichever order is intended.

中文说明

[建议] R21-6:buildResponseFormat 的展开位于 buildGenerateContentConfig 之后,会在官方端点的 JSON 模式请求上静默覆盖用户通过 samplingParams 提供的 response_format;而 default provider 最后展开 extra_body,同样的覆盖经由 extra_body 却会生效——两个文档化的逃生通道之间优先级不对称。本 PR 之前该管道从不发送 response_formatsamplingParams 是官方端点上获得结构化输出的唯一途径。— 失败场景:用户若在 samplingParams.response_format 中配置了 OpenAI strict 无法表达的 schema(oneOf、部分 requiredminLength),过去会原样发送;现在会被静默替换为 json_object——约束被丢弃且无任何警告——而同样的覆盖放在 extra_body 里却朝相反方向生效。没有任何测试钉住任一优先级。建议修复:尊重用户显式提供的 response_format(来自 samplingParamsextra_body),存在时跳过 buildResponseFormat;或明确文档化优先级并增加测试钉住预期的顺序。

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

Comment on lines +15049 to +15050
await expect(prompt).resolves.toEqual({ stopReason: 'cancelled' });
expect(finishedSpy).toHaveBeenCalledTimes(1);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R21-7: This cancelled-advisor test pins stopReason and telemetry but not the recording invariant it exists alongside — that a cancelled built-in /advisor leaves NO user-turn transcript record. Today that invariant is guaranteed only by statement order in Session.ts (the cancel gate returns before the deferred record block). — Failure scenario: a future change that adds a user-turn record to the cancel gate itself (e.g. "preserve the cancelled turn for replay", mirroring the /btw cancel behavior this PR's own btw-cancel test pins as desirable) makes a cancelled /advisor write an orphan user turn to the JSONL transcript — a user turn with no advisor response on replay — while the cancelled test, the success-path no-record test, and the btw test all stay green.

Suggested change
await expect(prompt).resolves.toEqual({ stopReason: 'cancelled' });
expect(finishedSpy).toHaveBeenCalledTimes(1);
await expect(prompt).resolves.toEqual({ stopReason: 'cancelled' });
expect(finishedSpy).toHaveBeenCalledTimes(1);
expect(mockChatRecordingService.recordUserMessage).not.toHaveBeenCalled();
expect(mockChatRecordingService.recordSlashCommand).not.toHaveBeenCalled();
中文说明

[建议] R21-7:这个 advisor 取消测试钉住了 stopReason 与遥测,但没有钉住与之并存的记录不变量——被取消的内置 /advisor 不应留下任何用户轮次转录记录。目前该不变量仅由 Session.ts 中的语句顺序保证(取消门控先于延迟记录块返回)。— 失败场景:未来若有改动在取消门控本身加入用户轮次记录(例如"为重放保留被取消的轮次",效仿本 PR 自己的 btw-cancel 测试所钉住的 /btw 取消行为),被取消的 /advisor 会在 JSONL 转录中写入一条孤立的用户轮次——重放时是一条没有 advisor 回复的用户轮次——而取消测试、成功路径的无记录测试以及 btw 测试全部仍然绿色。

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

Comment on lines +4198 to +4200
!isRetry
) {
const recorder = this.config.getChatRecordingService();

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-2 (carried from round 20, re-verified at this head): the deferred user-message record for the advisor token runs AFTER handleSlashCommand returns, while every other command name records pre-action — so the user-turn record is dropped whenever the command action THROWS. — Failure scenario: a user-defined command shadowing the name advisor whose action throws (FILE actions re-throw non-confirmation errors) loses its user-turn transcript record: the throw propagates out of await handleSlashCommand(...) before this deferred block runs, while the identical command under any other name keeps its pre-action record through the same throw. Suggested fix: wrap await handleSlashCommand(...) in a catch that records the user message for the advisor token (same runtime/retry gates) before re-throwing — safe against double-recording because the built-in advisor's ACP action never throws (it catches internally and returns a message result).

中文说明

[建议] R20-2(第 20 轮遗留,已在本 head 复核):advisor token 的延迟用户消息记录在 handleSlashCommand 返回之后才执行,而其他所有命令名都在执行前记录——因此命令 action 抛出异常时用户轮次记录会丢失。— 失败场景:影子命名为 advisor 的自定义命令若其 action 抛错(FILE action 会重新抛出非确认类错误),其用户轮次转录记录丢失:异常在延迟块运行前就从 await handleSlashCommand(...) 传播出去,而同样命令用任何其他名字时都能保留执行前的记录。建议修复:给 await handleSlashCommand(...) 包一层 catch,在重新抛出前为 advisor token 记录用户消息(同样的 runtime/retry 门控)——不会双记录,因为内置 advisor 的 ACP action 从不抛错(内部捕获并返回 message 结果)。

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

expect(result).toEqual({
type: 'submit_prompt',
content: 'Expanded prompt',
resolvedCommand: { name: 'custom', kind: CommandKind.FILE },

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-3 (carried from round 20, re-verified by mutation probe at this head): no test anywhere asserts resolvedCommand for a BUILT-IN command execution, yet the ACP recording gate in Session.ts depends on resolvedCommand.kind === CommandKind.BUILT_IN && name === 'advisor'. Session.test.ts mocks this whole module; all 4 resolvedCommand assertions here are CommandKind.FILE. — Failure scenario: the mutation "attach resolvedCommand only for custom/skill commands, drop it from the built-in return path" leaves the entire suite green (probe-run: 50 + 622 tests pass with the mutation), and the built-in /advisor would silently start being recorded into the ACP transcript again — the exact regression the PR's Session tests were written to catch. Suggested fix: assert on a real built-in command execution that the result carries resolvedCommand: { name: 'advisor', kind: CommandKind.BUILT_IN }.

中文说明

[建议] R20-3(第 20 轮遗留,已在本 head 用变异探针复核):整个测试套件中没有任何测试断言 BUILT-IN 命令执行时的 resolvedCommand,而 Session.ts 的 ACP 记录门控恰恰依赖 resolvedCommand.kind === CommandKind.BUILT_IN && name === 'advisor'。Session.test.ts 整体 mock 了本模块;此文件中全部 4 处 resolvedCommand 断言都是 CommandKind.FILE。— 失败场景:变异"只为 custom/skill 命令附加 resolvedCommand,从 built-in 返回路径中移除"可以让整个套件保持绿色(探针实测:变异后 50 + 622 个测试全部通过),内置 /advisor 会再次被静默记录进 ACP 转录——正是本 PR 的 Session 测试要捕获的回归。建议修复:在真实 built-in 命令执行的测试中断言结果携带 resolvedCommand: { name: 'advisor', kind: CommandKind.BUILT_IN }

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

Comment on lines +4213 to +4214
try {
parts = await this.#processSlashCommandResult(

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-4 (carried from round 20, re-verified at this head): the new conversation_finished error-emission catch wraps only #processSlashCommandResult; the adjacent await handleSlashCommand(...) call above sits outside the try/catch in the same slash phase. — Failure scenario: any slash command whose action throws (a FILE command's processing error, a loader/hook failure) makes handleSlashCommand re-throw; the error propagates out of #executePromptInner before the send-loop try/finally that emits the event starts — the turn's conversation_finished telemetry is silently dropped while the sibling throw path added in this diff emits it. Suggested fix: extend the same try/catch (emitting ConversationFinishedEvent before re-throw) to also wrap await handleSlashCommand(...), e.g. one try around both awaits.

中文说明

[建议] R20-4(第 20 轮遗留,已在本 head 复核):新的 conversation_finished 错误遥测 catch 只包裹了 #processSlashCommandResult;紧邻其上的 await handleSlashCommand(...) 调用位于同一斜杠阶段却在 try/catch 之外。— 失败场景:任何 action 抛错的斜杠命令(FILE 命令的处理错误、loader/hook 失败)都会让 handleSlashCommand 重新抛出;异常在发出该事件的 send-loop try/finally 启动前就传出了 #executePromptInner——该轮次的 conversation_finished 遥测被静默丢弃,而本 diff 新增的兄弟抛出路径却会发出它。建议修复:把同一个 try/catch(重新抛出前先发出 ConversationFinishedEvent)扩展为同时包裹 await handleSlashCommand(...),例如一个 try 包住两个 await。

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

if (
key === 'type' ||
OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS.has(key) ||
!OPENAI_STRICT_SCHEMA_KEYS.has(key)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

[Suggestion] R20-8 (carried from round 20, re-verified at this head): the allowlist clause !OPENAI_STRICT_SCHEMA_KEYS.has(key) that strips unknown schema keys is pinned by no test individually — the only non-whitelisted key any normalizer test feeds is minLength, which the sibling OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS clause also strips, so removing either clause alone keeps every normalizer test green. — Failure scenario: a regression narrowing or deleting the allowlist clause (e.g. only stripping keys in the unsupported set) changes which schemas normalize to strict json_schema vs fall back to json_object on the official endpoint, and the whole pipeline suite stays green. Suggested fix: after resolving R21-2 (delete the dead unsupported-keys clause), add a normalizer test feeding a key in neither set (e.g. pattern) and asserting it is stripped from the strict output — the minLength test then pins this clause.

中文说明

[建议] R20-8(第 20 轮遗留,已在本 head 复核):剥离未知 schema 键的白名单子句 !OPENAI_STRICT_SCHEMA_KEYS.has(key) 没有任何测试单独钉住——normalizer 测试唯一喂入的非白名单键是 minLength,而它同时也会被兄弟子句 OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS 剥离,因此单独删除任一子句所有 normalizer 测试仍保持绿色。— 失败场景:缩窄或删除白名单子句的回归(例如只剥离 unsupported 集合中的键)会改变官方端点上哪些 schema 规范化为 strict json_schema、哪些回退为 json_object,而整个 pipeline 套件依然绿色。建议修复:在解决 R21-2(删除死逻辑的 unsupported-keys 子句)之后,新增一个喂入两个集合之外键(如 pattern)的 normalizer 测试并断言它被剥离——届时 minLength 测试即钉住本子句。

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

@yiliang114

Copy link
Copy Markdown
Collaborator Author

Merged latest main and resolved the one conflict in the ACP session recorder path.

Changed: preserved the advisor-specific delayed recording behavior and kept main's daemon media-reference recording in the same branch.

Verified: conflict markers absent, git diff --check passed, and a focused source assertion confirmed both sides of the conflict are present.

Pending: CI/review on dc4d6d0.

@yiliang114
yiliang114 dismissed stale reviews from qwen-code-ci-bot and wenshao August 17, 2026 08:52

fixed

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

LGTM✅

@yiliang114
yiliang114 added this pull request to the merge queue Aug 17, 2026
Merged via the queue into main with commit 18c9763 Aug 17, 2026
78 of 80 checks passed
@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Released in v0.21.14.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants