Qwen Code 改进建议报告

June 20, 2026 · View on GitHub

本文是 Qwen Code 改进建议报告 的完整更新日志(逐日逐 PR 追踪),为保持主报告可读性而从其「六、更新日志」拆分至此。

条目按时间倒序(最新在上),覆盖 2026-06-20 → 2026-04-05。主报告内仅内联最近一次 rollup(2026-06-20),更早历史以此处为准。


2026-06-20 月度增量(2026-05-16 → 2026-06-20 · 608 commits / 176 feat PR · origin/main f35a10ba1

5 周窗口的滚动汇总(非逐 PR 深挖;逐项深挖见下方各日条目)。Qwen Code 体量再增:packages/** 从 ~500 → ~4,750 文件(~2,700 源 .ts(x),14 包)。主线 = Workflow 工具编排 P1–P5 落地 + 桌面 app 新包 + daemon/web-shell 成熟 + 多渠道(QQ/飞书)。

🌟 Workflow 工具 P1–P5 全栈落地(umbrella #4721)——确定性多 agent 编排,对标本报告 Coordinator/Swarm(line 83)+ Codex multi-agent v2:

  • P1 #4732(2026-06-10):node:vm 最小沙箱 + 顺序 agent()
  • P2 #4947(2026-06-12):parallel() + pipeline() 并发 fan-out
  • P3 #5034(2026-06-14):agent({schema, agentType, model, isolation:'worktree'})
  • P4 #5094(2026-06-16):meta + /workflows + phase-tree 进度
  • P5 #5231(2026-06-18):token budget + per-run UI surfacing

🌟 桌面 app 新子系统#3778(2026-06-11)packages/desktop + Qwen ACP SDK 集成(macOS 公证 / Windows 自更新 / git branch badge);后续 desktop qwen 集成(#4728)+ macOS 26 Liquid Glass(#5284)+ desktop-pet skill(#4808)。

daemon / web-shell 成熟qwen serve 直接托管 Web Shell UI(#5392)+ DaemonTransport/ACP 合规(#5040)+ mid-turn 消息投递(#5175)+ web-shell token/设置/重试/流式指标(#5066)+ 完成 turn 折叠为 prompt+答案(#5125)+ per-turn time/token(#5163)。

多渠道 IM:QQ Bot(#5202,2026-06-19)+ 飞书/Lark(#4379,2026-05-28)。

Durable cron / loop:可重启存活的定时任务(#5004)+ 秒级 wakeup 引擎(#5182)+ prompt-only /loop 自定速唤醒(#5197)。

Computer Use 跨平台:迁移到 cua-driver(#5051)+ open-computer-use MCP 零配置内建(#4590)。

记忆 / Goal / Plan/rewind 文件恢复(#4064,2026-05-16)+ /goal judge-driven(#4123,详下条)+ 用户级 auto-memory ~/.qwen/memories/(#4747)+ Plan plansDirectory 可配置(#4062)+ QWEN.local.md project-local 上下文(#4091)。

Skills/skills picker 对话框(#4532)+ triage skill(#4577)+ user-invocable frontmatter(#5037)+ skill allowedTools 自动批准(#4704)+ auto-skill- 前缀强制(#4839)。

性能 / 截断:分层工具输出截断 + per-message/per-tool 预算(#4880)+ /compress-fast 无 LLM 规则压缩(#4893)+ 内存压力监控/诊断落盘(#4403/#4654)+ grep 结果可满足 prior-read 检查(#5043)。

遥测:#3731 Phase 2–4(tool.blocked_on_user / subagent span 并发隔离 / TTFT / GenAI semconv,#4321 等)+ 运行时内存/CPU OTel 采样(#4868)。

Hooks / 权限:post tool batch hooks(#4454)+ user prompt expansion hooks(#4377)+ toolCallId 传入 hook(#4918)+ ACP 权限超时可配(#5260)+ 专用 agent 权限对话框(#5105)。

矩阵状态修正(本次同步修正 8 项 stale OPEN/缺失 + 3 项历史 现状/进展 矛盾,均经 git log origin/main 核实)

item
启动 preconnect(line 58)PR#3318 open✓ 2026-04-27(3b0b6c052
Coordinator/Swarm(line 83)PR#3471/#3488 🟡 OPEN✓ 2026-04-27 / 04-28(与 line 193 一致)+ Workflow #4721
Agent isolation:worktree(line 101)PR#4073 OPEN✓ 2026-05-14(609e05bae
自动检查点(line 82)仅 PR#3292 OPEN+ PR#4064 ✓ 2026-05-16(/rewind 文件恢复);picker UX 仍 OPEN
/doctor memory(line 159)PR#3785 🟡 OPEN✓ 2026-05-17(eef06ce37
Computer Use(line 111)缺失✅ 已实现且超 Claude(跨平台)——#4590 零配置内建(2026-05-29)+ #5051 cua-driver 跨平台 + 35 工具面
Auto Dream(line 54)缺失(与 PR 列 ✓ 自相矛盾)✓ 已实现(PR#3087 managed auto-memory + auto-dream)
Notebook Edit(line 120)缺失✓ 已实现(NotebookEdit 工具,2026-05-21 · #3900 + #4373)

另校正 3 项历史"现状=缺失 但进展=✓"矛盾:队列输入编辑(#2871)/ /batch(#3079)/ 上下文 Tips(#2904),均 2026-04 已合并。

其余 缺失 项(Team Memory / Transcript Search / Output Styles / Deep Link / /teleport / Bare Mode / GitLab CI/CD / 并发 Session / 企业代理 / Session Ingress Auth 等)经窗口 git log 关键词核对,确为未实现,维持 缺失

仍 OPEN(已核实未合并):API retry classifyError(#3798)、rewind picker UX(#3292)、WebFetch fastModel(#3537)、Web UI+QR remote control(#2330)。


2026-05-16 增量(/goal 系列收官 · PR#4123 MERGED 替代 PR#4088 CLOSED · +3476/-25 / 40 files / merge commit 0dde1ad70 / 10:14 UTC)

PR#4123 feat(cli): add session-scoped /goal command with judge-driven turn continuation(qqqys,2026-05-16 10:14 UTC MERGED,+3476/-25)—— 原 PR#4088 已 CLOSED,按 review 反馈整体 rebuild 后以 PR#4123 形态合入。规模较初版(+1800/-24)几乎翻倍,主要增量在测试覆盖(4 个测试文件共 ~1061 LOC,占 ~30%)+ restoreGoal.ts (158 LOC) session resume 协同 + 4 个 cli hook 适配。

与 Claude / Codex 实现对照(按源码核实,2026-05-16)

维度Codex /goalClaude /goalQwen PR#4123 /goal
落地时间2026-04-25(5 PR 系列 #18074–#18078)2026-05-11 (v2.1.139)2026-05-16 MERGED
实现规模core +1641 LOC / tools +280 LOC / TUI 5 文件 ≈ 2300 LOC + SQL schema + protocol events二进制混淆,未开源2089 LOC 业务(+ ~1061 LOC 测试 = 40 files +3476/-25)
完成判定模型自判 + 工具调用create_goal/update_goal(complete)/get_goal 三件套;continuation 模板内嵌 completion-audit 指令Stop prompt-hook evaluatorcRK 函数):同 session 内的判官 prompt,要求基于 transcript evidence 判定LLM-as-judge subquery:独立 evaluator(可走 fast model)+ 严格 JSON schema {ok, reason} 结构化输出
底层机制新 subsystem GoalRuntimeState + GoalRuntimeEvent 10+ 事件状态机local-jsx + post-text(推断)0 新 subsystem——复用 PR#3471/3488 的 Stop function-hook plumbing
持久化✅ SQLite thread_goals 表,StateDbHandle 跨重启❌ session 内存activeGoalStore 进程内存;/clear /resume /branch 主动清;restoreGoal.ts 仅协助同进程内 history 重渲染
状态机active / paused(plan/mode 切换)/ budget_limited / completeactive / clearedset / achieved / aborted / cleared仍无 paused
Token 预算token_budget 字段 + budget_limit.md 模板 steering❌(推断)❌;仅迭代数 capMAX_GOAL_ITERATIONS=50
Judge 超时GOAL_JUDGE_TIMEOUT_MS=25s + AbortController 防泄漏;GOAL_HOOK_TIMEOUT_SECONDS=30 对齐 Claude cRK 默认
Prompt 注入防护<untrusted_objective> 标签 + "untrusted prompt data" 显式声明unknownsanitizeConditionForPrompt(去换行 + 双引号降级单引号)
Bootstrapcontinuation 模板由模型读取首轮 submit_prompt 自动注入 goalInstructionPrompt(q),免去 user 手动"开始"
安全门禁mode/plan 切换自动 pausedunknownisTrustedFolder() + getHookSystem() 必备 + disableAllHooks 短路 + 4000-char cap

PR#4123 vs Claude / Codex 的设计哲学

  1. LLM-as-judge subquery 评估——独立 evaluator (runSideQuery) 走 fast model;比 Claude 的"判官嵌在同 prompt 里"更可控、比 Codex 的"模型自己 audit 自己"更不容易自欺
  2. 零新 subsystem——纯复用现有 hook plumbing,顺带 fix latent bug(hasHooksForEvent 忽略 session-scoped function hooks)
  3. 测试覆盖率最高:~1061 LOC 测试覆盖业务 2089 LOC(含 goalLoop.integration.test.ts 209 LOC 端到端),Codex 5 PR 拆分中测试比 Qwen 单 PR 集中得多

PR#4123 仍 deferred / 可补的 3 项(已从 PR#4088 列表收敛,daemon HTTP route 项已转入 §06 Stage 1.5c):

  • Plan mode 集成:goal 与 /plan 互斥时应自动 paused 而非 cleared(Codex commit 3463324a29 "keep plan mode from pausing goals" 是参照)
  • Budget enforcement guard rail:仅有 MAX_GOAL_ITERATIONS=50 硬上限,无 token budget。50 轮 × 几万 tokens 仍可能是 $$$,重要 safety 缺口
  • paused 中间态:daemon 重启 / /compact / 临时切走时仍 cleared 而非 paused,goal 上下文丢失

源码核实(commit 0dde1ad70):

  • packages/core/src/goals/goalHook.ts:34-91(迭代/超时常量)
  • packages/core/src/goals/goalJudge.ts:23-54(JSON schema judge + Claude cRK 对齐注释)
  • packages/cli/src/ui/commands/goalCommand.ts:79-216(命令分支:状态/清除/长度 cap/门禁/注册 + bootstrap)

2026-05-13 增量(~24h · 1 项关键合并 + 1 项关键新 OPEN · 🌟 PR#3889 qwen serve daemon Stage 1 MERGED(+12993/-194 / 84 commits / merge commit 870bdf2a / 06:47 UTC merge · 收敛 5 轮 multi-model audit + chiga0 三轮 follow-up + LaZzyMan/tanzhenxin reviews)+ /goal slash command PR#4088 新 OPEN(+1800/-24 · 跟进 Claude Code v2.1.139 2026-05-11 引入的 /goal 命令,比 Anthropic 实现晚 ~24h;本质回追 Codex 2026-04-25 merged 的 5-PR /goal 系列设计;注:PR#4088 后被 CLOSED,重做后以 PR#4123 2026-05-16 MERGED——详上方 2026-05-16 条)

🌟 PR#3889 daemon Stage 1 MERGED — 系列追踪以来最大单 PR

PR#3889 feat(cli,sdk): qwen serve daemon (Stage 1)MERGED 2026-05-13 06:47 UTC(merge commit 870bdf2a,+12993/-194 / 84 commits)—— 系列追踪以来最大单 PR(超过 PR#3684 Phase C event monitor +6297/-147)。

最终设计要点(详 §06 Stage 1 实现 audit):

  • 架构:commit 6a170ef8 重构后是 "1 daemon HTTP front + M qwen --acp children (1 per workspace) + N session multiplexed per workspace via QwenAgent.sessions: Map"——同 workspace 内 in-process N-session 经济性已对齐 OpenCode
  • 9 STAGE1_FEATURES:health / capabilities / session_create / session_list / session_prompt / session_cancel / session_events / session_set_model / permission_vote
  • N=5 同 workspace session 内存:300-500MB(早期)→ 60-100MB(commit 6a170ef8 后)

deferred 到 Stage 1.5:chiga0 10 must-haves(详 §06 Stage 1.5a)+ Mode A qwen --serve flag(Stage 1.5b)+ daemon-side state CRUD(§06 Stage 1.5c)+ chiga0 6 architecture findings refactor(Stage 1.5-prereq)。

经验沉淀:78 commits 中 ~25 轮 audit + ~60+ review threads close + 架构能在 Stage 1 内重构(commit 6a170ef8 是最 expensive 但最有价值的 follow-up)。详 §06 §5️⃣ 经验沉淀


PR#4088 feat(cli): add session-scoped /goal command with judge-driven turn continuation(qqqys,2026-05-12 OPEN,+1800/-24,closes #4074)—— 跟随 Claude Code v2.1.139(2026-05-11)+ Codex 5-PR 系列(2026-04-25 merged)的 /goal 设计模式。⚠️ PR#4088 后被 CLOSED,按 review 反馈整体 rebuild 后以 PR#4123 2026-05-16 MERGED(+3476/-25,详上方 2026-05-16 条目的最新对照表)。下文为 2026-05-13 当时的 snapshot:

与 Claude / Codex 实现对比(2026-05-13 snapshot)

维度Codex /goalClaude /goalQwen PR#4088 /goal
引入时间2026-04-25 (5 PRs merged)2026-05-11 (v2.1.139)2026-05-12 OPEN
实现规模5 PRs ~3-4w~1w(推测)1 PR +1800/-24
完成判定模型工具调用自判 + state machineStop prompt-hook evaluatorcRK 函数,同 prompt 内判官)LLM-as-judge subquery(独立 evaluator,可走 fast model)
底层机制新 subsystem thread_goals SQL 表local-jsx + post-text复用 Stop hook + function hook plumbing(0 新 subsystem)
持久化✅ SQL thread_goals/clear /resume /branch 主动清除
状态active/paused/budget-limited/completeactive/clearedactive/achieved/cleared
UITUI 状态面板overlay panel◎ goal active Footer pill
Bootstrap<system-reminder> 首轮自动注入(避免额外 user turn)

历史更正:早期版本此表将 Claude 完成判定写作"主 LLM 自判",与 qwen goalJudge.ts:18 注释("aligned with Claude Code 2.1.140's Stop prompt-hook evaluator (function cRK in the compiled binary)")不符。Claude cRK 是独立 evaluator prompt,evaluator-style 而非裸自判;Qwen 在此基础上把 evaluator 进一步剥出为 fast-model subquery。

PR#4088 3 个超越 Claude / Codex 的亮点

  1. LLM-as-judge subquery 评估——独立 evaluator (runSideQuery) 走 fast model 而非走主模型上下文;完美利用 Qwen 的 fast-model 机制(主 LLM 干活、fast LLM 判 goal)
  2. 零新 subsystem——纯复用 PR#3471/3488 的 hook plumbing,顺带 fix 一个 latent bug(hasHooksForEvent 忽略 session-scoped function hooks)
  3. <system-reminder> 首轮 bootstrap——避免 user 手动 "开始" prompt

PR#4088 已 deferred / 可补的 4 项(PR#4123 收敛后仍 deferred 3 项 + 1 项转入 §06 Stage 1.5c,详 2026-05-16 条):

  • Plan mode 集成(参 Codex Issue #20838):goal 与 /plan 互斥时应自动 paused 而非 cleared
  • Budget enforcement guard rail--max-turns / --max-tokens 防 runaway loop(goal 设错可能跑数百轮,重要 safety
  • paused 中间态:daemon 重启 / /compact / 临时切走时 paused 而非 cleared
  • Daemon HTTP route(POST /session/:id/goal):§06 Stage 1.5c daemon-side state CRUD 候选

2026-05-12 第二轮(~6h 增量 · 1 项合并 + 3 项关键新 OPEN · Worktree 工具组 PR#4073 新 OPEN*(+1651/-4 · 直接闭合 claude-code-vs-qwen-code-builtin-tools.md §3.10 刚标注的 P1 借鉴项)+ Agent hooks via headless subagent PR#4072(+1401/-14)+ OTel hierarchical session tracing spans PR#4071(+1318/-409)+ chiga0 narrow terminal rendering PR#3968 合并)

扫描窗口:2026-05-12 06:00 UTC 增量。窗口内 1 项合并 + 3 项新 OPEN(今日全新创建)。本轮关键发现:① PR#4073 generic worktree —— 与今日上午 binary 反编译刚发现的 Claude EnterWorktree / ExitWorktree 工具组几乎同步落地 Qwen 端(LaZzyMan 独立创建,非项目内 sync),闭合 claude-code-vs-qwen-code-builtin-tools.md §3.10 列出的 "Worktree* P1 借鉴" 缺口;② PR#4072 agent hooks —— 自述 "Aligns with Claude Code's execAgentHook / SyntheticOutputTool design",把 hook 框架从单一 command-script 扩展到 headless subagent 多轮验证;③ PR#4071 hierarchical session tracing —— OpenTelemetry session-level interaction spans wrap sendMessageStream lifecycle 12 个 exit point,加 NOOP_SPAN sentinel + WeakRef + 30-min TTL cleanup 防 orphan span。

🟢 MERGED(1 项业务)

PR标题合并时间影响
PR#3968fix(cli): improve rendering on narrow terminals2026-05-12 05:58 UTCTUI 渲染窄屏适配(+221/-8 · 4 files · chiga0)—— ① TableRenderer < 60 列时切换 vertical format(之前仅 maxRowLines > 4 触发)防止 wide markdown table 溢出 scrollback;② Composer ≤ 30 列且 StreamingState.Responding 时抑制 bottom loading indicator 防 ultra-narrow 终端不必要重绘。从 TUI flicker hardening 系列剥离

🆕 关键新 OPEN(3 项,全在 2026-05-12 创建)

PR方向关联
PR#4073 🌟 🆕 2026-05-12 03:06feat(tools): add generic worktree support — EnterWorktree/ExitWorktree + Agent isolation🌟 LaZzyMan · 闭合 Worktree* 工具组 P1 借鉴缺口(+1651/-4 · 13 files · closes Phase A+B of #4056)—— ① 2 个新工具 enter_worktree / exit_worktree直接对标 Claude v2.1.139 EnterWorktree / ExitWorktree);② agent 工具新增 isolation: 'worktree' 参数(agent 可在隔离 worktree 内运行 + auto-cleanup if no changes / preserve if changes);③ worktreeCleanup.ts stale ephemeral worktree 清理;④ validateUserWorktreeSlug 拒绝 ../ / dots 路径注入;⑤ exit_worktree dirty-state guard 拒绝 action='remove' if working tree dirty;⑥ 验证:B1/B2/B3/D1/D2/D3 全部 ✅(80 测试 16 新 + 64 既存 agent 测试无 regression)。与 Arena 内部 worktree 共存不破坏GitWorktreeService.setupWorktrees / ArenaManager 不动)
PR#4072 🌟 🆕 2026-05-12 02:34feat(hook): implement agent hooks via headless subagent with text fallback verdict🌟 DennisYu07 · Hook 框架重大扩展(+1401/-14 · 17 files)—— ① 新 agent hook type 在 Stop event 等触发执行 headless subagent 验证条件(多轮推理 / 读文件 / 跑命令 → 决定是否 allow action);② AgentHookRunner.executeInternal() 通过 SubagentManager.createAgentHeadless() 创建;③ 新 report_verdict tool 结构化 pass/fail 输出 + parseVerdictFromText() text fallback(模型不调用 tool 时正则启发);④ YOLO approval mode override(subagent 工具不触发 permission dialog);⑤ transcript path 注入 subagent system prompt;⑥ 扩展 HookType enum / HookConfig union / 所有 registry/runner 支持 agent type。自述 "Aligns with Claude Code's execAgentHook / SyntheticOutputTool design"。Token cost ~30s/invocation,advisoryOnly 模式 + custom agent field 尚未验证
PR#4071 🆕 2026-05-12 02:24feat(telemetry): add hierarchical session tracing spansdoudouOUC · OTel 分层 session tracing(+1318/-409 · 6 files)—— ① 新 session-tracing.ts 模块 concurrent-safe span 管理(explicit span 引用 + WeakRef + strongRefs + 30-min TTL cleanup);② SDK 未初始化时用 NOOP_SPAN sentinel;③ client.ts 在 UserQuery/Cron/Notification message types 上启动 interaction span 包裹完整 sendMessageStream lifecycle,12 个 exit point(ok/error/cancelled)含递归 yield* paths 正确结束;④ sdk.ts shutdown safety net 在 SDK shutdown 前结束 active interaction span 防 Ctrl+C orphan;⑤ SPAN_INTERACTION / SPAN_LLM_REQUEST / SPAN_TOOL / SPAN_TOOL_EXECUTION 常量;⑥ 19 unit tests 覆盖 interaction lifecycle / LLM spans / tool spans / 并发隔离 / noop / cleanup

🎯 重点解析:PR#4073 worktree 与 binary 反编译同步落地

时间线对照(2026-05-12 同一天):

时间 (UTC)事件
2026-05-12 03:06LaZzyMan 创建 PR#4073(+1651/-4)
2026-05-12 ~05:00本项目 binary 反编译 v2.1.139 ELF 确认 EnterWorktree / ExitWorktree 在 Claude 内部 tool name 注册表
2026-05-12 ~05:30claude-code-vs-qwen-code-builtin-tools.md §3.10 把 Worktree* 标为 Qwen 缺失 + P1 借鉴

两条独立路径同日抵达同一结论——LaZzyMan 从 qwen-code Arena 内部 worktree 出发扩展为通用能力,本项目从 Claude binary 反编译反推工具组对齐。结论:worktree 已不再是 Qwen 缺口(已 OPEN PR 在 review),等待合并后从 §3.10 / §五 移除。

🎯 重点解析:PR#4072 hook 框架的"agent 化"

Qwen Code 的 hook 框架在 PR#4072 之前仅支持 command-script 类型——shell 脚本里跑 simple check,pass/fail 判断局限。PR#4072 引入的 agent hook type 把验证能力整个 LLM 化

旧 command hook:       Stop event → 跑 `lint.sh` → exit code 决定
新 agent hook:         Stop event → 启 headless subagent → 多轮推理 (读文件/跑命令/想原因) → 结构化 verdict

Claude 端对应:v2.1.139 binary 反编译显示 Claude 有 execAgentHook / SyntheticOutputTool 机制(PR#4072 自述明示参考)——agent hook 的 verdict 通过 SyntheticOutputTool 注入回主对话。PR#4072 用 report_verdict tool + text fallback 实现同概念。

与 PR#3471 background subagent 调度面的关系:复用 SubagentManager.createAgentHeadless()——agent hook 是 background subagent 的新 use case,验证 4 kinds Background framework (agent/shell/monitor/dream) 的可扩展性(即将出现第 5 kind:hook-agent?)。

🎯 重点解析:今日同日 3 新 OPEN 集中开发主题

主题PR共性
隔离 / sandboxPR#4073 worktreegit worktree isolation for agent
验证 / hookPR#4072 agent hookheadless subagent verdict
可观测 / tracingPR#4071 OTel spansinteraction-level session tracing

3 PR 共同指向:为生产部署 / 团队协作场景做基础设施补全——隔离(防 agent 互相污染)+ 验证(防 agent 错误 Stop)+ 可观测(OTel 监控 LLM session)。与 PR#3889 daemon design Stage 1 GA-ready 的"production hardening"主线一致。


2026-05-12(~1d 增量 · 7 项业务 PR 合并 · Anthropic proxy + global prompt cache scope(PR#4020 +1320/-37)+ Ctrl+B promote PR-3 of 3 收官(PR#3969)+ 4 工具 deferral(PR#4022)+ legacy qwen auth CLI 移除(PR#3959 -2532)+ ask_user_question always-visible(PR#4041))

扫描窗口:2026-05-11 → 2026-05-12 UTC。窗口内 7 项业务 PR + 2 项 ci/refactor。前次的 8 项"关键 OPEN"有 3 项已合并:PR#4020 / PR#3969 / PR#4022。本次主线:① Anthropic-compat proxy + 跨 session prompt cache(PR#4020 +1320/-37 · 体量从 OPEN 时 +577 翻倍);② foreground → background promote 3-PR 系列收官(PR#3969 PR-3 of 3 暴露 Ctrl+B keybind · 与 PR#3842 signal.reason + PR#3894 shell.ts 集成形成完整链);③ 4 个低频 built-in 工具 deferred(PR#4022 Monitor / SendMessage / TaskStop / WebFetch + searchHint · 与 Claude Code 延迟策略对齐);④ ask_user_question always-visible(PR#4041 与 PR#4022 互补 · 防 deferred 后模型用 prose 代替结构化 multi-choice);⑤ legacy qwen auth CLI subcommand 移除(PR#3959 −2532 行 · redirect 到 /auth TUI dialog · 体量去除最大);⑥ runtime.json sidecar cleanup(PR#4030);⑦ /stats model 长 model 名字一行(PR#4032)。

🟢 MERGED(7 项业务)

PR标题合并时间影响
PR#4020feat(core): improve Anthropic proxy compatibility and enable global prompt cache scope2026-05-11🌟 关联 prompt cache + provider 系列+1320/-37 体量从 OPEN 时 +577 翻倍)—— ① 非 Anthropic-native baseURL 用 authTokenAuthorization: Bearer)防 IdeaLab-style proxy 的双 header 冲突;② 真实 api.anthropic.com 保持 SDK-default x-api-key auth;③ Claude 4.6+ 自动 thinking: { type: 'adaptive' }(数字比较 `major > 4
PR#3969feat(cli): Ctrl+B promote keybind (#3831 PR-3 of 3)2026-05-11🌟 promote 3-PR 系列收官+308/-15)—— foreground → background promote 完整链路:PR#3842 (PR-1, MERGED · ShellAbortReason = { kind: 'cancel' } | { kind: 'background'; shellId? } 基础) + PR#3894 (PR-2, MERGED · shell.ts 集成 + bg_xxx.output snapshot) + PR#3969 (PR-3, MERGED · 用户可见 Ctrl+B keybind + status indicator + /promote slash 命令)。Phase D part b of #3634 闭环
PR#4022feat(tools): defer low-frequency built-in tools to reduce initial prompt size2026-05-11关联 ToolSearch 延迟工具机制扩展(+20/-0)—— 4 个低频 built-in tools 标记 shouldDefer=true + searchHint:Monitor / SendMessage / TaskStop / WebFetch。PR#3589 之前只 deferred Cron / AskUserQuestion / ExitPlanMode / LSP / MCP;与 Claude Code 延迟策略对齐——仅 core read/write/search/execute 工具保留在 initial function-declaration list(减小 system prompt size 节省 token)
PR#4041feat(tools): keep ask_user_question always-visible to surface clarification UX2026-05-11关联 item-15 AskUserQuestion(+10/-3)—— PR#4022 反向:ask_user_question 之前 deferred 时模型很少经 tool_search 发现就用,反而用 plain prose 提问,丢失结构化 multi-choice UX。改为 shouldDefer === false 强制在 initial tool list;加 unit-test guard pin 防 silent regression
PR#3959refactor(cli): remove legacy qwen auth CLI subcommand, redirect to /auth TUI dialog2026-05-11🌟 大型重构+397/-2532 净 −2135 行)—— 移除 5 个 qwen auth 子子命令(qwen-oauth / coding-plan / api-key / openrouter / status)+ 交互式 selector,重定向到 /auth TUI dialog。原 734 行 handler 逻辑完全归 TUI。本期最大单 PR 删除量
PR#4030chore(core): runtime.json sidecar follow-ups from #3714 review2026-05-11关联 runtime.json(+166/-17)—— post-merge cleanup:删除 dead typeof !== 'boolean' clause(Number.isInteger(true) === false 已挡)+ dead err.message.includes('utf-8') branch(Node fs.readFile 不抛 invalid UTF-8)+ test 补充。纯 trim 无行为变化
PR#4032fix(cli): keep long model stats header on one line2026-05-11UI 修复(+126/-6,fixes #4031)—— /stats model 渲染单 model + panel 宽度足够时扩展 model/source 列;保留 24-col compact 多 model 布局。修复 ggml-org/gemma-4-E4B-it-GGUF 等长 model ID wrap 的回归

🟡 ci / refactor(2 项,不计入业务计数)

  • PR#4061 refactor(telemetry): remove dead useCollector setting and unreachable TelemetryTarget.QWEN —— −82 行 dead config(useCollector 从未被 telemetry SDK 调用)+ TelemetryTarget.QWEN enum 永远 throw FatalConfigError。Part of #3731 config 语义清理
  • PR#3984 ci: skip unnecessary release and SDK checks —— SDK Python workflow 仅触发于 Python SDK 变更或 workflow 自身;release/version-sync PR 跳过 CI duplicate

🆕 新 OPEN(16 项,活跃开发 · 含今日 2026-05-12 新创建 2 项)

PR方向关联
PR#4069 🆕 2026-05-12feat(cli): add tools.toolSearch.enabled setting for prefix-caching models🌟 wenshao · 关键 cost regression 修复(+110/-0 · closes discussions/4065)—— PR#3589 ToolSearch 延迟 MCP 工具节省 ~15K tokens,但破坏了 DeepSeek 等 prefix-based KV cache:用户报告 cache hit 97.5% → 81.5%(-16.4%)/ 日成本 $1.05 → $3.30(+214%)/ 尽管处理 46% 更少 tokens。新增 tools.toolSearch.enabled 全局开关 + deepseek-v4-* 自动 disable(cache hit pricing 1/120 让 cache stability 远比 prompt size 重要)。复用现有 eager-reveal fallback 无 core logic 改动
PR#4070 🆕 2026-05-12perf(cli): code-split lowlight to cut startup V8 parse cost🌟 chiga0 · 启动性能大优化(+1203/-77)—— lowlight syntax highlighter(~1.5MB bundled / 36-60ms V8 parse)从 cli.js 同步入口拆出独立 esbuild chunk,仅在首个代码块渲染时按需加载cli.js 体积 25MB → 6.9MB(-72%)。React/Ink 双 commit pattern:第一帧 plain text,第二帧 chunk 加载后切换 highlighted。直接削减 1-3s cold-start 感知延迟——module-eval 阶段是 perceived gap 的主导因素
PR#4067Use bundled Qwen Code for PR review automationyiliang114 · 关联 /review
PR#4064feat(rewind): add file restoration support to /rewind command🌟 关联 item-5 /rewind 检查点回退——/rewind 不仅恢复 transcript,还能恢复 session 期间被修改的文件状态
PR#4062feat(cli): add configurable plansDirectory for Plan Modeshenyankm · Plan Mode 计划文件目录可配
PR#4060fix(cli): preserve debug session across sandbox relaunchsandbox relaunch 保留 debug session
PR#4059feat(cli): add keyboard text selection and Ctrl+Backspace fix for MinTTYMinTTY (Git Bash on Windows) 键盘文本选择 + Ctrl+Backspace
PR#4053Move startup context into system reminderstanzhenxin · 关联 prompt 结构优化
PR#4051docs: user + design docs for --json-schema structured outputwenshao · 关联 PR#4001 structured JSON
PR#4050fix(cli): preserve table ANSI color across wrapped lineschiga0 · TUI table 渲染颜色保持
PR#4048feat(cli): argument hint + --auto completion for /renameqqqys · /rename 补全
PR#4045fix(channels): expand tilde in channel cwd configqqqys · channels ~ 展开
PR#4037feat(cli): wrap markdown links in OSC 8 so wrapped URLs stay clickableBZ-D · 关联 item-7 OSC 8 终端超链接
PR#3994feat(perf): progressive MCP availability — MCP no longer blocks first inputchiga0 · 🌟 关联 item-8 启动优化(+1121/-60,体量大幅扩展)—— MCP server 启动不再阻塞用户首个 input。具体测量 TTI(time to first prompt input):无 MCP 480ms / 1 fast MCP 875ms / 2 fast + 1 slow (5s) MCP 7.1s / 1 hung MCP 10.5s。Progressive availability 模式:Config.initialize() built-in tools 就绪即返回,MCP discovery 后台 first-class promise
PR#3973fix(cli): MCP add/remove now correctly persists headers and server deletionsB-A-M-N · MCP config 持久化修复
PR#3975feat(cli): add /directory remove subcommandB-A-M-N · /directory remove 子命令

🎯 重点解析:promote 3-PR 系列完整收官

#3634 Phase D part b (foreground bash → background) 跨 3 个 PR 合并:

PR合并角色
PR#3842早期PR-1:signal.reason 基础——ShellAbortReason = { kind: 'cancel' } | { kind: 'background'; shellId? }
PR#38942026-05-08 +935/-15PR-2:shell.ts 集成——检测 result.promoted: true → snapshot output to bg_xxx.output → 注册 BackgroundShellEntry
PR#39692026-05-11 +308/-15PR-3:用户可见 Ctrl+B keybind + /promote slash + status indicator

整体闭环:用户跑长命令 → Ctrl+B → 立即 detach 到后台(bg_xxx.output 持续累积)→ 后续可在 /tasks 列表看到 → 用 task_stop cancel 或 attach 重连。与 Claude Code 的 background shell 体验对齐

🎯 重点解析:4022 + 4041 的"反向修复"

PR#4022 把 4 个低频工具 deferred → PR#4041 把 ask_user_question 强制不 deferred——后者纠正 PR#4022 一开始把 ask_user_question 也 deferred 导致模型用 prose 提问的 regression。两 PR 同日合并体现"快速反向 audit + 修复"模式:

PR#4022 (+20/-0)  延迟 Monitor/SendMessage/TaskStop/WebFetch

                  审计发现 ask_user_question 不该 deferred

PR#4041 (+10/-3)  强制 shouldDefer=false + unit test guard

🎯 重点解析:PR#4020 体量翻倍(OPEN +577 → MERGED +1320)

PR#4020 是 wenshao 的 Anthropic-compat 系列:OPEN 时 +577 行(基础 proxy 兼容),MERGED 时 +1320 行(+743 增量)——增加了:

  • Claude 4.6+ adaptive thinking 自动检测(数字版本比较,支持 4.6/4.7/4-10+/未来)
  • Global prompt cache scope(跨 session 复用 system prompt cache)
  • User-Agent / x-app header 适配 proxy Team rules
  • 测试覆盖 + IdeaLab proxy 集成验证

🎯 重点解析:PR#4069 揭示 ToolSearch 与 prefix cache 的根本冲突

PR#4069 揭示了 PR#3589 ToolSearch 设计的与 prefix-based KV cache 的根本矛盾——这是从 discussions/4065 真实用户成本报告反推出来的:

ToolSearch 设计逻辑

Initial tool list 只发 ~5-10 个 core tools(read/write/search/execute)
↓ 模型需要其他工具时
tool_search("mcp filesystem") → 动态拉取 MCP / LSP / monitor / dream 等
↓ 节省 ~15K tokens(每轮 initial prompt)

但 prefix cache 的核心要求prompt 前缀字节级稳定。ToolSearch 动态注入工具描述破坏了这个前缀稳定性:

维度ToolSearch 之前ToolSearch 之后
Initial tool list稳定包含所有 ~30 工具仅 core ~10 工具 + 动态发现
Token 数较高减少 ~46%
Cache prefix稳定 → cache hit 97.5%动态 → cache hit 81.5%
DeepSeek 成本$1.05/day$3.30/day(+214%)

为什么 DeepSeek 成本爆炸:DeepSeek cache_hit 定价是 cache_miss1/120(约 0.83% 价格)。失去 cache hit = 输入 token 价格涨 120 倍,远超 ToolSearch 节省的 46% token 数。

PR#4069 的修复

  • 新增 tools.toolSearch.enabled 全局 settings 开关
  • 自动 disable for deepseek-v4-*(pattern match 默认 unless 显式覆盖)
  • 复用 PR#3589 的 eager-reveal fallback path(已有逻辑,0 core 改动)

设计教训性能优化要按 cost model 评估,不能只看 token 数。同样的"减少 prompt size"在 prefix-cache 模型上反成 cost regression。这与 Reasoning Effort Deep-Dive cache 影响分析的"prefix stability > token count"哲学一致。

🎯 重点解析:PR#4070 cold-start V8 parse cost 直击

PR#4070 perf(cli): code-split lowlight to cut startup V8 parse cost (+1203/-77) 是 chiga0 的启动性能优化:

问题诊断

  • cli.js bundle: 25MB(含 lowlight ~1.5MB)
  • lowlight V8 parse 时间:36-60ms
  • 但 lowlight 仅在首个 code block 渲染时才需要

修复方案:esbuild code-split,lowlight 拆为独立 chunk,按需 import()

  • cli.js 缩到 6.9MB(-72%)
  • Module-eval 阶段(perceived cold-start gap 1-3s 的主导)削减 36-60ms
  • React/Ink 双 commit pattern:第一帧 plain text,chunk loaded 后第二帧 highlighted(用户不感知切换)

这是与 PR#3994 progressive MCP availability 互补的冷启动优化方向

  • PR#3994 削减 TTI(time to first input)—— 解决"等 MCP 完成 handshake 才能输入"
  • PR#4070 削减 module-eval 时间 —— 解决"等 lowlight V8 parse 完成才能 render UI"

合并后预期 cold-start 总收益 ~1-2s(具体取决于 MCP 配置 + 是否有代码块输出)。

🟢 状态升级

Item旧状态新状态
promote 3-PR 系列PR-1 / PR-2 合并 + PR-3 OPEN3-PR 全部合并 + 用户可用 Ctrl+B / /promote
Anthropic proxy + cross-session cacheOPENMERGED(PR#4020 +1320/-37)
低频工具 deferral5 项 (Cron/AUQ/ExitPlanMode/LSP/MCP)9 项 (+Monitor/SendMessage/TaskStop/WebFetch) - ask_user_question 例外保留
legacy qwen auth subcommand734 行 handler移除,重定向到 /auth TUI dialog
ToolSearch 与 prefix cache 冲突用户报 +214% 成本(PR#4065 discussion)🟡 PR#4069 OPEN —— 新增 tools.toolSearch.enabled settings + deepseek-v4-* 自动 disable
cold-start V8 parse 优化lowlight 36-60ms 同步 parse🟡 PR#4070 OPEN —— code-split lowlight 后 cli.js 25MB → 6.9MB
MCP 阻塞 TTI1 hung MCP 阻塞 10.5s🟡 PR#3994 OPEN(体量扩到 +1121)—— progressive availability

累计计数

  • 已合并 PR: 193 → 200(+7 业务 + 2 ci/refactor 不计入业务)
  • 新 OPEN:16 项(含今日 2026-05-12 新创建 PR#4069 / PR#4070)—— PR#4069/4070/4067/4064/4062/4060/4059/4053/4051/4050/4048/4045/4037/3994/3973/3975 + 之前 5 项 wenshao 系列 PR#4023/4001/3990/3989/3970

2026-05-11(~5d 增量 · 28 项合并 · prior-read 守卫链闭环(PR#4002 close #3964 + #3945)+ reactive compression 落地+硬化(PR#3879 + PR#3985)+ LiveAgentPanel 完整化 + i18n coverage(PR#3871 +6253/-4423)+ Subagent isolation 5 PR 收官)

扫描窗口:2026-05-08 → 2026-05-11 UTC。窗口内 11 项合并 + 多项关键 OPEN。本次主线:① prior-read 守卫链完整闭环(PR#4002 +707/-127 close #3964 + #3945 · 与 Claude Code 行为对齐 · 3 部分修复:cacheable 与 truncation 解耦 / detectFileType 优先 mime+扩展名 / WriteFile partial-read 死锁);② reactive compression 跟进硬化(PR#3985 +189/-18 · setup-failure 释放 send lock + 显式失败 latch + AbortSignal 传播);③ LiveAgentPanel 完整化(PR#3909 inline AgentExecutionDisplay → 始终 LiveAgentPanel;PR#3919 panel-ownership filter + post-delete statusChange);④ TUI resize 优化(PR#3967 替换 ESC[2J ESC[3J ESC[H] 全屏清屏为 cursorTo + eraseDown 定向重绘 · 消除 resize 闪屏);⑤ subagent 审批 banner 补充工具详情(PR#3956 +179/-53 · general-purpose subagent 工具调用现显示完整命令 / diff / MCP server);⑥ OTel diagnostics 静音(PR#3986 +93/-3 · exporter 连接失败不再污染 UI surface · 走 debug log path);⑦ skills 热重载 slash commands(PR#3923 +212/-4 · SkillManager.addChangeListener 触发 slashCommandProcessor.reloadCommands() · /<skill> 不再需要重启);⑧ Idealab 作为第三方 provider(PR#3955);⑨ partial reads 在 prior-read enforcement 中被接受(PR#3932 · Edit 路径 lastReadWasFull relaxed)。

🟢 MERGED(关键项)

PR标题合并时间影响
PR#4002fix(core): unify Edit/WriteFile prior-read with Claude Code; close #3964 + #39452026-05-10 06:29 UTC🌟 关联 item-2 FileReadCache prior-read 守卫链最后闭环+707/-127)—— 3 部分修复:① 解耦 cacheable 与 truncation(PR#3774 conflate 的 bug:partial / truncated 文本文件不再误报为二进制 payload);② detectFileType 优先看 mime/扩展名(新增 KNOWN_TEXT_EXTENSIONS 列表 50+ 文本扩展 .py/.kt/.go/.rs/.cpp/.cs/.vue/.svelte/.bash/.toml/.dockerfile 等),而非 isBinaryFile 4KB sample(修复 UTF-16 / encrypted FS / source-file header binary prefix 误判);③ 修 WriteFile partial-read 死锁(requireFullRead rejection 让模型回到同样 truncated 状态无逃生)。Close 高优先级用户报告 #3964(.kt/.cpp/.py/.ts Edit 失败 across 0.15.7-0.15.9 on Linux+Windows)+ #3945(large file 不可 Edit)
PR#3985fix(core): harden reactive compression follow-ups2026-05-09 15:20 UTC关联 item-10 反应式压缩+189/-18)—— 修补 PR#3879 reactive compression 三个 review 漏洞:① setup-failure 释放 send lock(不再 block 后续 send);② 显式压缩失败 latch(只 latch failed 状态,跳过 NOOP,避免反复重试白消耗 compression API);③ AbortSignal 传播到 summary generation(用户 cancel 后压缩 API 调用即时停止)
PR#3986feat(telemetry): suppress OpenTelemetry diagnostics from UI2026-05-09 15:15 UTC关联 item-26 OTel Tracing(+93/-3)—— OTel SDK diagnostics(exporter 连接失败 / 警告)原本走 console 直接污染 UI surface;改路由到现有 debug log path。诊断信息仍可用,但不再 leak 到用户可见层
PR#3967fix(cli): replace clearTerminal with targeted repaint on resize2026-05-09 10:27 UTCTUI 渲染优化(+16/-0)—— 终端宽度变化时原来写 ESC[2J ESC[3J ESC[H](全屏清屏)导致 resize 时可见闪屏。改为 cursorTo(0, 0) + eraseDown 定向重绘(仅 width 变化时触发,height-only resize 不触发)。refreshStatic() full clear 保留给显式场景
PR#3919fix(cli,core): live-phase panel-ownership filter + post-delete statusChange emit2026-05-08 05:42 UTC关联 LiveAgentPanel 完整化+676/-50)—— PR#3909 把 inline AgentExecutionDisplay 替换为 always-on LiveAgentPanel 后两个 review 跟进:① panel-ownership filter(ToolGroupMessage live phase 过滤掉 panel-owned subagent rows 避免双重渲染);② post-delete statusChange emit(subagent 完成后 panel 即时更新而不是等下一轮)
PR#3956fix(cli): show tool details in subagent approval banner2026-05-08 12:20 UTC关联 subagent UX+179/-53)—— general-purpose subagent 请求 tool permission 时 banner 只显示 agent name + 通用 Do you want to proceed?完全隐藏实际 command / file diff / MCP server。修复:把 compactMode early-return 移到 unified return path 后,让 type-specific body 在 compact 模式也渲染。Body cap 5 行 + MaxSizedBox overflow
PR#3909feat(cli): replace inline AgentExecutionDisplay with always-on LiveAgentPanel2026-05-07关联 subagent UI 架构变更——subagent 执行的"verbose inline frame"(3 档 compact/default/verbose 显示)下线,统一改为始终显示在 composer 下方的 LiveAgentPanel;与 PR#3919 / PR#3921 / PR#3922 配套形成完整 LiveAgentPanel 系列
PR#3923feat(skills): reload slash commands when SkillManager fires change event2026-05-08 14:11 UTC关联 item-9 skill 加载 / slash 命令(+212/-4)—— SkillCommandLoader.loadCommands() 之前只在 CommandService.create() 跑一次,加 / 改 SKILL.md<available_skills> tool description 更新但 slash-command list(/<skill-name>)保持 stale 直到重启。改:slashCommandProcessor 订阅 SkillManager.addChangeListener,chokidar watcher → refreshCachenotifyChangeListenersreloadCommands()。Tracks #3696 sub-task 2
PR#3932fix(core): accept partial reads in prior-read enforcement2026-05-08关联 item-2 FileReadCache(PR#4002 前置)—— Edit 路径 lastReadWasFull relaxed(接受 partial read),WriteFile 仍要求 full read。但 cacheable 与 truncation 的 conflation 留到 PR#4002 才修
PR#3916fix(core): drop disabled MCP server from health status registry2026-05-09关联 item-13 MCP Auto-Reconnect(+182/-0 同 PR#3741 footer pill)—— 禁用的 MCP server 不再出现在 health registry,footer pill 不再误显示
PR#3947[codex] Persist ACP model selection2026-05-08ACP 协议增强——ACP session 重连后 model 选择持久化(不再丢失)
PR#3955feat(cli): add Idealab as third-party provider2026-05-08关联 provider-deep-dive——增加 Idealab 作为第三方 provider
PR#3871feat(cli): core built-in i18n coverage2026-05-10🌟 大体量 i18n 国际化+6253/-4423)——核心 built-in CLI 文案 i18n 覆盖。本周最大单 PR
PR#3897perf(core): bound session-list metadata reads to head/tail 64KB; pool buffer; lazy message2026-05-10session-list 性能优化+1327/-198)——countSessionMessages 改为 head/tail 64KB sample;buffer pool;lazy message count。是 PR#3989 two-phase /resume 第一帧瞬时显示的前置基础
PR#3879feat(core): add reactive compression on context overflow2026-05-09🌟 关联 item-10 反应式压缩+797/-12)——本 item 从"完全缺失"升级为 ✓ 首次实现:捕获 prompt_too_long 错误后自动触发 reactive compression + 重试。之前所有依赖主动压缩的最后兜底现在补齐。PR#3985 是后续硬化(修补 3 个 review 漏洞)
PR#3880feat(cli): searchable /resume picker with focus-aware modes2026-05-08/resume UX 大改+1731/-109)——/resume picker 加 fuzzy search + focus-aware modes(输入态 / 选择态 / 预览态)。Closes #3977 系列;与 PR#3989 two-phase listing 协同
PR#3902fix(core): throttle shell tool live text updates2026-05-09Shell 输出节流+494/-64)——shell tool live text 更新过于频繁导致 TUI 重绘压力;加 throttle 控制刷新率
PR#3905fix(cli): unfreeze Ctrl+O compact-mode toggle on long conversations2026-05-09Ctrl+O 卡死 bug+432/-4)——长对话场景下 Ctrl+O 切 compact-mode 导致 TUI 冻结。修复渲染层堆积问题
PR#3882fix(core): filter Mistral reasoning content at request boundary2026-05-09关联 thinking 块跨 provider+210/-0)——Mistral 返回 reasoning content 但下一轮请求时未过滤,导致重复发送或 API 拒绝
PR#3963fix(cli): validate /model command arguments2026-05-08/model 参数校验+467/-63)——/model unknown-model-id 之前静默接受导致后续请求失败,加 client-side 校验
PR#3894feat(core): foreground → background promote integration (#3831 PR-2 of 3)2026-05-08Promote 系列 PR-2/3+935/-15)——shell.ts 集成 result.promoted: true 检测 + snapshot output to bg_xxx.output + 注册 BackgroundShellEntry;与 PR#3842 (PR-1 signal.reason 基础) + PR#3969 (PR-3 Ctrl+B keybind,OPEN) 组合
PR#3873fix(core): rebuild tool registry on subagent Config overrides2026-05-07Subagent isolation 5 PR 系列之一+862/-41)——subagent Config overrides 时重建 ToolRegistry,让 bound tools 解析到 subagent 自己的 view 而非父
PR#3892fix(core): close bound-tool gap on runForkedAgent's YOLO wrapper2026-05-08Subagent isolation 5 PR 系列之一+394/-48)——runForkedAgent YOLO wrapper 路径补 bound-tool 配置
PR#3887fix(core): stop per-subagent ToolRegistry on foreground-fork path2026-05-07Subagent isolation 5 PR 系列之一+69/-3)——foreground-fork 路径停掉 per-subagent ToolRegistry,避免 lifecycle 泄漏
PR#3893feat(telemetry): add sensitive span attribute opt-in2026-05-07关联 item-26 OTel+414/-52)——sensitive span attributes(如 prompt content / tool args)改为 opt-in(默认 redact),避免敏感数据自动 export 到 telemetry 后端
PR#3915fix(skills): allow symlinks pointing outside the skills directory2026-05-07关联 item-9 Skill+86/-383)——skill 目录之前禁止 symlink 指向外部路径(过度防御),导致用户用 symlink 组织 skill 库失败。改为允许 + 加路径白名单
PR#3908feat(web-templates): add light theme and toggle to /export HTML2026-05-07/export 增强(+262/-14)——/export 生成 HTML 加 light theme + toggle 按钮(之前仅 dark theme)
PR#3872fix(core): shrink file diff session records2026-05-06Session record 体积优化+616/-20)——file diff session records 之前完整保留 before/after 内容,导致长 session JSONL 膨胀。改为只存 diff hash + 上下文截断
PR#3903fix(cli): use tmux-safe dots spinner to reduce redraw pressure2026-05-07tmux 适配(+76/-3)——默认 spinner 在 tmux 下 redraw 频率过高,改为 tmux-safe dots variant
PR#3921fix(core): foreground agent entry lingering in status bar after completion2026-05-07LiveAgentPanel 系列——foreground agent 完成后 status bar entry 残留
PR#3922fix(cli): prevent ESC in background tasks dialog from cancelling running request2026-05-07LiveAgentPanel 系列——background tasks dialog 内 ESC 不再误取消主请求
PR#3875fix(core): create temp dir before saving truncated shell output2026-05-07Truncated shell output 保存(+10/-0)——长 shell 输出截断后保存到 temp 文件前先 mkdir
PR#3883fix(cli): warn on ignored provider generation config2026-05-07Provider 配置警告(+296/-5)——provider config 含未识别的 generation 字段时 warn
PR#3948fix(vscode): mark Qwen OAuth coder-model as Discontinued in model picker2026-05-08VSCode 集成+648/-17)——Qwen OAuth coder-model 在 VSCode picker 标记为 Discontinued

🟡 关键 OPEN(值得追踪)

PR方向关联
PR#4023 🟡 OPENfix(cli): auto-restore prompt and preserve queue on cancelwenshao · +1199/-47 · 关联 item-6 Mid-Turn Queue Drain——ESC 取消 prompt 时把 queue 流回 input buffer(drain on EVERY cancel path 包括 tool execution cancel)·镜像 Claude Code auto-restore-on-interrupt 行为
PR#4020 ✅ 2026-05-11 MERGEDfeat(core): improve Anthropic proxy compatibility and enable global prompt cache scopewenshao · OPEN 时 +577/-34 → MERGED 时 +1320/-37 · 关联 prompt cache + provider——IdeaLab-style Anthropic-compat proxies(Authorization: Bearerx-api-key 防双 header 冲突)+ 跨 session prompt caching(global cache scope)
PR#4022 ✅ 2026-05-11 MERGEDfeat(tools): defer low-frequency built-in tools to reduce initial prompt sizewenshao · +20/-0 · 关联 ToolSearch 延迟工具机制——Monitor / SendMessage / TaskStop / WebFetch 4 个低频 built-in tools 标记 shouldDefer=true + searchHint · 与 Claude Code 延迟策略对齐 · 减小 initial function-declaration list
PR#3969 ✅ 2026-05-11 MERGEDfeat(cli): Ctrl+B promote keybind (#3831 PR-3 of 3)wenshao · OPEN 时 +290/-15 → MERGED 时 +308/-15 · foreground → background promote feature 收官(PR-1 #3842 signal.reason + PR-2 #3894 shell.ts 集成 → 本 PR 用户可见按键 Ctrl+B)
PR#3989feat(core,cli): two-phase session listing for instant /resume first frame+1601/-310 · listSessionsLite(stat-only)+ enrichSessions(后台 hydrate)· /resume first frame 立即渲染
PR#4001feat(cli): add structured JSON schema output关联 item-4 Structured Output · --json-schema flag
PR#3990feat(vscode): add Token Plan as first-class auth providerVSCode 集成增强
PR#3970refactor(core): TaskBase envelope + foreground subagent persistencesubagent 持久化重构

🎯 重点解析 1:PR#4002 prior-read 守卫链最后闭环

PR#4002 是 FileReadCache 系列(PR#3717 → PR#3810 → PR#3774 → PR#3932 → PR#4002)的收官——把"防 plausible-but-stale Edit"的语义从"实验性约束"升级到"与 Claude Code 行为完全一致"。3 部分修复对应 3 个不同 root cause:

Part影响修复
Part 1 cache-sidepartial / truncated text reads 被 priorReadEnforcement.ts 误报为二进制 payload解耦 cacheable(仅判断 content type)与 lastReadWasFull(判断是否完整)
Part 2 detection-sideisBinaryFile 4KB sample 在 UTF-16 / encrypted FS / source-file binary header 上误判detectFileType 优先看 mime registry + KNOWN_TEXT_EXTENSIONS(50+ 文本扩展)
Part 3 WriteFile dead loopWriteFile requireFullRead 拒绝后让模型回到同样 truncated state与 Part 1 同源修复打通

Close 用户报告体量:#3964(.kt/.cpp/.py/.ts 在 0.15.7-0.15.9 across Linux+Windows)+ #3945(large file Edit 不可用)—— 这是过去 2 周用户报告最高频的 file-edit 类 bug。

🎯 重点解析 2:PR#3909 / PR#3919 LiveAgentPanel 系列完整化

subagent 执行 UI 经过从"inline frame 3 档(compact/default/verbose)"→"always-on LiveAgentPanel"的架构变更:

PR状态改动
PR#3909✓ 2026-05-07替换 inline AgentExecutionDisplay → LiveAgentPanel(panel 在 composer 下方常驻)
PR#3919✓ 2026-05-08 +676/-50live-phase panel-ownership filter(避免 ToolGroupMessage 与 LiveAgentPanel 双重渲染)+ post-delete statusChange emit
PR#3921✓ 2026-05-07foreground agent entry 完成后不再 linger 在 status bar
PR#3922✓ 2026-05-07background tasks dialog ESC 不再取消 running request
PR#3956✓ 2026-05-08subagent approval banner 加 tool details

整套系列把 subagent 执行 UI 从 "几乎不可见 + verbose 三档不直观" 改造为"始终可见 panel + approval banner 含完整工具信息"。

🟢 状态升级

Item旧状态新状态
item-2 FileReadCache prior-read 守卫链主体实现 + prior-read 局部生效完整闭环(与 Claude Code 行为一致)(PR#4002 +707/-127 close #3964 + #3945)
item-10 反应式压缩PR#3879 initial impl硬化(PR#3985 修补 3 个 review 漏洞)
OTel diagnostics UI 干净度走 console 污染 UI✓ 修复(PR#3986 走 debug log path)
subagent approval UXbanner 隐藏工具详情✓ 修复(PR#3956 显示 command / diff / MCP server)
LiveAgentPanel 完整化inline 3 档(PR#3909 前)always-on panel + ownership filter + post-delete sync
Skill slash command 热重载改 SKILL.md 需重启✓ 修复(PR#3923)
terminal resize 闪屏全屏 ESC[2J 清屏✓ 修复(PR#3967 targeted repaint)

🎯 重点解析 3:Subagent isolation 5 PR 系列收官

Subagent isolation 是 PR#3735(agent-local resource manager)以来跨多周的工程序列,确保父 daemon 与 subagent 之间不泄漏配置 / tool registry / lifecycle。本周收尾 5 PRs:

PR合并重点
PR#3735(早期)agent-local resource manager 基础
PR#38732026-05-07 +862/-41rebuild ToolRegistry on subagent Config overrides
PR#38872026-05-07 +69/-3stop per-subagent ToolRegistry on foreground-fork path
PR#38922026-05-08 +394/-48close bound-tool gap on runForkedAgent YOLO wrapper
PR#3707OPENper-agent ContentGenerator

合计 +1325 行隔离修复,让 subagent 真正以 "fork-and-isolate" 语义运行(之前有多个 sneaky 路径让父 config / tool registry 泄漏到 subagent)。这与 §02 §2 决策"1 daemon = 1 session / 进程级隔离免费"哲学一致——subagent 在同一 daemon 内也通过 isolation 套路达到类似进程级的隔离强度。

🎯 重点解析 4:i18n PR#3871 大体量国际化收官

PR#3871 (+6253/-4423) 是过去一周最大单 PR——core built-in CLI 文案 i18n 全覆盖。这是 Qwen Code 国际化路线的关键里程碑:之前散落各处的英文文案现在统一走 i18n 框架,支持中文 / 英文 / 多语言切换。-4423 删除来自旧硬编码英文常量;+6253 来自 i18n key/value 注册 + 所有调用点改为 t('key') 形式。

累计计数

  • 已合并 PR: 165 → 193(+28,含完整本期 7 天扫描窗口)
  • 本周 Top 5 体量:PR#3871 +6253/-4423(i18n) · PR#3880 +1731/-109(searchable /resume) · PR#3933 +1772/-82(codex monitor notifications)· PR#3909 +1439/-1126(LiveAgentPanel)· PR#3897 +1327/-198(session-list perf)
  • 关键 OPEN:8 项 wenshao 系列(PR#4023 cancel queue / #4020 Anthropic proxy + global cache / #4022 deferred tools / #3969 Ctrl+B promote / #3989 two-phase session list / #4001 structured JSON output / #3970 TaskBase / #3990 VSCode Token Plan)

备忘:扫描盲区检查

本期 7 天扫描共 50 项 merged PR,其中 22 项为 CI / chore / release / test infra(v0.15.7 - v0.15.10 release 链 + CI 优化 + bilingual issue commands + sdk-python release tooling),剩余 28 项业务 PR 已全部并入本期日志。CI / release 类不单独列项(在累计计数内)。

备忘:FileReadCache 系列单挑战 5 PR、跨 13 天

FileReadCache 从最初的"性能优化提案"演化到"与 Claude Code 行为对齐的可信度约束":

2026-04-30  PR#3717  +1212/-10   FileReadCache + 未变更 Read 短路
2026-05-04  PR#3810  +579/-0     5 路径 invalidation 修复(#3805)
2026-05-06  PR#3774  +1891/-118  prior-read enforcement + 2 错误码
2026-05-08  PR#3932  —           Edit 接受 partial read
2026-05-10  PR#4002  +707/-127   3 部分修复 close #3964 + #3945
———————————————————————————————————————
合计       5 PRs    +4389 行    13 天闭环

这是当前 codeagents 项目追踪的单 item 跨 PR 数最多的工程序列,验证了"feat/fix 一次提案 → 多轮 review → 多个 follow-up 直到与 reference 实现对齐"的迭代模式。


2026-05-06 第二轮(~10h 增量 · 6 项合并 · kind framework 第 4 消费者 dream 落地(PR#3836 +1714/-100)+ auto-memory recall 不阻塞 + fast model per-model 配置)

扫描窗口:2026-05-05 17:20 UTC → 2026-05-06 03:14 UTC。窗口内 6 项合并。本次主线:① Kind framework 第 4 消费者 dream 任务正式落地 + 含 cancellation(PR#3836 体量从 OPEN 时 +598 增长 3x 到 +1714/-100,scope 扩展到含 task_stop + dialog x 键 + MemoryTaskStatus 'cancelled');② auto-memory recall 不再阻塞主请求(PR#3814 修复每轮 ~5s 延迟);③ fast model side queries 用 per-model 配置(PR#3815 修复 settings 从 main model 泄漏到 fast model);④ skill 激活基于 discovered 路径(PR#3852 + 安全设计防伪造路径激活);⑤ 微信图片发送(CDN 上传)(PR#3781 channels 增强)。

🟢 MERGED(6 项)

PR标题合并时间影响
PR#3836feat(core,cli): surface and cancel auto-memory dream tasks2026-05-06 02:20 UTC🌟 Kind framework 第 4 消费者落地+1714/-100 · 体量从 OPEN 时 +598/-19 增长 3x · 标题从 feat(cli): surface 扩到 feat(core,cli): surface **and cancel**)—— 把 dream 加为第 4 种 kind(agent / shell / monitor / dream)。新增能力相比 OPEN 版本:① MemoryTaskStatus'cancelled' 状态(不只是 surface,还能 cancel);② MemoryManager.cancelTask(dialog x 键路由);③ task_stop 工具加第 4 dispatch route(模型也能 cancel dream task);④ cancellation aborts dream fork-agent + 现有 runDream finally 块释放 consolidation lock。用户行为变化:以前 dream 静默后台跑,现在每个 fired dream 在 footer pill 出现(1 dream)+ dialog 短期保留 — additive change 但用户从只看 toast 变成看 pill counter ticking
PR#3814fix(core): prevent auto-memory recall from blocking main request2026-05-05 23:34 UTC🌟 关联 item-4/5 会话记忆 / Auto Dream+419/-24 · 修复 #3759)—— 重大用户体验 bug:auto-memory recall 的 5s AbortSignal.timeout 每轮都触发,主请求路径同步 await 完整 recall promise(含 timeout + heuristic fallback),每个用户 turn 被延迟 ~5s。修复:① resolveAutoMemoryWithDeadline() 让 recall 与 2.5s deadline 赛跑,未完成则用空结果继续主请求;② model-driven selector timeout 从 5s 降到 2s;③ 用 AbortSignal.any([timeout(2_000), callerAbortSignal]) 把 deadline 通过 recall()selectRelevantAutoMemoryDocumentsByModelrunSideQuery 传播取消 in-flight LLM call。这是 PR#3087 auto-memory 系列的关键性能修复
PR#3815fix(core): use per-model settings for fast model side queries2026-05-05 18:07 UTC🌟 关联 fast-model-usage-deep-dive 整体设计+544/-2 · 修复 #3765)—— side queries(session recap / title generation / tool-use summary)走 fast model 时用了 main model 的 ContentGeneratorConfig,导致 main model 的 extra_body / samplingParams / reasoning 设置泄漏到 fast model 请求典型案例:main model extra_body.enable_thinking: true,fast model extra_body.enable_thinking: false —— side query 仍发 enable_thinking: true 给 fast model(因为用的 main model config)。修复:GeminiClient.generateContent() 在请求 model ≠ main model 时通过 buildAgentContentGeneratorConfig()(与 subagents 同模式)解析目标 model 自己的 ContentGeneratorConfig + 创建专用 ContentGenerator
PR#3852fix(core): activate skills from discovered result paths2026-05-05 17:57 UTC关联 item-9 指令条件规则 + item-28 Skill 装载(+656/-56)—— path-conditional skill 激活之前只看 tool 输入路径,但 broad selector(如 **/*.ts)能 discover 到具体文件路径,被遗漏。本 PR 让 scheduler 也考虑 discovery 工具(glob / grep_search / ripGrep)的具体结果路径。安全设计:仅信任 filesystem 工具的 result-side metadata + 用 structured ripgrep 输出避免伪造路径激活
PR#3781feat(weixin): add image sending support via CDN upload2026-05-05 17:49 UTCChannels 增强(+954/-46)—— 微信适配器加 CDN 图片上传支持(与 PR#2628 channels 平台延续)
PR#3832fix(sdk-python): standardize TAG_PREFIX to include v suffix2026-05-06 03:14 UTCsdk-python release 工具修复(+6/-6)

