Skip to content

feat(core): resolve model modalities from API metadata - #8529

Closed
DragonnZhang wants to merge 39 commits into
mainfrom
dragon/model-modality-api
Closed

feat(core): resolve model modalities from API metadata#8529
DragonnZhang wants to merge 39 commits into
mainfrom
dragon/model-modality-api

Conversation

@DragonnZhang

@DragonnZhang DragonnZhang commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

What this PR does

This PR resolves missing model input modalities from models.dev for configured models and runtime model switches. It ships a compact modality-only snapshot, uses a valid disk cache immediately, and refreshes remote metadata in the background without making cold startup wait for the network.

Successful refreshes become available to configurations created later in the same long-running process, while existing sessions keep stable capabilities. Explicit user configuration remains authoritative, catalog metadata is used after an exact provider/model match or a narrow documented provider-family alias, and existing model-name heuristics remain the final fallback.

Why it's needed

Model modality support is currently inferred mainly from model names. OpenAI-compatible providers can expose models whose identifiers are unknown to Qwen Code, and their model-list APIs usually do not include normalized input-modality metadata, so valid image attachments can be replaced with an unsupported-image text placeholder.

Using normalized metadata recognizes new models without adding a model-name rule for every provider release. The built-in snapshot and stale-while-revalidate cache also keep first use, offline use, and long-running daemon sessions deterministic when models.dev is slow or unavailable.

Reviewer Test Plan

How to verify

  1. Start with no metadata cache and make the models.dev request remain pending. Confirm startup resolves model modalities from the built-in snapshot without waiting for the request.
  2. Start with a cache older than one hour. Confirm the stale data is used immediately, then complete the background request and confirm a later configuration in the same process uses the refreshed metadata while the existing configuration remains unchanged.
  3. Fail the background refresh and confirm the last usable cache or built-in snapshot remains active.
  4. Configure the same catalog-backed model through both manual model-provider settings and the /auth provider-install flow. Confirm both paths apply catalog modalities when no explicit value is present.
  5. Add explicit modalities that conflict with the catalog and confirm the explicit value wins, including for MiniMax M3. Use an unknown custom OpenAI-compatible endpoint and confirm the SDK protocol alone is not treated as provider identity.
  6. Use a model absent from the catalog and confirm existing model-name heuristics still apply, with unknown models remaining text-only.
  7. Select China and international Alibaba Coding Plan, Token Plan, and Standard endpoints and confirm each uses its endpoint-specific catalog; confirm an unlisted regional endpoint does not borrow another region.
  8. Use OpenRouter variants and Idealab aliases. Confirm exact variant metadata wins, missing recognized variants use the base OpenRouter model, and Idealab resolves Qwen DogFooding plus bailian/ DeepSeek, Kimi, MiniMax, and Qwen model families through their official-provider counterparts while unknown families remain unmatched.
  9. Configure modalities in settings or retain modalities persisted by an older /auth template, then refresh auth and switch between registry models. Confirm the explicit value remains unchanged. Confirm newly generated /auth entries omit modalities and use catalog metadata instead.
  10. Supply malformed fresh disk and network catalogs. Confirm neither is published or cached and the built-in snapshot remains active.
  11. Query workspace provider status before starting a live session and confirm catalog modalities are included in the listed models.

Evidence (Before & After)

Before: Qwen Code 0.20.1 treated a JPEG attached to thinkingmachines/inkling as unsupported and sent only the text placeholder because the model identifier was unknown to the built-in heuristic.

After: the source build sent the same JPEG as an image_url. The focused metadata, registry, configuration, resolver, and workspace-status suite reports 286 passing tests, including a cold-cache request that never resolves, stale refresh success and failure, later same-process loads, manual configuration, runtime provider installation, explicit overrides, and unknown-provider isolation. Repository build and typecheck also complete successfully.

Tested on

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

Environment (optional)

Local Node.js 22 TypeScript runtime without a sandbox, using injected catalog requests and temporary caches for deterministic failure and refresh scenarios, plus a local OpenAI-compatible endpoint for attachment verification.

Risk & Scope

  • Main risk or tradeoff: The checked-in snapshot can age between releases, so no-cache startup may briefly use older metadata; an immediate background refresh updates later configurations without changing active sessions mid-conversation.
  • Not validated / out of scope: Windows and Linux runtime behavior, provider-native modality discovery, output modalities, context limits, reasoning flags, pricing, and remote model-list migration were not tested or changed.
  • Breaking changes / migration notes: None. Existing explicit modality configuration and model-name inference remain compatible.

Linked Issues

Related to #8558.

中文说明

这个 PR 做了什么

这个 PR 为已配置模型和运行时模型切换从 models.dev 补全缺失的输入模态。它内置一份仅包含模态信息的精简快照,立即使用有效磁盘缓存,并在后台刷新远端元数据,不让冷启动等待网络。

刷新成功后,同一长生命周期进程里之后创建的配置会使用新数据,而已有会话保持稳定能力。用户显式配置始终具有最高优先级;目录元数据只在精确 provider/model 命中或已登记的窄范围模型家族别名命中后使用;现有基于模型名称的启发式规则继续作为最终兜底。

为什么需要

当前模型模态支持主要通过模型名称推断。OpenAI 兼容提供商可能暴露 Qwen Code 未知标识符的模型,而其模型列表 API 通常不包含统一的输入模态元数据,因此有效图片附件可能被替换为“不支持图片”的文本占位符。

使用统一元数据可以识别新模型,无需为每次 provider 发布都添加一条模型名称规则。内置快照和 stale-while-revalidate 缓存也能在 models.dev 缓慢或不可用时,让首次使用、离线使用和长生命周期 daemon 会话保持确定性。

审阅者测试计划

如何验证

  1. 在没有元数据缓存时启动,并让 models.dev 请求一直保持 pending。确认启动会从内置快照解析模型模态,不等待该请求。
  2. 使用一份超过一小时的缓存启动。确认程序立即使用旧数据;随后完成后台请求,并确认同一进程中之后创建的配置使用刷新后的元数据,而已有配置保持不变。
  3. 让后台刷新失败,确认程序继续保留最后可用的缓存或内置快照。
  4. 分别通过手动 model-provider 配置和 /auth provider 安装流程配置同一个目录模型。确认没有显式值时,两条路径都会应用目录模态。
  5. 添加与目录冲突的显式模态,确认显式值优先,包括 MiniMax M3。再使用未知的自定义 OpenAI 兼容 endpoint,确认不会仅凭 SDK 协议把它当成 OpenAI provider。
  6. 使用目录中不存在的模型,确认现有模型名称启发式规则仍会生效,未知模型仍保持纯文本。
  7. 分别选择中国区和国际区的 Alibaba Coding Plan、Token Plan 与 Standard endpoint,确认每条路由使用对应目录;未收录的区域 endpoint 不得借用其他区域元数据。
  8. 使用 OpenRouter 变体和 Idealab 别名,确认精确变体元数据优先、缺失的已知变体回退到 OpenRouter 基础模型;Idealab 的 Qwen DogFooding 以及 bailian/ 下的 DeepSeek、Kimi、MiniMax、Qwen 模型家族使用对应官方 provider 的同型号元数据,未知家族保持不匹配。
  9. 在 settings 中配置模态,或保留旧版 /auth 已持久化的模态,再刷新 auth 并切换 registry 模型,确认显式值保持不变;同时确认新版 /auth 不再写入默认模态,而是交给 catalog 解析。
  10. 分别提供格式错误的新鲜磁盘 catalog 和网络 catalog,确认两者都不会发布或写入缓存,内置快照继续生效。
  11. 在 live session 启动前查询 workspace provider status,确认模型列表包含 catalog 模态。

证据(修改前与修改后)

修改前:Qwen Code 0.20.1 会将附加到 thinkingmachines/inkling 的 JPEG 视为不支持;由于内置启发式规则不识别该模型标识符,因此只发送文本占位符。

修改后:源码构建会将同一张 JPEG 作为 image_url 发送。聚焦于元数据、注册表、配置解析和 workspace status 的测试套件共 286 个测试通过,其中包括永不完成请求的冷缓存场景、陈旧缓存刷新成功与失败、同进程后续加载、手动配置、运行时 provider 安装、显式覆盖和未知 provider 隔离。仓库构建和类型检查也都成功完成。

测试平台

操作系统 状态
🍏 macOS ✅ 已测试
🪟 Windows ⚠️ 未测试
🐧 Linux ⚠️ 未测试

环境(可选)

本地 Node.js 22 TypeScript 运行时,未启用沙箱;通过注入目录请求和临时缓存稳定复现失败与刷新场景,并通过本地 OpenAI 兼容 endpoint 验证附件行为。

风险与范围

  • 主要风险或取舍:仓库内快照可能在两次发布之间逐渐过时,因此无缓存启动可能短暂使用较旧元数据;立即启动的后台刷新会更新之后创建的配置,但不会在对话中途改变已有会话。
  • 未验证或范围外:未测试 Windows 和 Linux 运行时行为;provider 原生模态发现、输出模态、上下文限制、reasoning 标志、价格和远端模型列表迁移均未修改。
  • 破坏性变更或迁移说明:无。现有显式模态配置和模型名称推断保持兼容。

关联 Issue

