diff --git a/README.md b/README.md index b742cc0c..2a7f3533 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ | Agent | 官方/常见说法 | 源码实际情况 | |------|-------------|-------------| | **Goose** | TypeScript | **Rust**(55k 行) | -| **OpenCode** | Go | **Go + TypeScript**(混合 Monorepo) | +| **OpenCode** | Go | **TypeScript**(Bun monorepo,v1.0+ 全面重写,Go→TS 渐进迁移完成) | | **Kimi CLI** | TypeScript | **Python**(68.8%) | | **Qwen Code** | 原创 | **Gemini CLI 分叉**(大幅增强) | @@ -79,10 +79,10 @@ | [Codex CLI](./docs/tools/codex-cli/) | OpenAI | Apache-2.0 | **68k** | TypeScript | 1 | 三平台 OS 沙箱,Cloud 远程执行 | | [Cline](./docs/tools/cline.md) | Cline | Apache-2.0 | **59k** | TypeScript | 48+ | VS Code 原生,Git Checkpoint | | [Aider](./docs/tools/aider/) | Paul Gauthier | GPL-3.0 | **42k** | Python | 100+ | 14 编辑格式,三槽位模型,/undo | -| [Goose](./docs/tools/goose.md) | Block | Apache-2.0 | **34k** | Rust | 58+ | MCP 原生,Recipe + Cron 调度 | +| [Goose](./docs/tools/goose/) | Block | Apache-2.0 | **34k** | Rust | 58+ | MCP 原生,11 Platform Extension,Recipe + Cron 调度 | | [Continue](./docs/tools/continue.md) | Continue | Apache-2.0 | **32k** | TypeScript | 60+ | PR Checks CI 审查,语义索引 | | [Warp](./docs/tools/warp.md) | Warp | 专有 | **26k** | Rust | 多种 | GPU 渲染终端,块结构输出 | -| [Qwen Code](./docs/tools/qwen-code.md) | 阿里云 | Apache-2.0 | **21k** | TypeScript | 6+ | 免费 1000 次/天,Arena 多模型竞争 | +| [Qwen Code](./docs/tools/qwen-code/) | 阿里云 | Apache-2.0 | **21k** | TypeScript | 6+ | 免费 1000 次/天,Arena 多模型竞争,41 命令 | | [SWE-agent](./docs/tools/swe-agent.md) | Princeton | MIT | **19k** | Python | 100+ | SWE-bench 评估,Docker 沙箱 | | [Copilot CLI](./docs/tools/copilot-cli/) | GitHub | 专有 | **10k** | Shell | 多种 | 67 GitHub 工具,增长 ↑240%/月 | | [Kimi CLI](./docs/tools/kimi-cli/) | 月之暗面 | Apache-2.0 | **7k** | Python | 6 | Wire 协议,D-Mail 时间回溯 | @@ -110,7 +110,7 @@ |------|-------|------| | **Rust** | Claude Code, Goose, Warp | 50ms 启动,内存最低 | | **TypeScript** | Gemini CLI, Qwen Code, Codex CLI, Cline, Continue | Ink/React TUI 成熟 | -| **Go + TS** | OpenCode | Go 后端 + SolidJS TUI | +| **Go + TS** | OpenCode | TypeScript(Bun)后端 + SolidJS TUI(v1.0 前 Go,已全面重写) | | **Python** | Aider, SWE-agent, OpenHands, Kimi CLI | LiteLLM 100+ 模型 | --- @@ -127,6 +127,8 @@ - **[Kimi CLI](./docs/tools/kimi-cli/)** — 3 篇(28 命令/Wire 协议) - **[Aider](./docs/tools/aider/)** — 3 篇(42 命令/PageRank RepoMap) - **[OpenCode](./docs/tools/opencode/)** — 3 篇(18 工具+7 代理/多客户端) +- **[Qwen Code](./docs/tools/qwen-code/)** — 4 篇(41 命令/16 工具/Arena+扩展系统) +- **[Goose](./docs/tools/goose/)** — 4 篇(MCP 原生架构/11 Platform Extension/Recipe) diff --git a/docs/comparison/features.md b/docs/comparison/features.md index d94ce34a..6c5353b6 100644 --- a/docs/comparison/features.md +++ b/docs/comparison/features.md @@ -186,8 +186,8 @@ | 能力 | Claude Code | Aider | Gemini CLI | Kimi CLI | Qwen Code | Copilot CLI | Codex CLI | Goose | OpenCode | |------|-------------|-------|-----------|----------|-----------|-------------|-----------|-------|---------| -| **命令总数** | ~79(含 Skill) | ~42 | ~39 | ~28 | 40 | 34 | 28 | 16 | Ctrl+K 面板 | -| **代码审查** | `/review` 插件 | — | `/code-review`(扩展) | — | — | `/review` | `@codex review` | — | — | +| **命令总数** | ~79(含 Skill) | ~42 | ~39 | ~28 | 41 | 34 | 28 | 16(斜杠)+ 15(CLI) | 23(TUI) | +| **代码审查** | `/review` 插件 | — | `/code-review`(扩展) | — | `/review`(Skill,4 代理并行) | `/review` | `@codex review` | — | — | | **模式切换** | — | `/code` `/architect` `/ask` | `/plan` | `/plan` `/yolo` | `/plan` | — | `--ask-for-approval` | — | `--agent` | | **模型切换** | `/model` | `/model` `/editor-model` `/weak-model` | `/model` | `/model` | `/model` | `/model` | `--model` | `--model` | — | | **上下文压缩** | `/compact` | `/clear` `/reset` | `/compress` | `/compact` | `/compact` | `/compact` | `/compact` | `/compact` | — | @@ -204,15 +204,16 @@ | **LSP 集成** | — | — | — | — | — | `/lsp` | — | — | — | | **费用查看** | `/cost` | `/tokens` | `/stats` | — | `/stats` | — | — | — | `stats` | | **反馈报告** | `/bug` | `/report` | `/bug` | `/feedback` | `/bug` | `/feedback` | — | — | — | -| **Vim 模式** | `/vim` | — | `/vim` | — | — | — | — | — | — | +| **Vim 模式** | `/vim` | — | `/vim` | — | `/vim` | — | — | — | — | **关键发现:** - **Aider** 命令最多(~42),文件/上下文管理和模式切换最细粒度 -- **Gemini CLI / Qwen Code / Kimi CLI** 命令体系接近(Gemini CLI 分叉谱系) +- **Gemini CLI / Qwen Code / Kimi CLI** 命令体系接近(Gemini CLI 分叉谱系),Qwen Code 新增 Arena/语言/洞察/扩展 4 个独有命令 - **Claude Code** 独有 `/review`(代码审查)和 `/remote-control`(远程控制) - **Copilot CLI** 34 命令 + 67 工具 + 3 内置代理,GitHub 生态深度集成 - **Codex CLI** 28 交互命令(官方文档验证)+ 15 CLI 子命令 + Rust 原生沙箱 -- **OpenCode** 使用 Ctrl+K 命令面板而非斜杠命令 +- **OpenCode** 使用 Ctrl+K 命令面板 + 23 个 TUI 斜杠命令 +- **Goose** 16 个交互式斜杠命令 + 15 个 CLI 命令(clap derive),MCP 原生架构 - **Qoder CLI** 19+ 交互命令 + 7 CLI 子命令 + Go 原生 43MB + Quest 模式 + Claude Code 兼容(`--with-claude-config`) ## 使用场景推荐 diff --git a/docs/tools/README.md b/docs/tools/README.md index 5e022bb0..51736461 100644 --- a/docs/tools/README.md +++ b/docs/tools/README.md @@ -11,8 +11,8 @@ | [Kimi CLI](./kimi-cli/) | 5 文件 | 概述/28 命令(双注册表)/架构+Wire 协议+18 工具 | | [Aider](./aider/) | 5 文件 | 概述/42 命令/架构+PageRank RepoMap+14 编辑格式 | | [OpenCode](./opencode/) | 5 文件 | 概述/18 工具+7 代理/多客户端架构+LSP | -| [Qwen Code](./qwen-code/) | 1 文件 | 证据文件(Gemini CLI 分叉 + 阿里云 RUM + Arena 模式) | -| [Goose](./goose/) | 1 文件 | 证据文件(MCP 原生 + PostHog + SecurityManager) | +| [Qwen Code](./qwen-code/) | 6 文件 | 概述/41 命令/架构(Gemini CLI 分叉)+16 工具/Arena+扩展系统 | +| [Goose](./goose/) | 5 文件 | 概述/16 斜杠命令+15 CLI 命令/MCP 原生架构/11 Platform Extension | ## 单文件 Agent(基础分析) diff --git a/docs/tools/goose/01-overview.md b/docs/tools/goose/01-overview.md new file mode 100644 index 00000000..c14b6c59 --- /dev/null +++ b/docs/tools/goose/01-overview.md @@ -0,0 +1,102 @@ +# 1. Goose 概述 + +**开发者:** Block(原 Square) +**许可证:** Apache-2.0 +**仓库:** [github.com/block/goose](https://github.com/block/goose) +**文档:** [block.github.io/goose](https://block.github.io/goose/docs/quickstart/) +**版本:** v1.28.0(源码: `ui/desktop/package.json`,`Cargo.toml` workspace version 1.0.0) +**最后更新:** 2026-03 + +> **免责声明**: 以下数据基于 2026-03-28 源码分析(commit `0ace570`),可能已过时。 +> Goose 已捐赠给 Linux Foundation Agentic AI Foundation (AAIF)。 + +## 概述 + +Goose 是 Block(原 Square)开发的开源 AI 代理框架,**完全用 Rust 编写**(核心 ~55k 行)。它支持 58+ LLM 提供商,基于 MCP(模型上下文协议)构建扩展系统,提供 CLI、Web、桌面(Electron)三种客户端。核心设计理念是 **MCP 原生**:所有工具通过 MCP 服务器提供,实现标准化的工具生态。 + +主要特点: +- **Rust 原生**:高性能单二进制分发,启动快、内存低 +- **MCP 原生架构**:所有工具通过 MCP 协议提供,标准化扩展 +- **58+ LLM 提供商**:业界最广泛的模型支持 +- **11 个 Platform Extension**:内置开发者工具(shell、edit、write、tree 等) +- **4 个 MCP 内置服务器**:autovisualiser、computercontroller、memory、tutorial +- **Recipe 系统**:YAML 定义的可复用任务模板 + 定时调度 +- **安全系统**:多层检查器管道(Pattern + ML + LLM 审查 + 重复检测) +- **Smart Approve**:LLM 辅助的智能权限判断 + +## 核心功能 + +### 基础能力 +- **Rust 原生性能**:单二进制分发,Tokio 异步运行时(源码: `crates/goose/`) +- **MCP 原生扩展**:7 种传输类型(Stdio、StreamableHttp、Builtin、Platform、Frontend、InlinePython、SSE[已废弃]) +- **58+ LLM 提供商**:Anthropic、OpenAI、Google、AWS Bedrock、Azure、Ollama 等 +- **多客户端**:CLI(`goose-cli`)、HTTP 服务器(`goose-server`,Axum)、Electron 桌面应用 +- **Recipe 系统**:YAML/JSON 定义任务模板,支持参数化、子 Recipe、deeplink +- **调度系统**:Cron 定时执行 Recipe(源码: `crates/goose-cli/src/commands/schedule.rs`) +- **ACP 协议**:Agent Client Protocol,桌面/IDE 集成标准 + +### 独特功能 +- **Platform Extension**:进程内直接访问代理上下文,无需 MCP 传输开销 +- **AdversaryInspector**:LLM 审查工具调用的对抗性(opt-in,`~/.config/goose/adversary.md`) +- **PermissionJudge**:LLM 自动判断工具调用只读/写入属性 +- **Recipe DeepLink**:`goose://` 协议触发 Recipe 执行 +- **Gateway**:外部平台集成(pair 命令配对) +- **Term 模式**:终端集成会话(`goose term`) +- **本地推理**:Whisper 语音、llama.cpp 本地模型(candle) + +## 安装 + +```bash +# Homebrew(推荐) +brew install block/tap/goose + +# Cargo +cargo install goose-cli + +# 或从 GitHub Release 下载 +# https://github.com/block/goose/releases + +# 启动交互式会话 +goose + +# 使用特定模型 +goose --model claude-opus-4 +``` + +## 四种运行模式 + +| 模式 | 行为 | 源码 | +|------|------|------| +| **Auto**(默认) | 自动批准所有工具调用 | `crates/goose/src/config/goose_mode.rs` | +| **Approve** | 每个工具调用都需确认 | 同上 | +| **SmartApprove**(推荐) | LLM 判断只读/写入,仅写入操作需确认 | `crates/goose/src/permission/permission_judge.rs` | +| **Chat** | 仅聊天,不执行工具 | 同上 | + +## 优势 + +1. **Rust 性能**:启动快、内存低、单二进制分发 +2. **提供商最多**:58+ LLM 提供商支持 +3. **MCP 原生**:所有扩展基于标准协议 +4. **Recipe 系统**:可复用任务模板 + 定时调度 +5. **安全设计**:环境变量白名单 + 对抗性检测 + ML 分类器 +6. **Apache-2.0**:企业友好许可(已捐赠 Linux Foundation) +7. **桌面应用**:Electron 跨平台 GUI + +## 劣势 + +1. **Rust 生态**:插件开发门槛高于 TypeScript/Python +2. **无 Git 原生集成**:依赖 shell 工具实现 Git 操作 +3. **文档不足**:相比代码能力,文档覆盖有限 +4. **复杂性**:功能丰富但学习曲线较陡 + +## 使用场景 + +- **最适合**:需要多提供商灵活性、MCP 生态用户、自动化 Recipe +- **适合**:企业部署(Rust 性能 + Apache 许可) +- **不太适合**:想要简单工具的用户、需要深度 Git 集成 + +## 资源链接 + +- [快速入门](https://block.github.io/goose/docs/quickstart/) +- [GitHub](https://github.com/block/goose) +- [Recipe 文档](https://block.github.io/goose/docs/recipes/) diff --git a/docs/tools/goose/02-commands.md b/docs/tools/goose/02-commands.md new file mode 100644 index 00000000..d51c140b --- /dev/null +++ b/docs/tools/goose/02-commands.md @@ -0,0 +1,113 @@ +# 2. Goose 命令系统 + +Goose CLI 使用 `clap` derive 宏定义命令。交互式会话中还有额外的斜杠命令。 + +> 源码: `crates/goose-cli/src/cli.rs`(clap 命令定义) +> 交互式命令: `crates/goose-cli/src/session/input.rs`(`handle_slash_command()`) + +## CLI 命令 + +### 顶层命令 + +| 命令 | 别名 | 用途 | 源码 | +|------|------|------|------| +| `configure` | — | 配置 goose 设置 | `commands/configure.rs` | +| `info` | — | 显示信息(`--verbose` 详情) | `commands/info.rs` | +| `mcp` | — | 运行内置 MCP 服务器 | — | +| `acp` | — | 以 ACP 代理服务器模式运行(stdio) | — | +| `session` | `s` | 管理会话 | `commands/session.rs` | +| `project` | `p` | 打开最近项目目录 | `commands/project.rs` | +| `projects` | `ps` | 列出最近项目目录 | 同上 | +| `run` | — | 从指令文件或 stdin 执行 | — | +| `recipe` | — | Recipe 工具(validate/deeplink/open/list) | `commands/recipe.rs` | +| `schedule` | `sched` | 管理定时任务 | `commands/schedule.rs` | +| `gateway` | `gw` | 管理外部网关 | `commands/gateway.rs` | +| `update` | — | 更新 CLI 版本(`--canary`) | `commands/update.rs` | +| `term` | — | 终端集成会话 | `commands/term.rs` | +| `local-models` | `lm` | 管理本地推理模型 | — | +| `completion` | — | 生成 Shell 自动补全 | — | + +### Session 子命令 + +| 子命令 | 用途 | 选项 | +|--------|------|------| +| `list` | 列出所有会话 | `--format`, `--ascending`, `--working_dir`, `--limit` | +| `remove` | 删除会话 | `--regex` | +| `export` | 导出会话 | `--output`, `--format`(markdown/json/yaml) | +| `diagnostics` | 生成诊断 zip | — | + +### Run 命令选项 + +| 选项组 | 参数 | 用途 | +|--------|------|------| +| Input | `--instructions`/`-i`, `--text`/`-t`, `--recipe`, `--system`, `--params` | 输入来源 | +| Extension | `--with-extension`, `--with-streamable-http-extension`, `--with-builtin`, `--no-profile` | 扩展控制 | +| Session | `--debug`, `--max-tool-repetitions`, `--max-turns`, `--container` | 会话控制 | +| Output | `--quiet`/`-q`, `--output-format`(text/json/stream-json) | 输出控制 | +| Model | `--provider`, `--model` | 模型选择 | +| Behavior | `--interactive`/`-s`, `--no-session`, `--resume`, `--scheduled-job-id` | 运行行为 | + +### Recipe 子命令 + +| 子命令 | 用途 | +|--------|------| +| `validate` | 验证 Recipe 文件结构 | +| `deeplink` | 生成 deeplink(`goose://`) | +| `open` | 在 Goose Desktop 打开 | +| `list` | 列出可用 Recipe | + +### Schedule 子命令 + +| 子命令 | 用途 | +|--------|------| +| `add` | 添加定时任务 | +| `list` | 列出定时任务 | +| `remove` | 删除定时任务 | +| `sessions` | 查看定时任务会话 | +| `run_now` | 立即运行定时任务 | +| `services_status` | 查看服务状态 | +| `services_stop` | 停止服务 | +| `cron_help` | Cron 表达式帮助 | + +### Gateway 子命令 + +| 子命令 | 用途 | +|--------|------| +| `status` | 查看网关状态 | +| `start` | 启动网关 | +| `stop` | 停止网关 | +| `pair` | 配对外部平台 | + +## 交互式斜杠命令(16 个) + +> 源码: `crates/goose-cli/src/session/input.rs`(`handle_slash_command()` + `print_help()`) + +| 命令 | 用途 | +|------|------| +| `/help`, `/?` | 显示帮助信息 | +| `/exit`, `/quit` | 退出会话 | +| `/t` | 切换主题(Light/Dark/Ansi 循环) | +| `/t ` | 设置指定主题(light/dark/ansi) | +| `/r` | 切换完整工具输出(显示未截断的工具参数) | +| `/mode ` | 设置模式(Auto/Approve/SmartApprove/Chat) | +| `/plan ` | 进入规划模式,创建执行计划 | +| `/endplan` | 退出规划模式 | +| `/compact` | 压缩对话上下文 | +| `/clear` | 清除聊天历史 | +| `/extension ` | 添加 stdio 扩展 | +| `/builtin ` | 添加内置扩展 | +| `/prompts [--extension ]` | 列出可用提示模板 | +| `/prompt [--info] [key=value...]` | 执行或查看提示模板 | +| `/recipe [filepath]` | 从当前对话生成 Recipe | +| `/summarize` | 压缩上下文(已弃用,用 `/compact`) | + +## MCP 内置服务器 + +通过 `goose mcp` 命令可独立运行内置 MCP 服务器: + +| 服务器 | 用途 | +|--------|------| +| `AutoVisualiser` | 图表可视化(Chart、Sankey、Radar 等) | +| `ComputerController` | 计算机控制、Web 抓取、文件解析(DOCX/PDF/XLSX) | +| `Memory` | 记忆管理(存储/检索/删除) | +| `Tutorial` | 教程引导 | diff --git a/docs/tools/goose/03-architecture.md b/docs/tools/goose/03-architecture.md new file mode 100644 index 00000000..b0b86a06 --- /dev/null +++ b/docs/tools/goose/03-architecture.md @@ -0,0 +1,254 @@ +# 3. Goose 技术架构 + +> 以下基于 v1.28.0 源码分析(commit `0ace570`,2026-03-21)。 + +## Crate 结构 + +``` +goose/ +├── crates/goose/ # 核心代理框架(~55k 行 Rust) +│ └── src/ +│ ├── agents/ # Agent + ExtensionManager + Platform Extensions +│ │ ├── agent.rs # 主代理逻辑 +│ │ ├── extension.rs # ExtensionConfig 枚举(7 种传输类型) +│ │ ├── extension_manager.rs # 扩展生命周期管理 +│ │ └── platform_extensions/ # 11 个内置 Platform Extension +│ ├── config/ # 配置、权限、模式 +│ │ ├── goose_mode.rs # 4 种运行模式 +│ │ └── permission.rs # 权限管理器 +│ ├── permission/ # 权限系统 +│ │ ├── permission_inspector.rs # 权限检查管道 +│ │ └── permission_judge.rs # LLM 智能权限判断 +│ ├── security/ # 安全系统 +│ │ ├── mod.rs # SecurityManager +│ │ ├── scanner.rs # PromptInjectionScanner +│ │ ├── security_inspector.rs +│ │ └── adversary_inspector.rs # LLM 对抗性审查 +│ ├── recipe/ # Recipe 系统 +│ ├── providers/ # 58+ LLM 提供商 +│ └── tool_inspection.rs # ToolInspector 管道 +├── crates/goose-cli/ # CLI 二进制 +│ └── src/ +│ ├── cli.rs # clap 命令定义 +│ ├── commands/ # 命令实现 +│ └── session/ # 交互式会话 + 输入处理 +├── crates/goose-mcp/ # 内置 MCP 服务器 +│ └── src/ +│ ├── autovisualiser/ # 图表可视化 +│ ├── computercontroller/ # 计算机控制 +│ ├── memory/ # 记忆管理 +│ └── tutorial/ # 教程 +├── crates/goose-server/ # HTTP 服务器(Axum) +├── crates/goose-acp/ # Agent Client Protocol +├── crates/goose-acp-macros/ # ACP 过程宏 +├── crates/goose-test/ # 测试工具 +├── ui/desktop/ # Electron 桌面应用 +└── ui/acp/ # ACP 类型包(npm) +``` + +## 核心架构 + +``` +客户端(CLI / Desktop / Web) + │ + ▼ +goosed(Axum HTTP 服务器,crates/goose-server/) + │ + ▼ +AgentManager(LRU 缓存,最多 100 会话) + │ + ▼ +Agent(会话级代理,crates/goose/src/agents/agent.rs) + ├── Provider(58+ LLM 提供商) + ├── ExtensionManager(MCP 客户端管理) + │ ├── Stdio 传输(子进程) + │ ├── StreamableHttp 传输(远程) + │ ├── Builtin 传输(进程内 DuplexStream) + │ ├── Platform 传输(直接函数调用) + │ ├── Frontend 传输(UI 桥接) + │ └── InlinePython 传输(uvx 子进程) + ├── ToolInspector 管道 + │ ├── SecurityInspector(注入检测) + │ ├── AdversaryInspector(LLM 对抗审查) + │ ├── PermissionInspector(权限检查) + │ └── RepetitionInspector(重复检测) + └── Scheduler(Cron 定时任务) +``` + +## MCP 原生架构 + +源码: `crates/goose/src/agents/extension.rs`(`ExtensionConfig` 枚举) + +### 7 种传输类型 + +| 类型 | 传输方式 | 说明 | +|------|---------|------| +| `Stdio` | stdin/stdout | 生成子进程,通过标准输入输出通信 | +| `StreamableHttp` | HTTP Streamable MCP | 连接远程 MCP 服务器 | +| `Builtin` | `tokio::io::DuplexStream` | 进程内运行捆绑的 MCP 服务器 | +| `Platform` | 直接函数调用 | 进程内直接访问代理上下文(无 MCP 传输开销) | +| `Frontend` | UI 桥接 | 桌面 UI 提供的工具 | +| `InlinePython` | uvx 子进程 | 运行内联 Python 代码 | +| `Sse` | **已废弃** | 保留仅为配置兼容 | + +### 扩展生命周期 + +源码: `crates/goose/src/agents/extension_manager.rs` + +1. **配置解析**:`ExtensionConfig::resolve()` 合并环境变量、替换 keyring 密钥 +2. **客户端创建**:根据传输类型创建对应客户端 +3. **工具发现**:`list_tools()` 发现可用工具,带版本追踪缓存 +4. **执行**:`call_tool()` 按工具名前缀分发到正确扩展 +5. **环境变量清理**:`Envs` 结构阻止 31 个危险环境变量(PATH、LD_PRELOAD、PYTHONPATH 等) + +### 扩展配置格式 + +```yaml +# ~/.config/goose/config.yaml +extensions: + developer: + enabled: true + type: builtin + name: developer + display_name: Developer + timeout: 300 + bundled: true + my-server: + enabled: true + type: stdio + name: my-server + cmd: npx + args: ["-y", "@my/mcp-server"] + env_keys: ["API_KEY"] + timeout: 60 +``` + +## 安全系统(多层检查器管道) + +源码: `crates/goose/src/tool_inspection.rs`(`ToolInspector` trait) + +### SecurityManager + +源码: `crates/goose/src/security/mod.rs` + +- 管理延迟初始化的 `PromptInjectionScanner` +- 配置标志: `SECURITY_PROMPT_ENABLED`, `SECURITY_COMMAND_CLASSIFIER_ENABLED`, `SECURITY_PROMPT_CLASSIFIER_ENABLED` +- 阈值: 0.8(可通过 `SECURITY_PROMPT_THRESHOLD` 配置) + +### PromptInjectionScanner + +源码: `crates/goose/src/security/scanner.rs` + +两种检测模式: +- **PatternMatcher**:预定义威胁模式匹配 +- **ClassificationClient**(可选):HuggingFace 兼容 ML 端点分类 + +### AdversaryInspector + +源码: `crates/goose/src/security/adversary_inspector.rs` + +- **Opt-in**:放置 `~/.config/goose/adversary.md` 文件激活 +- 使用 LLM 审查工具调用是否对抗性 +- 默认审查 `shell` 和 `computercontroller__automation_script` +- **Fail-open**:LLM 调用失败时允许工具执行 + +### RepetitionInspector + +源码: `crates/goose/src/tool_monitor.rs` + +- 追踪连续相同工具调用(相同名称 + 相同参数) +- 可配置 `max_repetitions`(`--max-tool-repetitions` CLI 参数) + +### 权限检查管道 + +源码: `crates/goose/src/permission/permission_inspector.rs` + +``` +工具调用请求 + │ + ▼ +检查 GooseMode:Auto = 全部允许;Chat = 跳过工具 + │ + ▼ +检查用户自定义权限(PermissionLevel::AlwaysAllow/NeverAllow/AskBefore) + │ + ▼ +SmartApprove:检查工具注解(read_only_hint)或 LLM 判断 + │ PermissionJudge(LLM 分类只读/写入) + │ 结果缓存到 PermissionManager + ▼ +扩展管理操作始终需要确认 + │ + ▼ +结果:approved / needs_approval / denied +``` + +### PermissionManager + +源码: `crates/goose/src/config/permission.rs` + +- 持久化到 `~/.config/goose/permission.yaml` +- 三级别: `AlwaysAllow`, `AskBefore`, `NeverAllow` +- 两类别: `user`(显式), `smart_approve`(LLM 缓存) + +## Recipe 系统 + +源码: `crates/goose/src/recipe/` + +```yaml +version: "1.0.0" +title: "Recipe Title" +description: "What this recipe does" +instructions: | + Detailed instructions for the model +extensions: + - type: builtin + name: developer +settings: + goose_provider: openai + goose_model: gpt-4o +parameters: + - name: username + type: string + required: true + default: "guest" +sub_recipes: + - name: sub-recipe-name + path: ./sub-recipe.yaml +``` + +**执行流程:** +1. 发现: `local_recipes.rs` 搜索本地目录 +2. 模板渲染: `template_recipe.rs`(minijinja 解析 `{{param}}`) +3. 验证: `validate_recipe.rs` +4. 构建: `build_recipe.rs` + +## 桌面应用 + +源码: `ui/desktop/` + +| 组件 | 技术 | +|------|------| +| 框架 | Electron 41 + React 19 | +| 构建 | Electron Forge + Vite | +| UI | Radix UI + Tailwind CSS + Framer Motion | +| 路由 | React Router | +| 通信 | 通过 goose-server(Axum HTTP)的 REST API | +| 协议 | Agent Client Protocol(`crates/goose-acp/`) | +| 分发 | macOS (.app arm64/x64)、Linux (.deb/.rpm/.flatpak)、Windows (.zip) | +| 自定义协议 | `goose://` deeplink | + +## 技术栈 + +| 组件 | 技术 | +|------|------| +| 语言 | Rust | +| 异步运行时 | Tokio | +| HTTP 框架 | Axum + Tower | +| MCP SDK | rmcp(Rust MCP) | +| Token 计算 | tiktoken-rs | +| AST 解析 | tree-sitter(9 种语言) | +| 本地推理 | candle(Whisper)、llama-cpp-2 | +| 密钥管理 | keyring(系统密钥链) | +| CLI 框架 | clap(derive 宏) | +| 桌面 | Electron 41 + React 19 | diff --git a/docs/tools/goose/04-extensions.md b/docs/tools/goose/04-extensions.md new file mode 100644 index 00000000..5433fe5a --- /dev/null +++ b/docs/tools/goose/04-extensions.md @@ -0,0 +1,141 @@ +# 4. Goose 扩展与工具系统 + +Goose 的工具系统完全基于 MCP 协议。工具分两类:**Platform Extension**(进程内直接调用)和 **MCP Builtin Server**(子进程 MCP 通信)。 + +> 源码: `crates/goose/src/agents/platform_extensions/`(Platform Extension) +> 源码: `crates/goose-mcp/src/`(MCP 内置服务器) + +## Platform Extension(进程内,11 个) + +源码: `crates/goose/src/agents/platform_extensions/mod.rs`(`PLATFORM_EXTENSIONS` HashMap) + +### 开发工具 + +| 扩展 | 默认启用 | 工具 | 用途 | 源码 | +|------|---------|------|------|------| +| **developer** | ✅ | `write`, `edit`, `shell`, `tree` | 文件读写编辑、Shell 执行 | `platform_extensions/developer/` | +| **analyze** | ✅ | `analyze` | 代码分析 | `platform_extensions/analyze/` | +| **todo** | ✅ | `todo_write` | 待办列表管理 | `platform_extensions/todo.rs` | +| **apps** | ✅ | `create_app`, `iterate_app`, `delete_app`, `list_apps` | 应用创建与管理 | `platform_extensions/apps.rs` | + +### 代理与编排 + +| 扩展 | 默认启用 | 工具 | 用途 | 源码 | +|------|---------|------|------|------| +| **summon** | ✅ | `load`, `delegate` | 加载扩展/Recipe,委派任务 | `platform_extensions/summon.rs` | +| **orchestrator** | ❌(隐藏) | Agent 管理工具 | 多代理编排 | `platform_extensions/orchestrator.rs` | + +### 辅助工具 + +| 扩展 | 默认启用 | 工具 | 用途 | 源码 | +|------|---------|------|------|------| +| **extensionmanager** | ✅ | `manage_extensions`, `search_available_extensions`, `read_resource`, `list_resources` | 扩展管理 | `platform_extensions/ext_manager.rs` | +| **chatrecall** | ❌ | `search_sessions` | 搜索历史会话 | `platform_extensions/chatrecall.rs` | +| **summarize** | ❌ | `summarize` | 摘要生成 | `platform_extensions/summarize.rs` | +| **code_execution** | ❌(feature-gated) | 代码执行工具 | 代码执行沙箱 | `platform_extensions/code_execution.rs` | +| **tom**(Top Of Mind) | ✅ | (无工具,注入上下文) | 注入最近上下文到对话 | `platform_extensions/tom.rs` | + +### developer 工具详情 + +源码: `crates/goose/src/agents/platform_extensions/developer/` + +| 工具 | 参数 | 用途 | +|------|------|------| +| `write` | `path`, `content` | 写入文件 | +| `edit` | `path`, `old`, `new` | 精确文本替换 | +| `shell` | `command`, `workdir?`, `timeout?` | 执行 Shell 命令 | +| `tree` | `path?`, `depth?` | 目录树显示 | + +## MCP 内置服务器(4 个) + +源码: `crates/goose-mcp/src/`(`BUILTIN_EXTENSIONS` HashMap) + +### autovisualiser + +源码: `crates/goose-mcp/src/autovisualiser/mod.rs` + +| 工具 | 用途 | +|------|------| +| `show_chart` | 图表可视化 | +| `render_sankey` | Sankey 图 | +| `render_radar` | 雷达图 | +| `render_donut` | 环形图 | +| `render_treemap` | 树图 | +| `render_chord` | 弦图 | +| `render_map` | 地图 | +| `render_mermaid` | Mermaid 图 | + +### computercontroller + +源码: `crates/goose-mcp/src/computercontroller/mod.rs` + +| 工具 | 用途 | +|------|------| +| `web_scrape` | Web 页面抓取 | +| `automation_script` | 自动化脚本执行 | +| `computer_control` | 计算机控制(鼠标/键盘) | +| `xlsx_tool` | Excel 文件处理 | +| `docx_tool` | Word 文件处理 | +| `pdf_tool` | PDF 文件处理 | + +### memory + +源码: `crates/goose-mcp/src/memory/mod.rs` + +| 工具 | 用途 | +|------|------| +| `remember_memory` | 存储记忆 | +| `retrieve_memories` | 检索记忆 | +| `remove_memory_category` | 删除分类记忆 | +| `remove_specific_memory` | 删除特定记忆 | + +### tutorial + +源码: `crates/goose-mcp/src/tutorial/mod.rs` + +教程引导工具,帮助新用户学习 Goose。 + +## 工具总数汇总 + +| 类别 | 数量 | 来源 | +|------|------|------| +| Platform Extension 工具 | ~20 | 进程内直接调用 | +| MCP Builtin 工具 | ~18 | 子进程 MCP 通信 | +| 用户 MCP 扩展 | 无上限 | Stdio/StreamableHttp/InlinePython | +| **总计(默认启用)** | **~25** | developer + analyze + todo + apps + summon + extensionmanager + tom | + +## 工具执行管线 + +源码: `crates/goose/src/tool_inspection.rs`(`ToolInspector` trait) + +``` +LLM 工具调用请求 + │ + ▼ +SecurityInspector → PromptInjectionScanner(Pattern + ML 检测) + │ 超过阈值 → RequireApproval + ▼ +AdversaryInspector → LLM 对抗性审查(opt-in) + │ 检测到对抗性 → 阻止 + ▼ +PermissionInspector → 模式 + 用户规则 + SmartApprove + │ denied → 阻止 / needs_approval → 等待确认 + ▼ +RepetitionInspector → 重复检测 + │ 超过 max_repetitions → 阻止 + ▼ +ExtensionManager.call_tool() → 按工具名前缀分发 + │ + ▼ +结果返回 LLM +``` + +## 与其他 Agent 的对比 + +| 特性 | Goose | Claude Code | Qwen Code | +|------|-------|-------------|-----------| +| 工具架构 | MCP 原生(所有工具通过 MCP) | 内置工具 + MCP 扩展 | 内置工具 + MCP 扩展 | +| 内置工具数 | ~20(Platform) + ~18(MCP) | 20+ | 16 | +| 扩展格式 | MCP 标准 | 插件系统 | MCP + Claude/Gemini 转换器 | +| 权限模式 | 4 种(含 SmartApprove) | 4 种 | 4 种 | +| 安全检查 | 4 层 Inspector 管道 | 沙箱 + 权限 | 权限 + 审批模式 | diff --git a/docs/tools/goose/EVIDENCE.md b/docs/tools/goose/EVIDENCE.md index 00f6be3e..c632896c 100644 --- a/docs/tools/goose/EVIDENCE.md +++ b/docs/tools/goose/EVIDENCE.md @@ -2,9 +2,13 @@ ## 基本信息 - 仓库: block/goose, Apache-2.0, Rust, 33k+ stars +- 版本: v1.28.0(源码: `ui/desktop/package.json`,`Cargo.toml` workspace) - 架构: MCP 原生(所有工具通过 MCP 协议) - SDK: rmcp (Rust MCP SDK) - 已捐赠给 Linux Foundation Agentic AI Foundation (AAIF) +- 最后分析: 2026-03-28(commit `0ace570`) + +> **免责声明**: 以下基于 2026-03-28 源码分析,可能已过时。 ## 遥测系统(源码: crates/goose-cli/src/posthog.rs) @@ -36,27 +40,102 @@ - `GOOSE_TELEMETRY_ENABLED=false` 配置 - Onboarding 事件绕过 opt-in(追踪漏斗) -## 安全系统 +## 安全系统(源码: crates/goose/src/security/) + +### SecurityManager(源码: `security/mod.rs`) +- 管理延迟初始化的 `PromptInjectionScanner`(`OnceLock`) +- 配置标志: `SECURITY_PROMPT_ENABLED`, `SECURITY_COMMAND_CLASSIFIER_ENABLED`, `SECURITY_PROMPT_CLASSIFIER_ENABLED` +- 阈值: 0.8(可通过 `SECURITY_PROMPT_THRESHOLD` 配置) + +### PromptInjectionScanner(源码: `security/scanner.rs`) +- 两种检测模式: + - **PatternMatcher**: 预定义威胁模式匹配 + - **ClassificationClient**: HuggingFace 兼容 ML 端点分类(可选) +- 仅扫描 `shell` 工具调用 + +### AdversaryInspector(源码: `security/adversary_inspector.rs`) +- **Opt-in**: 放置 `~/.config/goose/adversary.md` 文件激活 +- 使用 LLM 审查工具调用是否对抗性 +- 默认审查 `shell` 和 `computercontroller__automation_script` +- **Fail-open**: LLM 调用失败时允许工具执行 -### SecurityManager + AdversaryInspector -- 提示注入检测: 模式匹配 + 可选 ML 分类器 -- classification_client.rs: 调用 HuggingFace 兼容 ML 端点 -- adversary_inspector.rs: LLM 审查使用 ~/.config/goose/adversary.md 规则 -- 置信度阈值: 超过则触发用户确认 +### RepetitionInspector(源码: `tool_monitor.rs`) +- 追踪连续相同工具调用(相同名称 + 相同参数) +- 可配置 `max_repetitions`(`--max-tool-repetitions` CLI 参数) -### RepetitionInspector -- tool_monitor.rs: 检测重复相同工具调用 -- 防止无限循环 +### SecurityInspector(源码: `security/security_inspector.rs`) +- 实现 `ToolInspector` trait +- 将 `SecurityResult` 转换为 `InspectionResult` +- 超过阈值时产生 `RequireApproval` -### SecurityPatterns + Scanner -- security/patterns.rs: 预定义注入模式 -- security/scanner.rs: 模式扫描引擎 -- 配置: SECURITY_PROMPT_ENABLED, SECURITY_PROMPT_CLASSIFIER_ENABLED, SECURITY_COMMAND_CLASSIFIER_ENABLED +## 权限系统 -### 权限系统 +### GooseMode(源码: `config/goose_mode.rs`) - 4 种模式: Auto, Approve, SmartApprove (默认), Chat + +### PermissionInspector(源码: `permission/permission_inspector.rs`) +检查流程: +1. GooseMode: Auto = 全部允许; Chat = 跳过工具 +2. 用户自定义权限(PermissionLevel::AlwaysAllow/NeverAllow/AskBefore) +3. SmartApprove: 工具注解(read_only_hint)或 LLM 判断 +4. 扩展管理操作始终需要确认 + +### PermissionJudge(源码: `permission/permission_judge.rs`) +- 使用 LLM 分类工具调用为只读 vs 写入 +- 创建合成工具 `platform__tool_by_tool_permission` 用于结构化输出 +- 结果缓存到 PermissionManager + +### PermissionManager(源码: `config/permission.rs`) +- 持久化到 `~/.config/goose/permission.yaml` +- 三级别: `AlwaysAllow`, `AskBefore`, `NeverAllow` +- 两类别: `user`(显式), `smart_approve`(LLM 缓存) - 31 个危险环境变量阻止列表 -- AllowOnce/AlwaysAllow/NeverAllow 每工具 + +## MCP 原生架构(源码: `crates/goose/src/agents/`) + +### 7 种传输类型(源码: `agents/extension.rs` — `ExtensionConfig` 枚举) + +| 类型 | 传输方式 | 说明 | +|------|---------|------| +| `Stdio` | stdin/stdout | 子进程标准输入输出 | +| `StreamableHttp` | HTTP Streamable MCP | 远程 MCP 服务器 | +| `Builtin` | `tokio::io::DuplexStream` | 进程内捆绑 MCP 服务器 | +| `Platform` | 直接函数调用 | 进程内直接访问(无 MCP 传输开销) | +| `Frontend` | UI 桥接 | 桌面 UI 提供的工具 | +| `InlinePython` | uvx 子进程 | 运行内联 Python 代码 | +| `Sse` | **已废弃** | 保留仅为配置文件兼容 | + +### ExtensionManager(源码: `agents/extension_manager.rs`) +- 配置解析: `ExtensionConfig::resolve()` 合并环境变量、替换 keyring 密钥 +- 客户端创建: 根据传输类型创建对应客户端 +- 工具发现: `list_tools()` + 版本追踪缓存 +- 执行: `call_tool()` 按工具名前缀分发 +- 环境变量清理: `Envs` 结构阻止 31 个危险变量 + +## Platform Extension(源码: `crates/goose/src/agents/platform_extensions/mod.rs`) + +| 扩展 | 默认启用 | 工具 | 源码 | +|------|---------|------|------| +| **developer** | ✅ | `write`, `edit`, `shell`, `tree` | `platform_extensions/developer/` | +| **analyze** | ✅ | `analyze` | `platform_extensions/analyze/mod.rs` | +| **todo** | ✅ | `todo_write` | `platform_extensions/todo.rs` | +| **apps** | ✅ | `create_app`, `iterate_app`, `delete_app`, `list_apps` | `platform_extensions/apps.rs` | +| **summon** | ✅ | `load`, `delegate` | `platform_extensions/summon.rs` | +| **extensionmanager** | ✅ | `manage_extensions`, `search_available_extensions`, `read_resource`, `list_resources` | `platform_extensions/ext_manager.rs` | +| **tom** | ✅ | (无工具,注入上下文) | `platform_extensions/tom.rs` | +| **chatrecall** | ❌ | `search_sessions` | `platform_extensions/chatrecall.rs` | +| **summarize** | ❌ | `summarize` | `platform_extensions/summarize.rs` | +| **code_execution** | ❌(feature-gated) | 代码执行工具 | `platform_extensions/code_execution.rs` | +| **orchestrator** | ❌(隐藏) | Agent 管理工具 | `platform_extensions/orchestrator.rs` | + +## MCP 内置服务器(源码: `crates/goose-mcp/src/`) + +| 服务器 | 工具 | 源码 | +|--------|------|------| +| **autovisualiser** | `show_chart`, `render_sankey`, `render_radar`, `render_donut`, `render_treemap`, `render_chord`, `render_map`, `render_mermaid` | `autovisualiser/mod.rs` | +| **computercontroller** | `web_scrape`, `automation_script`, `computer_control`, `xlsx_tool`, `docx_tool`, `pdf_tool` | `computercontroller/mod.rs` | +| **memory** | `remember_memory`, `retrieve_memories`, `remove_memory_category`, `remove_specific_memory` | `memory/mod.rs` | +| **tutorial** | 教程引导工具 | `tutorial/mod.rs` | ## OpenTelemetry - 完整 OTLP: traces + metrics + logs @@ -68,16 +147,28 @@ - 每 5 秒批量发送 trace 数据 - 默认禁用 -## MCP 原生架构 -- Host → Client → Server 模型 -- 传输: Stdio (本地), StreamableHttp (远程), Builtin (进程内) -- 扩展暴露: Tools (可执行函数), Resources (URI 数据), Prompts (模板) -- 配置: ~/.config/goose/config.yaml -- 安装: CLI, Desktop UI, 深链 (goose://extension?cmd=...) - -## Recipe 系统 +## Recipe 系统(源码: `crates/goose/src/recipe/`) - YAML 定义的任务模板 -- goose run recipe.yaml 执行 -- 支持变量替换和条件步骤 - -来源: GitHub 源码 crates/goose/src/, crates/goose-cli/src/ (Rust) +- `goose run recipe.yaml` 执行 +- 支持变量替换(minijinja)、子 Recipe、参数化 +- CLI 命令: `goose recipe validate/deeplink/open/list` + +## 桌面应用(源码: `ui/desktop/`) +- 框架: Electron 41 + React 19 + Radix UI + Tailwind CSS +- 通信: goose-server(Axum HTTP)REST API +- 协议: Agent Client Protocol(`crates/goose-acp/`) +- 分发: macOS (.app)、Linux (.deb/.rpm/.flatpak)、Windows (.zip) +- 自定义协议: `goose://` deeplink + +## Crate 结构 + +| Crate | 用途 | +|-------|------| +| `crates/goose` | 核心代理框架(~55k 行 Rust) | +| `crates/goose-cli` | CLI 二进制(clap 命令定义) | +| `crates/goose-mcp` | 内置 MCP 服务器(autovisualiser 等) | +| `crates/goose-server` | HTTP 服务器(Axum) | +| `crates/goose-acp` | Agent Client Protocol | +| `crates/goose-test` | 测试工具 | + +来源: GitHub 源码 `crates/goose/src/`, `crates/goose-cli/src/` (Rust) diff --git a/docs/tools/goose/README.md b/docs/tools/goose/README.md index bb996a0d..f81bc051 100644 --- a/docs/tools/goose/README.md +++ b/docs/tools/goose/README.md @@ -1,11 +1,14 @@ # Goose 文档 -> Block 出品的 MCP 原生 AI 编程代理(已捐赠 Linux Foundation AAIF) +> Block 出品的 MCP 原生 AI 编程代理(已捐赠 Linux Foundation AAIF,Apache-2.0,v1.28.0) | 文档 | 内容 | |------|------| -| [工具概述](../goose.md) | 核心功能、16 命令、MCP 架构 | +| [01-overview.md](./01-overview.md) | 概述、核心功能、安装、运行模式 | +| [02-commands.md](./02-commands.md) | CLI 命令、16 个斜杠命令、Recipe 命令 | +| [03-architecture.md](./03-architecture.md) | 技术架构、MCP 原生设计、安全系统、桌面应用 | +| [04-extensions.md](./04-extensions.md) | 11 个 Platform Extension、4 个 MCP 内置服务器 | | [EVIDENCE.md](./EVIDENCE.md) | 源码分析证据(PostHog、SecurityManager、MCP) | **仓库:** [github.com/block/goose](https://github.com/block/goose) -**Stars:** 33k+ | **许可证:** Apache-2.0 +**Stars:** 33k+ | **许可证:** Apache-2.0 | **语言:** Rust diff --git a/docs/tools/opencode/EVIDENCE.md b/docs/tools/opencode/EVIDENCE.md index 84fd17f8..a22c8743 100644 --- a/docs/tools/opencode/EVIDENCE.md +++ b/docs/tools/opencode/EVIDENCE.md @@ -1,62 +1,274 @@ # OpenCode 遥测与安全分析证据 +## 基本信息 +- 仓库: opencode-ai/opencode, Apache-2.0, TypeScript(Bun 运行时) +- 版本: v1.3.0(源码: `packages/opencode/package.json`) +- 架构: TypeScript monorepo(Bun workspace) +- 最后分析: 2026-03-28(commit `41c77ccb3`) + +> **注**: OpenCode v1.0 之前为 Go 项目(termai),v1.0+ 已完全重写为 TypeScript。 +> v1.2.15 二进制分析显示为 Go ELF(Go 编译产物),这是因为 v1.0 之前的发行版本。 +> 当前源码(v1.3.0)中 0 个 .go 文件,100% TypeScript。 + +> **免责声明**: 以下基于 2026-03-28 源码分析,可能已过时。 + ## 遥测系统 -- **无遥测** — 递归搜索零结果 -- 无分析 SDK、无报告端点 + +### 搜索方法论 +对 `packages/opencode/` 目录递归搜索以下关键词: +- `telemetry`, `analytics`, `tracking`, `posthog`, `sentry`, `mixpanel`, `amplitude`, `segment` +- `UUID`, `machine.id`, `distinct_id`, `installation_id` +- 外发 HTTP 请求(非 LLM API) + +### 搜索结果 +- **无第三方遥测**:零匹配 +- **无分析 SDK**:无 PostHog/Sentry/Mixpanel/Amplitude/Segment 集成 +- **无 Machine ID**:不生成或采集任何设备标识符 + +### OpenTelemetry(用户可控,默认关闭) +- 源码: `packages/opencode/src/session/llm.ts#L282` + ```typescript + experimental_telemetry: { isEnabled: cfg.experimental?.openTelemetry } + ``` +- 源码: `packages/opencode/src/agent/agent.ts#L298`(同模式) +- 仅在用户显式设置 `experimental.openTelemetry: true` 时启用 +- LSP 遥测能力: `packages/opencode/src/lsp/server.ts#L1582`(标准 LSP 协议的一部分) + +### 结论 +OpenCode **不采集任何遥测数据**。OpenTelemetry 为可选开发工具,默认禁用。 ## 数据采集 -- **不采集**: Machine ID、UUID、主机名、硬件指纹 -- 无外发分析请求 +- **不采集**: Machine ID、UUID、主机名、硬件指纹、MAC 地址 +- **无外发分析请求**: 所有网络请求均为用户配置的 LLM API 调用 +- `packages/opencode/src/env/`: 环境变量管理,仅用于本地功能适配 ## 安全系统 -- `permission/permission.go`: 基础工具权限审批 -- 按请求 approve/deny + 会话级持久化授予 -- 无提示注入检测、无 ML 分类器 -来源: internal/ (GitHub 源码分析) +### 权限系统 +- 源码: `packages/opencode/src/permission/` + - `index.ts` — 核心权限服务(ask/reply/list 接口,Effect-ts) + - `evaluate.ts` — 规则评估引擎(匹配权限名 + 模式) + - `arity.ts` — Bash 命令 arity 检测,智能权限分组 + - `schema.ts` — PermissionID 类型定义 + +**权限操作**: `ask`(提示用户)、`allow`(自动批准)、`deny`(阻止) + +**可配置权限工具**: `read`, `edit`, `glob`, `grep`, `list`, `bash`, `task`, `external_directory`, `todowrite`, `todoread`, `question`, `webfetch`, `websearch`, `codesearch`, `lsp`, `doom_loop`, `skill` + +**权限检查流程**: +1. Agent 级规则(来自配置 `agent.*.permission`) +2. Session 级规则(来自用户"始终允许"回答) +3. 均无匹配 → 通过 TUI 提示用户 + +### 外部目录保护 +- 源码: `packages/opencode/src/tool/external-directory.ts` +- 工具在访问项目目录外的路径前检查 `assertExternalDirectory()` +- Bash 工具使用 tree-sitter-bash 解析命令检测外部目录访问 + +### 无沙箱机制 +OpenCode 不提供沙箱执行隔离。依赖权限系统控制工具行为。 ## 深度补充(源码级分析) -### 架构(Go + TypeScript 混合) -- packages/tui/: Ink + React TUI(TypeScript) -- internal/: Go 后端 -- 多客户端: TUI + Web + Desktop(ACP 协议) +### 架构(TypeScript monorepo) + +#### Go 风格 Package 结构(`packages/opencode/src/`) + +| 目录 | 用途 | +|------|------| +| `account/` | 账户管理(企业/组织) | +| `acp/` | Agent Control Plane | +| `agent/` | 代理定义(build, plan, general, explore, title, summary, compaction) | +| `auth/` | 认证存储(OAuth, API key, well-known) | +| `bus/` | 事件总线系统 | +| `cli/` | CLI 入口 + TUI(SolidJS + opentui) | +| `command/` | 命令系统(init, review, 自定义命令, MCP prompts, skills) | +| `config/` | 配置加载(全局/项目/managed/remote) | +| `control-plane/` | Workspace 服务器适配器 | +| `effect/` | Effect-ts 辅助(实例状态、运行服务) | +| `file/` | 文件操作、ripgrep 封装、文件监视 | +| `filesystem/` | 文件系统工具(读/写/状态/MIME 类型) | +| `flag/` | 功能标志(基于环境变量) | +| `global/` | 全局路径(数据/缓存/配置目录) | +| `ide/` | IDE 集成 | +| `lsp/` | LSP 客户端、服务器定义、启动 | +| `mcp/` | MCP 客户端 | +| `permission/` | 权限系统 | +| `plugin/` | 插件系统(内部 + 外部)、Auth 插件 | +| `project/` | 项目实例、worktree 管理 | +| `provider/` | LLM 提供商抽象、模型加载、认证 | +| `server/` | HTTP 服务器(Hono,端口 4096) | +| `session/` | 会话管理、LLM 流式传输、压缩 | +| `share/` | 会话分享 | +| `skill/` | Skill 加载系统 | +| `snapshot/` | 文件系统快照/撤销系统 | +| `storage/` | SQLite 数据库(Drizzle ORM) | +| `tool/` | 工具定义和注册表 | +| `worktree/` | Git worktree 管理 | + +#### Monorepo 包结构(`packages/`) + +| 包 | 用途 | +|---|------| +| `opencode/` | 核心 CLI/后端 | +| `app/` | Web 应用(SolidJS) | +| `desktop/` | 桌面应用(Tauri) | +| `desktop-electron/` | 桌面应用(Electron 替代方案) | +| `sdk/js/` | JavaScript SDK | +| `plugin/` | 插件 API 类型定义 | +| `ui/` | 共享 UI 组件 | +| `enterprise/` | 企业功能 | +| `slack/` | Slack 集成 | + +### 代理系统(7 个内置代理) + +源码: `packages/opencode/src/agent/` -### 代理系统(7 个内置代理,源码: internal/agent/) | 代理 | 用途 | |------|------| | general | 通用任务 | -| coder | 代码生成 | +| build/coder | 代码生成 | | plan | 任务规划 | | explore | 代码库探索 | -| debug | 调试辅助 | -| review | 代码审查 | -| architect | 架构设计 | +| title | 会话标题生成 | +| summary | 摘要生成 | +| compaction | 上下文压缩 | + +### 工具系统(19+ 个) + +源码: `packages/opencode/src/tool/registry.ts`(`all()` 函数注册) -### 工具系统(18 个,源码: internal/tool/) -ReadFile, WriteFile, EditFile, RunCommand, ListDirectory, SearchContent, GlobFiles, Fetch, AskUser, Diagnostic, Git, CreateFile, DeleteFile, MoveFile, GetDefinition, FindReferences, RenameSymbol, CodeAction +| 工具 | 源码 | 用途 | 关键参数 | +|------|------|------|---------| +| `bash` | `tool/bash.ts` | Shell 命令执行 | `command`, `timeout?`, `workdir?`, `description` | +| `read` | `tool/read.ts` | 读取文件/目录 | `filePath`, `offset?`, `limit?` | +| `glob` | `tool/glob.ts` | 文件模式搜索 | `pattern`, `path?` | +| `grep` | `tool/grep.ts` | 正则内容搜索 | `pattern`, `path?`, `include?` | +| `edit` | `tool/edit.ts` | 精确文本替换(模糊匹配) | `filePath`, `oldString`, `newString`, `replaceAll?` | +| `write` | `tool/write.ts` | 写入文件 | `content`, `filePath` | +| `task` | `tool/task.ts` | 委派给子代理 | `description`, `prompt`, `subagent_type` | +| `webfetch` | `tool/webfetch.ts` | URL 内容抓取 | `url`, `format?`, `timeout?` | +| `todowrite` | `tool/todo.ts` | 写入待办列表 | `todos[]` | +| `todoread` | `tool/todo.ts` | 读取待办列表 | (无) | +| `websearch` | `tool/websearch.ts` | Web 搜索(Exa API) | `query`, `numResults?` | +| `codesearch` | `tool/codesearch.ts` | 代码上下文搜索(Exa API) | `query`, `tokensNum?` | +| `skill` | `tool/skill.ts` | 加载技能 | `name` | +| `question` | `tool/question.ts` | 向用户提问 | `questions[]` | +| `apply_patch` | `tool/apply_patch.ts` | 统一补丁格式(GPT 模型) | `patchText` | +| `batch` | `tool/batch.ts` | 并行批量执行(实验性) | `tool_calls[]` | +| `plan_exit` | `tool/plan.ts` | 退出规划模式(实验性) | (无) | +| `lsp` | `tool/lsp.ts` | LSP 操作(实验性) | `operation`, `filePath`, `line`, `character` | +| `list` | `tool/ls.ts` | 目录树(注册但不在 `all()` 中) | `path?`, `ignore?` | +| `multiedit` | `tool/multiedit.ts` | 多处编辑 | — | +| `invalid` | `tool/invalid.ts` | 无效工具调用后备 | `tool`, `error` | -### LSP 集成(37 语言服务器,26 格式化器) -- 源码: internal/lsp/ -- 自动检测项目语言并启动对应 LSP -- 代码跳转、悬停、诊断、重命名、引用查找 +**条件激活:** +- `question`: 仅 app/cli/desktop 客户端 或 `OPENCODE_ENABLE_QUESTION_TOOL=true` +- `websearch`/`codesearch`: 仅 provider 为 `opencode` 或 `OPENCODE_ENABLE_EXA=true` +- `apply_patch`: 仅 GPT 模型(非 GPT-4) +- `batch`: 仅 `experimental.batch_tool=true` +- `plan_exit`: 仅 `OPENCODE_EXPERIMENTAL_PLAN_MODE=true` +- `lsp`: 仅 `OPENCODE_EXPERIMENTAL_LSP_TOOL=true` -### 认证系统(3 个插件) -- CopilotAuthPlugin: GitHub Copilot OAuth -- CodexAuthPlugin: OpenAI ChatGPT Plus/Pro OAuth -- GitlabAuthPlugin: GitLab OAuth +### 斜杠命令系统 + +源码: `packages/opencode/src/cli/cmd/tui/app.tsx`(L362-600)+ `routes/session/index.tsx`(L359-870) + +**内置命令(服务端):** + +| 命令 | 用途 | 源码 | +|------|------|------| +| `/init` | 创建/更新 AGENTS.md | `packages/opencode/src/command/index.ts` | +| `/review` | 代码审查 | `packages/opencode/src/command/index.ts` | + +模板: `packages/opencode/src/command/template/initialize.txt`, `review.txt` + +**TUI 斜杠命令(23 个):** + +| 命令 | 别名 | 用途 | +|------|------|------| +| `/sessions` | resume, continue | 切换会话 | +| `/workspaces` | — | 管理工作区(实验性) | +| `/new` | clear | 新建会话 | +| `/models` | — | 切换模型 | +| `/agents` | — | 切换代理 | +| `/mcps` | — | 切换 MCP | +| `/connect` | — | 连接提供商 | +| `/status` | — | 查看状态 | +| `/themes` | — | 切换主题 | +| `/help` | — | 帮助 | +| `/exit` | quit, q | 退出 | +| `/share` | — | 分享会话 | +| `/rename` | — | 重命名会话 | +| `/timeline` | — | 跳转到消息 | +| `/fork` | — | 从消息分叉 | +| `/compact` | summarize | 压缩会话 | +| `/unshare` | — | 取消分享 | +| `/undo` | — | 撤销上一消息 | +| `/redo` | — | 重做 | +| `/timestamps` | toggle-timestamps | 显示/隐藏时间戳 | +| `/thinking` | toggle-thinking | 显示/隐藏思考过程 | +| `/editor` | — | 打开编辑器 | +| `/skills` | — | 列出技能 | + +### LSP 集成(37 语言服务器) + +源码: `packages/opencode/src/lsp/server.ts` + +支持语言: TypeScript, JavaScript, Vue, Go, Ruby, Python, Elixir, Zig, C#, F#, Swift, Rust, C/C++, Svelte, Astro, Java, Kotlin, YAML, Lua, PHP, Prisma, Dart, OCaml, Bash, Terraform, LaTeX, Dockerfile, Gleam, Clojure, Nix, Typst, Haskell, Julia 等 + +LSP 工具操作: `goToDefinition`, `findReferences`, `hover`, `documentSymbol`, `workspaceSymbol`, `goToImplementation`, `prepareCallHierarchy`, `incomingCalls`, `outgoingCalls` + +语言映射: `packages/opencode/src/lsp/language.ts`(~120 文件扩展名 → 语言 ID) + +### 认证插件(3 个) + +源码: `packages/opencode/src/plugin/index.ts#L47` + +| 插件 | 提供商 | 认证方式 | 源码 | +|------|--------|---------|------| +| CopilotAuthPlugin | `github-copilot` | GitHub Device Flow OAuth | `packages/opencode/src/plugin/copilot.ts` | +| CodexAuthPlugin | `openai` | 浏览器 OAuth / 设备码 / API Key | `packages/opencode/src/plugin/codex.ts` | +| GitlabAuthPlugin | GitLab | GitLab OAuth(外部 npm 包) | `opencode-gitlab-auth` | ### 模型支持(100+ 提供商) -- 通过 models.dev + Vercel AI SDK 动态加载 -- 11 个 well-known 提供商代码内定义 -- 支持 API key 轮转和多提供商切换 -### ACP IDE 集成 -- Agent Communication Protocol -- VS Code + JetBrains 扩展 -- 双向通信: 编辑器状态 → Agent, Agent 建议 → 编辑器 +源码: `packages/opencode/src/provider/models.ts` + +- 通过 models.dev API 动态加载(`https://models.dev/api.json`) +- 缓存: `~/.cache/opencode/models.json` +- 回退: 捆绑快照(`./models-snapshot`) +- 每 60 分钟自动刷新 +- 环境变量: `OPENCODE_MODELS_URL`, `OPENCODE_MODELS_PATH`, `OPENCODE_DISABLE_MODELS_FETCH` ### 配置优先级 -managed > user > project > environment variables -来源: GitHub 源码 internal/ + packages/ (Go + TypeScript) +源码: `packages/opencode/src/config/config.ts` + +``` +1. Remote .well-known/opencode(组织默认) +2. Global config(~/.config/opencode/opencode.json{,c}) +3. Custom config(OPENCODE_CONFIG 环境变量) +4. Project config(opencode.json{,c}) +5. .opencode 目录(.opencode/agents/, .opencode/commands/, etc.) +6. Inline config(OPENCODE_CONFIG_CONTENT 环境变量) +7. Enterprise managed(/etc/opencode/opencode.json) +``` + +### 会话管理 + +源码: `packages/opencode/src/session/` +- SQLite 数据库(Drizzle ORM) +- 支持 undo/redo(`revert.ts`) +- 上下文压缩(`compaction.ts`) +- 会话分享(`share/`) +- 子会话(task 工具创建,有 parent session) + +### TUI 架构 + +源码: `packages/opencode/src/cli/cmd/tui/` +- SolidJS + `@opentui/core` + `@opentui/solid` +- 通过内部 HTTP 服务器通信(Hono,端口 4096) +- SDK 客户端封装 HTTP 调用(`@opencode-ai/sdk`) + +来源: GitHub 源码 `packages/opencode/`(TypeScript + Bun) diff --git a/docs/tools/qwen-code/01-overview.md b/docs/tools/qwen-code/01-overview.md new file mode 100644 index 00000000..0f1a53b1 --- /dev/null +++ b/docs/tools/qwen-code/01-overview.md @@ -0,0 +1,122 @@ +# 1. Qwen Code 概述 + +**开发者:** 阿里云(Qwen 团队) +**许可证:** Apache-2.0 +**仓库:** [github.com/QwenLM/qwen-code](https://github.com/QwenLM/qwen-code) +**文档:** [qwenlm.github.io/qwen-code-docs](https://qwenlm.github.io/qwen-code-docs/zh/) +**版本:** v0.13.0(源码: `packages/cli/package.json`) +**最后更新:** 2026-03 + +> **免责声明**: 以下数据基于 2026-03-28 源码分析(commit `0b8ff03f8`),可能已过时。 + +## 概述 + +Qwen Code 是阿里云推出的开源 AI 编程代理,运行在终端中。基于 Google Gemini CLI 分叉并大幅增强,针对 Qwen3-Coder 系列模型优化,是中国首款由大模型厂商发布的终端编程工具。支持 6+ 提供商(Qwen OAuth/DashScope/ModelScope/Anthropic/Google/自定义 OpenAI 兼容端点),提供免费 OAuth 额度和完整的多语言国际化(6 种语言)。 + +AGENTS.md 声明:*"This project is based on Google Gemini CLI with adaptations to better support Qwen-Coder models."* + +主要特点: +- **Gemini CLI 分叉**:继承 Gemini CLI 核心架构,新增 Arena/扩展系统/多提供商等能力 +- **免费 OAuth 额度**:通义账号每天 1000 次免费请求,零门槛入门 +- **16 个内置工具**:文件编辑、Shell 执行、Grep 搜索、Web 抓取/搜索、LSP 等 +- **40+ 斜杠命令**:覆盖会话管理、Arena 模式、扩展管理、多语言切换等 +- **多提供商**:Qwen OAuth(免费)、DashScope、ModelScope、Anthropic、Gemini、Vertex AI、自定义 +- **完整 SDK**:TypeScript SDK + Java SDK,支持编程式集成 +- **扩展兼容**:可转换 Claude Code 插件和 Gemini CLI 扩展格式 + +## 核心功能 + +### 基础能力 +- **终端原生 UI**:基于 Ink 6.2 + React 19 的终端渲染(源码: `packages/cli/src/gemini.tsx`) +- **16 个内置工具**:Edit、WriteFile、ReadFile、Grep、Glob、Shell、TodoWrite、SaveMemory、Agent、Skill、ExitPlanMode、WebFetch、WebSearch、ListFiles、LSP、AskUserQuestion +- **MCP 集成**:Stdio/SSE/Streamable-HTTP 三种传输协议 + MCP OAuth 认证(源码: `packages/core/src/tools/mcp-client.ts`) +- **LSP 集成**:语言服务器协议支持代码智能 +- **多语言 UI**:中/英/日/德/俄/葡 6 种语言(源码: `packages/cli/src/i18n/`) +- **IDE 集成**:VS Code 扩展 + Zed 编辑器扩展 + +### 独特功能 +- **Arena 模式**:多模型在隔离 Git worktree 中竞争执行同一任务,用户选择最佳结果(源码: `packages/core/src/agents/arena/ArenaManager.ts`) +- **三格式扩展兼容**:Qwen 原生 + Claude Code 插件转换器 + Gemini CLI 扩展转换器 +- **免费 OAuth 额度**:通义账号 OAuth2 设备码流程 + PKCE 认证,每天 1000 次免费 +- **多语言国际化**:6 种 UI 语言,对中文开发者极友好 +- **/btw 旁问**:不中断主对话的快速侧边提问 +- **/insight 代码洞察**:分析代码库生成个性化编程洞察 +- **Hook 系统**:14 种事件类型,支持命令式 Hook +- **Skill 系统**:bundled/project/user/extension 四级技能 + +### 与 Gemini CLI 的差异 + +| 类别 | 新增 | 移除 | +|------|------|------| +| 遥测 | 阿里云 RUM 管道 | Google Clearcut 分析 | +| 认证 | Qwen OAuth2 + PKCE | — | +| 模型 | DashScope/DeepSeek/OpenRouter/ModelScope + Anthropic | — | +| 功能 | Arena 多模型竞争 | — | +| 扩展 | Claude Code 插件转换器 | — | +| SDK | Java SDK + Web UI | — | +| UI | 6 种语言国际化 | Google 品牌标识 | + +## 安装 + +```bash +# npm(推荐,需要 Node.js 20+) +npm install -g @qwen-code/qwen-code@latest + +# bun +bun add -g @qwen-code/qwen-code + +# Homebrew(macOS、Linux) +brew install qwen-code + +# 验证安装 +qwen --version +``` + +## 模型支持 + +| 提供商 | 默认模型 | 认证方式 | 免费额度 | +|--------|---------|---------|---------| +| **Qwen OAuth** | coder-model (qwen3.5-plus) | 浏览器 OAuth | 1000 次/天 | +| DashScope | qwen3-coder-plus | API Key | 按量付费 | +| ModelScope | qwen3-coder 系列 | API Key | 按量付费 | +| Anthropic | Claude 系列 | API Key | 无 | +| Google | Gemini 2.0 Flash 等 | API Key | 有限免费 | +| Vertex AI | Gemini 系列 | Service Account | 无 | +| 自定义 | OpenAI 兼容端点 | API Key | 取决于提供商 | + +> 源码: `packages/core/src/core/contentGenerator.ts`(AuthType 枚举: openai, qwen-oauth, gemini, vertex-ai, anthropic) + +## 优势 + +1. **免费额度**:OAuth 登录即享每天 1000 次免费请求 +2. **多语言 UI**:6 种语言本地化,对中文开发者极友好 +3. **多提供商**:不锁定单一模型,灵活切换 +4. **完整 SDK**:TypeScript + Java SDK,支持编程式集成 +5. **大厂支持**:阿里云官方维护,持续更新 +6. **扩展兼容**:可转换 Claude/Gemini 扩展格式 +7. **Arena 创新**:多模型竞争执行,提升输出质量 + +## 劣势 + +1. **基于分叉**:部分变量名/结构仍带 Gemini 痕迹 +2. **较新项目**:生态系统不如 Claude Code/Aider 成熟 +3. **文档较少**:英文资源有限 +4. **社区较小**:相比 Claude Code/Aider 用户较少 + +## 使用场景 + +- **最适合**:中文开发者、需要免费额度的用户、阿里云生态用户 +- **适合**:日常编码、多提供商切换、SDK 集成 +- **不太适合**:需要极强推理能力的复杂任务(受限于模型能力) + +## 相关项目 + +- **通义灵码**:IDE 插件,类似 GitHub Copilot,实时补全。与 Qwen Code CLI 互补 +- [Google Gemini CLI](https://github.com/google-gemini/gemini-cli):上游项目 + +## 资源链接 + +- [GitHub](https://github.com/QwenLM/qwen-code) +- [文档](https://qwenlm.github.io/qwen-code-docs/zh/) +- [官网](https://qwen.ai/qwencode) +- [阿里云文档](https://help.aliyun.com/zh/model-studio/qwen-code) diff --git a/docs/tools/qwen-code/02-commands.md b/docs/tools/qwen-code/02-commands.md new file mode 100644 index 00000000..efedc40a --- /dev/null +++ b/docs/tools/qwen-code/02-commands.md @@ -0,0 +1,162 @@ +# 2. Qwen Code 命令系统 + +Qwen Code 提供 41 个内置斜杠命令,加上从 MCP prompts、bundled skills 和用户自定义文件动态加载的命令。 + +> 源码: `packages/cli/src/services/BuiltinCommandLoader.ts`(注册所有内置命令) +> +> **注**: 本文档统计为 41 个命令。v0.12 及更早版本为 40 个(39 斜杠 + 1 Skill `/review`), +> v0.13.0 新增 `/loop` 命令(源码: `commands/loopCommand.ts`),增至 41。 + +## 命令加载机制 + +命令有 4 个来源(按优先级): + +| 来源 | 加载器 | 位置 | +|------|--------|------| +| 内置命令 | `BuiltinCommandLoader` | `packages/cli/src/ui/commands/*.ts` | +| MCP 提示 | `McpPromptLoader` | MCP 服务器暴露的 prompts | +| 技能命令 | `BundledSkillLoader` | `.qwen/skills/` | +| 文件命令 | `FileCommandLoader` | `.qwen/commands/*.md` 或 `~/.qwen/commands/*.md` | + +## 内置命令一览 + +### 核心命令 + +| 命令 | 别名 | 用途 | 源码 | +|------|------|------|------| +| `/help` | `?` | 显示帮助信息 | `commands/helpCommand.ts` | +| `/status` | `about` | 显示版本信息 | `commands/aboutCommand.ts` | +| `/auth` | `login` | 管理认证与登录 | `commands/authCommand.ts` | +| `/model` | — | 切换模型 | `commands/modelCommand.ts` | +| `/clear` | `reset`, `new` | 清除对话历史 | `commands/clearCommand.ts` | +| `/compress` | `summarize` | 压缩上下文 | `commands/compressCommand.ts` | +| `/context` | — | 查看 token 用量 | `commands/contextCommand.ts` | +| `/copy` | — | 复制上次回复 | `commands/copyCommand.ts` | +| `/tools` | — | 查看可用工具列表 | `commands/toolsCommand.ts` | +| `/settings` | — | 查看/修改设置 | `commands/settingsCommand.ts` | +| `/permissions` | — | 管理权限规则 | `commands/permissionsCommand.ts` | +| `/memory` | — | 查看/编辑记忆 | `commands/memoryCommand.ts` | +| `/mcp` | — | 管理 MCP 服务器 | `commands/mcpCommand.ts` | + +### 会话管理 + +| 命令 | 别名 | 用途 | 源码 | +|------|------|------|------| +| `/restore` | — | 恢复历史会话检查点 | `commands/restoreCommand.ts` | +| `/resume` | — | 继续上次会话 | `commands/resumeCommand.ts` | +| `/export` | — | 导出当前会话 | `commands/exportCommand.ts` | +| `/quit` | `exit` | 退出 | `commands/quitCommand.ts` | + +### 开发辅助 + +| 命令 | 别名 | 用途 | 源码 | +|------|------|------|------| +| `/agents` | — | 管理子代理 | `commands/agentsCommand.ts` | +| `/skills` | — | 查看可用技能 | `commands/skillsCommand.ts` | +| `/approval-mode` | — | 切换审批模式(plan/default/auto-edit/yolo) | `commands/approvalModeCommand.ts` | +| `/stats` | `usage` | 显示统计信息 | `commands/statsCommand.ts` | +| `/editor` | — | 设置外部编辑器 | `commands/editorCommand.ts` | +| `/hooks` | — | 管理 Hook 配置 | `commands/hooksCommand.ts` | +| `/init` | — | 初始化项目配置(生成 QWEN.md) | `commands/initCommand.ts` | +| `/trust` | — | 管理信任设置 | `commands/trustCommand.ts` | +| `/summary` | — | 生成对话摘要 | `commands/summaryCommand.ts` | +| `/setup-github` | — | 设置 GitHub Actions | `commands/setupGithubCommand.ts` | + +### 终端与 UI + +| 命令 | 别名 | 用途 | 源码 | +|------|------|------|------| +| `/theme` | — | 切换颜色主题 | `commands/themeCommand.ts` | +| `/vim` | — | 切换 Vim 编辑模式 | `commands/vimCommand.ts` | +| `/terminal-setup` | — | 配置终端集成 | `commands/terminalSetupCommand.ts` | +| `/ide` | — | IDE 集成管理 | `commands/ideCommand.ts` | +| `/directory` | `dir` | 目录管理 | `commands/directoryCommand.tsx` | +| `/language` | — | 切换 UI 语言 | `commands/languageCommand.ts` | + +### 信息与反馈 + +| 命令 | 别名 | 用途 | 源码 | +|------|------|------|------| +| `/bug` | — | 报告 Bug | `commands/bugCommand.ts` | +| `/docs` | — | 打开文档 | `commands/docsCommand.ts` | + +### Qwen Code 独有命令 + +| 命令 | 用途 | 源码 | +|------|------|------| +| `/arena` | **Arena 模式**——多模型在隔离 Git worktree 中竞争执行 | `commands/arenaCommand.ts` | +| `/language` | **切换 UI 语言**(中/英/日/德/俄/葡) | `commands/languageCommand.ts` | +| `/insight` | **代码洞察**——分析代码库生成个性化洞察 | `commands/insightCommand.ts` | +| `/extensions` | **扩展管理**——安装/卸载/列表 | `commands/extensionsCommand.ts` | +| `/btw` | **快速旁问**——不中断主对话的侧边提问 | `commands/btwCommand.ts` | + +### Skill 命令 + +| 命令 | 用途 | 实现 | +|------|------|------| +| `/review` | 代码审查(四代理并行) | Skill(`skills/bundled/review/SKILL.md`) | + +> `/review` 的四个审查维度(源码: `packages/core/src/skills/bundled/review/SKILL.md`): +> 1. **Correctness & Security** — 逻辑错误、空值处理、竞态条件、注入漏洞 +> 2. **Code Quality** — 代码风格一致性、命名规范、重复代码 +> 3. **Performance** — N+1 查询、内存泄漏、不必要重渲染 +> 4. **Undirected Audit** — 无预设维度,全新视角审查 + +## 子命令 + +| 父命令 | 子命令 | 用途 | +|--------|--------|------| +| `/agents` | `manage` | 管理子代理(查看/编辑/删除) | +| `/agents` | `create` | 创建新子代理 | +| `/arena` | `start` | 启动 Arena 会话 | +| `/arena` | `stop` | 停止 Arena 会话 | +| `/arena` | `status` | 查看 Arena 状态 | +| `/arena` | `select` / `choose` | 选择最佳结果并合并 diff | +| `/directory` | `add` | 添加目录到工作区 | +| `/directory` | `show` | 显示所有工作区目录 | +| `/export` | `html` / `md` / `json` / `jsonl` | 导出为不同格式 | +| `/extensions` | `explore` | 打开扩展市场 | +| `/extensions` | `install` | 安装扩展 | +| `/extensions` | `manage` | 管理已安装扩展 | +| `/hooks` | `list` / `enable` / `disable` | 列出/启用/禁用 Hook | +| `/ide` | `status` / `install` / `enable` / `disable` | IDE 集成管理 | +| `/language` | `ui` | 设置 UI 语言 | +| `/memory` | `show` / `add` / `refresh` | 查看/添加/刷新记忆 | +| `/stats` | `model` / `tools` | 模型/工具使用统计 | + +## CLI 参数 + +```bash +# 交互模式 +qwen + +# 直接提问 +qwen "解释这段代码" + +# 非交互模式 +qwen --non-interactive --prompt "重构 auth 模块" + +# 使用特定模型 +qwen --model qwen3-coder-plus + +# 指定 API Key +qwen --api-key $DASHSCOPE_API_KEY + +# 恢复会话 +qwen --resume + +# 指定会话 ID +qwen --session-id +``` + +## 与 Gemini CLI 命令对比 + +| 命令 | Gemini CLI | Qwen Code | 差异 | +|------|-----------|-----------|------| +| `/arena` | ❌ | ✅ | Qwen 新增 | +| `/language` | ❌ | ✅ | Qwen 新增 | +| `/insight` | ❌ | ✅ | Qwen 新增 | +| `/extensions` | ❌ | ✅ | Qwen 新增(Gemini 用 `/mcp`) | +| `/btw` | ❌ | ✅ | Qwen 新增 | +| `/approval-mode` | `/plan` | `/approval-mode` | 重命名,增加 auto-edit/yolo | +| 其余命令 | ✅ | ✅ | 继承,功能一致 | diff --git a/docs/tools/qwen-code/03-architecture.md b/docs/tools/qwen-code/03-architecture.md new file mode 100644 index 00000000..1b6bc716 --- /dev/null +++ b/docs/tools/qwen-code/03-architecture.md @@ -0,0 +1,279 @@ +# 3. Qwen Code 技术架构 + +> 以下基于 v0.13.0 源码分析(commit `0b8ff03f8`,2026-03-26)。 + +## Monorepo 结构 + +``` +qwen-code/ +├── packages/cli/ # CLI 界面(Ink/React TUI) +│ └── src/ +│ ├── gemini.tsx # 主入口(交互模式) +│ ├── nonInteractiveCli.ts # 非交互模式入口 +│ ├── ui/commands/ # 41 个斜杠命令实现 +│ ├── services/ # 命令加载、会话管理 +│ ├── config/ # 设置加载、schema、迁移 +│ └── i18n/ # 6 种语言国际化 +├── packages/core/ # 核心引擎 +│ └── src/ +│ ├── core/ # 客户端、调度器、内容生成器 +│ │ ├── client.ts # GeminiClient 主客户端 +│ │ ├── geminiChat.ts # 聊天会话管理 +│ │ ├── coreToolScheduler.ts # 工具调度器(1790 行) +│ │ ├── baseLlmClient.ts # LLM 客户端基类 +│ │ └── contentGenerator.ts # AuthType 枚举 + 多后端 +│ ├── tools/ # 16 个内置工具 +│ ├── config/ # 核心配置(config.ts 2200+ 行) +│ ├── hooks/ # Hook 系统(15 个文件) +│ ├── skills/ # Skill 系统 +│ ├── subagents/ # 子代理系统 +│ ├── agents/ # Agent 运行时 + Arena +│ ├── extension/ # 扩展管理器 + 转换器 +│ ├── permissions/ # 权限系统 +│ ├── qwen/ # Qwen 专用(OAuth、内容生成器) +│ ├── mcp/ # MCP 客户端 + OAuth +│ ├── telemetry/ # 遥测(OpenTelemetry + RUM) +│ └── services/ # 会话、压缩、循环检测等 +├── packages/webui/ # Web UI 组件 +├── packages/sdk-typescript/ # TypeScript SDK +├── packages/sdk-java/ # Java SDK +├── packages/vscode-ide-companion/ # VS Code 扩展 +├── packages/zed-extension/ # Zed 编辑器扩展 +├── packages/web-templates/ # Web 模板 +└── packages/test-utils/ # 测试工具 +``` + +## 核心架构 + +``` +CLI (Ink/React TUI) + │ + ▼ +GeminiClient (packages/core/src/core/client.ts) + │ 管理聊天历史、发送消息 + ▼ +GeminiChat (packages/core/src/core/geminiChat.ts) + │ LLM 聊天会话 + ▼ +ContentGenerator(多后端抽象) + ├── GeminiContentGenerator # Google Gemini API + ├── OpenAIContentGenerator # OpenAI 兼容 API + ├── QwenContentGenerator # Qwen 专用(扩展 OpenAI) + └── AnthropicContentGenerator # Anthropic Claude API + │ + ▼ +CoreToolScheduler (packages/core/src/core/coreToolScheduler.ts) + │ 工具调度、确认、执行、结果处理(1790 行) + ▼ +PermissionManager (packages/core/src/permissions/) + │ deny > ask > allow > default 优先级 + ▼ +ToolRegistry → Tool 执行 → 文件系统/Shell +``` + +## Agent Loop(工具执行循环) + +源码: `packages/core/src/core/coreToolScheduler.ts` + +``` +用户输入 → LLM 生成响应(含工具调用) + → 参数校验 (validating) + → 权限检查 (getDefaultPermission) + → Hook 触发 (PreToolUse) + → 用户确认 (awaiting_approval) + → 工具执行 (executing) + → Hook 触发 (PostToolUse) + → 结果返回 LLM + → 重复直到 LLM 不再生成工具调用 +``` + +## 内容生成器(LLM 后端) + +| 后端 | 类 | 源码 | +|------|------|------| +| OpenAI 兼容 | `OpenAIContentGenerator` | `core/openaiContentGenerator/openaiContentGenerator.ts` | +| Qwen(扩展 OpenAI) | `QwenContentGenerator` | `qwen/qwenContentGenerator.ts` | +| Google Gemini | `GeminiContentGenerator` | `core/geminiContentGenerator/geminiContentGenerator.ts` | +| Anthropic | `AnthropicContentGenerator` | `core/anthropicContentGenerator/anthropicContentGenerator.ts` | + +认证类型枚举(源码: `packages/core/src/core/contentGenerator.ts`): +- `openai` — OpenAI 兼容 API(API Key) +- `qwen-oauth` — Qwen OAuth2 + PKCE(设备码流程) +- `gemini` — Google Gemini +- `vertex-ai` — Google Vertex AI +- `anthropic` — Anthropic Claude + +## Arena 多模型竞争模式 + +源码: `packages/core/src/agents/arena/` + +| 组件 | 文件 | 用途 | +|------|------|------| +| ArenaManager | `ArenaManager.ts`(1649 行) | 编排多模型竞争执行 | +| ArenaAgentClient | `ArenaAgentClient.ts` | 单个 Arena 代理客户端 | +| 类型定义 | `types.ts` | ArenaConfig, ArenaAgentState | +| 事件 | `arena-events.ts` | SESSION_START, AGENT_START, AGENT_COMPLETE 等 | + +**工作流程:** +1. 用户通过 `/arena start --models model1,model2 "task"` 启动 +2. ArenaManager 为每个模型创建独立 Git worktree +3. 每个模型在并行子进程中运行(`AgentHeadless` 非交互运行时) +4. 用户通过 `/arena select` 选择最佳结果,合并 diff + +**后端**(源码: `packages/core/src/agents/backends/`): +- `TmuxBackend` — tmux 面板运行 +- `InProcessBackend` — 进程内运行(SDK 模式) +- `ITermBackend` — iTerm2 集成 +- 后端自动检测: `backends/detect.ts` + +## MCP 集成 + +源码: `packages/core/src/tools/` + +| 组件 | 文件 | 用途 | +|------|------|------| +| McpClientManager | `mcp-client-manager.ts` | 管理所有 MCP 连接 | +| McpClient | `mcp-client.ts`(1451 行) | 单个 MCP 客户端 | +| DiscoveredMCPTool | `mcp-tool.ts` | MCP 工具包装 | +| MCP OAuth | `../mcp/oauth-provider.ts`(960 行) | OAuth2/OIDC + PKCE | +| MCP Token 存储 | `../mcp/oauth-token-storage.ts` | 持久化令牌 | + +**传输协议:** Stdio、SSE、Streamable-HTTP、SDK Control(IDE 集成) + +## 扩展系统 + +源码: `packages/core/src/extension/` + +| 组件 | 文件 | 用途 | +|------|------|------| +| ExtensionManager | `extensionManager.ts`(1392 行) | 安装/加载/管理扩展 | +| Claude 转换器 | `claude-converter.ts`(824 行) | Claude Code 插件 → Qwen 格式 | +| Gemini 转换器 | `gemini-converter.ts` | Gemini CLI 扩展 → Qwen 格式 | +| Marketplace | `marketplace.ts` | GitHub 仓库安装 | + +**扩展能力:** MCP 服务器、Hooks、命令、Skills、子代理、输出样式、LSP 服务器 + +## Hook 系统 + +源码: `packages/core/src/hooks/`(15 个文件) + +**事件类型(14 种):** + +| 事件 | 触发时机 | +|------|---------| +| PreToolUse | 工具执行前 | +| PostToolUse | 工具执行后 | +| PostToolUseFailure | 工具执行失败后 | +| Notification | 通知 | +| UserPromptSubmit | 用户提交输入 | +| SessionStart | 会话开始 | +| SessionEnd | 会话结束 | +| Stop | 代理停止 | +| SubagentStart | 子代理启动 | +| SubagentStop | 子代理停止 | +| PreCompact | 上下文压缩前 | +| PermissionRequest | 权限请求 | + +**Hook 类型:** 命令式(执行 Shell 命令) + +## Skill 系统 + +源码: `packages/core/src/skills/` + +| 组件 | 文件 | 用途 | +|------|------|------| +| SkillManager | `skill-manager.ts` | 管理技能生命周期 | +| Skill Loader | `skill-load.ts` | 从磁盘加载 | +| Types | `types.ts` | SkillConfig, SkillLevel | + +**四级技能:** `bundled` > `project`(`.qwen/skills/`)> `user`(`~/.qwen/skills/`)> `extension` + +**技能格式:** `SKILL.md`(YAML frontmatter + Markdown 正文),通过 `skill` 工具注入 LLM 上下文。 + +## 子代理系统 + +源码: `packages/core/src/subagents/` + `packages/core/src/agents/` + +| 组件 | 文件 | 用途 | +|------|------|------| +| SubagentManager | `subagents/subagent-manager.ts` | 管理子代理配置 | +| BuiltinAgentRegistry | `subagents/builtin-agents.ts` | 内置代理注册 | +| AgentHeadless | `agents/runtime/agent-headless.ts` | 无头运行时 | +| AgentInteractive | `agents/runtime/agent-interactive.ts` | 交互运行时 | +| AgentCore | `agents/runtime/agent-core.ts` | 核心代理逻辑 | + +**内置代理:** +- `general-purpose` — 研究、搜索、多步骤任务 +- `Explore` — 快速代码库探索(只读) + +**代理级别:** `session` > `project` > `user` > `extension` > `builtin` + +## 会话管理 + +| 服务 | 文件 | 用途 | +|------|------|------| +| SessionService | `services/sessionService.ts` | JSONL 格式会话持久化 | +| ChatCompressionService | `services/chatCompressionService.ts` | 上下文压缩 | +| LoopDetectionService | `services/loopDetectionService.ts` | 重复循环检测 | +| ChatRecordingService | `services/chatRecordingService.ts` | 聊天记录 | +| GitWorktreeService | `services/gitWorktreeService.ts` | Arena 的 Git worktree | + +## 配置系统 + +**存储路径(源码: `packages/core/src/config/storage.ts`):** + +| 路径 | 用途 | +|------|------| +| `~/.qwen/settings.json` | 全局设置 | +| `/.qwen/settings.json` | 项目设置 | +| `~/.qwen/memory.md` | 全局记忆 | +| `~/.qwen/commands/*.md` | 全局自定义命令 | +| `~/.qwen/agents/` | 全局子代理 | +| `~/.qwen/skills/` | 全局技能 | +| `/.qwen/skills/` | 项目技能 | +| `/.qwen/agents/` | 项目代理 | +| `QWEN.md` / `AGENTS.md` | 项目上下文文件 | +| `~/.qwen/oauth_creds.json` | OAuth 凭据 | +| `~/.qwen/oauth_creds.lock` | 跨进程令牌锁 | + +**设置 Schema:** `packages/cli/src/config/settingsSchema.ts` + 版本化迁移(`migration/`) + +**配置优先级:** managed > user > project > environment variables + +## 认证系统 + +### Qwen OAuth2(源码: `packages/core/src/qwen/qwenOAuth2.ts`,1018 行) + +- 设备码流程 + PKCE(RFC 7636) +- 端点: `https://chat.qwen.ai/api/v1/oauth2/device/code` +- Client ID: `f0304373b74a44d2b584a3fb70ca9e56` +- 共享令牌管理器: `sharedTokenManager.ts` +- 凭据存储: `~/.qwen/oauth_creds.json` + +### MCP OAuth(源码: `packages/core/src/mcp/oauth-provider.ts`,960 行) + +- 完整 OAuth2 授权码流程 + PKCE +- 动态客户端注册 +- 令牌存储: `~/.qwen/mcp-oauth-tokens.json` + +## 权限系统 + +源码: `packages/core/src/permissions/` + +- 权限级别: `allow` / `ask` / `deny` +- Shell 命令语义分析(`extractShellOperations`) +- 路径/命令模式匹配 +- 审批模式: `default` / `plan` / `auto_edit` / `yolo` + +## 技术栈 + +| 组件 | 技术 | +|------|------| +| 语言 | TypeScript 5.3+(严格模式) | +| 运行时 | Node.js 20+ | +| CLI 框架 | Ink 6.2 + React 19 | +| 构建 | esbuild | +| 模型 SDK | Google Genai SDK + OpenAI SDK + Anthropic SDK | +| MCP SDK | @modelcontextprotocol/sdk v1.25 | +| 数据库 | JSONL(会话存储) | +| 测试 | Vitest | diff --git a/docs/tools/qwen-code/04-tools.md b/docs/tools/qwen-code/04-tools.md new file mode 100644 index 00000000..77ac540b --- /dev/null +++ b/docs/tools/qwen-code/04-tools.md @@ -0,0 +1,139 @@ +# 4. Qwen Code 工具系统 + +Qwen Code 内置 16 个核心工具,加上通过 MCP 动态发现的工具和命令发现的工具。 + +> 源码: `packages/core/src/config/config.ts`(L2146-2194 工具注册) +> 工具名称定义: `packages/core/src/tools/tool-names.ts` + +## 工具注册机制 + +| 来源 | 注册方式 | 位置 | +|------|---------|------| +| 核心工具 | `config.ts` 静态注册 | `packages/core/src/tools/*.ts` | +| MCP 工具 | `McpClientManager` 动态发现 | `packages/core/src/tools/mcp-client-manager.ts` | +| 发现的工具 | `ToolRegistry` 运行时注册 | `packages/core/src/tools/tool-registry.ts` | + +## 核心工具(16 个) + +### 文件操作 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **ReadFile** | Read | 读取文件内容,支持行范围、图片/PDF | `file_path`, `offset?`, `limit?` | `tools/read-file.ts` | +| **WriteFile** | Edit | 创建/覆写文件 | `file_path`, `content` | `tools/write-file.ts` | +| **Edit** | Edit | 精确文本替换(old_string → new_string) | `file_path`, `old_string`, `new_string`, `replace_all?` | `tools/edit.ts` | +| **ListFiles** | Read | 列出目录内容 | `path`, `ignore?`, `file_filtering_options?` | `tools/ls.ts` | + +### 搜索 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **Grep** | Search | 基于 ripgrep 的正则搜索 | `pattern`, `path?`, `glob?`, `limit?` | `tools/grep.ts` | +| **Glob** | Search | 文件模式匹配 | `pattern`, `path?` | `tools/glob.ts` | + +### 执行 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **Shell** | Execute | 执行 Shell 命令 | `command`, `is_background?`, `timeout?`, `description?`, `directory?` | `tools/shell.ts` | + +### 网络 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **WebFetch** | Fetch | 抓取 URL 内容并用 AI 处理 | `url`, `prompt` | `tools/web-fetch.ts` | +| **WebSearch** | Fetch | Web 搜索(Tavily/Google/DashScope) | `query`, `provider?` | `tools/web-search/index.ts` | + +> WebSearch 提供商(源码: `packages/core/src/tools/web-search/providers/`): +> - Tavily: `providers/tavily-provider.ts` +> - Google: `providers/google-provider.ts` +> - DashScope: `providers/dashscope-provider.ts` + +### 任务管理 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **TodoWrite** | Other | 创建/管理结构化任务列表 | `todos[]` | `tools/todoWrite.ts` | + +### 记忆 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **SaveMemory** | Edit | 保存信息到长期记忆 | `fact`, `scope`("global"/"project") | `tools/memoryTool.ts` | + +### 代理与技能 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **Agent** | Other | 启动子代理处理复杂任务 | `skill?`, 动态参数 | `tools/agent.ts` | +| **Skill** | Read | 执行技能 | `skill` | `tools/skill.ts` | +| **ExitPlanMode** | Other | 退出规划模式 | (无) | `tools/exitPlanMode.ts` | + +### 交互 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **AskUserQuestion** | Other | 执行期间向用户提问 | `questions[]` | `tools/askUserQuestion.ts` | + +### 代码智能 + +| 工具 | Kind | 用途 | 关键参数 | 源码 | +|------|------|------|---------|------| +| **LSP** | Other | 语言服务器协议集成 | (动态) | `tools/lsp.ts` | + +## 条件工具 + +| 工具 | 条件 | 源码 | +|------|------|------| +| **ripGrep** | 系统安装了 ripgrep 时替代内置 Grep | `tools/ripGrep.ts` | + +## MCP 动态工具 + +MCP 工具通过 `McpClientManager` 在运行时动态发现: + +``` +McpClientManager → McpClient.list_tools() → DiscoveredMCPTool[] +``` + +MCP 工具以 `mcp__serverName__toolName` 格式注册到 `ToolRegistry`。 + +## 工具权限分类 + +每个工具有 Kind 属性,影响权限行为: + +| Kind | 默认权限行为 | 工具 | +|------|-------------|------| +| Read | 较宽松 | ReadFile, ListFiles, Grep, Glob, Skill | +| Edit | 需确认 | WriteFile, Edit, SaveMemory | +| Execute | 严格确认 | Shell | +| Fetch | 需确认 | WebFetch, WebSearch | +| Other | 视情况 | TodoWrite, Agent, ExitPlanMode, LSP, AskUserQuestion | + +## 工具调度管线 + +源码: `packages/core/src/core/coreToolScheduler.ts`(1790 行) + +``` +LLM 工具调用请求 + │ + ▼ +参数校验 → validating 状态 + │ + ▼ +权限检查 → getDefaultPermission() + │ deny > ask > allow > default + ▼ +Hook 触发 → PreToolUse + │ + ▼ +用户确认 → awaiting_approval(plan/default 模式) + │ + ▼ +工具执行 → executing 状态 + │ 支持实时输出流、超时控制 + ▼ +Hook 触发 → PostToolUse / PostToolUseFailure + │ + ▼ +结果返回 LLM → 继续循环或完成 +``` diff --git a/docs/tools/qwen-code/EVIDENCE.md b/docs/tools/qwen-code/EVIDENCE.md index 76b9c0b4..8c2a1656 100644 --- a/docs/tools/qwen-code/EVIDENCE.md +++ b/docs/tools/qwen-code/EVIDENCE.md @@ -37,8 +37,8 @@ - DeepSeek 端点: https://api.deepseek.com/v1 - OpenRouter 端点: https://openrouter.ai/api/v1 -## 命令系统(40+ 命令) -继承 Gemini CLI + 新增: /arena, /language, /insight, /extensions +## 命令系统(41 命令,v0.13.0) +继承 Gemini CLI + 新增: /arena, /language, /insight, /extensions, /loop ## Arena 模式(全新,Qwen 添加) - 多模型竞争执行,每个模型在隔离 git worktree 中运行 @@ -54,7 +54,7 @@ ## 安全系统(继承 Gemini CLI) - 权限: allow/ask/deny + glob 模式 + shell 语义分析 - 审批模式: plan/default/auto-edit/yolo -- Hook 系统: 11 事件 (PreToolUse, PostToolUse, etc.) +- Hook 系统: 14 事件 (PreToolUse, PostToolUse, PostToolUseFailure, Notification, UserPromptSubmit, SessionStart, SessionEnd, Stop, SubagentStart, SubagentStop, PreCompact, PermissionRequest 等) - 沙箱: 继承 Gemini 实现 ## 与 Gemini CLI 的差异 @@ -73,4 +73,4 @@ 2. Google 品牌标识 ### 保留 -OpenTelemetry, Gemini/Vertex AI, MCP, 权限系统, Hook 系统, Skill 系统, 工具系统(18个), IDE 集成, LSP +OpenTelemetry, Gemini/Vertex AI, MCP, 权限系统, Hook 系统(14事件), Skill 系统, 工具系统(16核心), IDE 集成, LSP diff --git a/docs/tools/qwen-code/README.md b/docs/tools/qwen-code/README.md index f3e2c8ba..21331cd6 100644 --- a/docs/tools/qwen-code/README.md +++ b/docs/tools/qwen-code/README.md @@ -1,11 +1,15 @@ # Qwen Code 文档 -> 阿里云 Qwen 团队 AI 编程代理(Gemini CLI 分叉,Apache-2.0) +> 阿里云 Qwen 团队 AI 编程代理(Gemini CLI 分叉,Apache-2.0,v0.13.0) | 文档 | 内容 | |------|------| -| [用户指南](../../guides/qwen-code-user-guide.md) | 安装、免费使用、Arena 模式、40 命令 | +| [01-overview.md](./01-overview.md) | 概述、核心功能、安装、模型支持 | +| [02-commands.md](./02-commands.md) | 41 个斜杠命令、子命令、CLI 参数 | +| [03-architecture.md](./03-architecture.md) | 技术架构、Agent Loop、Arena、扩展系统 | +| [04-tools.md](./04-tools.md) | 16 个核心工具、MCP 动态工具、权限分类 | | [EVIDENCE.md](./EVIDENCE.md) | 源码分析证据(遥测、认证、模型、Arena) | +| [用户指南](../../guides/qwen-code-user-guide.md) | 安装、免费使用、Arena 模式 | **仓库:** [github.com/QwenLM/qwen-code](https://github.com/QwenLM/qwen-code) -**Stars:** 21k+ | **许可证:** Apache-2.0 +**Stars:** 21k+ | **许可证:** Apache-2.0 | **语言:** TypeScript