🟡 关键 OPEN(值得追踪)

PR方向关联
PR#3860chore(deps): upgrade ink 6.2.3 → 7.0.2 + bump Node engine to 22重大依赖升级(+6258/-7915 lockfile)—— Ink 7 要求 Node ≥22 + React ≥19.2 + react-reconciler 0.33。No source code changes —— ink 6→7 API 兼容(公开 surface 一致),用户可见的渲染优化"once Ink 7 loaded"自动激活。涉及 TUI 渲染稳定性(item-44 瞬态消息容器
PR#3861fix(cli): preserve comments and formatting in settings.json during migration write-backsettings 迁移 write-back 时保留 JSON 注释 + 格式 —— Qwen .qwen/settings.json 用户可能写注释,迁移时不应抹掉

🎯 重点解析 1:kind framework 第 4 消费者闭环(PR#3836)

回顾时间线subagent-display §零):

时间PR消费者数验证内容
2026-04-28PR#34881(agent)引入 framework
2026-04-29PR#37202(+ shell)shell 接入
2026-05-03PR#37913(+ monitor)monitor 接入 + Lint fix const _exhaustive: never
2026-05-06PR#38364(+ dream)dream 接入,含 cancellation

OPEN → MERGED 体量爆涨原因:OPEN 版(+598)原本 scope-out 了"PR-2 cancellation"("requires MemoryManager.cancelTask + dream-fork abort + lock rollback"),MERGED 版(+1714)直接把 PR-2 也合进来了——这意味着:

  • 不再需要等下一个 PR 实现 cancellation
  • task_stop 工具的 dispatch 表现在覆盖全部 4 种 kind
  • dialog x 键对所有 4 种 kind 行为一致