关联 #8558

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 85.01% 85.01% 90.3% 84.04%
Core 88.24% 88.24% 89.78% 86.8%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   85.01 |    84.04 |    90.3 |   85.01 |                   
 src               |   85.83 |    81.72 |   88.13 |   85.83 |                   
  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.25 |    82.33 |   89.06 |   88.25 | ...3147,3153,3219 
  ...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.42 |    75.06 |   91.83 |   72.42 |                   
  acpAgent.ts      |   71.58 |    74.66 |   91.16 |   71.58 | ...73,13078-13080 
  ...k-reporter.ts |     100 |       80 |     100 |     100 | 81,84,119,141     
  authMethods.ts   |      92 |       60 |     100 |      92 | 33-34             
  ...heap-probe.ts |   97.39 |    96.66 |     100 |   97.39 | 243,264-265       
  errorCodes.ts    |     100 |      100 |     100 |     100 |                   
  ...ion-skills.ts |     100 |    88.23 |     100 |     100 | 17,32             
  generation.ts    |    97.1 |    81.25 |     100 |    97.1 | 109,112           
  ...figuration.ts |     100 |      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.25 |    86.56 |   95.93 |   91.25 |                   
  Session.ts       |   90.62 |    85.26 |   95.38 |   90.62 | ...21,12248-12252 
  ...entTracker.ts |   96.81 |    89.36 |      90 |   96.81 | 137-143,222       
  ...projection.ts |   98.85 |    91.59 |     100 |   98.85 | 234,250,262       
  ...stop-guard.ts |     100 |    98.07 |     100 |     100 | 37,127            
  ...eplay-page.ts |   94.18 |     86.2 |     100 |   94.18 | ...15,319,399,403 
  ...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.62 |    92.69 |   96.96 |   95.62 |                   
  ...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 |   98.57 |    94.84 |     100 |   98.57 | 75-76,394-395     
 ...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 |    81.54 |   91.44 |      89 |                   
  attach-lease.ts  |     100 |    96.96 |     100 |     100 | 173               
  ...t-cli-argv.ts |     100 |      100 |     100 |     100 |                   
  ...ged-detach.ts |     100 |     90.9 |     100 |     100 | 40,64             
  protocol.ts      |     100 |      100 |     100 |     100 |                   
  pty-host-env.ts  |     100 |      100 |     100 |     100 |                   
  ...st-process.ts |   87.99 |    77.53 |    94.2 |   87.99 | ...1219,1309-1311 
  pty-host.ts      |   84.51 |     84.9 |   90.47 |   84.51 | ...14-516,531-532 
  ...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.54 |   83.33 |   93.98 | 228-238           
  ...r-sideband.ts |   95.37 |    86.44 |     100 |   95.37 | 203-204,228-233   
 src/commands      |   90.36 |    77.48 |   65.62 |   90.36 |                   
  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.82 |      100 |      50 |   98.82 | 96                
  serve.ts         |   88.95 |    74.52 |     100 |   88.95 | ...74,877-880,892 
  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.19 |    89.64 |   90.53 |   90.19 |                   
  agent-prompt.ts  |   94.22 |    92.93 |   97.56 |   94.22 | ...1964,2993-3073 
  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  |   67.85 |    87.09 |   66.66 |   67.85 | ...30,157,159-164 
  ...ent-status.ts |   93.19 |    84.61 |   83.33 |   93.19 | 302,442,573-593   
  ...ose-review.ts |   96.79 |     93.2 |   98.07 |   96.79 | ...4150-4194,4434 
  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.75 |      100 |   66.66 |   73.75 | 77-97             
  fetch-pr.ts      |   97.06 |    92.45 |      96 |   97.06 | ...1655,1713-1718 
  issue-context.ts |   88.15 |     93.1 |   85.71 |   88.15 | 249-276           
  load-rules.ts    |   26.41 |      100 |   16.66 |   26.41 | ...41-153,155-156 
  match-remote.ts  |   85.55 |     92.3 |   66.66 |   85.55 | 74-79,144-150     
  meta.ts          |   79.43 |    93.75 |   66.66 |   79.43 | 123-128,147-162   
  mock-provider.ts |   95.44 |    90.25 |   89.47 |   95.44 | 145,690-709       
  parse-args.ts    |   99.48 |    95.65 |     100 |   99.48 | 553,824,880       
  plan-diff.ts     |    68.1 |      100 |   66.66 |    68.1 | 162-205           
  pr-context.ts    |   95.44 |    86.15 |     100 |   95.44 | ...1729,1818-1834 
  presubmit.ts     |   90.52 |    88.82 |      90 |   90.52 | ...74-775,861-891 
  ...ish-assets.ts |    81.3 |    82.22 |   85.71 |    81.3 | ...79-483,510-556 
  ...r-findings.ts |   90.74 |    83.75 |     100 |   90.74 | ...17-422,429-430 
  repo-context.ts  |   94.62 |    90.75 |     100 |   94.62 | ...66-467,482-487 
  ...ve-anchors.ts |   78.34 |    89.28 |      75 |   78.34 | ...83-188,200-217 
  run.ts           |   82.66 |    88.54 |   94.11 |   82.66 | ...19,635-689,703 
  save-artifact.ts |   91.92 |    87.77 |   93.75 |   91.92 | ...06-409,502-505 
  script-lint.ts   |   81.27 |    79.38 |   88.88 |   81.27 | ...69-783,785-807 
  submit.ts        |   88.56 |    87.87 |      90 |   88.56 | ...08,850,878-914 
  test-delta.ts    |    86.4 |       92 |      60 |    86.4 | 177-208,471-479   
  test-efficacy.ts |   88.04 |    84.12 |   95.45 |   88.04 | ...2602,2610-2630 
  test-plan.ts     |   91.36 |    91.35 |   89.47 |   91.36 | ...35-836,900-917 
 ...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 |   98.05 |    95.57 |   98.79 |   98.05 |                   
  agent-briefs.ts  |      99 |      100 |      50 |      99 | 757-758           
  ...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.36 |    94.39 |     100 |   93.36 | ...14-320,490-491 
  budget.ts        |     100 |    97.97 |     100 |     100 | 887,940           
  build-budget.ts  |     100 |      100 |     100 |     100 |                   
  certification.ts |     100 |      100 |     100 |     100 |                   
  coverage.ts      |   98.71 |    94.77 |     100 |   98.71 | ...1097,1642-1643 
  deadline.ts      |   98.03 |    91.73 |     100 |   98.03 | ...20,752,820,837 
  diff-flags.ts    |     100 |        0 |     100 |     100 | 75                
  diff-plan.ts     |   98.73 |    93.04 |     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.38 |   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.5 |     100 |     100 | 135               
  ledger.ts        |     100 |      100 |     100 |     100 |                   
  local-diff.ts    |   84.86 |    90.38 |     100 |   84.86 | ...63-473,475-483 
  ...ry-context.ts |   96.61 |    95.48 |     100 |   96.61 | ...47-450,496-499 
  merge-base.ts    |     100 |      100 |     100 |     100 |                   
  npm-toolchain.ts |   98.23 |    95.29 |     100 |   98.23 | ...,819,1200,1217 
  path-rules.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   90.47 |    78.57 |     100 |   90.47 | 32-33,36-37       
  prompt-record.ts |   98.03 |    94.23 |     100 |   98.03 | 293-294,300       
  receipt.ts       |     100 |      100 |     100 |     100 |                   
  remote-match.ts  |   97.84 |    94.23 |     100 |   97.84 | 85-86             
  report.ts        |   92.85 |    86.66 |     100 |   92.85 | 204-205,207-211   
  ...ry-context.ts |     100 |    98.66 |     100 |     100 | 187               
  resume.ts        |     100 |      100 |     100 |     100 |                   
  retirement.ts    |     100 |    94.36 |     100 |     100 | ...58-559,760,917 
  review-footer.ts |   99.55 |     98.1 |     100 |   99.55 | 548-549           
  ...w-settings.ts |     100 |    94.73 |     100 |     100 | 79                
  roster.ts        |     100 |    95.52 |     100 |     100 | 136,154,199       
  round-model.ts   |     100 |      100 |     100 |     100 |                   
  run-ledger.ts    |    98.2 |    93.87 |     100 |    98.2 | ...23,541,647,670 
  same-file.ts     |     100 |    94.11 |     100 |     100 | 35                
  shell-quote.ts   |     100 |      100 |     100 |     100 |                   
  stale-bundle.ts  |   98.21 |    94.11 |     100 |   98.21 | 433,474,514-515   
  test-utils.ts    |     100 |      100 |     100 |     100 |                   
  toolchain.ts     |     100 |      100 |     100 |     100 |                   
  transcripts.ts   |   98.09 |    95.07 |     100 |   98.09 | ...92,438,707-708 
  ...pace-scope.ts |     100 |    96.96 |     100 |     100 | 186               
  workspaces.ts    |     100 |    96.77 |     100 |     100 | 222,452,499,512   
  worktree.ts      |     100 |      100 |     100 |     100 |                   
 ...w/lib/platform |   76.52 |    80.57 |   78.37 |   76.52 |                   
  aone-client.ts   |   14.28 |      100 |       0 |   14.28 | ...7,82-83,91-127 
  aone.ts          |   80.33 |    78.48 |   81.25 |   80.33 | ...17,481-486,538 
  github.ts        |   96.05 |    75.67 |     100 |   96.05 | 26-29,213-214     
  registry.ts      |     100 |    95.65 |     100 |     100 | 84                
  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.97 |    89.91 |    96.3 |   94.97 |                   
  ...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.23 |    88.82 |   83.78 |   89.23 | ...2528,2530-2538 
  ...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.56 |    93.58 |   95.45 |   96.56 | ...12-613,667-668 
  ...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.16 |    94.22 |   95.29 |   98.16 |                   
  ...putAdapter.ts |   98.02 |     93.3 |   98.07 |   98.02 | ...1433,1449-1450 
  ...putAdapter.ts |   96.22 |    91.66 |   85.71 |   96.22 | 52-53             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   98.51 |      100 |   90.47 |   98.51 | 90-91,131-132     
  ...projection.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/remoteInput   |   87.31 |    75.32 |   88.23 |   87.31 |                   
  ...utContext.tsx |     100 |      100 |     100 |     100 |                   
  ...putWatcher.ts |   88.01 |       76 |   93.33 |   88.01 | ...49-350,361-364 
  index.ts         |       0 |        0 |       0 |       0 | 1-8               
 src/runtime       |   99.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.21 |    84.77 |   90.82 |   88.21 |                   
  ...tp-enabled.ts |     100 |      100 |     100 |     100 |                   
  ...ion-bridge.ts |     100 |      100 |     100 |     100 |                   
  auth.ts          |   93.99 |     91.5 |     100 |   93.99 | ...29-430,433-435 
  ...em-adapter.ts |     100 |      100 |     100 |     100 |                   
  capabilities.ts  |     100 |    98.07 |     100 |     100 | 702               
  ...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.9 |     78.6 |   94.73 |    90.9 | ...1001,1022-1027 
  ...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.69 |    91.94 |     100 |   98.69 | ...1590,1592-1593 
  debug-mode.ts    |     100 |      100 |     100 |     100 |                   
  env-snapshot.ts  |   93.37 |    85.18 |     100 |   93.37 | 114-117,195-202   
  ...-scheduler.ts |   87.34 |    83.87 |     100 |   87.34 | 33-36,48-50,79-81 
  ...d-provider.ts |   92.06 |    87.09 |     100 |   92.06 | ...72,287-293,316 
  ...h-settings.ts |   94.94 |    90.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.05 |    80.91 |   75.98 |   84.05 | ...7950,7968-7972 
  ...tup-errors.ts |     100 |      100 |     100 |     100 |                   
  ...-keepalive.ts |   94.27 |    88.18 |     100 |   94.27 | ...34,538-539,578 
  ...-lifecycle.ts |     100 |      100 |     100 |     100 |                   
  ...-lifecycle.ts |   89.16 |    90.29 |   86.95 |   89.16 | ...24-325,330-334 
  server.ts        |   91.17 |     90.6 |   72.03 |   91.17 | ...2974,3004-3005 
  ...-admission.ts |   99.13 |    95.89 |     100 |   99.13 | 308-309           
  ...on-helpers.ts |     100 |      100 |     100 |     100 |                   
  ...-redaction.ts |     100 |      100 |     100 |     100 |                   
  ...t-event-id.ts |     100 |    95.23 |     100 |     100 | 12                
  ...-admission.ts |   98.71 |    89.65 |     100 |   98.71 | 68                
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ion-limits.ts |     100 |      100 |     100 |     100 |                   
  ...t-sessions.ts |   93.72 |    77.93 |     100 |   93.72 | ...51,854,867-869 
  ...l-resolver.ts |   90.32 |    66.66 |     100 |   90.32 | 16,45-46          
  ...ell-static.ts |   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.69 |    81.98 |     100 |   98.69 | 148,176,216,219   
  ...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 |    80.1 |    80.29 |   94.48 |    80.1 |                   
  ...r-registry.ts |   96.92 |    94.87 |     100 |   96.92 | 184-187           
  client-mcp-ws.ts |   54.85 |    58.62 |   72.72 |   54.85 | ...99-300,304-305 
  ...n-registry.ts |   93.03 |    84.13 |   98.52 |   93.03 | ...1624,1671-1682 
  dispatch.ts      |   75.07 |    77.36 |   93.22 |   75.07 | ...5468,5525-5531 
  index.ts         |   82.68 |    79.74 |   91.22 |   82.68 | ...2424,2510-2511 
  json-rpc.ts      |     100 |    96.96 |     100 |     100 | 92                
  ...ach-budget.ts |     100 |      100 |     100 |     100 |                   
  safe-ws-send.ts  |   52.94 |    71.42 |     100 |   52.94 | 33-42,47-55       
  sse-stream.ts    |   98.26 |    88.88 |     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 |   91.33 |     87.4 |   95.58 |   91.33 |                   
  ...e-activity.ts |     100 |      100 |     100 |     100 |                   
  ...ime-errors.ts |     100 |      100 |     100 |     100 |                   
  ...me-manager.ts |     100 |      100 |     100 |     100 |                   
  ...-ownership.ts |   87.33 |    83.33 |   88.46 |   87.33 | ...57-558,601-602 
  ...-workspace.ts |    88.8 |    76.38 |     100 |    88.8 | ...80-281,322-323 
  ...ion-source.ts |     100 |      100 |     100 |     100 |                   
 src/serve/fs      |   87.77 |    82.32 |     100 |   87.77 |                   
  audit.ts         |     100 |    96.29 |     100 |     100 | 211               
  errors.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...x-registry.ts |     100 |      100 |     100 |     100 |                   
  paths.ts         |   77.64 |    74.01 |     100 |   77.64 | ...65,594-598,611 
  policy.ts        |   90.52 |    89.18 |     100 |   90.52 | 172-180           
  text-cursor.ts   |   88.23 |       90 |     100 |   88.23 | 74-77,92-95       
  ...ile-system.ts |   88.02 |    81.83 |     100 |   88.02 | ...3027,3037-3038 
 src/serve/live    |   78.18 |     70.3 |   90.41 |   78.18 |                   
  ...en-context.ts |   95.74 |    81.25 |     100 |   95.74 | ...0,66-67,99-100 
  discovery.ts     |   85.89 |    81.91 |    90.9 |   85.89 | ...73-579,592-593 
  ...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 |   76.69 |    67.47 |   85.71 |   76.69 | ...1884,1975-1976 
  ...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 |   87.29 |    62.24 |   95.55 |   87.29 | ...1174,1176-1177 
  ...task-tools.ts |   98.97 |      100 |   85.71 |   98.97 | 201-202           
  ...redentials.ts |   96.26 |    93.47 |     100 |   96.26 | 91-94             
  ...me-session.ts |   65.63 |    57.24 |   88.88 |   65.63 | ...2270,2275-2282 
  ...up-context.ts |   94.85 |    77.39 |     100 |   94.85 | ...18,327-330,350 
  types.ts         |     100 |      100 |     100 |     100 |                   
 .../local-control |   82.89 |    86.13 |      90 |   82.89 |                   
  credentials.ts   |   96.42 |    95.45 |     100 |   96.42 | 109-110           
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...interfaces.ts |   43.58 |       75 |   42.85 |   43.58 | ...09-117,130-142 
  ...r-identity.ts |     100 |    85.71 |     100 |     100 | 61                
  service.ts       |    93.4 |       90 |     100 |    93.4 | ...20-222,313-315 
 src/serve/routes  |   85.78 |    80.66 |   94.86 |   85.78 |                   
  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.53 |    84.26 |   93.33 |   87.53 | ...1389,1432-1433 
  ...on-runtime.ts |   91.42 |       90 |     100 |   91.42 | 56-64             
  session.ts       |   86.09 |    81.61 |   91.42 |   86.09 | ...6459,6461-6462 
  sse-events.ts    |   86.85 |    85.64 |   94.11 |   86.85 | ...18-929,932,939 
  usage-stats.ts   |     100 |    95.45 |     100 |     100 | 118               
  ...space-auth.ts |   85.55 |    75.64 |     100 |   85.55 | ...21-326,331,345 
  ...el-control.ts |   86.26 |    78.94 |     100 |   86.26 | ...17-318,339-347 
  ...management.ts |   90.35 |    78.94 |     100 |   90.35 | ...52-553,576-577 
  ...d-contacts.ts |   83.62 |    94.59 |     100 |   83.62 | 123,125-142       
  ...controller.ts |   83.33 |    80.47 |      90 |   83.33 | ...1056,1061,1068 
  ...extensions.ts |    88.8 |    77.83 |   93.84 |    88.8 | ...2329,2374-2375 
  ...-file-read.ts |      91 |    80.91 |     100 |      91 | ...20-621,624-625 
  ...file-write.ts |   89.72 |    79.35 |     100 |   89.72 | ...05,719-726,807 
  ...t-branches.ts |   75.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 
  ...al-control.ts |   74.17 |    69.23 |     100 |   74.17 | ...18,220-226,231 
  ...management.ts |   87.47 |       85 |     100 |   87.47 | ...1733,1743-1748 
  ...cp-control.ts |    73.2 |    67.54 |   85.71 |    73.2 | ...27-633,644-645 
  ...ace-models.ts |   95.53 |    89.74 |     100 |   95.53 | ...52-157,296-297 
  ...ermissions.ts |    77.9 |    72.41 |     100 |    77.9 | ...69-277,298-316 
  ...e-settings.ts |   75.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  |   94.12 |     89.9 |   98.31 |   94.12 |                   
  access-log.ts    |   98.73 |    97.26 |     100 |   98.73 | 119,196           
  ...-timestamp.ts |     100 |      100 |     100 |     100 |                   
  ...er-helpers.ts |   88.75 |    81.57 |     100 |   88.75 | ...16,330,332-347 
  ...w-registry.ts |    98.8 |    81.81 |     100 |    98.8 | 107               
  ...r-handlers.ts |   97.87 |       80 |     100 |   97.87 | 27                
  ...r-response.ts |   87.07 |    73.86 |     100 |   87.07 | ...77,794,857-866 
  fs-factory.ts    |     100 |    95.52 |     100 |     100 | 77,144,200        
  ...branch-ops.ts |     100 |      100 |     100 |     100 |                   
  ...list-cache.ts |   99.01 |    95.52 |     100 |   99.01 | 184-185           
  ...t-deadline.ts |     100 |      100 |     100 |     100 |                   
  ...iter-setup.ts |      65 |       80 |   33.33 |      65 | 30-35,38-43,47-48 
  ...st-helpers.ts |   95.13 |    95.09 |     100 |   95.13 | ...66-168,423-428 
  self-origin.ts   |   76.19 |       80 |     100 |   76.19 | 45-54             
  ...e-features.ts |      95 |     87.5 |     100 |      95 | 182-188           
  ...on-archive.ts |   90.22 |    86.52 |   97.43 |   90.22 | ...05,932,960-961 
  ...ion-export.ts |     100 |    94.73 |     100 |     100 | 64                
  session-list.ts  |   97.15 |    93.95 |     100 |   97.15 | ...1012,1211-1215 
  ...ry-context.ts |    87.5 |       50 |     100 |    87.5 | 49-50             
  telemetry.ts     |   99.04 |    97.26 |     100 |   99.04 | ...92,861,940-942 
 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            |   74.57 |    75.47 |   68.47 |   74.57 |                   
  App.tsx          |   33.33 |       75 |   33.33 |   33.33 | 32-86             
  AppContainer.tsx |   76.06 |       72 |   69.44 |   76.06 | ...4292,4408-4414 
  ...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   |    84.1 |    83.79 |   90.02 |    84.1 |                   
  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.22 |    54.05 |      75 |   68.22 | ...97-198,212-215 
  ...astCommand.ts |   84.27 |       75 |     100 |   84.27 | ...,91-97,125-130 
  ...ig-command.ts |   93.12 |    88.42 |     100 |   93.12 | ...07-315,321-323 
  ...extCommand.ts |   75.05 |    74.39 |   84.61 |   75.05 | ...95-628,639-640 
  copyCommand.ts   |    98.7 |    96.29 |     100 |    98.7 | 66-67,172,272,323 
  ...or-command.ts |   85.95 |    80.55 |   88.88 |   85.95 | ...68-274,298-309 
  deleteCommand.ts |     100 |      100 |     100 |     100 |                   
  diffCommand.ts   |     100 |    87.87 |     100 |     100 | ...63,231-232,245 
  ...ryCommand.tsx |   90.56 |    87.83 |    90.9 |   90.56 | ...75-280,327-334 
  docsCommand.ts   |     100 |     90.9 |     100 |     100 | 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 |   93.06 |       85 |   66.66 |   93.06 | ...78-183,282-287 
 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 |   58.69 |    70.24 |    62.5 |   58.69 |                   
  ...atContent.tsx |    9.09 |      100 |       0 |    9.09 | 54-275,281-283    
  ...tChatView.tsx |     100 |    81.81 |     100 |     100 | 82                
  ...tComposer.tsx |   69.48 |    33.33 |   66.66 |   69.48 | ...51,269,277-279 
  AgentFooter.tsx  |   15.38 |      100 |       0 |   15.38 | 28-65             
  AgentHeader.tsx  |   15.38 |      100 |       0 |   15.38 | 27-64             
  AgentTabBar.tsx  |    87.9 |    63.88 |     100 |    87.9 | ...88,110-118,136 
  ...oryAdapter.ts |     100 |    91.83 |     100 |     100 | 103,109-110,138   
  index.ts         |       0 |        0 |       0 |       0 | 1-12              
 ...mponents/arena |   45.51 |    70.53 |   60.86 |   45.51 |                   
  ArenaCards.tsx   |   73.06 |    71.79 |   85.71 |   73.06 | ...83-185,321-326 
  ...ectDialog.tsx |   83.48 |    69.86 |   88.88 |   83.48 | ...88-392,409-410 
  ...artDialog.tsx |    9.77 |      100 |       0 |    9.77 | 27-166            
  ...tusDialog.tsx |    5.63 |      100 |       0 |    5.63 | 33-75,80-288      
  ...topDialog.tsx |    6.17 |      100 |       0 |    6.17 | 33-213            
 ...ackground-view |   85.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.4 |   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 |    86.95 |      90 |   84.71 | ...67-568,685-686 
  MultiSelect.tsx  |   93.58 |       75 |     100 |   93.58 | ...43,199-201,211 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...ontroller.tsx |     100 |    83.33 |     100 |     100 | 73,93-95          
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  ...lableList.tsx |   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   |   86.01 |    81.62 |   86.48 |   86.01 |                   
  ...ewContext.tsx |   87.56 |       80 |      75 |   87.56 | ...37-240,246-256 
  AppContext.tsx   |      80 |       50 |     100 |      80 | 19-20             
  ...ewContext.tsx |   93.83 |    68.51 |   42.85 |   93.83 | ...44,281-285,317 
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.65 |    84.85 |     100 |   85.65 | ...1612-1614,1620 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...deContext.tsx |     100 |      100 |      50 |     100 |                   
  ...onContext.tsx |   80.77 |       80 |    92.3 |   80.77 | ...31-434,443-446 
  ...gsContext.tsx |     100 |      100 |     100 |     100 |                   
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...utContext.tsx |   85.71 |      100 |   66.66 |   85.71 | 13-14             
  ...edContext.tsx |     100 |      100 |      50 |     100 |                   
  ...nsContext.tsx |   88.88 |       50 |     100 |   88.88 | 156-157           
  ...teContext.tsx |   86.66 |       50 |     100 |   86.66 | 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.97 |    83.91 |   87.81 |   85.97 |                   
  ...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.31 |    84.02 |   78.26 |   87.31 | ...5757-5759,5761 
  ...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 |   86.74 |    82.27 |    92.3 |   86.74 | ...62,377-387,467 
  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.4 |    77.77 |     100 |    95.4 | 133-134,236-241   
  ...ompletion.tsx |   90.67 |    83.33 |     100 |   90.67 | ...02,105,138-141 
  ...ectionList.ts |   97.12 |    96.22 |     100 |   97.12 | ...92-193,247-250 
  ...sionPicker.ts |   92.87 |    90.35 |     100 |   92.87 | ...99-501,503-505 
  ...earchInput.ts |     100 |    97.29 |     100 |     100 | 82                
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   93.28 |    80.95 |     100 |   93.28 | ...96,153-154,164 
  ...oryCommand.ts |   85.48 |    58.33 |     100 |   85.48 | 22-28,40,71       
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   82.85 |    85.13 |   94.73 |   82.85 | ...78-680,688-724 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...tatsDialog.ts |     100 |      100 |     100 |     100 |                   
  useStatusLine.ts |   97.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.72 |    85.81 |   96.06 |   87.72 |                   
  ...Colorizer.tsx |   80.31 |    85.41 |     100 |   80.31 | ...00-201,313-339 
  ...nRenderer.tsx |   80.07 |     75.6 |     100 |   80.07 | ...70,274,332-333 
  ...wnDisplay.tsx |   92.87 |     93.5 |     100 |   92.87 | ...,955,1002-1020 
  ...idDiagram.tsx |   87.79 |    95.34 |     100 |   87.79 | 156-179           
  ...eRenderer.tsx |   93.63 |    81.77 |   95.23 |   93.63 | ...47-750,803-808 
  ...odeDisplay.ts |   94.28 |    85.71 |     100 |   94.28 | 23,40             
  asciiCharts.ts   |    96.7 |     87.5 |     100 |    96.7 | 170-177,278       
  ...dWorkUtils.ts |     100 |      100 |     100 |     100 |                   
  ...boardUtils.ts |    52.9 |    74.15 |    92.3 |    52.9 | ...29,632-641,644 
  commandUtils.ts  |   98.61 |    93.22 |     100 |   98.61 | 189,217-218,424   
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  customBanner.ts  |   90.68 |    91.22 |     100 |   90.68 | ...13,324-327,334 
  displayUtils.ts  |   73.84 |    73.91 |     100 |   73.84 | ...34,36-40,42-46 
  formatters.ts    |   94.87 |    98.21 |     100 |   94.87 | 116-119           
  goal-runtime.ts  |   91.42 |       95 |     100 |   91.42 | 32-34             
  gradientUtils.ts |     100 |      100 |     100 |     100 |                   
  highlight.ts     |     100 |      100 |     100 |     100 |                   
  ...gap-notice.ts |     100 |      100 |     100 |     100 |                   
  ...oryMapping.ts |     100 |    95.65 |     100 |     100 | 45,151            
  historyUtils.ts  |   96.07 |    97.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.12 |     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     |   98.71 |    95.72 |     100 |   98.71 | 292-293,478-479   
  ...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         |   83.09 |    87.73 |   93.19 |   83.09 |                   
  ...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           
  ...y-identity.ts |   86.34 |    81.52 |     100 |   86.34 | ...71-372,379-380 
  ...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 
  findings.ts      |   96.01 |    92.08 |     100 |   96.01 | ...1227,1236-1237 
  gitUtils.ts      |   92.85 |    86.66 |     100 |   92.85 | ...13-116,164-167 
  ...AutoUpdate.ts |   93.54 |    94.64 |      90 |   93.54 | 126,131,202-213   
  ...tyWarnings.ts |     100 |      100 |     100 |     100 |                   
  ...lationInfo.ts |   97.81 |    94.69 |     100 |   97.81 | ...03,420-421,466 
  ...projection.ts |   95.27 |    95.58 |     100 |   95.27 | 140-145           
  jsonc-editor.ts  |   93.18 |    92.66 |     100 |   93.18 | ...80-381,384-385 
  languageUtils.ts |   98.88 |    97.01 |     100 |   98.88 | 184-185           
  load-undici.ts   |     100 |      100 |     100 |     100 |                   
  ...npm-update.ts |   86.64 |    77.02 |     100 |   86.64 | ...03-304,335-345 
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...er-mention.ts |     100 |    66.66 |     100 |     100 | 14,30,44-46       
  ...iagnostics.ts |   94.57 |    83.01 |   88.88 |   94.57 | ...05,311,315-317 
  ...serMessage.ts |     100 |      100 |     100 |     100 |                   
  ...onfigUtils.ts |   94.25 |    91.17 |     100 |   94.25 | ...30,436,439-443 
  ...iveHelpers.ts |   95.14 |    91.79 |     100 |   95.14 | ...54-455,553,566 
  osc.ts           |   97.18 |      100 |    87.5 |   97.18 | 182-183           
  package.ts       |   88.88 |    85.71 |     100 |   88.88 | 31-32             
  paths.ts         |     100 |      100 |     100 |     100 |                   
  ...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 |   79.62 |     88.8 |   85.18 |   79.62 | ...47-565,572-580 
  shell-args.ts    |     100 |      100 |     100 |     100 |                   
  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                
  ...iagnostics.ts |    95.8 |     87.5 |   93.75 |    95.8 | ...03,277-278,289 
  ...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.24 |     86.8 |   89.78 |   88.24 |                   
 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        |   89.63 |    83.96 |   94.11 |   89.63 |                   
  ...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.86 |    87.26 |    98.3 |   94.86 | ...1463,1477-1479 
  ...w-snapshot.ts |   75.73 |    72.22 |    87.5 |   75.73 | ...21,445,452-454 
  worktree-pin.ts  |     100 |    88.23 |     100 |     100 | 78,99             
 src/agents/arena  |   76.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.36 |    86.54 |   90.25 |   91.36 |                   
  agent-context.ts |     100 |      100 |     100 |     100 |                   
  agent-core.ts    |   84.54 |    76.42 |   77.58 |   84.54 | ...2365,2411-2413 
  agent-events.ts  |     100 |      100 |     100 |     100 |                   
  ...t-headless.ts |   93.49 |    89.41 |   83.33 |   93.49 | ...96-497,500-501 
  ...nteractive.ts |   81.01 |    82.35 |   76.66 |   81.01 | ...33,535-538,541 
  ...statistics.ts |   98.29 |    82.55 |     100 |   98.29 | 141,165,206,239   
  agent-types.ts   |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ool-policy.ts |   98.38 |      100 |    92.3 |   98.38 | 85-86             
  ...low-budget.ts |     100 |      100 |     100 |     100 |                   
  ...-scheduler.ts |   97.43 |    96.36 |     100 |   97.43 | 128-130           
  ...ow-journal.ts |   92.78 |    78.12 |     100 |   92.78 | ...49-150,192-194 
  ...chestrator.ts |   93.87 |    90.44 |    91.3 |   93.87 | ...2216,2309-2312 
  ...ow-prompts.ts |     100 |      100 |     100 |     100 |                   
  ...low-runner.ts |   95.47 |    83.47 |   94.44 |   95.47 | ...44,312,332-335 
  ...ow-sandbox.ts |   96.88 |    91.16 |     100 |   96.88 | ...1768,1774-1775 
  ...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.97 |    84.56 |    89.2 |   82.97 |                   
  TeamManager.ts   |   74.33 |    81.17 |    80.7 |   74.33 | ...1707,1730-1731 
  identity.ts      |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...sionBridge.ts |     100 |      100 |     100 |     100 |                   
  mailbox.ts       |   96.02 |    87.23 |     100 |   96.02 | 352-358           
  ...ptAddendum.ts |     100 |      100 |     100 |     100 |                   
  tasks.ts         |   89.29 |    82.91 |     100 |   89.29 | ...1000,1044-1045 
  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 |   95.06 |    95.16 |   98.21 |   95.06 |                   
  ...on-harness.ts |   96.49 |       85 |     100 |   96.49 | 128-129,141-142   
  fake-agent.ts    |     100 |    96.77 |     100 |     100 | 158,167           
  fake-backend.ts  |   86.46 |    97.61 |   95.83 |   86.46 | 124-146           
 src/config        |   84.33 |     86.9 |   75.67 |   84.33 |                   
  approval-mode.ts |     100 |      100 |     100 |     100 |                   
  ...xtDefaults.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |   83.65 |    86.63 |   74.19 |   83.65 | ...8914,8918-8919 
  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.24 |   93.05 |   92.46 |                   
  baseLlmClient.ts |    88.4 |     83.8 |   81.81 |    88.4 | ...59,672,678-680 
  client.ts        |   92.58 |    88.04 |   91.01 |   92.58 | ...4310,4408-4409 
  ...tGenerator.ts |   86.34 |    87.34 |   84.61 |   86.34 | ...96-497,542-548 
  ...lScheduler.ts |   89.77 |     84.7 |   94.73 |   89.77 | ...6429,6457-6473 
  geminiChat.ts    |   94.91 |     90.1 |   95.72 |   94.91 | ...5208,5256-5257 
  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 |     92.1 |     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.81 |    91.22 |     100 |   98.81 | 43,52             
  ...okTriggers.ts |   99.45 |    92.43 |     100 |   99.45 | 182,193           
  ...terruption.ts |     100 |     92.3 |     100 |     100 | 86,104            
  turn.ts          |   99.19 |    94.48 |     100 |   99.19 | 698-699,768       
  ...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     |   88.46 |    85.59 |   93.19 |   88.46 |                   
  ...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 |                   
  ...redentials.ts |   95.33 |    89.47 |     100 |   95.33 | ...21-122,173-175 
  ...me-refresh.ts |     100 |      100 |     100 |     100 |                   
  ...sion-store.ts |   92.82 |    89.08 |    98.3 |   92.82 | ...1641-1647,1691 
  ...ionManager.ts |   84.45 |    83.47 |      83 |   84.45 | ...3126,3164-3165 
  ...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        |   91.61 |     84.5 |     100 |   91.61 | ...1027-1028,1038 
  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      |   84.58 |    81.04 |   86.84 |   84.58 |                   
  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   |   75.98 |    67.22 |   58.33 |   75.98 | ...42-743,750-751 
  ...onToolGate.ts |   97.97 |     87.5 |     100 |   97.97 | 105,110           
  ...nGenerator.ts |   86.27 |    87.65 |     100 |   86.27 | ...42-247,359-361 
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/goals         |   92.96 |    89.05 |   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.93 |   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.48 |   89.28 |   82.12 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   87.08 |    87.71 |   95.23 |   87.08 | ...00-201,214-215 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/memory        |   88.08 |     84.5 |   90.62 |   88.08 |                   
  ...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 |    83.33 |     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        |   86.86 |    86.36 |   92.85 |   86.86 | ...33-538,571-582 
  refresh.ts       |   93.58 |    89.58 |     100 |   93.58 | ...75-176,183-184 
  ...ceSelector.ts |    93.2 |    85.71 |     100 |    93.2 | ...45-146,148-149 
  remember.ts      |   98.89 |    90.19 |     100 |   98.89 | 50,70             
  scan.ts          |   93.75 |       80 |     100 |   93.75 | ...08-109,154,157 
  scopes.ts        |     100 |      100 |     100 |     100 |                   
  ...et-scanner.ts |     100 |      100 |     100 |     100 |                   
  ...entPlanner.ts |   77.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 |    85.71 |     100 |     100 | 27                
  ...cret-guard.ts |     100 |      100 |     100 |     100 |                   
  ...emory-sync.ts |   94.24 |    82.85 |     100 |   94.24 | ...34-236,246-247 
  types.ts         |     100 |      100 |     100 |     100 |                   
  ...ontextFile.ts |   81.21 |     79.1 |   81.81 |   81.21 | ...63-277,291-296 
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   94.45 |    90.76 |   94.33 |   94.45 |                   
  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 |                   
  ...ta-catalog.ts |   96.23 |    92.51 |     100 |   96.23 | ...69,559-560,638 
  ...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 |    97.36 |     100 |     100 | 196,280,297       
  modelsConfig.ts  |   92.15 |    89.36 |   91.11 |   92.15 | ...1616,1645-1646 
  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.16 |   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 |    88.88 |      80 |   86.63 | ...1111,1217-1221 
  rule-parser.ts   |   94.49 |    92.72 |     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     |      85 |    79.82 |   84.84 |      85 |                   
  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 |   78.51 |    76.51 |   83.33 |   78.51 | ...37-457,502-503 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...viders/presets |   97.85 |    97.22 |   63.63 |   97.85 |                   
  ...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 |    93.75 |      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.48 |    86.19 |   96.82 |   90.48 |                   
  ...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.7 |    96.44 |     100 |    97.7 | ...1069,1212-1220 
  ...ingService.ts |   91.36 |    86.98 |   93.25 |   91.36 | ...2685,2700-2701 
  ...ttribution.ts |   91.73 |    87.71 |      90 |   91.73 | ...80-685,826-827 
  ...utSlimming.ts |    97.2 |    94.23 |     100 |    97.2 | ...39-340,378-381 
  cronScheduler.ts |   94.17 |    90.45 |      98 |   94.17 | ...1333,1736-1737 
  cronTasksFile.ts |   95.49 |    90.82 |     100 |   95.49 | ...37,346-347,483 
  cronTasksLock.ts |   94.44 |    89.47 |     100 |   94.44 | ...02-103,132-133 
  ...eryService.ts |   96.22 |    93.54 |      90 |   96.22 | 121,155-156,161   
  ...oryService.ts |   88.17 |    79.02 |    92.3 |   88.17 | ...1303,1344-1347 
  fileReadCache.ts |    97.5 |    96.07 |     100 |    97.5 | 349-350,363-364   
  ...temService.ts |    92.8 |    84.68 |   94.11 |    92.8 | ...53,479-486,531 
  ...ratedFiles.ts |      96 |    88.23 |     100 |      96 | 119-120,146-147   
  gitInit.ts       |     100 |      100 |     100 |     100 |                   
  ...reeService.ts |   74.75 |    70.76 |   96.07 |   74.75 | ...2296,2325-2326 
  ...on-service.ts |   87.38 |       72 |     100 |   87.38 | ...01-305,343-344 
  ...references.ts |   98.57 |    91.42 |     100 |   98.57 | 156-157,217-218   
  ...ionService.ts |   98.21 |    97.25 |     100 |   98.21 | ...81-682,729-730 
  ...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.58 |     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 |   83.14 |    74.47 |   97.61 |   83.14 | ...2433,2445-2448 
  sessionRecap.ts  |   67.56 |    43.47 |     100 |   67.56 | ...60,178,180-183 
  ...ionService.ts |   90.01 |    87.27 |   96.29 |   90.01 | ...2820,2834-2854 
  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.91 |    95.08 |     100 |   98.91 |                   
  microcompact.ts  |   98.91 |    95.08 |     100 |   98.91 | ...60,769,778-779 
 ...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.53 |    84.79 |   85.86 |   82.53 |                   
  ...ty-tracker.ts |     100 |      100 |     100 |     100 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...on-metrics.ts |   99.08 |    80.95 |     100 |   99.08 | 185,199           
  ...on-tracing.ts |   80.71 |    81.91 |   79.16 |   80.71 | ...92,499-501,517 
  ...attributes.ts |   96.98 |    91.37 |     100 |   96.98 | ...47-348,366-367 
  ...ag-metrics.ts |     100 |    77.77 |     100 |     100 | 21,40             
  ...t-loop-lag.ts |   96.85 |    85.71 |     100 |   96.85 | 170-173           
  ...-exporters.ts |   65.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.95 |    86.32 |      75 |   93.95 | ...41,491-492,508 
  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 |     95.1 |   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.24 |    84.97 |      89 |   86.24 |                   
  ...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.72 |     91.3 |   81.81 |   89.72 | ...00-301,312-319 
  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.11 |    82.35 |   83.33 |   94.11 | 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 |    87.1 |    81.04 |   93.93 |    87.1 | ...78-879,903-904 
  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 
  ...-constants.ts |     100 |      100 |     100 |     100 |                   
  ...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     |   80.43 |    86.36 |   83.33 |   80.43 | ...67,121,125-132 
  task-stop.ts     |   93.14 |    96.15 |   85.71 |   93.14 | 39-40,54-64       
  task-update.ts   |   82.87 |    86.41 |    92.3 |   82.87 | ...54-564,588-599 
  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 | ...76-577,593-599 
  ...reapproved.ts |   99.27 |    94.11 |     100 |   99.27 | 170               
  web-fetch.ts     |   96.05 |    90.54 |   96.77 |   96.05 | ...85-786,800-801 
  web-search.ts    |   90.58 |    83.57 |      80 |   90.58 | ...1025,1083-1086 
  write-file.ts    |      87 |    85.48 |   88.88 |      87 | ...26-829,866-901 
  zoom-image.ts    |   95.76 |    93.75 |      90 |   95.76 | 54-59,203-204     
 src/tools/agent   |   86.97 |    87.71 |   88.49 |   86.97 |                   
  agent.ts         |   85.56 |    86.65 |   86.02 |   85.56 | ...4274,4308-4318 
  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.9 |    85.18 |   77.77 |    86.9 |                   
  workflow.ts      |    86.9 |    85.18 |   77.77 |    86.9 | ...08,553,555-556 
 src/utils         |   93.18 |    89.85 |   96.84 |   93.18 |                   
  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.89 |    94.11 |      95 |   95.89 | ...99-500,512-525 
  ...tion-chain.ts |     100 |      100 |     100 |     100 |                   
  cronDisplay.ts   |     100 |    97.61 |     100 |     100 | 46                
  cronParser.ts    |   95.34 |    93.33 |     100 |   95.34 | 41-42,47-48,70-71 
  debugLogger.ts   |   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.63 |   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     |   95.05 |    92.71 |   96.15 |   95.05 | ...1988,1996-1997 
  forkedAgent.ts   |   92.98 |    83.78 |   94.44 |   92.98 | ...77,685,690-697 
  formatters.ts    |     100 |      100 |     100 |     100 |                   
  ...eUtilities.ts |    92.4 |    86.95 |     100 |    92.4 | ...52-158,168-169 
  ...rStructure.ts |   94.39 |    94.28 |     100 |   94.39 | ...29-132,343-348 
  getPty.ts        |   31.57 |       50 |     100 |   31.57 | 26-38             
  git-branches.ts  |    91.6 |    84.21 |    92.3 |    91.6 | ...90,405-410,570 
  ...fig-safety.ts |   97.01 |       80 |     100 |   97.01 | 53-54             
  git-ignore.ts    |     100 |      100 |     100 |     100 |                   
  gitDiff.ts       |   95.19 |    81.36 |     100 |   95.19 | ...1073,1419-1420 
  gitDirect.ts     |   98.84 |    94.28 |     100 |   98.84 | 234,318           
  ...noreParser.ts |   94.48 |    93.22 |     100 |   94.48 | ...23-124,158-159 
  gitUtils.ts      |   78.83 |    82.35 |    87.5 |   78.83 | ...22-123,164-215 
  github-prs.ts    |   95.74 |    82.27 |     100 |   95.74 | 216,314-322       
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  image-view.ts    |   95.08 |    93.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   |   96.02 |    93.13 |     100 |   96.02 | ...74-375,417-420 
  ...-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 |   93.42 |    90.72 |     100 |   93.42 | ...11,370,592-595 
  ...tProcessor.ts |   94.01 |    89.88 |     100 |   94.01 | ...47-353,445-446 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  modelId.ts       |   98.96 |    98.18 |     100 |   98.96 | 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.66 |     100 |   90.88 | ...28-629,631-633 
  pdf.ts           |   92.17 |    85.81 |     100 |   92.17 | ...64-565,606-611 
  ...s-liveness.ts |     100 |    93.47 |     100 |     100 | 62,72,108         
  projectPath.ts   |     100 |      100 |     100 |     100 |                   
  projectRoot.ts   |   71.73 |    78.57 |     100 |   71.73 | 54-66             
  ...ectSummary.ts |   89.62 |    72.41 |     100 |   89.62 | ...40-145,196-199 
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  proxyUtils.ts    |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   71.15 |       86 |     100 |   71.15 | ...-90,96-101,147 
  ...noreParser.ts |   92.63 |    91.66 |     100 |   92.63 | ...77-178,197-198 
  rateLimit.ts     |   93.75 |    89.62 |     100 |   93.75 | ...13,218-219,262 
  ...text-range.ts |   96.98 |    87.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 |   86.97 |    87.24 |   96.29 |   86.97 | ...55,671,696,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 |       90 |     100 |     100 | 95                
  ...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 |    94.73 |     100 |     100 | 76,111            
  ...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             
  ...repeat-key.ts |     100 |      100 |     100 |     100 |                   
  ...name-utils.ts |     100 |      100 |     100 |     100 |                   
  ...-finalizer.ts |    98.1 |     92.3 |   93.33 |    98.1 | ...34-235,237-241 
  ...iagnostics.ts |   99.06 |     97.7 |   91.66 |   99.06 | 132-133,204       
  ...-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 |    57.14 |      75 |   54.62 | ...03-105,108-134 
  ...Compaction.ts |   96.13 |    96.39 |     100 |   96.13 | ...34-339,341-346 
  ...pt-records.ts |   87.58 |    86.13 |     100 |   87.58 | ...79-483,513-528 
  truncation.ts    |   90.61 |    90.51 |     100 |   90.61 | ...53-461,498-504 
  windowsPath.ts   |   89.47 |    79.31 |     100 |   89.47 | ...57-58,62,90-91 
  ...ifact-path.ts |   94.11 |    92.85 |     100 |   94.11 | 32-33             
  ...aceContext.ts |   95.39 |    89.47 |     100 |   95.39 | ...16-317,321-322 
  xml.ts           |    97.8 |    87.69 |     100 |    97.8 | 98-99             
  yaml-parser.ts   |   83.87 |    77.27 |     100 |   83.87 | ...31-234,239-240 
 ...ils/filesearch |   83.94 |    80.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 |   71.04 |    75.92 |   91.17 |   71.04 |                   
  ...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 |     100 |      100 |     100 |     100 |                   
  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.

