From fb7d9e661c93ebf95f7cd289269f47935614ae31 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:06:19 +0800 Subject: [PATCH 1/9] feat: add 26 new improvement items after 5-round audit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on five rounds of directionless + reverse + cross-validation audits of Claude Code (decompiled) and Qwen Code source code: - Added 26 net-new improvement items (41 proposed, 15 removed as duplicates) - P1: System Prompt Modularization, Message Normalization - P2: Git Worktree (implemented), REPL Sandbox, Workflow Scripts, Session Tags, MCP OAuth (implemented), MCP Channel Notification, @include Directive, Attachment Protocol, Image Compression, Git Status Injection, IDE Diagnostics Injection, Terminal Theme, Auto-Background, Secret Scanning, Subprocess Env Sanitization, Structured Diff, OSC Notifications, OSC 8, Colorblind Theme, Custom Keybindings - P3: Session Branch, Security Review, PR Comments - Architecture diff table updated with 16 new rows - Qwen Code advantages section added (8 items where Qwen leads) - Audit methodology section added (§六) Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- .../qwen-code-improvement-report.md | 99 +++++++++++++++++-- 1 file changed, 92 insertions(+), 7 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 069f9e5e..406dbdc7 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -2,9 +2,11 @@ > 基于对 Claude Code(源码分析,56 个顶层模块,~1800 文件)与 Qwen Code(开源源码,~500 文件)的系统性源码对比分析。 > +> **审计方法**: 五轮无方向 + 反方向 + 交叉审计(详见 [§六](#六审计方法说明))。 +> > 如需查阅源码,可参考本地仓库(不在本文档库中): -> - Claude Code: `../claude-code/`(源码快照) -> - Qwen Code: `../qwen-code/` +> - Claude Code: `../claude-code-leaked/`(反编译分析) +> - Qwen Code: `../qwen-code/`(开源) ## 一、Claude Code 功能模块清单 @@ -217,6 +219,31 @@ | **P3** | Vim 完整实现 — motions + operators + textObjects + transitions 完整体系 [↓](./qwen-code-improvement-report-p3.md#item-9) | 基础 vim.ts | 中 | — | | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | +| **P1** | [系统提示模块化](#system-prompt-modular) — sections 缓存 + dynamic boundary + uncached 标记 [↓](#system-prompt-modular) | 单一字符串拼接 | 中 | — | +| **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result [↓](#message-normalization) | 构造即正确,无需后处理 | 中 | — | +| **P2** | [Git Worktree](#git-worktree) — gitWorktreeService.ts 已实现(826行) [↓](#git-worktree) | 已实现 | 小 | — | +| **P2** | [REPL 沙箱](#repl-sandbox) — AST 读写分类已覆盖 [↓](#repl-sandbox) | 已覆盖 | 中 | — | +| **P2** | [工作流脚本](#workflow-scripts) — Hook 系统可替代 [↓](#workflow-scripts) | 已覆盖 | 中 | — | +| **P2** | [会话标签与搜索](#session-tags-search) — `/tag` 会话标签 + 按 repo/标题搜索 [↓](#session-tags-search) | 仅基础 load/save | 小 | — | +| **P2** | [MCP OAuth](#mcp-oauth) — oauth-provider.ts 已实现(960行) [↓](#mcp-oauth) | 已实现 | 中 | — | +| **P2** | [MCP 通道通知](#mcp-notification) — MCP channel notification 支持服务器主动推送 [↓](#mcp-notification) | mcp-client.ts 无 channel 概念 | 中 | — | +| **P3** | [会话分支](#session-branch) — `/branch` 从历史会话创建分支 [↓](#session-branch) | 可用 sessionService 扩展 | 中 | — | +| **P3** | [安全审查](#security-review) — skill 可快速补齐 [↓](#security-review) | skill 可补齐 | 小 | — | +| **P3** | [PR 评论](#pr-comments) — GitHub Actions 可实现 [↓](#pr-comments) | Actions 可实现 | 中 | — | +| **P2** | [@include Directive](#include-directive) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 [↓](#include-directive) | 缺失 | 中 | — | +| **P2** | [附件协议](#attachment-protocol) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 [↓](#attachment-protocol) | 缺失 | 中 | — | +| **P2** | [图片压缩流水线](#image-compression) — format→resize→quality 阶梯 + JPEG fallback [↓](#image-compression) | 无压缩 | 中 | — | +| **P2** | [Git 状态自动注入](#git-status-injection) — gitBranch/cwd/fileCount 每轮自动注入系统提示 [↓](#git-status-injection) | 仅统计/不注入 | 小 | — | +| **P2** | [IDE 诊断注入](#ide-diagnostics) — LSP 诊断自动收集 + 选区自动注入 [↓](#ide-diagnostics) | 依赖 IDE 推送 | 中 | — | +| **P2** | [终端主题检测](#terminal-theme) — OSC 11 dark/light + COLORFGBG 回退 [↓](#terminal-theme) | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](#auto-background) — 超时 15s 自动转后台 + Assistant 模式检测 [↓](#auto-background) | 需显式指定 | 小 | — | +| **P2** | [密钥扫描](#secret-scanning) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 [↓](#secret-scanning) | 仅 Team Memory 场景需要 | 中 | — | +| **P2** | [子进程环境变量清洗](#env-sanitization) — 30+ 敏感变量自动剥离 [↓](#env-sanitization) | OS 层职责 | 中 | — | +| **P2** | [结构化 Diff](#structured-diff) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 [↓](#structured-diff) | 基础 inline diff | 中 | — | +| **P2** | [OSC 通知](#osc-notifications) — iTerm2/Kitty/Ghostty 通知 + 进度 [↓](#osc-notifications) | 仅 bell 响铃 | 小 | — | +| **P2** | [OSC 8 超链接](#osc-8) — Cmd+Click 打开文件/URL [↓](#osc-8) | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | +| **P2** | [色觉无障碍主题](#colorblind-theme) — daltonized 红绿→蓝橙 diff 色板 [↓](#colorblind-theme) | 小众需求 | 小 | — | +| **P2** | [自定义快捷键](#custom-keybindings) — multi-chord + keybindings.json [↓](#custom-keybindings) | keyMatchers.ts 不可配置 | 中 | — | > 点击改进点名称可跳转到 Deep-Dive 文章;每项的详细说明(缺失后果 + 改进收益 + 建议方案)见 [§三](#三全部改进点详细说明)。 @@ -232,8 +259,8 @@ | [P2 核心功能与企业特性](./qwen-code-improvement-report-p2-core.md) | 中等优先级(Shell 安全、MDM 企业策略、Token 计数、Computer Use 等) | 24 | | [P2 工具与命令扩展](./qwen-code-improvement-report-p2-tools.md) | 中等优先级(MCP 动态插槽、Ripgrep 回退、Notebook Edit、LSP 等) | 29 | | [P2 性能优化](./qwen-code-improvement-report-p2-perf.md) | 中等优先级(流式执行、缓存模式、延迟初始化、请求合并等) | 34 | -| [P2 稳定性、安全与 CI/CD](./qwen-code-improvement-report-p2-stability.md) | 中等优先级(Unicode sanitization、sandbox集成、SSRF 防护、密钥扫描等) | 34 | -| [P3 详细说明](./qwen-code-improvement-report-p3.md) | 低优先级(Feature Gates、Vim、语音、插件市场等) | 11 | +| [P2 稳定性、安全与 CI/CD](./qwen-code-improvement-report-p2-stability.md) | 中等优先级(Unicode sanitization、sandbox集成、SSRF 防护、密钥扫描等) | 60 | +| [P3 详细说明](./qwen-code-improvement-report-p3.md) | 低优先级(Feature Gates、Vim、语音、插件市场等) | 30 | ## 四、架构差异总结 @@ -245,7 +272,11 @@ | **智能工具并行** | Kind-based batching(默认 10 并发) | Agent 并发 / 其他顺序 | 中等差距 | [PR#2864](https://github.com/QwenLM/qwen-code/pull/2864) | | 投机执行 (Speculation) | 完整 overlay-fs + cow(991 行) | v0.15.0 已完整实现(563 行),默认关闭 | 小差距 | [PR#2525](https://github.com/QwenLM/qwen-code/pull/2525) ✓ | | 启动优化 | API Preconnect + Early Input | 无 | 缺失 | — | -| CLAUDE.md 条件规则 | frontmatter `paths:` + 惰加载 | 无 | 中等差距 | — | +| CLAUDE.md 条件规则 | frontmatter `paths:` + 惰加载 | 无条件加载 | 中等差距 | — | +| 系统提示模块化 | sections 缓存 + dynamic boundary | 单一字符串拼接 | 中等差距 | — | +| 消息规范化 | 合并连续 user + 修复孤立 tool_use | 构造即正确 | 小差距 | — | +| MCP Channel Notification | Channel notification 服务器推送 | 无 channel 概念 | 中等差距 | — | +| @include 指令 | 递归引用 + 外部审批 | 缺失 | 缺失 | — | | 会话记忆 (Session Memory) | SessionMemory + memdir | 简单笔记工具 | 显著落后 | — | | 自动记忆 (Memory) 整理 | Auto Dream | 无 | 缺失 | — | | 上下文折叠 (Context Collapse) | History Snip | 无 | 缺失 | — | @@ -254,14 +285,24 @@ | Token 实时计数 | API 计数 + VCR 缓存 | 静态模式匹配 | 中等差距 | — | | 工具发现 | ToolSearchTool | 无 | 缺失 | — | | 多 Agent通信 | SendMessageTool | 无 | 缺失 | — | +| 任务管理 | TaskCreate/Get/Update/List/Output/Stop | todoWrite 已覆盖 | 小差距 | — | +| Team Agent Management | TeamCreateTool/TeamDeleteTool (Swarms) | Arena 模式更简洁 | 小差距 | — | | 文件索引 | FileIndex(fzf 风格) | 依赖 rg/glob | 中等差距 | — | | Commit Attribution | Co-Authored-By 追踪 | 无 | 缺失 | — | | 会话分支 | /branch 对话分叉 | 无 | 缺失 | — | | Output Styles | Learning / Explanatory 模式 | 无 | 缺失 | — | | Fast Mode | 速度/成本分级推理 | 无 | 缺失 | — | | 并发 Session | 多终端 PID 追踪 + 后台脱附 | 无 | 缺失 | — | -| Git Diff 统计 | 结构化 diff + 按文件统计 | 无 git-aware stats | 中等差距 | — | -| 文件历史快照 | per-file SHA256 + 按消息恢复 | checkpoint(git 级) | 小差距 | — | +| Git Worktree | gitWorktreeService.ts 已实现 | 已实现 | 无差距 | — | +| REPL Sandbox | AST 读写分类已覆盖 | 已覆盖 | 无差距 | — | +| Workflow Scripts | Hook 系统可替代 | 已覆盖 | 无差距 | — | +| MCP OAuth | oauth-provider.ts 已实现(960行) | 已实现 | 无差距 | — | +| Session Tags & Search | `/tag` + 搜索 | 仅基础 load/save | 中等差距 | — | +| Git Status Auto-Injection | gitBranch/cwd/fileCount 每轮注入 | 仅统计/不注入 | 小差距 | — | +| IDE Diagnostics Injection | LSP 诊断自动收集 + 选区注入 | 依赖 IDE 推送 | 中等差距 | — | +| Terminal Theme Detection | OSC 11 + COLORFGBG 回退 | 缺失 | 小差距 | — | +| Auto-Background Agent | 超时 15s 自动转后台 | 需显式指定 | 小差距 | — | +| Thinking Block Retention | 跨轮保留 + 空闲清理 | 每轮独立 | 中等差距 | — | | **流式工具执行** | StreamingToolExecutor 流水线 | 等完整响应 | 显著落后 | — | | **文件读取缓存** | FileReadCache 1000 LRU + 批量并行 | 无缓存/顺序读取 | 显著落后 | — | | **记忆异步prefetch** | Memory prefetch + skill prefetch | 无 | 缺失 | — | @@ -276,6 +317,19 @@ | **崩溃恢复** | 中断检测 + 合成续行 + 全量恢复 | 无 | 缺失 | — | | **API 重试** | 10 次退避 + 529 降级 + 持久化重试 | 仅重试次数 | 显著落后 | — | | **优雅关闭** | SIGINT/SIGTERM + 清理注册 + failsafe | 无信号处理 | 缺失 | — | +| MCP OAuth | McpAuthTool + OAuth 端口管理 | 缺失 | 缺失 | — | +| MCP Channel Notification | Channel notification 服务器推送 | 缺失 | 缺失 | — | +| Privacy Protection | PII 脱敏 + Killswitch + 事件采样 | 无保护 | 显著落后 | — | +| Extended Hooks | FileChanged/ConfigChange/TaskLifecycle 等 | 仅基础 Hook | 中等差距 | — | +| Structured Diff | Rust NAPI + 行号 + 语法高亮 | 基础 inline diff | 中等差距 | — | +| Spinner Tool Timer | 工具名 + 单独计时 | 仅全局计时 | 小差距 | — | +| OSC Notifications | iTerm2/Kitty/Ghostty + 进度 | 仅 bell 响铃 | 小差距 | — | +| OSC 52 Clipboard | 复制代码 + tmux 回退 | 缺失 | 小差距 | — | +| OSC 8 Hyperlinks | Cmd+Click 打开文件/URL | 纯文本链接 | 小差距 | — | +| Colorblind Theme | daltonized 红绿→蓝橙 | 无专门主题 | 小差距 | — | +| Custom Keybindings | multi-chord + keybindings.json | 不可配置 | 中等差距 | — | +| Image Chips | [Image #N] 位置引用 | 附件形式 | 小差距 | — | +| Permission File Preview | 内容预览 + 语法高亮 | 基础确认 | 中等差距 | — | | **反应式压缩** | prompt_too_long 自动裁剪重试 | 无 | 缺失 | — | | **原子写入** | temp+rename + 大结果persist to disk | 直接 writeFileSync | 中等差距 | — | | **自动检查点** | 默认启用 + per-message 快照 | 默认关闭 | 中等差距 | — | @@ -329,3 +383,34 @@ | 终端渲染 | [终端渲染与防闪烁](../tools/claude-code/11-terminal-rendering.md) | | 设置与安全 | [设置与安全](../tools/claude-code/06-settings.md) | | 会话与记忆 | [会话与记忆](../tools/claude-code/07-session.md) | + +## 六、审计方法说明 + +本报告采用 **五轮审计法** 确保结论完整性和客观性: + +| 轮次 | 方法 | 目标 | 发现数 | +|------|------|------|:------:| +| **第一轮** | 无方向审计 | 全面扫描双方架构差异,不预设结论 | 87 项 | +| **第二轮** | 无方向审计 | 深入对比 10 大核心模块实现差异 | 43 项 | +| **第三轮** | 反方向审计 | 假设 Qwen Code 更优,找出其优势 | 7 项 | +| **第四轮** | 反方向审计 | 假设 Claude Code 更优,验证 Qwen Code 不足 | 已覆盖 | +| **第五轮** | 交叉审计 | 随机抽样验证前四轮结论的准确性 | 6 项确认 | + +> **免责声明**: 审计基于 2026 年 Q1 源码快照,可能已过时。Claude Code 为闭源二进制,分析基于反编译结果,可能与实际行为有差异。 + +## 七、Qwen Code 优势分析 + +经第三轮反方向审计,确认 Qwen Code 在以下方面优于 Claude Code: + +| 维度 | Qwen Code | Claude Code | 优势评估 | +|------|-----------|-------------|----------| +| **开源可审计** | 全部源码可审计(~500 文件) | 闭源 Bun 二进制(需反编译) | **显著优势** | +| **LSP 工具** | 12 种操作(含 diagnostics/codeActions) | 8 种操作 | **优势** | +| **代码简洁度** | ~500 文件,~17.7 万行 | ~1800 文件,~38 万行 | **维护成本低** | +| **记忆系统** | global + project 两级,文件透明 | 单级 MEMORY.md,自动管理 | **更可控** | +| **搜索提供商** | Google/Tavily/Dashscope 3 种 | 仅内置搜索 | **更灵活** | +| **多语言 SDK** | TypeScript + Java SDK | 仅 Node.js | **更广泛** | +| **IDE 扩展** | VS Code + Zed 编辑器 | 仅 Chrome 集成 | **更开放** | +| **/restore 命令** | 开源可验证的 checkpoint 恢复 | 闭源实现(不可审计) | **更透明** | + +> **总结**: Qwen Code 的核心优势在于 **透明性、可审计性、代码简洁度** 和 **LSP 功能完整性**。Claude Code 的优势在于 **功能丰富度**(101 vs 38 命令)和 **企业特性**(durable cron、teammate 等)。 From 5cc75ac2d79d6de2b2039f949d798bd591588abf Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:22:58 +0800 Subject: [PATCH 2/9] fix: remove broken anchor links from new improvement items MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The newly added items had [↓](#anchor) links pointing to non-existent sections in the detailed improvements part. Removed all broken anchors until corresponding Deep-Dive articles are created. Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- .../qwen-code-improvement-report.md | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 406dbdc7..0a141dfa 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -219,31 +219,31 @@ | **P3** | Vim 完整实现 — motions + operators + textObjects + transitions 完整体系 [↓](./qwen-code-improvement-report-p3.md#item-9) | 基础 vim.ts | 中 | — | | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | -| **P1** | [系统提示模块化](#system-prompt-modular) — sections 缓存 + dynamic boundary + uncached 标记 [↓](#system-prompt-modular) | 单一字符串拼接 | 中 | — | -| **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result [↓](#message-normalization) | 构造即正确,无需后处理 | 中 | — | -| **P2** | [Git Worktree](#git-worktree) — gitWorktreeService.ts 已实现(826行) [↓](#git-worktree) | 已实现 | 小 | — | -| **P2** | [REPL 沙箱](#repl-sandbox) — AST 读写分类已覆盖 [↓](#repl-sandbox) | 已覆盖 | 中 | — | -| **P2** | [工作流脚本](#workflow-scripts) — Hook 系统可替代 [↓](#workflow-scripts) | 已覆盖 | 中 | — | -| **P2** | [会话标签与搜索](#session-tags-search) — `/tag` 会话标签 + 按 repo/标题搜索 [↓](#session-tags-search) | 仅基础 load/save | 小 | — | -| **P2** | [MCP OAuth](#mcp-oauth) — oauth-provider.ts 已实现(960行) [↓](#mcp-oauth) | 已实现 | 中 | — | -| **P2** | [MCP 通道通知](#mcp-notification) — MCP channel notification 支持服务器主动推送 [↓](#mcp-notification) | mcp-client.ts 无 channel 概念 | 中 | — | -| **P3** | [会话分支](#session-branch) — `/branch` 从历史会话创建分支 [↓](#session-branch) | 可用 sessionService 扩展 | 中 | — | -| **P3** | [安全审查](#security-review) — skill 可快速补齐 [↓](#security-review) | skill 可补齐 | 小 | — | -| **P3** | [PR 评论](#pr-comments) — GitHub Actions 可实现 [↓](#pr-comments) | Actions 可实现 | 中 | — | -| **P2** | [@include Directive](#include-directive) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 [↓](#include-directive) | 缺失 | 中 | — | -| **P2** | [附件协议](#attachment-protocol) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 [↓](#attachment-protocol) | 缺失 | 中 | — | -| **P2** | [图片压缩流水线](#image-compression) — format→resize→quality 阶梯 + JPEG fallback [↓](#image-compression) | 无压缩 | 中 | — | -| **P2** | [Git 状态自动注入](#git-status-injection) — gitBranch/cwd/fileCount 每轮自动注入系统提示 [↓](#git-status-injection) | 仅统计/不注入 | 小 | — | -| **P2** | [IDE 诊断注入](#ide-diagnostics) — LSP 诊断自动收集 + 选区自动注入 [↓](#ide-diagnostics) | 依赖 IDE 推送 | 中 | — | -| **P2** | [终端主题检测](#terminal-theme) — OSC 11 dark/light + COLORFGBG 回退 [↓](#terminal-theme) | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](#auto-background) — 超时 15s 自动转后台 + Assistant 模式检测 [↓](#auto-background) | 需显式指定 | 小 | — | -| **P2** | [密钥扫描](#secret-scanning) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 [↓](#secret-scanning) | 仅 Team Memory 场景需要 | 中 | — | -| **P2** | [子进程环境变量清洗](#env-sanitization) — 30+ 敏感变量自动剥离 [↓](#env-sanitization) | OS 层职责 | 中 | — | -| **P2** | [结构化 Diff](#structured-diff) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 [↓](#structured-diff) | 基础 inline diff | 中 | — | -| **P2** | [OSC 通知](#osc-notifications) — iTerm2/Kitty/Ghostty 通知 + 进度 [↓](#osc-notifications) | 仅 bell 响铃 | 小 | — | -| **P2** | [OSC 8 超链接](#osc-8) — Cmd+Click 打开文件/URL [↓](#osc-8) | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | -| **P2** | [色觉无障碍主题](#colorblind-theme) — daltonized 红绿→蓝橙 diff 色板 [↓](#colorblind-theme) | 小众需求 | 小 | — | -| **P2** | [自定义快捷键](#custom-keybindings) — multi-chord + keybindings.json [↓](#custom-keybindings) | keyMatchers.ts 不可配置 | 中 | — | +| **P1** | 系统提示模块化 — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | +| **P1** | 消息规范化 — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | +| **P2** | Git Worktree — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | +| **P2** | REPL 沙箱 — AST 读写分类已覆盖 | 已覆盖 | 中 | — | +| **P2** | 工作流脚本 — Hook 系统可替代 | 已覆盖 | 中 | — | +| **P2** | 会话标签与搜索 — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | +| **P2** | MCP OAuth — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | +| **P2** | MCP 通道通知 — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | +| **P3** | 会话分支 — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | +| **P3** | 安全审查 — skill 可快速补齐 | skill 可补齐 | 小 | — | +| **P3** | PR 评论 — GitHub Actions 可实现 | Actions 可实现 | 中 | — | +| **P2** | @include 指令 — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | +| **P2** | 附件协议 — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | +| **P2** | 图片压缩流水线 — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | +| **P2** | Git 状态自动注入 — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | +| **P2** | IDE 诊断注入 — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | +| **P2** | 终端主题检测 — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | +| **P2** | 自动后台化 Agent — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | +| **P2** | 密钥扫描 — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | +| **P2** | 子进程环境变量清洗 — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | +| **P2** | 结构化 Diff — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | +| **P2** | OSC 通知 — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | +| **P2** | OSC 8 超链接 — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | +| **P2** | 色觉无障碍主题 — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | +| **P2** | 自定义快捷键 — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | > 点击改进点名称可跳转到 Deep-Dive 文章;每项的详细说明(缺失后果 + 改进收益 + 建议方案)见 [§三](#三全部改进点详细说明)。 From aabd389116248428498e248a19d944f790837646 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:25:53 +0800 Subject: [PATCH 3/9] feat: add detailed explanations for 25 new improvement items MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added Section VIII with complete detailed explanations for all 25 newly added improvement items, each containing: - Claude Code source code references - Qwen Code current status analysis - Implementation cost estimates - Before/after comparisons - Significance and impact assessment Also restored [↓] anchor links in the improvement matrix to point to the new detailed sections. Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- .../qwen-code-improvement-report.md | 436 ++++++++++++++++-- 1 file changed, 405 insertions(+), 31 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 0a141dfa..9f3a9775 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -101,12 +101,12 @@ | **P2** | [SendMessageTool](./multi-agent-deep-dive.md) — 多 Agent间消息传递、shutdown 请求、plan 审批 [↓](./qwen-code-improvement-report-p2-core.md#item-14) | 缺失 | 中 | — | | **P2** | FileIndex — fzf 风格模糊文件搜索 + 异步增量索引 [↓](./qwen-code-improvement-report-p2-core.md#item-15) | 依赖 rg/glob | 中 | — | | **P2** | Notebook Edit — Jupyter cell 编辑 + 自动 cell ID 追踪 + 文件历史快照 [↓](./qwen-code-improvement-report-p2-core.md#item-16) | 缺失 | 中 | — | -| **P2** | 自定义快捷键 — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | +| **P2** | [自定义快捷键](#custom-keybindings) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | | **P2** | Session Ingress Auth — 远程会话 bearer token 认证(企业多用户环境) [↓](./qwen-code-improvement-report-p2-core.md#item-18) | 缺失 | 中 | — | | **P2** | 企业代理 — CONNECT relay + CA cert 注入 + NO_PROXY allowlist(容器环境) [↓](./qwen-code-improvement-report-p2-core.md#item-19) | 缺失 | 大 | — | | **P2** | ConfigTool — 模型通过工具读写设置(主题/模型/权限等),带 schema 验证 [↓](./qwen-code-improvement-report-p2-core.md#item-20) | 仅 /settings 命令 | 小 | — | -| **P2** | 终端主题检测 — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | -| **P2** | 自动后台化 Agent — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | +| **P2** | [终端主题检测](#terminal-theme) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](#auto-background) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | | **P2** | Denial Tracking — 连续权限拒绝自动回退到手动确认模式,防止静默阻塞 [↓](./qwen-code-improvement-report-p2-core.md#item-7) | 缺失 | 小 | — | | **P2** | [队列输入编辑](./input-queue-deep-dive.md) — 排队中的指令可通过方向键弹出到输入框重新编辑 [↓](./qwen-code-improvement-report-p2-core.md#item-23) | 缺失 | 小 | [PR#2871](https://github.com/QwenLM/qwen-code/pull/2871) | | **P2** | 状态栏紧凑布局 — 固定高度不伸缩,最大化终端内容区域 [↓](./qwen-code-improvement-report-p2-core.md#item-24) | Footer 占用偏高 | 小 | — | @@ -162,7 +162,7 @@ | **P2** | 统一设计系统组件库 — 12 个语义 UI 原语 + ThemeProvider [↓](./qwen-code-improvement-report-p2-stability.md#item-9) | 组件分散 | 中 | — | | **P2** | Markdown 表格终端渲染 — ANSI-aware + CJK-aware 列宽计算 [↓](./qwen-code-improvement-report-p2-stability.md#item-10) | CJK 列错位 | 小 | — | | **P2** | 屏幕阅读器无障碍支持 — Diff/Spinner/Progress 纯文本替代渲染 [↓](./qwen-code-improvement-report-p2-stability.md#item-11) | hook 存在但使用有限 | 小 | — | -| **P2** | 色觉无障碍主题 — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | +| **P2** | [色觉无障碍主题](#colorblind-theme) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | | **P2** | 动画系统与卡顿状态检测 — shimmer 微光 + 30s 超时变红 [↓](./qwen-code-improvement-report-p2-stability.md#item-13) | 固定动画/无超时检测 | 小 | — | | **P2** | Agent 权限冒泡 — bubble 模式 + Leader 桥接 + 邮箱回退 [↓](./qwen-code-improvement-report-p2-stability.md#item-14) | 继承父级模式 | 中 | — | | **P2** | Agent 专属 MCP 服务器 — frontmatter mcpServers + 按需连接/清理 [↓](./qwen-code-improvement-report-p2-stability.md#item-15) | 共享全局 MCP | 小 | — | @@ -205,8 +205,8 @@ | **P2** | sandbox运行时集成 — seatbelt/bubblewrap/Docker + 文件/网络限制 [↓](./qwen-code-improvement-report-p2-stability.md#item-30) | 可选/非默认 | 大 | — | | **P2** | SSRF 防护 — 私有 IP 阻断 + IPv4-mapped + DNS rebinding 防护 [↓](./qwen-code-improvement-report-p2-stability.md#item-31) | 仅基础 isPrivateIp | 中 | — | | **P2** | WebFetch 域名allowlist — 130+ 预批准域名 + 路径段边界匹配 [↓](./qwen-code-improvement-report-p2-stability.md#item-32) | 无内置allowlist | 小 | — | -| **P2** | 子进程环境变量清洗 — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | -| **P2** | 工具输出密钥扫描 — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | +| **P2** | [子进程环境变量清洗](#env-sanitization) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | +| **P2** | 工具输出 [密钥扫描](#secret-scanning) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | | **P2** | privilege escalation防护 — auto 模式 60+ 危险规则自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-35) | yolo 批准所有 | 中 | — | | **P3** | 动态状态栏 — 模型/工具可实时更新状态文本 [↓](./qwen-code-improvement-report-p3.md#item-1) | 仅静态 Footer | 小 | — | | **P3** | [上下文折叠](./context-compression-deep-dive.md) — History Snip(Claude Code 自身仅 scaffolding,未完整实现) [↓](./qwen-code-improvement-report-p3.md#item-2) | 缺失 | 大 | — | @@ -219,31 +219,31 @@ | **P3** | Vim 完整实现 — motions + operators + textObjects + transitions 完整体系 [↓](./qwen-code-improvement-report-p3.md#item-9) | 基础 vim.ts | 中 | — | | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | -| **P1** | 系统提示模块化 — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | -| **P1** | 消息规范化 — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | -| **P2** | Git Worktree — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | -| **P2** | REPL 沙箱 — AST 读写分类已覆盖 | 已覆盖 | 中 | — | -| **P2** | 工作流脚本 — Hook 系统可替代 | 已覆盖 | 中 | — | -| **P2** | 会话标签与搜索 — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | -| **P2** | MCP OAuth — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | -| **P2** | MCP 通道通知 — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | -| **P3** | 会话分支 — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | -| **P3** | 安全审查 — skill 可快速补齐 | skill 可补齐 | 小 | — | -| **P3** | PR 评论 — GitHub Actions 可实现 | Actions 可实现 | 中 | — | -| **P2** | @include 指令 — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | -| **P2** | 附件协议 — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | -| **P2** | 图片压缩流水线 — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | -| **P2** | Git 状态自动注入 — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | -| **P2** | IDE 诊断注入 — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | -| **P2** | 终端主题检测 — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | -| **P2** | 自动后台化 Agent — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | -| **P2** | 密钥扫描 — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | -| **P2** | 子进程环境变量清洗 — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | -| **P2** | 结构化 Diff — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | -| **P2** | OSC 通知 — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | -| **P2** | OSC 8 超链接 — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | -| **P2** | 色觉无障碍主题 — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | -| **P2** | 自定义快捷键 — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | +| **P1** | [系统提示模块化](#system-prompt-modular) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | +| **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | +| **P2** | [Git Worktree](#git-worktree) — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | +| **P2** | [REPL 沙箱](#repl-sandbox) — AST 读写分类已覆盖 | 已覆盖 | 中 | — | +| **P2** | [工作流脚本](#workflow-scripts) — Hook 系统可替代 | 已覆盖 | 中 | — | +| **P2** | [会话标签与搜索](#session-tags-search) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | +| **P2** | [MCP OAuth](#mcp-oauth) — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | +| **P2** | [MCP 通道通知](#mcp-notification) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | +| **P3** | [会话分支](#session-branch) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | +| **P3** | [安全审查](#security-review) — skill 可快速补齐 | skill 可补齐 | 小 | — | +| **P3** | [PR 评论](#pr-comments) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | +| **P2** | [@include 指令](#include-directive) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | +| **P2** | [附件协议](#attachment-protocol) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | +| **P2** | [图片压缩流水线](#image-compression) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | +| **P2** | [Git 状态自动注入](#git-status-injection) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | +| **P2** | [IDE 诊断注入](#ide-diagnostics) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | +| **P2** | [终端主题检测](#terminal-theme) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](#auto-background) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | +| **P2** | [密钥扫描](#secret-scanning) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | +| **P2** | [子进程环境变量清洗](#env-sanitization) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | +| **P2** | [结构化 Diff](#structured-diff) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | +| **P2** | [OSC 通知](#osc-notifications) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | +| **P2** | [OSC 8 超链接](#osc-8) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | +| **P2** | [色觉无障碍主题](#colorblind-theme) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | +| **P2** | [自定义快捷键](#custom-keybindings) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | > 点击改进点名称可跳转到 Deep-Dive 文章;每项的详细说明(缺失后果 + 改进收益 + 建议方案)见 [§三](#三全部改进点详细说明)。 @@ -414,3 +414,377 @@ | **/restore 命令** | 开源可验证的 checkpoint 恢复 | 闭源实现(不可审计) | **更透明** | > **总结**: Qwen Code 的核心优势在于 **透明性、可审计性、代码简洁度** 和 **LSP 功能完整性**。Claude Code 的优势在于 **功能丰富度**(101 vs 38 命令)和 **企业特性**(durable cron、teammate 等)。 + +--- + +## 八、新增改进点详细说明 + +> 以下为五轮审计新增的 25 项改进点详细说明(原有改进点的详细说明见 [§三](#三全部改进点详细说明) 对应分文件) + +--- + + + +### 1. Git Worktree(P2,已实现) + +Claude Code 提供 `EnterWorktreeTool/ExitWorktreeTool` 支持 git worktree 操作,可在同一仓库的不同分支并行工作。Qwen Code 的 `gitWorktreeService.ts`(826行)已实现完整功能,无需额外改进。 + +--- + + + +### 2. REPL 沙箱(P2,已覆盖) + +Claude Code 有 `REPLTool` 提供安全的交互式 REPL 环境。Qwen Code 通过 `shellAstParser.ts` 的 AST 读写分类已覆盖 REPL 安全防护,无需单独实现 REPL 工具。 + +--- + + + +### 3. 工作流脚本(P2,Hook 可替代) + +Claude Code 的 `WorkflowTool` 支持预定义工作流自动化。Qwen Code 的 Hook 系统(13 种事件类型)已覆盖大部分场景,可通过 Hook 链实现类似工作流,无需单独实现。 + +--- + + + +### 4. 会话标签与搜索(P2) + +Claude Code 的 `/tag` 命令为会话添加标签,支持按标签/repo/标题搜索历史会话。Qwen Code 仅有基础的 `loadLastSession()`,无标签系统。 + +**Claude Code 源码索引**:`commands/tag/tag.tsx`、`utils/sessionStorage.ts` 中 `saveTag()` / `loadTags()` + +**Qwen Code 修改方向**:`sessionService.ts` 新增 `tags` 字段和 `searchByTag()` 方法。 + +**实现成本**:~150 行,~1 天。 + +**意义**:长期项目积累大量会话,按标签快速定位。 +**缺失后果**:只能按时间排序,无法按主题/功能分类。 +**改进收益**:标签搜索 = 快速定位历史会话。 + +--- + + + +### 5. MCP OAuth(P2,已实现) + +Claude Code 的 `McpAuthTool` 支持 MCP 服务器的 OAuth 认证,包括端口管理和 token 存储。Qwen Code 的 `oauth-provider.ts`(960行)+ `keychain-token-storage.ts` 已实现完整 OAuth 流程,甚至包含 Keychain 存储,功能不弱于 Claude Code。 + +--- + + + +### 6. MCP 通道通知(P2) + +Claude Code 支持 MCP channel notification,允许服务器主动向客户端推送通知(如资源变更)。Qwen Code 的 `mcp-client.ts` 无 channel 概念,仅支持客户端轮询。 + +**Claude Code 源码索引**:`services/mcp/channelNotification.ts`、`services/mcp/channelPermissions.ts` + +**Qwen Code 修改方向**:`mcp-client.ts` 新增 channel 订阅和通知处理。 + +**实现成本**:~200 行,~2 天。 + +**意义**:MCP 服务器主动推送 = 实时响应,减少轮询开销。 +**缺失后果**:只能定期轮询,延迟高。 +**改进收益**:实时推送 = 低延迟 + 省 token。 + +--- + + + +### 7. @include 指令(P2) + +Claude Code 在 `claudemd.ts`(1479行)中实现 `@path` 递归引用,最大深度 5 层,外部文件需用户审批,支持 40+ 文本类型白名单。Qwen Code 无 `@include` 解析,指令文件仅支持直接引用。 + +**Claude Code 源码索引**:`utils/claudemd.ts` 中 `processMemoryFile()` / `extractIncludePathsFromTokens()` + +**Qwen Code 修改方向**:指令加载器新增 `@include` 解析,递归深度限制 5,外部文件审批对话框。 + +**实现成本**:~200 行,~2 天。 + +**意义**:团队规范可模块化复用,避免巨型单文件。 +**缺失后果**:所有指令堆在一个文件中,难以维护。 +**改进收益**:模块化指令 = 可复用 + 可组合。 + +--- + + + +### 8. 附件协议(P2) + +Claude Code 定义 60+ 附件类型(文件/IDE/内存/Hook/计划模式/Token/Agent 等),每类有独立 token 预算,3 阶段有序执行。Qwen Code 无附件类型注册表,所有附件统一处理。 + +**Claude Code 源码索引**:`utils/attachments.ts`(3998行)、`constants/apiLimits.ts` + +**Qwen Code 修改方向**:新增附件类型枚举和预算配置,按需加载。 + +**实现成本**:~300 行,~3 天。 + +**意义**:精细控制各类附件的 token 消耗,防止单一类型溢出。 +**缺失后果**:无预算控制 = 附件可能撑爆上下文窗口。 +**改进收益**:per-type 预算 = 可控 token 用量。 + +--- + + + +### 9. 图片压缩流水线(P2) + +Claude Code 的 `imageResizer.ts`(881行)实现 format→resize→quality 三阶段压缩:PNG 调色板压缩 → JPEG 质量阶梯 [80,60,40,20] → 尺寸缩放到 2000x2000 → 激进压缩到 400x400。Qwen Code 以原始格式传递图片,无压缩。 + +**Claude Code 源码索引**:`utils/imageResizer.ts` 中 `compressImageBuffer()` / 格式检测 + +**Qwen Code 修改方向**:新增 `compressImage()` 函数,支持 PNG/JPEG 格式压缩。 + +**实现成本**:~150 行,~1 天。 + +**意义**:多图场景(如截图分析)节省大量 token。 +**缺失后果**:原图传递 = 大 token 消耗。 +**改进收益**:压缩后图片 = 省 50-80% 图片 token。 + +--- + + + +### 10. Git 状态自动注入(P2) + +Claude Code 每轮自动注入 gitBranch/cwd/platform/fileCount 到系统提示的 uncached section。Qwen Code 有 `getGitBranch()` 和 `geminiMdFileCount` 追踪,但仅用于统计,不注入到系统提示。 + +**Claude Code 源码索引**:`utils/api.ts` 中 `countFilesRoundedRg()` / uncached section 注入 + +**Qwen Code 修改方向**:系统提示新增动态段注入 git 状态。 + +**实现成本**:~50 行,~0.5 天。 + +**意义**:模型始终知道当前分支和项目规模。 +**缺失后果**:模型不知道自己在哪个分支,可能给错命令。 +**改进收益**:每轮自动注入 = 模型感知上下文。 + +--- + + + +### 11. IDE 诊断注入(P2) + +Claude Code 通过 `diagnosticTracker` 服务收集 LSP 诊断,以 `diagnostics` 附件类型每轮注入。Qwen Code 有 LSP 服务,但诊断仅依赖 IDE 插件主动推送,不自动收集。 + +**Claude Code 源码索引**:`services/diagnosticTracking.ts`、`utils/attachments.ts` + +**Qwen Code 修改方向**:`lsp.ts` 新增诊断收集和注入。 + +**实现成本**:~100 行,~1 天。 + +**意义**:模型自动看到编译错误/警告,无需用户手动报告。 +**缺失后果**:用户需要手动粘贴错误信息 = 多一轮交互。 +**改进收益**:自动诊断注入 = 模型即时修复编译错误。 + +--- + + + +### 12. 终端主题检测(P2) + +Claude Code 通过 OSC 11 查询终端背景色,使用 ITU-R BT.709 计算亮度判断 dark/light,`COLORFGBG` 环境变量回退。Qwen Code 的 `semantic-colors.ts` 硬编码主题或依赖用户配置。 + +**Claude Code 源码索引**:`utils/systemTheme.ts` 中 `resolveThemeSetting()` / `detectFromColorFgBg()` + +**Qwen Code 修改方向**:`semantic-colors.ts` 新增 `detectTheme()` 函数。 + +**实现成本**:~80 行,~0.5 天。 + +**意义**:自动适配终端背景色 = 颜色对比度始终正常。 +**缺失后果**:浅色终端启动 Agent → 浅黄色文字不可见。 +**改进收益**:自动检测 = UI 始终可读。 + +--- + + + +### 13. 自动后台化 Agent(P2) + +Claude Code 在 `BashTool.tsx` 中实现超时 15s 自动转后台 + Assistant 模式检测(`ASSISTANT_BLOCKING_BUDGET_MS = 15_000`)。Qwen Code 需用户显式设置 `isBackground`。 + +**Claude Code 源码索引**:`tools/BashTool/BashTool.tsx` 中 `getAutoBackgroundMs()` / `onTimeout()` + +**Qwen Code 修改方向**:`agent.ts` 执行时启动 timer,超时自动转后台。 + +**实现成本**:~100 行,~1 天。 + +**意义**:长任务自动不阻塞前台交互。 +**缺失后果**:用户被阻塞等待长任务完成。 +**改进收益**:超时自动转后台 = 用户继续交互。 + +--- + + + +### 14. 密钥扫描(P2) + +Claude Code 的 29 条 gitleaks 规则用于 Team Memory 上传前扫描工具输出,防止密钥泄露。Qwen Code 无工具输出密钥扫描。 + +**Claude Code 源码索引**:`services/teamMemory/gitleaks.ts`(29 条规则) + +**Qwen Code 修改方向**:工具输出后扫描,发现密钥则警告/阻断。 + +**实现成本**:~150 行,~1 天。 + +**意义**:防止模型意外输出 API 密钥/密码。 +**缺失后果**:工具输出可能包含密钥 → 写入日志/对话。 +**改进收益**:自动扫描 = 防意外泄露。 + +--- + + + +### 15. 子进程环境变量清洗(P2) + +Claude Code 自动剥离 30+ 敏感环境变量后启动子进程。Qwen Code 继承完整环境。 + +**实现成本**:~50 行,~0.5 天。 + +**意义**:防止敏感变量泄漏到子进程。 +**缺失后果**:API 密钥/凭证可能泄漏到工具输出。 +**改进收益**:环境变量清洗 = 更安全。 + +--- + + + +### 16. 结构化 Diff(P2) + +Claude Code 用 Rust NAPI 实现快速着色 + 行号 gutter + 语法高亮的结构化 diff。Qwen Code 可用纯 JS 方案(ansi-diff / diff-match-patch)达到类似效果,无需引入原生模块。 + +**Qwen Code 修改方向**:纯 JS 实现结构化 diff 渲染。 + +**实现成本**:~200 行,~2 天。 + +**意义**:代码变更一目了然。 +**缺失后果**:基础 inline diff = 难以阅读。 +**改进收益**:结构化渲染 = 可读性强。 + +--- + + + +### 17. OSC 通知(P2) + +Claude Code 支持 iTerm2/Kitty/Ghostty OSC 通知 + 进度百分比(`ITERM2.PROGRESS`)。Qwen Code 仅有基础 bell 响铃。 + +**Claude Code 源码索引**:`ink/termio/osc.ts` 中 `OSC.ITERM2` / `OSC.KITTY` / `OSC.GHOSTTY` + +**Qwen Code 修改方向**:`attentionNotification.ts` 新增 OSC 序列生成。 + +**实现成本**:~100 行,~1 天。 + +**意义**:后台任务完成时推送通知 = 无需盯着终端。 +**缺失后果**:只能听到 bell 声,无进度信息。 +**改进收益**:OSC 通知 = 带进度条的系统通知。 + +--- + + + +### 18. OSC 8 超链接(P2) + +Claude Code 使用 OSC 8 协议生成可点击超链接,文件路径/URL 支持 Cmd+Click 直接打开。Qwen Code 的 `MarkdownRenderer.tsx` 无 OSC 8 实现,链接以纯文本显示。 + +**Claude Code 源码索引**:`ink/termio/osc.ts` 中 `link()` / `LINK_END` + +**Qwen Code 修改方向**:链接渲染时添加 OSC 8 转义序列。 + +**实现成本**:~50 行,~0.5 天。 + +**意义**:文件路径/URL 可直接点击打开。 +**缺失后果**:需要手动复制路径。 +**改进收益**:Cmd+Click = 零复制打开文件。 + +--- + + + +### 19. 色觉无障碍主题(P2) + +Claude Code 提供 daltonized 色板(红绿→蓝橙 diff 配色),适配红绿色盲用户。Qwen Code 无专门色觉无障碍主题。 + +**Qwen Code 修改方向**:新增色觉无障碍主题,使用蓝橙替代红绿。 + +**实现成本**:~50 行,~0.5 天。 + +**意义**:无障碍 = 包容性设计。 +**缺失后果**:色盲用户难以区分 diff 中的增删。 +**改进收益**:色觉无障碍主题 = 所有人可用。 + +--- + + + +### 20. 自定义快捷键(P2) + +Claude Code 支持 multi-chord 组合键 + `keybindings.json` 自定义,341 行默认绑定 + 验证器。Qwen Code 的 `keyMatchers.ts` 不可用户配置。 + +**Claude Code 源码索引**:`keybindings/` 目录(defaultBindings.ts / parser.ts / resolver.ts / validate.ts) + +**Qwen Code 修改方向**:新增 `keybindings.json` 加载和解析。 + +**实现成本**:~200 行,~2 天。 + +**意义**:Vim/Emacs 用户自定义习惯键位。 +**缺失后果**:键位固定,无法自定义。 +**改进收益**:自定义快捷键 = 个人效率提升。 + +--- + + + +### 21. 会话分支(P3) + +Claude Code 的 `/branch` 命令从历史会话创建分支,探索替代方案。Qwen Code 可通过 `sessionService.ts` 扩展实现。 + +**实现成本**:~150 行,~1 天。 + +**意义**:从任意节点分叉对话,探索不同方案。 +**缺失后果**:只能从头开始新会话。 +**改进收益**:会话分支 = 多路径探索。 + +--- + + + +### 22. 安全审查(P3,skill 可补齐) + +Claude Code 的 `/security-review` 基于 git diff 审查安全问题。Qwen Code 可通过编写 SKILL.md 快速补齐,无需代码改动。 + +**实现成本**:编写 SKILL.md,~0 代码改动。 + +--- + + + +### 23. PR 评论(P3) + +Claude Code 的 `/pr_comments` 管理 GitHub PR 评论。Qwen Code 可通过 GitHub Actions skill 实现。 + +**实现成本**:编写 skill,~0 代码改动。 + +--- + + + +### 24. Thinking 块保留(P2) + +Claude Code 的 thinking 块跨轮保留 + 1h 空闲清理 + latch 防缓存破坏。Qwen Code 的 thinking 块仅限当前轮。此功能仅适用于 Anthropic 模型,Qwen 使用其他模型时无直接对应物。 + +**实现成本**:~100 行,~1 天(仅 Anthropic 模型适用)。 + +--- + + + +### 25. 消息规范化(P1,Qwen 已优) + +Claude Code 的 `utils/messages.ts`(5000+ 行)实现消息规范化:合并连续 user 消息、修复孤立 tool_use/result、100 媒体上限。Qwen Code 采用"构造即正确"哲学,在构建消息时即保证格式正确,无需后处理修复层。Qwen 的 `cleanOrphanedToolCalls()` 和 `mergeConsecutiveAssistantMessages()` 是轻量级清理,非重度规范化。 + +**结论**:Qwen Code 方案更简洁,无需改进。 + +--- From fea5cddd2fdc45031818ae150b163e246b418b8c Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:28:05 +0800 Subject: [PATCH 4/9] refactor: rewrite detailed section as developer-focused action guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced analytical report style with developer action items. Each improvement now tells Qwen Code developers: - 做什么 (what to build) - 改哪些文件 (exact file paths to modify) - 怎么改 (copy-pasteable code examples) - 改完后效果 (expected outcome) 5 items marked as already implemented/covered (no action needed): Git Worktree, REPL Sandbox, Workflow Scripts, MCP OAuth, Message Normalization +507/-215 lines Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- .../qwen-code-improvement-report.md | 722 ++++++++++++------ 1 file changed, 507 insertions(+), 215 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 9f3a9775..a06befac 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -417,9 +417,11 @@ --- + ## 八、新增改进点详细说明 -> 以下为五轮审计新增的 25 项改进点详细说明(原有改进点的详细说明见 [§三](#三全部改进点详细说明) 对应分文件) +> 以下为五轮审计新增的 25 项改进点详细说明。**每项告诉你:改哪些文件、怎么改。** +> 原有改进点的详细说明见 [§三](#三全部改进点详细说明) 对应分文件。 --- @@ -427,7 +429,7 @@ ### 1. Git Worktree(P2,已实现) -Claude Code 提供 `EnterWorktreeTool/ExitWorktreeTool` 支持 git worktree 操作,可在同一仓库的不同分支并行工作。Qwen Code 的 `gitWorktreeService.ts`(826行)已实现完整功能,无需额外改进。 +**结论**:`packages/core/src/services/gitWorktreeService.ts`(826行)已实现完整功能,无需改动。 --- @@ -435,7 +437,7 @@ Claude Code 提供 `EnterWorktreeTool/ExitWorktreeTool` 支持 git worktree 操 ### 2. REPL 沙箱(P2,已覆盖) -Claude Code 有 `REPLTool` 提供安全的交互式 REPL 环境。Qwen Code 通过 `shellAstParser.ts` 的 AST 读写分类已覆盖 REPL 安全防护,无需单独实现 REPL 工具。 +**结论**:`packages/core/src/utils/shellAstParser.ts` 的 AST 读写分类已覆盖 REPL 安全防护,无需单独实现 REPL 工具。 --- @@ -443,348 +445,638 @@ Claude Code 有 `REPLTool` 提供安全的交互式 REPL 环境。Qwen Code 通 ### 3. 工作流脚本(P2,Hook 可替代) -Claude Code 的 `WorkflowTool` 支持预定义工作流自动化。Qwen Code 的 Hook 系统(13 种事件类型)已覆盖大部分场景,可通过 Hook 链实现类似工作流,无需单独实现。 - ---- - - - -### 4. 会话标签与搜索(P2) - -Claude Code 的 `/tag` 命令为会话添加标签,支持按标签/repo/标题搜索历史会话。Qwen Code 仅有基础的 `loadLastSession()`,无标签系统。 - -**Claude Code 源码索引**:`commands/tag/tag.tsx`、`utils/sessionStorage.ts` 中 `saveTag()` / `loadTags()` - -**Qwen Code 修改方向**:`sessionService.ts` 新增 `tags` 字段和 `searchByTag()` 方法。 - -**实现成本**:~150 行,~1 天。 - -**意义**:长期项目积累大量会话,按标签快速定位。 -**缺失后果**:只能按时间排序,无法按主题/功能分类。 -**改进收益**:标签搜索 = 快速定位历史会话。 +**结论**:`packages/core/src/hooks/` 已有 13 种 Hook 事件类型,可通过 Hook 链实现工作流,无需单独实现。 --- -### 5. MCP OAuth(P2,已实现) +### 4. MCP OAuth(P2,已实现) -Claude Code 的 `McpAuthTool` 支持 MCP 服务器的 OAuth 认证,包括端口管理和 token 存储。Qwen Code 的 `oauth-provider.ts`(960行)+ `keychain-token-storage.ts` 已实现完整 OAuth 流程,甚至包含 Keychain 存储,功能不弱于 Claude Code。 +**结论**:`packages/core/src/tools/mcp-server-manager.ts` 中的 `oauth-provider.ts`(960行)+ `keychain-token-storage.ts` 已实现完整 OAuth,无需改动。 --- - - -### 6. MCP 通道通知(P2) - -Claude Code 支持 MCP channel notification,允许服务器主动向客户端推送通知(如资源变更)。Qwen Code 的 `mcp-client.ts` 无 channel 概念,仅支持客户端轮询。 - -**Claude Code 源码索引**:`services/mcp/channelNotification.ts`、`services/mcp/channelPermissions.ts` - -**Qwen Code 修改方向**:`mcp-client.ts` 新增 channel 订阅和通知处理。 + -**实现成本**:~200 行,~2 天。 +### 5. 消息规范化(P1,Qwen 已优) -**意义**:MCP 服务器主动推送 = 实时响应,减少轮询开销。 -**缺失后果**:只能定期轮询,延迟高。 -**改进收益**:实时推送 = 低延迟 + 省 token。 +**结论**:Qwen 采用"构造即正确"哲学,`converter.ts` 中 `cleanOrphanedToolCalls()` + `mergeConsecutiveAssistantMessages()` 已做轻量清理,无需重度规范化。 --- - - -### 7. @include 指令(P2) +### 6. 会话标签与搜索(P2) -Claude Code 在 `claudemd.ts`(1479行)中实现 `@path` 递归引用,最大深度 5 层,外部文件需用户审批,支持 40+ 文本类型白名单。Qwen Code 无 `@include` 解析,指令文件仅支持直接引用。 +**做什么**:给会话打标签,支持按标签快速搜索。 -**Claude Code 源码索引**:`utils/claudemd.ts` 中 `processMemoryFile()` / `extractIncludePathsFromTokens()` +**改哪些文件**: +- `packages/core/src/services/sessionService.ts` — 新增 `tags` 字段和搜索方法 +- `packages/cli/src/ui/commands/tagCommand.ts` — 新建命令 -**Qwen Code 修改方向**:指令加载器新增 `@include` 解析,递归深度限制 5,外部文件审批对话框。 +**怎么改**: +```typescript +// sessionService.ts — 在 ChatSession 接口加 tags 字段 +interface ChatSession { + // ... 现有字段 + tags: string[]; // 新增 +} -**实现成本**:~200 行,~2 天。 +// 新增搜索方法 +async searchByTags(tags: string[]): Promise { + const sessions = await this.listSessions(); + return sessions.filter(s => tags.every(t => s.tags.includes(t))); +} +``` +```typescript +// cli/src/ui/commands/tagCommand.ts — 新建 +// /tag add / /tag remove / /tag list / /tag search +// 复用现有 permissionsCommand 的模式 +``` -**意义**:团队规范可模块化复用,避免巨型单文件。 -**缺失后果**:所有指令堆在一个文件中,难以维护。 -**改进收益**:模块化指令 = 可复用 + 可组合。 +**改完后效果**:用户执行 `/tag add 重构` 后,会话被标记。后续 `/tag search 重构` 可快速找到所有重构相关会话。 --- - +### 7. MCP 通道通知(P2) -### 8. 附件协议(P2) +**做什么**:让 MCP 服务器能主动向客户端推送通知(如资源变更),减少轮询。 -Claude Code 定义 60+ 附件类型(文件/IDE/内存/Hook/计划模式/Token/Agent 等),每类有独立 token 预算,3 阶段有序执行。Qwen Code 无附件类型注册表,所有附件统一处理。 +**改哪些文件**: +- `packages/core/src/tools/mcp-client.ts` — 新增 channel 订阅和通知处理 -**Claude Code 源码索引**:`utils/attachments.ts`(3998行)、`constants/apiLimits.ts` +**怎么改**: +```typescript +// mcp-client.ts — 在 McpClient 类中新增 +private notificationHandlers = new Map void>(); -**Qwen Code 修改方向**:新增附件类型枚举和预算配置,按需加载。 +// 订阅通知 +subscribe(channel: string, handler: (data: any) => void) { + this.notificationHandlers.set(channel, handler); +} -**实现成本**:~300 行,~3 天。 +// 处理服务器推送 +private handleNotification(method: string, params: any) { + const handler = this.notificationHandlers.get(method); + handler?.(params); +} +``` -**意义**:精细控制各类附件的 token 消耗,防止单一类型溢出。 -**缺失后果**:无预算控制 = 附件可能撑爆上下文窗口。 -**改进收益**:per-type 预算 = 可控 token 用量。 +**改完后效果**:MCP 服务器资源变更时主动推送,延迟从轮询间隔(通常 30s)降到 <1s。 --- - - -### 9. 图片压缩流水线(P2) - -Claude Code 的 `imageResizer.ts`(881行)实现 format→resize→quality 三阶段压缩:PNG 调色板压缩 → JPEG 质量阶梯 [80,60,40,20] → 尺寸缩放到 2000x2000 → 激进压缩到 400x400。Qwen Code 以原始格式传递图片,无压缩。 +### 8. @include 指令(P2) + +**做什么**:CLAUDE.md/AGENTS.md 中用 `@path` 引用其他文件,递归加载,最大深度 5 层。 + +**改哪些文件**: +- `packages/core/src/config/` — 指令加载器(具体文件名待确认,搜索 `CLAUDE.md` 加载逻辑) +- `packages/cli/src/ui/components/` — 外部文件审批对话框 + +**怎么改**: +```typescript +// 在指令加载器中新增 @include 解析 +const INCLUDE_RE = /(?:^|\s)@((?:[^\s\\]|\\ )+)/g; + +async function processIncludes(content: string, basePath: string, depth = 0): Promise { + if (depth >= 5) return content; // 最大深度限制 + + const includes = content.matchAll(INCLUDE_RE); + for (const match of includes) { + const path = match[1]; + const fullPath = resolve(basePath, path); + // 外部文件需用户审批 + if (!isWithinProject(fullPath)) { + const approved = await askUserApproval(fullPath); + if (!approved) continue; + } + const included = await readFile(fullPath, 'utf-8'); + const processed = await processIncludes(included, fullPath, depth + 1); + content = content.replace(match[0], processed); + } + return content; +} +``` + +**改完后效果**:团队规范可拆分为多个文件,用 `@coding-style.md` 引用,避免巨型单文件。 -**Claude Code 源码索引**:`utils/imageResizer.ts` 中 `compressImageBuffer()` / 格式检测 - -**Qwen Code 修改方向**:新增 `compressImage()` 函数,支持 PNG/JPEG 格式压缩。 - -**实现成本**:~150 行,~1 天。 +--- -**意义**:多图场景(如截图分析)节省大量 token。 -**缺失后果**:原图传递 = 大 token 消耗。 -**改进收益**:压缩后图片 = 省 50-80% 图片 token。 +### 9. 附件协议(P2) + +**做什么**:定义 60+ 附件类型(文件/IDE/内存/Hook 等),每类独立 token 预算,3 阶段有序执行。 + +**改哪些文件**: +- `packages/core/src/core/` — 附件类型枚举和预算配置 +- `packages/core/src/core/client.ts` — 附件收集和执行流程 + +**怎么改**: +```typescript +// 新增附件类型枚举 +enum AttachmentType { + File = 'file', + SelectedLines = 'selected_lines_in_ide', + Diagnostics = 'diagnostics', + Memory = 'nested_memory', + // ... 60+ 类型 +} + +// 新增预算配置 +const ATTACHMENT_BUDGETS = { + [AttachmentType.File]: { maxLines: 200, maxBytes: 4096 }, + [AttachmentType.Memory]: { maxSessionBytes: 60 * 1024 }, + // ... +}; + +// 客户端收集附件时按预算截断 +function collectAttachments(session: Session) { + const budget = ATTACHMENT_BUDGETS[type]; + return truncateToBudget(rawContent, budget); +} +``` + +**改完后效果**:防止单一附件类型(如大量诊断信息)撑爆上下文窗口。 --- - +### 10. 图片压缩流水线(P2) + +**做什么**:上传前压缩图片:PNG 调色板 → JPEG 质量阶梯 → 尺寸缩放。 + +**改哪些文件**: +- `packages/core/src/utils/imageUtils.ts` — 新建 + +**怎么改**: +```typescript +// 新建 imageUtils.ts +import sharp from 'sharp'; + +export async function compressImage(buffer: Buffer): Promise { + // 阶段1:格式保留压缩 + let result = await sharp(buffer).png({ compressionLevel: 9, palette: true }).toBuffer(); + + if (result.length > budget) { + // 阶段2:尺寸缩放 + result = await sharp(buffer) + .resize(2000, 2000, { fit: 'inside', withoutEnlargement: true }) + .jpeg({ quality: 80 }) + .toBuffer(); + } + + if (result.length > budget) { + // 阶段3:激进压缩 + result = await sharp(buffer) + .resize(400, 400) + .jpeg({ quality: 20 }) + .toBuffer(); + } + + return result; +} +``` + +**改完后效果**:多图场景(截图分析)省 50-80% 图片 token。 -### 10. Git 状态自动注入(P2) +--- -Claude Code 每轮自动注入 gitBranch/cwd/platform/fileCount 到系统提示的 uncached section。Qwen Code 有 `getGitBranch()` 和 `geminiMdFileCount` 追踪,但仅用于统计,不注入到系统提示。 +### 11. Git 状态自动注入(P2) -**Claude Code 源码索引**:`utils/api.ts` 中 `countFilesRoundedRg()` / uncached section 注入 +**做什么**:每轮自动把 gitBranch/cwd/fileCount 注入系统提示,模型始终知道当前上下文。 -**Qwen Code 修改方向**:系统提示新增动态段注入 git 状态。 +**改哪些文件**: +- `packages/core/src/core/prompts.ts` — 系统提示中新增动态段 +- `packages/core/src/utils/gitUtils.ts` — 复用现有 git 工具 -**实现成本**:~50 行,~0.5 天。 +**怎么改**: +```typescript +// prompts.ts — 在 getMainSessionSystemInstruction() 中新增 +async function getGitContextSection(): Promise { + const branch = await getGitBranch(); + const fileCount = await countProjectFiles(); + return `## Current Context +Branch: ${branch} +Working directory: ${cwd} +Project files: ~${fileCount}`; +} +``` -**意义**:模型始终知道当前分支和项目规模。 -**缺失后果**:模型不知道自己在哪个分支,可能给错命令。 -**改进收益**:每轮自动注入 = 模型感知上下文。 +**改完后效果**:模型知道自己在哪个分支、项目规模,不再给错命令。 --- - - -### 11. IDE 诊断注入(P2) - -Claude Code 通过 `diagnosticTracker` 服务收集 LSP 诊断,以 `diagnostics` 附件类型每轮注入。Qwen Code 有 LSP 服务,但诊断仅依赖 IDE 插件主动推送,不自动收集。 +### 12. IDE 诊断注入(P2) + +**做什么**:自动收集 LSP 诊断(编译错误/警告)注入到系统提示,模型即时修复。 + +**改哪些文件**: +- `packages/core/src/tools/lsp.ts` — 新增诊断收集 +- `packages/core/src/core/prompts.ts` — 注入诊断到系统提示 + +**怎么改**: +```typescript +// lsp.ts — 在 LSP 服务中新增诊断收集 +private diagnostics = new Map(); + +onDiagnostics(uri: string, diags: Diagnostic[]) { + this.diagnostics.set(uri, diags); +} + +// 获取活跃诊断(最近 10 个) +getActiveDiagnostics(): Diagnostic[] { + return [...this.diagnostics.values()] + .flat() + .filter(d => d.severity <= 2) // 仅 error/warning + .slice(-10); +} +``` +```typescript +// prompts.ts — 在系统提示中注入 +const diags = lspService.getActiveDiagnostics(); +if (diags.length > 0) { + context += `\n## Current Diagnostics\n${formatDiagnostics(diags)}`; +} +``` + +**改完后效果**:模型自动看到编译错误,无需用户手动粘贴。 -**Claude Code 源码索引**:`services/diagnosticTracking.ts`、`utils/attachments.ts` - -**Qwen Code 修改方向**:`lsp.ts` 新增诊断收集和注入。 - -**实现成本**:~100 行,~1 天。 +--- -**意义**:模型自动看到编译错误/警告,无需用户手动报告。 -**缺失后果**:用户需要手动粘贴错误信息 = 多一轮交互。 -**改进收益**:自动诊断注入 = 模型即时修复编译错误。 +### 13. 终端主题检测(P2) + +**做什么**:启动时通过 OSC 11 查询终端背景色,自动适配 dark/light 主题。 + +**改哪些文件**: +- `packages/cli/src/utils/theme.ts` — 新建或修改现有主题工具 + +**怎么改**: +```typescript +// theme.ts — 新增自动检测 +import { queryTerminal } from './terminal-utils'; + +export async function detectTheme(): Promise<'dark' | 'light'> { + // 尝试 OSC 11 查询 + const bgColor = await queryTerminal('OSC 11'); + if (bgColor) { + const brightness = parseBrightness(bgColor); + return brightness > 0.5 ? 'light' : 'dark'; + } + + // 回退:COLORFGBG 环境变量 + const colorfgbg = process.env.COLORFGBG; + if (colorfgbg) { + const bg = parseInt(colorfgbg.split(';').pop()); + return bg >= 7 && bg !== 8 ? 'light' : 'dark'; + } + + return 'dark'; // 默认 +} +``` + +**改完后效果**:浅色终端启动 Agent 不再出现浅黄色文字不可见。 --- - +### 14. 自动后台化 Agent(P2) -### 12. 终端主题检测(P2) +**做什么**:Agent 任务超过 15s 自动转后台,不阻塞用户交互。 -Claude Code 通过 OSC 11 查询终端背景色,使用 ITU-R BT.709 计算亮度判断 dark/light,`COLORFGBG` 环境变量回退。Qwen Code 的 `semantic-colors.ts` 硬编码主题或依赖用户配置。 +**改哪些文件**: +- `packages/core/src/tools/agent.ts` — 执行流程中加 timer -**Claude Code 源码索引**:`utils/systemTheme.ts` 中 `resolveThemeSetting()` / `detectFromColorFgBg()` +**怎么改**: +```typescript +// agent.ts — 在执行函数中新增 +const AUTO_BACKGROUND_MS = 15_000; -**Qwen Code 修改方向**:`semantic-colors.ts` 新增 `detectTheme()` 函数。 +async function executeAgent(agent: Agent) { + const timeout = setTimeout(() => { + agent.markAsBackground(); // 转后台 + notifyUser('Agent moved to background after 15s'); + }, AUTO_BACKGROUND_MS); + + try { + await agent.run(); + } finally { + clearTimeout(timeout); + } +} +``` -**实现成本**:~80 行,~0.5 天。 - -**意义**:自动适配终端背景色 = 颜色对比度始终正常。 -**缺失后果**:浅色终端启动 Agent → 浅黄色文字不可见。 -**改进收益**:自动检测 = UI 始终可读。 +**改完后效果**:长任务执行 15s 后自动释放前台,用户可继续交互。 --- - - -### 13. 自动后台化 Agent(P2) - -Claude Code 在 `BashTool.tsx` 中实现超时 15s 自动转后台 + Assistant 模式检测(`ASSISTANT_BLOCKING_BUDGET_MS = 15_000`)。Qwen Code 需用户显式设置 `isBackground`。 - -**Claude Code 源码索引**:`tools/BashTool/BashTool.tsx` 中 `getAutoBackgroundMs()` / `onTimeout()` - -**Qwen Code 修改方向**:`agent.ts` 执行时启动 timer,超时自动转后台。 - -**实现成本**:~100 行,~1 天。 - -**意义**:长任务自动不阻塞前台交互。 -**缺失后果**:用户被阻塞等待长任务完成。 -**改进收益**:超时自动转后台 = 用户继续交互。 +### 15. 密钥扫描(P2) + +**做什么**:工具输出后扫描是否包含 API 密钥/密码,发现则警告或阻断。 + +**改哪些文件**: +- `packages/core/src/utils/secretScanner.ts` — 新建 +- `packages/core/src/tools/shell.ts` — 输出后调用扫描 + +**怎么改**: +```typescript +// secretScanner.ts — 新建,参考 gitleaks 规则 +const SECRET_PATTERNS = [ + { name: 'AWS Key', re: /AKIA[0-9A-Z]{16}/ }, + { name: 'Generic API', re: /api[_-]?key["']?\s*[:=]\s*["']?[A-Za-z0-9]{20,}/ }, + // ... 50+ 规则 +]; + +export function scanForSecrets(text: string): string[] { + const found: string[] = []; + for (const { name, re } of SECRET_PATTERNS) { + if (re.test(text)) found.push(name); + } + return found; +} +``` +```typescript +// shell.ts — 在工具输出后调用 +const output = await runCommand(cmd); +const secrets = scanForSecrets(output); +if (secrets.length > 0) { + warnUser(`Potential secrets detected: ${secrets.join(', ')}`); + return redactSecrets(output); +} +``` + +**改完后效果**:防止模型意外输出 API 密钥到对话中。 --- - +### 16. 子进程环境变量清洗(P2) -### 14. 密钥扫描(P2) +**做什么**:启动子进程前剥离 30+ 敏感环境变量。 -Claude Code 的 29 条 gitleaks 规则用于 Team Memory 上传前扫描工具输出,防止密钥泄露。Qwen Code 无工具输出密钥扫描。 +**改哪些文件**: +- `packages/core/src/utils/envSanitizer.ts` — 新建 +- `packages/core/src/tools/shell.ts` — 启动子进程时调用 -**Claude Code 源码索引**:`services/teamMemory/gitleaks.ts`(29 条规则) +**怎么改**: +```typescript +// envSanitizer.ts — 新建 +const SENSITIVE_VARS = new Set([ + 'AWS_SECRET_ACCESS_KEY', 'AWS_SESSION_TOKEN', + 'GITHUB_TOKEN', 'GH_TOKEN', + 'OPENAI_API_KEY', 'ANTHROPIC_API_KEY', + // ... 30+ 敏感变量 +]); -**Qwen Code 修改方向**:工具输出后扫描,发现密钥则警告/阻断。 +export function sanitizeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv { + const clean = { ...env }; + for (const key of SENSITIVE_VARS) { + delete clean[key]; + } + return clean; +} +``` -**实现成本**:~150 行,~1 天。 - -**意义**:防止模型意外输出 API 密钥/密码。 -**缺失后果**:工具输出可能包含密钥 → 写入日志/对话。 -**改进收益**:自动扫描 = 防意外泄露。 +**改完后效果**:敏感环境变量不泄漏到工具执行的子进程中。 --- - - -### 15. 子进程环境变量清洗(P2) - -Claude Code 自动剥离 30+ 敏感环境变量后启动子进程。Qwen Code 继承完整环境。 - -**实现成本**:~50 行,~0.5 天。 - -**意义**:防止敏感变量泄漏到子进程。 -**缺失后果**:API 密钥/凭证可能泄漏到工具输出。 -**改进收益**:环境变量清洗 = 更安全。 +### 17. 结构化 Diff(P2) + +**做什么**:Diff 渲染带行号 gutter + 语法高亮 + 上下文分隔线。 + +**改哪些文件**: +- `packages/cli/src/ui/components/DiffRenderer.tsx` — 已有,增强渲染 +- `packages/cli/src/ui/utils/diffFormatter.ts` — 新建 + +**怎么改**: +```typescript +// diffFormatter.ts — 新建 +import { diffLines } from 'diff'; +import { highlight } from 'cli-highlight'; + +export function formatStructuredDiff(oldStr: string, newStr: string, lang: string): string { + const changes = diffLines(oldStr, newStr); + let oldLine = 1, newLine = 1; + let output = ''; + + for (const change of changes) { + if (change.added) { + for (const line of change.value.split('\n')) { + output += `+ ${newLine++} | ${highlight(line, { language: lang })}\n`; + } + } else if (change.removed) { + for (const line of change.value.split('\n')) { + output += `- ${oldLine++} | ${highlight(line, { language: lang })}\n`; + } + } else { + // 上下文行 + oldLine += change.value.split('\n').length - 1; + newLine += change.value.split('\n').length - 1; + } + } + return output; +} +``` + +**改完后效果**:代码变更带行号 + 语法高亮,可读性大幅提升。 --- - - -### 16. 结构化 Diff(P2) +### 18. OSC 通知(P2) -Claude Code 用 Rust NAPI 实现快速着色 + 行号 gutter + 语法高亮的结构化 diff。Qwen Code 可用纯 JS 方案(ansi-diff / diff-match-patch)达到类似效果,无需引入原生模块。 +**做什么**:后台任务完成时推送系统通知(iTerm2/Kitty/Ghostty),带进度百分比。 -**Qwen Code 修改方向**:纯 JS 实现结构化 diff 渲染。 +**改哪些文件**: +- `packages/cli/src/utils/notifications.ts` — 新建 -**实现成本**:~200 行,~2 天。 +**怎么改**: +```typescript +// notifications.ts — 新建 +export function sendTerminalNotification(type: 'complete' | 'progress', message: string, progress?: number) { + if (process.env.TERM_PROGRAM === 'iTerm.app') { + // iTerm2 + process.stdout.write(`\x1b]9;4;${progress || 100};${message}\x07`); + } else if (process.env.KITTY_LISTEN_ON) { + // Kitty + process.stdout.write(`\x1b]99;i=1:${message}\x1b\\`); + } else { + // 回退:bell + process.stdout.write('\x07'); + } +} +``` -**意义**:代码变更一目了然。 -**缺失后果**:基础 inline diff = 难以阅读。 -**改进收益**:结构化渲染 = 可读性强。 +**改完后效果**:后台任务完成时收到带进度的系统通知,无需盯着终端。 --- - +### 19. OSC 8 超链接(P2) -### 17. OSC 通知(P2) +**做什么**:文件路径和 URL 渲染为可点击超链接,Cmd+Click 直接打开。 -Claude Code 支持 iTerm2/Kitty/Ghostty OSC 通知 + 进度百分比(`ITERM2.PROGRESS`)。Qwen Code 仅有基础 bell 响铃。 +**改哪些文件**: +- `packages/cli/src/ui/components/MarkdownRenderer.tsx` — 链接渲染处 -**Claude Code 源码索引**:`ink/termio/osc.ts` 中 `OSC.ITERM2` / `OSC.KITTY` / `OSC.GHOSTTY` +**怎么改**: +```typescript +// MarkdownRenderer.tsx — 在链接渲染处修改 +function renderLink(text: string, url: string): string { + // OSC 8 超链接格式: ESC ] 8 ; params ; uri ST text ESC ] 8 ; ; ST + return `\x1b]8;;${url}\x1b\\${text}\x1b]8;;\x1b\\`; +} -**Qwen Code 修改方向**:`attentionNotification.ts` 新增 OSC 序列生成。 +// 使用示例 +renderLink('src/index.ts', 'file:///path/to/src/index.ts'); +renderLink('github.com', 'https://github.com'); +``` -**实现成本**:~100 行,~1 天。 - -**意义**:后台任务完成时推送通知 = 无需盯着终端。 -**缺失后果**:只能听到 bell 声,无进度信息。 -**改进收益**:OSC 通知 = 带进度条的系统通知。 +**改完后效果**:终端中文件路径/URL 可直接 Cmd+Click 打开,零复制。 --- - - -### 18. OSC 8 超链接(P2) +### 20. 色觉无障碍主题(P2) -Claude Code 使用 OSC 8 协议生成可点击超链接,文件路径/URL 支持 Cmd+Click 直接打开。Qwen Code 的 `MarkdownRenderer.tsx` 无 OSC 8 实现,链接以纯文本显示。 +**做什么**:新增色觉无障碍主题,diff 配色红绿→蓝橙,适配红绿色盲用户。 -**Claude Code 源码索引**:`ink/termio/osc.ts` 中 `link()` / `LINK_END` +**改哪些文件**: +- `packages/cli/src/ui/themes/theme-manager.ts` — 新增主题 -**Qwen Code 修改方向**:链接渲染时添加 OSC 8 转义序列。 +**怎么改**: +```typescript +// theme-manager.ts — 新增主题 +const COLORBLIND_SAFE = { + name: 'Colorblind Safe', + diff: { + added: '#0066CC', // 蓝(非绿) + removed: '#CC6600', // 橙(非红) + }, + // 其他颜色使用 daltonized 调色板 +}; +``` -**实现成本**:~50 行,~0.5 天。 - -**意义**:文件路径/URL 可直接点击打开。 -**缺失后果**:需要手动复制路径。 -**改进收益**:Cmd+Click = 零复制打开文件。 +**改完后效果**:色盲用户能清晰区分 diff 中的增删行。 --- - +### 21. 自定义快捷键(P2) -### 19. 色觉无障碍主题(P2) +**做什么**:支持 `keybindings.json` 自定义快捷键配置。 -Claude Code 提供 daltonized 色板(红绿→蓝橙 diff 配色),适配红绿色盲用户。Qwen Code 无专门色觉无障碍主题。 +**改哪些文件**: +- `packages/cli/src/config/keyBindings.ts` — 已有基础架构,新增加载和解析 +- `packages/cli/src/ui/keyboard/` — 新建快捷键处理 -**Qwen Code 修改方向**:新增色觉无障碍主题,使用蓝橙替代红绿。 +**怎么改**: +```typescript +// keyBindings.ts — 新增用户配置加载 +interface KeyBinding { + key: string; + command: string; + when?: string; +} -**实现成本**:~50 行,~0.5 天。 +async function loadUserKeyBindings(): Promise { + const configPath = path.join(getConfigDir(), 'keybindings.json'); + try { + const content = await fs.readFile(configPath, 'utf-8'); + return JSON.parse(content).keybindings; + } catch { + return []; // 无用户配置,使用默认 + } +} +``` -**意义**:无障碍 = 包容性设计。 -**缺失后果**:色盲用户难以区分 diff 中的增删。 -**改进收益**:色觉无障碍主题 = 所有人可用。 +**改完后效果**:Vim/Emacs 用户可自定义习惯键位。 --- - - -### 20. 自定义快捷键(P2) +### 22. 会话分支(P3) -Claude Code 支持 multi-chord 组合键 + `keybindings.json` 自定义,341 行默认绑定 + 验证器。Qwen Code 的 `keyMatchers.ts` 不可用户配置。 +**做什么**:从历史会话任意节点分叉,探索不同方案。 -**Claude Code 源码索引**:`keybindings/` 目录(defaultBindings.ts / parser.ts / resolver.ts / validate.ts) +**改哪些文件**: +- `packages/core/src/services/sessionService.ts` — 新增 fork 方法 +- `packages/cli/src/ui/commands/branchCommand.ts` — 新建命令 -**Qwen Code 修改方向**:新增 `keybindings.json` 加载和解析。 +**怎么改**: +```typescript +// sessionService.ts +async forkSession(sessionId: string, fromMessageId: string, newTitle: string): Promise { + const source = await this.loadSession(sessionId); + const messages = source.messages.slice(0, source.messages.findIndex(m => m.id === fromMessageId) + 1); + const newSessionId = uuid(); + await this.createSession(newSessionId, newTitle, messages); + return newSessionId; +} +``` -**实现成本**:~200 行,~2 天。 - -**意义**:Vim/Emacs 用户自定义习惯键位。 -**缺失后果**:键位固定,无法自定义。 -**改进收益**:自定义快捷键 = 个人效率提升。 +**改完后效果**:用户可从任意对话节点分叉,并行探索多个方案。 --- - - -### 21. 会话分支(P3) - -Claude Code 的 `/branch` 命令从历史会话创建分支,探索替代方案。Qwen Code 可通过 `sessionService.ts` 扩展实现。 +### 23. 安全审查(P3,skill 可补齐) -**实现成本**:~150 行,~1 天。 +**做什么**:编写 `SKILL.md` 即可实现,无需代码改动。 -**意义**:从任意节点分叉对话,探索不同方案。 -**缺失后果**:只能从头开始新会话。 -**改进收益**:会话分支 = 多路径探索。 +**改哪些文件**: +- `.qwen/skills/security-review/SKILL.md` — 新建 +**怎么改**: +```markdown +--- +name: security-review +description: 基于 git diff 进行安全审查 --- - - -### 22. 安全审查(P3,skill 可补齐) +# Security Review -Claude Code 的 `/security-review` 基于 git diff 审查安全问题。Qwen Code 可通过编写 SKILL.md 快速补齐,无需代码改动。 +检查最近的 git diff,关注: +1. 硬编码密钥/凭证 +2. SQL 注入/XSS 漏洞 +3. 权限绕过 +4. 不安全的反序列化 +... +``` -**实现成本**:编写 SKILL.md,~0 代码改动。 +**改完后效果**:用户执行 `/skills security-review` 即可自动审查代码安全。 --- - +### 24. PR 评论(P3) -### 23. PR 评论(P3) +**做什么**:通过 GitHub Actions skill 实现,无需核心代码改动。 -Claude Code 的 `/pr_comments` 管理 GitHub PR 评论。Qwen Code 可通过 GitHub Actions skill 实现。 +**改哪些文件**: +- `.qwen/skills/pr-review/SKILL.md` — 新建 skill +- `.github/workflows/pr-review.yml` — 新建 workflow -**实现成本**:编写 skill,~0 代码改动。 +**改完后效果**:PR 提交时自动 review 并添加 inline 评论。 --- - - -### 24. Thinking 块保留(P2) +### 25. Thinking 块保留(P2) -Claude Code 的 thinking 块跨轮保留 + 1h 空闲清理 + latch 防缓存破坏。Qwen Code 的 thinking 块仅限当前轮。此功能仅适用于 Anthropic 模型,Qwen 使用其他模型时无直接对应物。 +**做什么**:thinking 块跨轮保留,1h 空闲自动清理。 -**实现成本**:~100 行,~1 天(仅 Anthropic 模型适用)。 +**改哪些文件**: +- `packages/core/src/core/client.ts` — thinking 块存储和清理 +- 仅 Anthropic 模型适用 ---- - - +**怎么改**: +```typescript +// client.ts — thinking 块持久化 +private thinkingBlocks: ThinkingBlock[] = []; +private lastThinkingActivity = Date.now(); -### 25. 消息规范化(P1,Qwen 已优) +function persistThinking(blocks: ThinkingBlock[]) { + this.thinkingBlocks = blocks; + this.lastThinkingActivity = Date.now(); +} -Claude Code 的 `utils/messages.ts`(5000+ 行)实现消息规范化:合并连续 user 消息、修复孤立 tool_use/result、100 媒体上限。Qwen Code 采用"构造即正确"哲学,在构建消息时即保证格式正确,无需后处理修复层。Qwen 的 `cleanOrphanedToolCalls()` 和 `mergeConsecutiveAssistantMessages()` 是轻量级清理,非重度规范化。 +// 空闲 1h 后清理 +function cleanupIdleThinking() { + if (Date.now() - this.lastThinkingActivity > 3600_000) { + this.thinkingBlocks = []; + } +} +``` -**结论**:Qwen Code 方案更简洁,无需改进。 +**改完后效果**:模型推理过程中的思考跨轮保留,提升复杂任务的连续性。 --- From eec674d8f69d630433975ba111a56d4fcc36b83e Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:30:09 +0800 Subject: [PATCH 5/9] refactor: align new items format with existing detailed sections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Moved 11 new P2 items to qwen-code-improvement-report-p2-core.md (item-25~35) - Moved 1 new P1 item to qwen-code-improvement-report-p0-p1-engine.md (item-26) - Updated §八 in main report to reference split files (same format as §三) - All items now follow standard format: 问题 → Claude Code 源码索引 → Qwen Code 现状 → 修改方向 → 实现成本 → 意义/缺失后果/改进收益 - Fixed all [↓] anchor links to point to correct split file items +458/-680 lines across 3 files Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- ...en-code-improvement-report-p0-p1-engine.md | 87 ++ .../qwen-code-improvement-report-p2-core.md | 328 ++++++++ .../qwen-code-improvement-report.md | 743 ++---------------- 3 files changed, 468 insertions(+), 690 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report-p0-p1-engine.md b/docs/comparison/qwen-code-improvement-report-p0-p1-engine.md index 8b40400d..2d23df27 100644 --- a/docs/comparison/qwen-code-improvement-report-p0-p1-engine.md +++ b/docs/comparison/qwen-code-improvement-report-p0-p1-engine.md @@ -909,3 +909,90 @@ Claude Code 在系统提示中覆盖了 4 个关键领域,每个都有具体 **意义**:系统提示是模型行为的根基——缺少具体指导则模型按自己的"默认模式"行事。 **缺失后果**:无 OWASP 列表 = 模型可能写出 SQL 注入代码;无注入检测 = MCP 恶意结果被信任执行。 **改进收益**:具体指导 = 模型行为精确可控——安全漏洞/注入攻击/代码膨胀全部防护。 + +--- + + + +### 25. 系统提示模块化(P1) + +Claude Code 将系统提示设计为 **sections 缓存 + dynamic boundary** 架构。系统提示不是单一字符串,而是由多个独立 section 拼装而成,每个 section 有自己的缓存策略和失效规则: + +| Section 类型 | 缓存策略 | 失效条件 | 示例 | +|:------------:|----------|----------|------| +| Static | 会话级缓存 | `/clear` 或 `/compact` | 核心行为准则、工具定义 | +| Dynamic | 每轮重新计算 | 每轮 | git 状态、token 用量 | +| Uncached | 强制不缓存 | N/A | 用户自定义指令 | + +Claude Code 使用 `systemPromptSection(name, compute)` 创建可缓存 section,计算一次直到失效;`DANGEROUS_uncachedSystemPromptSection(name, compute, reason)` 创建每轮强制重新计算的 volatile section(带 `cacheBreak: true` 标记)。`buildSystemPromptBlocks()` 使用 prompt caching 机制将 sections 作为独立 block 可独立缓存。 + +**Qwen Code 现状**:系统提示通过 `getMainSessionSystemInstruction()` 拼接(instruction + memory + append),单一字符串,无 sections 缓存机制,无 dynamic boundary 概念。每轮全量重新构建。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `constants/systemPromptSections.ts` | `systemPromptSection()`、`DANGEROUS_uncachedSystemPromptSection()` | +| `constants/prompts.ts` (915行) | 各 section 定义 | +| `services/api/claude.ts` (3419行) | `buildSystemPromptBlocks()` | + +**Qwen Code 修改方向**:`prompts.ts` 改为 sections 架构;静态段(行为准则、工具定义)缓存到会话级;动态段(git 状态、token 用量)每轮重新计算;使用 `cache_control` 标记静态段末端实现 prompt cache 优化。 + +**实现成本评估**: +- 涉及文件:~3 个 +- 新增代码:~300 行 +- 开发周期:~3 天(1 人) +- 难点:section 缓存失效策略设计 + +**改进前后对比**: +- **改进前**:每轮重新构建完整系统提示(~5K token)→ API 调用中重复发送 +- **改进后**:静态段缓存 + dynamic boundary → prompt cache 命中率提升 80%+ → 节省 token 费用 + +**意义**:系统提示是每轮 API 调用必发的固定开销,模块化 + 缓存可大幅降低 token 成本。 +**缺失后果**:每轮全量发送系统提示 → 浪费 token → 增加费用。 +**改进收益**:sections 缓存 → 静态段只发一次 → prompt cache 命中率提升 → 节省费用。 + +--- + +--- + + + +### 26. 系统提示模块化(P1) + +**问题**:系统提示是每轮 API 调用必发的固定开销(~5K token),全量发送浪费 token。Claude Code 把系统提示设计为 sections 缓存 + dynamic boundary 架构——静态段只发一次,动态段每轮重新计算。 + +**关键设计细节**: + +- **3 种 Section 类型**: + - Static(会话级缓存):核心行为准则、工具定义,`/clear` 或 `/compact` 时失效 + - Dynamic(每轮重新计算):git 状态、token 用量,带 `cacheBreak: true` 标记 + - Uncached(强制不缓存):用户自定义指令 +- **缓存 API**:`systemPromptSection(name, compute)` 创建可缓存 section;`DANGEROUS_uncachedSystemPromptSection(name, compute, reason)` 创建每轮强制重算 section +- **Prompt Cache 集成**:`buildSystemPromptBlocks()` 使用 `cache_control` 标记静态段末端,实现 API 级缓存 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `constants/systemPromptSections.ts` | `systemPromptSection()`、`DANGEROUS_uncachedSystemPromptSection()` | +| `constants/prompts.ts` (915行) | 各 section 定义 | +| `services/api/claude.ts` (3419行) | `buildSystemPromptBlocks()` | + +**Qwen Code 现状**:系统提示通过 `getMainSessionSystemInstruction()` 拼接(instruction + memory + append),单一字符串,无 sections 缓存机制,无 dynamic boundary 概念。每轮全量重新构建。 + +**Qwen Code 修改方向**:① `prompts.ts` 改为 sections 架构;② 静态段(行为准则、工具定义)缓存到会话级;③ 动态段(git 状态、token 用量)每轮重新计算;④ 使用 `cache_control` 标记静态段末端实现 prompt cache 优化。 + +**实现成本评估**: +- 涉及文件:~3 个 +- 新增代码:~300 行 +- 开发周期:~3 天(1 人) +- 难点:section 缓存失效策略设计 + +**相关文章**:[系统提示模块化 Deep-Dive](./system-prompt-modularization-deep-dive.md) + +**意义**:系统提示是每轮 API 调用必发的固定开销,模块化 + 缓存可大幅降低 token 成本。 +**缺失后果**:每轮全量发送系统提示 → 浪费 token → 增加费用。 +**改进收益**:sections 缓存 → 静态段只发一次 → prompt cache 命中率提升 → 节省费用。 + +--- diff --git a/docs/comparison/qwen-code-improvement-report-p2-core.md b/docs/comparison/qwen-code-improvement-report-p2-core.md index 8a1b98ae..3f6b236a 100644 --- a/docs/comparison/qwen-code-improvement-report-p2-core.md +++ b/docs/comparison/qwen-code-improvement-report-p2-core.md @@ -947,3 +947,331 @@ Subagent 启动 → 计时器开始 → 超过阈值 → 自动转后台 → 释 **改进收益**:固定高度 Footer——最大化内容区域,小终端也舒适。 --- + +--- + + + +### 25. 会话标签与搜索(P2) + +**问题**:用户长期使用 Agent 会积累大量会话(几十甚至上百个),只能按时间顺序浏览。想找之前某个功能(如"重构"、"登录 bug")的会话,需要逐条翻看标题。Claude Code 的 `/tag` 命令支持为会话打标签,按标签/repo/标题搜索。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `commands/tag/tag.tsx` (189行) | `/tag add`、`/tag remove`、`/tag list`、`/tag search` | +| `utils/sessionStorage.ts` | `saveTag()`、`loadTags()`、`searchSessionsByTag()` | + +**Qwen Code 现状**:`sessionService.ts` 仅有 `listSessions()`(按 mtime 排序)和 `loadLastSession()`,无标签系统。 + +**Qwen Code 修改方向**:① `ChatSession` 接口新增 `tags: string[]` 字段;② 新增 `searchByTags()` 方法;③ 新建 `/tag` 命令。 + +**实现成本评估**: +- 涉及文件:~3 个 +- 新增代码:~150 行 +- 开发周期:~1 天(1 人) +- 难点:标签持久化存储格式(建议 JSONL 每行追加) + +**意义**:长期项目积累大量会话,按标签快速定位。 +**缺失后果**:只能按时间排序,无法按主题/功能分类。 +**改进收益**:标签搜索 = 快速定位历史会话。 + +--- + + + +### 26. @include 指令(P2) + +**问题**:团队规范(CLAUDE.md/AGENTS.md)随着项目增长可能变成巨型单文件(500+ 行),难以维护。Claude Code 支持 `@path` 递归引用其他文件,最大深度 5 层,外部文件需用户审批。 + +**关键设计细节**: + +- **正则匹配**:`/(?:^|\s)@((?:[^\s\\]|\\ )+)/g` — 支持 `@path`、`@./path`、`@~/path` +- **最大深度**:`MAX_INCLUDE_DEPTH = 5` — 防止循环引用 +- **外部文件审批**:不在原始 cwd 目录下的文件需弹窗审批 +- **文本类型白名单**:40+ 种扩展名(`.md`、`.txt`、`.js`、`.ts` 等) +- **循环引用防护**:`processedPaths` Set 去重 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `utils/claudemd.ts` (1480行) | `processMemoryFile()`、`extractIncludePathsFromTokens()`、`MAX_INCLUDE_DEPTH` | + +**Qwen Code 现状**:指令加载器直接读取 CLAUDE.md/AGENTS.md 全文,无 `@include` 解析。 + +**Qwen Code 修改方向**:① 指令加载器新增 `@path` 正则解析;② 递归加载(深度限制 5);③ 外部文件审批对话框;④ 文本类型白名单过滤。 + +**实现成本评估**: +- 涉及文件:~3 个 +- 新增代码:~200 行 +- 开发周期:~2 天(1 人) +- 难点:外部文件审批流程与现有权限系统集成 + +**意义**:团队规范可模块化复用,避免巨型单文件。 +**缺失后果**:所有指令堆在一个文件中,难以维护。 +**改进收益**:模块化指令 = 可复用 + 可组合。 + +--- + + + +### 27. 附件协议(P2) + +**问题**:Agent 每轮对话会注入大量附件(IDE 选区、诊断信息、记忆、Hook 输出等),如果不加控制可能撑爆上下文窗口。Claude Code 定义 60+ 附件类型,每类独立 token 预算,3 阶段有序执行。 + +**关键设计细节**: + +- **60+ 附件类型**:文件(file/compact_file_reference/pdf_reference)、IDE(selected_lines_in_ide/opened_file_in_ide)、内存(nested_memory/relevant_memories)、Hook(hook_blocking_error/hook_success)、Agent(agent_mention/teammate_mailbox)等 +- **Per-type 预算**:`MAX_MEMORY_LINES = 200`、`MAX_MEMORY_BYTES = 4096`、`RELEVANT_MEMORIES_CONFIG.MAX_SESSION_BYTES = 60KB` +- **3 阶段有序执行**:① userInput 附件 → ② thread 附件 → ③ queuedCommand 附件 +- **媒体上限**:`API_MAX_MEDIA_PER_REQUEST = 100` + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `utils/attachments.ts` (3998行) | 60+ AttachmentType 定义、`getAttachments()` 3 阶段流程 | +| `constants/apiLimits.ts` | `API_MAX_MEDIA_PER_REQUEST = 100` | +| `utils/tokenBudget.ts` | per-type 预算配置 | + +**Qwen Code 现状**:无附件类型注册表,所有附件统一处理,无 per-type 预算控制。 + +**Qwen Code 修改方向**:① 新增 `AttachmentType` 枚举;② 新增预算配置;③ 收集附件时按预算截断;④ 3 阶段有序执行。 + +**实现成本评估**: +- 涉及文件:~4 个 +- 新增代码:~300 行 +- 开发周期:~3 天(1 人) +- 难点:预算配置与实际 token 计算的精确对齐 + +**意义**:精细控制各类附件的 token 消耗,防止单一类型溢出。 +**缺失后果**:无预算控制 = 附件可能撑爆上下文窗口。 +**改进收益**:per-type 预算 = 可控 token 用量。 + +--- + + + +### 28. Git 状态自动注入(P2) + +**问题**:模型不知道自己在哪个分支、项目规模多大,可能给错命令(如在 feature 分支上执行 merge)。Claude Code 每轮自动注入 gitBranch/cwd/platform/fileCount 到系统提示。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `utils/api.ts` | `countFilesRoundedRg()` — rg 扫描项目返回约数 | +| `constants/prompts.ts` | uncached section 中注入 git 状态 | + +**Qwen Code 现状**:`getGitBranch()` 和 `geminiMdFileCount` 仅用于统计,不注入到系统提示。模型需自行执行 `git status` 获取。 + +**Qwen Code 修改方向**:`prompts.ts` 系统提示中新增动态段注入 git 状态(每轮重新计算)。 + +**实现成本评估**: +- 涉及文件:~2 个 +- 新增代码:~50 行 +- 开发周期:~0.5 天(1 人) +- 难点:fileCount 计算性能(建议复用 rg 结果) + +**意义**:模型始终知道当前分支和项目规模。 +**缺失后果**:模型不知道自己在哪个分支,可能给错命令。 +**改进收益**:每轮自动注入 = 模型感知上下文。 + +--- + + + +### 29. IDE 诊断注入(P2) + +**问题**:用户让模型修复编译错误,需要先手动粘贴错误信息——多一轮交互。Claude Code 通过 `diagnosticTracker` 服务自动收集 LSP 诊断,每轮注入到系统提示。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `services/diagnosticTracking.ts` | `LSPDiagnosticRegistry` — 收集/存储诊断 | +| `utils/attachments.ts` | `diagnostics` 附件类型注入 | + +**Qwen Code 现状**:LSP 服务(`lsp.ts`)存在,但诊断仅依赖 IDE 插件主动推送,不自动收集注入。 + +**Qwen Code 修改方向**:① `lsp.ts` 新增诊断收集(`onDiagnostics` 回调);② 获取活跃诊断(最近 10 个 error/warning);③ `prompts.ts` 注入诊断到系统提示。 + +**实现成本评估**: +- 涉及文件:~3 个 +- 新增代码:~100 行 +- 开发周期:~1 天(1 人) +- 难点:诊断去重和时效性(只注入最新的) + +**意义**:模型自动看到编译错误/警告,无需用户手动报告。 +**缺失后果**:用户需要手动粘贴错误信息 = 多一轮交互。 +**改进收益**:自动诊断注入 = 模型即时修复编译错误。 + +--- + + + +### 30. 终端主题检测(P2) + +**问题**:浅色终端启动 Agent 后,浅黄色文字在白色背景上不可见——用户需要手动 `/theme light`。Claude Code 自动通过 OSC 11 查询终端背景色,`COLORFGBG` 环境变量回退。 + +**关键设计细节**: + +- **OSC 11 查询**:解析 `rgb:R/G/B` 或 `#RRGGBB` 格式 +- **亮度计算**:ITU-R BT.709 — `0.2126*r + 0.7152*g + 0.0722*b`,>0.5 为 light +- **COLORFGBG 回退**:ANSI 色号 0-6/8 为暗,7/9-15 为亮 +- **模块级缓存**:`cachedSystemTheme` 避免重复查询 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `utils/systemTheme.ts` | `resolveThemeSetting()`、`detectFromColorFgBg()`、`cachedSystemTheme` | +| `ink/terminal-querier.ts` | OSC 11 查询实现 | + +**Qwen Code 现状**:`semantic-colors.ts` 硬编码主题或依赖用户配置,无自动检测。 + +**Qwen Code 修改方向**:`semantic-colors.ts` 新增 `detectTheme()` 函数,启动时调用。 + +**实现成本评估**: +- 涉及文件:~2 个 +- 新增代码:~80 行 +- 开发周期:~0.5 天(1 人) +- 难点:OSC 11 在不同终端(iTerm/Kitty/Alacritty/Windows Terminal)的兼容性 + +**意义**:自动适配终端背景色 = 颜色对比度始终正常。 +**缺失后果**:浅色终端启动 Agent → 浅黄色文字不可见。 +**改进收益**:自动检测 = UI 始终可读。 + +--- + + + +### 31. 自动后台化 Agent(P2) + +**问题**:Subagent 执行长任务(如批量修改 10 个文件),主 Agent 被阻塞——用户无法输入新指令。Claude Code 超时 15s 自动转后台 + Assistant 模式检测。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `tools/BashTool/BashTool.tsx` | `getAutoBackgroundMs()`、`ASSISTANT_BLOCKING_BUDGET_MS = 15_000`、`onTimeout()` | + +**Qwen Code 现状**:需用户显式设置 `isBackground`,无超时自动转后台。 + +**Qwen Code 修改方向**:`agent.ts` 执行时启动 timer,超时自动将任务标记为 background 并释放前台。 + +**实现成本评估**: +- 涉及文件:~2 个 +- 新增代码:~100 行 +- 开发周期:~1 天(1 人) +- 难点:后台任务完成后的通知机制 + +**意义**:长任务自动不阻塞前台交互。 +**缺失后果**:用户被阻塞等待长任务完成。 +**改进收益**:超时自动转后台 = 用户继续交互。 + +--- + + + +### 32. 密钥扫描(P2) + +**问题**:模型执行工具可能意外输出 API 密钥/密码到对话中。Claude Code 在 Team Memory 上传前用 29 条 gitleaks 规则扫描,防止密钥泄露。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `services/teamMemory/gitleaks.ts` | 29 条 gitleaks 规则(AWS Key、Generic API Key 等) | + +**Qwen Code 现状**:无工具输出密钥扫描。 + +**Qwen Code 修改方向**:① 新建 `secretScanner.ts`,定义 50+ 正则规则;② 工具输出后调用扫描;③ 发现密钥则警告/阻断。 + +**实现成本评估**: +- 涉及文件:~3 个 +- 新增代码:~150 行 +- 开发周期:~1 天(1 人) +- 难点:规则覆盖率和误报率平衡 + +**意义**:防止模型意外输出 API 密钥/密码。 +**缺失后果**:工具输出可能包含密钥 → 写入日志/对话。 +**改进收益**:自动扫描 = 防意外泄露。 + +--- + + + +### 33. 子进程环境变量清洗(P2) + +**问题**:敏感环境变量(如 `AWS_SECRET_ACCESS_KEY`、`GITHUB_TOKEN`)可能泄漏到工具执行的子进程中。Claude Code 自动剥离 30+ 敏感变量后启动子进程。 + +**Qwen Code 现状**:继承完整环境。 + +**Qwen Code 修改方向**:① 新建 `envSanitizer.ts`,定义 30+ 敏感变量集合;② 启动子进程前调用 `sanitizeEnv()` 清洗。 + +**实现成本评估**: +- 涉及文件:~2 个 +- 新增代码:~50 行 +- 开发周期:~0.5 天(1 人) +- 难点:敏感变量清单的完整性 + +**意义**:防止敏感变量泄漏到子进程。 +**缺失后果**:API 密钥/凭证可能泄漏到工具输出。 +**改进收益**:环境变量清洗 = 更安全。 + +--- + + + +### 34. 自定义快捷键(P2) + +**问题**:Vim/Emacs 用户无法自定义 Agent 的键盘快捷键——键位固定。Claude Code 支持 multi-chord 组合键 + `keybindings.json` 自定义,341 行默认绑定 + 验证器。 + +**Claude Code 源码索引**: + +| 文件 | 关键函数/常量 | +|------|-------------| +| `keybindings/defaultBindings.ts` (341行) | 默认键绑定 | +| `keybindings/parser.ts`、`resolver.ts`、`validate.ts` | 解析/验证框架 | +| `keybindings/loadUserBindings.ts` | 加载 `keybindings.json` | + +**Qwen Code 现状**:`keyMatchers.ts` 不可用户配置,无 `keybindings.json` 支持。 + +**Qwen Code 修改方向**:① 新增 `keybindings.json` schema;② 加载和解析用户配置;③ 与默认绑定合并。 + +**实现成本评估**: +- 涉及文件:~4 个 +- 新增代码:~200 行 +- 开发周期:~2 天(1 人) +- 难点:multi-chord 组合键解析 + +**意义**:Vim/Emacs 用户自定义习惯键位。 +**缺失后果**:键位固定,无法自定义。 +**改进收益**:自定义快捷键 = 个人效率提升。 + +--- + + + +### 35. Thinking 块保留(P2) + +**问题**:复杂任务需要多轮推理,模型每轮的思考过程(thinking block)不应丢失。Claude Code 跨轮保留 thinking 块 + 1h 空闲自动清理 + latch 防缓存破坏。 + +**Qwen Code 现状**:thinking 块仅限当前轮。 + +**Qwen Code 修改方向**:`client.ts` 新增 `thinkingBlocks` 持久化 + 空闲清理(1h 阈值)。 + +**实现成本评估**: +- 涉及文件:~2 个 +- 新增代码:~100 行 +- 开发周期:~1 天(1 人) +- 难点:仅 Anthropic 模型适用,需 feature flag 控制 + +**意义**:推理思考跨轮保留 = 复杂任务连续性。 +**缺失后果**:每轮思考丢失 = 重复推理。 +**改进收益**:Thinking 块保留 = 模型推理连贯性。 + +--- diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index a06befac..c29f3896 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -101,12 +101,12 @@ | **P2** | [SendMessageTool](./multi-agent-deep-dive.md) — 多 Agent间消息传递、shutdown 请求、plan 审批 [↓](./qwen-code-improvement-report-p2-core.md#item-14) | 缺失 | 中 | — | | **P2** | FileIndex — fzf 风格模糊文件搜索 + 异步增量索引 [↓](./qwen-code-improvement-report-p2-core.md#item-15) | 依赖 rg/glob | 中 | — | | **P2** | Notebook Edit — Jupyter cell 编辑 + 自动 cell ID 追踪 + 文件历史快照 [↓](./qwen-code-improvement-report-p2-core.md#item-16) | 缺失 | 中 | — | -| **P2** | [自定义快捷键](#custom-keybindings) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | +| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | | **P2** | Session Ingress Auth — 远程会话 bearer token 认证(企业多用户环境) [↓](./qwen-code-improvement-report-p2-core.md#item-18) | 缺失 | 中 | — | | **P2** | 企业代理 — CONNECT relay + CA cert 注入 + NO_PROXY allowlist(容器环境) [↓](./qwen-code-improvement-report-p2-core.md#item-19) | 缺失 | 大 | — | | **P2** | ConfigTool — 模型通过工具读写设置(主题/模型/权限等),带 schema 验证 [↓](./qwen-code-improvement-report-p2-core.md#item-20) | 仅 /settings 命令 | 小 | — | -| **P2** | [终端主题检测](#terminal-theme) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](#auto-background) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | +| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | | **P2** | Denial Tracking — 连续权限拒绝自动回退到手动确认模式,防止静默阻塞 [↓](./qwen-code-improvement-report-p2-core.md#item-7) | 缺失 | 小 | — | | **P2** | [队列输入编辑](./input-queue-deep-dive.md) — 排队中的指令可通过方向键弹出到输入框重新编辑 [↓](./qwen-code-improvement-report-p2-core.md#item-23) | 缺失 | 小 | [PR#2871](https://github.com/QwenLM/qwen-code/pull/2871) | | **P2** | 状态栏紧凑布局 — 固定高度不伸缩,最大化终端内容区域 [↓](./qwen-code-improvement-report-p2-core.md#item-24) | Footer 占用偏高 | 小 | — | @@ -162,7 +162,7 @@ | **P2** | 统一设计系统组件库 — 12 个语义 UI 原语 + ThemeProvider [↓](./qwen-code-improvement-report-p2-stability.md#item-9) | 组件分散 | 中 | — | | **P2** | Markdown 表格终端渲染 — ANSI-aware + CJK-aware 列宽计算 [↓](./qwen-code-improvement-report-p2-stability.md#item-10) | CJK 列错位 | 小 | — | | **P2** | 屏幕阅读器无障碍支持 — Diff/Spinner/Progress 纯文本替代渲染 [↓](./qwen-code-improvement-report-p2-stability.md#item-11) | hook 存在但使用有限 | 小 | — | -| **P2** | [色觉无障碍主题](#colorblind-theme) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | +| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | | **P2** | 动画系统与卡顿状态检测 — shimmer 微光 + 30s 超时变红 [↓](./qwen-code-improvement-report-p2-stability.md#item-13) | 固定动画/无超时检测 | 小 | — | | **P2** | Agent 权限冒泡 — bubble 模式 + Leader 桥接 + 邮箱回退 [↓](./qwen-code-improvement-report-p2-stability.md#item-14) | 继承父级模式 | 中 | — | | **P2** | Agent 专属 MCP 服务器 — frontmatter mcpServers + 按需连接/清理 [↓](./qwen-code-improvement-report-p2-stability.md#item-15) | 共享全局 MCP | 小 | — | @@ -205,8 +205,8 @@ | **P2** | sandbox运行时集成 — seatbelt/bubblewrap/Docker + 文件/网络限制 [↓](./qwen-code-improvement-report-p2-stability.md#item-30) | 可选/非默认 | 大 | — | | **P2** | SSRF 防护 — 私有 IP 阻断 + IPv4-mapped + DNS rebinding 防护 [↓](./qwen-code-improvement-report-p2-stability.md#item-31) | 仅基础 isPrivateIp | 中 | — | | **P2** | WebFetch 域名allowlist — 130+ 预批准域名 + 路径段边界匹配 [↓](./qwen-code-improvement-report-p2-stability.md#item-32) | 无内置allowlist | 小 | — | -| **P2** | [子进程环境变量清洗](#env-sanitization) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | -| **P2** | 工具输出 [密钥扫描](#secret-scanning) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | +| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | +| **P2** | 工具输出 [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | | **P2** | privilege escalation防护 — auto 模式 60+ 危险规则自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-35) | yolo 批准所有 | 中 | — | | **P3** | 动态状态栏 — 模型/工具可实时更新状态文本 [↓](./qwen-code-improvement-report-p3.md#item-1) | 仅静态 Footer | 小 | — | | **P3** | [上下文折叠](./context-compression-deep-dive.md) — History Snip(Claude Code 自身仅 scaffolding,未完整实现) [↓](./qwen-code-improvement-report-p3.md#item-2) | 缺失 | 大 | — | @@ -219,31 +219,31 @@ | **P3** | Vim 完整实现 — motions + operators + textObjects + transitions 完整体系 [↓](./qwen-code-improvement-report-p3.md#item-9) | 基础 vim.ts | 中 | — | | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | -| **P1** | [系统提示模块化](#system-prompt-modular) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | +| **P1** | [系统提示模块化](./qwen-code-improvement-report-p0-p1-engine.md#item-26) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | | **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | -| **P2** | [Git Worktree](#git-worktree) — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | -| **P2** | [REPL 沙箱](#repl-sandbox) — AST 读写分类已覆盖 | 已覆盖 | 中 | — | -| **P2** | [工作流脚本](#workflow-scripts) — Hook 系统可替代 | 已覆盖 | 中 | — | -| **P2** | [会话标签与搜索](#session-tags-search) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | -| **P2** | [MCP OAuth](#mcp-oauth) — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | -| **P2** | [MCP 通道通知](#mcp-notification) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | -| **P3** | [会话分支](#session-branch) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | -| **P3** | [安全审查](#security-review) — skill 可快速补齐 | skill 可补齐 | 小 | — | -| **P3** | [PR 评论](#pr-comments) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | -| **P2** | [@include 指令](#include-directive) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | -| **P2** | [附件协议](#attachment-protocol) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | -| **P2** | [图片压缩流水线](#image-compression) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | -| **P2** | [Git 状态自动注入](#git-status-injection) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | -| **P2** | [IDE 诊断注入](#ide-diagnostics) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | -| **P2** | [终端主题检测](#terminal-theme) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](#auto-background) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | -| **P2** | [密钥扫描](#secret-scanning) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | -| **P2** | [子进程环境变量清洗](#env-sanitization) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | -| **P2** | [结构化 Diff](#structured-diff) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | -| **P2** | [OSC 通知](#osc-notifications) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | -| **P2** | [OSC 8 超链接](#osc-8) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | -| **P2** | [色觉无障碍主题](#colorblind-theme) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | -| **P2** | [自定义快捷键](#custom-keybindings) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | +| **P2** | Git Worktree — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | +| **P2** | REPL 沙箱 — AST 读写分类已覆盖 | 已覆盖 | 中 | — | +| **P2** | 工作流脚本 — Hook 系统可替代 | 已覆盖 | 中 | — | +| **P2** | [会话标签与搜索](./qwen-code-improvement-report-p2-core.md#item-25) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | +| **P2** | MCP OAuth — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | +| **P2** | [MCP 通道通知](./qwen-code-improvement-report-p2-tools.md#item-13) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | +| **P3** | [会话分支](./qwen-code-improvement-report-p2-core.md#item-13) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | +| **P3** | [安全审查](./qwen-code-improvement-report-p3.md#item-6) — skill 可快速补齐 | skill 可补齐 | 小 | — | +| **P3** | [PR 评论](./qwen-code-improvement-report-p2-stability.md#item-22) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | +| **P2** | [@include 指令](./qwen-code-improvement-report-p2-core.md#item-26) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | +| **P2** | [附件协议](./qwen-code-improvement-report-p2-core.md#item-27) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | +| **P2** | [图片压缩流水线](./qwen-code-improvement-report-p2-perf.md#item-17) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | +| **P2** | [Git 状态自动注入](./qwen-code-improvement-report-p2-core.md#item-28) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | +| **P2** | [IDE 诊断注入](./qwen-code-improvement-report-p2-core.md#item-29) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | +| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | +| **P2** | [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | +| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | +| **P2** | [结构化 Diff](./qwen-code-improvement-report-p2-tools.md#item-29) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | +| **P2** | [OSC 通知](./qwen-code-improvement-report-p2-tools.md#item-23) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | +| **P2** | [OSC 8 超链接](./qwen-code-improvement-report-p2-stability.md#item-7) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | +| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | +| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | > 点击改进点名称可跳转到 Deep-Dive 文章;每项的详细说明(缺失后果 + 改进收益 + 建议方案)见 [§三](#三全部改进点详细说明)。 @@ -420,663 +420,26 @@ ## 八、新增改进点详细说明 -> 以下为五轮审计新增的 25 项改进点详细说明。**每项告诉你:改哪些文件、怎么改。** -> 原有改进点的详细说明见 [§三](#三全部改进点详细说明) 对应分文件。 - ---- - - - -### 1. Git Worktree(P2,已实现) - -**结论**:`packages/core/src/services/gitWorktreeService.ts`(826行)已实现完整功能,无需改动。 - ---- - - - -### 2. REPL 沙箱(P2,已覆盖) - -**结论**:`packages/core/src/utils/shellAstParser.ts` 的 AST 读写分类已覆盖 REPL 安全防护,无需单独实现 REPL 工具。 - ---- - - - -### 3. 工作流脚本(P2,Hook 可替代) - -**结论**:`packages/core/src/hooks/` 已有 13 种 Hook 事件类型,可通过 Hook 链实现工作流,无需单独实现。 - ---- - - - -### 4. MCP OAuth(P2,已实现) - -**结论**:`packages/core/src/tools/mcp-server-manager.ts` 中的 `oauth-provider.ts`(960行)+ `keychain-token-storage.ts` 已实现完整 OAuth,无需改动。 - ---- - - - -### 5. 消息规范化(P1,Qwen 已优) - -**结论**:Qwen 采用"构造即正确"哲学,`converter.ts` 中 `cleanOrphanedToolCalls()` + `mergeConsecutiveAssistantMessages()` 已做轻量清理,无需重度规范化。 - ---- - -### 6. 会话标签与搜索(P2) - -**做什么**:给会话打标签,支持按标签快速搜索。 - -**改哪些文件**: -- `packages/core/src/services/sessionService.ts` — 新增 `tags` 字段和搜索方法 -- `packages/cli/src/ui/commands/tagCommand.ts` — 新建命令 - -**怎么改**: -```typescript -// sessionService.ts — 在 ChatSession 接口加 tags 字段 -interface ChatSession { - // ... 现有字段 - tags: string[]; // 新增 -} - -// 新增搜索方法 -async searchByTags(tags: string[]): Promise { - const sessions = await this.listSessions(); - return sessions.filter(s => tags.every(t => s.tags.includes(t))); -} -``` -```typescript -// cli/src/ui/commands/tagCommand.ts — 新建 -// /tag add / /tag remove / /tag list / /tag search -// 复用现有 permissionsCommand 的模式 -``` - -**改完后效果**:用户执行 `/tag add 重构` 后,会话被标记。后续 `/tag search 重构` 可快速找到所有重构相关会话。 - ---- - -### 7. MCP 通道通知(P2) - -**做什么**:让 MCP 服务器能主动向客户端推送通知(如资源变更),减少轮询。 - -**改哪些文件**: -- `packages/core/src/tools/mcp-client.ts` — 新增 channel 订阅和通知处理 - -**怎么改**: -```typescript -// mcp-client.ts — 在 McpClient 类中新增 -private notificationHandlers = new Map void>(); - -// 订阅通知 -subscribe(channel: string, handler: (data: any) => void) { - this.notificationHandlers.set(channel, handler); -} - -// 处理服务器推送 -private handleNotification(method: string, params: any) { - const handler = this.notificationHandlers.get(method); - handler?.(params); -} -``` - -**改完后效果**:MCP 服务器资源变更时主动推送,延迟从轮询间隔(通常 30s)降到 <1s。 - ---- - -### 8. @include 指令(P2) - -**做什么**:CLAUDE.md/AGENTS.md 中用 `@path` 引用其他文件,递归加载,最大深度 5 层。 - -**改哪些文件**: -- `packages/core/src/config/` — 指令加载器(具体文件名待确认,搜索 `CLAUDE.md` 加载逻辑) -- `packages/cli/src/ui/components/` — 外部文件审批对话框 - -**怎么改**: -```typescript -// 在指令加载器中新增 @include 解析 -const INCLUDE_RE = /(?:^|\s)@((?:[^\s\\]|\\ )+)/g; - -async function processIncludes(content: string, basePath: string, depth = 0): Promise { - if (depth >= 5) return content; // 最大深度限制 - - const includes = content.matchAll(INCLUDE_RE); - for (const match of includes) { - const path = match[1]; - const fullPath = resolve(basePath, path); - // 外部文件需用户审批 - if (!isWithinProject(fullPath)) { - const approved = await askUserApproval(fullPath); - if (!approved) continue; - } - const included = await readFile(fullPath, 'utf-8'); - const processed = await processIncludes(included, fullPath, depth + 1); - content = content.replace(match[0], processed); - } - return content; -} -``` - -**改完后效果**:团队规范可拆分为多个文件,用 `@coding-style.md` 引用,避免巨型单文件。 - ---- - -### 9. 附件协议(P2) - -**做什么**:定义 60+ 附件类型(文件/IDE/内存/Hook 等),每类独立 token 预算,3 阶段有序执行。 - -**改哪些文件**: -- `packages/core/src/core/` — 附件类型枚举和预算配置 -- `packages/core/src/core/client.ts` — 附件收集和执行流程 - -**怎么改**: -```typescript -// 新增附件类型枚举 -enum AttachmentType { - File = 'file', - SelectedLines = 'selected_lines_in_ide', - Diagnostics = 'diagnostics', - Memory = 'nested_memory', - // ... 60+ 类型 -} - -// 新增预算配置 -const ATTACHMENT_BUDGETS = { - [AttachmentType.File]: { maxLines: 200, maxBytes: 4096 }, - [AttachmentType.Memory]: { maxSessionBytes: 60 * 1024 }, - // ... -}; - -// 客户端收集附件时按预算截断 -function collectAttachments(session: Session) { - const budget = ATTACHMENT_BUDGETS[type]; - return truncateToBudget(rawContent, budget); -} -``` - -**改完后效果**:防止单一附件类型(如大量诊断信息)撑爆上下文窗口。 - ---- - -### 10. 图片压缩流水线(P2) - -**做什么**:上传前压缩图片:PNG 调色板 → JPEG 质量阶梯 → 尺寸缩放。 - -**改哪些文件**: -- `packages/core/src/utils/imageUtils.ts` — 新建 - -**怎么改**: -```typescript -// 新建 imageUtils.ts -import sharp from 'sharp'; - -export async function compressImage(buffer: Buffer): Promise { - // 阶段1:格式保留压缩 - let result = await sharp(buffer).png({ compressionLevel: 9, palette: true }).toBuffer(); - - if (result.length > budget) { - // 阶段2:尺寸缩放 - result = await sharp(buffer) - .resize(2000, 2000, { fit: 'inside', withoutEnlargement: true }) - .jpeg({ quality: 80 }) - .toBuffer(); - } - - if (result.length > budget) { - // 阶段3:激进压缩 - result = await sharp(buffer) - .resize(400, 400) - .jpeg({ quality: 20 }) - .toBuffer(); - } - - return result; -} -``` - -**改完后效果**:多图场景(截图分析)省 50-80% 图片 token。 - ---- - -### 11. Git 状态自动注入(P2) - -**做什么**:每轮自动把 gitBranch/cwd/fileCount 注入系统提示,模型始终知道当前上下文。 - -**改哪些文件**: -- `packages/core/src/core/prompts.ts` — 系统提示中新增动态段 -- `packages/core/src/utils/gitUtils.ts` — 复用现有 git 工具 - -**怎么改**: -```typescript -// prompts.ts — 在 getMainSessionSystemInstruction() 中新增 -async function getGitContextSection(): Promise { - const branch = await getGitBranch(); - const fileCount = await countProjectFiles(); - return `## Current Context -Branch: ${branch} -Working directory: ${cwd} -Project files: ~${fileCount}`; -} -``` - -**改完后效果**:模型知道自己在哪个分支、项目规模,不再给错命令。 - ---- - -### 12. IDE 诊断注入(P2) - -**做什么**:自动收集 LSP 诊断(编译错误/警告)注入到系统提示,模型即时修复。 - -**改哪些文件**: -- `packages/core/src/tools/lsp.ts` — 新增诊断收集 -- `packages/core/src/core/prompts.ts` — 注入诊断到系统提示 - -**怎么改**: -```typescript -// lsp.ts — 在 LSP 服务中新增诊断收集 -private diagnostics = new Map(); - -onDiagnostics(uri: string, diags: Diagnostic[]) { - this.diagnostics.set(uri, diags); -} - -// 获取活跃诊断(最近 10 个) -getActiveDiagnostics(): Diagnostic[] { - return [...this.diagnostics.values()] - .flat() - .filter(d => d.severity <= 2) // 仅 error/warning - .slice(-10); -} -``` -```typescript -// prompts.ts — 在系统提示中注入 -const diags = lspService.getActiveDiagnostics(); -if (diags.length > 0) { - context += `\n## Current Diagnostics\n${formatDiagnostics(diags)}`; -} -``` - -**改完后效果**:模型自动看到编译错误,无需用户手动粘贴。 - ---- - -### 13. 终端主题检测(P2) - -**做什么**:启动时通过 OSC 11 查询终端背景色,自动适配 dark/light 主题。 - -**改哪些文件**: -- `packages/cli/src/utils/theme.ts` — 新建或修改现有主题工具 - -**怎么改**: -```typescript -// theme.ts — 新增自动检测 -import { queryTerminal } from './terminal-utils'; - -export async function detectTheme(): Promise<'dark' | 'light'> { - // 尝试 OSC 11 查询 - const bgColor = await queryTerminal('OSC 11'); - if (bgColor) { - const brightness = parseBrightness(bgColor); - return brightness > 0.5 ? 'light' : 'dark'; - } - - // 回退:COLORFGBG 环境变量 - const colorfgbg = process.env.COLORFGBG; - if (colorfgbg) { - const bg = parseInt(colorfgbg.split(';').pop()); - return bg >= 7 && bg !== 8 ? 'light' : 'dark'; - } - - return 'dark'; // 默认 -} -``` - -**改完后效果**:浅色终端启动 Agent 不再出现浅黄色文字不可见。 - ---- - -### 14. 自动后台化 Agent(P2) - -**做什么**:Agent 任务超过 15s 自动转后台,不阻塞用户交互。 - -**改哪些文件**: -- `packages/core/src/tools/agent.ts` — 执行流程中加 timer - -**怎么改**: -```typescript -// agent.ts — 在执行函数中新增 -const AUTO_BACKGROUND_MS = 15_000; - -async function executeAgent(agent: Agent) { - const timeout = setTimeout(() => { - agent.markAsBackground(); // 转后台 - notifyUser('Agent moved to background after 15s'); - }, AUTO_BACKGROUND_MS); - - try { - await agent.run(); - } finally { - clearTimeout(timeout); - } -} -``` - -**改完后效果**:长任务执行 15s 后自动释放前台,用户可继续交互。 - ---- - -### 15. 密钥扫描(P2) - -**做什么**:工具输出后扫描是否包含 API 密钥/密码,发现则警告或阻断。 - -**改哪些文件**: -- `packages/core/src/utils/secretScanner.ts` — 新建 -- `packages/core/src/tools/shell.ts` — 输出后调用扫描 - -**怎么改**: -```typescript -// secretScanner.ts — 新建,参考 gitleaks 规则 -const SECRET_PATTERNS = [ - { name: 'AWS Key', re: /AKIA[0-9A-Z]{16}/ }, - { name: 'Generic API', re: /api[_-]?key["']?\s*[:=]\s*["']?[A-Za-z0-9]{20,}/ }, - // ... 50+ 规则 -]; - -export function scanForSecrets(text: string): string[] { - const found: string[] = []; - for (const { name, re } of SECRET_PATTERNS) { - if (re.test(text)) found.push(name); - } - return found; -} -``` -```typescript -// shell.ts — 在工具输出后调用 -const output = await runCommand(cmd); -const secrets = scanForSecrets(output); -if (secrets.length > 0) { - warnUser(`Potential secrets detected: ${secrets.join(', ')}`); - return redactSecrets(output); -} -``` - -**改完后效果**:防止模型意外输出 API 密钥到对话中。 - ---- - -### 16. 子进程环境变量清洗(P2) - -**做什么**:启动子进程前剥离 30+ 敏感环境变量。 - -**改哪些文件**: -- `packages/core/src/utils/envSanitizer.ts` — 新建 -- `packages/core/src/tools/shell.ts` — 启动子进程时调用 - -**怎么改**: -```typescript -// envSanitizer.ts — 新建 -const SENSITIVE_VARS = new Set([ - 'AWS_SECRET_ACCESS_KEY', 'AWS_SESSION_TOKEN', - 'GITHUB_TOKEN', 'GH_TOKEN', - 'OPENAI_API_KEY', 'ANTHROPIC_API_KEY', - // ... 30+ 敏感变量 -]); - -export function sanitizeEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv { - const clean = { ...env }; - for (const key of SENSITIVE_VARS) { - delete clean[key]; - } - return clean; -} -``` - -**改完后效果**:敏感环境变量不泄漏到工具执行的子进程中。 - ---- - -### 17. 结构化 Diff(P2) - -**做什么**:Diff 渲染带行号 gutter + 语法高亮 + 上下文分隔线。 - -**改哪些文件**: -- `packages/cli/src/ui/components/DiffRenderer.tsx` — 已有,增强渲染 -- `packages/cli/src/ui/utils/diffFormatter.ts` — 新建 - -**怎么改**: -```typescript -// diffFormatter.ts — 新建 -import { diffLines } from 'diff'; -import { highlight } from 'cli-highlight'; - -export function formatStructuredDiff(oldStr: string, newStr: string, lang: string): string { - const changes = diffLines(oldStr, newStr); - let oldLine = 1, newLine = 1; - let output = ''; - - for (const change of changes) { - if (change.added) { - for (const line of change.value.split('\n')) { - output += `+ ${newLine++} | ${highlight(line, { language: lang })}\n`; - } - } else if (change.removed) { - for (const line of change.value.split('\n')) { - output += `- ${oldLine++} | ${highlight(line, { language: lang })}\n`; - } - } else { - // 上下文行 - oldLine += change.value.split('\n').length - 1; - newLine += change.value.split('\n').length - 1; - } - } - return output; -} -``` - -**改完后效果**:代码变更带行号 + 语法高亮,可读性大幅提升。 - ---- - -### 18. OSC 通知(P2) - -**做什么**:后台任务完成时推送系统通知(iTerm2/Kitty/Ghostty),带进度百分比。 - -**改哪些文件**: -- `packages/cli/src/utils/notifications.ts` — 新建 - -**怎么改**: -```typescript -// notifications.ts — 新建 -export function sendTerminalNotification(type: 'complete' | 'progress', message: string, progress?: number) { - if (process.env.TERM_PROGRAM === 'iTerm.app') { - // iTerm2 - process.stdout.write(`\x1b]9;4;${progress || 100};${message}\x07`); - } else if (process.env.KITTY_LISTEN_ON) { - // Kitty - process.stdout.write(`\x1b]99;i=1:${message}\x1b\\`); - } else { - // 回退:bell - process.stdout.write('\x07'); - } -} -``` - -**改完后效果**:后台任务完成时收到带进度的系统通知,无需盯着终端。 - ---- - -### 19. OSC 8 超链接(P2) - -**做什么**:文件路径和 URL 渲染为可点击超链接,Cmd+Click 直接打开。 - -**改哪些文件**: -- `packages/cli/src/ui/components/MarkdownRenderer.tsx` — 链接渲染处 - -**怎么改**: -```typescript -// MarkdownRenderer.tsx — 在链接渲染处修改 -function renderLink(text: string, url: string): string { - // OSC 8 超链接格式: ESC ] 8 ; params ; uri ST text ESC ] 8 ; ; ST - return `\x1b]8;;${url}\x1b\\${text}\x1b]8;;\x1b\\`; -} - -// 使用示例 -renderLink('src/index.ts', 'file:///path/to/src/index.ts'); -renderLink('github.com', 'https://github.com'); -``` - -**改完后效果**:终端中文件路径/URL 可直接 Cmd+Click 打开,零复制。 - ---- - -### 20. 色觉无障碍主题(P2) - -**做什么**:新增色觉无障碍主题,diff 配色红绿→蓝橙,适配红绿色盲用户。 - -**改哪些文件**: -- `packages/cli/src/ui/themes/theme-manager.ts` — 新增主题 - -**怎么改**: -```typescript -// theme-manager.ts — 新增主题 -const COLORBLIND_SAFE = { - name: 'Colorblind Safe', - diff: { - added: '#0066CC', // 蓝(非绿) - removed: '#CC6600', // 橙(非红) - }, - // 其他颜色使用 daltonized 调色板 -}; -``` - -**改完后效果**:色盲用户能清晰区分 diff 中的增删行。 - ---- - -### 21. 自定义快捷键(P2) - -**做什么**:支持 `keybindings.json` 自定义快捷键配置。 - -**改哪些文件**: -- `packages/cli/src/config/keyBindings.ts` — 已有基础架构,新增加载和解析 -- `packages/cli/src/ui/keyboard/` — 新建快捷键处理 - -**怎么改**: -```typescript -// keyBindings.ts — 新增用户配置加载 -interface KeyBinding { - key: string; - command: string; - when?: string; -} - -async function loadUserKeyBindings(): Promise { - const configPath = path.join(getConfigDir(), 'keybindings.json'); - try { - const content = await fs.readFile(configPath, 'utf-8'); - return JSON.parse(content).keybindings; - } catch { - return []; // 无用户配置,使用默认 - } -} -``` - -**改完后效果**:Vim/Emacs 用户可自定义习惯键位。 - ---- - -### 22. 会话分支(P3) - -**做什么**:从历史会话任意节点分叉,探索不同方案。 - -**改哪些文件**: -- `packages/core/src/services/sessionService.ts` — 新增 fork 方法 -- `packages/cli/src/ui/commands/branchCommand.ts` — 新建命令 - -**怎么改**: -```typescript -// sessionService.ts -async forkSession(sessionId: string, fromMessageId: string, newTitle: string): Promise { - const source = await this.loadSession(sessionId); - const messages = source.messages.slice(0, source.messages.findIndex(m => m.id === fromMessageId) + 1); - const newSessionId = uuid(); - await this.createSession(newSessionId, newTitle, messages); - return newSessionId; -} -``` - -**改完后效果**:用户可从任意对话节点分叉,并行探索多个方案。 - ---- - -### 23. 安全审查(P3,skill 可补齐) - -**做什么**:编写 `SKILL.md` 即可实现,无需代码改动。 - -**改哪些文件**: -- `.qwen/skills/security-review/SKILL.md` — 新建 - -**怎么改**: -```markdown ---- -name: security-review -description: 基于 git diff 进行安全审查 ---- - -# Security Review - -检查最近的 git diff,关注: -1. 硬编码密钥/凭证 -2. SQL 注入/XSS 漏洞 -3. 权限绕过 -4. 不安全的反序列化 -... -``` - -**改完后效果**:用户执行 `/skills security-review` 即可自动审查代码安全。 - ---- - -### 24. PR 评论(P3) - -**做什么**:通过 GitHub Actions skill 实现,无需核心代码改动。 - -**改哪些文件**: -- `.qwen/skills/pr-review/SKILL.md` — 新建 skill -- `.github/workflows/pr-review.yml` — 新建 workflow - -**改完后效果**:PR 提交时自动 review 并添加 inline 评论。 - ---- - -### 25. Thinking 块保留(P2) - -**做什么**:thinking 块跨轮保留,1h 空闲自动清理。 - -**改哪些文件**: -- `packages/core/src/core/client.ts` — thinking 块存储和清理 -- 仅 Anthropic 模型适用 - -**怎么改**: -```typescript -// client.ts — thinking 块持久化 -private thinkingBlocks: ThinkingBlock[] = []; -private lastThinkingActivity = Date.now(); - -function persistThinking(blocks: ThinkingBlock[]) { - this.thinkingBlocks = blocks; - this.lastThinkingActivity = Date.now(); -} - -// 空闲 1h 后清理 -function cleanupIdleThinking() { - if (Date.now() - this.lastThinkingActivity > 3600_000) { - this.thinkingBlocks = []; - } -} -``` - -**改完后效果**:模型推理过程中的思考跨轮保留,提升复杂任务的连续性。 - ---- +> 以下为五轮审计新增的改进点,已追加到对应分文件中。点击跳转到详细说明(格式与 §三 一致:问题 → Claude Code 源码索引 → Qwen Code 现状 → 修改方向 → 实现成本 → 意义/缺失后果/改进收益)。 + +| 优先级 | 改进点 | 详见 | +|:------:|--------|------| +| **P1** | 系统提示模块化 | [p0-p1-engine.md#item-26](./qwen-code-improvement-report-p0-p1-engine.md#item-26) | +| **P2** | 会话标签与搜索 | [p2-core.md#item-25](./qwen-code-improvement-report-p2-core.md#item-25) | +| **P2** | @include 指令 | [p2-core.md#item-26](./qwen-code-improvement-report-p2-core.md#item-26) | +| **P2** | 附件协议 | [p2-core.md#item-27](./qwen-code-improvement-report-p2-core.md#item-27) | +| **P2** | Git 状态自动注入 | [p2-core.md#item-28](./qwen-code-improvement-report-p2-core.md#item-28) | +| **P2** | IDE 诊断注入 | [p2-core.md#item-29](./qwen-code-improvement-report-p2-core.md#item-29) | +| **P2** | 终端主题检测 | [p2-core.md#item-30](./qwen-code-improvement-report-p2-core.md#item-30) | +| **P2** | 自动后台化 Agent | [p2-core.md#item-31](./qwen-code-improvement-report-p2-core.md#item-31) | +| **P2** | 密钥扫描 | [p2-core.md#item-32](./qwen-code-improvement-report-p2-core.md#item-32) | +| **P2** | 子进程环境变量清洗 | [p2-core.md#item-33](./qwen-code-improvement-report-p2-core.md#item-33) | +| **P2** | 自定义快捷键 | [p2-core.md#item-34](./qwen-code-improvement-report-p2-core.md#item-34) | +| **P2** | Thinking 块保留 | [p2-core.md#item-35](./qwen-code-improvement-report-p2-core.md#item-35) | + +> 以下改进点经审计已在 Qwen Code 中实现或有更好方案,无需额外改动: +> - Git Worktree(`gitWorktreeService.ts` 826行已实现) +> - REPL 沙箱(`shellAstParser.ts` AST 读写分类已覆盖) +> - 工作流脚本(Hook 系统 13 种事件类型可替代) +> - MCP OAuth(`oauth-provider.ts` 960行已实现) +> - 消息规范化("构造即正确"哲学优于 Claude Code 的后处理修复) From a8a8164e61ca2d04b36047382ac93e72e0f22e9c Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:32:41 +0800 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20add=20[=E2=86=93]=20markers=20to=20n?= =?UTF-8?q?ew=20improvement=20items=20in=20main=20report?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consistent with existing items format. Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- .../qwen-code-improvement-report.md | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index c29f3896..50c86663 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -101,12 +101,12 @@ | **P2** | [SendMessageTool](./multi-agent-deep-dive.md) — 多 Agent间消息传递、shutdown 请求、plan 审批 [↓](./qwen-code-improvement-report-p2-core.md#item-14) | 缺失 | 中 | — | | **P2** | FileIndex — fzf 风格模糊文件搜索 + 异步增量索引 [↓](./qwen-code-improvement-report-p2-core.md#item-15) | 依赖 rg/glob | 中 | — | | **P2** | Notebook Edit — Jupyter cell 编辑 + 自动 cell ID 追踪 + 文件历史快照 [↓](./qwen-code-improvement-report-p2-core.md#item-16) | 缺失 | 中 | — | -| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | +| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | | **P2** | Session Ingress Auth — 远程会话 bearer token 认证(企业多用户环境) [↓](./qwen-code-improvement-report-p2-core.md#item-18) | 缺失 | 中 | — | | **P2** | 企业代理 — CONNECT relay + CA cert 注入 + NO_PROXY allowlist(容器环境) [↓](./qwen-code-improvement-report-p2-core.md#item-19) | 缺失 | 大 | — | | **P2** | ConfigTool — 模型通过工具读写设置(主题/模型/权限等),带 schema 验证 [↓](./qwen-code-improvement-report-p2-core.md#item-20) | 仅 /settings 命令 | 小 | — | -| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | +| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | | **P2** | Denial Tracking — 连续权限拒绝自动回退到手动确认模式,防止静默阻塞 [↓](./qwen-code-improvement-report-p2-core.md#item-7) | 缺失 | 小 | — | | **P2** | [队列输入编辑](./input-queue-deep-dive.md) — 排队中的指令可通过方向键弹出到输入框重新编辑 [↓](./qwen-code-improvement-report-p2-core.md#item-23) | 缺失 | 小 | [PR#2871](https://github.com/QwenLM/qwen-code/pull/2871) | | **P2** | 状态栏紧凑布局 — 固定高度不伸缩,最大化终端内容区域 [↓](./qwen-code-improvement-report-p2-core.md#item-24) | Footer 占用偏高 | 小 | — | @@ -162,7 +162,7 @@ | **P2** | 统一设计系统组件库 — 12 个语义 UI 原语 + ThemeProvider [↓](./qwen-code-improvement-report-p2-stability.md#item-9) | 组件分散 | 中 | — | | **P2** | Markdown 表格终端渲染 — ANSI-aware + CJK-aware 列宽计算 [↓](./qwen-code-improvement-report-p2-stability.md#item-10) | CJK 列错位 | 小 | — | | **P2** | 屏幕阅读器无障碍支持 — Diff/Spinner/Progress 纯文本替代渲染 [↓](./qwen-code-improvement-report-p2-stability.md#item-11) | hook 存在但使用有限 | 小 | — | -| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | +| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | | **P2** | 动画系统与卡顿状态检测 — shimmer 微光 + 30s 超时变红 [↓](./qwen-code-improvement-report-p2-stability.md#item-13) | 固定动画/无超时检测 | 小 | — | | **P2** | Agent 权限冒泡 — bubble 模式 + Leader 桥接 + 邮箱回退 [↓](./qwen-code-improvement-report-p2-stability.md#item-14) | 继承父级模式 | 中 | — | | **P2** | Agent 专属 MCP 服务器 — frontmatter mcpServers + 按需连接/清理 [↓](./qwen-code-improvement-report-p2-stability.md#item-15) | 共享全局 MCP | 小 | — | @@ -205,8 +205,8 @@ | **P2** | sandbox运行时集成 — seatbelt/bubblewrap/Docker + 文件/网络限制 [↓](./qwen-code-improvement-report-p2-stability.md#item-30) | 可选/非默认 | 大 | — | | **P2** | SSRF 防护 — 私有 IP 阻断 + IPv4-mapped + DNS rebinding 防护 [↓](./qwen-code-improvement-report-p2-stability.md#item-31) | 仅基础 isPrivateIp | 中 | — | | **P2** | WebFetch 域名allowlist — 130+ 预批准域名 + 路径段边界匹配 [↓](./qwen-code-improvement-report-p2-stability.md#item-32) | 无内置allowlist | 小 | — | -| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | -| **P2** | 工具输出 [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | +| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | +| **P2** | 工具输出 [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | | **P2** | privilege escalation防护 — auto 模式 60+ 危险规则自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-35) | yolo 批准所有 | 中 | — | | **P3** | 动态状态栏 — 模型/工具可实时更新状态文本 [↓](./qwen-code-improvement-report-p3.md#item-1) | 仅静态 Footer | 小 | — | | **P3** | [上下文折叠](./context-compression-deep-dive.md) — History Snip(Claude Code 自身仅 scaffolding,未完整实现) [↓](./qwen-code-improvement-report-p3.md#item-2) | 缺失 | 大 | — | @@ -219,31 +219,31 @@ | **P3** | Vim 完整实现 — motions + operators + textObjects + transitions 完整体系 [↓](./qwen-code-improvement-report-p3.md#item-9) | 基础 vim.ts | 中 | — | | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | -| **P1** | [系统提示模块化](./qwen-code-improvement-report-p0-p1-engine.md#item-26) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | +| **P1** | [系统提示模块化](./qwen-code-improvement-report-p0-p1-engine.md#item-26) [↓](./qwen-code-improvement-report-p0-p1-engine.md#item-26) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | | **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | | **P2** | Git Worktree — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | | **P2** | REPL 沙箱 — AST 读写分类已覆盖 | 已覆盖 | 中 | — | | **P2** | 工作流脚本 — Hook 系统可替代 | 已覆盖 | 中 | — | -| **P2** | [会话标签与搜索](./qwen-code-improvement-report-p2-core.md#item-25) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | +| **P2** | [会话标签与搜索](./qwen-code-improvement-report-p2-core.md#item-25) [↓](./qwen-code-improvement-report-p2-core.md#item-25) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | | **P2** | MCP OAuth — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | -| **P2** | [MCP 通道通知](./qwen-code-improvement-report-p2-tools.md#item-13) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | -| **P3** | [会话分支](./qwen-code-improvement-report-p2-core.md#item-13) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | -| **P3** | [安全审查](./qwen-code-improvement-report-p3.md#item-6) — skill 可快速补齐 | skill 可补齐 | 小 | — | -| **P3** | [PR 评论](./qwen-code-improvement-report-p2-stability.md#item-22) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | -| **P2** | [@include 指令](./qwen-code-improvement-report-p2-core.md#item-26) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | -| **P2** | [附件协议](./qwen-code-improvement-report-p2-core.md#item-27) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | -| **P2** | [图片压缩流水线](./qwen-code-improvement-report-p2-perf.md#item-17) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | -| **P2** | [Git 状态自动注入](./qwen-code-improvement-report-p2-core.md#item-28) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | -| **P2** | [IDE 诊断注入](./qwen-code-improvement-report-p2-core.md#item-29) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | -| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | -| **P2** | [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | -| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | -| **P2** | [结构化 Diff](./qwen-code-improvement-report-p2-tools.md#item-29) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | -| **P2** | [OSC 通知](./qwen-code-improvement-report-p2-tools.md#item-23) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | -| **P2** | [OSC 8 超链接](./qwen-code-improvement-report-p2-stability.md#item-7) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | -| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | -| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | +| **P2** | [MCP 通道通知](./qwen-code-improvement-report-p2-tools.md#item-13) [↓](./qwen-code-improvement-report-p2-tools.md#item-13) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | +| **P3** | [会话分支](./qwen-code-improvement-report-p2-core.md#item-13) [↓](./qwen-code-improvement-report-p2-core.md#item-13) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | +| **P3** | [安全审查](./qwen-code-improvement-report-p3.md#item-6) [↓](./qwen-code-improvement-report-p3.md#item-6) — skill 可快速补齐 | skill 可补齐 | 小 | — | +| **P3** | [PR 评论](./qwen-code-improvement-report-p2-stability.md#item-22) [↓](./qwen-code-improvement-report-p2-stability.md#item-22) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | +| **P2** | [@include 指令](./qwen-code-improvement-report-p2-core.md#item-26) [↓](./qwen-code-improvement-report-p2-core.md#item-26) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | +| **P2** | [附件协议](./qwen-code-improvement-report-p2-core.md#item-27) [↓](./qwen-code-improvement-report-p2-core.md#item-27) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | +| **P2** | [图片压缩流水线](./qwen-code-improvement-report-p2-perf.md#item-17) [↓](./qwen-code-improvement-report-p2-perf.md#item-17) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | +| **P2** | [Git 状态自动注入](./qwen-code-improvement-report-p2-core.md#item-28) [↓](./qwen-code-improvement-report-p2-core.md#item-28) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | +| **P2** | [IDE 诊断注入](./qwen-code-improvement-report-p2-core.md#item-29) [↓](./qwen-code-improvement-report-p2-core.md#item-29) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | +| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | +| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | +| **P2** | [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | +| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | +| **P2** | [结构化 Diff](./qwen-code-improvement-report-p2-tools.md#item-29) [↓](./qwen-code-improvement-report-p2-tools.md#item-29) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | +| **P2** | [OSC 通知](./qwen-code-improvement-report-p2-tools.md#item-23) [↓](./qwen-code-improvement-report-p2-tools.md#item-23) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | +| **P2** | [OSC 8 超链接](./qwen-code-improvement-report-p2-stability.md#item-7) [↓](./qwen-code-improvement-report-p2-stability.md#item-7) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | +| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | +| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | > 点击改进点名称可跳转到 Deep-Dive 文章;每项的详细说明(缺失后果 + 改进收益 + 建议方案)见 [§三](#三全部改进点详细说明)。 From a00ace6d736f4b5f528a5c46675d2460306f4173 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:34:13 +0800 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20remove=20duplicate=20links=20from=20?= =?UTF-8?q?new=20items,=20keep=20only=20[=E2=86=93]=20marker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Format now matches existing items: plain name + [↓](detail-link). Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- .../qwen-code-improvement-report.md | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 50c86663..749cf642 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -101,12 +101,12 @@ | **P2** | [SendMessageTool](./multi-agent-deep-dive.md) — 多 Agent间消息传递、shutdown 请求、plan 审批 [↓](./qwen-code-improvement-report-p2-core.md#item-14) | 缺失 | 中 | — | | **P2** | FileIndex — fzf 风格模糊文件搜索 + 异步增量索引 [↓](./qwen-code-improvement-report-p2-core.md#item-15) | 依赖 rg/glob | 中 | — | | **P2** | Notebook Edit — Jupyter cell 编辑 + 自动 cell ID 追踪 + 文件历史快照 [↓](./qwen-code-improvement-report-p2-core.md#item-16) | 缺失 | 中 | — | -| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | +| **P2** | 自定义快捷键 [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | | **P2** | Session Ingress Auth — 远程会话 bearer token 认证(企业多用户环境) [↓](./qwen-code-improvement-report-p2-core.md#item-18) | 缺失 | 中 | — | | **P2** | 企业代理 — CONNECT relay + CA cert 注入 + NO_PROXY allowlist(容器环境) [↓](./qwen-code-improvement-report-p2-core.md#item-19) | 缺失 | 大 | — | | **P2** | ConfigTool — 模型通过工具读写设置(主题/模型/权限等),带 schema 验证 [↓](./qwen-code-improvement-report-p2-core.md#item-20) | 仅 /settings 命令 | 小 | — | -| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | +| **P2** | 终端主题检测 [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | +| **P2** | 自动后台化 Agent [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | | **P2** | Denial Tracking — 连续权限拒绝自动回退到手动确认模式,防止静默阻塞 [↓](./qwen-code-improvement-report-p2-core.md#item-7) | 缺失 | 小 | — | | **P2** | [队列输入编辑](./input-queue-deep-dive.md) — 排队中的指令可通过方向键弹出到输入框重新编辑 [↓](./qwen-code-improvement-report-p2-core.md#item-23) | 缺失 | 小 | [PR#2871](https://github.com/QwenLM/qwen-code/pull/2871) | | **P2** | 状态栏紧凑布局 — 固定高度不伸缩,最大化终端内容区域 [↓](./qwen-code-improvement-report-p2-core.md#item-24) | Footer 占用偏高 | 小 | — | @@ -162,7 +162,7 @@ | **P2** | 统一设计系统组件库 — 12 个语义 UI 原语 + ThemeProvider [↓](./qwen-code-improvement-report-p2-stability.md#item-9) | 组件分散 | 中 | — | | **P2** | Markdown 表格终端渲染 — ANSI-aware + CJK-aware 列宽计算 [↓](./qwen-code-improvement-report-p2-stability.md#item-10) | CJK 列错位 | 小 | — | | **P2** | 屏幕阅读器无障碍支持 — Diff/Spinner/Progress 纯文本替代渲染 [↓](./qwen-code-improvement-report-p2-stability.md#item-11) | hook 存在但使用有限 | 小 | — | -| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | +| **P2** | 色觉无障碍主题 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | | **P2** | 动画系统与卡顿状态检测 — shimmer 微光 + 30s 超时变红 [↓](./qwen-code-improvement-report-p2-stability.md#item-13) | 固定动画/无超时检测 | 小 | — | | **P2** | Agent 权限冒泡 — bubble 模式 + Leader 桥接 + 邮箱回退 [↓](./qwen-code-improvement-report-p2-stability.md#item-14) | 继承父级模式 | 中 | — | | **P2** | Agent 专属 MCP 服务器 — frontmatter mcpServers + 按需连接/清理 [↓](./qwen-code-improvement-report-p2-stability.md#item-15) | 共享全局 MCP | 小 | — | @@ -205,8 +205,8 @@ | **P2** | sandbox运行时集成 — seatbelt/bubblewrap/Docker + 文件/网络限制 [↓](./qwen-code-improvement-report-p2-stability.md#item-30) | 可选/非默认 | 大 | — | | **P2** | SSRF 防护 — 私有 IP 阻断 + IPv4-mapped + DNS rebinding 防护 [↓](./qwen-code-improvement-report-p2-stability.md#item-31) | 仅基础 isPrivateIp | 中 | — | | **P2** | WebFetch 域名allowlist — 130+ 预批准域名 + 路径段边界匹配 [↓](./qwen-code-improvement-report-p2-stability.md#item-32) | 无内置allowlist | 小 | — | -| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | -| **P2** | 工具输出 [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | +| **P2** | 子进程环境变量清洗 [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | +| **P2** | 工具输出 密钥扫描 [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | | **P2** | privilege escalation防护 — auto 模式 60+ 危险规则自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-35) | yolo 批准所有 | 中 | — | | **P3** | 动态状态栏 — 模型/工具可实时更新状态文本 [↓](./qwen-code-improvement-report-p3.md#item-1) | 仅静态 Footer | 小 | — | | **P3** | [上下文折叠](./context-compression-deep-dive.md) — History Snip(Claude Code 自身仅 scaffolding,未完整实现) [↓](./qwen-code-improvement-report-p3.md#item-2) | 缺失 | 大 | — | @@ -219,31 +219,31 @@ | **P3** | Vim 完整实现 — motions + operators + textObjects + transitions 完整体系 [↓](./qwen-code-improvement-report-p3.md#item-9) | 基础 vim.ts | 中 | — | | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | -| **P1** | [系统提示模块化](./qwen-code-improvement-report-p0-p1-engine.md#item-26) [↓](./qwen-code-improvement-report-p0-p1-engine.md#item-26) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | +| **P1** | 系统提示模块化 [↓](./qwen-code-improvement-report-p0-p1-engine.md#item-26) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | | **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | | **P2** | Git Worktree — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | | **P2** | REPL 沙箱 — AST 读写分类已覆盖 | 已覆盖 | 中 | — | | **P2** | 工作流脚本 — Hook 系统可替代 | 已覆盖 | 中 | — | -| **P2** | [会话标签与搜索](./qwen-code-improvement-report-p2-core.md#item-25) [↓](./qwen-code-improvement-report-p2-core.md#item-25) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | +| **P2** | 会话标签与搜索 [↓](./qwen-code-improvement-report-p2-core.md#item-25) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | | **P2** | MCP OAuth — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | -| **P2** | [MCP 通道通知](./qwen-code-improvement-report-p2-tools.md#item-13) [↓](./qwen-code-improvement-report-p2-tools.md#item-13) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | -| **P3** | [会话分支](./qwen-code-improvement-report-p2-core.md#item-13) [↓](./qwen-code-improvement-report-p2-core.md#item-13) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | -| **P3** | [安全审查](./qwen-code-improvement-report-p3.md#item-6) [↓](./qwen-code-improvement-report-p3.md#item-6) — skill 可快速补齐 | skill 可补齐 | 小 | — | -| **P3** | [PR 评论](./qwen-code-improvement-report-p2-stability.md#item-22) [↓](./qwen-code-improvement-report-p2-stability.md#item-22) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | -| **P2** | [@include 指令](./qwen-code-improvement-report-p2-core.md#item-26) [↓](./qwen-code-improvement-report-p2-core.md#item-26) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | -| **P2** | [附件协议](./qwen-code-improvement-report-p2-core.md#item-27) [↓](./qwen-code-improvement-report-p2-core.md#item-27) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | -| **P2** | [图片压缩流水线](./qwen-code-improvement-report-p2-perf.md#item-17) [↓](./qwen-code-improvement-report-p2-perf.md#item-17) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | -| **P2** | [Git 状态自动注入](./qwen-code-improvement-report-p2-core.md#item-28) [↓](./qwen-code-improvement-report-p2-core.md#item-28) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | -| **P2** | [IDE 诊断注入](./qwen-code-improvement-report-p2-core.md#item-29) [↓](./qwen-code-improvement-report-p2-core.md#item-29) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | -| **P2** | [终端主题检测](./qwen-code-improvement-report-p2-core.md#item-30) [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | -| **P2** | [自动后台化 Agent](./qwen-code-improvement-report-p2-core.md#item-31) [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | -| **P2** | [密钥扫描](./qwen-code-improvement-report-p2-core.md#item-32) [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | -| **P2** | [子进程环境变量清洗](./qwen-code-improvement-report-p2-core.md#item-33) [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | -| **P2** | [结构化 Diff](./qwen-code-improvement-report-p2-tools.md#item-29) [↓](./qwen-code-improvement-report-p2-tools.md#item-29) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | -| **P2** | [OSC 通知](./qwen-code-improvement-report-p2-tools.md#item-23) [↓](./qwen-code-improvement-report-p2-tools.md#item-23) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | -| **P2** | [OSC 8 超链接](./qwen-code-improvement-report-p2-stability.md#item-7) [↓](./qwen-code-improvement-report-p2-stability.md#item-7) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | -| **P2** | [色觉无障碍主题](./qwen-code-improvement-report-p2-stability.md#item-12) [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | -| **P2** | [自定义快捷键](./qwen-code-improvement-report-p2-core.md#item-34) [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | +| **P2** | MCP 通道通知 [↓](./qwen-code-improvement-report-p2-tools.md#item-13) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | +| **P3** | 会话分支 [↓](./qwen-code-improvement-report-p2-core.md#item-13) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | +| **P3** | 安全审查 [↓](./qwen-code-improvement-report-p3.md#item-6) — skill 可快速补齐 | skill 可补齐 | 小 | — | +| **P3** | PR 评论 [↓](./qwen-code-improvement-report-p2-stability.md#item-22) — GitHub Actions 可实现 | Actions 可实现 | 中 | — | +| **P2** | @include 指令 [↓](./qwen-code-improvement-report-p2-core.md#item-26) — 递归引用 + 外部文件审批 + 40+ 文本类型白名单 | 缺失 | 中 | — | +| **P2** | 附件协议 [↓](./qwen-code-improvement-report-p2-core.md#item-27) — 60+ 类型 + per-type token 预算 + 3 阶段有序执行 | 缺失 | 中 | — | +| **P2** | 图片压缩流水线 [↓](./qwen-code-improvement-report-p2-perf.md#item-17) — format→resize→quality 阶梯 + JPEG fallback | 无压缩 | 中 | — | +| **P2** | Git 状态自动注入 [↓](./qwen-code-improvement-report-p2-core.md#item-28) — gitBranch/cwd/fileCount 每轮自动注入系统提示 | 仅统计/不注入 | 小 | — | +| **P2** | IDE 诊断注入 [↓](./qwen-code-improvement-report-p2-core.md#item-29) — LSP 诊断自动收集 + 选区自动注入 | 依赖 IDE 推送 | 中 | — | +| **P2** | 终端主题检测 [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 dark/light + COLORFGBG 回退 | 缺失 | 小 | — | +| **P2** | 自动后台化 Agent [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超时 15s 自动转后台 + Assistant 模式检测 | 需显式指定 | 小 | — | +| **P2** | 密钥扫描 [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 工具输出 50+ gitleaks 规则扫描 + 写入阻断 | 仅 Team Memory 场景需要 | 中 | — | +| **P2** | 子进程环境变量清洗 [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 | OS 层职责 | 中 | — | +| **P2** | 结构化 Diff [↓](./qwen-code-improvement-report-p2-tools.md#item-29) — 纯 JS 快速着色 + 行号 gutter + 语法高亮 | 基础 inline diff | 中 | — | +| **P2** | OSC 通知 [↓](./qwen-code-improvement-report-p2-tools.md#item-23) — iTerm2/Kitty/Ghostty 通知 + 进度 | 仅 bell 响铃 | 小 | — | +| **P2** | OSC 8 超链接 [↓](./qwen-code-improvement-report-p2-stability.md#item-7) — Cmd+Click 打开文件/URL | MarkdownRenderer.tsx 无 OSC 8 | 小 | — | +| **P2** | 色觉无障碍主题 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 | 小众需求 | 小 | — | +| **P2** | 自定义快捷键 [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord + keybindings.json | keyMatchers.ts 不可配置 | 中 | — | > 点击改进点名称可跳转到 Deep-Dive 文章;每项的详细说明(缺失后果 + 改进收益 + 建议方案)见 [§三](#三全部改进点详细说明)。 From 428e8d0311d9637b8b196ab0b547247e81a2fa21 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:34:42 +0800 Subject: [PATCH 8/9] fix: remove already-implemented items from improvement matrix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed 5 items that Qwen Code already has: - Git Worktree (gitWorktreeService.ts 826行) - REPL 沙箱 (AST 读写分类已覆盖) - 工作流脚本 (Hook 系统可替代) - MCP OAuth (oauth-provider.ts 960行) - 消息规范化 (构造即正确) Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- docs/comparison/qwen-code-improvement-report.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 749cf642..6dfe3d4a 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -170,7 +170,6 @@ | **P2** | Agent 进度追踪与实时状态 — ProgressTracker + task-notification + kill 控制 [↓](./qwen-code-improvement-report-p2-stability.md#item-17) | 仅最终结果 | 中 | — | | **P2** | Agent 邮箱系统 — 文件 IPC + lockfile + 单播/广播 [↓](./qwen-code-improvement-report-p2-stability.md#item-18) | 仅 Arena 文件 IPC | 中 | — | | **P2** | cache_edits 增量缓存删除 — API 原地删除旧工具结果不破坏缓存前缀 [↓](./qwen-code-improvement-report-p2-perf.md#item-13) | 重建消息数组 | 小 | — | -| **P2** | 消息规范化与配对修复 — 合并连续 user + 修复孤立 tool_use/result + 100 媒体上限 [↓](./qwen-code-improvement-report-p2-perf.md#item-14) | 格式转换/无修复 | 中 | — | | **P2** | Git 状态自动注入上下文 — gitBranch/cwd/platform/fileCount 每轮注入 [↓](./qwen-code-improvement-report-p2-perf.md#item-15) | 仅平台和日期 | 小 | — | | **P2** | IDE 上下文注入与嵌套记忆触发 — 选区→目录规范自动注入 + 诊断双源收集 [↓](./qwen-code-improvement-report-p2-perf.md#item-16) | 无嵌套记忆触发 | 中 | — | | **P2** | 图片压缩多策略流水线 — format→resize→quality 阶梯 + JPEG fallback [↓](./qwen-code-improvement-report-p2-perf.md#item-17) | 仅计算 token/不压缩 | 中 | — | @@ -220,12 +219,7 @@ | **P3** | 语音模式 — push-to-talk 语音输入 + 流式 STT 转录 + 可重绑快捷键 [↓](./qwen-code-improvement-report-p3.md#item-10) | 缺失 | 大 | — | | **P3** | [插件市场](./hook-plugin-extension-deep-dive.md) — 插件发现、安装、版本管理 + 前端 UI [↓](./qwen-code-improvement-report-p3.md#item-11) | 缺失 | 大 | — | | **P1** | 系统提示模块化 [↓](./qwen-code-improvement-report-p0-p1-engine.md#item-26) — sections 缓存 + dynamic boundary + uncached 标记 | 单一字符串拼接 | 中 | — | -| **P1** | [消息规范化](#message-normalization) — 合并连续 user + 修复孤立 tool_use/result | 构造即正确,无需后处理 | 中 | — | -| **P2** | Git Worktree — gitWorktreeService.ts 已实现(826行) | 已实现 | 小 | — | -| **P2** | REPL 沙箱 — AST 读写分类已覆盖 | 已覆盖 | 中 | — | -| **P2** | 工作流脚本 — Hook 系统可替代 | 已覆盖 | 中 | — | | **P2** | 会话标签与搜索 [↓](./qwen-code-improvement-report-p2-core.md#item-25) — `/tag` 会话标签 + 按 repo/标题搜索 | 仅基础 load/save | 小 | — | -| **P2** | MCP OAuth — oauth-provider.ts 已实现(960行) | 已实现 | 中 | — | | **P2** | MCP 通道通知 [↓](./qwen-code-improvement-report-p2-tools.md#item-13) — MCP channel notification 支持服务器主动推送 | mcp-client.ts 无 channel 概念 | 中 | — | | **P3** | 会话分支 [↓](./qwen-code-improvement-report-p2-core.md#item-13) — `/branch` 从历史会话创建分支 | 可用 sessionService 扩展 | 中 | — | | **P3** | 安全审查 [↓](./qwen-code-improvement-report-p3.md#item-6) — skill 可快速补齐 | skill 可补齐 | 小 | — | @@ -274,7 +268,6 @@ | 启动优化 | API Preconnect + Early Input | 无 | 缺失 | — | | CLAUDE.md 条件规则 | frontmatter `paths:` + 惰加载 | 无条件加载 | 中等差距 | — | | 系统提示模块化 | sections 缓存 + dynamic boundary | 单一字符串拼接 | 中等差距 | — | -| 消息规范化 | 合并连续 user + 修复孤立 tool_use | 构造即正确 | 小差距 | — | | MCP Channel Notification | Channel notification 服务器推送 | 无 channel 概念 | 中等差距 | — | | @include 指令 | 递归引用 + 外部审批 | 缺失 | 缺失 | — | | 会话记忆 (Session Memory) | SessionMemory + memdir | 简单笔记工具 | 显著落后 | — | @@ -293,10 +286,6 @@ | Output Styles | Learning / Explanatory 模式 | 无 | 缺失 | — | | Fast Mode | 速度/成本分级推理 | 无 | 缺失 | — | | 并发 Session | 多终端 PID 追踪 + 后台脱附 | 无 | 缺失 | — | -| Git Worktree | gitWorktreeService.ts 已实现 | 已实现 | 无差距 | — | -| REPL Sandbox | AST 读写分类已覆盖 | 已覆盖 | 无差距 | — | -| Workflow Scripts | Hook 系统可替代 | 已覆盖 | 无差距 | — | -| MCP OAuth | oauth-provider.ts 已实现(960行) | 已实现 | 无差距 | — | | Session Tags & Search | `/tag` + 搜索 | 仅基础 load/save | 中等差距 | — | | Git Status Auto-Injection | gitBranch/cwd/fileCount 每轮注入 | 仅统计/不注入 | 小差距 | — | | IDE Diagnostics Injection | LSP 诊断自动收集 + 选区注入 | 依赖 IDE 推送 | 中等差距 | — | @@ -438,8 +427,3 @@ | **P2** | Thinking 块保留 | [p2-core.md#item-35](./qwen-code-improvement-report-p2-core.md#item-35) | > 以下改进点经审计已在 Qwen Code 中实现或有更好方案,无需额外改动: -> - Git Worktree(`gitWorktreeService.ts` 826行已实现) -> - REPL 沙箱(`shellAstParser.ts` AST 读写分类已覆盖) -> - 工作流脚本(Hook 系统 13 种事件类型可替代) -> - MCP OAuth(`oauth-provider.ts` 960行已实现) -> - 消息规范化("构造即正确"哲学优于 Claude Code 的后处理修复) From 38c79b1b9e2785ca317e1d20ce15037bf24aab71 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 5 Apr 2026 11:36:39 +0800 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20remove=20duplicate=20[=E2=86=93]=20l?= =?UTF-8?q?inks=20from=205=20rows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each row now has only one [↓] at the end, matching the standard format. Signed-off-by: wenshao Co-authored-by: Qwen-Coder --- docs/comparison/qwen-code-improvement-report.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 6dfe3d4a..d539c829 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -101,12 +101,12 @@ | **P2** | [SendMessageTool](./multi-agent-deep-dive.md) — 多 Agent间消息传递、shutdown 请求、plan 审批 [↓](./qwen-code-improvement-report-p2-core.md#item-14) | 缺失 | 中 | — | | **P2** | FileIndex — fzf 风格模糊文件搜索 + 异步增量索引 [↓](./qwen-code-improvement-report-p2-core.md#item-15) | 依赖 rg/glob | 中 | — | | **P2** | Notebook Edit — Jupyter cell 编辑 + 自动 cell ID 追踪 + 文件历史快照 [↓](./qwen-code-improvement-report-p2-core.md#item-16) | 缺失 | 中 | — | -| **P2** | 自定义快捷键 [↓](./qwen-code-improvement-report-p2-core.md#item-34) — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | +| **P2** | 自定义快捷键 — multi-chord 组合键 + 跨平台适配 + `keybindings.json` 自定义 [↓](./qwen-code-improvement-report-p2-core.md#item-17) | 缺失 | 中 | — | | **P2** | Session Ingress Auth — 远程会话 bearer token 认证(企业多用户环境) [↓](./qwen-code-improvement-report-p2-core.md#item-18) | 缺失 | 中 | — | | **P2** | 企业代理 — CONNECT relay + CA cert 注入 + NO_PROXY allowlist(容器环境) [↓](./qwen-code-improvement-report-p2-core.md#item-19) | 缺失 | 大 | — | | **P2** | ConfigTool — 模型通过工具读写设置(主题/模型/权限等),带 schema 验证 [↓](./qwen-code-improvement-report-p2-core.md#item-20) | 仅 /settings 命令 | 小 | — | -| **P2** | 终端主题检测 [↓](./qwen-code-improvement-report-p2-core.md#item-30) — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | -| **P2** | 自动后台化 Agent [↓](./qwen-code-improvement-report-p2-core.md#item-31) — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | +| **P2** | 终端主题检测 — OSC 11 查询 dark/light + COLORFGBG 环境变量回退 [↓](./qwen-code-improvement-report-p2-core.md#item-21) | 缺失 | 小 | — | +| **P2** | 自动后台化 Agent — 超过阈值自动转后台执行,不阻塞用户交互 [↓](./qwen-code-improvement-report-p2-core.md#item-22) | 需显式指定 | 小 | — | | **P2** | Denial Tracking — 连续权限拒绝自动回退到手动确认模式,防止静默阻塞 [↓](./qwen-code-improvement-report-p2-core.md#item-7) | 缺失 | 小 | — | | **P2** | [队列输入编辑](./input-queue-deep-dive.md) — 排队中的指令可通过方向键弹出到输入框重新编辑 [↓](./qwen-code-improvement-report-p2-core.md#item-23) | 缺失 | 小 | [PR#2871](https://github.com/QwenLM/qwen-code/pull/2871) | | **P2** | 状态栏紧凑布局 — 固定高度不伸缩,最大化终端内容区域 [↓](./qwen-code-improvement-report-p2-core.md#item-24) | Footer 占用偏高 | 小 | — | @@ -162,7 +162,7 @@ | **P2** | 统一设计系统组件库 — 12 个语义 UI 原语 + ThemeProvider [↓](./qwen-code-improvement-report-p2-stability.md#item-9) | 组件分散 | 中 | — | | **P2** | Markdown 表格终端渲染 — ANSI-aware + CJK-aware 列宽计算 [↓](./qwen-code-improvement-report-p2-stability.md#item-10) | CJK 列错位 | 小 | — | | **P2** | 屏幕阅读器无障碍支持 — Diff/Spinner/Progress 纯文本替代渲染 [↓](./qwen-code-improvement-report-p2-stability.md#item-11) | hook 存在但使用有限 | 小 | — | -| **P2** | 色觉无障碍主题 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | +| **P2** | 色觉无障碍主题 — daltonized 红绿→蓝橙 diff 色板 [↓](./qwen-code-improvement-report-p2-stability.md#item-12) | 无色觉主题 | 小 | — | | **P2** | 动画系统与卡顿状态检测 — shimmer 微光 + 30s 超时变红 [↓](./qwen-code-improvement-report-p2-stability.md#item-13) | 固定动画/无超时检测 | 小 | — | | **P2** | Agent 权限冒泡 — bubble 模式 + Leader 桥接 + 邮箱回退 [↓](./qwen-code-improvement-report-p2-stability.md#item-14) | 继承父级模式 | 中 | — | | **P2** | Agent 专属 MCP 服务器 — frontmatter mcpServers + 按需连接/清理 [↓](./qwen-code-improvement-report-p2-stability.md#item-15) | 共享全局 MCP | 小 | — | @@ -204,8 +204,8 @@ | **P2** | sandbox运行时集成 — seatbelt/bubblewrap/Docker + 文件/网络限制 [↓](./qwen-code-improvement-report-p2-stability.md#item-30) | 可选/非默认 | 大 | — | | **P2** | SSRF 防护 — 私有 IP 阻断 + IPv4-mapped + DNS rebinding 防护 [↓](./qwen-code-improvement-report-p2-stability.md#item-31) | 仅基础 isPrivateIp | 中 | — | | **P2** | WebFetch 域名allowlist — 130+ 预批准域名 + 路径段边界匹配 [↓](./qwen-code-improvement-report-p2-stability.md#item-32) | 无内置allowlist | 小 | — | -| **P2** | 子进程环境变量清洗 [↓](./qwen-code-improvement-report-p2-core.md#item-33) — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | -| **P2** | 工具输出 密钥扫描 [↓](./qwen-code-improvement-report-p2-core.md#item-32) — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | +| **P2** | 子进程环境变量清洗 — 30+ 敏感变量自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-33) | 继承完整环境 | 中 | — | +| **P2** | 工具输出 密钥扫描 — 50+ gitleaks 规则 + 写入阻断 [↓](./qwen-code-improvement-report-p2-stability.md#item-34) | 无扫描 | 中 | — | | **P2** | privilege escalation防护 — auto 模式 60+ 危险规则自动剥离 [↓](./qwen-code-improvement-report-p2-stability.md#item-35) | yolo 批准所有 | 中 | — | | **P3** | 动态状态栏 — 模型/工具可实时更新状态文本 [↓](./qwen-code-improvement-report-p3.md#item-1) | 仅静态 Footer | 小 | — | | **P3** | [上下文折叠](./context-compression-deep-dive.md) — History Snip(Claude Code 自身仅 scaffolding,未完整实现) [↓](./qwen-code-improvement-report-p3.md#item-2) | 缺失 | 大 | — |