zero core-package changes 假设被推翻:OPEN 版称"复用 MemoryManager.subscribe(),zero core-package changes",MERGED 版实际改了 coreMemoryTaskStatus'cancelled' + MemoryManager.cancelTask 新方法)。但这是有意识的架构决策——既然 dialog 提供 x 键,就应该把 cancellation 做到底,而不是只 surface。

🎯 重点解析 2:auto-memory 系列 5s 阻塞 bug 终结

PR#3814 修复的是 PR#3087 auto-memory 系列引入的性能 regression

旧路径:每个 user turn → recall() 同步 await(含 5s timeout)→ 主请求开始
       └─ 即使 recall 失败/超时,主请求也被强制等 5s
新路径:每个 user turn → 启动 recall promise → 2.5s deadline 赛跑
       ├─ 2.5s 内完成 → 用 recall 结果
       └─ 2.5s 未完成 → 空结果继续主请求 + abort recall(取消 in-flight LLM call)

用户感知:每轮节省 ~2.5-5s 延迟(特别是 fast model side queries 慢的场景)。

🎯 重点解析 3:fast model 配置泄漏问题(item-22 思想延伸)

PR#3815 修复了一个微妙但严重的配置泄漏:side queries 走 fast model 时用了 main model 的 ContentGeneratorConfig。这与 item-22 thinking 块 series 的思想一致——不同模型有不同 API 形态,配置必须 per-model 解析而不是全局共享。

修复方法用与 subagents 相同的 buildAgentContentGeneratorConfig() 模式——"per-agent ContentGenerator view"已经是 Qwen Code 的成熟工程模式。

🟢 状态升级