@DragonnZhang

DragonnZhang commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

E2E test report

  • Baseline: Qwen Code 0.20.1 treated a JPEG attached to thinkingmachines/inkling as unsupported and sent the text placeholder because the model id did not match the built-in heuristic.
  • Changed build: with the same provider settings and a local OpenAI-compatible endpoint, the outgoing request contained the JPEG as an OpenAI image_url data URL.
  • Warm-cache failure scenario: routing the catalog refresh through an unreachable proxy preserved image handling from the cached metadata without blocking startup.
  • Reliability follow-up: the focused suite now also covers a cold-cache fetch that never resolves, stale refresh success and failure, same-process publication to later configurations, manual provider settings, runtime /auth-style provider reload, explicit overrides, and unknown-provider isolation (193/193 passing).
  • Provider alias follow-up: the built source resolves the six Alibaba China/international endpoints to distinct catalogs, treats both local OpenRouter :free models as text-only through their base entries, and resolves the four Idealab aliases to Alibaba China, DeepSeek, or Moonshot metadata. Exact OpenRouter variant entries still win, and unknown suffixes/aliases remain on the local fallback.

Environment: macOS, Node.js 22, no sandbox. Windows and Linux runtime behavior were not manually tested.

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

🩺 serve daemon A/B

Built the PR base vs this PR head 07b7ef0, drove a fixed endpoint set against each, and diffed the JSON responses. Only fields that changed are shown.

