diff --git a/docs/comparison/claude-code-vs-cursor.md b/docs/comparison/claude-code-vs-cursor.md index 92b21a14..b5bf1b7f 100644 --- a/docs/comparison/claude-code-vs-cursor.md +++ b/docs/comparison/claude-code-vs-cursor.md @@ -212,9 +212,9 @@ Cursor 编辑器界面 ``` - **MCP 协议**:标准化工具扩展,支持 GitHub / Jira / 数据库等 -- **Prompt Hooks**:PreToolUse / PostToolUse / Stop 钩子,自定义工作流 +- **Prompt Hooks(钩子 (Hook))**:PreToolUse / PostToolUse / Stop 钩子 (Hook),自定义工作流 - **自定义斜杠命令**:`.claude/commands/` 目录下定义项目命令 -- **13 个官方插件**:GitHub / Linear / Sentry 等 +- **13 个官方插件 (Plugin)**:GitHub / Linear / Sentry 等 ### Cursor @@ -346,9 +346,9 @@ $ claude "创建 PR" └── 网络:默认允许,可配置限制 ``` -- **文件系统沙箱**:限制代理访问的目录范围 +- **文件系统沙箱 (Sandbox)**:限制代理访问的目录范围 - **命令白名单**:精确控制可执行的 shell 命令 -- **Prompt Hooks**:PreToolUse 钩子可拦截危险操作 +- **Prompt Hooks(钩子 (Hook))**:PreToolUse 钩子 (Hook) 可拦截危险操作 - **网络控制**:可限制代理的网络访问范围 ### Cursor diff --git a/docs/comparison/context-compression-deep-dive.md b/docs/comparison/context-compression-deep-dive.md index 569bc79b..eb9dca80 100644 --- a/docs/comparison/context-compression-deep-dive.md +++ b/docs/comparison/context-compression-deep-dive.md @@ -1,6 +1,6 @@ -# 27. 上下文压缩算法深度对比 +# 27. 上下文压缩 (Context Compression) 算法深度对比 -> 上下文压缩决定了 AI 编程代理在长会话中的信息保留质量。不同 Agent 在触发阈值、摘要结构、验证步骤、失败处理和可定制性上差异明显。 +> 上下文压缩 (Context Compression) 决定了 AI 编程代理在长会话中的信息保留质量。不同 Agent 在触发阈值、摘要结构、验证步骤、失败处理和可定制性上差异明显。 > **说明**:本文混合使用 3 类证据——开源源码、二进制/官方文档、以及分叉关系推断。对闭源工具或分叉工具,若实现细节未在本仓库证据页中直接钉住,会显式标注“未公开 / 推断 / 待复核”。 @@ -40,9 +40,9 @@ > **阅读提示**:下面各节主要比较“压缩本体”;但实际长会话体验往往同样取决于这些外围机制是否足够强。 -### 研究背景:为什么上下文压缩仍然必要 +### 研究背景:为什么上下文压缩 (Context Compression) 仍然必要 -从近两年的论文与工程文章看,“上下文压缩”之所以仍是 Agent 设计中的核心问题,不是因为模型没有更大的 context window,而是因为**标称窗口大小**、**有效可用上下文**与**长任务稳定性**并不等价。 +从近两年的论文与工程文章看,"上下文压缩 (Context Compression)"之所以仍是 Agent 设计中的核心问题,不是因为模型没有更大的 context window,而是因为**标称窗口大小**、**有效可用上下文**与**长任务稳定性**并不等价。 - **长上下文不等于高质量利用**:`Lost in the Middle`(Liu et al., 2023)指出,模型在长上下文里对中间位置的信息利用明显弱于首尾位置;这意味着“尽量保留全部原始历史”不一定优于“保留更高信号的摘要或结构化状态” - **标称窗口不等于有效工作窗口**:`RULER`(Hsieh et al., 2024)强调,模型宣称支持的长上下文长度与其在复杂任务中的稳定可用上下文并不相同;随着长度和任务复杂度上升,真实可用窗口会缩水 @@ -107,7 +107,7 @@ - **双 LLM 验证**:Phase 4 用独立 LLM 调用批判性评估摘要完整性 - **膨胀检测**:压缩后 token 数反而更多时拒绝压缩 - **压缩前可介入**:仓库文档可确认 `PreCompress` Hook,说明外部扩展点主要位于压缩前;压缩后的质量回补更多依赖内部 Phase 4 Probe,而不是后置 Hook -- **与 checkpoint / rewind 协同**:Gemini 的长会话连续性不只靠摘要压缩,还靠 checkpoint 和 rewind 维持状态回退能力;`codebase_investigator` 子代理也能在压缩后补偿部分仓库结构感知 +- **与 checkpoint / rewind 协同**:Gemini 的长会话连续性不只靠摘要压缩,还靠 checkpoint 和 rewind 维持状态回退能力;`codebase_investigator` 子代理 (Subagent) 也能在压缩后补偿部分仓库结构感知 --- @@ -426,8 +426,8 @@ Anthropic 工程团队在长任务 harness 开发中发现:**模型在上下 | 技术 | 说明 | 对应工具实现 | |------|------|-----------| | **Compaction** | 原地摘要,保留架构决策/未解决 Bug/实现细节,丢弃冗余工具输出 | Claude Code 三层压缩、Gemini CLI 四阶段、Aider 递归分割、Kimi CLI SimpleCompaction、Qwen Code 四阶段(继承) | -| **结构化笔记**(Agentic Memory) | Agent 写外部笔记,需要时拉回。"以最小开销提供持久记忆" | Claude Code auto-memory、Gemini memory_manager | -| **子代理架构** | 委托给专用子代理,返回"浓缩摘要(通常 1,000-2,000 tokens)" | Claude Code Agent 工具、Gemini CLI 5 个子代理 | +| **结构化笔记**(Agentic Memory) | Agent 写外部笔记,需要时拉回。"以最小开销提供持久记忆 (Memory)" | Claude Code auto-memory、Gemini memory_manager | +| **子代理 (Subagent) 架构** | 委托给专用子代理 (Subagent),返回"浓缩摘要(通常 1,000-2,000 tokens)" | Claude Code Agent 工具、Gemini CLI 5 个子代理 (Subagent) | > **核心洞察**:"Context Anxiety 是模型主动逃避,Context Rot 是被动质量退化——前者可通过模型升级显著缓解(Opus 4.5 'largely removed' 此行为,但非完全消除),后者是 Transformer 架构的固有限制,只能通过上下文工程缓解。" @@ -507,7 +507,7 @@ if (message.summarizeMetadata) { ## 十一、工具定义膨胀:134K tokens 的教训(来源:[Anthropic Engineering Blog](https://www.anthropic.com/engineering/advanced-tool-use),2025-11-24) -上下文压缩不仅要处理对话历史——**工具定义本身就是上下文膨胀的主要来源**: +上下文压缩 (Context Compression) 不仅要处理对话历史——**工具定义本身就是上下文膨胀的主要来源**: > "At Anthropic, we've seen tool definitions consume 134K tokens before optimization." diff --git a/docs/comparison/input-queue-deep-dive.md b/docs/comparison/input-queue-deep-dive.md index f69ca36b..0f28dd04 100644 --- a/docs/comparison/input-queue-deep-dive.md +++ b/docs/comparison/input-queue-deep-dive.md @@ -223,18 +223,18 @@ export function popAllEditable(): { popped: QueuedCommand[]; newInput: string } } ``` -### 2.8 Early Input(启动阶段输入捕获) +### 2.8 Early Input(启动阶段输入捕获 (Early Input Capture)) -用户输入 `claude` 后立即开始打字——此时 REPL 尚未初始化。Early Input 机制在启动阶段原始模式捕获 stdin,REPL 就绪后注入输入框: +用户输入 `claude` 后立即开始打字——此时 REPL 尚未初始化。Early Input 机制在启动阶段原始模式 (Raw Mode) 捕获 stdin,REPL 就绪后注入输入框: ```typescript // 源码: utils/earlyInput.ts#L29-L60 export function startCapturingEarlyInput(): void { - process.stdin.setRawMode(true) // 原始模式 + process.stdin.setRawMode(true) // 原始模式 (Raw Mode) readableHandler = () => { let chunk = process.stdin.read() while (chunk !== null) { - processChunk(chunk) // 逐字符处理:Ctrl+C 退出、退格删除、转义序列忽略 + processChunk(chunk) // 逐字符处理:Ctrl+C 退出、退格删除、转义序列 (Escape Sequence) 忽略 chunk = process.stdin.read() } } @@ -404,7 +404,7 @@ abort(): void { // 3. 立即终止 | 场景 | Claude Code | Qwen Code | |------|------------|-----------| | Agent 执行中输入 | ✅ 输入框始终可用 | ✅ stdin 不阻塞 | -| 输入立即可见 | ✅ 队列在 UI 中渲染 | ❌ 无队列可视化 | +| 输入立即可见 | ✅ 队列在 UI 中渲染 (Rendering) | ❌ 无队列可视化 | | 可编辑已排队输入 | ✅ Esc 弹出到输入框 | ❌ 入队后不可编辑 | | 多条排队 | ✅ 按优先级排序 | ✅ FIFO 顺序 | | 自动执行下一轮 | ✅ useQueueProcessor Hook | ✅ runLoop while 循环 | @@ -575,7 +575,7 @@ Round 开始 → [API→工具→API→工具→...→完成] → dequeue → Ro ### 6.1 可视化反馈 -Claude Code 的队列在 prompt 下方实时渲染,用户**看得到**自己的输入已被排队。Qwen Code 无队列可视化,用户不确定输入是否生效。 +Claude Code 的队列在 prompt 下方实时渲染 (Rendering),用户**看得到**自己的输入已被排队。Qwen Code 无队列可视化,用户不确定输入是否生效。 ### 6.2 中断恢复 diff --git a/docs/comparison/loop-schedule.md b/docs/comparison/loop-schedule.md index e1219234..12754354 100644 --- a/docs/comparison/loop-schedule.md +++ b/docs/comparison/loop-schedule.md @@ -212,7 +212,7 @@ codex cloud diff # 查看 diff | 维度 | Claude Code `/schedule` | Goose `goose schedule` | |------|------------------------|----------------------| -| 执行位置 | Anthropic 云端(CCR) | **本地守护进程** | +| 执行位置 | Anthropic 云端(CCR) | **本地守护进程 (Daemon)** | | 定时 | cron 表达式 | cron 表达式(6 位,含秒) | | 任务来源 | 自然语言提示 | **Recipe(YAML 任务模板)** | | 管理命令 | create/list/update/run | add/list/sessions/run-now/remove | @@ -305,7 +305,7 @@ Shift+Tab 切换到 Autopilot 模式 |------|---------|---------| | **本地循环**(Claude Code `/loop`) | 开发时的实时监控 | 依赖终端保持打开 | | **远程调度**(Claude Code `/schedule`) | CI/CD、夜间任务 | 需要云端基础设施 | -| **本地 cron 调度**(Goose `schedule`) | 定期本地任务 | 依赖本地守护进程 | +| **本地 cron 调度**(Goose `schedule`) | 定期本地任务 | 依赖本地守护进程 (Daemon) | | **一次性远程**(Codex `cloud exec`) | 计算密集型任务 | 无持续自动化 | | **文件监视**(Aider `--watch-files`) | IDE 内 AI 编程 | 需文件内 AI 注释 | | **持续执行**(Copilot Autopilot) | 复杂单次任务 | 非循环 | @@ -324,12 +324,12 @@ Claude Code 通过 `/tasks` 命令管理循环任务,复用了其 Task 工具 实现远程调度需要: - 云端执行环境(CCR) -- OAuth 令牌管理(in-process,不暴露到 shell) -- MCP Connector 远程桥接 +- OAuth 令牌 (Token) 管理(in-process,不暴露到 shell) +- MCP Connector 远程桥接 (Bridge) - Cron 表达式解析和调度引擎 - API 端点(`/v1/code/triggers/*`) -这需要整个云端基础设施的支持,解释了为什么只有 Anthropic(Claude Code)和 OpenAI(Codex CLI)提供了云端远程执行能力。Goose 采用了不同路径——本地 cron 调度,无需云端基础设施,但依赖本地守护进程运行。 +这需要整个云端基础设施的支持,解释了为什么只有 Anthropic(Claude Code)和 OpenAI(Codex CLI)提供了云端远程执行能力。Goose 采用了不同路径——本地 cron 调度,无需云端基础设施,但依赖本地守护进程 (Daemon) 运行。 --- diff --git a/docs/comparison/model-routing.md b/docs/comparison/model-routing.md index 96c3911f..a11dbc98 100644 --- a/docs/comparison/model-routing.md +++ b/docs/comparison/model-routing.md @@ -1,6 +1,6 @@ -# 26. 模型路由与自动选择:跨 Agent 深度对比 +# 26. 模型路由 (Model Routing) 与自动选择:跨 Agent 深度对比 -> 模型路由是 AI 编程代理的核心基础设施——决定每次请求使用哪个模型。从"用户手动切换"到"ML 分类器自动路由",各工具的实现跨度极大。 +> 模型路由 (Model Routing) 是 AI 编程代理的核心基础设施——决定每次请求使用哪个模型。从"用户手动切换"到"ML 分类器自动路由",各工具的实现跨度极大。 ## 总览 @@ -188,16 +188,16 @@ claude -p "fix the bug" --fallback-model haiku ``` - **触发条件**:默认模型 API 过载(overloaded) -- **遥测事件**:`tengu_api_opus_fallback_triggered` +- **遥测 (Telemetry) 事件**:`tengu_api_opus_fallback_triggered` - **限制**:仅 `--print` 模式,交互模式无自动 Fallback - **锁定生态**:仅 Anthropic 模型,无法切换到 OpenAI/Google -### 内部模型路由 +### 内部模型路由 (Model Routing) Claude Code 的 Skill 系统有隐式模型选择: -- `/review` 插件:Haiku(前置检查)→ Sonnet(变更摘要/合规审计)→ Opus(Bug 扫描/安全分析) -- 子代理(Agent 工具):可指定 `model: "haiku"` 或 `"sonnet"` 或 `"opus"` -- 但这是**插件级别的硬编码**,非通用路由系统 +- `/review` 插件 (Plugin):Haiku(前置检查)→ Sonnet(变更摘要/合规审计)→ Opus(Bug 扫描/安全分析) +- 子代理 (Subagent)(Agent 工具):可指定 `model: "haiku"` 或 `"sonnet"` 或 `"opus"` +- 但这是**插件 (Plugin) 级别的硬编码**,非通用路由系统 --- diff --git a/docs/comparison/privacy-telemetry.md b/docs/comparison/privacy-telemetry.md index 0a7c2447..b802f3d5 100644 --- a/docs/comparison/privacy-telemetry.md +++ b/docs/comparison/privacy-telemetry.md @@ -1,8 +1,8 @@ -# 3. 隐私与遥测对比 +# 3. 隐私与遥测 (Telemetry) 对比 > 各 CLI Agent 的数据采集、安全监控和隐私控制对比。高频变化的验证日期和证据状态请结合 [`../data/CHANGELOG.md`](../data/CHANGELOG.md) 与 [`../evidence-index.md`](../evidence-index.md) 一起查看。 -## 遥测系统对比 +## 遥测 (Telemetry) 系统对比 > 本表保留能力边界与采集类型。若默认状态或证据完备度发生变化,请同步更新 `docs/evidence-index.md` 与 `docs/data/CHANGELOG.md`。 diff --git a/docs/comparison/qwen-code-improvement-report.md b/docs/comparison/qwen-code-improvement-report.md index 2ba85880..96439159 100644 --- a/docs/comparison/qwen-code-improvement-report.md +++ b/docs/comparison/qwen-code-improvement-report.md @@ -1,6 +1,10 @@ # Qwen Code 改进建议报告 -> 基于对 Claude Code(leaked 源码,56 个顶层模块,~1800 文件)与 Qwen Code(开源源码,~500 文件)的系统性源码对比分析。 +> 基于对 Claude Code(源码分析,56 个顶层模块,~1800 文件)与 Qwen Code(开源源码,~500 文件)的系统性源码对比分析。 +> +> 如需查阅源码,可参考本地仓库(不在本文档库中): +> - Claude Code: `../claude-code/`(源码快照) +> - Qwen Code: `../qwen-code/` ## 一、Claude Code 功能模块清单 @@ -13,16 +17,16 @@ | `hooks/` | 85 项 | React hooks 系统 | | `tasks/` | 9 项 | 任务系统(LocalAgent/RemoteAgent/Dream/Teammate 等) | | `state/` | 6 项 | 全局状态管理 | -| `bridge/` | 31 项 | REPL 远程桥接 | +| `bridge/` | 31 项 | REPL 远程桥接 (Bridge) | | `utils/` | 大量 | 工具函数库 | | `context/` | 9 项 | 上下文管理 | -| `memdir/` | 8 项 | 记忆目录/检索 | +| `memdir/` | 8 项 | 记忆 (Memory) 目录/检索 | | `coordinator/` | 1 项 | 协调器模式 | -| `plugins/` | 2 项 | 插件系统 | -| `services/contextCollapse/` | 多文件 | 上下文折叠(History Snip) | -| `services/autoDream/` | 4 文件 | 自动记忆整理 | -| `services/PromptSuggestion/` | 2 文件 | 预测建议 + 投机执行 | -| `services/SessionMemory/` | 3 文件 | 会话记忆系统 | +| `plugins/` | 2 项 | 插件 (Plugin) 系统 | +| `services/contextCollapse/` | 多文件 | 上下文折叠 (Context Collapse / History Snip) | +| `services/autoDream/` | 4 文件 | 自动记忆 (Memory) 整理 | +| `services/PromptSuggestion/` | 2 文件 | 预测建议 + 投机执行 (Speculation) | +| `services/SessionMemory/` | 3 文件 | 会话记忆 (Session Memory) 系统 | | `services/compact/` | 11 文件 | 多层压缩策略 | | `services/lsp/` | 7 文件 | LSP 客户端管理 | | `services/mcp/` | 23 文件 | MCP 服务器管理 | @@ -31,58 +35,69 @@ ## 二、Qwen Code 改进建议矩阵 -| 优先级 | 改进点 | Claude Code 实现 | Qwen Code 现状 | 实现难度 | 用户价值 | 建议方案 | -|--------|--------|------------------|----------------|----------|----------|----------| -| **P0** | 多层上下文压缩策略 | 4 层:microCompact, autoCompact, reactiveCompact, sessionMemoryCompact | 仅单一 ChatCompressionService,基于固定 token 阈值 | 中 | 高 | 引入 micro-compact(turn 级)+ session-memory compact 分层策略 | -| **P0** | Fork 子代理(继承上下文) | forkSubagent.ts 支持隐式 fork,子代理继承父对话上下文 + 系统 prompt | Agent 工具仅支持预定义的 subagent_type,无法 fork 当前会话上下文 | 中 | 高 | 实现 forkSubagent 机制,支持 `subagent_type` 可选时的上下文继承 | -| **P1** | 投机执行(Speculation)系统 | speculation.ts 实现 overlay-fs + copy-on-write,在用户确认前预执行只读工具 | 已有 speculation.ts 和 overlayFs.ts 骨架,但功能不完整,与 followup 耦合度低 | 小 | 高 | 完善 speculation 的 overlay-fs 隔离层,增加 copy-overlay-to-main 机制 | -| **P1** | 会话记忆系统(Session Memory) | SessionMemory 服务 + memdir 实现跨 session 记忆提取与检索 | 仅有 memoryTool.ts 的简单笔记功能,无跨 session 记忆 | 大 | 高 | 实现 SessionMemory 服务 + 记忆提取 hook + 记忆检索工具 | -| **P1** | Auto Dream(自动记忆整理) | autoDream.ts 基于时间门控 + session 数量门控触发 forked agent 整理 | 无对应功能 | 中 | 高 | 实现基于 GrowthBook 门控的自动记忆整理,后台 fork agent 执行 | -| **P1** | 上下文折叠(Context Collapse/History Snip) | contextCollapse 服务实现 span 级上下文摘要 + staging,feature-gated | 无对应功能 | 大 | 中 | 引入 History Snip 机制,对早期对话 span 进行摘要压缩 | -| **P1** | 工具池动态发现(Tool Search) | ToolSearchTool 支持关键词搜索和 `select:` 直接选择 deferred 工具 | 无对应工具,工具选择完全依赖模型 | 小 | 中 | 实现 ToolSearchTool,支持 deferred 工具的延迟加载和搜索 | -| **P2** | 并行工具调用优化 | 最大并发度可配置(CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY,默认 10),基于 `isConcurrencySafe` 分区 | 已有 CONCURRENCY_SAFE_KINDS 分区和并行批处理,但无并发度上限控制 | 小 | 中 | 增加 `QWEN_MAX_TOOL_CONCURRENCY` 环境变量控制并发度上限 | -| **P2** | 计划模式 Interview Phase | EnterPlanMode 支持 interview 阶段,分离探索和规划 | exitPlanMode 工具存在,但无 interview 阶段 | 中 | 中 | 实现 plan_mode 附件系统,支持 interview 阶段的详细工作流 | -| **P2** | Brief 工具(异步消息) | BriefTool 支持向用户发送异步消息(含附件),proactive status | 无对应工具,Agent 只能通过工具结果与用户通信 | 中 | 中 | 实现 BriefTool,支持 agent 向用户发送带附件的异步消息 | -| **P2** | SendMessage 工具(多代理通信) | SendMessageTool 支持队友间通信、shutdown 请求、plan approval | 无跨代理通信机制 | 中 | 中 | 实现代理间消息传递机制,支持 arena 模式下的通信 | -| **P2** | 文件索引(File Index) | FileIndex 实现 fzf 风格模糊文件搜索,支持异步增量索引 | 依赖 rg/glob,无模糊搜索能力 | 中 | 中 | 实现纯 TS 文件索引器(nucleo 风格),提供模糊文件搜索工具 | -| **P2** | 配置工具(Config Tool) | ConfigTool 支持 get/set 设置(主题、模型、权限等),带 schema 验证 | 设置通过 /settings 命令,无工具化访问 | 小 | 中 | 实现 ConfigTool,支持模型通过工具读写设置 | -| **P2** | 自动后台化 Agent | getAutoBackgroundMs() 基于 GrowthBook 门控自动后台化长时 agent | agent 的 run_in_background 需显式指定 | 小 | 中 | 增加自动后台化阈值,超时自动转后台 | -| **P3** | 安全审查命令(/security-review) | 基于 frontmatter 模板的安全审查命令,聚焦漏洞检测 | 无对应命令 | 小 | 低 | 实现 /security-review 命令,基于 git diff 的安全扫描 | -| **P3** | Ultraplan(远程计划探索) | /ultraplan 启动远程 CCR 会话,使用更强模型进行深度规划 | 无对应功能 | 大 | 低 | 依赖远程执行基础设施,暂不推荐 | -| **P3** | 顾问模型(Advisor Model) | /advisor 命令配置副模型提供建议 | 无对应功能 | 中 | 低 | 需多模型同时调用能力,架构改动大 | -| **P3** | Vim 模式完整实现 | motions.ts, operators.ts, textObjects.ts, transitions.ts 完整实现 | 已有 vim.ts 基础实现 | 中 | 低 | 完善 Vim keybinding,补充 text objects 和 operators | -| **P3** | 语音模式 | voice/ 目录 + voice hooks + STT 流式处理 | 无对应功能 | 大 | 低 | 需音频采集 + STT 基础设施 | -| **P3** | 插件市场 | thinkback 等插件可从市场安装,带前端 UI | 无插件市场 | 大 | 低 | 需插件发现、安装、版本管理基础设施 | +| 优先级 | 改进点 | Qwen Code 现状 | 难度 | 进展 | +|:------:|--------|----------------|:----:|------| +| **P0** | Mid-Turn Queue Drain(工具批次间注入用户输入) | 推理循环内无队列检查 | 中 | PR [#2854](https://github.com/QwenLM/qwen-code/pull/2854) open | +| **P0** | 多层上下文压缩(4 层 vs 单一 70% 阈值) | 仅 ChatCompressionService | 中 | — | +| **P0** | Fork 子代理(隐式 fork + 上下文继承 + prompt cache 共享) | 仅预定义 subagent_type | 中 | — | +| **P1** | Speculation 默认启用 | v0.15.0 已实现,默认关闭 | 小 | PR [#2525](https://github.com/QwenLM/qwen-code/pull/2525) merged | +| **P1** | 会话记忆(SessionMemory + memdir 跨 session 检索) | 仅简单笔记工具 | 大 | — | +| **P1** | Auto Dream(自动记忆整理,24h + 5 session 门控) | 缺失 | 中 | — | +| **P1** | 上下文折叠(History Snip,span 级摘要) | 缺失 | 大 | — | +| **P1** | 工具动态发现(ToolSearchTool,延迟加载 + 搜索) | 缺失 | 小 | — | +| **P1** | 智能工具并行(Kind-based Batching,默认 10 并发) | Agent 并发 / 其他顺序 | 小 | PR [#2864](https://github.com/QwenLM/qwen-code/pull/2864) open | +| **P1** | 启动优化(API Preconnect + Early Input Capture) | 完全缺失 | 小 | — | +| **P1** | 指令条件规则(frontmatter `paths:` + 惰加载) | 无 frontmatter / 条件加载 | 中 | — | +| **P2** | Shell 安全增强(25+ 检查 vs AST-only 读写分类) | 不覆盖 IFS/Unicode/Zsh | 中 | — | +| **P2** | MDM 企业策略(plist + Registry + 远程 API) | 无 OS 级策略 | 大 | — | +| **P2** | API 实时 Token 计数(vs 静态 82 模式匹配) | 静态模式匹配 | 中 | — | +| **P2** | Plan 模式 Interview Phase | 无 interview 阶段 | 中 | — | +| **P2** | BriefTool(异步消息 + 附件) | 缺失 | 中 | — | +| **P2** | SendMessageTool(多代理通信) | 缺失 | 中 | — | +| **P2** | FileIndex(fzf 风格模糊搜索) | 依赖 rg/glob | 中 | — | +| **P2** | ConfigTool(工具化设置读写) | 仅 /settings 命令 | 小 | — | +| **P2** | 自动后台化 Agent(超时转后台) | 需显式指定 | 小 | — | +| **P3** | /security-review 安全审查命令 | 缺失 | 小 | — | +| **P3** | Ultraplan 远程计划探索 | 缺失 | 大 | — | +| **P3** | Advisor 顾问模型 | 缺失 | 中 | — | +| **P3** | Vim 完整实现(motions/operators/textObjects) | 基础 vim.ts | 中 | — | +| **P3** | 语音模式 | 缺失 | 大 | — | +| **P3** | 插件市场 | 缺失 | 大 | — | + +> 详细的 Claude Code 实现机制和建议方案见下文 Top 5 详细说明及各 [Deep-Dive 文章](#五相关-deep-dive-文章)。 ## 三、Top 5 改进点详细说明 -### 1. 多层上下文压缩策略(P0) +### 1. 多层上下文压缩 (Context Compression) 策略(P0) **Claude Code 实现**: - `services/compact/microCompact.ts` — turn 级微压缩,移除冗余工具结果 - `services/compact/autoCompact.ts` — 基于 token 阈值的自动压缩 -- `services/compact/reactiveCompact.ts` — 响应式压缩(feature-gated) -- `services/compact/sessionMemoryCompact.ts` — 基于会话记忆的压缩,保留关键上下文 +- `services/compact/apiMicrocompact.ts` — API 原生上下文管理(`clear_tool_uses` / `clear_thinking`) +- `services/compact/sessionMemoryCompact.ts` — 基于会话记忆 (Memory) 的压缩,保留关键上下文 - `services/compact/postCompactCleanup.ts` — 压缩后清理 - `services/compact/grouping.ts` — 消息分组优化 **源码引用**: -- `../claude-code-leaked/services/compact/autoCompact.ts` — 自动压缩触发逻辑 -- `../claude-code-leaked/services/compact/sessionMemoryCompact.ts` — 记忆感知压缩 -- `../claude-code-leaked/services/compact/compact.ts` — 主压缩引擎(1706 行) +- 源码: `services/compact/autoCompact.ts` +- 源码: `services/compact/sessionMemoryCompact.ts` +- 源码: `services/compact/compact.ts`(1705 行) **Qwen Code 现状**: -- 仅有 `packages/core/src/services/chatCompressionService.ts`(369 行),基于固定 token 阈值(70%)的单一压缩策略 -- 无 micro-compact、无 memory-aware compact、无 reactive compact +- 源码: `packages/core/src/services/chatCompressionService.ts`(369 行),基于固定 token 阈值(70%)的单一压缩策略 +- 无 micro-compact、无 memory-aware compact、无 API 原生上下文管理 + +**相关文章**: +- [上下文压缩深度对比](./context-compression-deep-dive.md) **建议方案**: 1. 实现 micro-compact:在每个 turn 结束后,自动裁剪冗余的工具结果(如大文件读取的截断部分) -2. 实现 session-memory compact:压缩时保留已提取的会话记忆,而非简单丢弃 +2. 实现 session-memory compact:压缩时保留已提取的会话记忆 (Memory),而非简单丢弃 3. 引入多级压缩阈值(而非单一 70%),根据模型 token 限制动态调整 --- -### 2. Fork 子代理(P0) +### 2. Fork 子代理 (Subagent)(P0) **Claude Code 实现**: - `tools/AgentTool/forkSubagent.ts` — fork 机制核心 @@ -92,15 +107,19 @@ - prompt cache 优化:所有 fork 子代理产生字节一致的 API 请求前缀 **源码引用**: -- `../claude-code-leaked/tools/AgentTool/forkSubagent.ts` — fork 逻辑(211 行) -- `../claude-code-leaked/tools/AgentTool/AgentTool.tsx` — Agent 工具主逻辑(1398 行) -- `../claude-code-leaked/tools/AgentTool/runAgent.ts` — agent 执行(974 行) +- 源码: `tools/AgentTool/forkSubagent.ts`(210 行) +- 源码: `tools/AgentTool/AgentTool.tsx`(1397 行) +- 源码: `tools/AgentTool/runAgent.ts`(973 行) **Qwen Code 现状**: -- `packages/core/src/tools/agent.ts` — Agent 工具存在,但必须显式指定 `subagent_type` -- `packages/core/src/subagents/` — 子代理管理器,但仅支持预定义类型 +- 源码: `packages/core/src/tools/agent.ts` — Agent 工具存在,但必须显式指定 `subagent_type` +- 源码: `packages/core/src/subagents/` — 子代理管理器,但仅支持预定义类型 - 无法 fork 当前会话上下文,无法继承对话历史 +**相关文章**: +- [Fork 子代理 Deep-Dive](./fork-subagent-deep-dive.md) +- [Claude Code 多代理系统](../tools/claude-code/09-multi-agent.md) + **建议方案**: 1. 在 Agent 工具 schema 中将 `subagent_type` 改为可选 2. 实现 fork 消息构建逻辑:从当前对话历史构建子代理上下文 @@ -109,75 +128,89 @@ --- -### 3. 投机执行系统完善(P1) +### 3. 投机执行 (Speculation) 系统完善(P1) **Claude Code 实现**: -- `services/PromptSuggestion/speculation.ts` — 992 行完整投机执行引擎 +- `services/PromptSuggestion/speculation.ts` — 991 行完整投机执行 (Speculation) 引擎 - 使用 overlay-fs 实现 copy-on-write 文件隔离 - 写操作写入 overlay 目录,用户确认后 copy-overlay-to-main - 自动检测 write tools(Edit/Write/NotebookEdit)并拒绝投机 - 与 PromptSuggestion 深度集成:suggestion 展示时自动启动投机 **源码引用**: -- `../claude-code-leaked/services/PromptSuggestion/speculation.ts` — 投机执行引擎 -- `../claude-code-leaked/services/PromptSuggestion/promptSuggestion.ts` — 建议生成器 +- 源码: `services/PromptSuggestion/speculation.ts`(991 行) +- 源码: `services/PromptSuggestion/promptSuggestion.ts` **Qwen Code 现状**: -- `packages/core/src/followup/speculation.ts` — 564 行,有骨架但功能不完整 -- `packages/core/src/followup/overlayFs.ts` — overlay 文件系统存在 -- `packages/core/src/followup/suggestionGenerator.ts` — 建议生成器(368 行) -- 缺少:overlay 到主文件系统的复制机制、投机边界检测、write tool 过滤 +- 源码: `packages/core/src/followup/speculation.ts`(563 行)— v0.15.0 已实现完整系统 +- 源码: `packages/core/src/followup/overlayFs.ts`(140 行)— Copy-on-Write overlay 文件系统 +- 源码: `packages/core/src/followup/speculationToolGate.ts`(146 行)— 工具安全分类(safe/write/boundary/unknown) +- 源码: `packages/core/src/followup/suggestionGenerator.ts`(367 行)— 建议生成 + 12 条过滤规则 +- 已实现 `acceptSpeculation()` + `generatePipelinedSuggestion()` + 边界检测 +- **当前限制**:`enableSpeculation` 默认关闭,需用户手动开启 + +**相关文章**: +- [Claude Code 提示建议](../tools/claude-code/10-prompt-suggestions.md) +- [启动阶段优化深度对比](./startup-optimization-deep-dive.md) +- [输入队列深度对比](./input-queue-deep-dive.md) **建议方案**: -1. 完善 `speculation.ts` 的 write tool 过滤(SAFE_READ_ONLY_TOOLS 白名单) -2. 实现 `acceptSpeculation()` 函数,将 overlay 变更应用到主文件系统 -3. 实现投机边界检测(遇到非安全工具或 user input 时停止) -4. 增加投机结果的 pipelined suggestion 生成(完成后立即展示下一个建议) +1. 将 `enableSpeculation` 默认值改为 `true`(当前为 `false`) +2. 扩大 speculationToolGate 的 safe 工具列表覆盖度 +3. 增加 speculation 完成率的遥测追踪,评估 boundary 命中频率 +4. 优化 `MAX_SPECULATION_TURNS`(当前 20)的动态调节策略 --- -### 4. 会话记忆系统(P1) +### 4. 会话记忆 (Session Memory) 系统(P1) **Claude Code 实现**: -- `services/SessionMemory/sessionMemory.ts` — 会话记忆管理 -- `services/SessionMemory/sessionMemoryUtils.ts` — 记忆提取和检索 -- `services/SessionMemory/prompts.ts` — 记忆提取 prompt -- `memdir/` 目录(8 文件)— 记忆目录和检索系统 -- `memdir/findRelevantMemories.ts` — 基于相关性的记忆检索 -- 跨 session 持久化:记忆在 session 结束后自动提取并存储 +- `services/SessionMemory/sessionMemory.ts` — 会话记忆 (Memory) 管理 +- `services/SessionMemory/sessionMemoryUtils.ts` — 记忆 (Memory) 提取和检索 +- `services/SessionMemory/prompts.ts` — 记忆 (Memory) 提取 prompt +- `memdir/` 目录(8 文件)— 记忆 (Memory) 目录和检索系统 +- `memdir/findRelevantMemories.ts` — 基于相关性的记忆 (Memory) 检索 +- 跨 session 持久化:记忆 (Memory) 在 session 结束后自动提取并存储 **源码引用**: -- `../claude-code-leaked/services/SessionMemory/sessionMemory.ts` -- `../claude-code-leaked/memdir/findRelevantMemories.ts` -- `../claude-code-leaked/memdir/memdir.ts` +- 源码: `services/SessionMemory/sessionMemory.ts` +- 源码: `memdir/findRelevantMemories.ts` +- 源码: `memdir/memdir.ts` **Qwen Code 现状**: -- `packages/core/src/tools/memoryTool.ts` — 仅支持简单的笔记读写 -- 无跨 session 记忆 -- 无记忆提取/检索机制 -- 无记忆生命周期管理 +- 源码: `packages/core/src/tools/memoryTool.ts` — 仅支持简单的笔记读写 +- 无跨 session 记忆 (Memory) +- 无记忆 (Memory) 提取/检索机制 +- 无记忆 (Memory) 生命周期管理 + +**相关文章**: +- [记忆系统深度对比](./memory-system-deep-dive.md) **建议方案**: -1. 实现 SessionMemoryService:管理会话记忆的提取、存储和检索 -2. 实现记忆提取 hook:在 compact 或 session 结束时自动提取关键信息 -3. 实现记忆检索工具:在新 session 开始时检索相关记忆 -4. 记忆持久化到 `.qwen/` 目录,支持项目级和用户级记忆 +1. 实现 SessionMemoryService:管理会话记忆 (Memory) 的提取、存储和检索 +2. 实现记忆 (Memory) 提取 hook:在 compact 或 session 结束时自动提取关键信息 +3. 实现记忆 (Memory) 检索工具:在新 session 开始时检索相关记忆 (Memory) +4. 记忆 (Memory) 持久化到 `.qwen/` 目录,支持项目级和用户级记忆 (Memory) --- -### 5. Auto Dream 自动记忆整理(P1) +### 5. Auto Dream 自动记忆 (Memory) 整理(P1) **Claude Code 实现**: -- `services/autoDream/autoDream.ts` — 自动记忆整理引擎(325 行) +- `services/autoDream/autoDream.ts` — 自动记忆 (Memory) 整理引擎(325 行) - 双门控触发:时间门控(默认 24h)+ session 数量门控(默认 5 个 session) -- 使用 forked agent 在后台执行记忆整理 +- 使用 forked agent 在后台执行记忆 (Memory) 整理 - `services/autoDream/consolidationPrompt.ts` — 整理 prompt - `services/autoDream/consolidationLock.ts` — 防止多进程并发整理 **源码引用**: -- `../claude-code-leaked/services/autoDream/autoDream.ts` -- `../claude-code-leaked/services/autoDream/consolidationPrompt.ts` -- `../claude-code-leaked/services/autoDream/consolidationLock.ts` +- 源码: `services/autoDream/autoDream.ts`(324 行) +- 源码: `services/autoDream/consolidationPrompt.ts` +- 源码: `services/autoDream/consolidationLock.ts` + +**相关文章**: +- [记忆系统深度对比](./memory-system-deep-dive.md) +- [上下文压缩深度对比](./context-compression-deep-dive.md) **Qwen Code 现状**: - 完全缺失此功能 @@ -193,15 +226,38 @@ ## 四、架构差异总结 -| 维度 | Claude Code | Qwen Code | 差距评估 | -|------|-------------|-----------|----------| -| 压缩策略 | 4 层分层压缩 | 单一阈值压缩 | 显著落后 | -| 子代理 | 支持 fork + 上下文继承 | 仅预定义类型 | 显著落后 | -| 投机执行 | 完整 overlay-fs + cow | 有骨架不完整 | 中等差距 | -| 会话记忆 | SessionMemory + memdir | 简单笔记工具 | 显著落后 | -| 自动记忆整理 | Auto Dream | 无 | 缺失 | -| 上下文折叠 | History Snip | 无 | 缺失 | -| 工具发现 | ToolSearchTool | 无 | 缺失 | -| 并发控制 | 可配置上限(默认 10) | 无上限 | 小差距 | -| 多代理通信 | SendMessageTool | 无 | 缺失 | -| 文件索引 | FileIndex(fzf 风格) | 依赖 rg/glob | 中等差距 | +| 维度 | Claude Code | Qwen Code | 差距评估 | 进展 | +|------|-------------|-----------|----------|------| +| **Mid-Turn Queue Drain** | `query.ts` 工具批次间 drain | 无 | 显著落后 | PR [#2854](https://github.com/QwenLM/qwen-code/pull/2854) open | +| 压缩 (Compression) 策略 | 4 层分层压缩 | 单一阈值压缩 | 显著落后 | — | +| 子代理 (Subagent) | 支持 fork + 上下文继承 | 仅预定义类型 | 显著落后 | — | +| **智能工具并行** | Kind-based batching(默认 10 并发) | Agent 并发 / 其他顺序 | 中等差距 | PR [#2864](https://github.com/QwenLM/qwen-code/pull/2864) open | +| 投机执行 (Speculation) | 完整 overlay-fs + cow(991 行) | v0.15.0 已完整实现(563 行),默认关闭 | 小差距 | PR [#2525](https://github.com/QwenLM/qwen-code/pull/2525) merged | +| 启动优化 | API Preconnect + Early Input | 无 | 缺失 | — | +| CLAUDE.md 条件规则 | frontmatter `paths:` + 惰加载 | 无 | 中等差距 | — | +| 会话记忆 (Session Memory) | SessionMemory + memdir | 简单笔记工具 | 显著落后 | — | +| 自动记忆 (Memory) 整理 | Auto Dream | 无 | 缺失 | — | +| 上下文折叠 (Context Collapse) | History Snip | 无 | 缺失 | — | +| Shell 安全增强 | 25+ 检查 + tree-sitter | AST-only 读写分类 | 中等差距 | — | +| MDM 企业策略 | plist + Registry + 远程 API | 无 | 缺失 | — | +| Token 实时计数 | API 计数 + VCR 缓存 | 静态模式匹配 | 中等差距 | — | +| 工具发现 | ToolSearchTool | 无 | 缺失 | — | +| 多代理通信 | SendMessageTool | 无 | 缺失 | — | +| 文件索引 | FileIndex(fzf 风格) | 依赖 rg/glob | 中等差距 | — | + +## 五、相关 Deep-Dive 文章 + +| 改进领域 | 文章 | +|----------|------| +| Mid-Turn Queue Drain | [输入队列与中断机制](./input-queue-deep-dive.md) | +| 上下文压缩 | [上下文压缩算法](./context-compression-deep-dive.md) | +| Fork 子代理 | [Fork 子代理](./fork-subagent-deep-dive.md) | +| 智能工具并行 | [工具并行执行](./tool-parallelism-deep-dive.md) | +| Shell 安全 | [Shell 安全模型](./shell-security-deep-dive.md) | +| 启动优化 | [启动阶段优化](./startup-optimization-deep-dive.md) | +| 指令文件加载 | [指令文件加载](./instruction-loading-deep-dive.md) | +| MDM 企业配置 | [MDM 企业配置管理](./mdm-enterprise-deep-dive.md) | +| 遥测架构 | [遥测架构](./telemetry-architecture-deep-dive.md) | +| Token 估算 | [Token 估算与 Thinking](./token-estimation-deep-dive.md) | +| Speculation | [Prompt Suggestions](../tools/claude-code/10-prompt-suggestions.md) | +| 会话记忆 | [记忆系统](./memory-system-deep-dive.md) | diff --git a/docs/comparison/startup-optimization-deep-dive.md b/docs/comparison/startup-optimization-deep-dive.md index b950f2f1..0c766cd9 100644 --- a/docs/comparison/startup-optimization-deep-dive.md +++ b/docs/comparison/startup-optimization-deep-dive.md @@ -137,13 +137,13 @@ Claude Code 曾有两个调用点,后来删除了一个: ``` 启动早期 → startCapturingEarlyInput() - ├─ process.stdin.setRawMode(true) # 原始模式 + ├─ process.stdin.setRawMode(true) # 原始模式 (Raw Mode) ├─ 监听 'readable' 事件 # 逐字符捕获 └─ processChunk() 逐字符处理: ├─ Ctrl+C (code 3) → process.exit(130) ├─ Ctrl+D (code 4) → 停止捕获 ├─ Backspace (8/127) → 删除最后一个 grapheme cluster - ├─ ESC (27) → 跳过转义序列(方向键/功能键) + ├─ ESC (27) → 跳过转义序列 (Escape Sequence)(方向键/功能键) ├─ CR (13) → 转换为 \n └─ 可打印字符 → 加入 earlyInputBuffer @@ -186,7 +186,7 @@ if (code === 127 || code === 8) { 这确保了 emoji(如 👨‍👩‍👧‍👦 由多个 code point 组成)按**视觉字符**为单位删除,而非按 code point。 -#### 转义序列跳过 +#### 转义序列 (Escape Sequence) 跳过 ```typescript // 源码: utils/earlyInput.ts#L103-L112 @@ -250,7 +250,7 @@ export function seedEarlyInput(text: string): void { Qwen Code 的启动流程(`gemini.tsx` 527 行分析): ``` -[加载 settings] → [加载配置] → [初始化 App] → [渲染 REPL] → [首次API调用: 完整握手] +[加载 settings] → [加载配置] → [初始化 App] → [渲染 (Rendering) REPL] → [首次API调用: 完整握手] ↑ 首次延迟无优化 ``` @@ -260,7 +260,7 @@ Qwen Code 的启动流程(`gemini.tsx` 527 行分析): Qwen Code **完全没有**对应机制: - 无 `setRawMode` 早期调用 - 无 stdin 缓冲区 -- 用户在 REPL 渲染前的打字**全部丢失** +- 用户在 REPL 渲染 (Rendering) 前的打字**全部丢失** 现有 `packages/cli/src/utils/readStdin.ts` 仅处理 **pipe 模式**的 stdin 读取,不处理 TTY 早期输入。 @@ -268,9 +268,9 @@ Qwen Code **完全没有**对应机制: | 指标 | Claude Code | Qwen Code | |------|-------------|-----------| -| API Preconnect | ✅ `init.ts` 中 fire-and-forget HEAD | ❌ 无 | -| Early Input | ✅ 启动时 raw mode 捕获 | ❌ 无 | -| 首次 API 延迟 | ~0ms(复用预连接) | 100-200ms(完整握手) | +| API Preconnect(预连接 (Preconnect)) | ✅ `init.ts` 中 fire-and-forget HEAD | ❌ 无 | +| Early Input(早期输入捕获 (Early Input Capture)) | ✅ 启动时 raw mode 捕获 | ❌ 无 | +| 首次 API 延迟 | ~0ms(复用预连接 (Preconnect)) | 100-200ms(完整握手) | | 启动期间打字 | ✅ 捕获并预填充 | ❌ 全部丢失 | --- @@ -350,4 +350,4 @@ await initializeApp(config) | Qwen Code CLI 入口 | `packages/cli/src/gemini.tsx` (527 行) | | Qwen Code Stdin 读取 | `packages/cli/src/utils/readStdin.ts` | -> **免责声明**: 以上分析基于 Claude Code leaked 源码和 Qwen Code 开源源码。Qwen Code 实现方案为建议,非官方实现。 +> **免责声明**: 以上分析基于 Claude Code 源码分析和 Qwen Code 开源源码。Qwen Code 实现方案为建议,非官方实现。 diff --git a/docs/comparison/telemetry-architecture-deep-dive.md b/docs/comparison/telemetry-architecture-deep-dive.md index f85467f4..8e8197ff 100644 --- a/docs/comparison/telemetry-architecture-deep-dive.md +++ b/docs/comparison/telemetry-architecture-deep-dive.md @@ -1,6 +1,6 @@ -# 遥测架构 Deep-Dive +# 遥测 (Telemetry) 架构 Deep-Dive -> AI Agent 收集什么数据、如何上报、用户如何控制?本文基于 Claude Code(v2.1.89 源码分析)和 Qwen Code(v0.15.0 开源)的源码分析,对比两者在遥测架构、事件体系和隐私控制方面的差异。 +> AI Agent 收集什么数据、如何上报、用户如何控制?本文基于 Claude Code(v2.1.89 源码分析)和 Qwen Code(v0.15.0 开源)的源码分析,对比两者在遥测 (Telemetry) 架构、事件体系和隐私控制方面的差异。 --- @@ -71,10 +71,10 @@ | 用户等待 | 输入等待时间 | | Speculation | 推测执行标记 | -### 2.3 采样与降级 +### 2.3 采样 (Sampling) 与降级 (Fallback) ```typescript -// 按事件采样: GrowthBook tengu_event_sampling_config(每事件 0-1 概率) +// 按事件采样 (Sampling): GrowthBook tengu_event_sampling_config(每事件 0-1 概率) // 第三方 Provider: 自动禁用分析(Bedrock/Vertex/Foundry) // 测试环境: NODE_ENV === 'test' 时禁用 // 隐私模式: isTelemetryDisabled() 检查 diff --git a/docs/comparison/telemetry-privacy-deep-dive.md b/docs/comparison/telemetry-privacy-deep-dive.md index e139571c..1627a55d 100644 --- a/docs/comparison/telemetry-privacy-deep-dive.md +++ b/docs/comparison/telemetry-privacy-deep-dive.md @@ -1,6 +1,6 @@ -# 37. 遥测与隐私实现深度对比 +# 37. 遥测 (Telemetry) 与隐私实现深度对比 -> 遥测数据采集是 AI 编程代理最敏感的话题。从"零遥测"到"782 个事件类型 + 硬件指纹 + Machine ID",各工具的隐私立场差异巨大。 +> 遥测 (Telemetry) 数据采集是 AI 编程代理最敏感的话题。从"零遥测 (Telemetry)"到"782 个事件类型 + 硬件指纹 + Machine ID",各工具的隐私立场差异巨大。 ## 隐私等级总览