品牌重塑: - Claude Code → Claw Code - .claude → .claw 配置目录 - CLAUDE_* → CLAW_* 环境变量 新增功能: - 多 Provider 架构 (ClawApi/Xai/OpenAI) - 插件系统 (生命周期/钩子/工具扩展) - LSP 集成 (诊断/代码智能) - Hook 系统 (PreToolUse/PostToolUse) - 独立 CLI (claw-cli) - HTTP Server (Axum/SSE) - Slash Commands 扩展 (branch/worktree/commit/pr/plugin等) 优化改进: - Compaction 支持增量压缩 - 全局工具注册表 - 配置文件统一为 .claw.json
215 lines
9.9 KiB
Markdown
215 lines
9.9 KiB
Markdown
# 差异化缺口分析 (PARITY GAP ANALYSIS)
|
||
|
||
范围:对位于 `/home/bellman/Workspace/claw-code/src/` 的原始 TypeScript 源码与 `rust/crates/` 下的 Rust 移植版进行只读对比。
|
||
|
||
方法:仅对比功能表面、注册表、入口点和运行时流水线。未复制任何 TypeScript 源码。
|
||
|
||
## 主要摘要
|
||
|
||
Rust 移植版在以下方面具有良好的基础:
|
||
- Anthropic API/OAuth 基础
|
||
- 本地对话/会话状态
|
||
- 核心工具循环
|
||
- MCP stdio/引导支持
|
||
- CLAW.md 发现
|
||
- 一套小巧但可用的内置工具
|
||
|
||
它与 TypeScript CLI **尚未实现功能对等**。
|
||
|
||
最大的缺口:
|
||
- **插件 (plugins)**:在 Rust 中实际上不存在
|
||
- **挂钩 (hooks)**:Rust 中已解析但未执行
|
||
- **CLI 广度**:Rust 中的功能范围要窄得多
|
||
- **技能 (skills)**:Rust 中仅支持本地文件,没有 TS 的注册表/捆绑流水线
|
||
- **助手编排 (assistant orchestration)**:缺乏 TS 中感知挂钩的编排以及远程/结构化传输
|
||
- **服务 (services)**:除了核心 API/OAuth/MCP 之外,Rust 中大部分服务都缺失
|
||
|
||
---
|
||
|
||
## tools/ (工具)
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/tools/` 包含广泛的工具家族,包括 `AgentTool`、`AskUserQuestionTool`、`BashTool`、`ConfigTool`、`FileReadTool`、`FileWriteTool`、`GlobTool`、`GrepTool`、`LSPTool`、`ListMcpResourcesTool`、`MCPTool`、`McpAuthTool`、`ReadMcpResourceTool`、`RemoteTriggerTool`、`ScheduleCronTool`、`SkillTool`、`Task*`、`Team*`、`TodoWriteTool`、`ToolSearchTool`、`WebFetchTool`、`WebSearchTool`。
|
||
- 工具执行/编排分散在 `src/services/tools/StreamingToolExecutor.ts`、`src/services/tools/toolExecution.ts`、`src/services/tools/toolHooks.ts` 和 `src/services/tools/toolOrchestration.ts` 中。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- 工具注册表通过 `mvp_tool_specs()` 集中在 `rust/crates/tools/src/lib.rs` 中。
|
||
- 当前内置工具包括 shell/文件/搜索/网页/待办事项/技能/代理/配置/笔记本/REPL/PowerShell 原语。
|
||
- 运行时执行通过 `rust/crates/tools/src/lib.rs` 和 `rust/crates/runtime/src/conversation.rs` 连接。
|
||
|
||
### Rust 中缺失或损坏
|
||
- 重大 TS 工具在 Rust 中没有等效项,例如 `AskUserQuestionTool`、`LSPTool`、`ListMcpResourcesTool`、`MCPTool`、`McpAuthTool`、`ReadMcpResourceTool`、`RemoteTriggerTool`、`ScheduleCronTool`、`Task*`、`Team*` 以及多个工作流/系统工具。
|
||
- Rust 工具表面仍明确是一个 MVP(最小可行产品)注册表,而非对等注册表。
|
||
- Rust 缺乏 TS 的分层工具编排拆分。
|
||
|
||
**状态:** 仅部分核心功能。
|
||
|
||
---
|
||
|
||
## hooks/ (挂钩)
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/commands/hooks/` 下的挂钩命令表面。
|
||
- `src/services/tools/toolHooks.ts` 和 `src/services/tools/toolExecution.ts` 中的运行时挂钩机制。
|
||
- TS 支持 `PreToolUse`、`PostToolUse` 以及通过设置配置并记录在 `src/skills/bundled/updateConfig.ts` 中的更广泛的挂钩驱动行为。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- 挂钩配置在 `rust/crates/runtime/src/config.rs` 中被解析和合并。
|
||
- 挂钩配置可以通过 `rust/crates/commands/src/lib.rs` 和 `rust/crates/claw-cli/src/main.rs` 中的 Rust 配置报告进行检查。
|
||
- `rust/crates/runtime/src/prompt.rs` 中的提示指南提到了挂钩。
|
||
|
||
### Rust 中缺失或损坏
|
||
- `rust/crates/runtime/src/conversation.rs` 中没有实际的挂钩执行流水线。
|
||
- 没有 `PreToolUse`/`PostToolUse` 的变异/拒绝/重写/结果挂钩行为。
|
||
- 没有 Rust 的 `/hooks` 对等命令。
|
||
|
||
**状态:** 仅配置支持;运行时行为缺失。
|
||
|
||
---
|
||
|
||
## plugins/ (插件)
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/plugins/builtinPlugins.ts` 和 `src/plugins/bundled/index.ts` 中的内置插件脚手架。
|
||
- `src/services/plugins/PluginInstallationManager.ts` 和 `src/services/plugins/pluginOperations.ts` 中的插件生命周期/服务。
|
||
- `src/commands/plugin/` 和 `src/commands/reload-plugins/` 下的 CLI/插件命令表面。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- `rust/crates/` 下没有出现专门的插件子系统。
|
||
- 仓库范围内对插件的 Rust 引用除了文本/帮助提到外,实际上不存在。
|
||
|
||
### Rust 中缺失或损坏
|
||
- 没有插件加载器。
|
||
- 没有市场安装/更新/启用/禁用流程。
|
||
- 没有 `/plugin` 或 `/reload-plugins` 对等命令。
|
||
- 没有插件提供的挂钩/工具/命令/MCP 扩展路径。
|
||
|
||
**状态:** 缺失。
|
||
|
||
---
|
||
|
||
## skills/ 与 CLAW.md 发现
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/skills/loadSkillsDir.ts`、`src/skills/bundledSkills.ts` 和 `src/skills/mcpSkillBuilders.ts` 中的技能加载/注册流水线。
|
||
- `src/skills/bundled/` 下的捆绑技能。
|
||
- `src/commands/skills/` 下的技能命令表面。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- `rust/crates/tools/src/lib.rs` 中的 `Skill` 工具可以解析并读取本地 `SKILL.md` 文件。
|
||
- `rust/crates/runtime/src/prompt.rs` 中实现了 `CLAW.md` 发现。
|
||
- Rust 通过 `rust/crates/commands/src/lib.rs` 和 `rust/crates/claw-cli/src/main.rs` 支持 `/memory` 和 `/init`。
|
||
|
||
### Rust 中缺失或损坏
|
||
- 没有等效的捆绑技能注册表。
|
||
- 没有 `/skills` 命令。
|
||
- 没有 MCP 技能构建器流水线。
|
||
- 没有类似 TS 的实时技能发现/重载/更改处理。
|
||
- 没有围绕技能的会话记忆 (session-memory) / 团队记忆 (team-memory) 集成。
|
||
|
||
**状态:** 仅支持基础的本地技能加载。
|
||
|
||
---
|
||
|
||
## cli/ (命令行界面)
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/commands/` 下庞大的命令表面,包括 `agents`、`hooks`、`mcp`、`memory`、`model`、`permissions`、`plan`、`plugin`、`resume`、`review`、`skills`、`tasks` 等。
|
||
- `src/cli/structuredIO.ts`、`src/cli/remoteIO.ts` 和 `src/cli/transports/*` 中的结构化/远程传输栈。
|
||
- `src/cli/handlers/*` 中的 CLI 处理程序拆分。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- `rust/crates/commands/src/lib.rs` 中共享的斜杠命令注册表。
|
||
- Rust 斜杠命令目前涵盖 `help`、`status`、`compact`、`model`、`permissions`、`clear`、`cost`、`resume`、`config`、`memory`、`init`、`diff`、`version`、`export`、`session`。
|
||
- 主要的 CLI/REPL/提示词处理位于 `rust/crates/claw-cli/src/main.rs`。
|
||
|
||
### Rust 中缺失或损坏
|
||
- 缺失重大的 TS 命令家族:`/agents`、`/hooks`、`/mcp`、`/plugin`、`/skills`、`/plan`、`/review`、`/tasks` 等等。
|
||
- Rust 没有等效于 TS 结构化 IO / 远程传输层的实现。
|
||
- 没有针对 auth/plugins/MCP/agents 的 TS 风格处理程序分解。
|
||
- JSON 提示模式在此分支上有所改进,但仍未达到纯净的传输对等:实证验证显示,支持工具的 JSON 输出在最终 JSON 对象之前可能会发出人类可读的工具结果行。
|
||
|
||
**状态:** 功能性本地 CLI 核心,范围比 TS 窄得多。
|
||
|
||
---
|
||
|
||
## assistant/ (助手/代理循环、流式、工具调用)
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/assistant/sessionHistory.ts` 中的助手/会话表面。
|
||
- `src/services/tools/StreamingToolExecutor.ts`、`src/services/tools/toolExecution.ts`、`src/services/tools/toolOrchestration.ts` 中的工具编排。
|
||
- `src/cli/structuredIO.ts` 和 `src/cli/remoteIO.ts` 中的远程/结构化流式层。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- `rust/crates/runtime/src/conversation.rs` 中的核心循环。
|
||
- `rust/crates/claw-cli/src/main.rs` 中的流式/工具事件转换。
|
||
- `rust/crates/runtime/src/session.rs` 中的会话持久化。
|
||
|
||
### Rust 中缺失或损坏
|
||
- 没有类似 TS 的挂钩感知编排层。
|
||
- 没有 TS 结构化/远程助手传输栈。
|
||
- 没有更丰富的 TS 助手/会话历史/后台任务集成。
|
||
- JSON 输出路径在此分支上不再仅限单次交互,但输出纯净度仍落后于 TS 传输预期。
|
||
|
||
**状态:** 强大的核心循环,缺失编排层。
|
||
|
||
---
|
||
|
||
## services/ (服务:API 客户端、认证、模型、MCP)
|
||
|
||
### TS 已存在
|
||
证据:
|
||
- `src/services/api/*` 下的 API 服务。
|
||
- `src/services/oauth/*` 下的 OAuth 服务。
|
||
- `src/services/mcp/*` 下的 MCP 服务。
|
||
- `src/services/*` 下的分析、提示建议、会话记忆、插件操作、设置同步、策略限制、团队记忆同步、通知器、语音等附加服务层。
|
||
|
||
### Rust 已存在
|
||
证据:
|
||
- `rust/crates/api/src/{client,error,sse,types}.rs` 中的核心 Anthropic API 客户端。
|
||
- `rust/crates/runtime/src/oauth.rs` 中的 OAuth 支持。
|
||
- `rust/crates/runtime/src/{config,mcp,mcp_client,mcp_stdio}.rs` 中的 MCP 配置/引导/客户端支持。
|
||
- `rust/crates/runtime/src/usage.rs` 中的用量统计。
|
||
- `rust/crates/runtime/src/remote.rs` 中的远程上游代理支持。
|
||
|
||
### Rust 中缺失或损坏
|
||
- 除了核心消息传递/认证/MCP 之外,大部分 TS 服务生态系统都缺失。
|
||
- 没有等效于 TS 的插件服务层。
|
||
- 没有等效于 TS 的分析/设置同步/策略限制/团队记忆子系统。
|
||
- 没有 TS 风格的 MCP 连接器/UI 层。
|
||
- 模型/提供商的用户体验(ergonomics)仍比 TS 薄弱。
|
||
|
||
**状态:** 核心基础已存在;更广泛的服务生态系统缺失。
|
||
|
||
---
|
||
|
||
## 正在处理的分支中的关键缺陷状态
|
||
|
||
### 已修复
|
||
- **已启用提示词模式工具 (Prompt mode tools)**
|
||
- `rust/crates/claw-cli/src/main.rs` 现在使用 `LiveCli::new(model, true, ...)` 构建提示词模式。
|
||
- **默认权限模式 = DangerFullAccess**
|
||
- `rust/crates/claw-cli/src/main.rs` 中的运行时默认值现在解析为 `DangerFullAccess`。
|
||
- `rust/crates/claw-cli/src/args.rs` 中的 Clap 默认值也使用 `DangerFullAccess`。
|
||
- `rust/crates/claw-cli/src/init.rs` 中的初始化模板写入了 `dontAsk`。
|
||
- **流式 `{}` 工具输入前缀 Bug**
|
||
- `rust/crates/claw-cli/src/main.rs` 现在仅针对流式工具输入剥离初始空对象,同时保留非流式响应中的合法 `{}`。
|
||
- **无限最大迭代次数 (max_iterations)**
|
||
- 在 `rust/crates/runtime/src/conversation.rs` 中通过 `usize::MAX` 进行了验证。
|
||
|
||
### 剩余的显著对等问题
|
||
- **JSON 提示输出纯净度**
|
||
- 支持工具的 JSON 模式现在可以循环,但实证验证显示,当工具启动时,在 JSON 之前仍会出现人类可读的工具结果输出。
|