No response changes against the PR base across 4 scenario(s).

Qwen Code · serve A/B

@DragonnZhang
DragonnZhang marked this pull request as ready for review August 5, 2026 07:15
@DragonnZhang
DragonnZhang enabled auto-merge August 5, 2026 07:15
@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Qwen Triage finishedview run. See the stage comments in this thread for the result.

Qwen Triage 已完成 —— 查看运行。结果见本线程中的各阶段评论。

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Re-run at the new head — gate re-validated, conclusions unchanged.

Template looks good ✓ — all sections present, bilingual body, detailed reviewer test plan.

Problem: observed, not theoretical. Concrete before/after on 0.20.1: a JPEG attached to thinkingmachines/inkling was replaced with an unsupported-image placeholder because the model id is unknown to the name heuristics. Linked roadmap issue #8558 (priority/P2, roadmap/model-inference) describes exactly this gap for OpenAI-compatible providers.

Direction: aligned. #8558 sketches the staged approach this PR takes — modalities first via a models.dev snapshot, limits/reasoning/pricing later — and names this PR as the demonstration. The issue also requires the cold-start guarantees implemented here (bundled snapshot, non-blocking startup, disk cache + background refresh).

Size: core paths are touched (models/, config/, providers/, plus CLI wiring): ~992 production logic lines at the current head (573-line catalog module, 148 in modelsConfig.ts/modelRegistry.ts, 69-line snapshot generator, ~202 spread across provider-config.ts, useProviderUpdates.ts, workspace-providers-status.ts, config entry points, and exports) vs ~2100 test lines vs 1 generated snapshot line + an 84-line design doc. As a feat PR there is no size block; 500+ production lines in core means maintainer awareness — that escalation has happened: a core maintainer has since run a deep local verification and approved this head (see Stage 2/3 for what that does and does not settle).

Approach: scope still feels right for the first step. Modalities only (no limits, pricing, reasoning flags, or model-list migration), precedence chain explicit config → catalog match → name heuristic → text-only, and every alias path (regional Alibaba endpoints, gateway family borrowing, OpenRouter variant suffixes, Idealab aliases) maps to a real configuration surface in this repo's presets with test coverage.

Risk: no elevated risk signals — none of the changed files match the repo's revert-correlated high-risk paths. The PR does touch a sensitive area (model configuration and /auth provider-install templates).

Moving on to code review. 🔍

中文说明

在新 head 上重跑——门禁重新校验,结论不变。

模板完整 ✓ —— 各部分齐全、中英双语、审阅者测试计划详细。

问题:已观测到,非理论性问题。 0.20.1 中有具体 before/after:附加到 thinkingmachines/inkling 的 JPEG 被替换成"不支持图片"占位符(该模型 id 不在名称启发式规则里)。关联的路线图 issue #8558priority/P2roadmap/model-inference)正是描述 OpenAI 兼容 provider 的这一缺口。

方向:对齐。 #8558 规划了本 PR 采用的分阶段方案——先经 models.dev 快照解决模态,limits/reasoning/价格后续——并点名本 PR 作为示范;issue 还要求了这里已实现的冷启动保障。

规模: 触及核心路径:当前 head 约 992 行生产逻辑(573 行 catalog 模块、modelsConfig.ts/modelRegistry.ts 148 行、69 行快照生成脚本、约 202 行分布在 provider-config.ts、useProviderUpdates.ts、workspace-providers-status.ts、config 入口与导出),测试约 2100 行,另有 1 行生成快照和 84 行设计文档。feat 类型不因规模阻断;核心生产代码超过 500 行需维护者知悉——该升级已经发生:一位核心维护者已对当前 head 做了深度本地验证并批准(该批准解决了什么、未解决什么见 Stage 2/3)。

方案:作为第一步范围仍然合理。 只做模态;优先级链为显式配置 → 目录命中 → 名称启发式 → 纯文本;每条 alias 路径都对应本仓库 preset 中真实存在的配置面且有测试覆盖。

风险: 无升级风险信号——改动文件均未命中与 revert 相关的高风险路径。但 PR 触及敏感区域(模型配置与 /auth provider 安装模板)。

进入代码审查 🔍

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Code review (re-run at the new head)

Since my last pass, this branch went through five /review rounds and six more author commits. I re-read the code at the current head, verified the status of every Critical against the diff, and checked what changed. The core assessment holds: loader hygiene is solid (strict validation before publish/cache, 32 MB streaming cap, 10 s timeout, atomic writes, unref()'d refresh timers, non-fatal fallbacks), cold start resolves from disk cache or built-in snapshot without waiting on the network, live sessions keep a stable catalog reference, explicit configuration always wins, and only modalities are read — nothing from the catalog reaches request bodies, headers, or routing (#8558's hard line).

Status of the flagged items:

  • R4-7 (Critical, round 5) — fixed. The last commit is exactly this fix: the production-session test now stubs OPENAI_API_KEY/OPENAI_BASE_URL so ambient credentials can't leak into config resolution. Verified in the diff (09bf0cf..444faf6 is this 2-line change and nothing else).

  • R5-17 (Critical, round 5) — not addressed at this head. I re-verified the scenario statically rather than taking the ledger's word for it, and it still reproduces on paper:

    • The snapshot lists qwen/qwen3.7-plus as text,image (no video) under openrouter, kilo, and merge-gateway — while crossmodel and zenmux list text,image,video for the identical model id, and the Alibaba endpoints in the same file also carry video.
    • modelRegistry.resolveModelConfig applies catalogModalities ?? defaultModalities(config.id) — the catalog wins outright, no union with the pinned heuristic.
    • normalize() strips the qwen/ prefix, so pre-PR defaultModalities('qwen/qwen3.7-plus') matched the pinned heuristic /^qwen3\.7-plus/ → {image, video} (modalityDefaults.ts, pinned by modalityDefaults.test.ts). Post-PR, a user-added qwen/qwen3.7-plus on OpenRouter — a first-class preset with modelsEditable: true and no spec modalities — resolves {image: true} from the catalog, and video attachments get replaced with the unsupported-modality placeholder. That is a silent capability regression for Qwen's own flagship Plus family on a supported preset surface.
    • Neither suggested fix is present: the gateway entries were not regenerated with video, and catalog application is not additive-only against pinned heuristics. No test pins the new behaviour either (the catalog suite pins {image, video} for qwen3.7-plus under the Alibaba token-plan endpoints, which the snapshot satisfies — the OpenRouter case is untested).

    This is the one item I'd want settled before merge. The fix is small: either union catalog modalities with defaultModalities() at the application sites (catalog can add capabilities, never remove repo-pinned ones), or re-audit/regenerate the video modality for the qwen3.x Plus family in the generator.

  • Remaining round-5 suggestions (R4-5, R4-8, R5-5, R5-6, R5-7, R5-14) — still open, tracked in the /review ledger, non-blocking from my side.

  • Of my earlier nits: the modelConfigResolver.ts comment removal is resolved (the path is heuristic-only again with a fuller comment); the Vitest-detection duplication and the cache-path-keyed proxy-options note remain minor.

The runtime flow, for orientation:

sequenceDiagram
    participant P1 as CLI config load
    participant P2 as Catalog loader
    participant P3 as Disk cache
    participant P4 as models.dev
    participant P5 as ModelsConfig and registry
    P1->>P2: load catalog
    P2->>P3: read cache
    P3-->>P2: valid cache used immediately, even when stale
    P2-->>P1: catalog resolved without waiting for network
    P1->>P5: config captures the catalog reference
    P2-)P4: background refresh, also when cache is missing (built-in snapshot covers it)
    P4-->>P2: new catalog, strictly validated
    P2->>P3: atomic cache write
    Note over P2: refreshed data applies to configs created later - existing sessions keep theirs