Item旧状态新状态
Kind framework 消费者数3(agent + shell + monitor)4(+ dream)含 cancellation 全套
auto-memory recall 阻塞每轮 ~5s 延迟 bug✓ 修复(PR#3814 deadline 赛跑 + abort 传播)
fast model 配置隔离从 main model 泄漏✓ 修复(PR#3815 per-model ContentGeneratorConfig
path-conditional skill 激活仅看 tool 输入路径✓ 含 discovered 路径 + 安全防伪造(PR#3852)

累计计数

  • 已合并 PR: 159 → 165(+6)
  • 关键 OPEN PR:本轮新增 PR#3860(Ink 7 升级 + Node 22)+ PR#3861(settings.json 注释保留)

备忘:Ink 7 升级带来的"白嫖"渲染优化

PR#3860 自述:"No business code changes — only deps, lockfile, docs"。Ink 6→7 API 兼容,但 user-visible 渲染改进自动激活(once Ink 7 loaded)。这与之前 item-44 / 焦点锁等 TUI flicker 系列工作互补——很多 flicker 问题在 Ink 7 中已上游修复。建议合并后审计是否有 item-44 / item-46 / item-47 等系列任务因 Ink 7 而自动 ✓


2026-05-06(~24h 增量 · 6 项合并 + 12 项关键 OPEN · WebSearch 工具回归(PR#3844)+ Issue #3841 引用 web-search-tool-deep-dive 分析)

扫描窗口:2026-05-04 17:20 UTC → 2026-05-05 17:20 UTC。窗口内 6 项合并 + 12 项关键 OPEN。本次主线:① WebSearch 工具回归(PR#3502 ✓ 2026-04-24 移除 1,830 行 → PR#3844 OPEN 2026-05-05 重新添加,但 Issue #3841 直接引用 codeagents 项目的 web-search-tool-deep-dive.md 跨产品对比分析——文档影响产品决策的具体案例);② MCP coalesce 落地(PR#3818 +239/-2);③ shell-escaped 文件路径修复(PR#3820 +561/-168);④ OTel telemetry shutdown timeout(PR#3813 +130/-3)。

🟢 MERGED(6 项)

PR标题合并时间影响
PR#3820fix(core): unescape shell-escaped file paths in Edit, WriteFile, and ReadFile tools2026-05-04 17:33 UTC正确性 bugfix+561/-168)—— 加 unescapePathvalidateToolParamValues 中规范化(含 Edit / ReadFile / WriteFile + CoreToolScheduler 条件规则匹配)。LLM 可能从 at-completion 或人工输入收到 shell-escaped 路径如 my\ file.txt,转换为 my file.txt 后才执行。修复"含空格/括号/&等特殊字符的文件名"被报"file not found"的问题
PR#3818fix(core): coalesce MCP server rediscovery2026-05-05 10:31 UTC关联 item-13 MCP Auto-Reconnect(+239/-2)—— 同 server 的并发 rediscovery 请求共享 in-flight restart,不再独立启动 replacement clients;rediscovery 替换连接前停掉旧 health-check timer。修复多个 reconnect/restart 路径并发尝试替换同一连接导致额外 MCP 进程游离(无 tracked client)
PR#3813fix(telemetry): add bounded shutdown timeout and fix service.version resource attribute2026-05-05 03:12 UTC关联 item-26 OTel Tracing(+130/-3)—— 关闭时无界等待修复 + service.version resource attribute 修正
PR#3834refactor: extract shared release helper utilities2026-05-05 02:15 UTCsdk-python release 工具复用(+211/-108)
PR#3833feat(sdk-python): add network timeouts to release version helper2026-05-05 11:25 UTCsdk-python release 网络超时(+105/-3)
PR#3783feat(cli): Add ability to switch models non-interactively from the cli2026-05-05 16:54 UTC配套 PR#3797 / PR#3799 形成模型管理三件套(+92/-17)—— headless 切模型 CLI 入口;与已 OPEN 的 /model list + 跨 OpenAI-compat 端点响应规范化形成完整 headless 模型管理

🟡 关键 OPEN(值得追踪 12 项)

PR方向关联
PR#3844feat(tools): add WebSearch tool with prompt-injection defenses🌟🌟🌟 WebSearch 工具回归(+1238/-3 / 11 文件)—— Issue #3841 直接引用 codeagents web-search-tool-deep-dive.md 的跨产品对比 + 路径 A/B/C 框架;本 PR 实现 path C:DashScope-compat provider 显式 web_search 工具 + Claude Code-style 7 层 prompt-injection 防御(max_uses=8 via WeakMap、MAX_RESULT_SIZE_CHARS=100K、allowed_domains/blocked_domains、加入 COMPACTABLE_TOOLS / BOUNDARY_TOOLS)。15 新测试。意义:填补本系列长期追踪的 WebSearch gap 同时与 PR#3502(2026-04-24 删除 1,830 行原 4-provider 实现)形成"删除→反思→Claude-style 重新设计"完整循环
PR#3850refactor(core): classify retry errors关联 item-8 + 已 OPEN PR#3798 + PR#3827 —— retry 系统统一化重构。这是 retry 三件套(classify + delay policy + rate-limit handling)的进一步整合
PR#3849feat(models): add cross-authType model resolution to ModelRegistry and ModelsConfig跨认证方式(OAuth / API key / 等)的模型解析统一
PR#3852fix(core): activate skills from discovered result paths关联 item-28 Skill 装载 —— 从 discovered result paths 激活 skill
PR#3848fix(memory): route auto-memory recall selector to fast model关联 item-4/5 会话记忆 + Auto Dream + fast model 应用 —— auto-memory recall selector 走 fast model(参考 fast-model-usage-deep-dive 第 6 项
PR#3847feat(telemetry): inject traceId/spanId into debug log files for OTel correlation关联 item-26 OTel —— debug 日志与 OTel span 关联
PR#3842feat(core): add signal.reason convention for ShellExecutionService (#3831 PR-1 of 3)新 3 件套预告 —— ShellExecutionService 重构系列首 PR(标题写明 "PR-1 of 3")
PR#3840feat(core): refuse Edit/WriteFile when the file changed since last read关联 item-2 FileReadCache + PR#3774 prior-read enforcement —— 文件 last read 后被外部修改时拒绝 Edit/WriteFile(与 PR#3774 是双轨:3774 要求"必须先 read",3840 要求"read 后未变" · 是 prior-read enforcement 的另一面)
PR#3856feat(cli): polish --add-dir / --include-directories feature--add-dir 用户体验抛光
PR#3855feat(installer): verify installation release assetsinstaller 验证
PR#3853feat(installer): add hosted install release aliasinstaller hosted alias
PR#3854ci: add Qwen Code issue follow-up bot workflowissue 跟进 bot

🎯 重点解析:WebSearch 工具的"删除→反思→Claude-style 重新设计"循环

PR#3844 的合并将完成Qwen Code 的 WebSearch 工具完整循环

时间事件
PR#3502 之前Qwen Code 内置 web_search 工具 + 4 providers(DashScope/Tavily/Google/GLM)
2026-04-21Issue #3496 "webSearch功能,在免费份额停掉以后是不是也无法使用了" 提出(已 closed)
2026-04-24PR#3502 ✓ 合并 —— 删除全部 web_search(+167/-1830 净删 1,663 行 + 4 providers + cli flag + env var)转为 "MCP-based approach",理由:"built-in tool required maintaining provider-specific integrations and API key plumbing... while MCP already provides a cleaner, more extensible mechanism"
2026-05-04codeagents 项目发布 web-search-tool-deep-dive.md —— 对比 5 大 Code Agent + Bailian 后端,记录 Qwen Code 此时"完全缺失"WebSearch + 提出 path A/B/C 改进路径
2026-05-05 04:33 UTCQwen Code 团队成员发起 Issue #3841 "feat(tools): add WebSearch support (start by passing through DashScope enable_search)" —— 直接引用 codeagents 文档的跨产品对比表 + 数字(569/39/71/163/0)+ path A/B/C 框架
2026-05-05PR#3844 OPEN —— 实现 path C,但带 Claude Code-style 7 层 prompt-injection 防御(max_uses=8 / MAX_RESULT_SIZE_CHARS=100K / allowed_domains 25 / blocked_domains client-side / COMPACTABLE_TOOLS / BOUNDARY_TOOLS / safety footer + warning)—— 比删除前的 4-provider 版本架构更稳健

架构演进意义:从"自建 4 provider 各打 API"→"MCP 完全外部化"→"DashScope 单 provider + Claude-style 防御"。最终方案不是 PR#3502 的 MCP only,也不是删除前的 4-provider all-in-one,而是吸收 Claude Code 安全设计后的 "1 default provider + MCP fallback"——这是被 codeagents 文档引导出的设计决策。

🟢 状态升级

Item旧状态新状态
WebSearch 工具完全缺失(PR#3502 删除后)🟡 回归进行中(PR#3844 OPEN,含 Claude-style 7 层防御)
MCP Auto-Reconnect🟡 部分(reconnect-on-error)🟡 部分 + rediscovery 并发合并(PR#3818 ✓ 修复同 server 并发 reconnect 留游离进程)
shell-escaped 路径处理bug✓ 修复(PR#3820 +561/-168)
OTel telemetry shutdown无界等待✓ bounded(PR#3813)

累计计数

  • 已合并 PR: 153 → 159(+6)
  • 关键 OPEN PR:本轮新增 12 项(含 PR#3844 WebSearch 回归 + retry 三件套整合 + ShellExecutionService 重构 PR-1/3 + auto-memory fast model 路由 + ...)

备忘:codeagents 文档影响产品决策的首例

Issue #3841 + PR#3844 是codeagents 项目的分析直接影响 Qwen Code 团队设计决策的首个案例

  1. 我们的 deep-dive 提供了精确的跨产品对比数据(569/39/71/163/0 LOC)
  2. 我们的"path A/B/C"框架被原文引用
  3. PR 选择了 path C 而非 path B(最小改动),并加上了 path C 章节"Mandatory Prompt Injection Defenses"列出的所有 Claude-style 防御项

这印证了 codeagents 项目"基于源码验证的中立技术对比"价值——不只是文档化已有事实,还能为产品改进提供可执行的工程蓝图


2026-05-05(OPEN-only 增量 · kind framework 第 4 个消费者 dream 任务出现)

扫描窗口:2026-05-04 15:32 UTC → 2026-05-04 17:20 UTC。窗口内 0 项合并 + 1 项关键新 OPEN + 4 项 sdk-python release 工具 OPEN。本次主线:PR#3836 OPEN —— kind framework 从 3 消费者扩到 4 消费者(agent / shell / monitor / dream),把 auto-memory dream tasks 接入 Background tasks pill+dialog 统一调度面,进一步压测 PR#3488 / PR#3720 引入的 framework 是否真正 generic。

🟡 关键 OPEN(值得追踪 1 项)

PR方向与已有 item 关系
PR#3836feat(cli): surface auto-memory dream tasks in Background tasks dialog🌟 Kind framework 第 4 个消费者(+598/-19)—— 今天 managed auto-memory dream 任务(每 UserQuery 通过 MemoryManager.scheduleDream 调度)静默后台跑,用户只能见 memory_saved toast。本 PR 加 dream 为第 4 种 kind:footer pill 含 dream 计数;dialog 列表 [dream] memory consolidation reviewing N sessions;detail body 显示 sessions / progress / topics / failures。关键设计:复用 MemoryManager.subscribe() / listTasksByType() —— zero core-package changesMAX_RETAINED_TERMINAL_DREAMS = 3 镜像 MonitorRegistry 终端 cap;pending/skipped 过滤;extract tasks intentional 排除(每 UserQuery 触发 flood)。Scope-out:PR-2 cancellation;PR-3 live progress(需 runForkedAgentonAssistantMessage callback 涉及 4 调用点)。关联 item-4 会话记忆 / item-5 Auto Dream + subagent-display Background tasks dialog 设计

🎯 重点解析:kind framework 真正 generic 的证据链

PR#3488 引入 BackgroundTasksDialog 时只有 1 个消费者(agent),存在"generic 是声称还是事实"的悬念。后续 PR 逐步压测:

时间线消费者数PR验证内容
2026-04-281(agent)PR#3488引入 framework
2026-04-292(agent + shell)PR#3720shell 接入,framework 第一次外部验证
2026-05-033(agent + shell + monitor)PR#3791monitor 接入(kind framework 第三个消费者,Lint fix 加 default: { const _exhaustive: never }
2026-05-04 OPEN4(+ dream)PR#3836dream 接入,zero core-package changes —— framework 真正 generic 的最强证据

zero core-package changes 的意义:第 1 / 2 / 3 个消费者每加一个都需要 core 改动(新 registry 类、新 callback 接口)。第 4 个消费者 dream 复用 MemoryManager 已有 API 即可 —— 这说明 framework 的"generic 抽象"不仅仅是命名,是真的能不修改 core 就接入新 kind。

🟡 sdk-python release 工具系列 OPEN(4 项)

PR#3833 / PR#3834 / PR#3835 / PR#3832 是 sdk-python 包的 release 自动化工具改进(network timeouts / extract shared helpers / --generate-notes / TAG_PREFIX 标准化)。与改进 item 无直接关联,仅在此处登记。

状态

  • 已合并 PR: 153(无变化)
  • 关键 OPEN PR:新增 PR#3836(dream 任务接入 dialog)

备忘:Background tasks framework 演进观察

5 月份连续 4 周 PR 围绕 Background tasks 系统迭代——从 PR#3471/3488 控制面引入到 PR#3836 第 4 消费者扩展,Qwen Code 的"统一调度面"是这个月最一致的工程主题。建议为这个主题专门补一篇 deep-dive("Kind Framework Deep-Dive"),系统记录从 PR#3488 到 PR#3836 的设计演进。


2026-05-04(~28h 增量 · 6 项合并 + 9 项新 OPEN · Phase D part(a) 收官 + DeepSeek max tier 落地 + FileReadCache 关键 invalidation 修复)

扫描窗口:2026-05-03 11:30 UTC → 2026-05-04 15:32 UTC。窗口内 6 项合并 + 9 项新 OPEN。本次主线:① Phase D part (a) 收官(PR#3809 +649/-1 合并,体量从 OPEN 时 +130 增长 5 倍 · 关键设计精化:阈值改为"effective timeout 的一半"per-invocation 含 1000ms floor);② DeepSeek max tier 落地(PR#3800 +926/-80 合并 · 体量从 OPEN 时 +516 大幅增长);③ PR#3810 FileReadCache 关键 invalidation 修复(+579/0 · 修复 #3805 "read tool returns no content in long-running sessions" · PR#3717 漏掉 5 条 history-rewrite 路径的清缓存逻辑);④ PR#3792 post-merge cleanup 体量翻倍(+664/-227 vs OPEN 时 +199/-199);⑤ 多项性能/可靠性新方向 OPEN(MCP coalesce + retry policy 统一 + auto-memory 不阻塞主请求)。

🟢 MERGED(6 项)

PR标题合并时间影响
PR#3809feat(core): hint to background long-running foreground bash commands2026-05-04 15:24 UTC🌟 Phase D part (a) 收官+649/-1 · 体量从 OPEN 时 +130 增长 5 倍 · 5 commits)—— 关键设计精化:阈值不是固定 60 秒,而是effective timeout 的一半(per-invocation),1000ms floor。default-timeout(120s)调用在 60s 出 advisory;显式 timeout: 600_000 在 300s 出;pathological tiny timeouts(timeout: 1)不会冒出"ran for 0s" advisory。Advisory 显式警告"别重跑刚完成的命令"——matters for stateful operations like deploys / migrations / git push。配合 PR#3684 sleep interception(validate 时),形成完整双层"长跑后台化"防御
PR#3800feat(core): support reasoning effort 'max' tier (DeepSeek extension)2026-05-04 14:42 UTC🌟 DeepSeek max tier 落地+926/-80 · 体量从 OPEN 时 +516/-57 大幅增长 · 直接命中 reasoning-effort-deep-dive §3.3 推荐实施方案 Step 1+2)—— ContentGeneratorConfig.reasoning.effort 联合类型加 'max';deepseek provider translateReasoningEffort()reasoning.effort 扁平化为 reasoning_effort body 参数;backward-compat:low/mediumhighxhighmax;Anthropic generator thinking.budget_tokens 阶梯:low 16K / med 32K / high 64K / max 128K
PR#3810fix(core): clear FileReadCache on every history rewrite path2026-05-04 14:42 UTC🌟 关键正确性 bugfix+579/-0 · 修复 #3805 "read tool returns no content in long-running sessions")—— PR#3717 漏检的 5 条 history-rewrite 路径:原 PR#3717 wired invalidation 到 tryCompressChat + Config.startNewSession 两条路径,但漏掉:① microcompactHistory(idle cleanup ≥60min);② GeminiClient.setHistory/restore / /load_history);③ GeminiClient.truncateHistory(rewind);④ GeminiClient.resetChat(public API);⑤ stripOrphanedUserEntriesFromHistory(retry path)。每路径单 getFileReadCache().clear() + 集成测试用真实 ReadFileTool / on-disk 文件验证 bug 真实存在。意义:FileReadCache 的占位符依赖 prior tool result 仍在 history,history rewrite 后必须 invalidate;遗漏导致 Read 在 tool 层成功但 LLM 拿到空内容
PR#3792fix(core): address post-merge monitor tool and UI routing issues2026-05-04 13:19 UTCPR#3684 review 反馈清扫(+664/-227 · 体量从 OPEN 时 +199/-199 增长 3.3 倍)—— Token bucket clock-drift guard / AST parse failure logging / 合并 SHELL_TOOL_NAMES / 抽 background-work utils / getToolCallComponent 路由统一 + web_search 兼容别名
PR#3808docs(core): point background-shell + monitor guidance at both /tasks and the dialog2026-05-04 14:27 UTCPR#3801 docs follow-up(+24/-12)—— shell.ts / task-stop.ts 的 model-facing 字符串从只引用 /tasks 升级为同时提及 dialog(让 LLM 根据 TTY/headless/SDK/ACP 模式建议对的 surface)
PR#3807fix(telemetry): suppress async resource attribute warning on startup2026-05-03 11:36 UTC关联 item-26 OTel(+13/0)—— NodeSDKautoDetectResources: false 消除每次启动打印的 "Accessing resource attributes before async attributes settled" warning

🟡 关键 OPEN(值得追踪 9 项)

PR方向关联
PR#3827refactor(core): unify retry delay policy关联 item-8 API 指数退避 —— retry delay 策略统一抽象。配合已 OPEN 的 PR#3798(classifyError)+ PR#3790(rate-limit retry handling)形成 retry 系统三件套
PR#3818fix(core): coalesce MCP server rediscovery关联 item-13 MCP Auto-Reconnect —— 多次并发重发现合并为一次
PR#3819fix(core): prevent duplicate MCP processes from concurrent discovery配套 PR#3818 —— 防止并发 discovery 起重复 MCP 进程
PR#3814fix(core): prevent auto-memory recall from blocking main request关联 item-4 会话记忆 / item-5 Auto Dream —— PR#3087 auto-memory 在主请求路径上同步召回,本 PR 解阻塞
PR#3815fix(core): use per-model settings for fast model side queries关联 fast model 路由 —— side queries 用 per-model 配置而非全局默认
PR#3820fix(core): unescape shell-escaped file paths in Edit/WriteFile/ReadFile文件路径处理 bug —— shell-escaped 路径在 file 工具中未 unescape
PR#3813fix(telemetry): bounded shutdown timeout + service.version resource attribute关联 item-26 OTel —— 关闭时无界等待 + service.version 资源属性
PR#3826fix(cli): track model-sent slash command history模型发出的 slash 命令也记录到 history(headless / SDK 路径)
PR#3828feat(installer): publish release installer assets与 PR#3776 standalone archive installation 配套

🎯 重点解析 1:Phase D part (a) 阈值精化(PR#3809)

OPEN 版本(+130/0)阈值为固定 60 秒;MERGED 版本(+649/-1)改为effective timeout 的一半

场景OPEN 行为MERGED 行为
default timeout(120s)的命令跑 90s60s 出 advisory(合理)60s 出 advisory(不变)
显式 timeout: 600_000 跑 400s60s 出 advisory(过早——300s 才合理)300s 出 advisory(per-invocation 适配)
病态 timeout: 1 的命令跑 0.5s0.05s 出 advisory("ran for 0s" 噪声)1000ms floor 不出(避免噪声)

Advisory 显式警告:not just "use is_background next time",还包括 "别重跑这条刚完成的命令"——这是 stateful 操作(deploys / migrations / git push)的真实风险点。这种"防止 LLM 误以为 advisory 是建议立刻重跑"的细节是合并前 review 中加的——OPEN 时是裸 advisory,MERGED 时加 stateful 警告。

🎯 重点解析 2:FileReadCache invalidation 漏检(PR#3810)

PR#3717 引入 FileReadCache(item-2)时,invalidation 只 wired 进 2 条路径。本 PR multi-round 审计暴露了 5 条遗漏路径——这是个架构层 audit 发现的真实正确性 bug(不是性能问题):

路径触发场景原 PR#3717 是否清缓存
tryCompressChatauto compaction
Config.startNewSession/clear、session resume
microcompactHistoryidle cleanup(≥60min)✗ → ✓ 本 PR 修
GeminiClient.setHistory/restore/load_history✗ → ✓ 本 PR 修
GeminiClient.truncateHistoryrewind✗ → ✓ 本 PR 修
GeminiClient.resetChat公共 API✗ → ✓ 本 PR 修
stripOrphanedUserEntriesFromHistoryretry path✗ → ✓ 本 PR 修

用户可见症状:长会话中 Read 工具调用看似成功但模型拿到空内容(file_unchanged 占位符指向已被 history rewrite 删掉的 prior tool result)。集成测试用真实 ReadFileTool + on-disk 文件 + 真实 microcompactHistory 复现 bug,是工程上扎实的回归保障。

🟢 状态升级

Item旧状态新状态
Background tasks roadmap #3634 Phase D part (a)🟡 OPEN收官
item-2 文件读取缓存🟡 主体已实现 + invalidation 在 2 条路径🟡 主体已实现 + invalidation 在 7 条路径全覆盖(PR#3810)
DeepSeek reasoning_effort 'max' tier🟡 OPEN落地(PR#3800 +926/-80)

累计计数

  • 已合并 PR: 147 → 153(+6)
  • 关键 OPEN PR:本轮新增 9 项(retry 三件套配套 + MCP coalesce 双件 + auto-memory + fast model + 文件路径 + telemetry + slash history + installer)

备忘:retry 系统三件套即将落地

PR#3798(classifyError)+ PR#3790(rate-limit retry handling)+ PR#3827(unify retry delay policy)形成 API 重试系统的三件套——合并后 item-8 P1 API 指数退避将从"只有 SSE 429 检测"升级到完整的"分类 + 退避 + 重试调度"框架。


2026-05-03 第三轮(~9h 16min 增量 · 1 项合并 + 3 项关键 OPEN · Phase B 收官 + Phase D 开启 · /tasks 含 monitors + 长跑 foreground bash 后台化提示)

扫描窗口:2026-05-03 02:14 UTC → 2026-05-03 11:30 UTC。窗口内 1 项合并 + 3 项关键 OPEN。本次主线:① Phase B 完整收官(PR#3801 把 monitors 加入 /tasks + interactive 模式 hint,关闭 issue #3634 Phase B 留给"delete / keep as fallback / deprecation hint—选其一"的开放问题,最终采用"keep + add hint scoped to interactive mode"混合方案);② Phase D 开启(PR#3809 OPEN — 长跑 foreground bash 命令完成时提示模型下次用 is_background: true);③ 多项 ergonomics 修复(telemetry 启动 warning + 文档对齐)。

🟢 MERGED(1 项)

PR标题合并时间影响
PR#3801feat(cli): include monitors in /tasks + add interactive-mode hint2026-05-03 10:45 UTC🌟 Phase B 完整收官+401/-39 · Issue #3634 Phase B closure)—— 两个耦合改动:① Bug 修复/tasks 命令在 PR#3684/3791 之前最后修改过,只合并了 agent + shell 而 monitors 在 headless / non-interactive / ACP 列表路径上静默消失。本 PR 加上 getMonitorRegistry() 并把 monitor 穿过所有 helper(statusLabel / taskLabel / taskId / taskOutputPath);② Surface redirect(不是删除):富 Ctrl+T dialog(PR#3488/3720/3791)已可用后,/tasks 变为非 TTY 消费者的 long-form fallback而非主要 surface。executionMode === 'interactive' 时输出顶部加一行 hint,non_interactive / acp 保持纯列表。架构决策:Issue #3634 Phase B 留下"delete / keep as fallback / add deprecation hint—pick one"的开放问题,本 PR 最终采用 "keep + add hint scoped to interactive mode"——/tasksnon_interactive-p flag)、acp(IDE bridges 如 Zed)、SDK consumer 的唯一后台任务检查路径,删除会静默破坏;但"deprecation hint"暗示有 removal path,实际并无——/tasks 对非 TTY 路径无限期保留

🟡 关键 OPEN(值得追踪)

PR方向与已有 item 关系
PR#3809feat(core): hint to background long-running foreground bash commands🌟 Phase D 开启 part (a)已于 2026-05-04 15:24 合并 +649/-1(详见 2026-05-04 changelog · 阈值改为"effective timeout 的一半"per-invocation 含 1000ms floor,advisory 显式警告别重跑刚完成的命令——matters for stateful ops 如 deploys/migrations/git push)
PR#3808docs(core): point background-shell guidance at both /tasks and the dialogPR#3801 follow-up已于 2026-05-04 14:27 合并 +24/-12
PR#3807fix(telemetry): suppress async resource attribute warning on startup关联 item-26 OTel已于 2026-05-03 11:36 合并 +13/0

🎯 重点解析:Background tasks roadmap (#3634) 四阶段全图

PR#3801 + PR#3809 让 #3634 的全貌浮现:

Phase内容状态
A后台 subagents(PR#3076 早期合并)
BManaged background shell pool + /tasks 命令 + dialog/pill 整合本轮收官(PR#3642 + PR#3720 + PR#3801)
CEvent monitor tool(spawn 长跑 shell + token-bucket 节流 + Monitor → dialog 集成)✓(PR#3684 + PR#3791)
D part (a)长跑 foreground bash 完成时提示模型下次后台化🟡 OPEN(PR#3809)

双层 sleep / 长跑防御

时机机制实现
validate 时shell 层 sleep 拦截PR#3684 拦截前台 sleep N(N≥2)
result 时LLM nudgePR#3809 OPEN ≥60s 后台化 hint

Phase D 后续 part (b/c/...) 待观察。

🟢 状态升级

Item旧状态新状态
Background tasks roadmap #3634 Phase B打开(PR#3801 OPEN)收官
Phase D(长跑 foreground 后台化提示)未开始🟡 part (a) OPEN(PR#3809)

累计计数

  • 已合并 PR: 146 → 147(+1)
  • 关键 OPEN PR:新增 PR#3809(Phase D)、PR#3808(PR#3801 docs follow-up)、PR#3807(OTel startup warning)

备忘:roadmap 视角的价值

把 PR 按 Issue #3634 Phase A/B/C/D 串起来比按时间堆 changelog 更能看出 Qwen 团队的设计意图。建议下一轮在 changelog 头加"Roadmap 进度"小节,明确各 phase 状态。


2026-05-03 第二轮(~98 分钟增量 · 2 项合并 + 1 项关键 OPEN · Phase C dialog 集成正式合并 + 非交互错误打印修复 + DeepSeek max reasoning effort)

扫描窗口:2026-05-03 00:36 UTC → 2026-05-03 02:14 UTC。窗口内 2 项合并 + 1 项关键 OPEN。本次主线:① PR#3791 Phase C dialog 集成正式合并(体量从 OPEN 时的 +357/-40 增长到 +791/-49 · 8 文件 / 2 commits · kind framework 真正 cross-kind 验证);② PR#3749 非交互模式 API 错误打印修复(+308/-27 · 3 处独立站点的双重格式化收敛到 AlreadyReportedError marker + handleError short-circuit);③ PR#3800 DeepSeek reasoning_effort: 'max' 路线打开(+516/-57 OPEN · 直接命中 reasoning-effort-deep-dive §3.3 推荐实施方案 Step 1+2)。

🟢 MERGED(2 项)

PR标题合并时间影响
PR#3791feat(cli): wire Monitor entries into combined Background tasks dialog2026-05-03 02:05 UTC🌟 Phase C dialog 集成正式合并+791/-49 · 体量从 OPEN 时 +357/-40 翻倍 · 8 文件 / 2 commits)—— kind framework 现有 三个真实消费者(agent / shell / monitor),把"generic framework"从声称变为证据。新机制:core MonitorRegistry.setStatusChangeCallback 镜像 BackgroundShellRegistry / BackgroundTaskRegistry 的 sync-fire-on-register 模式;CLI hook 监听 + pill / dialog / context 三层接入;详情视图按 kind 派发新增 MonitorDetailBody(command / status / pid / event count / dropped lines);x 键路由 monitorRegistry.cancel(monitorId) 同步 settle 与 task_stop 一致。Commit 7999b85 lint fix 是有意义的工程实践:5 个新 switch 的 default: { const _exhaustive: never = entry; throw ... } 同时保运行时 guard 和编译期 exhaustiveness 检查(4th kind 出现时 TS 立即指出 5 个 site 需新加 arm)
PR#3749fix(cli): stop double-wrapping and double-printing API errors in non-interactive mode2026-05-03 00:39 UTC非交互错误打印路径修复(+308/-27)—— 用户从 gateway 看到 routine 4xx 时 CLI 报"An unexpected critical error occurred"+ 三行重复内容(parseAndFormatApiError 在已 wrap 输出上再 wrap)。修复:① 新 AlreadyReportedError marker;② handleError short-circuit;③ parseAndFormatApiError 加 idempotency guard 作安全网;④ nonInteractiveCli.ts catch 块 TEXT 模式跳过 adapter emit 当错误已标记。意义:非交互输出对 CI / 脚本调试极重要,"上下文错误信息一行就够"是合理体验

🟡 关键 OPEN(值得追踪)

PR方向与已有 item 关系
PR#3800feat(core): support reasoning effort 'max' tier (DeepSeek extension)🌟 直接命中 reasoning-effort-deep-dive §3.3 推荐实施方案 Step 1+2已于 2026-05-04 14:42 合并 +926/-80(体量从 OPEN 时 +516/-57 大幅增长,详见 2026-05-04 changelog)

🎯 重点解析:PR#3791 — kind framework 从声称到证据

PR#3720(shell)+ PR#3791(monitor)是 kind framework 的两次外部验证——PR#3488 引入抽象时只有 agent 一个消费者,无法验证抽象是否合理;PR#3720 加 shell 是第二个;PR#3791 加 monitor 是第三个,真正证明 framework 是 cross-kind 而非"为 agent 量身的特例代码"。

Before/After 对比

维度Before(PR#3791 之前)After(PR#3791 合并后)
pill 显示1 shell, 1 local agent1 shell, 1 local agent, 2 monitors,全部终止后塌陷为 N tasks done
Ctrl+T overlayagent + shell 行单 Background tasks 区域含三类,monitor 行前缀 [monitor] <description>
Cancel 键 x无法停 monitor路由 monitorRegistry.cancel(monitorId) 同步 settle
Detail viewagent / shell 各自 body按 kind 派发,monitor 走新 MonitorDetailBody(command / status / pid / event count / dropped lines)

剩余 gap:PR#3684 自述"未做"第 2 项 send_message 集成仍未在 PR#3791 范围内(task_stop 路径在 PR#3791 中顺带覆盖 via x 键)。

🟢 状态升级

Item旧状态新状态
subagent-display §零 Phase C dialog 集成PR#3791 OPEN✓ 已合并(kind framework 三消费者验证完成)
CLI 非交互错误打印双重格式化导致 4xx 看起来像 crash✓ 修复(PR#3749)

累计计数

  • 已合并 PR: 144 → 146(+2)
  • 关键 OPEN PR:PR#3791 退出(已合并),新增 PR#3800

2026-05-03(~10h 增量 · 2 项合并 + 3 项关键 OPEN · DeepSeek anthropic-compat thinking 系列收官 + Stats model cost estimation 二度落地)

扫描窗口:2026-05-02 14:57 UTC → 2026-05-03 00:36 UTC。窗口内 2 项合并 + 3 项关键 OPEN。本次主线:① PR#3788 DeepSeek thinking 块系列正式收官+1407/-76 · 远超原始描述的 small fix · 为整个 OpenAI/Anthropic 双轨 thinking-content 跨提供商 normalize 框架收尾);② PR#3780 Stats model cost estimation 二度落地(+819/-10 · PR#3631 之后的 rebase 合并);③ API retry classifier 路线打开(PR#3798 OPEN · 把 item-8 从"仅 SSE 429 检测"扩到 deterministic vs transport 两类完整分类);④ /model list 路线(PR#3797/3799 OPEN · 模型动态发现 + 跨 OpenAI-compat 端点响应规范化)。

🟢 MERGED(2 项)

PR标题合并时间影响
PR#3788fix(core): inject thinking blocks for DeepSeek anthropic-compatible provider2026-05-02 16:31 UTC🌟 延续 item-22 thinking 块系列收官+1407/-76 · 远超 PR 简介隐含的"small fix" · 实际是跨提供商 thinking-content 规范化框架)—— Closes #3786。问题:DeepSeek api.deepseek.com/anthropic 端点在 thinking 模式下 reject 缺 thinking block 的 tool_use turn(HTTP 400)。两个协调的 converter 行为:① normalizeAssistantThinkingSignature —— 在所有缺 signature 字段的 assistant thinking block 上补 signature: ''保留原 thinking 文本),覆盖 cross-provider history 中 OpenAI/Gemini/agent-runtime 仅设 thought: true 的情况 + redacted_thinking block 经 Gemini-Part 往返丢失 data 字段的情况;② injectThinkingOnToolUseTurns —— 给带 tool_use 但缺任何 thinking block 的 assistant turn 前置注入空 thinking block(仅在该案例触发,避免 bloat)。配合已合并 PR#3729/3747/3737 完成 OpenAI/Anthropic 双轨完整覆盖
PR#3780Feat/stats model cost estimation rebase2026-05-02 23:31 UTC/stats 加 cost 估算(+819/-10)—— PR#3631 的 rebase 二度合并版本。会话累计 token usage × per-model 单价的成本估算

🟡 关键 OPEN(值得追踪)

PR方向与已有 item 关系
PR#3798feat(core): classify retryable transport/provider failures vs deterministic request errors🌟 关联 item-8 API 指数退避(+397/-4 / 91 测试 16 新增)—— 新增 classifyError():① deterministic errors(永不重试):400 / 401 / 403 / 404 / 422;② retryable:429 / 408 / 409 / 500-599 / 网络错误(ECONNRESET / ETIMEDOUT 等)。意义:item-8 之前只有 PR#3246 的 SSE 429 检测,本 PR 把"哪些可重试"做成正式分类器,是后续完整 10 次退避 + 模型降级的前置条件
PR#3797feat(cli): add /model list subcommand for dynamic model discovery新 CLI 入口(+99/0)—— /model list 查询配置的 OpenAI-compatible /models 端点,pipe-friendly(每行一个 model id)。配合 PR#3783(switch models non-interactively from CLI)形成"列出 + 切换"完整 headless 模型管理
PR#3799feat(cli): normalize model list response parsing across OpenAI-compatible endpoints配套 PR#3797(+366/-1)—— 规范化 fetchModels() 处理 3 种响应形态:① OpenAI 标准 { data: [...] };② DeepSeek 带 object: "list";③ bare array(部分 provider 跳过 wrapper)。owned_by / created / permission 等额外字段忽略,仅取 id

🎯 重点:item-22 thinking 块系列正式收官

PR#3788 的 +1407/-76 体量远超"为某端点注入空 thinking block"的简单描述。它实际是 thinking-content 跨提供商规范化的框架性工作

起点终点
OpenAI 端点 + DeepSeek 部分场景OpenAI / Anthropic / Gemini / DeepSeek 四提供商 history 在双轨(OpenAI tool_use replay + Anthropic-compat tool_use turn)下都正确处理 thinking block
signature 字段就直接报错normalizeAssistantThinkingSignature 自动补全(保留原文本,仅补空字段)
跨 provider 时 redacted_thinking 经 Gemini-Part 往返丢 data 字段 → 后续 reject同上 normalize 路径处理
tool_use turn 缺 thinking block 直接 HTTP 400injectThinkingOnToolUseTurns 仅在该案例注入空 block,避免普通 turn bloat

主矩阵 line 92 已同步:item-22 PR 列表加 PR#3788 ✓。

🟢 状态升级

Item旧状态新状态
item-22 Thinking 块跨轮保留OpenAI/Anthropic 双轨 + 6 PR 已合并+ PR#3788 框架性收官(cross-provider thinking-content normalize)
item-8 API 指数退避与降级重试仅 SSE 429 检测(PR#3246)🟡 部分(+ PR#3798 OPEN 正式 classifier,把"可重试 vs 确定性失败"做成框架)

累计计数

  • 已合并 PR: 142 → 144(+2)
  • 关键 OPEN PR 增加 3 项(PR#3797 / PR#3798 / PR#3799)

备忘:模型管理三件套

PR#3797(/model list)+ PR#3799(response 规范化)+ PR#3783(headless 切模型)三件套合并后将形成完整的 headless / 脚本友好的模型管理 CLI——预计在 OpenAI-compat 多 provider(DeepSeek / 兼容 OpenAI 的国产模型 / 自部署 vllm/sglang)场景下显著提升可用性。


2026-05-02(~35h 增量 · 7 项合并 · 含 PR#3684 Phase C event monitor +6297/-147 系列追踪以来最大单 PR · /review 第二轮架构升级 + OTel HTTP routing + MCP health pill · item-26 状态勘误)

扫描窗口:2026-05-01 04:14 UTC → 2026-05-02 14:57 UTC(第二次扫描补登 PR#3684 + PR#3741 + PR#3792)。窗口内 7 项合并。本次主线:① PR#3684 Phase C event monitor tool 上线+6297/-147 系列追踪以来最大单 PR · 补足 background tasks 三件套之外的"长跑命令 + 节流事件流"维度);② /review skill 第二轮架构升级(PR#3754 +2423/-138 · 5→9 agent + 3 personas + 6 个 CLI 子命令);③ OTel HTTP OTLP routing 上线(PR#3779 +1387/-102 · 直接触发 item-26 状态勘误);④ MCP health pill 上线(PR#3741 +182/-0 · DISCONNECTED MCP 服务器在 footer 可见);⑤ item-26 状态严重勘误 —— 原描述"无 OpenTelemetry 支持"已大幅过时,经源码核查 Qwen Code 早已集成 @opentelemetry/sdk-node + 6 个 exporter。

🟢 MERGED(7 项)

PR标题合并时间影响
PR#3684feat(core): event monitor tool with throttled stdout streaming (Phase C)2026-05-02 12:57 UTC🌟 Phase C event monitor tool 上线+6297/-147 · 系列追踪以来最大单 PR)—— 新增 Monitor 工具(spawn 长跑 shell 命令 + token-bucket 节流 burst=5/sustain=1/sec 把 stdout lines 作为事件返回 agent)+ MonitorRegistry(4 状态 running/completed/failed/cancelled + idle timeout + max events 自动停 + 独立 AbortController)+ shell 层 sleep 拦截(前台 sleep N(N≥2) 阻塞并提示模型用 Monitor 或 is_background)。Background tasks roadmap (#3634) 三阶段:Phase A = 后台 subagents(PR#3076 已合并),Phase B = managed background shell pool(PR#3642 已合并),Phase C = event monitor(本 PR)。本 PR 自述"未做"清单:footer pill / dialog 集成 + task_stop / send_message 集成(gated on PR#3471/#3488)—— 这两项预计后续 PR 补
PR#3754feat(review): expand review pipeline + qwen review CLI subcommands2026-05-01 10:30 UTC🌟 /review 第二轮架构升级+2423/-138 · 单 PR 体量爆表)—— Step 4 5→9 个并行 agent(Correctness/Security 拆分 + 新增 Test Coverage + 3 undirected personas:attacker / 3am-oncall / maintainer);Step 6 改迭代反向审计(cap 3 rounds);Step 9 增加 self-PR detection(自审 PR 自动降级 APPROVE/REQUEST_CHANGES → COMMENT)+ CI status check + 现有评论 4 类优先级;新增 6 个 qwen review CLI 子命令fetch-pr / pr-context / load-rules / deterministic / presubmit / cleanup)替换 SKILL.md 内 inline bash 命令,LLM 改为读结构化 JSON
PR#3779feat(telemetry): define HTTP OTLP endpoint behavior and signal routing2026-05-01 14:47 UTC🌟 关联 item-26 OTel 部分实现+1387/-102)—— resolveHttpOtlpUrl() 按 OTel 规范追加 /v1/traces /v1/logs /v1/metrics;per-signal endpoint overrides(支持阿里云 /api/otlp/traces 等非标路径);LogToSpanProcessor 桥接 OTel logs→spans 给 traces-only 后端 + session-based traceId(SHA-256(sessionId) 截 128 bit)
PR#3741feat(cli): add MCP health pill to footer2026-05-02 14:57 UTC🌟 MCP 健康可见性+182/-0 · 4 文件 · 3 新增 + 1 修改)—— footer 左下区域显示 · 1 MCP offline(warning 色)当任何配置的 MCP 服务器处于 DISCONNECTED 状态。关键设计决策(PR body 自述):没有走 PR#3720 的 kind framework 扩展路线——任务实体(agent/shell/monitor)有"终态契约"(running → {completed, failed, cancelled}),而 MCP 是 disconnected ↔ connecting ↔ connected 连接状态循环(30s 健康检查 + 自动重连),category 不同。v1 仅是视觉指示器,按键导航到 /mcp 留待 follow-up。关联 P2 MCP Auto-Reconnect 的 UI surface 维度——本 PR 同时间接证实 Qwen Code 已有 30s 健康检查 + 自动重连机制(待源码二次核查)
PR#3784fix(monitor): correct Windows taskkill spawn assertion2026-05-02 03:24 UTCPhase C 配套 Windows 兼容性修复(+15/-18)—— PR#3684 的预修复
PR#3782fix(vscode-companion): align package eslint config2026-05-02 04:35 UTCVSCode companion eslint 对齐(+25/-9)
PR#3777fix(test): restore abort-and-lifecycle stdin-close test2026-05-02 13:39 UTCPR#3723 后续测试修复(+78/-32)

🔍 状态勘误:item-26 OTel 原生 Tracing

原描述(line 125 + p2-core item-26 主体):"仅阿里云 RUM,没有 OpenTelemetry 支持" —— 此判断严重过时

$ grep "@opentelemetry" packages/core/package.json
"@opentelemetry/api": "^1.9.0",
"@opentelemetry/exporter-logs-otlp-grpc": "^0.203.0",
"@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
"@opentelemetry/exporter-metrics-otlp-grpc": "^0.203.0",
"@opentelemetry/exporter-metrics-otlp-http": "^0.203.0",
"@opentelemetry/exporter-trace-otlp-grpc": "^0.203.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
"@opentelemetry/sdk-node": "^0.203.0",

实际状态:

  • OTel SDK 完整集成@opentelemetry/sdk-node + 6 个 exporter:traces/logs/metrics × http/grpc)
  • HTTP OTLP signal routing 已落地(PR#3779)
  • 🟡 AgentScope 风格 5 类 span extractor 自动埋点仍缺(Agent / LLM / Tool / Formatter / Embedding)—— 这是本 item 真正的剩余 gap

主矩阵 line 125 + p2-core item-26 已同步更新为 🟡 部分实现

🟡 关键 OPEN(值得追踪)

PR方向与已有 item 关系
PR#3791feat(cli): wire Monitor entries into combined Background tasks dialog🌟 PR#3684 自述"未做"清单的直接 follow-up已于 2026-05-03 02:05 UTC 合并 +791/-49(详见 2026-05-03 changelog 重点解析)
PR#3792fix(core): address post-merge monitor tool and UI routing issues🌟 PR#3684 review review 反馈的清扫 follow-up已于 2026-05-04 13:19 合并 +664/-227(体量从 OPEN 时 +199/-199 大幅增长——5 项清扫见原描述,详见 2026-05-04 changelog)
PR#3788fix(core): inject thinking blocks for DeepSeek anthropic-compatible provider延续 item-22 thinking 块跨轮保留 —— DeepSeek 的 api.deepseek.com/anthropic 端点在 thinking 模式下要求 assistant turn 必须带 thinking block,否则 HTTP 400。✅ 已于 2026-05-02 16:31 合并 +1407/-76(详见 2026-05-03 changelog)
PR#3785feat(cli): add memory diagnostics doctor command延伸 /doctor(已合并的 PR#3404 之上)—— /doctor memory 子命令 + --json 输出 + collectMemoryDiagnostics()(Node/V8 内存数据 + 风险提示),为 #3000 系列首层
PR#3790fix(core): improve stream rate-limit retry diagnostics关联 item-8 API 指数退避 —— 流式 SSE rate-limit 重试诊断
PR#3783feat(cli): switch models non-interactively from the cli模型切换 CLI 入口(headless 友好)
PR#3780Feat/stats model cost estimation rebasesession 成本估算 ✅ 已于 2026-05-02 23:31 合并 +819/-10(详见 2026-05-03 changelog)
PR#3781feat(weixin): add image sending support via CDN uploadChannels weixin 适配增强
PR#3776feat(installer): add standalone archive installation独立归档安装方式
PR#3775refactor(core): route side-query LLM calls through runSideQuery chokepointside-query 调用统一抽象

🎯 重点 1:/review 升级幅度(PR#3754)

PR#3754 是 /review skill 自 2026-03-14 上线以来第二次重大架构升级(第一次是 PR#2932 的 autofix + 安全加固)。设计变化:

Step升级前升级后
4 并行 agent5 个9 个(Correctness / Security 拆分 + 新增 Test Coverage + 3 undirected personas)
5 不确定→拒绝uncertain → rejectuncertain → low-confidence(终端"Needs Human Review",不发 PR comment)
6 反向审计单次迭代(cap 3 rounds,no-new-findings 终止)
9 GitHub API 调用inline gh api 命令self-PR 检测 + CI status check + 现有评论 4 类优先级,全部走 qwen review presubmit 单 call

新增的 6 个 qwen review CLI 子命令是架构上的重大转变——把 SKILL.md 中"让 LLM 跑 bash 命令"改为"让 LLM 调结构化 CLI 子命令读 JSON",降低 LLM 对 shell 语法的理解依赖、提高确定性

🎯 重点 2:OTel item-26 状态勘误 + PR#3779

老版本的 codeagents 报告把 item-26 写成"完全缺失",今天源码核查发现 OTel SDK 早就集成完成,PR#3779 是在已有 OTel 基础上的"HTTP signal routing 完善"。这暴露了 codeagents 报告中可能存在的其他类似过时判断——后续审计需要更系统地核对包依赖现状。

PR#3779 的 LogToSpanProcessor 是亮点:很多 traces-only 的后端(如阿里云观测)不收 logs;通过把 logs 转成 spans,让 logs 也能在 traces UI 上展示。这是工程务实的桥接设计。

🟢 状态升级

Item旧状态新状态
item-26 OTel 原生 Tracing"缺失(仅阿里云 RUM)"🟡 部分实现(OTel SDK + HTTP OTLP routing ✓,5 类 span extractor 仍缺)
GitHub Code Review item已实现(5 agent)已实现 + 第二轮升级(9 agent + 3 personas + iterative reverse audit + 6 CLI 子命令)
/doctor 诊断工具"缺失"✓ 已实现 + 持续扩展(PR#3404 基础 + PR#3785 memory 子命令 OPEN)
MCP Auto-Reconnect(item-13)"缺失"🟡 部分(reconnect-on-error + MAX_RECONNECT_RETRIES 已有 via mcp-tool.ts:attemptReconnect();UI 可见性 ✓ via PR#3741 footer health pill;周期健康检查待源码二次核验)—— 第三处状态勘误,与 OTel / /doctor 同样属于"原标 缺失实际已实现"模式

累计计数

  • 已合并 PR: 135 → 142(+7:原列出 5 项 + 补登 PR#3684 / PR#3741)
  • README 待同步

备忘:审计建议

本轮已发现 3 处状态勘误(item-26 OTel / /doctor / MCP Auto-Reconnect),全部属于"标'缺失'实际已实现"模式。这暴露了 codeagents 报告系统性的过期判断问题。建议下一轮系统重排 P2 item 中所有"缺失"标签:对每个 P2 item 用 grep + package.json 双向核对源码,预计还有 5-15 处类似勘误。


2026-05-01(~18h 增量 · 5 项合并 + 1 项关键 OPEN · item-18 Agent 恢复与续行 ✓ 闭环 · 共享权限流上线)

扫描窗口:2026-04-30 09:55 UTC → 2026-05-01 04:14 UTC。窗口内 5 项合并 + 1 项关键 OPEN。本次主线:① item-18 Agent 恢复与续行从"未实现"直接 ✓ 完整闭环(PR#3739 +4087/-165 单 PR 体量爆表);② PR#3717 FileReadCache 的 follow-up PR#3774 已出(prior-read 守卫,把缓存从性能优化升级为模型可信度约束);③ 共享权限流统一(PR#3723 把 Interactive / Non-Interactive / ACP 三模式的 L3→L4 决策路径打通)。

🟢 MERGED(5 项)

PR标题合并时间影响
PR#3739Add background agent resume and continuation2026-05-01 04:14 UTC🌟 关闭 item-18 Agent 恢复与续行+4087/-165 · 单 PR 体量爆表) —— BackgroundAgentResumeServicesubagents/<sessionId>/ 发现 paused agent + sidecar 持久化 + transcript-first fork resume + SubagentStart hook 重放 + send_message / task_stop 处理 paused agent + /resume 流程加载 paused tasks。状态从"—"→ ✓ 已实现
PR#3771fix(cli): restore SubAgent shortcut focus2026-04-30 15:02 UTCitem-56 SubAgent UX 微调(+247/-5)
PR#3723feat(core): add shared permission flow for tool execution unification2026-04-30 14:10 UTC🌟 架构统一 —— 新增 permissionFlow.tsevaluatePermissionFlow() / needsConfirmation() / isPlanModeBlocked() / isAutoEditApproved()),把 Interactive / Non-Interactive / ACP 三模式的 L3→L4→L5 决策路径打通(追踪 #3247 · +461/-95)
PR#3725chore: remove legacy Gemini workflows2026-04-30 14:03 UTC仓库历史清理(与改进系列无关)
PR#3753fix(cli): honor proxy setting2026-04-30 10:24 UTCproxy 设置真正生效(+290/-12)—— 触及 P2 企业代理 方向的小段,但完整 CONNECT relay + CA 注入 + NO_PROXY 仍待

🟡 关键 OPEN(值得追踪)

PR方向与已有 item 关系
PR#3774feat(core): enforce prior read before Edit / WriteFile mutates a file(+611/-2)PR#3717 FileReadCache 的关键 follow-up —— PR#3717 body 已预告该方向。新增 EDIT_REQUIRES_PRIOR_READ / FILE_CHANGED_SINCE_READ 两个错误码:模型若想 Edit/WriteFile 一个已存在文件,必须在本会话先 read 过当前字节。填补"plausible-but-stale 匹配"漏洞 —— 模型不能再凭想象 Edit 一个 old_string、恰巧文件中存在该字符串(即使模型从未读过文件的当前版本)。新文件创建豁免;Config.fileReadCacheDisabled 是逃生口。合并后 item-2 将升级为完整闭环
PR#3768feat(cli): route foreground subagents through pill+dialog while running(+674/-36)延伸 item-56 —— 把 foreground subagent 也接入 pill+dialog 调度面,与已合并的 PR#3488 / PR#3720 background 路径形成对偶
PR#3735fix(core): auto-compact subagent context to prevent overflow(+1283/-1020)关联 item-1 多层上下文压缩 + item-23 Token 自适应升级 —— subagent 上下文溢出前自动压缩
PR#3779feat(telemetry): define HTTP OTLP endpoint behavior and signal routingtelemetry 路由(与 item-26 OTel 原生 Tracing 方向接近)
PR#3778feat(desktop): Add desktop app package with Qwen ACP SDK integrationQwen-original 桌面应用方向

🎯 重点 1:item-18 Agent 恢复与续行(PR#3739)从"—"直接闭环

PR#3739 是本系列追踪以来单 PR 行数最多的项之一(+4087/-165)。能力清单:

能力实现方式
持久化发现新增 BackgroundAgentResumeServicesubagents/<sessionId>/
生命周期sidecar metadata 记录 paused 状态 + registry/UI 表现
Transcript-first fork resumefork bootstrap 写入 system/agent_bootstrap + 原始 launch prompt 写入 system/agent_launch_prompt,resume 时从 transcript 历史重建 worker context而非从当前父 prompt/tool 状态重建
Hook 重放resume 时重新跑 SubagentStart hooks + 并发 resume 自动 coalesce
控制面send_message + task_stop 处理 paused background agent
UI/resume 流程加载 paused tasks + 瞬态恢复提示
兼容无 bootstrap 记录的 legacy fork transcript 仍可见为 paused 并 abandonable,但禁止 unsafe resume

与 Claude Code 设计对齐 + 微超出:与 tools/AgentTool/resumeAgent.ts:resumeAgentBackground() 思路对齐。Qwen 的 transcript-first fork resume 比 Claude Code 的方案更稳健 —— 避免父 prompt 漂移导致 fork worker context 重建错误,是工程上更扎实的选择。

🎯 重点 2:PR#3774 把 FileReadCache 从性能优化升级为可信度约束

PR#3717 (item-2) 落地的 FileReadCache 本身是个性能层(短路重复 Read)。PR#3774 用同一个数据结构做了完全不同的事:在 Edit/WriteFile 之前强制要求模型见过当前字节

错误码触发含义
EDIT_REQUIRES_PRIOR_READ文件不在 cache 中(从未 read)模型在凭想象写代码
FILE_CHANGED_SINCE_READ文件已读但 mtime/size drift模型对文件的认知已过期

为什么重要:原 0 occurrences 检查只能挡"想象的串不存在";挡不住"想象到一个真实存在的串、但文件已变"——这种 plausible-but-stale 匹配是 LLM 编辑的真实失败模式。PR#3774 是 Anthropic / OpenAI 主流方案的常见组合,Qwen 跟进意味着 Edit/Write 的可信度跨越了一个台阶。

🎯 重点 3:PR#3723 共享权限流统一

PR#3723 把 Interactive / Non-Interactive / ACP 三模式的权限决策路径合并到 evaluatePermissionFlow() 单一入口:

L3: Tool 内置默认权限

L4: PermissionManager 规则覆盖

finalPermission: allow | deny | ask

L5: 调用方覆盖(YOLO / AUTO_EDIT / PLAN)

为什么重要:之前三模式各自实现 L3/L4 评估,bug 修一个要改三处;PR#3723 之后单一权威路径 —— 配套 17 个 unit test + E2E 修复。这是 Qwen Code 平台稳定性 的基础设施级清理。

🟢 状态升级

Item旧状态新状态
item-18 Agent 恢复与续行✓ 已实现(PR#3739)
item-2 文件读取缓存🟡 主体已实现🟡 主体已实现 + prior-read 守卫 PR 进行中(PR#3774 OPEN)

累计计数

  • 已合并 PR: 130 → 135(+5)
  • 关键 OPEN PR 增加 1 项(PR#3774 prior-read 守卫)
  • README 待同步

补漏说明

上一篇 changelog(2026-04-30)的"扫描窗口"是 2026-04-29 02:00 UTC → 2026-04-30 09:55 UTC,但漏列了同窗口内的:

  • PR#3615 ✓ 2026-04-30 07:24 UTC fix(lsp): 修复 LSP 文档、isPathSafe 限制、提升 LSP 工具调用率(+154/-45)—— LSP 健壮性
  • PR#3618 ✓ 2026-04-30 07:24 UTC fix(vscode-companion): fill slash commands into input on Enter instead of auto-submitting —— VSCode UX
  • PR#3617 ✓ 2026-04-27 15:01 UTC fix(core): split tool-result media into follow-up user message for strict OpenAI compat(+526/-11)—— OpenAI 严格兼容

3 项均为各自方向的健壮性补丁,与改进系列 item 关联弱,故只在此处补登。


2026-04-30(~32h 增量 · 15 项合并 · v0.15.6 · FileReadCache 落地 · DeepSeek reasoning_content 三连击 · Background tasks 统一调度面)

扫描窗口:2026-04-29 02:00 UTC(上次扫描)→ 2026-04-30 09:55 UTC。窗口内 15 项合并。本次的两条主线:① FileReadCache 终于合并 —— item-2 缺口的内容缓存层补齐;② DeepSeek reasoning_content 跨路径补齐 —— rewind / compression / merge / replay 4 路径在 ~50h 内 3 个 PR 落地。

🟢 MERGED(15 项)

PR标题合并时间影响
PR#3717feat(core): add FileReadCache and short-circuit unchanged Reads2026-04-30 09:47 UTC🌟 关闭 item-2 主体——session-scoped FileReadCache 用 (dev,ino) key + 三态 check API + READ_FILE_CACHE_* env 度量;未变更文本 Read 改用短占位符;range / 非文本 / 截断读 / Write 后 Read 都走完整管道;item-2 状态 🟡 部分实现 → 🟡 主体已实现(仅 32 批并行 readManyFiles 仍待)
PR#3737fix(core): preserve reasoning_content in rewind, compression, and merge paths (#3579)2026-04-30 02:25 UTC关联 item-22——3 路径全保留 reasoning_content +3/-361 行(同时清掉旧 strip 逻辑)
PR#3766chore(release): v0.15.62026-04-30 07:59 UTCv0.15.6 发布
PR#3727chore(core): drop tool token usage tracking2026-04-30 07:35 UTC内部清理
PR#3764fix(ci): add merge-back PR for stable releases in release workflow2026-04-30 07:25 UTCrelease workflow
PR#3752fix(cli): persist directory add entries2026-04-30 03:22 UTC/add-dir 持久化修复
PR#3645fix(cli): correct model precedence — argv > settings > auth env vars2026-04-30 01:17 UTCmodel 选择优先级硬化
PR#3747fix(core): replay DeepSeek reasoning_content on all assistant turns2026-04-29 23:43 UTC关联 item-22——DeepSeek 全 assistant turn replay reasoning_content +9/-12
PR#3647fix(cli): keep sticky todo panel compact2026-04-29 16:03 UTC关联 item-25 Task Management——sticky todo 紧凑化 +560/-37(PR#3507 之上的布局优化)
PR#3721fix(cli): bound SubAgent display by visual height to prevent flicker2026-04-29 14:34 UTC关联 item-44 transient 容器——SubAgent 显示按视觉高度 bound 防 flicker +1336/-57(item-44 的 SubAgent 子方向落地,但 MessageResponse 严格容器仍待)
PR#3722fix(memory): use project transcript path for dream2026-04-29 09:56 UTCauto-memory dream 路径 bug 修复
PR#3726feat(core): add Monitor(...) permission namespace2026-04-29 09:38 UTCQwen-original:为 PR#3684 Phase C event monitor tool 加独立 permission namespace(避免误用 Bash(...) 规则触发"Always Allow"扩散)
PR#3729fix(core): inject reasoning_content on DeepSeek tool-call replays2026-04-29 08:28 UTC关联 item-22——DeepSeek tool-call replay 注入 reasoning_content +153/-35
PR#3720feat(cli): wire background shells into combined Background tasks dialog2026-04-29 08:06 UTC关联 item-56——后台 shell 与 SubAgent 合并到统一 Background tasks dialog(pill / 导航 / 详情视图共用) +500/-100
PR#3687feat(core): wire background shells into the task_stop tool2026-04-29 02:10 UTC关联 item-56——后台 shell 接入 task_stop 工具,控制语义统一 +209/-25

🎯 重点 1:FileReadCache(PR#3717)—— item-2 主体落地

PR#3717 是本窗口最重要的一项。设计哲学比直接 port Claude Code 的 fileReadCache.ts 更克制:

维度Claude Code 原设计Qwen PR#3717
缓存对象完整文件内容(1000 条 LRU + mtime 失效)占位符短路标记(不缓存内容,只记"模型已看过整文件")
Keypath(dev, ino) —— 防符号链接/重命名假命中
API 形态get() / set()三态 check()hit-fresh / hit-stale / miss
节省内容回写省 token短占位符替代全文回写
度量READ_FILE_CACHE_* env 变量驱动可观测度量(不承诺数字,按 session 形态评估)
拓展三态 API 设计上预留给后续 Edit/WriteFile 强制"必须先读"守卫

剩余缺口:① 32 批并行 readManyFiles(PR#3717 不含 I/O 并行);② 完整的 Edit/WriteFile prior-read enforcement(PR#3717 是基础设施层,调用方还没接入)。

🎯 重点 2:DeepSeek reasoning_content 跨路径补齐(item-22)

DeepSeek 没有 Anthropic 那种 thinking content block,而是把推理嵌在 reasoning_content 字段里——意味着 transcript 重建(rewind / compression / merge / replay)每条路径都需要单独保 reasoning_content。3 个 PR 在 ~50h 内补齐:

PR路径大小
PR#3729DeepSeek tool-call replay+153/-35
PR#3747DeepSeek 全 assistant turn replay+9/-12
PR#3737rewind / compression / merge 三路径+3/-361(含旧 strip 逻辑清理)

加上之前的 PR#2897 / PR#3590 / PR#3682 / PR#3691,Anthropic + DeepSeek 两路径在 thinking 块跨轮保留方向已基本对齐 Claude Code 等价水平

🎯 重点 3:Background tasks 统一调度面(item-56)

PR#3687 + PR#3720 是 PR#3471/3488/3642 三件套之后的"统一收尾"——把后台 shell(exec 类)和 SubAgent(LLM 类)合并到同一个调度面

PR内容
PR#3687控制层后台 shell 也接入 task_stop 工具,模型用单一动作能停 SubAgent + shell
PR#3720UI 层后台 shell 与 SubAgent 在 dialog 中合并(统一 pill / 统一导航 / 统一详情视图)

Qwen Code 在此点上超过了 Claude Code 的设计——Claude 的 BashOutput / Background shells 与 Coordinator panel 是两套相对独立的 UI;Qwen 选择把两者塞进同一个 mental model。

🟢 状态升级

Item旧状态新状态
item-2 文件读取缓存 + 批量并行 I/O🟡 部分实现(仅查询缓存)🟡 主体已实现(查询缓存 + FileReadCache,仅 32 并行待)
item-22 Thinking 块跨轮保留DeepSeek 路径未覆盖Anthropic + DeepSeek 双路径已对齐
item-44 瞬态消息容器pre-slice + visual-height slicing+ SubAgent 视觉高度 bounding(仍未达统一 MessageResponse 容器)
item-56 后台并发 SubAgent✓ 已实现(3 件套)✓ 已实现 + 后台 shell 也并入(5 件套)
item-7 会话崩溃恢复🟡 读端容错(PR#3656 JSONL }{ 粘连恢复)
item-25 Task Management控制面 + UI 在做控制面 + UI 已合并,依赖拓扑/跨进程锁仍待

累计计数

  • 已合并 PR: 115 → 130(+15)
  • v0.15.3 → v0.15.6(PR#3766)
  • README 待同步

不在本系列范围的 PR(仅记录)

  • PR#3726 Monitor 权限 namespace + PR#3684 Phase C event monitor tool —— Qwen Code-original 方向,不是从 Claude Code 借鉴
  • PR#3645 / PR#3727 / PR#3764 / PR#3752 —— config 硬化 / 内部清理 / CI / 小功能修复,与改进系列 item 无直接关联

2026-04-29(~14h 增量 · 11 项合并 · auth wizard 第二轮完成 · autoSkill 新方向)

扫描窗口:2026-04-28 03:06 UTC(上次扫描 351c05c)→ 2026-04-29 02:00 UTC。窗口内 11 项合并 + 9 项新 OPEN

🟢 MERGED(11 项)

PR标题合并时间影响
PR#3624fix(cli): add API Key option to qwen auth interactive menu2026-04-27 14:01auth wizard 第二轮——延续 PR#3607 的 UX 改进
PR#3623fix(cli): recognize OpenAI-compatible providers in qwen auth status2026-04-28 01:06auth status 识别 OpenAI-compat provider
PR#3682fix(core,cli): stop stripping reasoning on model switch/history load2026-04-28 01:22关联 item-22 Thinking 块跨轮保留——补足 PR#3590 的 GH#3579 修复,覆盖 model 切换 + history load 路径
PR#3699fix(core): treat ask_user_question multiSelect as optional2026-04-28 08:40AskUserQuestion 工具兼容性
PR#3694test(cli): remove 8 flaky TUI input tests surfaced by CI history mining2026-04-28 08:32CI 稳定性
PR#3693fix(core): set DeepSeek V4 context to 1M and output to 384K2026-04-28 08:44模型注册表更新
PR#3691fix(cli): preserve description in subject-bearing thought chunks2026-04-28 08:32Thinking 块描述保留(UI 层)
PR#3690fix(ci): use squash merge for SDK release auto-merge2026-04-28 06:58SDK CI
PR#3688chore(release): sdk-typescript v0.1.72026-04-28 06:59TS SDK 发布
PR#3705fix(ci): preserve preview version overrides2026-04-28 12:26CI 修复
PR#3708chore(release): bump version to 0.15.32026-04-28 13:04v0.15.3 发布

🎯 重点:auth wizard 路线第二轮完成

PR#3607 + PR#3624 + PR#3623 三件套全部合并,"Qwen 第三方认证麻烦"主题取得里程碑式进展

  • ✓ PR#3607(2026-04-27)custom auth wizard step indicators + cleaner advanced config
  • ✓ PR#3624(2026-04-27)API Key option in qwen auth interactive menu
  • ✓ PR#3623(2026-04-28)OpenAI-compatible providers 在 qwen auth status 中识别

剩余方向OpenCode item-12 Provider 多模型提供商系统 中的 6 项 sub-direction 仍未完全实现(models.dev 数据源 / per-agent model binding / variants / BUNDLED_PROVIDERS lazy 注册等)。

🟡 新 OPEN(值得追踪 9 项)

后续状态注:本节是 2026-04-29 02:00 UTC 扫描时的 OPEN 快照。其中 PR#3687 / PR#3684 已分别于 2026-04-29 / 2026-05-02 合并PR#3673 autoSkill 仍 OPEN;其余几项(3714/3710/3707/3680/3677/3663)截至 2026-05-02 仍 OPEN。每项最新状态以最新的 changelog(如 2026-05-02 节)为准。

PR方向重点
PR#3673feat(memory): add autoSkill background project skill extraction🌟 autoSkill 新方向 —— 工具调用 ≥20 次自动 fork 后台 review agent 把会话中的可复用流程提炼为 project-level skill 写入 .qwen/skills/;与 autoMemory 合并调度避免多余 fork;含 skill_manage 工具(write 限制在 ${projectRoot}/.qwen/skills/);默认关闭(memory.enableAutoSkill: false
PR#3687feat(core): wire background shells into the task_stop tool延续 item-56 后台 SubAgent 三件套 —— 把 PR#3642 加的 background shell 接入 task_stop,统一 SubAgent + shell 的取消语义 ✅ 已于 2026-04-29 合并
PR#3684feat(core): event monitor tool with throttled stdout streaming (Phase C)"Phase C" —— PR#3471/PR#3488/PR#3642 之后 background tasks roadmap 的第 4 件套:长跑命令 + 节流事件流 ✅ 已于 2026-05-02 合并 +6297/-147 系列追踪以来最大单 PR(详见 2026-05-02 changelog)
PR#3714feat(core): write runtime.json sidecar for active sessions活跃 session 的 runtime metadata sidecar
PR#3710feat(cli): customize banner area (logo, title, hide)UX 定制
PR#3707fix(core): per-agent ContentGenerator view via AsyncLocalStorageper-agent ContentGenerator 隔离
PR#3680feat(cli): expand TUI markdown renderingTUI markdown 渲染扩展
PR#3677fix(openai): parse MiniMax thinking tagsMiniMax provider 兼容
PR#3663fix(cli): harden TUI flicker and narrow output handlingPR#3591 TUI flicker foundation 的 follow-up

autoSkill (PR#3673) 与 codeagents 现有 item 的关系

PR#3673 的 autoSkill 与 codeagents 多个 item 有交集:

  • 类似 item-4 会话记忆 / item-5 Auto Dream —— 同样是 fork 后台 review agent 自动提炼,但提炼对象是 skill 不是 memory
  • 不在现有 item-28 Skill 装载性能优化范围内 —— item-28 是关于"装载已有 skill 的性能",autoSkill 是"自动创建新 skill"
  • 新方向:可能值得新增 item 追踪 "autoSkill 自动 skill 提炼",归入 item-4/item-5 系列的下一阶段
  • 与 Claude Code 对比:Claude Code 的 skill-creator agent(如有)也是类似方向

状态升级建议

  • item-22 Thinking 块跨轮保留:PR#3590 已加,本次再加 PR#3682 / PR#3691,3 个 PR 共同完成 Thinking 块的"resume + model switch + UI 描述"全路径修复
  • 主矩阵增加 PR#3624 + PR#3623 到"OpenCode item-12 Provider 系统"行(如有)

累计计数

  • 已合并 PR: 104 → 115(+11)
  • README 待同步

2026-04-28(重大里程碑 · 后台并发 SubAgent 三件套全部合并)

用户 ping:"看下 P2 真正后台并发 SubAgent + TTL 驱逐 这行"。审计后发现 3 个 PR 已经全部合并 —— 这是 codeagents 报告史上最大的单次升级。

🎯 ~24h 内 3 个 PR 合并(实现 item-56 + item-58 完整体)

PR合并时间内容
PR#34712026-04-27 12:36 UTCfeat(core): model-facing agent control —— task_stop / send_message / per-agent transcript 工具,对标 Claude TaskStop + SendMessage
PR#34882026-04-28 02:57 UTCfeat(cli): background-agent UI —— pill + combined dialog + detail view + cancel flow + 4 状态分类(Running/Completed/Failed/Cancelled)
PR#36422026-04-28 03:06 UTCfeat(core): managed background shell pool with /tasks command —— 后台 shell pool + /tasks CLI 命令

🟢 状态升级

Item旧状态新状态
item-56 真正后台并发 SubAgent + TTL 驱逐🟡 基础设施建设中✓ 已实现
item-58 Coordinator 协调器面板🟡 UI 层建设中✓ 已实现
/tasks 命令 + 后台 shell pool(无独立 item)缺失✓ 已实现

Qwen 实现 vs Claude 设计的差异

PR#3488 体现了 Qwen 团队的独立 UX 决策,不是 Claude 的纯复刻:

维度Claude CodeQwen Code (PR#3488)
入口footer 上方常驻面板状态行 pill + Down 键打开对话框
自动驱逐30s TTL(evictAfter保持可见,用户主动管理
状态分类running / completed(2 类)Running / Completed / Failed / Cancelled(4 类,明确区分非 GOAL 终止)
取消x 立即驱逐x 取消 + 状态变为 Cancelled

Qwen 超出 Claude 的 3 项设计

  1. 4 类状态分类:明确区分 timeout / max-turn / errors 为 Failed,让用户和父 agent 不会误以为非 GOAL 终止是成功
  2. per-agent rolling tool activity buffer(feeds detail view Progress section)
  3. 原始 prompt 保存到 detail view(用户能看自己最初指令)

主矩阵 / sub-report 联动

  • 主矩阵 item-56 行 + item-58 行:状态从 🟡 → ✓ + PR 标记从 OPEN → MERGED
  • p2-stability item-56 + item-58 标题升级 + 加完整状态表 + UX 差异对比表
  • 累计合并 PR 计数:~101 → 104

累计影响

这次升级让 SubAgent 展示 Deep-Dive 的 "优先级 1 / 优先级 3" 两个核心 gap 同时关闭。Qwen Code 现在拥有:

  • ✓ 真正后台并发 SubAgent(不阻塞主 loop)
  • ✓ 显式 task_stop / send_message 控制面
  • ✓ pill + dialog + detail view UI
  • ✓ 4 类状态分类(含非 GOAL 终止细分)
  • /tasks 命令入口

与 Claude Code 在 SubAgent 方向上基本对齐,部分维度甚至略有超越(4 类状态 vs 2 类 / 显式 prompt 保存)。


2026-04-28(勘误 · item-17 Agent 记忆持久化 状态修正)

用户反馈:"看下"主矩阵 item-17 行的描述 无跨 session 记忆 是否准确。

🔴 错误:item-17 描述严重过时

原描述Qwen Code 现状:无跨 session 记忆(自创建以来从未更新)

审计源码后实际情况:Qwen Code 已有完整的 6,015 行跨 session 记忆系统,PR#3087 在 2026-04-16 合并:

已有能力文件
~/.qwen/memory/MEMORY.md user-level 持久化memory/paths.ts
project root .qwen/memory/ project-levelmemory/paths.ts findGitRoot()
4 类记忆分类:user / feedback / project / referencememory/types.ts:7-12
Auto-extraction 自动从 session 提取memory/extract.ts + extractAgent.ts + extractionPlanner.ts
Auto-Dream 后台合并去重(Claude Code 没有这能力)memory/dream.ts + dreamAgentPlanner.ts
Relevance-based recallmemory/recall.ts + relevanceSelector.ts
Forget / Governance / Lifecyclememory/forget.ts + governance.ts + memoryAge.ts
统一 Manager 入口memory/manager.tsconfig.getMemoryManager()

Qwen 在某些方面 actually 超出 Claude Code

  • ✨ Auto-extraction(自动提炼,Claude 需手动 Read/Write)
  • ✨ Auto-Dream(后台合并,Claude 无)
  • ✨ 4 类语义分类(feedback / reference 两类 Claude 无对应)
  • ✨ Relevance-based recall(按查询相关性,Claude 是全量加载)

真正剩余的 gapper-agent 私有记忆绑定 —— 即 Claude agent.frontmatter.memory: user|project|local 字段,让特定 Agent(如 code-reviewer)拥有专属记忆而不与其他 Agent 共享。

修正

  • 主矩阵 item-17 行无跨 session 记忆🟡 部分实现(跨 session 记忆 ✓ via PR#3087;per-agent 私有记忆绑定 ✗) + 加 PR#3087 引用
  • p0-p1-engine item-17 内容:从"未实现"重写为"部分实现 + 真正缺失项是 per-agent 维度",含完整能力对比表 + 设计差异分析
  • 状态升级:未实现 → 🟡 部分实现

教训

PR#3087 已经在 item-4(会话记忆)/ item-5(Auto Dream)/ item-14(闭环学习)3 处被追踪为 ✓。但 item-17(同一记忆系统的另一个视角)漏更新,保留了 fork 期的过时描述

审计建议:每次有大型 PR 合并,应把它显式映射到所有相关 item,而不是只映射到 1-2 个。PR#3087 涉及 30+ 文件 6K 行,应该影响 4-5 个 item 而不是 3 个。


2026-04-27(~14h 增量 · 7 项合并 · auth wizard MERGED · 4 项新 OPEN)

扫描窗口:2026-04-26 11:40 UTC(上次扫描 1cf3196)→ 2026-04-27 02:30 UTC。窗口内 7 项合并(含 4 项从上次 OPEN→MERGED 转换)+ 3 项新 OPEN + 3 项 stack 重做关闭

🟢 OPEN→MERGED 转换(4 项)

上次扫描时为 🟡 OPEN 的 PR 在本窗口内合并:

PR标题合并时间
PR#3607feat(cli): Improve custom auth wizard with step indicators and cleaner advanced config2026-04-27 02:05 UTC
PR#3593feat(cli): Add argument-hint support for slash commands2026-04-27 00:29 UTC
PR#3640fix(cli): guard gradient rendering without colors2026-04-26 16:52 UTC
PR#3629fix(config): support QWEN_CODE_API_TIMEOUT_MS across OAuth and non-OAuth paths2026-04-26 21:59 UTC
PR#3643feat: Adds Catalan language support2026-04-26 14:26 UTC
PR#3609fix(vscode-companion): slash command completion not triggering after message submit2026-04-26 14:27 UTC

特别关注 PR#3607:custom auth wizard step indicators + cleaner advanced config —— 是延续 PR#3583 PRD 的 auth UX 改进路线,对应几天前讨论的"Qwen 第三方认证麻烦"方向第一个合并的实质性 PR

🟢 本窗口内新 MERGED(1 项)

PR标题合并时间影响
PR#3653refactor(config): dedupe QWEN_CODE_API_TIMEOUT_MS env override logic2026-04-27 00:44 UTCPR#3629 follow-up cleanup(去重 OAuth/non-OAuth 路径同名 env override 逻辑)

🟡 新 OPEN(3 项)

PR方向潜在影响
PR#3661feat(vscode): add tab dot indicator and notification system (#3106)VSCode tab 通知红点,4 次 stack 重做(#3657/#3659/#3660 closed)
PR#3656fix(core): recover from }{ glued records on session JSONL load (#3606)JSONL 健壮性修复 —— 处理上次会话中断导致的 }{ 粘连记录,与 item-7 会话崩溃恢复 方向重叠
PR#3647fix(cli): keep sticky todo panel compact紧跟昨天 PR#3507 sticky todo 合并的 follow-up 紧凑化修复
PR#3645fix(cli): correct OPENAI_MODEL precedence without breaking /model selectionPR#3567/PR#3633 revert 的第三次尝试 —— 这是个反复修复的难题(顺序 #3567 OPEN→MERGED→#3633 revert→#3645 重做)
PR#3649fix(lsp): expose status and startup diagnosticsLSP 调试改进
PR#3648fix(acp): repair integration against current core APIACP API 兼容修复

🔴 stack 重做关闭(3 项 + 1 个之前已闭)

#3657 → #3659 → #3660 → #3661   (vscode tab dot, 4 attempts, latest OPEN)
#3651 → #3653                    (config dedupe, 2nd attempt MERGED)
#3646 (closed, superseded)       (sticky todo redraws, replaced by #3647)
#3654 (closed)                   (refactor unify tool execution, no replacement)

📊 累计合并 PR 计数

94 → 101(+7 新合并)。README 同步更新。

重点观察

  1. auth wizard 路线在合并:PR#3607 是几天来"Qwen 第三方认证麻烦"讨论的第一个实质性合并;后续 OPEN 还有 PR#3624(API Key option in interactive menu)+ PR#3623(OpenAI-compat 在 qwen auth status 识别)。
  2. PR#3604 仍 OPEN:昨天发现 PR body 显式引用 item-28 的 Skill 装载性能 9 项优化 PR 仍未合并(截至本次扫描 OPEN 64h+)。值得关注 review 进度。
  3. PR#3656 JSONL 健壮性:处理崩溃中断导致的 }{ 粘连,与 item-7 会话崩溃恢复有交集。
  4. OPENAI_MODEL precedence 是个难题:#3567 → #3633 revert → #3645 重做,第三次尝试。

2026-04-26(~31h 增量 · PR#3441 /rewind 合并 + PR#3507 sticky todo + PR#3567 被 revert)

扫描窗口:2026-04-25 04:26 UTC(上次扫描 8dfe243)→ 2026-04-26 11:40 UTC。窗口内 11 项合并 + 1 项 revert 勘误 + 8 项新 OPEN

🎯 重要:PR#3441 /rewind 合并(2026-04-25 14:12 UTC)

PR#3441 feat(cli): add conversation rewind feature with double-ESC and /rewind command —— +1,533 / -6,重要 P2 item 落地

  • double-ESC 触发 rewind UI(同 Claude Code 设计)
  • /rewind 命令显式触发
  • 对话 + 文件状态双重回退到任意检查点
  • 含确认对话框

状态升级

  • 主矩阵 /rewind 检查点回退 行:缺失 → ✓ 已实现
  • 同时直接命中 Gemini upstream report item-34 —— 见下方 upstream 报告联动更新

🎯 PR#3507 sticky todo panel 合并(2026-04-26 04:21 UTC)

PR#3507 feat(cli): add sticky todo panel to app layouts —— 之前已在主矩阵 item-25 行追踪 OPEN。现 MERGED。

主矩阵 item-25(Task Management)行 PR 列升级:🟡 OPEN → ✓(sticky todo panel 部分)。

🔴 重要勘误:PR#3567 被 revert

PR#3633 revert(cli): undo OPENAI_MODEL precedence change in modelProviders lookup (#3567) 合并 2026-04-26 06:29 UTC。

回退原因(PR body 原文):

"PR#3567 introduced a UX regression where a /model selection in the CLI is silently overridden whenever OPENAI_MODEL is set in the user's shell, with no warning surfaced."

这意味着 上次扫描 458b861 标 PR#3567 ✓ 的状态需要勘误——PR#3567 在合并 ~31 小时后被 revert。OPENAI_MODEL precedence 修复回到原状,需重新设计。

教训重申:OPEN PR 标 ✓ 后仍需 ~3 天复核,避免 revert 漏跟。

🟢 其他新合并(10 项,按时间倒序)

PR标题合并时间影响
PR#3633revert(cli): undo OPENAI_MODEL precedence change2026-04-26 06:29 UTCPR#3567 revert(见上)
PR#3620fix(core): match DeepSeek provider by model name for sglang/vllm2026-04-26 05:17 UTCDeepSeek 多端点匹配
PR#3630fix(telemetry): use safeJsonStringify in FileExporter2026-04-26 04:55 UTCtelemetry 循环引用崩溃修复
PR#3507feat(cli): sticky todo panel in app layouts2026-04-26 04:21 UTC见上
PR#3498docs(telemetry): clarify Alibaba Cloud console entry2026-04-25 23:40 UTC文档
PR#3495fix(core): preserve settings-sourced apiKey when registry model envKey is absent2026-04-25 23:37 UTCprovider auth bug 修复
PR#3622fix(test): update rewind E2E Test 1 assertion after isRealUserTurn fix2026-04-25 22:49 UTCPR#3441 follow-up
PR#3605feat: adds Space-to-preview to /resume session picker2026-04-25 14:41 UTC之前 OPEN 追踪 → ✓
PR#3614test(arena): cover select dialog key actions2026-04-25 14:30 UTCtest only
PR#3611fix(review): respect /language output setting for local reviews2026-04-25 14:27 UTC/review 增强 —— 用户 /language 设置生效
PR#3441feat(cli): add conversation rewind feature with double-ESC and /rewind2026-04-25 14:12 UTC见上

🟡 新 OPEN(8 项)

PR方向潜在影响
PR#3642feat(core): managed background shell pool with /tasks command直接对标 Claude Code 的 shell pool + /tasks —— 这是 item-56 后台并发 SubAgent + §9 Shell pool 缺口的关键填补,最值得跟踪
PR#3636feat(core): cap concurrent in-flight requests per providerprovider 级别并发上限(issue #3409)
PR#3635feat(core): --insecure flag and QWEN_TLS_INSECURE env var自签 TLS 兼容(issue #3535)
PR#3637fix(core): preserve reasoning_content when merging consecutive assistant messagesthinking 块合并修复(issue #3619)
PR#3631Feat/stats model cost estimation/stats 增加 cost 估算
PR#3640fix(cli): guard gradient rendering without colorsTUI 兼容(NO_COLOR)
PR#3629feat(config): support API timeout env override环境变量 timeout
PR#3627feat: add macOS desktop app installermacOS 桌面 app 安装脚本(替代关闭的 PR#3564)
PR#3624fix(cli): add API Key option to qwen auth interactive menuauth 菜单 UX
PR#3643feat: Adds Catalan language supporti18n

重点关注 PR#3642:这是 Claude Code shell pool 架构在 Qwen Code 的首次正式 PR。如合并将关闭多个本 doc 系列长期追踪的缺口(包括 claude-code-async-tasks §九 component 1 Shell pool 完全无 PR 的状态)。

📊 累计合并 PR 计数

84 → 94(+10 净合并,1 个是 revert)。README 同步更新。


2026-04-25(~5h 增量 · PR#3591 TUI flicker foundation 合并 · PR#3602 cleanup)

扫描窗口:2026-04-24 23:20 UTC(上次扫描 458b861)→ 2026-04-25 04:26 UTC。窗口内 2 项合并 + 3 项新 OPEN

🎯 重要:PR#3591 TUI flicker foundation 合并(2026-04-25 02:13 UTC)

PR#3591 fix(cli): add TUI flicker foundation fixes —— 在上次扫描后约 3 小时合并,+1473 / -200,supersedes 已关闭的 stack #3584/#3586/#3587/#3588

PR description(重要):

"It does not claim to fully close every TUI flicker / long-output / detail-panel issue; the remaining work is called out below."

foundation 层覆盖(按 PR body 原文):

  • 主屏流式 flicker 减少:throttle safe content / thought promotion + redraw counters
  • /clear 路径上避免重复 clearTerminal 写入
  • Pre-slice 大块 plain text / ANSI tool 输出进入 Ink layout 前裁剪
  • Visual-height slicing 含长单行 JSON / base64 / minified(防止 unbounded visual rows)
  • Shell transcript 在窄终端 soft wrap 后仍保留语义
  • 双路径(color + non-color)抑制 soft-wrap-only live shell 视口重渲染
  • Synchronized terminal output 改 conservative allowlist(含 opt-out + counters)

对相关 item 的状态影响

Item改前改后
p2-stability item-44(消息响应统一容器 + 离屏冻结)缺失🟡 部分覆盖(PR#3591 ✓ — pre-slice + visual-height slicing 部分对齐 OffscreenFreeze 思路;MessageResponse height=1 严格容器仍待)
p2-stability item-45(三级输出截断 30K/50K/200K)缺失🟡 部分覆盖(PR#3591 ✓ — pre-slice 在进入 Ink 前已截,但三级数字预算未实现)
p2-stability item-46(Bash "5 行窗口 + +N lines")✓ 已实现✓ 已实现(不变)

主矩阵 PR 列追加:item-44 / item-45 行的 PR 列加 PR#3591 ✓ partial。

剩余未覆盖(PR body 自述):MessageResponse 严格 height=1 overflowY=hidden 容器、三级精确 30K/50K/200K 数字预算、OffscreenFreeze 引用缓存。

🟢 新合并(1 项)

PR标题合并时间影响
PR#3602fix(cli): drain runExitCleanup before process.exit in error handlers2026-04-25 03:07 UTCPR#3581 follow-up 收尾 — 关掉 SIGINT / max-turn / fatal-error 路径绕过 runExitCleanup 的最后漏洞,避免最近 turn 的 JSONL 写入丢失。+218/-58,3 函数(handleError / handleCancellationError / handleMaxTurnsExceededError)

PR#3602 是 PR#3581(91% sync I/O perf)的紧密续作——同一作者继续清理 process.exit 异常路径的 cleanup 漏洞。

🟡 新 OPEN(3 项)

PR方向潜在影响
PR#3607feat(cli): Improve custom auth wizard with step indicators and cleaner advanced configauth wizard UX 增强(参考 PR#3583 PRD)
PR#3605feat: adds a Space-to-preview affordance to the /resume session pickersession picker 预览增强
PR#3604feat(skills): parallelize loading + add path-conditional activation直接对应 p0-p1-engine item-28(Skill 装载性能 9 项优化)的两个核心方向——并行加载 + 路径条件激活;如合并将关键升级 item-28 到 🟡 部分实现

📊 累计合并 PR 计数

82 → 84(+2 新合并:PR#3591 + PR#3602)。README 同步更新。


2026-04-25(~5min 增量 · PR#3567 OPEN → MERGED)

扫描窗口:2026-04-24 23:15 UTC(上次扫描 559b440)→ 23:20 UTC。窗口内 1 项合并

PR#3567 fix(cli): respect OPENAI_MODEL precedence in CLI model resolution —— 2026-04-24 23:19 UTC 合并(距推送仅 ~1 分钟),+254/-2。

resolveCliGenerationConfig() 现在按这个优先级选模型:

argv.model > OPENAI_MODEL > QWEN_MODEL > settings.model.name

之前 OPENAI_MODEL 未被 CLI 端正确识别(只在 provider lookup 侧生效),导致用户在 .env 里设 OPENAI_MODEL=gpt-4.1 但 CLI 继续用 settings 里的模型。修复与 OpenCode 对比报告 item-12(多 provider 配置) 方向对齐

从"值得追踪的 OPEN PR"表移出(上次扫描标 OPEN,5 分钟后合并)。

📊 累计合并 PR 计数

81 → 82(+1)。README 同步更新。


2026-04-25(补漏扫描 · 2 项 VSCode companion 合并未记录)

扫描方法修正:之前 3 轮扫描用 gh pr list --state merged --limit 30(默认按 PR number 创建顺序返回前 30),遗漏了老 PR number 但最近才合并的条目。改用 --search "sort:updated-desc" 后补齐 2 项:

PR标题合并时间规模
PR#2548feat(vscode): expose /skills as slash command with secondary picker2026-04-24 15:28 UTC+1,011 / -102,26 文件
PR#2592feat(vscode-companion): support /export session command2026-04-24 09:55 UTC+1,151 / -49

两 PR 均为 VSCode IDE companion 能力扩展:

  • PR#2548 给 VSCode 内加 /skills 斜杠命令 —— 输入 /skills 后不直接发送,而是打开二级选择器让用户挑 skill(追平 CLI 的 /skill-name 形式)。属 VSCode UX 补齐类。
  • PR#2592 给 VSCode companion 加 /export 命令 —— 导出当前 session 到文件,与 CLI 的 /export 对齐。属"VSCode 命令对齐 CLI 命令"系列的延续(前有 PR#2593 /insight、PR#2984 /account、PR#2551 Plan Mode 等)。

两者都不改变现有 improvement item 状态(Qwen Code 的 VSCode 集成本就是自家能力、非对标 Claude Code 的 gap),但应纳入 MERGED 计数。

教训:跨天/跨周 scan 需用 sort:updated-descsort:merged-desc 搜索语法,否则会漏掉"老 PR 最近合并"的场景。后续 scan 命令固定为:

gh pr list --repo QwenLM/qwen-code --state merged --limit 50 \
  --search "sort:updated-desc" --json number,title,mergedAt

📊 累计合并 PR 计数

79 → 81(+2 补漏)。README 同步更新。


2026-04-25(~7h 增量 · PR#3494 Python SDK 合并 · platform item-5 ✓)

扫描窗口:2026-04-24 15:32 UTC(上次扫描 221e3c9)→ 2026-04-24 23:05 UTC。窗口内 1 项重要合并 + 1 项新 OPEN + 2 项 CLOSED

🎯 重要:PR#3494 Python SDK 合并(2026-04-24 23:02 UTC)

PR#3494 feat(SDK) Add Python SDK implementation for #3010 —— 在上次扫描后 ~7.5 小时 合并,距今 ~2 分钟。

规模:+4,676 行 / -14 行 / 25 文件;新增 packages/sdk-python/ 整个 package。

能力覆盖

  • async query + sync query_sync 双 API
  • process transport(subprocess 调用 qwen CLI)
  • control requests(session 控制)
  • permission handling(工具审批)
  • ruff + pytest + mypy 完整 Python 工具链
  • npm run smoke:sdk:python 实模型 E2E smoke 入口

状态升级

位置改前改后
主矩阵 "Agent SDK 增强" 行(item-5 platform)仅 TypeScript SDK · PR 列 ✓ Python SDK 已合并 · PR#3494
p0-p1-platform item-5 标题### 5. Agent SDK Python(P1)### 5. Agent SDK Python(P1)✓ 已实现

追踪表调整:PR#3494 从"值得追踪的 OPEN PR"表移出(该 PR 实际已合并)。

注意:流式回调 + 工具审批回调的 API 完整度未在 PR body 明确声明,需要后续验证是否达到 Claude Code Python SDK 的同等能力。但原生 Python import 目标已达成。

🟡 新 OPEN(1 项)

PR方向潜在影响
PR#3600fix(core): handle shell line continuations in command splittingBash 工具解析健壮性 —— 处理 \ 换行续行的 command splitting 边界 case

🔴 CLOSED(2 项,stack 拆分/放弃)

PR标题关闭时间
PR#3564feat: add macOS Desktop App installation script and documentation2026-04-24 20:50 UTC
PR#3563feat(skills): add oh-my-agent-check bundled skill2026-04-24 20:50 UTC

两 PR 同时关闭,可能是 stack 整合或方案调整,不影响现有 item 状态。

📊 累计合并 PR 计数

78 → 79(+1 新合并 PR#3494)。README 同步更新。


2026-04-25(~4h 增量 · PR#3581 合并 → item-2 / item-5 升级 · 勘误 PR#3502)

扫描窗口:2026-04-24 11:47 UTC(上次扫描 665d430)→ 2026-04-24 15:32 UTC。窗口内 5 项新合并 + 1 项勘误

🎯 重要:PR#3581 从 OPEN → MERGED(2026-04-24 13:17 UTC)

PR#3581 perf(core): cut runtime sync I/O on tool hot path by 91% 于上次扫描后 90 分钟 合并。相关状态升级:

位置改前改后
主矩阵 item-5 行🟡 PR 进行中✓ 已实现
主矩阵 item-2 行🟡 PR 部分覆盖🟡 部分实现(合并仅覆盖查询缓存,内容缓存 + 32 并行仍待做)
架构差异表"同步 I/O"🟡 PR 进行中✓ 已实现(显著落后→已追平)
架构差异表"文件读取缓存"🟡 部分覆盖🟡 部分覆盖(查询缓存已合并)
p0-p1-engine item-2 标题🟡 PR 进行中🟡 部分实现(PR#3581 ✓ 合并)
p0-p1-engine item-5 标题🟡 PR 进行中✓ 已实现

项目 hot path fs 调用从 110 → 10 per prompt,-91%。Ink 渲染与 keypress 不再被主线程 sync 阻塞。

🟢 新合并(5 项)

PR标题合并时间影响
PR#3581perf(core): cut runtime sync I/O on tool hot path by 91%2026-04-24 13:17 UTCp0-p1-engine item-5 ✓ + item-2 🟡(见上)
PR#3569feat(cli): add Traditional Chinese (zh-TW) as a UI language option2026-04-24 13:34 UTCi18n(上次 OPEN→现 MERGED)
PR#3547fix(cli): memoize useHistory() return to avoid unnecessary re-renders2026-04-24 14:57 UTCGemini CLI backport(google-gemini/gemini-cli#10820)修 GH#3530 /model 重复输入引发 "Maximum update depth exceeded";与 p2-perf Ink 性能方向同源
PR#3477feat(vscode): add native context menu copy actions for webview chat2026-04-24 12:26 UTCVSCode webview UX(+421 行 / -114 行)
PR#3522docs(github): tighten PR template validation guidance2026-04-24 14:14 UTC仓库治理

🔴 勘误 · PR#3502 错误归类为 OPEN

PR#3502 feat(web-search): remove built-in web_search tool, replace with MCP-based approach —— 2026-04-24 03:29 UTC 已合并,但上次扫描误放在"值得追踪的 OPEN PR"表中。已移出。

影响:删除 ~1,700 行代码(整个 packages/core/src/tools/web-search/ + 4 个 provider:DashScope/Tavily/Google/GLM)。从此 web_search 走 MCP server 连接。这是 Qwen Code 架构上向 OpenCode / Claude Code "用 MCP 替代内置 provider"方向的一次显著对齐——与 OpenCode 对标报告 item-3(MCP-first 架构) 方向一致。

🟡 新 OPEN(1 项)

PR方向潜在影响
PR#3598feat(cli): add --json-schema for structured output in headless mode非交互输出结构化 —— 对标 Claude Code --output-format json / Codex structured output;headless/CI 场景重要能力

📊 累计合并 PR 计数

72 → 78(+5 新合并 + 1 勘误 PR#3502)。README 同步更新。


2026-04-25(增量 PR 扫描 · PR#3589 关闭勘误 + 9 项合并 + 新 OPEN PR)

扫描 2026-04-24 后 ~24h 增量 —— 共 9 项合并 + 1 项重要关闭 + 若干新 OPEN。

🔴 关闭勘误 · PR#3589 被关闭

PR#3589 —— feat(tools): add ToolSearch for on-demand loading of deferred tool schemas —— 2026-04-24 08:51 UTC CLOSED(未合并)

昨天(2026-04-24)的 commit 22f2a87 / 8ca638a 把本 PR 标为 🟡 PR 进行中。PR 在同天被关闭,需要回滚 3 处追踪:

  • 主矩阵 工具动态发现 行:🟡 PR 进行中 → 缺失
  • 架构差异总结(section 四) 工具发现 行:🟡 PR 进行中 → 缺失
  • tool-search-deep-dive.md 顶部追踪块:🟡 → ✗ CLOSED 说明(保留技术要点作为未来重启参考)

CLOSED 未给出明确原因 —— 可能是 review 反馈、stack 拆分、或方案调整。本 item 维持 P1 追踪,等待后续 PR。

这是一次重要教训:PR 状态可能小时级变动,前一天标 🟡 OPEN 不保证后续合并。追踪 OPEN PR 时应在短期(<48h)做一次状态复核。

🟢 新合并(9 项)

PR标题合并时间影响
PR#3590fix(core): preserve reasoning_content during session resume and active sessions (GH#3579)2026-04-24 09:49 UTC修 item-22 Thinking 块相关 resume bug
PR#3575feat(docs): add qwen-code skills, agents, and updated AGENTS.md2026-04-24 09:33 UTC文档
PR#3574fix(acp): support SSE and HTTP MCP servers in ACP mode2026-04-24 06:53 UTCACP + MCP 改进
PR#3573revert(vscode-ide-companion): undo #3450 split-stream timestamp sharing2026-04-24 09:13 UTCVSCode IDE 回滚
PR#3550refactor(core): make OpenAI converter stateless (follow-up to #3525)2026-04-24 04:28 UTC多 provider 稳定性
PR#3544fix(cli): disable Kitty keyboard protocol on SIGINT to prevent garbled 9;5u output2026-04-24 07:27 UTC终端兼容性
PR#3543fix(sdk-java): pass custom env to CLI process2026-04-24 02:37 UTCJava SDK
PR#3531fix(cli): promote resubmitted history prompt to most recent2026-04-24 04:27 UTC历史输入 UX
PR#3523fix(cli): dispatch queued slash commands through the slash path2026-04-24 09:11 UTC命令队列分派

其中 PR#3590 与 p0-p1-engine item-22 Thinking 块跨轮保留与空闲清理的 resume 路径直接相关 —— 主矩阵该行 PR 列补充追加。

🟡 新 OPEN(追踪)

PR方向潜在影响
PR#3596chore(release): bump version to 0.15.2即将发布 v0.15.2
PR#3593feat(cli): Add argument-hint support for slash commandsslash 命令 UX
PR#3577feat(skills): add tmux-real-user-testing skillbundled skill 扩展
PR#3576Feat/openrouter authOpenRouter 第三方认证 —— 延续"多 provider 认证"方向(参见 OpenCode 对比 item-12)
PR#3570feat(core): add simplify bundled skillbundled skill 扩展
PR#3569feat(cli): add Traditional Chinese (zh-TW) as a UI language optioni18n

🔴 同期被关闭(stack 拆分)

PR#3584 / PR#3586 / PR#3587 / PR#3588 —— 一系列 flicker/rendering 修复,均被 PR#3591 合并重基成一个 foundation PR。不需单独追踪。


2026-04-24(新增 P1 item-28 · Skill 装载性能综合优化 · 9 项 Claude Code 参考)

用户要求:"Claude Code 有优化 Skill 装载性能可以参考的地方么?... 要"——同意把 Claude Code 的 9 项 Skill 装载优化聚合成 1 个正式 item 写入报告。

新增 item-28(p0-p1-engine)

Skill 装载性能综合优化(9 项 Claude Code 参考)

整合 Claude Code 在 3 个源文件(skills/loadSkillsDir.ts + utils/attachments.ts + utils/skills/skillChangeDetector.ts)中的 9 项优化:

#优化Tier工作量收益
1外层 `Promise.all$ 并行 5 路目录来源\text{P0} 冷启动5 行~5 \times
2内层 entries.map(async)entries.map(async) 并行单目录\text{P0} 冷启动10 行每 \text{dir} ~\text{N} \times
3顶层 $memoize()` 按 cwd 缓存P310 行多次调用去重
4sentSkillNames per-agent 去重P1 token~50 行每轮省 600-1500 token
5suppressNext on --resumeP2~20 行resume 省一次完整注入
6Conditional skills(paths: frontmatter)P1 token~30 行大 monorepo 省 50%+ 列表
7300ms reload debounce + 1s stabilityP2 正确性~30 行git checkout 不卡顿
8Bun usePolling 规避 PathWatcherManager 死锁P3~5 行未来 Bun 不死锁
9realpath 并行去重 symlinkP2 正确性~30 行解决嵌套/symlink 重复

Qwen Code 现状清单

  • skill-manager.ts:265-285 refreshCache() 4 层串行 for
  • skill-manager.ts:695 listSkillsAtLevel() provider dir 串行
  • skill-manager.ts:723 loadSkillsFromDir() 每 skill dir 串行
  • 每 turn 注入完整 skill 列表(无 sentSkillNames
  • /resume 重复注入
  • 未用 ConditionalRulesRegistry lazy 激活 skill

重要复用机会:Qwen 已有 ConditionalRulesRegistryutils/rulesDiscovery.ts:232-300)给 .qwen/rules/*.md 用。把 skill 接到同一引擎 = 子项 #6 零新机制工作量

主矩阵 / p2-perf / README 联动

  • 主矩阵:新增 P1 行(item-28)
  • p2-perf item-2(插件/Skill 并行加载)顶部加整合提示 —— 已合并到 item-28 子项 #1+#2+#3
  • sub-report 计数:p0-p1-engine 27 → 28
  • 总项数:274 → 275
  • README 两处数字同步

为什么归为 P1 而不是 P2

  • 子项 #4 每轮节省 600-1500 token × N turn —— 在频繁使用 skill 的工作流中,一天对话可能累计省 50K+ token
  • 子项 #6 对大 monorepo(50+ 条件性 skill)是不可或缺的 UX 保护
  • 子项 #1 + #2 的冷启动优化是用户第一印象

单个子项单独看是 P2,但综合收益对重度 skill 用户(这是 Qwen 的明确定位,因为 skills 已反超 OpenCode 6.8×)是 P1 级别的。


2026-04-24(大性能/架构 PR 进入开发 · 3 项 P1 状态升级)

用户要求:跟踪 PR#3581 + PR#3589(均由 wenshao 于 2026-04-24 同日开启的大型性能/架构 PR)。

🟡 新开的 2 个大 PR —— 直接命中 3 项 P1

PR标题命中 item度量
PR#3581 🟡 OPENperf(core): cut runtime sync I/O on tool hot path by 91%p0-p1-engine item-5 同步 I/O 异步化 + item-2 文件读取缓存(部分覆盖)hot path 110 → 10 syscall/prompt,-91%
PR#3589 🟡 OPENfeat(tools): add ToolSearch for on-demand loading of deferred tool schemas主矩阵 P1 工具动态发现39-tool setup 省 ~15K tokens/request

PR#3581 技术亮点

3 commit 拆分

  1. appendRecord 异步化(110→20)—— chatRecordingService 每 event 4 syscall(existsSync + mkdirSync + existsSync + appendFileSync)改为 fire-and-forget writeChain promise + Config.shutdown() await flush() + jsonl.writeLine 改用 fs.promises
  2. hot-path LRU 缓存(20→10)—— workspaceContext.fullyResolvedPath / paths.validatePath(positive only,ENOENT 不缓存)/ ripGrep .qwenignorefileUtilsexistsSync pre-check 改 fs.promises.stat ENOENT→FILE_NOT_FOUND
  3. 测试 + 回归守卫 + _reset*ForTest—— ENOENT-not-cached / flush() 早 resolve / write 失败不阻塞 chain

工程质量:PR body 含完整 tracer 脚本(trace-sync-io.cjs ~160 行)+ 可复现度量步骤 + reentrancy guard / PID-suffixed 输出 / warmup 窗口设计细节。

PR#3589 技术亮点

  • DeclarativeTool 新增 shouldDefer / alwaysLoad / searchHint 标志
  • 默认 deferred:MCP 工具 + lsp / cron_* / ask_user_question / exit_plan_mode
  • ToolSearch 双查询模式select:Name1,Name2 精确匹配(不敏感 + 去重)+ 关键词搜索(支持 +must-word 必需词)
  • 评分对齐 Claude Code spec:built-in 10/5/4/2(name/substring/hint/desc),MCP 12/6 偏向 MCP 以鼓励发现
  • ✨ resume 支持startChat 扫描历史 function calls 重新 reveal 之前用过的 deferred 工具
  • ✨ compaction 保留/clear 清 revealed;压缩路径(startChat(newHistory))保留
  • Subagent 兼容:wildcard ['*'] 通过 includeDeferred: true 保持向后兼容
  • 21 文件 / +1051/-11 行 / 20 个新测试 case

主矩阵与 sub-report 同步

  • p0-p1-engine item-5:未实现 → 🟡 PR 进行中(PR#3581)
  • p0-p1-engine item-2:未实现 → 🟡 部分 PR 覆盖(PR#3581 查询层,内容层仍缺)
  • 主矩阵 工具动态发现 行:全部工具始终加载 → 🟡 PR 进行中(PR#3589)
  • 主矩阵 同步 I/O 异步化 行:多处 readFileSync → 🟡 PR 进行中
  • 主矩阵 文件读取缓存 行:无缓存,顺序读取 → 🟡 部分覆盖
  • 架构差异总结(section 四)工具发现 / 同步 I/O / 文件读取缓存 三行同步更新

2026-04-23(PR 合并潮 · 3 项升级为 ✓ 完整 + item-20 勘误)

用户要求:"根据最近几天的 https://github.com/QwenLM/qwen-code/pulls 更新 qwen-code-improvement系列文章的内容"。扫描 2026-04-20 至 2026-04-23 间 40+ PR,发现 4 项已完整实现 / 3 项进入 PR 阶段

🟢 MERGED · 升级为 ✓ 完整实现

PR#3512 合并 2026-04-23 00:52 UTC —— "feat(cli): combine elapsed + timeout in shell time indicator"

  • item-47 从 🟡 增强中 → ✓ 已完整实现
  • 4/4 Claude-style gap 全部覆盖(组合格式 / 亚秒精度 / 条件阈值 / Shell 专属)

PR#3540 合并 2026-04-23 12:37 UTC —— "feat(session): auto-title sessions via fast model, add /rename --auto"

  • item-50 从 ✓ 已实现(有 3 个差异)→ ✓ 已完整实现(3 个差异全部消除 + Qwen 超出 Claude 的 3 个工程细节:titleSource 元数据 / cross-process race 保护 / 环境变量级开关)
  • 补齐 PR#3093 之前留下的:fastModel 路由 + sentence-case 风格 + 首个 assistant 回合后自动触发
  • 额外防御:strip 终端控制序列 / JSONL 截断防护 / UTF-16 surrogate / O_NOFOLLOW / 64MB 扫描上限

PR#3460 合并 2026-04-22 08:58 UTC —— "feat(cli): auto-detect terminal theme ('auto' or unset)"

  • p2-core item-20(终端主题检测)从 "缺失" → ✓ 已实现
  • 主矩阵 + 架构差异总结(section 四)同步更新
  • OSC 11 查询 + COLORFGBG 环境变量回退检测链已就位

🟡 OPEN · 进入实现阶段(追踪中)

ItemPR方向
item-13(会话分支 /branch)PR#3539 🟡/branch fork 当前会话——本 item 第三次尝试(前两次 #3022 closed + #3292 跟进)
item-53(WebFetch LLM 清洗)PR#3537 🟡把 web-fetch processing 路由到 fastModel
item-56(后台并发 SubAgent)PR#3471 🟡 + PR#3488 🟡控制面(task_stop / send_message / per-agent transcript)+ UI 层(pill + 合并对话 + 详情视图)
item-58(Coordinator 面板)PR#3488 🟡对标 CoordinatorAgentStatus.tsx 三层视图

🔴 勘误 · item-20 @include 指令与嵌套记忆发现

状态修正:P1 未实现 → ✓ 已实现(核心机制已到位)。

审计 Qwen 源码后发现本 item 添加时就已实现,属于文档疏漏。两层机制都有对应实现:

Claude 机制Qwen Code 对应源码
@include + MAX_INCLUDE_DEPTH=5memoryImportProcessor.processImports() + maxDepth=5(数字都一致)utils/memoryImportProcessor.ts:200-
循环引用防护processedFiles: Set<string>utils/memoryImportProcessor.ts:19
代码块 @ 不解析findCodeRegions() skiputils/memoryImportProcessor.ts:251-267
嵌套记忆自动发现Upward scan(启动)+ Conditional rules(工具调用时按 paths: glob 注入 <system-reminder>utils/memoryDiscovery.ts:186-226 + utils/rulesDiscovery.ts:232-300 + core/coreToolScheduler.ts:1703-1716

Qwen 超出 Claude 的设计paths: frontmatter 声明式匹配(无需物理放置在对应目录);baseline vs conditional 两类规则分离(启动时 vs 懒注入);once-per-session 去重;global + project 两层目录。

其他 MERGED PR(不影响现有 items,仅记录)

PR标题合并时间
PR#3482fix(cli): rework session recap rendering and add blur threshold setting2026-04-21 06:39 UTC
PR#3478fix(cli): pin /recap above input and align defaults with fastModel2026-04-20 15:58 UTC
PR#3505fix(core): reject truncated subagent write_file calls2026-04-22 07:01 UTC
PR#3499fix(core): use empty string instead of null for reasoning-only assistant content2026-04-21 21:28 UTC
PR#3460feat(cli): auto-detect terminal theme ('auto' or unset)2026-04-22 08:58 UTC
PR#3468Revert "feat(core): add dynamic swarm worker tool"2026-04-20 08:40 UTC
PR#3467fix(core): prevent malformed permission rules from becoming tool-wide catch-alls2026-04-20 10:56 UTC
PR#3458fix(openai): when samplingParams is set, pass it through verbatim2026-04-21 13:47 UTC
PR#3525fix(core): scope StreamingToolCallParser per stream, not per Converter2026-04-22 12:32 UTC
PR#3533fix(cli): stop slash completion render loop2026-04-23 02:31 UTC
PR#3559fix(core): treat empty 'pages' parameter as unset in ReadFile2026-04-23 12:02 UTC
PR#3479fix(cli): inject plan/subagent/arena system reminders in ACP2026-04-22 06:46 UTC
PR#3475feat(cli): make ACP message rewrite timeout configurable2026-04-20 12:58 UTC
PR#3469feat(webui): render markdown in generic and web-fetch tool outputs2026-04-21 07:53 UTC
PR#3489fix(mcp): make the OAuth authorization URL clickable when wrapped2026-04-21 08:44 UTC
PR#3541 + PR#3526chore(release): bump versions to 0.15.0 / 0.15.12026-04-22 / 2026-04-23
PR#3534fix(i18n): sync mismatched keys between en.js and zh.js2026-04-23 16:38 UTC

值得追踪的 OPEN PR(可能成为后续 items)

PR方向潜在影响
PR#3539/branch 分叉当前会话类似 Claude /rewind 但走"fork"语义;可能成为 session 管理新 item
PR#3507sticky todo panel in app layouts对标 Claude 持久 TODO 面板
PR#3491/diff 命令 + git diff 统计新的 builtin 命令
PR#3519粘贴 base64 / data URL 图片 + 拖拽对标多模态输入
PR#3538LLM-generated summary labels for tool-call batches可能成为新的 fastModel 场景
PR#3562/3561/3546OSC 通知(iTerm2 / Kitty / Ghostty / cmux)终端能力集成
PR#3557insight facet normalization 加固Qwen 自有 /insight 系统健壮性(非对标 Claude Code)
PR#3544SIGINT 时禁用 Kitty 键盘协议(防 9;5u 残余)终端兼容性修复
PR#3550无状态 OpenAI converter(跟进 #3525 方向)多 provider 稳定性

2026-04-22(审计勘误 · item-48 / item-50 修正)

用户要求:"再次多轮无方向审计、反向审计直至没问题"。严格审计 items 44-58 的技术准确性后发现 2 处实质错误

🔴 错误 1:item-48 singleHunk 机制描述错误

声称:Claude 根据 hunks.length === 1 自动切换 context: 100_000 显示完整函数。

实际(源码验证)

  • hooks/useDiffInIDE.ts:170-196唯一设置 singleHunk=true 的路径,仅 IDE 扩展 使用
  • 判断依据是 editMode: 'single' | 'multiple' 参数传入不是 hunks.length === 1 启发式
  • tools/FileEditTool/utils.ts:343(终端 UI 路径)不传 singleHunk,始终 context: 3
  • "改 1 行看完整函数"在 Claude 终端 UI 不成立——只在 IDE 扩展中

修正

  • item-48 标题:语义化 hunk 模型 + singleHunk 智能上下文语义化 hunk 模型(消除双重 diff 序列化)
  • 删除"改 1 行看完整函数"的终端 UI 场景(不成立)
  • 重写 Qwen 修改方向——聚焦真正有价值的 structuredPatch 改造 + 删除 UI 层 62 行 regex;singleHunk 作为可选 IDE 扩展增强
  • 补充:Qwen 的 diffOptions.ts:41, 52 已部分使用 structuredPatch——改造路径已验证可行
  • Deep-Dive update-tool-display-deep-dive.md 3 处标注勘误

🔴 错误 2:item-50 添加时已被实现

声称:Qwen Code 缺少"会话标题自动生成"功能。

实际PR#3093feat(session): add rename, delete, and auto-title generation for session2026-04-22 03:48 UTC 已合并,commit 0c423deed——早于我添加 item-50 的时间。

Qwen 已实现

  • packages/cli/src/ui/commands/renameCommand.ts:43, 128 generateSessionTitle
  • /rename 无参数触发自动生成 kebab-case title
  • CLI prompt tag / VSCode / WebUI 三端展示
  • --resume <title> 按 title 恢复 session
  • Append-only system record 存储

与 Claude 的 3 处差异(剩余优化空间):

  1. 用 "current model" 而非 fastModel(成本偏高)
  2. kebab-case 而非 sentence-case
  3. 手动触发而非自动生成

修正

  • item-50 状态:🆕 新增建议 → ✓ 已实现(剩余优化 ~50 行,0.5 天)
  • 主矩阵 item-50 行:UUID/时间戳✓ 已实现,追踪 PR#3093 ✓
  • README 已合并 ✓ 67 → 68

✅ 审计验证通过项

items 44(已修订)/ 45-47 / 49 / 51-58 逐项验证:

  • PR 状态(PR#3155/3508 已合并,PR#3512 OPEN)正确
  • 常量值(BASH_MAX_OUTPUT_DEFAULT = 30_000 / CONTEXT_LINES = 3 / RECENT_COMPLETED_TTL_MS = 30_000)验证与源码一致
  • "Qwen 没有 X" 声明(item-45/52-55)通过 grep 验证
  • Feature flag(tengu_plum_vx3 / tengu_copper_panda / tengu_cork_m4q)逐一验证

📊 本轮审计方法论(从 item-44 学到)

  1. 基础设施层 vs 用户可见效果层——原 item-44 把 MessageResponse(基础设施)描述成"活跃区压缩"(效果层)
  2. 多机制混为一谈——原 item-44 把 MessageResponseShellProgressMessage 5 行窗口混讲
  3. 未扫描 latest merges 就提建议——原 item-50 错误,未来添加 item 前必须 gh pr list --state merged 扫最新
  4. 源码引用必须 open the file 验证——item-48 的 singleHunk 机制凭印象写,实际看源码才知只在 IDE 扩展

2026-04-22(SubAgent 展示对比 · 新增 3 项)

用户提问:"现在 Claude Code 和 Qwen Code 运行 SubAgent 的显示界面有什么区别?"

新增 Deep-DiveSubAgent 展示 Deep-Dive —— 两条 UI 哲学对比(Claude 双模式 Task/Coordinator vs Qwen 单一嵌入式 AgentExecutionDisplay),4 个场景逐帧比对(单 agent 10s / 3 并发 + 审批 / 失败处理 / 中断)。

双向借鉴机会

  • Qwen ← Claude:真后台并发(evictAfter TTL)/ /agents 独立管理视图 / Coordinator footer 面板
  • Claude ← Qwen:Ctrl+E/F 三档切换 / 焦点锁并发审批 / 执行摘要长期保留

新增 3 个追踪 item(p2-stability 55 → 58):

#方向优先级成本
item-56真正后台并发 SubAgent + TTL 驱逐(evictAfter + 1s tick + 30s TTL)🥇2-3 周
item-57/agents 独立管理视图(subagent 历史归档)🥈1-1.5 周
item-58Coordinator 协调器面板(footer 上方多 agent 列表)🥉3-5 天(前置 item-56)

关键源码验证

  • CoordinatorAgentStatus.tsx:31-63 evictAfter 过滤 + 1s tick + 驱逐逻辑
  • TaskListV2.tsx:21 RECENT_COMPLETED_TTL_MS = 30_000
  • AgentExecutionDisplay.tsx:124-140 Ctrl+E/F 三档切换
  • ToolGroupMessage.tsx:99-123 焦点锁 focusedSubagentRef + isWaitingForOtherApproval

总项数:271 → 274(+3)。p2-stability 55 → 58

2026-04-22(PR#3512 OPEN · item-47 剩余 gap 的精确补齐)

PR#3512 OPEN(2026-04-22 07:32 UTC 提交,作者 wenshao——"feat(cli): combine elapsed + timeout in shell time indicator"。直接响应 2026-04-21 勘误中列出的 item-47 剩余 4 个 Claude-style gap,4/4 全部覆盖

覆盖度

Gap2026-04-21 勘误描述PR#3512 实现
① 组合格式elapsed + timeout 合并 (... · ...)(10s · timeout 5s) inline
② 亚秒精度hideTrailingZeros optionformatters.ts 新增 option,5s / 5.5s 正确
③ 无阈值模式settings toggle更优雅——有 timeoutMs 时 t=0 显示,无 timeoutMs 保持 3s 阈值,无需配置
④ Shell 专属包装仅 shell 内联✅ 自然达成——只有 shell 工具有 timeoutMs

设计亮点(4 条)

  1. Conditional quiet threshold:"工具自己告诉 UI:用户是否关心时间"(比我建议的 settings toggle 更优雅,零配置
  2. hideTrailingZeros 作为 formatter option——复用到其他 duration 场景(测试耗时等)
  3. 消除自定义 formatElapsed——统一走 formatDuration,所有 duration 输出一致(hour-range 1h 2m 6s
  4. ShellStatsBar 瘦身——timeoutMs 搬到 ToolElapsedTime inline,stats bar 只留 +N lines + memory usage,职责清晰

状态变更

  • item-47 主矩阵:🟡 变体实现 → 🟡 增强中(PR#3512 合并后 → ✓ 完整)
  • 追踪 PR 列:PR#3155 单独 → PR#3155 + PR#3512 组合

闭环加速观察(24h 内 2 次反馈循环):

时间事件
2026-04-21 17:00我在 2026-04-21 勘误中列出 item-47 的 4 个 Claude-style gap
2026-04-22 07:32 UTCwenshao 提交 PR#3512 精确覆盖 4/4 gap(距勘误 ~14 小时)

对比 item-46 的闭环(PR#3508,31 小时):PR#3512 更快。规格文档 → PR 提交的延迟从 31h → 14h。

CI 状态(PR#3512 当前):Lint + CodeQL ✓ SUCCESS;Test (ubuntu/macos/windows × 3 版本) IN_PROGRESS/QUEUED。review 尚未提交。

合并后跟进

  1. item-47 状态 🟡 → ✓ 完整(5/5 对齐 Claude + 1 处 Qwen 优势保留)
  2. 主矩阵 item-47 行补充 PR#3512 ✓ 标记
  3. 已合并 ✓ 67 → 68
  4. Bash Deep-Dive 第 2.2 节更新 Qwen 现状——从"设计差异大"到"对齐 Claude + 全工具覆盖"

2026-04-22(Fast Model 应用场景扩充 · 新增 6 项)

用户提问:"除了 follow-up suggestion/recap,Claude Code 还有哪些事情是用 fast model 来做的?" —— 触发对 Claude Code 全部 getSmallFastModel() + queryHaiku() 调用点的梳理。

发现:Claude Code 共 18 处独立 fast-model 调用,远超已知的 Recap 和 follow-up suggestion。按用途分 6 类:(1) 会话元信息生成 3 处 / (2) 语义搜索 2 处 / (3) Hook LLM 评估 3 处 / (4) 内容处理 5 处 / (5) 系统级查询 3 处 / (6) 实用功能 2 处。

新增 Deep-DiveFast Model 应用场景 Deep-Dive —— 完整 18 处调用点索引 + 6 条共同设计哲学 + Qwen Code 借鉴路线图。

新增 6 个追踪 item(p2-stability 49 → 55):

#方向优先级成本风险
item-50会话标题自动生成(3-7 词 sentence-case)🥇1-1.5 天
item-51工具调用摘要(30 字符 commit-subject 风格)🥇1 天
item-52Hook LLM 条件评估(自然语言 if.condition🥈2 天
item-53WebFetch 内容 LLM 清洗(去 nav/ads/tracker)🥈1.5 天
item-54Shell 命令前缀 LLM 提取(权限分类)🥉2 天 + 大量测试⚠️ 安全关键(需默认关闭 + 完整测试)
item-55Skill 改进建议(post-sampling hook,opt-in)🥉1.5 天中(opt-in)

共同设计模式(所有 fast-model 调用共享):

  1. thinkingConfig: { type: 'disabled' } —— 禁用 thinking
  2. tools: [] —— 禁用 tool use(多数情况)
  3. 非流式 queryModelWithoutStreaming —— 减少 UI 渲染开销
  4. outputFormat: { type: 'json_schema' } —— 结构化输出(Hook / title 类)
  5. ANTHROPIC_SMALL_FAST_MODEL env var 兜底 —— Bedrock/Vertex 自选
  6. Vertex global / Bedrock with thinking 场景 fallback 到 Sonnet

总投入:~12-15 天覆盖 6 个最高 ROI 方向。

总项数:265 → 271(+6)。p2-stability 49 → 55

2026-04-22(PR#3508 合并 · 闭环完成 🎉)

PR#3508 ✓ 2026-04-22 06:37:14 UTC 合并——"feat(cli): cap inline shell output with configurable line limit",reviewer tanzhenxin APPROVED。item-46 从 🟡 拆分实现中 → ✓ 完整实现

完整闭环时间线(从规格补充到合并 ~31 小时):

时间 (UTC)事件
2026-04-20 深夜添加 item-46/47 + Bash Deep-Dive,标注 5-line window 缺失
2026-04-21 09:00扫描 PR#3155,标记 item-46 🟡 部分实现
2026-04-21 17:00勘误 item-47 为 🟡 变体实现
2026-04-21 23:09wenshao 提交 PR#3508 commit 1(主实现:cap 流式 ANSI + setting + 4 测试)
2026-04-21 23:24Commit 2:tmux 手动验证发现 gap,补齐完成态字符串路径
2026-04-22 06:13reviewer tanzhenxin 提交 COMMENTED review,两个非阻塞观察
2026-04-22 06:27Commit 3:修复 off-by-one + input validation + parameterized test
2026-04-22 06:36tanzhenxin APPROVED
2026-04-22 06:37MERGED(CI 大部分 SUCCESS,少数 IN_PROGRESS 未阻塞)

3 个 commit 演化(工程实践典范):

  1. 主实现——cap 流式 ANSI + ui.shellOutputMaxLines setting + 4 单元测试
  2. tmux 手动验证发现 gap——完成态字符串路径(StringResultRenderer 也需 cap,因为 shell.ts:returnDisplayMessage = result.output 是 plain string)
  3. Review 反馈修复
    • Off-by-oneMaxSizedBox.tsx:147-150visibleContentHeight = targetMaxHeight - 1 导致 cap=5 时 ANSI 显示 5 行但 string 显示 4 行。修复:shellStringCapHeight = shellCapHeight + 1 让两路径对齐到 N 可见内容行
    • Input validation:负数/分数/NaN 边界。use-site guard Math.max(0, Math.floor(rawShellCap || 0))——negatives → 0 → 禁用 / fractions → floor / 非数字 → 0

Reviewer 观察的精妙之处:tanzhenxin 的第一条反馈不是"实现有 bug",而是**"off-by-one 如果不是 intentional 的话……"**。wenshao 在回复中承认——PR 描述里 "After" 示例的 4 行(lines 27-30)确实是 bug 而非 spec。这种"可能是 spec 也可能是 bug"的表达方式是 code review 的高水平体现。

超越 Claude Code 的设计亮点(最终定版):

特性Claude ShellProgressMessagePR#3508
默认行数硬编码 lines.slice(-5)ui.shellOutputMaxLines: 5(settings dialog 可视化编辑)
bypass 机制1 种(verbose mode)6 种(! 用户命令 / 确认等待 / 真实失败 / Ctrl+F focus / opt-out / 自定义值)
覆盖面Streaming 流式Streaming + 完成态字符串渲染器(两路径 N 对齐)
语义区分exit≠0 不触发 Error bypass——tool success ≠ command exit code
输入鲁棒性不涉及(硬编码)负数/分数/NaN 统一降级到 opt-out 语义

ANSI vs string 双路径对称性的细节

  • ANSI 路径:AnsiOutputText 内部 pre-slice 到 N 行 → MaxSizedBox 不触发 overflow banner → 显示 N 行 + 单独的 ShellStatsBar
  • String 路径:直接传 raw content 给 MaxSizedBox → MaxSizedBox 自动截断 → 显示 N-1 行 + overflow banner
  • 对齐方案:string 路径传 shellCapHeight + 1,让 banner 补偿正好抵消,两路径都显示 N 可见内容行

计数更新

  • 主矩阵 item-46:🟡 拆分实现中 → ✓ 完整实现
  • 已合并 ✓ 66 → 67(+PR#3508)
  • README 已合并 ✓ 66 → 67

后续:Bash Deep-Dive 第 2.1 节"Qwen Code 现状"应更新——不再是"整屏 PTY 30 行",而是"5 行窗口(可配)+ 6 bypasses,超越 Claude 原设计"。可考虑新增反向借鉴 item(Claude Code 可学习 PR#3508 的可配置 + 多 bypass + 语义分离)。

2026-04-22(反馈循环最快记录 · item-46 5-line window 由用户本人补齐)

PR#3508(2026-04-21 23:10 UTC 提交,OPEN)—— 作者 wenshao(即 codeagents 项目维护者本人)

闭环链路

  1. 2026-04-20 深夜——我添加 item-46 / item-47 / Bash Deep-Dive,明确"5 行窗口"缺失
  2. 2026-04-21 09:00——扫描 PR#3155,标记 item-46 为 🟡 部分实现(+N lines 有 / 5 行窗口缺)
  3. 2026-04-21 17:00——用户追问 "结合 PR#3155 看 item-47",勘误 ✓ → 🟡 变体实现
  4. 2026-04-21 23:10 UTC——用户亲自提交 PR#3508,补齐 5 行窗口部分

PR#3508 设计亮点(超越 Claude Code 原设计):

特性Claude ShellProgressMessagePR#3508
默认行数硬编码 lines.slice(-5)ui.shellOutputMaxLines: 5(settings dialog 可视化编辑)
bypass 机制1 种(verbose mode)6 种! 用户命令 / 确认等待 / 真实失败 / Ctrl+F focus / opt-out / 自定义值)
覆盖面Streaming 流式Streaming + 完成态字符串渲染器(两处都裁剪)
语义区分exit≠0 不算 tool failure——避免命令偶然失败导致整屏输出

设计决策的精妙(PR 原文):

A shell command exiting with non-zero status (e.g. seq 1 30 && false, command not found) does not trigger the Error bypass — the tool itself succeeded, the spawned command failed. This is intentional: cap behavior stays consistent regardless of command exit code.

这是 Claude Code 原设计没有体现的语义分离——tool success ≠ command exit code。

状态变更

  • item-46 主矩阵:🟡 部分实现 → 🟡 拆分实现中(PR#3155 ✓ +N lines + PR#3508 🟡 OPEN 5 行窗口,合并后 ✓ 完整)
  • item-46 的追踪 PR 列表:从 PR#3155 单独 → PR#3155 + PR#3508 组合

反馈链路观察从规格补充到 PR 提交耗时约 24 小时——创纪录的闭环速度。项目的规格文档不仅描述现状,还在主动塑造实现方向

PR#3508 合并后应跟进

  1. 将 item-46 状态从 🟡 → ✓ 完整实现
  2. 更新 Bash Deep-Dive 第 2.1 节的"Qwen Code 现状"描述
  3. README 已合并 ✓ 66 → 67(+PR#3508)
  4. 考虑是否基于 PR#3508 的 6-bypass 模式,反向优化 Claude Code(可写入 update-tool-display-deep-dive 第 7 节)

2026-04-21(勘误 · PR#3155 与 item-47 的设计差异)

勘误动机:用户指出应"结合 PR#3155 仔细看 item-47"。经逐行对比 PR#3155 代码与 item-47 原规格,发现之前标记 "✓ 完整实现" 不准确——PR#3155 和 Claude Code 的 ShellTimeDisplay 功能等价但设计差异显著

PR#3155 vs item-47 spec 5 处关键差异

方面Claude ShellTimeDisplayPR#3155判断
起始可见性始终可见3s 阈值设计哲学差异(连续反馈 vs 静默到慢才显示)
格式(10.5s · timeout 30s) 组合单元3s 独立 + timeout 3s 在 stats bar信息分散——Claude 的组合更紧凑
亚秒精度formatDuration hideTrailingZeros: true,支持 10.5s自定义 formatElapsed,仅整数秒PR 精度损失
位置Running… 前缀内联工具行右对齐独立 flex childClaude 语义连贯 vs PR 状态行装饰
工具范围Shell only所有工具(覆盖更广)PR 优势

状态变更

  • item-47 主矩阵:✓ 完整实现 → 🟡 变体实现(5 处差异明确列出)
  • item-38 主矩阵:✓ 完整实现 → 🟡 部分实现(重要发现:PR#3155 覆盖墙钟/字节视觉反馈,覆盖 Claude Code 的"语义化 progress events"——即 yield { type: 'progress', toolUseCount } 类结构化进度 + "Installing packages 42/100" 类 stdout 解析)
  • item-46:保持 🟡 部分实现(之前就已正确标注)

补齐成本(若要做 Claude 风格)

  • item-47 补齐:~1 天(在现有 ToolElapsedTime.tsx 基础上增加组合格式选项 + Shell 专属 ShellProgressMessage 包装)
  • item-38 补齐(真正的 progress events):~3-5 天(core tool.execute 支持 yield + Shell stdout 解析器 + UI 语义映射)

反思:这次反馈循环教训——"功能等价" 不等于 "完整实现"。PR 合并后应该对比设计细节而非仅是功能名称。后续对 PR #3478/#3482/#3080 也需同样的精细比对。

2026-04-21(两日合并潮 · 项目史上反馈闭环最快的一次 🎯)

极其重要的 48 小时:我在 2026-04-20 晚间新增的 item-46/47(Bash 5 行窗口 + ShellTimeDisplay),被同一天上午已合并的 PR#3155 基本覆盖——这是文档补上标签的速度落后于实现速度的首次出现。

🎯 追踪 item 直接落地(6 个 item,覆盖度不等)

PR合并时间对应 item状态变更
PR#31552026-04-20 08:04 UTCitem-38 工具执行进度消息未实现 → ✓ 完整实现(3 合 1:elapsed + stats bar + OSC 9;4)
同 PR#3155同上item-47 ShellTimeDisplay刚加入追踪 → ✓ 完整实现(全工具右对齐 3s 阈值,覆盖面比 Claude Code 更广)
同 PR#3155同上item-46 "5 行窗口 + +N lines 计数"刚加入追踪 → 🟡 部分实现+N lines 已实现,5 行窗口未实现)
PR#34782026-04-20 15:58 UTCitem-43 会话 Recap✓ 进一步打磨(/recap pin 到输入框上方 + fastModel 默认对齐)
PR#34822026-04-21 06:39 UTC同上 item-43✓ 进一步打磨(rework rendering + blur threshold setting)
PR#30802026-04-21 14:08 UTCitem-21 CI 环境检测✓ 部分实现(persistent retry mode for unattended CI/CD)

⚠️ Revert

  • PR#3468 2026-04-20 08:40 UTC — Revert "feat(core): add dynamic swarm worker tool"PR#3433 昨日刚合的动态 swarm worker 今天被整体回滚。item-14 Coordinator/Swarm 主矩阵标记从 ✓ 改为 ⚠️ revert。

🆕 其他值得关注的合并(维护/新能力)

  • PR#3467 ✓ 2026-04-20 10:56 UTC — 安全修复:防止格式不合法的 permission rule 退化为工具级 catch-all(权限系统 bug 防御)
  • PR#3329 ✓ 2026-04-21 09:01 UTC — display real-time token consumption during streaming (#2742)——对应 item-20 /context 的交互增强
  • PR#3313 ✓ 2026-04-21 09:04 UTC — recover from truncated tool calls via multi-turn continuation——截断工具调用的恢复机制
  • PR#3229 ✓ 2026-04-21 03:44 UTC — /stats 按起源 subagent 分行归因
  • PR#3469 ✓ 2026-04-21 07:53 UTC — render markdown in generic and web-fetch tool outputs(WebUI)
  • PR#3398 ✓ 2026-04-21 14:20 UTC — VSCode OAuth → Coding Plan / API Key provider setup
  • PR#3303 ✓ 2026-04-21 09:06 UTC — detect Zed.app on macOS
  • PR#3451 ✓ 2026-04-20 07:22 UTC — Windows PATH normalization for MCP stdio servers
  • PR#3458 ✓ 2026-04-21 13:47 UTC — OpenAI samplingParams pass-through
  • PR#3283 ✓ 2026-04-20 06:34 UTC — slash command capability-based filtering(Phase 1)
  • PR#3489 ✓ 2026-04-21 08:44 UTC — MCP OAuth URL clickable when wrapped
  • PR#3394 ✓ 2026-04-21 21:31 UTC — arena comparison summary

⭐ 新开的重磅 PR

  • PR#3491(OPEN)— feat: add /diff command and git diff statistics utility —— 新增 /diff 命令 + git diff 统计
  • PR#3488(OPEN)— feat(cli): background-agent UI — pill, combined dialog, detail view —— background agent UI,对应 PR#3076(显式 run_in_background)的 UI 侧
  • PR#3471(OPEN)— feat(core): model-facing agent control (task_stop, send_message, per-agent transcript) —— Agent 内部对 sub-agent 的控制能力
  • PR#3507(OPEN)— feat(cli): add sticky todo panel to app layouts —— sticky todo 面板,新 UI 方向
  • PR#3505(OPEN)— fix(core): reject truncated subagent write_file calls —— subagent 截断写入防护
  • PR#3460(OPEN)— feat(cli): auto-detect terminal theme ('auto' or unset) —— 对应 terminal theme 检测方向

📊 反馈循环观察:PR#3155 的存在证明 Qwen Code 团队在我写 item-46/47 规格时已经在做同样的事情——这是社区驱动优先级独立工程推进的巧合共振。我的规格不是因果原因,但文档的存在帮助未来开发者理解 PR#3155 的设计空间。

计数更新

  • 已合并 ✓ 65 → 66(+PR#3155 覆盖 item-38+47,同时部分覆盖 item-46)
  • 主矩阵 item-14 Coordinator/Swarm 状态:PR#3433 ✓ → ⚠️ revert(PR#3468)
  • 主矩阵 item-38 状态:未实现 → ✓ 完整实现
  • 主矩阵 item-47 状态:未实现 → ✓ 完整实现
  • 主矩阵 item-46 状态:未实现 → 🟡 部分实现
  • 主矩阵 item-43 Recap 继续累积合并:增 PR#3478 + PR#3482 两次打磨
  • 主矩阵 item-21 CI 检测:PR#3080 ✓ persistent retry mode 补充

2026-04-20(深夜新增 2 项 · Update 工具展示)

用户提问:"Update 的展示区别也调查一下" —— 延续前两轮对 Bash / 高度控制的分析,覆盖 Edit / Write / MultiEdit 类工具的 UI 差异。

反直觉的发现这个维度两边各有优势——与 Bash/高度控制不同:

  • Claude Code 默认展示完整 diffFileEditToolUpdatedMessage.tsx:88-97
  • Qwen Code WebUI 默认单行摘要EditToolCall.tsx:149-181),比 Claude 更紧凑
  • Qwen Code CLI 中等,用 MaxSizedBox 自适应高度 + 间隙符

新增 Deep-DiveUpdate 工具展示 Deep-Dive —— 4 个场景对比(3 行小改 / 200 行大重构 / 500 行新文件 / string not found 失败),双向借鉴分析。

新增 2 个追踪 item(p2-stability 47 → 49):

  • item-48 语义化 hunk 模型(消除双重 diff 序列化)——把 Diff.createPatch() 字符串改为 Diff.structuredPatch()StructuredPatchHunk[],消除 UI 层 parseDiffWithLineNumbers() 62 行 regex(~50 行净改动,2-3 天)。⚠️ 勘误singleHunk ? 100_000 : 3 智能上下文只在 IDE 扩展 useDiffInIDE.ts 触发,不在终端 UI——不是本 item 的收益(之前误写)
  • item-49 多 hunk ... 省略分隔符——参考 StructuredDiffList.tsxintersperse 在 hunk 之间插入 dim color ...(~30 行,0.5 天,依赖 item-48)

关键源码验证

  • utils/diff.ts:9 CONTEXT_LINES = 3
  • utils/diff.ts:103 context: singleHunk ? 100_000 : CONTEXT_LINES ⭐ 智能上下文核心
  • utils/diff.ts:81-114 getPatchFromContents() 返回 StructuredPatchHunk[]
  • components/StructuredDiffList.tsx:16-29 完整 intersperse + NoSelect + Text dimColor 实现
  • components/FileEditToolUpdatedMessage.tsx:62-110 三种展示模式(preview hint / condensed / 默认完整 diff)
  • Qwen packages/core/src/tools/edit.ts:308, 433 Diff.createPatch() 字符串 patch
  • Qwen DiffRenderer.tsx:23-81 parseDiffWithLineNumbers() regex re-parse

反向借鉴(Qwen → Claude 的亮点,写入 Deep-Dive 第 7 节):

  • WebUI 默认单行摘要 + 展开交互(Claude 可作为用户选项)
  • 全宽横线 gap 折叠(Claude 的 ... 仅 hunk 间,不处理 hunk 内大段无修改)

总项数:263 → 265(+2)。p2-stability 47 → 49

2026-04-20(晚间新增 2 项 · Bash 任务展示)

用户提问:"Claude Code 展示 Bash 任务时和 Qwen Code 的差别是怎样的?" —— 触发对 Bash 工具 UI 差异的深度研究。

新增 Deep-DiveBash 任务展示 Deep-Dive —— 归纳两条完全不同的路线:

  • Claude = 极简 + 时间轴:5 行窗口 + +N lines 计数 + elapsed/timeout 倒计时
  • Qwen = 完整 + 数据维度:整屏 PTY 30 行 + 100ms 刷新 + 字节计数 + 二进制检测

4 个用户场景对比(find 5000 行 / npm install 2m / ls 错误 / 并行 20 工具),揭示 Qwen 在长任务时间维度并行屏幕占用上的明显劣势。

新增 2 个追踪 item(p2-stability 45 → 47):

  • item-46 Bash 执行中 "5 行窗口 + +N lines 计数" —— 复刻 ShellProgressMessagelines.slice(-5) + extraLines 模式(~100 行,1-2 天,前置 item-44)
  • item-47 ShellTimeDisplay 时间 + timeout 倒计时 —— 三种格式 (timeout X) / (elapsed · timeout X) / (elapsed),dim color 显示(~80 行,1 天)

组合效果:item-44(MessageResponse + OffscreenFreeze)+ item-46(5 行 + 计数)+ item-47(时间显示)三项合并后,Qwen 的 Bash UI 达到与 Claude 相当的"紧凑 + 进度可见"效果。总投入 ~4-5 天

关键源码验证

  • components/shell/ShellProgressMessage.tsx:42-82 确认 lines.slice(-5) + +${extraLines} lines / ~${totalLines} lines 双模式
  • components/shell/ShellProgressMessage.tsx:65 确认 <MessageResponse><OffscreenFreeze> 包裹(复用 item-44 基础设施)
  • components/shell/ShellTimeDisplay.tsx 完整 73 行,三种格式分支 L30/L52/L63 全部对应
  • Qwen packages/core/src/services/shellExecutionService.ts:636 确认 RENDER_THROTTLE_MS = 100
  • Qwen shellExecutionService.ts:179-182 确认二进制流检测 MAX_SNIFF_SIZE = 4096反向借鉴点:Claude 无此保护)

反向借鉴:Claude Code 可从 Qwen 学习二进制流检测,防止 cat /bin/ls / curl -o image.png 破坏终端渲染。

总项数:261 → 263(+2)。p2-stability 45 → 47

2026-04-20(下午新增 2 项 · 任务显示高度控制)

用户提问:"Claude Code 的任务怎么控制显示高度,有哪些值得借鉴的?" —— 触发对 Claude Code UI 高度控制机制的深度研究。

新增 Deep-Dive任务显示高度控制 Deep-Dive —— 归纳 Claude Code 的 4 条高度控制机制:

  • MessageResponse 单行容器(height=1 overflowY=hidden)—— 所有瞬态消息压缩到 1 行
  • OffscreenFreeze 离屏冻结(useRef 引用缓存 + useTerminalViewport)—— 历史 spinner 0 CPU
  • Ratchet 最小高度锁定 —— 滚动不抖动
  • 三级输出截断(Bash 30K / 单工具 50K / 单消息 200K)—— 防 context 爆炸

新增 2 个追踪 item(p2-stability 43 → 45):

  • item-44 瞬态消息单行容器 + 离屏历史冻结 —— 复刻 MessageResponse + OffscreenFreeze 模式(~200 行,~3-4 天)
  • item-45 三级输出截断 —— Bash 30K default / 150K upper + env var QWEN_BASH_MAX_OUTPUT_LENGTH + 单工具 50K 持久化 + 单消息 200K 批量预算(~250 行,~4 天,可拆 3 PR)

关键源码验证/root/git/claude-code-leaked/):

  • components/MessageResponse.tsx:37 确认 <Box height={height} overflowY="hidden">
  • components/OffscreenFreeze.tsx:23-42 确认 'use no memo' + useRef 冻结
  • components/design-system/Ratchet.tsx:38-65 确认 measureElement + setMinHeight
  • utils/shell/outputLimits.ts:3-14 确认 BASH_MAX_OUTPUT_DEFAULT=30_000 + UPPER_LIMIT=150_000
  • constants/toolLimits.ts:13-56 确认 6 个常量(DEFAULT_MAX_RESULT_SIZE_CHARS=50_000MAX_TOOL_RESULTS_PER_MESSAGE_CHARS=200_000 等)

总项数:260 → 261(+2,同时修正历史计数 1 处偏差)。p2-stability 43 → 45

2026-04-20(清晨合并潮 🎉)

昨晚 item 规格 → 今晨直接合并——再次出现 "今天完整规格补充 → 次日合并实现" 的正反馈循环。

🎯 追踪 item 直接落地(1 个)

PR合并时间对应 item意义
PR#31602026-04-20 03:09 UTCp2-tools-commands item-21 PDF / 二进制文件读取昨晚刚加入追踪(09:09 UTC 左右),6 小时后即合并——read_file 现已支持 PDF 文本提取 + Jupyter Notebook 解析。item-21 状态:🟡 追踪 → ✓ 部分实现(P0 + P2 完成,仅剩图片/Office 两项)

🆕 新合并(3 个,维护/新能力但未在追踪 item 内)

  • PR#34482026-04-20 02:01 UTCfeat(cli): add bare startup mode:新增 --bare 启动模式(CI/脚本专用),跳过 hooks/LSP/auto memory/skills/ambient extensions/MCP 等所有隐式启动发现,仅保留最小工具集 read_file + edit + run_shell_command,也可通过 QWEN_CODE_SIMPLE=1 环境变量启用。对标 Claude Code 的 --print/非交互模式。可考虑加入追踪 item(CI 场景启动优化新方向)。
  • PR#34452026-04-20 03:06 UTCfeat(cli): add slashCommands.disabled setting to gate slash commands:新增 slashCommands.disabled 配置以禁用特定 slash 命令,是 item-26 /experimental 实验特性统一门控 思路的部分实现(gate 层已就位,但不是专门的 "experimental" 注册表)。
  • PR#34502026-04-20 02:01 UTCfix(vscode-ide-companion): preserve split stream message ordering(VSCode IDE companion 消息排序修复)
  • PR#25932026-04-20 02:02 UTCfeat(vscode-ide-companion): support /insight command(VSCode companion 支持 /insight 命令)

⭐ 新开的重磅 PR(1 个)

  • PR#3455(🟡 OPEN,2026-04-20 02:25 UTC 创建)— perf(filesearch): move @-picker crawl and fzf index to worker_threads:将 @-picker 的递归文件爬取 + fzf 索引构建移出主线程到 worker_threads,避免在大仓库(100k 文件)按 @$ 时卡住 1–9 秒;同时引入 \text{ripgrep} 作为大仓库爬取后端(50\text{k}+ 文件下 3–4 \times 快于 $fdir),CLI 启动时 pre-warm 索引。这是对 p2-perf item-9 延迟初始化与按需加载 的强化实现(线程卸载 + ripgrep fast path)。

计数更新:已合并 ✓ 64 → 65(+PR#3160 覆盖追踪 item-21 的 P0+P2)。其他 4 个 PR(#3448/#3445/#3450/#2593)属于能力扩展或维护修复,暂不计入 "追踪 item 直接实现" 计数。

2026-04-19(勘误 + 追加)

勘误:用户指出 PR#2916/context 非交互输出 + SDK API)早在 2026-04-13 就已合并,但主矩阵 item-20 行仅标注了 PR#3042 的 ✓,遗漏了 PR#2916 本身。现已补标:

  • 主矩阵 item-20 行:PR#2916 →
  • p2-tools-ui item-20 详细页"进展"段落:(open)✓(2026-04-13 合并)

此 item 的两个 PR 均已合并:

  • PR#2916 ✓ — 非交互模式 /context + getContextUsage() SDK API
  • PR#3042 ✓ — /context 新增 detail 子命令

追踪合并数:63 → 64(+PR#2916)。

2026-04-19(晚间追加 · PDF/Notebook 支持 PR#3160)

用户指出p2-tools-commands item-21 PDF / 二进制文件读取 应该跟踪 PR#3160feat(core): PDF text extraction fallback and Jupyter notebook parsing)——此 PR 为 read_file 增加 PDF 文本提取 fallback + .ipynb Notebook 解析支持,合并后可直接覆盖 item-21 的 P0(PDF)+ P2(Notebook)两个目标。

已更新

  • 主矩阵 item-21 行:追踪 PR 列补充 PR#3160 🟡(OPEN),并将历史引用 PR#2024(拒绝 PDF)标记为 ✓ 合并
  • p2-tools-commands.md item-21:新增 "追踪中的 PR" 小节 + 在修改方向中标注 PR#3160 正在推进 P0/P2 目标

勘误:此前主矩阵只标了 PR#2024 但未在该 PR 后打 ✓ 标记(该 PR 2026-03-15 已合并,拒绝 PDF 以防 session 污染)。现已补 ✓。

待关注:PR#3160 合并后需回头将 item-21 状态更新为"部分实现"——覆盖 PDF + Notebook,仅剩图片支持 + DOCX/XLSX/PPTX 两项尚未覆盖。

2026-04-19(凌晨大合并潮 🎉)

极其重要的一天 —— 一夜之间 多个长期追踪的 item 同时落地,包括我昨天刚刚充实的 item-43 Session Recap!

🎯 追踪 item 直接实现(6 个)

PR合并时间对应 item意义
PR#343413:38 UTCp2-stability item-43 会话 Recap我昨天刚刚完整补充了 item-43 的版本/UI/Prompt 工程细节,今天就实现了!
PR#338303:12 UTCp2-tools-commands item-25 Refresh Interval StatuslinerefreshInterval 落地
PR#340411:25 UTC/doctor 诊断命令(对标 Claude Code)系统诊断命令(预期加入矩阵)
PR#323610:06 UTC增强 loop detection(含 PR#3178 stop directive)循环检测完整版
PR#343306:47 UTCp0-p1-engine item-14 Coordinator/Swarm动态 swarm worker 工具
PR#337501:45 UTCCI 治理60+30 stale 策略正式合并(之前 item-42 note 里提到)

🆕 追踪 item 未覆盖的新合并(7 个,维护/改进)

  • PR#2734 ✓ 12:17 UTC — add Markdown for Agents support to WebFetch tool
  • PR#2857 ✓ 07:42 UTC — constrain shell output width to prevent box overflow
  • PR#2766 ✓ 07:25 UTC — display ">100%" when context usage exceeds limit
  • PR#3431 ✓ 06:59 UTC — /clear dismisses /btw side-question dialog
  • PR#3429 ✓ 07:06 UTC — /btw use live conversation context
  • PR#3436 ✓ 06:25 UTC — support older Git during repository initialization
  • PR#3438 ✓ 09:28 UTC — remove abort listener during cleanup
  • PR#2551 ✓ 12:45 UTC — enable Plan Mode toggle and approval UI (VSCode)

⭐ 新开 PR(重磅)

  • PR#3441(open)— add conversation rewind feature with double-ESC and /rewind command —— 对标 Claude Code 的 /rewind 命令! 这是 p2-tools-ui item-5 /rewind 检查点回退 的直接实现。
  • PR#3445slashCommands.disabled setting to gate slash commands(slash 命令禁用配置)
  • PR#3442 — OAuth redirect URI 支持 MCP add
  • PR#3439render LaTeX math in markdown output

📊 闭环奇迹观察PR#3434 Recap 的实现直接受益于昨日 item-43 的完整规格补充——包括版本时间线、UI rendering(dimColor + REFERENCE_MARK)、Prompt 工程要点(禁止 status reports/commit recaps)等。这是 codeagents 项目首次出现**"今天丰富 item 规格 → 明天 Qwen Code 合并实现"** 的正反馈循环。

计数更新:已合并 ✓ 57 → 63(+PR#3434、+PR#3383、+PR#3404、+PR#3236、+PR#3433、+PR#3429 等 6 个追踪项)。

2026-04-18(晚间第三次补更)

自下午扫描(17:00 UTC)至晚间(19:30 UTC),qwen-code 合并节奏显著放缓——仅 1 个维护性 PR

  • PR#3237 ✓ 19:14 UTC — fix(build): invoke tsx directly via node --import instead of npx(构建工具链优化,减少 npx 间接层)

新开 PR(观察):

  • PR#3429 ✓(2026-04-19 合并)— fix(cli): let /btw use live conversation context/btw 侧问题的上下文修复)

观察:合并节奏从全天 15+ PR 的高峰回落到单一维护性合并,符合发布前清理收尾的典型模式。结合 PR#3298 bumped version to 0.14.5(昨日合并),推测新版本即将发布。

计数:已合并 ✓ 57(不变,PR#3237 是维护性合并不计入矩阵追踪)。

2026-04-18(下午第二次补更)

继续扫描 qwen-code PR(updated > 上午 05:00 UTC):

追踪范围内的合并(1 个):

  • PR#33192026-04-18 16:40 UTCfeat(cli): add early input capture to prevent keystroke loss during startup补齐 item-8 启动优化 双支柱的下半段(early input),preconnect 部分 PR#3318 仍 open。item-8 的早期输入捕获能力已落地。

维护性合并(5 个,无对应矩阵 item):

  • PR#3393 ✓ 12:22 UTC — feat(mcp): add OSC 52 copy hotkey for OAuth authorization URL(改善 remote/SSH 场景复制 OAuth URL 体验)
  • PR#3416 ✓ 10:11 UTC — wait for dual output stream shutdown(PR#3352 sidecar mode 的后续修复)
  • PR#3415 ✓ 05:46 UTC — update scheduler registry mock(测试稳定性)
  • PR#2590 ✓ 15:39 UTC — feat(vscode-ide-companion): add dedicated agent execution display(VSCode IDE 集成增强)
  • PR#2550 ✓ 15:43 UTC — perf(vscode): fix input lag in long conversations(VSCode 长会话性能)

批量 Stale 关闭(~11 个 PR 在 09:21 UTC 同时关闭):

PR#3375 的 stale 策略(60+30 天)生效后,清理了长期无活动的 PR:PR#2357(Node SEA binary)、PR#2509(anthropic thinking budget)、PR#2568-2585(一批 2026 年 2-3 月的 core 改进 PR)等。这是 qwen-code 项目治理成熟化的标志——非关闭 = 放弃,而是路线调整,部分方向已被后续更好的 PR 替代。

新开 PR(观察):

  • PR#3428fix(cli): dismiss /btw side-question dialog on /clear(/btw UX)

计数更新:已合并 ✓ 56 → 57(+PR#3319 追踪;其他 5 个是维护性合并不计入矩阵跟踪计数;批量 stale 关闭不影响追踪计数,因为那些都不在本报告追踪列表中)。

2026-04-18(次日清晨补更)

夜间到清晨 qwen-code 又合并了大量 PR:

追踪范围内的合并(4 个之前已纳入观察的 PR):

  • PR#31782026-04-18 02:24 UTCdetect tool validation retry loops and inject stop directive循环检测增强,防止 schema 验证失败时模型无限重试)
  • PR#32972026-04-18 02:31 UTCtool-registry: add lazy factory registration with inflight concurrency dedup工具注册表性能优化:懒加载工厂 + 并发去重)
  • PR#33812026-04-18 00:02 UTCreduce terminal redraw cursor movement(终端重绘性能)
  • PR#34072026-04-18 02:03 UTCauto-submit on number key press in AskUserQuestionDialog

维护性合并(11 个,无对应矩阵 item,仅记录):

  • PR#2962 ✓ sandbox 镜像名 'latest' tag fallback
  • PR#2963 ✓ JSON schema "undefined Options" fix
  • PR#2964 ✓ clean script duplicate rmSync
  • PR#2966 ✓ integration tests stdinDoesNotEnd
  • PR#2969 ✓ text-buffer offset-to-position 统一
  • PR#2970 ✓ weixin PNG magic 4-byte 检查
  • PR#2975 ✓ 重新连接 AcpBridge listener
  • PR#2977 ✓ dingtalk 续传后缀 '(cont.)' 仅在续段
  • PR#2978 ✓ dingtalk @mention 后保留空文本
  • PR#2979 ✓ dingtalk reactionContext 内存泄漏
  • PR#2981 ✓ SDK Stream.return() promise hang

计数:已合并 ✓ 52 → 56(仅追踪 4 个匹配 item 的合并;维护性的 11 个不计入矩阵跟踪计数)。

观察:今天上午(UTC 时间)单一时间窗口内有 15+ PR 合并,表明 qwen-code 在做发布前的批量清理(推测下一个 release 即将发布)。channels/dingtalk 4 连续修复(PR#2977/2978/2979 + PR#2980 待合并)说明国内 IM 渠道质量在快速打磨。

2026-04-17(晚间第三次补更)

继续扫描 qwen-code PR(updated > 今早):

新合并 PR(4 个)

  • PR#3076 ✓ 2026-04-17 10:23 UTC — background subagents with headless and SDK support。这是 Agent tool 的显式 run_in_background: true 参数真实落地!之前作为 item-22 自动后台化伪需求删除时,我已明确此 PR 是"真正的正规路径"——今天合并印证了判断。
  • PR#3339 ✓ 2026-04-17 14:05 UTC — .qwen/rules/ 路径规则(已在上一轮更新中标注)
  • PR#3352 ✓ 2026-04-17 18:19 UTC — dual-output sidecar mode for TUI(新颖 UX)
  • PR#3358 ✓ 2026-04-17 22:43 UTC — bind M-d to Emacs-like default(输入 UX 微优化)
  • PR#3402 ✓ 2026-04-17 14:57 UTC — match new cron notification format in interactive tests(测试修复)

新开 PR(未追踪,观察)

  • PR#3407 ✓(2026-04-18 合并)— auto-submit on number key press in AskUserQuestionDialog(UX 微优化)
  • PR#3404 ✓(2026-04-19 合并)— /doctor 诊断命令(对标 Claude Code 的 /doctor),Qwen Code 加了一个常用的诊断命令
  • PR#3398 — vscode OAuth → Coding Plan/API Key(重要 provider 策略调整)
  • PR#3394feat(arena): add comparison summary for agent results
  • PR#3393 ✓(2026-04-18 合并)— feat(mcp): add OSC 52 copy hotkey for OAuth authorization URL
  • PR#3381 ✓(2026-04-18 合并)— reduce terminal redraw cursor movement(性能微优化)

计数更新:已合并 ✓ 48 → 52(+PR#3076、+PR#3352、+PR#3358、+PR#3402)。

2026-04-17(qwen-code PR 状态全量刷新)

全量扫描 qwen-code PRs updated:>=2026-04-16,发现多项合并:

⚠️ 勘误:用户指出 PR#2827 HTTP Hook + Function Hook + Async Hook 也已于 2026-04-16 合并,但本轮更新最初漏标为 ✓。已补标:

  • 主矩阵 item-3 HTTP Hooks 行标 ✓
  • p0-p1-platform.md item-3 改写为 ✅ 已实现(反超 Claude Code) —— Qwen Code 实现 4 种 Hook 类型(command / http / function / async) + SSRF 防护,超过 Claude Code 的 2 种(command / http)

🔥 重大合并:PR#3087 Auto-Memory + Auto-Dream 已合并

  • PR#30872026-04-16 合并(LaZzyMan)— 实现完整的 managed auto-memory + auto-dream 系统
  • 这是 item-4 会话记忆 + item-5 Auto Dream 两个 P1 item 的同时实现!
  • 同时是 item-14 Nudge 驱动的闭环学习 的部分覆盖(仍缺 ① 双计数器 ② 冻结快照 ③ 保守 review prompt 三个关键要素)
  • 全部标记为 ✓

新合并 PR(共 10+ 个):

  • PR#3079/batch skill for parallel batch operations(对应 item /batch 并行操作)
  • PR#3100optimize compact mode UX
  • PR#3248add complete hooks support for ACP integration
  • PR#3255move fork subagent params from execute() to construction time(item-2 Fork Subagent 重构)
  • PR#3311support multi-line status line output
  • PR#3379headless support and SDK task events for background agents
  • PR#3315strip thinking blocks from history on model switch
  • PR#3320limit skill watcher depth to prevent FD exhaustion
  • PR#3327add shell argument quoting guidance to prevent special char errors
  • PR#3321defer update notifications until model response completes
  • PR#3308remember "Start new chat session" until summary changes
  • PR#3310prevent statusline spawn EBADF from crashing CLI
  • PR#3295avoid leaking process exit listeners in ProcessTransport
  • PR#3270ignore literal Tab input
  • PR#3322stabilize glob truncation tests
  • PR#3325 ✓ docs update for OAuth discontinuation
  • PR#3252 ✓ Windows install docs fix

新开 PR 并对接现有 item

  • PR#3383(open)— support refreshInterval in statusLine for periodic refresh —— 直接实现我昨天新增的 item-25 Refresh Interval Statusline!已挂到该 item 的进展列
  • PR#3339 ✓(2026-04-17 合并,tanzhenxin)— add path-based context rule injection from .qwen/rules/ —— 实现 p0-p1-core item-9 指令条件规则!长期等待的功能落地
  • PR#3318(open)preconnect + PR#3319 ✓(2026-04-18 16:40 UTC 合并)early input — 启动优化拆分为两个独立 PR,原 PR#3085 已关闭被替代

新 hook 类型 PR(暂不单独追踪,归入 hook 系统扩展)

  • PR#3388(open)— add prompt hook type with LLM evaluation support(延续 PR#2990 关闭后的方向)
  • PR#3378(open)— Add TodoCreated and TodoCompleted hooks

其他观察到的新开 PR

  • PR#3352 ✓(2026-04-17 合并)— dual-output sidecar mode for TUI(新颖 UX 方向)
  • PR#3329 — real-time token consumption display(UI polish)
  • PR#3377 — slash command multi-mode expansion Phase 2(延续 PR#3283)
  • PR#3377 — slash command Phase 2

关闭的 PR(不作为伪需求,只是路线调整):

  • PR#3085(startup optimization)被 PR#3318 + PR#3319 替代
  • PR#2990(prompt hook LLM condition)被 PR#3388 替代
  • PR#3261(/history command)— closed
  • PR#3258、PR#2760、PR#3082 — 各类关闭

计数变化:追踪 PR 49 → 52(+PR#3318、+PR#3319、+PR#3339、+PR#3383;-PR#3085 关闭),已合并 ✓ 28 → 48(本轮 +18 merged,主要是 Claude Code/AgentScope 等项目的长期打磨成果;晚间补 PR#3339 ✓ 于 2026-04-17 14:05 UTC 合并)。

2026-04-17(Copilot CLI 0.0.381 → 0.0.402 更新扫描)

扫描 GitHub Copilot CLI v0.0.381 到 v0.0.402 的 changelog.json(22 个版本,来自 @github/copilot@0.0.403 本地 npm 包 + github/copilot-cli GitHub 仓库 releases),识别 Qwen Code 可借鉴的新能力。本次排除了已被 Qwen Code 覆盖的特性(如 /review/resume/yolo、plan mode、shell parallel、MCP OAuth)。

新增追踪(4 项)

#功能Copilot CLI 版本审查
p2-tools-commands item-26/experimental 实验特性统一门控v0.0.396✅ Copilot 提供了统一注册表,优于 Qwen 目前 env var/settings 分散配置
p2-perf item-35自定义指令文件 SHA-256 去重v0.0.394✅ 零风险 context 节约
p2-tools-ui item-21大粘贴内容自动存到工作区文件(>30KB)v0.0.397✅ 具体 UX 痛点修复
p3-features item-17--config-dir CLI flagv0.0.382✅ CI/多租户场景原生支持,补 PR#2953 QWEN_HOME env var

观察到但不追踪(Qwen Code 已覆盖或不适用):

Copilot 新特性不追踪原因
Autopilot mode(v0.0.400, experimental)Anthropic/Claude Code 已有 Auto mode,qwen-code /loop 类似方向
/review(v0.0.388)Qwen Code 已有(PR#2932 等,见 platform item-2)
/resume(v0.0.386)、/yolo(v0.0.381)、/init(v0.0.396)、/rename(v0.0.392)Qwen Code 已有
OAuth MCP(v0.0.389)、MCP 插件分发(v0.0.389)Qwen Code MCP 基础已有
/delegate / & 前缀后台(v0.0.384/v0.0.394)Qwen Code 已有 PR#3076 ✓(2026-04-17 合并)background subagents
/diff + Esc-Esc 回退(v0.0.395/v0.0.399)重叠 p2-core item-10 文件历史快照 + PR#3292 session rewind
LSP 工具(v0.0.399, experimental)Qwen Code LSP 已 7,422 行(见 opencode 对比 item-16)
移除捆绑 LSP(v0.0.400)Qwen 方向相反:PR#3170 正在加强 LSP,Copilot 的这个决策不适合借鉴
Extended thinking for Claude(v0.0.384)Provider 特定功能
MSI installer(v0.0.389)安装器工具链,非核心能力

排除(伪需求审查)

  • Copilot CLI changelog 中未发现明显 gated 特性(相比 Claude Code 的 tengu_*USER_TYPE === 'ant' 模式)
  • 大部分新特性是直接可用的 stable 功能,Copilot CLI 的门控方式更宽松(/experimental 主动 opt-in)

有趣的反向观察(Copilot 做了 Qwen/Claude 没做的减法):

  • v0.0.400 移除捆绑 LSP servers(TypeScript、Python)—— 从"大而全"改为"按需外部调用"。值得注意的是 Qwen Code/Claude Code 都在加强 LSP(Qwen Code LSP 7,422 行 vs Copilot 移除)。这是架构哲学差异,不必盲目跟随。

总项数:256 → 260(+4),p2-tools-commands 25→26,p2-perf 34→35,p2-tools-ui 20→21,p3-features 16→17。

2026-04-17(Claude Code 2.1.82 → 2.1.112 更新扫描)

扫描 Claude Code v2.1.82 到 v2.1.112 的 CHANGELOG(30 个版本,涵盖 2 月时间窗口),识别 Qwen Code 可借鉴的新能力。系统性地检查每个新特性的源码门控(避免 item-22/item-20 那样的伪需求),已验证 5 项值得追踪 + 1 项排除

新增追踪(5 项,各 item 含 ⚠️ 伪需求审查结果)

#功能优先级Claude Code 来源审查
p2-tools-commands item-23PreCompact Hook(压缩前钩子)P2v2.1.105 commands/compact/compact.ts executePreCompactHooks()✅ 真实能力,与现有 PostCompact 对称
p2-tools-commands item-24模型通过 Skill 工具调用内置 Slash 命令P2v2.1.108 "The model can now discover and invoke built-in slash commands like /init, /review, and /security-review via the Skill tool"✅ 真实能力
p2-tools-commands item-25Statusline Refresh IntervalP3v2.1.97 refreshInterval setting✅ 真实能力,扩展 PR#2923
p2-stability item-42子进程 PID 命名空间沙箱 + 脚本次数限制P2v2.1.98 CLAUDE_CODE_SUBPROCESS_ENV_SCRUB + CLAUDE_CODE_SCRIPT_CAPS✅ 真实能力(env var 控制不是 gate)
p2-stability item-43会话 Recap(返回时上下文摘要)P2v2.1.108 /recap + v2.1.110 auto-show; services/awaySummary.ts✅ 真实能力

排除(1 项,伪需求审查发现)

  • /ultrareview(v2.1.111)— "cloud parallel multi-agent review"。源码 commands/review/ultrareviewEnabled.ts:13 验证是 tengu_review_bughunter_config.enabled === true 门控(GrowthBook feature flag,默认 false)。当前是实验性功能对外不可用——同 item-22/item-20 一类伪需求,不作为 Qwen Code 改进目标

观察到但暂不追踪(合理理由)

新功能为何不追踪
/effort slider + xhigh 等级(v2.1.111)Anthropic Opus 4.7 specific,不适用于多 provider 的 Qwen Code
PowerShell tool(v2.1.111)平台特定(Windows),Bash 工具已覆盖多数场景
Auto mode(v2.1.111)Anthropic Max 订阅专属,模型特定
/tui fullscreen(v2.1.110)已有 PR#3013 SlicingMaxSizedBox 追踪防闪烁
/focus command(v2.1.110)可合并到现有 UI 相关 item 作为增强
/team-onboarding(v2.1.101)较专一的用例(团队协作),低优先级
OS CA cert 默认信任(v2.1.101)已被 p2-core item-19 企业代理覆盖
/powerup 交互式教程(v2.1.90)UX 糖衣,不是核心能力
PID namespace (v2.1.98)✅ 已追踪(item-42)
WebFetch strip <style>/<script>(v2.1.105)微优化,可合并到 Web 工具文档
Skill description cap 1536(v2.1.105)已有 Skill 相关 items 可合并
Plugin bin/ executables(v2.1.91)已有 plugin 相关 item(OpenCode 对比中)
Session memory auto-discovery + auto-dream已追踪(item-4 / item-5 / PR#3087)

总项数:251 → 256(+5),p2-tools-commands 22→25,p2-stability 41→43。

审查规则强化:Claude Code 2.1.82→2.1.112 的 CHANGELOG 是未来每次版本升级都该做的例行审查源——新能力可能是真实功能gated 伪需求,必须逐项检查源码门控(tengu_* GrowthBook flag / USER_TYPE === 'ant' / CLAUDE_CODE_EXPERIMENTAL_* 等)才能判断。

2026-04-16(伪需求删除:ConfigTool)

用户质疑 p2-core item-20 ConfigTool 必要性,经源码验证发现这是一个 Anthropic 内部专属工具,对外部 Claude Code 用户完全不可见

源码证据 /root/git/claude-code-leaked/tools.ts:214-215

...(process.env.USER_TYPE === 'ant' ? [ConfigTool] : []),
...(process.env.USER_TYPE === 'ant' ? [TungstenTool] : []),

USER_TYPE === 'ant' 表示 Anthropic 内部员工——只有在此条件下 ConfigTool / TungstenTool / REPLTool 才会被注册到工具列表。所有公开 Claude Code 用户从未访问过 ConfigTool

结论:这是比 item-22 auto-background 更严重的伪需求:

  • item-22 是 GrowthBook flag 默认关闭但可开启
  • item-20 是硬编码的 USER_TYPE === 'ant' gate——没有外部启用路径

作者行为佐证PR#2911 由 wenshao 提交后自己关闭,很可能在实现中发现该能力对外部用户无意义。Agent 需要读写配置可以直接用 Read/Write 工具读 settings.json,无需独立的 ConfigTool 抽象。

变更

  1. p2-core item-20 ConfigTool 删除
  2. p2-core items 21-27 重编号为 20-26(终端主题检测、队列输入编辑、状态栏紧凑布局、会话标签与搜索、Plan 状态机化、A2A、OTel)
  3. 主矩阵删除 ConfigTool 行,更新所有 #item-N 链接
  4. 子报告表 p2-core 27 → 26,总项数 252 → 251
  5. Changelog 记录 + 指向 tools.ts:214-215 源码证据

强化的审查规则(加入审计清单):

5. 是否有 USER_TYPE === 'ant' 条件注册? 这比 GrowthBook flag 更封闭——是"Anthropic 内部专属"的硬编码 gate。任何此类工具都不应进入外部对标矩阵(TungstenTool / REPLTool 同理)。

查同类工具tools.ts 中其他 USER_TYPE === 'ant' 条件注册的工具有 TungstenTool(Anthropic 内部实验工具,性质不明)和 REPLTool(Python REPL,内部专属)。这两个都不在改进报告中,确认保持不追踪。

2026-04-16(PR 状态全面刷新)

全量扫描 qwen-code PRs updated:>=2026-04-14,发现多项状态变化:

1. 重大更新:Fork Subagent 已合并

  • PR#2936合并于 2026-04-14(tanzhenxin 提交)— feat(core): implement fork subagent for context sharing
  • 这是 P0 item-2 Fork Subagent 的主实现 PR,标记所有引用为 ✓
  • P0 级别的核心能力落地:子代理继承完整对话上下文 + 共享 prompt cache 省 80%+ 费用

2. 勘误:PR#2380 之前错标为 merged

  • 2026-04-14 的 "2026-04-14(晚间更新)" changelog 条目写"[#2380] 全部已合并"不准确
  • gh pr view 2380 实际状态:CLOSED(未合并)
  • 已修正 p0-p1-platform.md item-2 的 PR 表格标注 + 主 changelog 对应段落
  • /review skill 的 4 个合并 PR 是 #2348 / #2376 / #2687 / #2932,不包括 #2380

3. 状态纠正:3 个曾标注 open 的 PR 现已 CLOSED

  • PR#3022 /branch 会话分支CLOSED(未合并)。由 PR#3292 feat(cli): add session rewind and restore flows(open)跟进(合并 /branch + /rewind 两个方向)
  • PR#2911 ConfigToolCLOSED(未合并,wenshao 自己提交后关闭)
  • PR#2866 upstream backports → CLOSED(从未纳入追踪,观察记录)

4. 新合并 PR(其他维护项)

  • PR#2984 ✓ — feat(vscode-ide-companion): add /account for account display
  • PR#3191 ✓ — feat(acp): LLM-based message rewrite middleware with custom prompts(此前已在 04-15 changelog 记录)
  • PR#3212 ✓ — fix(core): respect custom Gemini baseUrl from modelProviders
  • PR#3251 ✓ — fix(core): allow thought-only responses in GeminiChat stream validation
  • PR#3257 ✓ — fix(cli): make /bug easier to open in terminals without hyperlink support
  • PR#3270 ✓ — fix(cli): ignore literal Tab input in BaseTextInput
  • PR#3294 ✓ — fix(channels/dingtalk): prioritize senderStaffId over senderId for allowedUsers matching
  • PR#3298 ✓ — chore(release): bump version to 0.14.5
  • PR#3299 ✓ — fix(cli): block discontinued qwen-oauth model selection in ModelDialog

5. 政策变更(值得留意)

  • PR#3291 ✓ — feat(auth): discontinue Qwen OAuth free tier (2026-04-15 cutoff)——Qwen OAuth 免费层已于 2026-04-15 终止。Qwen Code 文档的"免费层"描述(README / SUMMARY / pricing.md 等)可能需要相应更新,但这是文档维护任务,不影响改进矩阵
  • PR#3217 ✓(2026-04-13)— docs 更新 quota 耗尽后替代方案(OpenRouter/Fireworks),配套政策变更

6. 新开 PR(观察中,暂不追踪)

  • PR#3292 — session rewind and restore flows(顶替已关闭的 #3022 /branch + #3013 /rewind 方向)
  • PR#3303 — 检测 macOS 上不在 PATH 的 Zed.app
  • PR#3297 ✓(2026-04-18 合并)— tool registry lazy factory with concurrency dedup
  • PR#3295 — SDK ProcessTransport exit listener leak 修复

计数变化

  • 追踪 PR:49 → 49(新增 PR#3292 顶替已关闭的 PR#3022,计数抵消)
  • 已合并 ✓:27 → 28(+PR#2936 Fork Subagent 核心合并)
  • 已关闭 ✗:2 → 5(+PR#3022、+PR#2911、+PR#2380 勘误)

2026-04-15(伪需求审计 + 实验性功能警告)

用户指出 p2-core item-22 自动后台化 Agent 可能是伪需求。经源码验证 /root/git/claude-code-leaked/tools/AgentTool/AgentTool.tsx:72-78

function getAutoBackgroundMs(): number {
  if (isEnvTruthy(process.env.CLAUDE_AUTO_BACKGROUND_TASKS) ||
      getFeatureValue_CACHED_MAY_BE_STALE('tengu_auto_background_agents', false)) {
    return 120_000;
  }
  return 0;  // disabled by default
}

确认为伪需求:Claude Code 此功能默认禁用,仅在 CLAUDE_AUTO_BACKGROUND_TASKS 环境变量 GrowthBook feature flag tengu_auto_background_agents 被启用时才生效(两者默认均关闭)。绝大多数 Claude Code 用户从未体验过此功能。把 feature-gated 实验能力描述为"核心能力"会误导 Qwen Code 开发者投入低 ROI 工作。

正确的方向是显式 run_in_background: true——已在 Agent tool schema 中作为 first-class 参数,也是 Qwen Code PR#3076 ✓(2026-04-17 合并)的真实需求,已落地。

用户追加要求: "同时仔细检查其他的建议,避免误导开发者投入" —— 系统性审计 /root/git/claude-code-leaked 中所有 GrowthBook gates (tengu_*) 和 env var gates (CLAUDE_CODE_EXPERIMENTAL_*),交叉对比改进报告。

审计决策(每个发现都人工验证源码后):

item审计结论动作
p2-core item-22 自动后台化 Agent伪需求(tengu_auto_background_agents default false)删除(后续 items 23-28 重编号为 22-27)
p2-core item-6 Computer Use真实功能但 默认禁用tengu_malort_pedway gate + Max/Pro 订阅双重门控)保留 + ⚠️ 实验性警告,建议降级 P3
p2-core item-11 Deep Link真实功能但 默认禁用tengu_lodestone_enabled gate,utils/deepLink/registerProtocol.ts:302保留 + ⚠️ 实验性警告,建议降级 P3
p0-p1-core item-4 Session MemoryExplore 建议删除 — 拒绝。源码验证 services/SessionMemory/sessionMemory.ts 真实存在,被 skills/bundled/skillify.ts:180commands/compact/compact.ts:58-79 引用保留
p0-p1-core item-5 Auto DreamExplore 建议删除 — 拒绝services/autoDream/autoDream.ts 真实存在,executeAutoDreamquery/stopHooks.ts:52 调用,ConfigTool.autoDreamEnabled 配置项存在,components/memory/MemoryFileSelector.tsx:163FeedbackSurvey/usePostCompactSurvey.tsx:179-194 使用保留(也是 PR#3087 的正确 backport 目标)
p0-p1-engine item-14 Coordinator/Swarm + item-25 Task Management已有"Agent Team 实验性功能"注释,补充源码引用:utils/agentSwarmsEnabled.ts:21-32 显示 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 env var 开启扩展注释,非删除

关键修正:Explore agent 的初次建议包含了两个高影响错误(建议删除 item-4/5),经我直接 grep 验证后驳回。这说明对 audit 结果必须逐项核对源码,不能盲信 agent 输出。

最终变更

  1. p2-core item-22 删除,items 23→22, 24→23, 25→24, 26→25, 27→26, 28→27 重编号
  2. p2-core item-6 Computer Use + item-11 Deep Link 添加 ⚠️ 实验性功能警告 段落(引用具体 gate 名和源文件行号)
  3. 主矩阵对应行状态列追加 ⚠️ 标记
  4. p0-p1-engine Coordinator/Swarm 实验性注释补充 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 源码引用
  5. 主矩阵 p2-core 链接全部更新(#item-23#item-22 等)
  6. 子报告表 p2-core 28 → 27,总项数 253 → 252

验证:子报告合 14+9+27+27+22+20+34+41+16+9+33 = 252 ✓,主矩阵 grep -c '^| \*\*P[0-3]\*\*' = 252

对开发者的建议:未来追踪 Claude Code 新功能进入改进矩阵前,必须验证源码 —— 不能只看文档/截图/PR 描述。检查点:

  1. 该功能是否有 getFeatureValue_CACHED_MAY_BE_STALE('tengu_*', false) 调用?
  2. 该功能是否需要 CLAUDE_CODE_EXPERIMENTAL_*CLAUDE_* 环境变量?
  3. is*Enabled() / get*Ms() 等 guard 函数的默认返回值是什么?
  4. 该功能是否要求特定订阅等级(Max/Pro)?

有任一"是"则不应作为 Qwen Code 的 P2/P1 核心改进目标——要么降级到 P3,要么标注 ⚠️ 实验性警告,要么完全拒绝。

2026-04-15(补充追踪:Fast Mode 部分实现)

用户指出 p2-core item-5 Fast Mode 标注"仅指定备用模型"不准确——Qwen Code 已实现 fastModel 配置体系。审查 qwen-code 源码 + git log 后确认:

Qwen Code 的 fastModel 实现时间线

  • 49702ce26 refactor: 合并 suggestionModel + speculationModel → 统一 fastModel
  • e9bc686f0 refactor: fastModel 移到顶层配置(与 model 并列)
  • fea1739d2 feat: /model --fast 命令
  • c06276799 feat: /model --fast 打开选择对话框
  • PR#3077 ✓ improve /model --fast description clarity
  • PR#3086 ✓ add --fast hint to /model description
  • PR#3120 ✓ replace text input with model picker for Fast Model in /settings

但不完全对齐 Claude Code Fast Mode

  • Claude Code Fast Mode = 同一模型的速度分级(Opus 4.6 standard vs Opus 4.6 fast,依赖 Anthropic priority tier 定价)
  • Qwen Code fastModel = 另一个更快/更便宜的模型(如 qwen-turbo 作为 qwen-plus 的 fastModel)
  • 两者解决相似问题(fast-response 场景),但实现路径不同。Qwen Code 走"换模型"方案的根本原因是 DashScope / OpenAI 不提供 priority tier 定价,只有 Anthropic 有

修复

  • item-5 标题加 ⚠️ 部分实现标记
  • 详细页加完整实现时间线(4 commits + 3 merged PRs)+ 两种方案对比表 + "为什么走不同方案"说明
  • 主矩阵 item-5 行:状态 "仅指定备用模型" → "⚠️ 部分实现(fastModel 走不同方案)",进展列补 3 个 merged PRs
  • 架构差异总结表同步更新

追踪计数不变:PR#3077 / #3086 / #3120 早已在报告其他位置引用(changelog + 历史表),本次只是把它们归属到 item-5 的进展列,不是新增追踪。总追踪 PR 仍为 49,merged 仍为 27

2026-04-15(补充追踪:Remote Control Bridge 3 个 PR)

用户指出 item-7 Remote Control Bridge "进展"列为空,搜索后发现 3 个未追踪 PR,分两条路径推进同一个 item:

路径 A:本地 HTTP/WebSocket + Web UI + QR code(对标 Claude Code Bridge)

  • PR#2330(open)— feat: remote-control feature for browser-based CLI interactionhttp://localhost:7373/ + 64-char hex token + qrcode-terminal 扫码连手机 + rate limit + idle timeout + XSS sanitization
  • PR#1678(open,较早)— Web GUI,和 #2330 有重叠

路径 B:Channels 平台(通过消息平台远程驱动)

  • PR#26282026-04-01 合并)— feat(channels): extensible Channels platform@qwen-code/channel-base 插件系统 + 内置 Telegram/WeChat/DingTalk 3 个 adapter + allowlist/pairing/group policies + session 管理。这是另一种 remote control——通过 IM 驱动本地 Agent

修正

  • 主矩阵 item-7 行"进展"列从 "—" 补上 3 个 PR
  • "Qwen Code 现状"列从"缺失"改为"Channels 平台已合并(IM 路径),Web/QR 路径 review 中"
  • p0-p1-platform item-7 详细页新增长段落,对比两种路径的适用场景、实时性、已合并状态

总追踪 PR:47 → 49(+PR#2330、+PR#2628;PR#1678 只提及不单独计数),merged 26 → 27(+PR#2628 ✓)。

2026-04-15(补充追踪)

系统扫描 pull/ URL 跨报告交叉引用,发现 5 个此前未追踪的 PR。两个应立即追踪(已执行),3 个changelog 级记录(无对应 matrix item):

已加入追踪(主矩阵 + 详细页都更新):

  • PR#3170(open,huww98)— LSP 官方 SDK + didSave 实时诊断。挂到 p2-perf item-7 LSP 服务器并行启动,与 PR#3034(diagnostics caching)互补。核心是"实时诊断"而非"启动并行"——解决 Edit 后必须手动 refresh 才能看到新 diagnostics 的问题
  • PR#3276(open)— /review Step 4 并行 dispatch 强化(弱模型)。挂到 p0-p1-platform item-2 GitHub Code Review 的"进行中的增强"。修复 qwen3.6-plus 等弱模型会串行执行 5 agent 的问题(替换单行指令为 callout + ASCII 正反例 + self-check + "STOP" 模式打断)

仅 changelog 记录(无对应 matrix item,为社区开发方向观察):

  • PR#3191 ✓(2026-04-15 合并)— ACP LLM 消息重写中间件TurnBuffer 累积 turn content(thoughts + messages),LlmRewriter 用 user-defined system prompt 重写为用户友好格式。ACP 模式专用,不影响其他 session path
  • PR#3283(open)— 命令能力化 metadata(Phase 1):替换硬编码的 ALLOWED_BUILTIN_COMMANDS_NON_INTERACTIVE 白名单为 per-command commandType + supportedModes 元数据。是 broader slash command 架构重构的 Phase 1,零行为回归
  • PR#3165(open)— MiniMax provider 支持。扩展 qwen-code 的 provider 生态到 MiniMax

总追踪 PR:45 → 47(新增 PR#3170 + PR#3276),merged 26 → 26(这次追加的 2 个 PR 都是 open)。

2026-04-14(追加:PR#3087 Auto Dream 追踪修复)

用户指出 item-5 Auto Dream 主矩阵的"进展"列为空,但 PR#3087 标题明确是 managed auto-memory + auto-dream system,即同时覆盖 item-4 会话记忆extract 子系统)和 item-5 Auto Dream(dream 子系统)。

验证 PR 内容后确认:

  • extract → item-4(提取记忆)—— 顺便修复了一个 bugsaveCacheSafeParamsskipNextSpeakerCheck early-return 路径跳过,导致 extract 从未触发
  • dream → item-5(后台整理/去重/合并)
  • PermissionManager wrapper 限制 memory scope 写入权限
  • PR 描述明确声明对齐 Claude Code 的 extract + dream 实现模式

修复:主矩阵 item-5 行的"进展"列补上 PR#3087,并在 p0-p1-core item-5 详细页补充 "进展" 段落说明双子系统覆盖。

2026-04-14(追加:PR#2949 追踪缺口修复)

社区反馈发现 PR#2949Skill 级模型覆盖,tanzhenxin 提交,2026-04-13 合并)未被追踪。检查后确认这是一个真实的追踪缺口

  • skill-system-deep-dive.md 矩阵 的"模型覆盖"列此前标注 Qwen Code 为 ✗(Claude Code / Copilot CLI 为 ✓)
  • 改进报告从未为"Skill 模型覆盖"单独立过 item

补救

  • 新增 item-22 Skill 级模型覆盖(p2-tools-commands 子报告),直接标注 ✓ 已合并
  • 更新 skill-system-deep-dive.md Qwen Code 行的"模型覆盖"列从 ✗ 改为 ✓(同 provider)
  • PR#2949 实现要点:skill frontmatter model: 字段 → SkillConfig.model → skill tool call 之后的 API 请求使用该 model → agentic loop 结束自然恢复。Phase 1 仅同 provider 切换,跨 provider 需要 ContentGenerator threading,延到 follow-up PR。

总项数 252 → 253,p2-tools-commands 子报告 21 → 22。 总追踪 PR:45 个(26 已合并 ✓)

2026-04-14(AgentScope 参考新增 3 项)

基于对 AgentScope(阿里 Tongyi Lab,215 文件 / 43K 行)的源码级分析,新增 3 条 P2 improvement item,均标注"AgentScope 参考":

  • item-24 Plan 状态机化 — 4 状态 subtask(todo/in_progress/done/abandoned)+ 每轮自动 hint 注入,升级 /plan 从"一次性文档"到"持久状态机"
  • item-25 A2A 协议集成 — 集成 a2a-sdk + AgentCard + Well-known/File/HTTP resolver,让 qwen-code 参与跨 agent 网络
  • item-26 OTel 原生 Tracing — 5 类 span extractor(Agent/LLM/Tool/Formatter/Embedding),对标 AgentScope src/agentscope/tracing/_trace.py:24-45 的 13 个 extractor 实现

总项数 249 → 252,p2-core 子报告 25 → 28。(后于 2026-04-15 伪需求审计删除 item-22,最终项数 252,见该日 changelog 条目)。

新增文档章节 docs/frameworks/

  • agentscope/ — AgentScope 源码级 deep-dive(6 文件)
  • comparison.md — 6 款 framework 横向对比
  • 5 个 framework 单文件(LangGraph / CrewAI / AG2 / MAF / LangChain)—— 基于文档级分析

2026-04-14(晚间更新)

勘误:social 反馈指出 platform item-2 "GitHub Code Review 多 Agent 审查" 已被 qwen-code 内置 /review skill 完整覆盖。审查源码 packages/core/src/skills/bundled/review/SKILL.md 后确认:

  • Step 4:dispatch 5 个 task agent 并行执行(5 个维度:correctness / security / quality / performance / build-test)
  • Step 9:用 GitHub Create Review API 一次性提交 verdict + inline comments 数组(模仿 Copilot Code Review)
  • Step 5/6/8:去重、反向审计、autofix 流程完整
  • .qwen/review-rules.md 项目规则(等同 REVIEW.md 概念)
  • 增量 cacheworktree 隔离跨仓库 lightweight 模式等额外能力

实现深度已超过 Claude Code 托管的 GitHub Code Review。涉及 PR:#2348 ✓ / #2687 ✓ / #2932 ✓ —— 3 个 PR 已合并#2376(multi-model arbitration,CLOSED 2026-04-13)和 #2380extends: bundled均已关闭(未合并,勘误:之前错标为 merged)。

更新 platform item-2 状态为"✓ 已实现",新增 5 个 PR 的 ✓ 标记到主矩阵。

总追踪 PR 重新计数:44 个(25 已合并 ✓,2 已关闭移除)

2026-04-14

继续追踪社区 PR(qwen-code 4/14 连续合并 + 新开):

  • 新标记已合并(2 个 ✓):
    • #3232 ✓(启动性能剖析器,7 检查点 + QWEN_CODE_PROFILE_STARTUP=1 环境变量)— 作为 item-8 启动优化的测量基线,与主 PR#3085 互补
    • #3246 ✓(从流式 SSE 帧中检测 rate-limit 错误)— 解决 DashScope 子代理 Throttling.AllocationQuota 立即失败问题,是 engine item-8 API 退避逻辑的前置条件
  • 新增追踪 PR(3 个 open):
    • #3214(tanzhenxin)— 替换 fdir 爬虫为 git ls-files + ripgrep 两级回退,Closes Issue#3137。直接解决 @ 文件补全在大项目里按键每次重新扫描的性能问题;关联 p2-core item-15 FileIndex
    • #3242(open)— 保证 startup input 穿透 full init 流程不丢失,补充 PR#3085
    • #3266(open)— 新增 PostTurn hook 事件(每次模型 turn 边界触发),延续 PR#2825 的"新 hook 事件类型"方向
  • 其他新开 PR(观察中,暂不追踪)
    • #3178 ✓(2026-04-18 合并)+ #3236 工具验证重试循环检测 + 停止指令
    • #3255 Fork Subagent params 构造时注入重构
    • #3261 /history 命令管理已保存的聊天会话
    • #3248 ACP 集成完整 hooks 支持
  • 其他维护合并(未对应矩阵条目):
    • #3217 docs:更新 quota 耗尽后的替代方案(OpenRouter/Fireworks)
    • #3249 ✓ VS Code 会话 tab 标题长度限制
  • 总追踪 PR:40 个(21 已合并 ✓,2 已关闭移除)

2026-04-13(全量审计 + 晚间更新)

追踪社区 PR 合并(由社区反馈触发审计 + 全量扫描最近 4 天 PR 状态):

  • 标记已合并(新增 7 个 ✓):
    • #2864 ✓(智能工具并行 — Kind-based consecutive batching,item-7 + item-37 双侧面)
    • #2904 ✓(上下文 Tips 系统,registry-based + LRU 跨会话轮转 + Responding→Idle hook)
    • #3006 ✓(L2 microcompaction — 空闲上下文清理 + cache_edits 增量缓存删除)
    • #3064 ✓(subagent disallowedTools 字段)
    • #3066 ✓(approval mode 传播到 sub-agents)
    • #3146 ✓(tools.sandboxImage 配置项,部分覆盖 item-30)
  • 移除已关闭 PR
    • #3082 CLOSED(终端主题检测,未合并 — 由作者 BZ-D 关闭)
    • #3105 CLOSED(/chat 命令,已关闭待 #3190 替代)
  • 勘误:从 item-1 Conditional Hooks 移除错误的 PR#2825 关联——PR#2825 实际实现的是 StopFailure + PostCompact 两个新 hook 事件,和 Hook if 字段条件过滤完全不同
  • item-37 状态更新:重写为"已合并"版本,对比 PR#2864 与 Claude Code StreamingToolExecutor 在 Kind 分类、batching 策略、shell 读写检测上的差异
  • 观察到的重要维护性合并(未对应改进矩阵条目):
  • 总追踪 PR:38 个(19 已合并 ✓,2 已关闭移除)

2026-04-13

新增 item-14(闭环学习系统):基于对 Hermes Agent 源码的分析(822 .py / 369K 行),新增 p0-p1-core item-14 "Nudge 驱动的闭环学习"。总项数 248→249。

  • 触发codeagents Issue #129(pomelo-nwu 建议加入 Hermes Agent 研究)
  • 核心发现:Hermes 的"闭环学习系统"由 4 个子系统组成 — 冻结快照 Memory / 自主 Skill + patch 自修补 / SQLite FTS5 跨会话搜索 / 双计数器 Nudge 触发
  • 对 Qwen Code 的价值:PR#3087(managed auto-memory + auto-dream)缺少 ① 双计数器 ② 冻结快照保护 prompt cache ③ 保守 review prompt 三个关键要素
  • 新增文档
  • Code Agent 总数:18 → 19(新增 Hermes Agent)

2026-04-11

  • 标记已合并:#2871 ✓(队列输入编辑 Up arrow key)、#2914 ✓(Markdown 表格 CJK 列宽)
  • 移除已关闭:#3105(/chat——已关闭,由 #3093 替代)
  • 新增 PR 追踪:#3146(sandbox settings 中配置 sandboxImage)、#3034(LSP diagnostics caching)、#3048(vibe mode 安全 shell 自动批准)
  • 总追踪 PR:38 个(13 已合并 ✓)— 后于 04-13 晚间全量审计更新为 19 已合并

2026-04-10(晚间更新)

  • 新增 PR 追踪:#3087(auto-memory + auto-dream 记忆系统)、#3082(终端 dark/light 主题检测)、#3093(会话 rename/delete/auto-title)、#3105(/chat 命名会话管理)、#3115(Commit Attribution per-file AI 贡献追踪)
  • 总追踪 PR:36 个(11 已合并 ✓)

2026-04-10

  • 标记已合并:#3042 ✓(/context detail 子命令)
  • 新增 PR 追踪:#3085(启动优化 API preconnect + 早期输入捕获)、#3080(CI/CD 持久化重试模式)、#3079(/batch 并行批量操作 Skill)、#3076(Agent 工具 run_in_background)
  • 总追踪 PR:31 个(10 已合并 ✓)

2026-04-09(晚间更新)

  • 标记已合并:#2923 ✓(Status Line 自定义)、#3008 ✓(/plan 退出恢复模式)
  • 新增 PR 追踪:#3064(disallowedTools Agent 工具黑名单)、#3066(approval mode 传播到 sub-agent)、#3042(/context detail 子命令)
  • 总追踪 PR:27 个(9 已合并 ✓)

2026-04-09

  • 修正子报告项数:engine 24→27、stability 34→41、hooks 32→33
  • 修正 Deep-Dive 索引数:134→133(实际值)
  • 同步 README.md 数据
  • 重写 5 个 Agent 文档系列(Copilot CLI / Codex CLI / Aider / Goose / Kimi CLI)为开发者视角

2026-04-08(晚间更新)

  • 标记已合并:#2897 ✓(Thinking 块保留)、#2898 ✓(输出 Token 升级)、#2921 ✓(/plan 计划模式)
  • 新增 PR 追踪:#3013SlicingMaxSizedBox 防闪烁——P0 backport 项!)、#3006(microcompaction 空闲压缩)、#2990(prompt hook——LLM 推理决策 Hook,Claude Code 独有能力的 backport)
  • 总追踪 PR:27 个(9 已合并 ✓)

2026-04-08

新增 9 项改进建议(来源:learn-claude-code 概念分析),总项数 240→248:

优先级新增项详情
P1QWEN.md system-reminder 注入engine#26
P1错误恢复分类路由(truncation/overflow/transport 三分支)engine#27
P2Query TransitionReason 枚举(6 种转换原因)stability#36
P2工具并发安全分类(concurrencySafe 标记)stability#37
P2工具执行进度消息(>3s 发射进度)stability#38
P2运行时任务模型(work-graph vs runtime task)stability#39
P2后台通知 drain-before-callstability#40
P2压缩后身份重注入(messages≤3 时注入身份)stability#41
P3团队通信协议(邮箱/心跳/关闭请求)hooks#33

勘误:删除 item-20(/thinkback)——经源码验证 Claude Code 的 /thinkback 是 Year in Review 动画功能,非会话时间线回顾。原 item-21(/context)重编号为 item-20。

2026-04-07

  • 新增 PR 追踪:#2936(Fork Subagent)、#2932 ✓(/review 增强——实现了审查报告 10 项建议中的 9 项)
  • 标记已合并:#2854 ✓(Mid-Turn Queue Drain)、#2889 ✓(危险操作指导)

2026-04-06

  • 新增 7 个 PR 追踪:#2921(/plan)、#2923(StatusLine)、#2914(表格渲染)、#2915(/clear)、#2916(/context SDK)、#2911(ConfigTool)、#2904(Tips 系统)

2026-04-05

  • 初始版本:240 项改进建议 + 133 篇 Deep-Dive 索引