Loading
Files changed (28)
File What changed
packages/core/src/models/model-metadata-catalog.ts 573-line module: validated loader with snapshot, disk cache, background refresh, provider-identity plus modality lookup
packages/core/src/models/generated/models-dev-modalities.json Built-in modality-only snapshot generated from models.dev (180 providers)
scripts/generate-model-modality-snapshot.js Generator behind the generate:model-modalities npm script
packages/core/src/models/modelsConfig.ts Catalog applied at construction, raw model switches, registry switches, credential updates; explicit-modality guards
packages/core/src/models/modelRegistry.ts Catalog fills missing modalities after explicit values; per-model source tracking; MiniMax-M3 force-normalization removed
packages/core/src/models/modelConfigResolver.ts Heuristic-only modalities fallback with invariant comment
packages/core/src/providers/provider-config.ts providerMatchesCredentials handles custom-provider envKey functions
packages/core/src/providers/presets/*.ts Hardcoded modalities removed from coding-plan, token-plan, idealab, minimax presets
packages/core/src/models/index.ts, packages/core/src/index.ts, packages/core/src/config/config.ts New exports; modelMetadataCatalog threaded into ConfigParameters
packages/cli/src/config/config.ts Starts the catalog load early with proxy support, awaits it into Config
packages/cli/src/serve/workspace-providers-status.ts Workspace provider status reports catalog modalities
packages/cli/src/ui/hooks/useProviderUpdates.ts Preserves user-set modalities across auth refresh unless they are template residue
package.json, docs/design/model-modality-catalog.md Script entry; design doc
*.test.ts (14 files) ~2100 lines: loader lifecycle, precedence, regional endpoints, gateway borrowing, variants, generators, hermeticity

Test evidence

Unattended CI run — no PR code built or executed here; the table quotes the PR's own CI on the reviewed commit:

Check Conclusion
Test (ubuntu-latest, Node 22.x) ✅ success
Test (macos-latest, Node 22.x) ⏭️ skipped (workflow design)
Test (windows-latest, Node 22.x) ⏭️ skipped (workflow design)
Integration Tests (CLI, No Sandbox) ⏭️ skipped (workflow design)
Serve A/B (ubuntu-latest, Node 22.x) ✅ success
Desktop Shell (ubuntu-22.04) ✅ success
Post Coverage Comment (ubuntu-latest, 22.x) ✅ success
web-shell E2E Smoke (ubuntu-latest, Node 22.x) ✅ success
SDK Java (ubuntu 11/17/21, macOS 21, windows 21) ✅ success

All three pull_request-event workflows (Qwen Code CI, Serve A/B, SDK Java) completed green on this commit; nothing is pending. The one still-running check (review-pr) is bot orchestration, not PR CI. macOS/Windows unit checks and the CLI integration suite are skipped by workflow design, not red.

Behavioural evidence: the central claim (unknown model gets catalog modalities, image goes on the wire as image_url, cold start never blocks on models.dev) is now substantiated by a maintainer's local deep-verification run on this exact head — 736/736 scripted assertions including a mock-free loopback wire A/B (base build emits the unsupported-image placeholder; PR build sends the JPEG as an image_url data URL), stale-while-revalidate, failure paths, and explicit-wins, plus a mutation check that turned 55 tests red. That is a local maintainer run (advisory evidence, attributed — not CI), and it did not cover the R5-17 scenario, Windows/Linux, or the interactive /auth UI. If CI-grade evidence is wanted on top of it, @qwen-code /verify (sponsored run — the author has write access, and a maintainer's trigger approves the head it runs against) would reproduce the same A/B in the isolated lane.

中文说明

代码审查(在新 head 上重跑)

上次审查以来,该分支经历了五轮 /review 和六个新提交。我在当前 head 重读了代码,逐条核对 Critical 状态。核心结论不变:加载器卫生到位(发布/缓存前严格校验、32 MB 流式上限、10 秒超时、原子写、unref 刷新定时器、失败路径全部非致命);冷启动不等网络;会话内 catalog 引用稳定;显式配置永远优先;只读模态,目录数据不进入请求体/请求头/路由。

标记项状态:R4-7(Critical)已修复——最后一个提交正是该修复(stub OPENAI_API_KEY/OPENAI_BASE_URL),09bf0cf..444faf6 的差异仅此 2 行。R5-17(Critical)在当前 head 仍未解决,我静态复核了该场景而非仅引用 ledger:快照里 openrouter/kilo/merge-gateway 的 qwen/qwen3.7-plus 为 text,image(无 video),而同一文件里 crossmodel/zenmux 的同名模型有 video,Alibaba 各 endpoint 也有;modelRegistry.resolveModelConfig 用 catalogModalities ?? defaultModalities,目录直接胜出、不与固定启发式取并集;normalize() 会剥掉 qwen/ 前缀,所以 PR 前 defaultModalities('qwen/qwen3.7-plus') 命中固定规则得到 {image, video}(有测试钉住),PR 后经 OpenRouter preset(一等 preset、modelsEditable、spec 无模态)用户添加的同名模型解析为 {image: true},视频附件会被替换成"不支持"占位符——对 Qwen 自家旗舰 Plus 家族在受支持配置面上的静默能力回归。两个建议修复(重新生成快照条目 / 目录只增不减地叠加固定启发式)均未出现,也没有测试钉住新行为。这是合并前我希望解决的唯一问题,修复很小。其余 round-5 建议项仍开放、非阻断;我此前提的三个小问题中注释删除已解决,另两个仍是小问题。

测试证据

无人值守 CI 运行,未构建或执行 PR 代码;表格引自该 commit 的 PR 自身 CI:三个 pull_request 事件工作流(Qwen Code CI、Serve A/B、SDK Java)全部绿色完成,无 pending;macOS/Windows 单元与 CLI 集成按工作流设计跳过;唯一在跑的 review-pr 是机器人编排任务。

行为证据:核心声明(未知模型获得目录模态、图片以 image_url 上线、冷启动不阻塞 models.dev)已由一位维护者对当前 head 的深度本地验证支撑——736/736 断言,含免 mock 回环抓包 A/B(base 出占位符、PR 发 image_url data URL)、stale-while-revalidate、失败路径、显式优先,以及让 55 个测试变红的变异测试。这是维护者本地运行(咨询性证据,已注明出处,非 CI),未覆盖 R5-17 场景、Windows/Linux 与 /auth 交互 UI;如需 CI 级证据,可用 @qwen-code /verify(作者有写权限,维护者触发即赞助运行)。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

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

Copy link
Copy Markdown
Collaborator

Confidence: 3/5 — clean review on the merits and a maintainer-verified behavioural proof, but one statically confirmed regression (the round-5 Critical R5-17) is still in this head, and I won't approve over an open Critical in our own review pipeline.

Stepping back, this PR has earned a lot of credit: it is exactly the first step #8558 carved out, the core claim now has real wire-level A/B evidence (a maintainer's local deep verification on this exact head — base build emits the unsupported-image placeholder, PR build sends the JPEG as image_url), CI is fully green, and the five review rounds have visibly hardened the loader. My independent baseline for this problem would have been smaller, but every extra path here maps to a real preset surface with tests, so the scope reads as earned.

What I weighed hardest this round is narrower than last time — one question: what happens to qwen/qwen3.7-plus on OpenRouter?

  • Pre-PR, the pinned name heuristic gave that model {image, video} (and a test pins it). Post-PR, the catalog entry (text,image under openrouter/kilo/merge-gateway in the checked-in snapshot) wins outright and video disappears — video attachments to Qwen's own flagship Plus family through a first-class preset would silently become the unsupported-modality placeholder.
  • The last commit fixed the other round-5 Critical (the test hermeticity issue) but not this one; the diff since round 5 is exactly the 2-line test fix. Neither suggested remedy is in: the gateway entries weren't regenerated with video, and catalog application isn't additive-only against pinned heuristics.
  • I can't resolve this from the diff alone because it's a product call as much as a code call: is models.dev's per-gateway data authoritative (accept the regression, update the pinned heuristic), or should the catalog only ever add capabilities on top of repo-pinned ones (a small union at the application sites)? The inconsistent upstream data — the same model id has video on four other gateways in the same snapshot — argues for the additive approach to me, but that's for the maintainer and author to decide.

What I'm not doing: approving. A core maintainer has approved this head after deep verification, and I want to be explicit that my hold is not a second-guess of that judgment — his report substantiates the central claim thoroughly. It just didn't cover this scenario, and the round-5 CHANGES_REQUESTED review citing R5-17 is still standing on the PR (I'm deliberately not stacking another request-changes review; the gate is already active). Merging needs one of: the additive-only fix or snapshot regeneration, or an explicit maintainer dismissal of R5-17 accepting the tradeoff.

⏸️ Deferring to @wenshao (you approved this head — was R5-17 part of that call, or should @DragonnZhang land the additive-only fix first?) — that is the only open question; everything else in this PR is in good shape.

中文说明

置信度:3/5 —— 就代码本身而言审查干净,行为声明也有维护者验证支撑,但当前 head 仍存在一处静态确认的回归(round-5 的 Critical R5-17),在我们自己的审查流程中还有未关闭的 Critical 时我不会批准。

退一步看,这个 PR 已经赢得了足够的信任:它正是 #8558 规划的第一步;核心声明现在有线级 A/B 证据(维护者对当前 head 的本地深度验证——base 构建出"不支持图片"占位符,PR 构建把 JPEG 以 image_url 发出);CI 全绿;五轮 review 明显加固了加载器。

这一轮我最慎重权衡的问题只有一个:qwen/qwen3.7-plus 经 OpenRouter 会怎样? PR 前固定启发式给该模型 {image, video}(有测试钉住);PR 后目录条目(内置快照里 openrouter/kilo/merge-gateway 下为 text,image)直接胜出,video 消失——经一等 preset 附加视频给 Qwen 自家旗舰 Plus 家族会被静默替换成"不支持"占位符。最后一个提交修复了另一个 Critical(测试 hermeticity),但没有修这个;round 5 以来的差异就是那 2 行测试修复。两个建议修复(重新生成快照条目 / 目录对固定启发式只增不减)均未出现。这既是代码问题也是产品判断:models.dev 的按网关数据是否权威(接受回归、改固定启发式),还是目录只应在仓库固定能力之上叠加(在应用点做个小并集)?上游数据本身不一致——同一模型 id 在同一快照的另外四个网关里有 video——倾向只增不减,但这应由维护者和作者决定。

我不做批准。一位核心维护者已深度验证后批准了当前 head,我要明确说明:我的保留不是对那个判断的质疑——他的报告充分证实了核心声明,只是没有覆盖这个场景;round-5 引用 R5-17 的 CHANGES_REQUESTED 审查仍然挂在 PR 上(我刻意不再叠加一个 request-changes,门禁已生效)。合并需要以下之一:只增不减修复或快照重新生成,或维护者明确关闭 R5-17 并接受该取舍。

⏸️ 转交 @wenshao(您批准了当前 head——R5-17 是否在该判断之内,还是应由 @DragonnZhang 先落地只增不减修复?)这是唯一未决问题;PR 的其余部分状态良好。

Qwen Code · qwen3.8-max

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

@qwen-code-ci-bot

Copy link
Copy Markdown
Collaborator

Qwen Code review timed out. Qwen review timed out after 21600 seconds (of the 360-minute budget). This run already used the maximum 360 minute timeout. See workflow logs.

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Reviewed. Suggestions are inline. Not reviewed: chunk 2 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line not reviewable via line-paged reads; validated programmatically instead (JSON structure, model shapes, duplicate-api groups, spot-checked entries) — a line there exceeds the read limit. Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally. Not reviewed: reverse audit — stopped before round 4 by the review time budget. Test Plan (not a blocker): 286 passing — this review observed 17102, 19149 passed.

中文说明

已审查。 建议见行内评论。 未审查:chunk 2 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line not reviewable via line-paged reads; validated programmatically instead (JSON structure, model shapes, duplicate-api groups, spot-checked entries)——其中有一行超出单次读取上限。 未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally。 未审查:反向审计——评审时间预算不足,未能开始第 4 轮。 Test Plan(非阻断):286 passing — this review observed 17102, 19149 passed

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

Comment thread packages/core/src/models/model-metadata-catalog.test.ts
Comment thread packages/cli/src/config/config.ts
Comment thread packages/core/src/models/model-metadata-catalog.ts Outdated
Comment thread packages/core/src/models/model-metadata-catalog.ts
Comment thread packages/core/src/models/model-metadata-catalog.ts
Comment thread packages/core/src/providers/__tests__/presets/alibaba-token-plan.test.ts Outdated
Comment thread packages/core/src/models/modelsConfig.ts Outdated
Comment thread packages/core/src/models/model-metadata-catalog.ts
Comment thread scripts/generate-model-modality-snapshot.js Outdated
Comment thread packages/core/src/models/model-metadata-catalog.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.

Not reviewed: chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line exceeds the read limit; audited programmatically instead (JSON validity, zero duplicate keys, shape/vocabulary audit, endpoint/env cross-check against every CLI preset, blob-hash equivalence with the diff line).

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

Not reviewed: reverse audit — stopped at the 5-round cap: round 5 reported candidates (verified in the cap tail), so the two-consecutive-dry convergence certificate was not established.

Not explored to full depth (tool budget reached): "You are reviewing PR #8529 (QwenLM/qwen-code) — model…": none — the walk finished inside budget.; "You are reviewing PR #8529 (QwenLM/qwen-code) — model…": none — all checks above were completed within budget.; chunk 5: did not execute packages/core/src/models/model-metadata-catalog.test.ts — the review worktree and parent checkout have no node_modules , and a full monorepo …; "You are reviewing PR #8529 (QwenLM/qwen-code) — model…": none — all checks I intended completed within budget.; "You are reviewing PR #8529 (QwenLM/qwen-code) — model…": none — all planned checks completed within budget., and 18 more.

Test Plan (not a blocker): 286 passing — this review observed 19583, 20006, 1364, 1539, 494, 3502, 559 passed.

[Critical] R9-9 / R6-1 系列(重新核查结论:仍然成立):内置快照仍有约 671 个条目(约 93 个 provider)所列模态少于仓库固定启发式授予的模态——例如 openrouter/kilo/merge-gateway 下 qwen/qwen3.7-plus 缺少 video,alibaba/alibaba-cn 下 qwen-vl/qwen3-vl 系列缺少 video——ModelRegistry.resolveModelConfig 的 catalog 优先于启发式的优先级(modelRegistry.ts:354 附近)会应用这些变薄的条目,附件在 PR 之前可以正常发送的位置被替换为占位文本。已在被审 commit 上复验:快照内容与既有条目一致(qwen/qwen3.7-plus 在 openrouter 下仍为 ["text","image"])。作者已把设计决策(全局加法并集 vs 文档化的精确 catalog 优先级)升级给维护者,维护者深度验证(issue comment 5219981685)给出了 merge-ready 的建议性结论但未对该并集问题明确裁决;第 16 轮审查也以此状态留待确认。该缺陷的实质在被审 commit 上依然存在,等待维护者对设计方向的明确裁决。已在 modelRegistry.ts:354 的既有线程(评论 3747085928 / 3747085939)中跟踪,不重复锚定。

English: R9-9 / R6-1 family (re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (near modelRegistry.ts:354) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit: the snapshot still carries the thin entries. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep-verification (issue comment 5219981685) posted an advisory merge-ready verdict without an explicit ruling on the union question, and round 16 left this unresolved. The mechanism is verified present at this commit, awaiting an explicit maintainer design ruling. Tracked in the existing threads at modelRegistry.ts:354 (comments 3747085928 / 3747085939); not re-anchored.

中文说明

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

未审查:chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line exceeds the read limit; audited programmatically instead (JSON validity, zero duplicate keys, shape/vocabulary audit, endpoint/env cross-check against every CLI preset, blob-hash equivalence with the diff line)。

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

未审查:reverse audit — stopped at the 5-round cap: round 5 reported candidates (verified in the cap tail), so the two-consecutive-dry convergence certificate was not established。

未探索到全部深度(达到工具调用预算):"You are reviewing PR #8529 (QwenLM/qwen-code) — model…"none — the walk finished inside budget."You are reviewing PR #8529 (QwenLM/qwen-code) — model…"none — all checks above were completed within budget.;chunk 5:did not execute packages/core/src/models/model-metadata-catalog.test.ts — the review worktree and parent checkout have no node_modules , and a full monorepo …"You are reviewing PR #8529 (QwenLM/qwen-code) — model…"none — all checks I intended completed within budget."You are reviewing PR #8529 (QwenLM/qwen-code) — model…"none — all planned checks completed within budget.,另有 18 条。

Test Plan(非阻断):286 passing — this review observed 19583, 20006, 1364, 1539, 494, 3502, 559 passed

[Critical] R9-9 / R6-1 系列(重新核查结论:仍然成立):内置快照仍有约 671 个条目(约 93 个 provider)所列模态少于仓库固定启发式授予的模态——例如 openrouter/kilo/merge-gateway 下 qwen/qwen3.7-plus 缺少 video,alibaba/alibaba-cn 下 qwen-vl/qwen3-vl 系列缺少 video——ModelRegistry.resolveModelConfig 的 catalog 优先于启发式的优先级(modelRegistry.ts:354 附近)会应用这些变薄的条目,附件在 PR 之前可以正常发送的位置被替换为占位文本。已在被审 commit 上复验:快照内容与既有条目一致(qwen/qwen3.7-plus 在 openrouter 下仍为 ["text","image"])。作者已把设计决策(全局加法并集 vs 文档化的精确 catalog 优先级)升级给维护者,维护者深度验证(issue comment 5219981685)给出了 merge-ready 的建议性结论但未对该并集问题明确裁决;第 16 轮审查也以此状态留待确认。该缺陷的实质在被审 commit 上依然存在,等待维护者对设计方向的明确裁决。已在 modelRegistry.ts:354 的既有线程(评论 3747085928 / 3747085939)中跟踪,不重复锚定。

English: R9-9 / R6-1 family (re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (near modelRegistry.ts:354) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit: the snapshot still carries the thin entries. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep-verification (issue comment 5219981685) posted an advisory merge-ready verdict without an explicit ruling on the union question, and round 16 left this unresolved. The mechanism is verified present at this commit, awaiting an explicit maintainer design ruling. Tracked in the existing threads at modelRegistry.ts:354 (comments 3747085928 / 3747085939); not re-anchored.

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

Comment thread packages/core/src/models/modelsConfig.ts
Comment thread packages/core/src/providers/provider-config.ts
Comment thread packages/core/src/models/model-metadata-catalog.ts

@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: chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line exceeds the read limit; audited programmatically instead (JSON validity, 180 providers / 6,056 models, zero duplicate keys, shape audit against parseCatalog rules, generator byte-parity with the diff line, upstream-fidelity comparison) — a line there exceeds the read limit.

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

Test Plan (not a blocker): 286 passing — this review observed 19583, 20007, 1364, 1539, 494, 3502, 559 passed.

[Critical] R17-4 [Critical] R9-9 / R6-1 family (round-18 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (near modelRegistry.ts:354) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 614d330: the committed snapshot still carries the thin entries (alibaba/alibaba-cn qwen-vl-max = ["text","image"] vs the pinned /^qwen-vl-/ → {image, video}; openrouter qwen/qwen3.7-plus = ["text","image"] vs the pinned /^qwen3.7-plus/ → {image, video}) and the precedence line is unchanged. New round-18 evidence folded into this class (independently found by two reverse auditors): the coding-plan CN snapshot/template contradiction — the template pins {image, video} for qwen3.5-plus/kimi-k2.5 and the new coding-plan test asserts it, but the bundled alibaba-coding-plan-cn entry lists both as ["text","image"], and omitModelSpecModalities strips the template copy from persisted installs, so the CN catalog entry becomes the runtime decider where pre-PR the persisted template value won — video is silently lost for China-region installs. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep-verification posted an advisory merge-ready verdict without an explicit ruling on the union question, and rounds 16-17 left this unresolved. The mechanism is verified present at this commit, awaiting an explicit maintainer design ruling. Tracked in the existing threads at modelRegistry.ts:354 (comments 3747085928 / 3747085939); not re-anchored. | 中文:R9-9 / R6-1 系列(第 18 轮复核结论:仍然成立)。内置快照仍有约 671 个条目(约 93 个 provider)所列模态少于仓库固定启发式授予的模态,ModelRegistry.resolveModelConfig 的 catalog 优先于启发式的优先级会应用这些变薄的条目,附件在 PR 之前可以正常发送的位置被替换为占位文本。已在被审 commit 614d330 上复验。第 18 轮新证据(两位反向审计独立发现)并入本类:coding-plan 中国区快照/模板矛盾——模板固定 {image, video},而内置 alibaba-coding-plan-cn 条目为 ["text","image"],且 omitModelSpecModalities 从持久化安装中剥离模板副本,使中国区 catalog 条目成为运行时裁决者,中国区安装静默丢失 video。作者已把设计决策升级给维护者;维护者深度验证给出了 merge-ready 的建议性结论但未对并集问题明确裁决。等待维护者的明确设计裁决。

中文说明

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

未审查:chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line exceeds the read limit; audited programmatically instead (JSON validity, 180 providers / 6,056 models, zero duplicate keys, shape audit against parseCatalog rules, generator byte-parity with the diff line, upstream-fidelity comparison)——其中有一行超出单次读取上限。

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

Test Plan(非阻断):286 passing — this review observed 19583, 20007, 1364, 1539, 494, 3502, 559 passed

[Critical] R17-4 [Critical] R9-9 / R6-1 family (round-18 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (near modelRegistry.ts:354) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 614d330: the committed snapshot still carries the thin entries (alibaba/alibaba-cn qwen-vl-max = ["text","image"] vs the pinned /^qwen-vl-/ → {image, video}; openrouter qwen/qwen3.7-plus = ["text","image"] vs the pinned /^qwen3.7-plus/ → {image, video}) and the precedence line is unchanged. New round-18 evidence folded into this class (independently found by two reverse auditors): the coding-plan CN snapshot/template contradiction — the template pins {image, video} for qwen3.5-plus/kimi-k2.5 and the new coding-plan test asserts it, but the bundled alibaba-coding-plan-cn entry lists both as ["text","image"], and omitModelSpecModalities strips the template copy from persisted installs, so the CN catalog entry becomes the runtime decider where pre-PR the persisted template value won — video is silently lost for China-region installs. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep-verification posted an advisory merge-ready verdict without an explicit ruling on the union question, and rounds 16-17 left this unresolved. The mechanism is verified present at this commit, awaiting an explicit maintainer design ruling. Tracked in the existing threads at modelRegistry.ts:354 (comments 3747085928 / 3747085939); not re-anchored. | 中文:R9-9 / R6-1 系列(第 18 轮复核结论:仍然成立)。内置快照仍有约 671 个条目(约 93 个 provider)所列模态少于仓库固定启发式授予的模态,ModelRegistry.resolveModelConfig 的 catalog 优先于启发式的优先级会应用这些变薄的条目,附件在 PR 之前可以正常发送的位置被替换为占位文本。已在被审 commit 614d330 上复验。第 18 轮新证据(两位反向审计独立发现)并入本类:coding-plan 中国区快照/模板矛盾——模板固定 {image, video},而内置 alibaba-coding-plan-cn 条目为 ["text","image"],且 omitModelSpecModalities 从持久化安装中剥离模板副本,使中国区 catalog 条目成为运行时裁决者,中国区安装静默丢失 video。作者已把设计决策升级给维护者;维护者深度验证给出了 merge-ready 的建议性结论但未对并集问题明确裁决。等待维护者的明确设计裁决。

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

Comment thread packages/core/src/models/modelsConfig.ts
Comment thread packages/core/src/models/modelsConfig.test.ts
Comment thread packages/core/src/providers/provider-config.ts
Comment thread packages/core/src/models/model-metadata-catalog.ts

@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: chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line exceeds the read limit; audited programmatically instead (JSON validity, 180 providers / 6,056 models, zero duplicate keys, shape audit, heuristic cross-check) — a line there exceeds the read limit.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally (workspace unit builds/tests ran; all test failures measured pre-existing via base-tree delta).

Not explored to full depth (tool budget reached): "agent reverse-audit (round 4)": none — no check was cut short by the tool ceiling.; "agent reverse-audit (round 2)": none — no check was cut short..

Test Plan (not a blocker): 286 passing — this review observed 19583, 1364, 1539, 494, 3502, 559 passed.

[Critical] R17-4 (R9-9 / R6-1 family; round-19 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (near modelRegistry.ts:354) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit aeb4c42 (programmatic sweep of the committed snapshot; the precedence line is unchanged; live models.dev carries the same gaps, so the hourly background refresh never corrects them). Round 18 folded the coding-plan CN snapshot/template contradiction into this class (template pins {image, video} for qwen3.5-plus/kimi-k2.5 while the bundled alibaba-coding-plan-cn entry is ["text","image"] and omitModelSpecModalities strips the template copy from persisted installs); that contradiction also remains. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification (issue comment 5219981685) posted an advisory merge-ready verdict without an explicit ruling on the union question. Disposition requires an explicit maintainer design ruling; if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354 (comments 3747085928 / 3747085939); not re-anchored inline. 中文说明:R9-9 / R6-1 系列(第 19 轮复核结论:仍然成立)。内置快照仍有约 671 个条目(约 93 个 provider)所列模态少于仓库固定启发式授予的模态,catalog 优先于启发式的优先级会应用这些变薄的条目,附件在 PR 之前可以正常发送的位置被替换为占位文本。已在被审 commit aeb4c42 上复验。作者已把设计决策(全局加法并集 vs 文档化的精确 catalog 优先级)升级给维护者;维护者深度验证给出了 merge-ready 的建议性结论但未对并集问题明确裁决。等待维护者的明确设计裁决;若接受文档化的精确 catalog 优先级,请明确说明,本类即可关闭。

中文说明

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

未审查:chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — single 255,602-char line exceeds the read limit; audited programmatically instead (JSON validity, 180 providers / 6,056 models, zero duplicate keys, shape audit, heuristic cross-check)——其中有一行超出单次读取上限。

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally (workspace unit builds/tests ran; all test failures measured pre-existing via base-tree delta)。

未探索到全部深度(达到工具调用预算):"agent reverse-audit (round 4)"none — no check was cut short by the tool ceiling."agent reverse-audit (round 2)"none — no check was cut short.

Test Plan(非阻断):286 passing — this review observed 19583, 1364, 1539, 494, 3502, 559 passed

[Critical] R17-4 (R9-9 / R6-1 family; round-19 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (near modelRegistry.ts:354) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit aeb4c42 (programmatic sweep of the committed snapshot; the precedence line is unchanged; live models.dev carries the same gaps, so the hourly background refresh never corrects them). Round 18 folded the coding-plan CN snapshot/template contradiction into this class (template pins {image, video} for qwen3.5-plus/kimi-k2.5 while the bundled alibaba-coding-plan-cn entry is ["text","image"] and omitModelSpecModalities strips the template copy from persisted installs); that contradiction also remains. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification (issue comment 5219981685) posted an advisory merge-ready verdict without an explicit ruling on the union question. Disposition requires an explicit maintainer design ruling; if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354 (comments 3747085928 / 3747085939); not re-anchored inline. 中文说明:R9-9 / R6-1 系列(第 19 轮复核结论:仍然成立)。内置快照仍有约 671 个条目(约 93 个 provider)所列模态少于仓库固定启发式授予的模态,catalog 优先于启发式的优先级会应用这些变薄的条目,附件在 PR 之前可以正常发送的位置被替换为占位文本。已在被审 commit aeb4c42 上复验。作者已把设计决策(全局加法并集 vs 文档化的精确 catalog 优先级)升级给维护者;维护者深度验证给出了 merge-ready 的建议性结论但未对并集问题明确裁决。等待维护者的明确设计裁决;若接受文档化的精确 catalog 优先级,请明确说明,本类即可关闭。

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

Comment thread packages/core/src/models/model-metadata-catalog.ts Outdated
Comment thread packages/core/src/models/modelsConfig.ts

@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: chunk 3 (packages/core/src/models/generated/models-dev-modalities.json) — a line there exceeds the read limit.

Not reviewed: build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally (workspace unit builds/tests ran green; all observed unit failures measured pre-existing via base-tree + test-delta).

Not explored to full depth (tool budget reached): chunk 5: none.All 79 tests pass. I've completed my review of this chunk. Here is my report..

Test Plan (not a blocker): 286 passing — this review observed 19583, 20010, 1364, 1539, 494, 3502, 559 passed.

[Critical] R19-3 (R17-4 / R9-9 / R6-1 family; round-20 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway while sibling qwen/qwen3.7-flash and first-party alibaba qwen3.7-plus carry it; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn loses video; abacus/claude-opus-4-8 loses pdf vs the pinned /^claude-/ -> {image, pdf}), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 7c3860d by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671/93 census reproduced) and by a real ModelRegistry probe (qwen-vl-max resolves {image} source 'catalog' where the pre-PR heuristic gave {image, video}; openrouter qwen/qwen3.7-plus likewise); live models.dev (fetched 2026-08-15) carries the same gaps, so the hourly background refresh never corrects them. The coding-plan CN contradiction folded into this class in round 18 also remains: omitModelSpecModalities strips the curated {image, video} from persisted installs while the bundled alibaba-coding-plan-cn entries for qwen3.5-plus/kimi-k2.5 are ['text','image'], so China-region fresh installs lose video via the same precedence. Round-19 ledger rulings: R19-1 (prototype-backed bundled snapshot) and R19-2 (settings-sourced endpoints excluded from the seeding gate) are fixed at this head — null-prototype top-level copy with a real-snapshot regression, and provider identity carried out-of-band with catalog re-lookup on auth sync, each with regressions that fail on the previous head. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification posted an advisory merge-ready verdict without an explicit ruling on the union question. Disposition requires an explicit maintainer design ruling; if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:359 (comments 3747085928 / 3747085939); not re-anchored inline.

中文说明

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

未审查:chunk 3 (packages/core/src/models/generated/models-dev-modalities.json)——其中有一行超出单次读取上限。

未审查:build-and-test — Integration Tests (CLI, No Sandbox) was skipped in CI and its suite did not run locally (workspace unit builds/tests ran green; all observed unit failures measured pre-existing via base-tree + test-delta)。

未探索到全部深度(达到工具调用预算):chunk 5:none.All 79 tests pass. I've completed my review of this chunk. Here is my report.

Test Plan(非阻断):286 passing — this review observed 19583, 20010, 1364, 1539, 494, 3502, 559 passed

[Critical] R19-3 (R17-4 / R9-9 / R6-1 family; round-20 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics for ~671 entries across ~93 providers (e.g. qwen/qwen3.7-plus loses video under openrouter/kilo/merge-gateway while sibling qwen/qwen3.7-flash and first-party alibaba qwen3.7-plus carry it; the qwen-vl/qwen3-vl family under alibaba/alibaba-cn loses video; abacus/claude-opus-4-8 loses pdf vs the pinned /^claude-/ -> {image, pdf}), and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 7c3860d by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671/93 census reproduced) and by a real ModelRegistry probe (qwen-vl-max resolves {image} source 'catalog' where the pre-PR heuristic gave {image, video}; openrouter qwen/qwen3.7-plus likewise); live models.dev (fetched 2026-08-15) carries the same gaps, so the hourly background refresh never corrects them. The coding-plan CN contradiction folded into this class in round 18 also remains: omitModelSpecModalities strips the curated {image, video} from persisted installs while the bundled alibaba-coding-plan-cn entries for qwen3.5-plus/kimi-k2.5 are ['text','image'], so China-region fresh installs lose video via the same precedence. Round-19 ledger rulings: R19-1 (prototype-backed bundled snapshot) and R19-2 (settings-sourced endpoints excluded from the seeding gate) are fixed at this head — null-prototype top-level copy with a real-snapshot regression, and provider identity carried out-of-band with catalog re-lookup on auth sync, each with regressions that fail on the previous head. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification posted an advisory merge-ready verdict without an explicit ruling on the union question. Disposition requires an explicit maintainer design ruling; if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:359 (comments 3747085928 / 3747085939); not re-anchored inline.

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

Comment thread packages/core/src/models/model-metadata-catalog.ts
Comment thread packages/core/src/models/model-metadata-catalog.test.ts
Comment thread scripts/tests/generate-model-modality-snapshot.test.js
Comment thread scripts/tests/generate-model-modality-snapshot.test.js
@qwen-code-dev-bot qwen-code-dev-bot added the autofix/needs-human The autofix loop stopped on this PR — a human must re-arm, split, merge, or close it label Aug 15, 2026
@qwen-code-dev-bot

Copy link
Copy Markdown
Collaborator

🔓 Takeover auto-released: the autofix loop paused on this PR 4 day(s) ago (🤖 AutoFix stopped: this counting window now contains 3 time-budget exhaustions (pushed rounds in between included; this ) and no re-arm followed, so the autofix/takeover label is removed to keep the managed pool honest. autofix/needs-human stays as the reminder that this PR needs a human decision: merge it, close it, or split/reduce it and comment @qwen-code /takeover to re-engage with a fresh round window.

中文说明

🔓 已自动释放接管:autofix 循环在 4 天前暂停于此 PR(🤖 AutoFix stopped: this counting window now contains 3 time-budget exhaustions (pushed rounds in between included; this ),此后无人重新武装,现移除 autofix/takeover 标签以保持托管池真实可用。保留 autofix/needs-human 作为待办提醒 —— 本 PR 需要人工决策:合并、关闭,或拆分/缩小后评论 @qwen-code /takeover 以全新轮次窗口重新接管。

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

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

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Partially reviewed — gaps disclosed.

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

  • R21-11 residue heuristic re-persisting old-spec modalities on every update — already reported (threads 3729250165 / 3735217288, author acknowledged and deferred under late-round policy)

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

Not explored to full depth (tool budget reached): chunk 6: none — no checks were cut short.; chunk 5: executing model-metadata-catalog.test.ts to confirm the traced paths (worktree lacks packages/core/dist ; the vitest guard requires a full repo build first) ….

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

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

  • packages/core/src/models/model-metadata-catalog.test.ts:919 — [probe] no test replays the motivating thinkingmachines/inkling failure shape against the bundled snapshot
  • docs/design/model-modality-catalog.md:38 — [review] design doc contradicts shipped template behavior (templates keep modalities; only new installs omit them)
  • packages/core/src/models/modelsConfig.ts:170 — [probe] the initialDefaultBaseUrl seeding gate's env disjunct is mutation-invisible
  • packages/core/src/models/modelsConfig.ts:839 — [probe] updateCredentials with a model but no baseUrl clears endpoint evidence before catalog re-derivation
  • packages/cli/src/serve/workspace-providers-status.ts:91 — [review] the four env-proxy disjuncts feeding proxyUrl are mutation-invisible
  • packages/core/src/models/model-metadata-catalog.ts:82 — [probe] builtInCatalog bypasses parseCatalog validation while the generator copies upstream arrays verbatim
  • packages/core/src/models/model-metadata-catalog.ts:145 — [probe] empty modality arrays pass validation and {} suppresses the heuristic as authoritative
  • packages/core/src/models/model-metadata-catalog.test.ts:355 — [probe] normalizeUrl's case-folding is mutation-invisible in the endpoint table
  • packages/core/src/models/model-metadata-catalog.ts:536 — [review] R20-1 still stands — Idealab alias rewrites are mutually exclusive (if/else-if), a combined bailian/-dogfooding id misses the catalog
  • packages/core/src/models/model-metadata-catalog.test.ts:1066 — [review] R20-2 still stands — streamed-body size-cap test enqueues the body as a single chunk
  • scripts/tests/generate-model-modality-snapshot.test.js:11 — [review] R20-3 still stands — no test pins buildSnapshot's deterministic sorted output
  • scripts/tests/generate-model-modality-snapshot.test.js:22 — [review] R20-5 still stands — no test pins buildSnapshot's filtering of malformed api/env fields

[Critical] R20-4 (R19-3 / R17-4 / R9-9 / R6-1 family; round-21 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 0682ac3 by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671/93 census reproduced) and spot checks (openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ → {image, video}; alibaba qwen-vl-max = ['text','image'] vs the pinned /^qwen-vl-/ → {image, video}; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while the preset spec and the intl sibling carry video); live models.dev carries the same gaps, so the hourly background refresh never corrects them. Round-21 evidence folded into this class (independently rediscovered by three reverse auditors): the coding-plan CN contradiction — omitModelSpecModalities strips the curated {image, video} from persisted installs while the bundled alibaba-coding-plan-cn entries for qwen3.5-plus/kimi-k2.5 are ['text','image'], so China-region fresh installs lose video via the same precedence. Round-21 ledger rulings: R20-1 (Idealab else-if alias) still stands; R20-2/R20-3/R20-5 (test-hardening) still stand and are deferred under the late-round posture. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification posted an advisory merge-ready verdict without an explicit ruling on the union question. Disposition requires an explicit maintainer design ruling; if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:359 (comments 3747085928 / 3747085939); not re-anchored inline.

中文说明

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

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

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

未探索到全部深度(达到工具调用预算):chunk 6:none — no checks were cut short.;chunk 5:executing model-metadata-catalog.test.ts to confirm the traced paths (worktree lacks packages/core/dist ; the vitest guard requires a full repo build first) …

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

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

[Critical] R20-4 (R19-3 / R17-4 / R9-9 / R6-1 family; round-21 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 0682ac3 by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671/93 census reproduced) and spot checks (openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ → {image, video}; alibaba qwen-vl-max = ['text','image'] vs the pinned /^qwen-vl-/ → {image, video}; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while the preset spec and the intl sibling carry video); live models.dev carries the same gaps, so the hourly background refresh never corrects them. Round-21 evidence folded into this class (independently rediscovered by three reverse auditors): the coding-plan CN contradiction — omitModelSpecModalities strips the curated {image, video} from persisted installs while the bundled alibaba-coding-plan-cn entries for qwen3.5-plus/kimi-k2.5 are ['text','image'], so China-region fresh installs lose video via the same precedence. Round-21 ledger rulings: R20-1 (Idealab else-if alias) still stands; R20-2/R20-3/R20-5 (test-hardening) still stand and are deferred under the late-round posture. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification posted an advisory merge-ready verdict without an explicit ruling on the union question. Disposition requires an explicit maintainer design ruling; if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:359 (comments 3747085928 / 3747085939); not re-anchored inline.

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

Comment thread packages/core/src/models/model-metadata-catalog.ts
Comment thread packages/cli/src/serve/workspace-providers-status.ts Outdated
Comment thread packages/core/src/models/modelsConfig.ts
- Ignore the Qwen OAuth placeholder baseUrl as provider evidence in the
  catalog lookup so it no longer suppresses the 'qwen-oauth' → 'alibaba'
  protocol fallback; catalog modalities now resolve for real Qwen OAuth
  sessions on both the registry and raw setModel paths.
- Source the serve workspace-status test-runner gate from the daemon's
  own process env, mirroring the CLI path, so a project .env carrying
  NODE_ENV=test no longer silently disables the catalog for production
  serve status while live sessions keep it.
- Align raw setModel with registry switchModel: a modalities value
  without a recorded source is caller-declared, not model-derived, so
  both switch paths preserve it.
@DragonnZhang

Copy link
Copy Markdown
Collaborator Author

The three round-21 Criticals are fixed in 9c8bed2e1d. Per the ~5-review-round policy this PR is past round 21, so this push lands Criticals only; the R19-3/R20-4 family still awaits the explicit maintainer design ruling, and R20-1 / R20-2/3/5 / R21-11 remain deferred under the late-round posture, untouched here.

R21-6 — the Qwen OAuth placeholder no longer counts as provider evidence

resolveCatalogProviderId normalizes the sentinel to undefined before endpoint matching, named as QWEN_OAUTH_PLACEHOLDER_BASE_URL with a why-comment. Because the normalization sits at the single choke point both callers flow through, it fixes the registry path (resolveModelConfig passes resolvedBaseUrl) and the raw path (applyRawModelDerivedDefaults passes _generationConfig.baseUrl, which startup auth sync stamps with the sentinel) at once. The pinned "an unknown OpenAI-compatible endpoint is not OpenAI" behaviour is untouched and its test stays green. New catalog test replays the exact registry shape {authType: 'qwen-oauth', modelId: 'qwen3-omni-flash', baseUrl: 'DYNAMIC_QWEN_OAUTH_BASE_URL'} and asserts {image, audio, video} resolves from the alibaba mapping. Mutation-verified: reverting the normalization fails the test with expected undefined to deeply equal { image: true, audio: true, video: true }.

R21-10 — test-runner detection now reads the daemon's own process env

The serve-status gate reads process.env['NODE_ENV' / 'VITEST' / 'VITEST_WORKER_ID'] directly, exactly mirroring the CLI path, instead of the workspace effective env. A project .env carrying NODE_ENV=test can therefore no longer disable the catalog for production serve status while live sessions keep it — the exact mismatch the design doc forbids. The workspace effective env remains the input for auth/config resolution and proxy variables only. The two gate tests were rewritten to pin the new source (one now proves the flip: process env carries VITEST_WORKER_ID while workspace env says production), plus the required new test that the catalog stays enabled when only the workspace env carries NODE_ENV=test. Mutation-verified: reverting the gate to the workspace env fails with expected "spy" to be called once, but got 0 times.

R21-15 — raw setModel and registry switchModel now classify modalities identically

shouldUpdateModelDerivedDefault vetoes for modalities when hasExplicitModalities() is true, so a source-undefined value is caller-declared and survives both switch paths — the direction consistent with the PR's own "model-id rules never override an explicit user value" intent. contextWindowSize classification is unchanged. New paired test starts from {audio: true} with no source map and asserts both a raw setModel and a registry switchModel preserve it. Mutation-verified: removing the veto fails the raw arm with expected {} to deeply equal { audio: true }.

One deliberate side nuance of the mirror: modalities carrying kind: 'programmatic' would also be preserved on raw switches now. No production code sets a modalities source to programmatic (grep-verified — that kind is only used for model/apiKey/baseUrl fields), and it matches how the applyResolvedModelDefaults skip guard already treats it.

Verification

  • core src/models/ full directory: 6 files, 345 passed; cli workspace-providers-status.test.ts: 23 passed — independently re-run at the committed state.
  • npm run typecheck exit 0; eslint --max-warnings 0 and prettier clean on all six touched files; pre-commit hook ran.
  • Honest limits: R21-6 and R21-10 are verified by unit tests replaying the exact shapes from the reviewer's probes, not by a live Qwen OAuth session or a real daemon against a NODE_ENV=test project.

第 21 轮的三个 Critical 已在 9c8bed2e1d 修复。按 ~5 轮规则本 PR 已过第 21 轮,本次只落 Critical;R19-3/R20-4 家族仍等待维护者的显式设计裁决,R20-1、R20-2/3/5、R21-11 按后期姿态保持延后,本次均未触碰。

R21-6resolveCatalogProviderId 在端点匹配前把哨兵归一化为 undefined,命名为 QWEN_OAUTH_PLACEHOLDER_BASE_URL 并附 why 注释。归一化位于两条调用路径共同的咽喉点,因此同时修掉 registry 路径(resolveModelConfigresolvedBaseUrl)与 raw 路径(applyRawModelDerivedDefaults 传被启动 auth sync 盖上哨兵的 _generationConfig.baseUrl)。"未知 OpenAI 兼容端点不是 OpenAI" 的既有行为未动、其测试保持绿。新测试按 registry 形状原样回放并断言从 alibaba 映射解析出 {image, audio, video};变异验证:撤掉归一化后测试以 expected undefined to deeply equal { image: true, audio: true, video: true } 失败。

R21-10:serve-status 门控改为直接读 process.env,与 CLI 路径完全镜像,不再读 workspace effective env。项目 .env 里的 NODE_ENV=test 从此无法在生产 serve status 中禁用 catalog 而 live session 却保留——正是设计文档禁止的错位。workspace effective env 仍只作为 auth/config 解析与代理变量的输入。两个门控测试重写以钉住新来源(其一证明翻转:process env 带 VITEST_WORKER_ID 而 workspace env 声称生产),并新增要求的测试:仅 workspace env 带 NODE_ENV=test 时 catalog 保持启用;变异验证通过。

R21-15shouldUpdateModelDerivedDefaulthasExplicitModalities() 为真时对 modalities 否决,使无 source 的值被视为调用方声明、在两条 switch 路径都存活——与 PR 自身"model-id 规则永不覆盖显式用户值"的意图一致的方向。contextWindowSize 分类不变。新配对测试从无 source map 的 {audio: true} 出发,断言 raw setModel 与 registry switchModel 都保留;变异验证:移除否决后 raw 臂以 expected {} to deeply equal { audio: true } 失败。镜像的一个刻意副作用:带 kind: 'programmatic' 的 modalities 现在也会在 raw 切换中保留——生产代码从不把 modalities source 设为 programmatic(grep 证实该 kind 只用于 model/apiKey/baseUrl 字段),且与 applyResolvedModelDefaults 跳过守卫的既有处理一致。

验证:core src/models/ 全目录 6 文件 345 通过;cli workspace-providers-status.test.ts 23 通过——均在提交状态独立复跑。typecheck 退出码 0;六个改动文件 eslint --max-warnings 0 与 prettier 干净;pre-commit 钩子已运行。诚实限制:R21-6 与 R21-10 由回放 reviewer 探针形状的单元测试验证,未经真实 Qwen OAuth 会话或对着 NODE_ENV=test 项目的真实 daemon 验证。

# Conflicts:
#	packages/core/src/providers/__tests__/presets/alibaba-token-plan.test.ts
The workspace providers status builder gates the model metadata catalog
fetch on the daemon's own process env, mirroring the CLI path, so a
project .env carrying NODE_ENV=test cannot disable the catalog for one
workspace while live sessions keep it. Register that process-scoped
access in the serve process.env guard allowlist with its reason.
@DragonnZhang

Copy link
Copy Markdown
Collaborator Author

Review round 21 wrap-up: 3 Criticals closed, 37 Suggestions deferred

Per AGENTS.md ("Don't let review rounds balloon the PR" — once a PR has been through roughly 5 review rounds, land only Critical fixes and defer remaining Suggestions to a follow-up, recording each deferral so nothing is silently dropped), this PR is at R21. From here it lands Critical fixes only.

Criticals — all 3 closed and resolved

Re-counted with pagination: 148 review threads, 40 unresolved → 3 Critical + 37 Suggestion. All 3 Criticals were already addressed at HEAD (bba7c72) by 9c8bed2e1d, which was pushed after R21 was posted — that is why all three still read as unresolved with no author reply. Each has been verified against HEAD, replied to with evidence, and resolved:

Finding File Verdict
R21-6 model-metadata-catalog.ts Fixed — sentinel baseUrl normalized to undefined before the provider-evidence gate; test mutation-verified as load-bearing
R21-10 serve/workspace-providers-status.ts Already fixed (primary suggestion). The thread's alternative — gate on VITEST/VITEST_WORKER_ID alone — is stale and must not be applied: it drops the NODE_ENV arm the CLI path still has and fails the serve process.env guard test. Evidence in-thread.
R21-15 modelsConfig.ts Fixed — shouldUpdateModelDerivedDefault mirrors hasExplicitModalities, so both switch paths preserve caller-declared modalities; test mutation-verified

Verification at bba7c72 (no new commit needed; the tree is unchanged):

cd packages/core && npx vitest run src/providers/__tests__/ src/models/     → 493 passed (20 files)
cd packages/cli  && npx vitest run src/serve/workspace-providers-status.test.ts \
                                   src/serve/process-env-guard.test.ts      →  26 passed (2 files)

Suggestions — 37 deferred

Grouped by file, with round tags (* = GitHub-outdated anchor):

# File Findings
13 core/src/models/model-metadata-catalog.ts R8-1, R9-2, R9-4, R12-5, R12-6, R14-2, R15-2, R15-4, R17-3 ×2, R20-1, +2 untagged
4 core/src/models/model-metadata-catalog.test.ts R9-7, R12-4, R20-2, +1 untagged
4 core/src/models/modelsConfig.ts R15-1, R15-5, R15-7, +1 untagged
4 core/src/providers/provider-config.ts R14-1, R17-2 ×2, +1 untagged
3 scripts/generate-model-modality-snapshot.js R15-8, +2 untagged
2 core/src/models/modelsConfig.test.ts R11-6, +1 untagged
2 scripts/tests/generate-model-modality-snapshot.test.js R20-3, R20-5
1 cli/src/config/config.ts R15-3
1 core/src/models/index.ts R9-8
1 core/src/providers/__tests__/presets/alibaba-coding-plan.test.ts untagged
1 core/src/providers/__tests__/presets/alibaba-token-plan.test.ts untagged
1 core/src/providers/__tests__/provider-config.test.ts R12-3

Two worth naming explicitly, because both still stand at bba7c72 and both are test-only — no production behavior is at risk:

  • alibaba-token-plan.test.ts:102 — asks for expect(plan.modelProviders).toHaveLength(1), because asserting toMatchObject on element [0] dropped the "exactly one provider entry" guarantee the previous whole-array assertion carried.
  • alibaba-coding-plan.test.ts:50 — the exact twin of the above, same modelProviders?.[0] / toMatchObject shape.

Both are genuine tightenings of test strictness and are good follow-up material; neither is a correctness defect in shipped code, so both are deferred rather than fixed here.

The bulk of the remaining 37 are docs/naming polish, extra test pins for already-covered behavior, and refactor suggestions on the catalog lookup helper. They are left unresolved on purpose so they stay visible for a follow-up PR.

Note: resolving the three Critical threads does not clear the review bot's standing CHANGES_REQUESTED, so mergeStateStatus may remain BLOCKED until a maintainer re-reviews.

中文说明

依据 AGENTS.md("不要让 review 轮次撑大 PR"——约 5 轮之后只落 Critical 修复,其余 Suggestion 延后并记录,避免被静默丢弃),本 PR 已到 R21,此后仅落 Critical。

分页重新统计:148 条 review thread,40 条未解决 → 3 条 Critical + 37 条 Suggestion。3 条 Critical 在 HEAD (bba7c72) 上均已由 9c8bed2e1d 修复,该提交在 R21 之后推送,因此三条仍显示未解决且无作者回复。已逐条对照 HEAD 验证、附证据回复并关闭。其中 R21-10 的备选方案已失效,不可采用(详见该 thread)。

37 条 Suggestion 按文件分组如上表,全部延后到后续 PR,并特意保持未解决状态以便追踪。其中两条点名说明:alibaba-token-plan.test.ts:102 与其孪生的 alibaba-coding-plan.test.ts:50,均要求补回 toHaveLength(1)(因改用 toMatchObject 断言 [0] 后丢失了"恰好一个 provider 条目"的保证)。两者都是纯测试严格性问题,不涉及已发布代码的正确性,故延后处理。

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

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

  • useProviderUpdates residue heuristic re-persisting future-spec-changed modalities — already reported as R21-11 (threads 3729250165 / 3735217288), author acknowledged and deferred under the late-round policy
  • initialDefaultBaseUrl env-disjunct mutation-invisible test gap — already reported and deferred in round 21 (modelsConfig.ts:170)
  • updateCredentials model re-derivation path lacks a discriminating test — already reported as R4-5 (comments 3735217274 / 3736862040), author acknowledged

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

Not reviewed: reverse audit — reached the round cap of 3 without converging (round 3 still reported new findings).

Test Plan (not a blocker): 286 passing — this review observed 21953, 20676, 1590, 1598, 494, 3784, 540 passed.

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

  • packages/core/src/models/model-metadata-catalog.ts:33 — [review] Qwen OAuth placeholder sentinel triplicated as bare literals (catalog constant, modelRegistry.ts:105 stamping side, test pin at model-metadata-catalog.test.ts:286) — consolida…
  • scripts/generate-model-modality-snapshot.js:33 — [probe] 6,028 dead 'text' tokens ≈ 24.6% of the committed snapshot / ~39KB of the shipped bundle — filter at generation, keep empty arrays as text-only evidence
  • scripts/generate-model-modality-snapshot.js:57 — [review] snapshot generator fetch has no timeout while the runtime fetch of the identical URL caps at 10s — add AbortSignal.timeout
  • scripts/generate-model-modality-snapshot.js:67 — [probe] main() guard string-compares a symlinked argv[1] against a realpath — silent no-op with exit 0 under symlinked invocation paths; compare realpaths

[Critical] R21-1 [Critical] R20-4 (R19-3 / R17-4 / R9-9 / R6-1 family; round-22 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit bba7c72 by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671 entries / 93 providers reproduced) and spot checks (openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ → {image, video}; alibaba qwen-vl-max = ['text','image'] vs the pinned /^qwen-vl-/ → {image, video}; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while the preset spec and the intl sibling carry video); live models.dev carries the same gaps, so the hourly background refresh never corrects them. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; disposition requires an explicit maintainer design ruling — if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354/359 (comments 3747085928 / 3747085939); not re-anchored inline.

中文说明

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

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

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

未审查:reverse audit — reached the round cap of 3 without converging (round 3 still reported new findings)。

Test Plan(非阻断):286 passing — this review observed 21953, 20676, 1590, 1598, 494, 3784, 540 passed

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

[Critical] R21-1 [Critical] R20-4 (R19-3 / R17-4 / R9-9 / R6-1 family; round-22 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit bba7c72 by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671 entries / 93 providers reproduced) and spot checks (openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ → {image, video}; alibaba qwen-vl-max = ['text','image'] vs the pinned /^qwen-vl-/ → {image, video}; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while the preset spec and the intl sibling carry video); live models.dev carries the same gaps, so the hourly background refresh never corrects them. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; disposition requires an explicit maintainer design ruling — if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354/359 (comments 3747085928 / 3747085939); not re-anchored inline.

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

Comment thread packages/core/src/models/model-metadata-catalog.ts Outdated
Comment thread packages/core/src/models/modelRegistry.ts
Comment thread packages/cli/src/serve/workspace-providers-status.ts Outdated
…st-runner gate

- R22-1: replace the hand-maintained OPENROUTER_VARIANT_SUFFIX enumeration
  with a generic base-id fallback after the last ':'. The list missed
  :batch — the most common OpenRouter variant — so those models resolved
  text-only and image/pdf attachments were placeholder-replaced. Exact
  match stays first so explicit variant entries still win.
- R22-4: evaluate the daemon-side test-runner gate against a boot-time env
  snapshot instead of live process.env. Sibling loadSettings -> loadEnvironment
  calls merge a trusted workspace's .env into the daemon process.env, so a
  workspace carrying NODE_ENV=test would otherwise disable the catalog
  daemon-wide for the process's lifetime. createServeApp passes the frozen
  daemonEnvAtBoot; a processEnv option allows injection.

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

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

  • useProviderUpdates residue heuristic re-persisting future-spec-changed modalities (useProviderUpdates.ts:292) — already reported as R21-11 (threads 3729250165 / 3735217288), author acknowledged and deferred under the late-round policy
  • snapshot generator fetch has no proxy handling and no timeout (scripts/generate-model-modality-snapshot.js:57) — already reported (comment 3757556422) and deferred in round 22

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

Not reviewed: reverse audit — reached the round cap of 3 without converging (round 3 still reported new findings).

Test Plan (not a blocker): 286 passing — this review observed 20677, 1590, 1598, 494, 3784, 540 passed.

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

  • packages/cli/src/serve/workspace-providers-status.ts:116 — [review] proxy || chain treats an explicitly-empty HTTPS_PROXY="" as absent, contradicting the readProxyVar ?? convention in the same directory
  • packages/cli/src/serve/server.ts:1139 — [review] the only production wiring of the boot-time gate (processEnv: daemonEnvAtBoot) has no test gating — deleting it keeps every test green
  • packages/cli/src/serve/workspace-providers-status.ts:119 — [review] of the five proxy sources in the new chain only settings.proxy is tested; the four env-var fallbacks and their precedence are untested
  • docs/design/model-modality-catalog.md:67 (+2 locations) — [review] design doc contradicts shipped behavior: unknown OpenRouter suffixes 'remain unmatched' vs any-suffix base fallback; idealab family enumeration omits GLM while the code rout…

[Critical] R21-1 (R20-4 / R19-3 / R17-4 / R9-9 / R7-1 / R6-1 family; round-23 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit dce920e by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (~671 entries / ~93 providers reproduced) and spot checks: openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ -> {image, video}; the qwen-vl family (12 entries across alibaba/alibaba-cn) loses video vs pinned /^qwen-vl-/ and /^qwen3-vl-/; abacus claude-opus-4-8 loses pdf vs the pinned {image, pdf}; 302ai gemini-2.5-flash is thin vs pinned FULL_MULTIMODAL; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while the preset spec, the intl sibling entry and the heuristics all carry video (reverse-audit rounds 1-2 independently re-executed this instance through getCatalogModalities: CN endpoint -> {"image":true}, intl endpoint -> {"image":true,"video":true}; fresh Coding Plan installs on the default China endpoint therefore lose video input while the template still advertises it). No additive-union logic exists anywhere in packages/core/src/models, and live models.dev carries the same gaps, so the hourly background refresh never corrects them. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; disposition requires an explicit maintainer design ruling — if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354/359 (comments 3747085928 / 3747085939); not re-anchored inline. Witness: sweep of committed snapshot at dce920e, real defaultModalities as oracle — ~671 thin entries / ~93 providers; probes quoted above.

中文说明

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

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

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

未审查:reverse audit — reached the round cap of 3 without converging (round 3 still reported new findings)。

Test Plan(非阻断):286 passing — this review observed 20677, 1590, 1598, 494, 3784, 540 passed

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

[Critical] R21-1 (R20-4 / R19-3 / R17-4 / R9-9 / R7-1 / R6-1 family; round-23 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit dce920e by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (~671 entries / ~93 providers reproduced) and spot checks: openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ -> {image, video}; the qwen-vl family (12 entries across alibaba/alibaba-cn) loses video vs pinned /^qwen-vl-/ and /^qwen3-vl-/; abacus claude-opus-4-8 loses pdf vs the pinned {image, pdf}; 302ai gemini-2.5-flash is thin vs pinned FULL_MULTIMODAL; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while the preset spec, the intl sibling entry and the heuristics all carry video (reverse-audit rounds 1-2 independently re-executed this instance through getCatalogModalities: CN endpoint -> {"image":true}, intl endpoint -> {"image":true,"video":true}; fresh Coding Plan installs on the default China endpoint therefore lose video input while the template still advertises it). No additive-union logic exists anywhere in packages/core/src/models, and live models.dev carries the same gaps, so the hourly background refresh never corrects them. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; disposition requires an explicit maintainer design ruling — if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354/359 (comments 3747085928 / 3747085939); not re-anchored inline. Witness: sweep of committed snapshot at dce920e, real defaultModalities as oracle — ~671 thin entries / ~93 providers; probes quoted above.

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

Comment thread packages/cli/src/serve/process-env-guard.test.ts Outdated
Comment thread packages/cli/src/config/config.ts Outdated
Comment thread packages/core/src/models/modelRegistry.ts
DragonnZhang and others added 3 commits August 20, 2026 14:53
A trusted workspace .env with NODE_ENV=test merged by loadSettings →
loadEnvironment flipped the session-side catalog gate after launch,
degrading modality resolution for live sessions while the daemon
workspace-status path (gated on the boot env) kept the catalog — the
status/session mismatch the design doc forbids.

Evaluate the config.ts gate against a frozen process-launch snapshot
(environment.ts) instead of live process.env, pass the daemon boot env
to the runtime-scoped workspace-providers-status providers in
run-qwen-serve.ts (mirroring server.ts daemonEnvAtBoot), and drop the
process-env-guard allowance entry for workspace-providers-status.ts,
whose reads moved onto the injected boot snapshot (the stale entry made
the guard suite red).
…me-provider switchModel

Catalog modalities resolved only with session-endpoint evidence (a
cli/env/settings-sourced baseUrl) were clobbered on any registry
switchModel: the lookup resolves against the registry default endpoint,
and applyResolvedModelDefaults stamped over both the endpoint and the
modalities with no re-apply (unlike syncAfterAuthRefresh).

Carry the session endpoint across the switch only when the previous
model is a same-provider registry model and the target model has no
explicit baseUrl of its own, then re-apply catalog modalities against
the carried endpoint — mirroring syncAfterAuthRefresh's savedBaseUrl
block. Cross-provider switches and explicit-baseUrl targets keep the
R10-12 boundary (a settings endpoint never leaks into a base-url-less
registry model of another provider).

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

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

  • residue heuristic re-persisting future-spec-changed modalities (useProviderUpdates.ts:292) — already reported as R21-11 (threads 3729250165 / 3735217288), author acknowledged and deferred under the late-round policy (rediscovered three time…
  • proxy || chain treating an explicitly-empty HTTPS_PROXY="" as absent (workspace-providers-status.ts:116) — already deferred in round 23
  • test-runner gate predicate duplicated across config.ts and workspace-providers-status.ts — already reported as R8-2 (comment 3749264574), author acknowledged and deferred
  • toMatchObject subset-based auth-sync modality assertions (modelsConfig.test.ts) — already reported (comment 3781281363), author deferred
  • initialDefaultBaseUrl env-disjunct mutation-invisible test gap (modelsConfig.ts:170) — already deferred in round 21
  • design doc contradicts shipped OpenRouter suffix fallback behavior (docs/design/model-modality-catalog.md:67) — already deferred in round 23
  • boot-time gate production wiring untested (server.ts:1139) — already deferred in round 23
  • updateCredentials model re-derivation path lacks a discriminating test (modelsConfig.ts:898) — already reported as R4-5 (comments 3735217274 / 3736862040), author acknowledged
  • clearModelDerived !== undefined vs truthiness guard mismatch (modelsConfig.ts:861) — already reported as R15-7 (comment 3773979887), author acknowledged
  • generator guard accepts a degraded-but-non-empty snapshot (scripts/generate-model-modality-snapshot.js:50) — adjacent to already-reported R2-15 (comment 3727157090)

Not reviewed: reverse audit — reached the round cap of 3 without converging (round 3 still reported new findings).

Not explored to full depth (tool budget reached): chunk 2: none — all checks I started were completed (~17 of ~36 tool calls).; chunk 15: none — the cross-chunk consumer ( packages/core/src/models/model-metadata-catalog.ts ) is outside my territory by construction, not a cut short..

Test Plan (not a blocker): 286 passing — this review observed 22287, 20739, 1614, 1616, 494, 3849, 553 passed.

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

  • packages/core/src/models/model-metadata-catalog.ts:82 — [probe] shallow null-prototype copy of the bundled snapshot leaves nested model maps on Object.prototype
  • packages/core/src/models/modelsConfig.ts:694 — [review] session-endpoint modalities reconciliation policy duplicated verbatim in switchModel and syncAfterAuthRefresh
  • packages/core/src/models/model-metadata-catalog.ts:443 — [probe] bundled google-vertex catalog providers are unreachable by resolution
  • packages/core/src/models/modelsConfig.test.ts:1956 — [probe] the model.registryBaseUrl === undefined carry-guard clause has no test
  • packages/cli/src/serve/workspace-providers-status.ts:113 — [review] workspace-scoped proxy fed into the process-global catalog singleton is last-writer-wins
  • packages/core/src/models/model-metadata-catalog.test.ts:110 — [probe] endpoint-match vs unique-envKey precedence is unpinned by any test
  • packages/core/src/models/modelsConfig.test.ts:1904 — [probe] the !options?.baseUrl clause of shouldCarrySessionEndpoint has no test

[Critical] R21-1 (R20-4 / R19-3 / R17-4 / R9-9 / R7-1 / R6-1 family; round-24 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 07b7ef0 by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671 entries / 93 providers reproduced) and spot checks: openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ -> {image, video}; the qwen-vl family loses video vs pinned /^qwen-vl-/; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while this PR's own template (alibaba-coding-plan.ts:25) pins {image, video} and omitModelSpecModalities strips the template copy from new installs — fresh China-region Coding Plan installs lose video input while the /auth template still advertises it. Live models.dev (fetched 2026-08-20) carries the same gaps, so the hourly background refresh never corrects them. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification (issue comment 5219981685) was explicitly advisory and did not rule on the union question; triage stage-3 (comment 5188913533) withheld approval citing exactly this regression. Disposition requires an explicit maintainer design ruling — if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354/359 (comments 3747085928 / 3747085939); not re-anchored inline. Witness: sweep of committed snapshot at 07b7ef0, real defaultModalities as oracle — total 6056 | thinner: 671 | providers: 93; live models.dev re-fetch carries the same gaps.

中文说明

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

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

未审查:reverse audit — reached the round cap of 3 without converging (round 3 still reported new findings)。

未探索到全部深度(达到工具调用预算):chunk 2:none — all checks I started were completed (~17 of ~36 tool calls).;chunk 15:none — the cross-chunk consumer ( packages/core/src/models/model-metadata-catalog.ts ) is outside my territory by construction, not a cut short.

Test Plan(非阻断):286 passing — this review observed 22287, 20739, 1614, 1616, 494, 3849, 553 passed

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

[Critical] R21-1 (R20-4 / R19-3 / R17-4 / R9-9 / R7-1 / R6-1 family; round-24 re-check verdict: still stands). The bundled snapshot still lists thinner modalities than the repo-pinned heuristics and preset specs for ~671 entries across ~93 providers, and the catalog-over-heuristic precedence in ModelRegistry.resolveModelConfig (modelRegistry.ts:359, catalogModalities ?? defaultModalities(config.id)) applies the thin entries, so attachments are placeholder-replaced where pre-PR they were sent. Re-verified at the reviewed commit 07b7ef0 by a programmatic sweep of the committed snapshot with the real defaultModalities as oracle (671 entries / 93 providers reproduced) and spot checks: openrouter qwen/qwen3.7-plus = ['text','image'] vs the pinned /^qwen3.7-plus/ -> {image, video}; the qwen-vl family loses video vs pinned /^qwen-vl-/; alibaba-coding-plan-cn qwen3.5-plus/kimi-k2.5 = ['text','image'] while this PR's own template (alibaba-coding-plan.ts:25) pins {image, video} and omitModelSpecModalities strips the template copy from new installs — fresh China-region Coding Plan installs lose video input while the /auth template still advertises it. Live models.dev (fetched 2026-08-20) carries the same gaps, so the hourly background refresh never corrects them. The author escalated the design decision (global additive union vs documented exact-catalog precedence) to maintainers; the maintainer deep verification (issue comment 5219981685) was explicitly advisory and did not rule on the union question; triage stage-3 (comment 5188913533) withheld approval citing exactly this regression. Disposition requires an explicit maintainer design ruling — if the documented exact-catalog precedence is accepted as-is, say so explicitly and this class can be closed. Tracked in the existing threads at modelRegistry.ts:354/359 (comments 3747085928 / 3747085939); not re-anchored inline. Witness: sweep of committed snapshot at 07b7ef0, real defaultModalities as oracle — total 6056 | thinner: 671 | providers: 93; live models.dev re-fetch carries the same gaps.

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

@DragonnZhang
DragonnZhang marked this pull request as draft August 21, 2026 07:25
auto-merge was automatically disabled August 21, 2026 07:25

Pull request was converted to draft

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

Labels

autofix/needs-human The autofix loop stopped on this PR — a human must re-arm, split, merge, or close it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants