Files
openclaude/docs/Claude_Code_Source_Analysis.md

502 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Claude Code v2.1.88 源码分析报告
> 分析日期2026-03-31
> 源码版本anthropic-ai-claude-code-2.1.88
> 总文件数1,884 个源文件(.ts/.tsx
> 总代码行数:约 512,664 行
---
## 一、项目概览
Claude Code 是 Anthropic 官方的 CLI 交互式编程助手。它基于 **Bun 运行时** 构建,使用 **React + Ink** 渲染终端 UI通过 Anthropic API 与 Claude 模型交互,为用户提供代码编写、调试、文件操作等软件工程任务支持。
### 技术栈
| 类别 | 技术 |
|------|------|
| 运行时 | Bun |
| 语言 | TypeScript / TSX |
| CLI 框架 | Commander.js (`@commander-js/extra-typings`) |
| 终端 UI | React + Ink自定义 fork |
| AI SDK | `@anthropic-ai/sdk` (Beta Messages API) |
| 协议 | MCP (Model Context Protocol) |
| 构建 | Bun bundler`bun:bundle` feature flags |
---
## 二、整体架构
```
┌─────────────────────────────────────────────────────┐
│ entrypoints/cli.tsx │ ← 入口
├─────────────────────────────────────────────────────┤
│ main.tsx │ ← CLI 参数解析 + 初始化
├─────────────────────────────────────────────────────┤
│ screens/REPL.tsx │ ← 主交互界面React 组件)
├──────────┬──────────┬───────────┬───────────────────┤
│ query.ts │ tools.ts │commands.ts│ QueryEngine.ts │ ← 核心调度层
├──────────┴──────────┴───────────┴───────────────────┤
│ services/api/claude.ts │ services/mcp/client.ts │ ← API 通信层
├──────────────────────────┴──────────────────────────┤
│ tools/ │ skills/ │ hooks/ │ tasks/ │ ← 功能实现层
├─────────────────────────────────────────────────────┤
│ utils/ │ state/ │ constants/ │ types/ │ ← 基础设施层
└─────────────────────────────────────────────────────┘
```
---
## 三、核心模块详解
### 3.1 入口与启动流程
**文件**: `src/entrypoints/cli.tsx`
启动经过精心优化的多阶段引导:
1. **快速路径Fast Path**: `--version` 直接输出版本号,零模块加载
2. **特殊模式检查**: `--dump-system-prompt`, `--claude-in-chrome-mcp`, `--chrome-native-host`
3. **主路径**: 动态导入 `main.tsx`,进入完整 CLI 初始化
**文件**: `src/main.tsx`4,683 行,最核心文件之一)
主函数负责:
- 并行预取MDM 配置、Keychain 凭证、OAuth、GrowthBook 特性开关
- Commander.js 命令行参数解析
- 初始化分析analytics、策略限制policy limits、远程托管设置
- 加载 MCP 服务器、工具列表、技能系统、插件系统
- 启动 React/Ink 渲染 → `REPL` 组件
### 3.2 REPL 主界面
**文件**: `src/screens/REPL.tsx`5,005 行)
核心交互组件,包含:
- 消息列表渲染(虚拟滚动)
- 用户输入处理(含 Vim 模式)
- 权限请求对话框
- 成本追踪与显示
- Agent/Teammate 管理
- 会话持久化与恢复
### 3.3 查询引擎Query Loop
**文件**: `src/query.ts` — 单次对话轮次的核心循环
**文件**: `src/QueryEngine.ts` — 高级查询引擎SDK/非交互模式)
对话流程:
```
用户输入 → System Prompt 构建 → API 调用(streaming) → 解析响应
tool_use → 权限检查 → 工具执行 → 结果返回 → 继续 API 调用
end_turn → 展示结果给用户
```
关键机制:
- **Auto Compact**: 上下文接近限制时自动压缩对话历史
- **Reactive Compact**: 更智能的上下文折叠feature flag 控制)
- **Token Budget**: 工具结果的 token 预算管理
- **Fingerprint**: 消息去重与缓存优化
### 3.4 API 通信层
**文件**: `src/services/api/claude.ts`3,419 行)
- 使用 Anthropic SDK 的 **Beta Messages API**(支持 streaming
- 支持多 providerAnthropic 直连、AWS Bedrock、GCP Vertex
- 处理 Betas 特性extended thinking、tool use 等)
- 请求指纹计算(用于 prompt cache
- 重试与错误处理策略
---
## 四、工具系统Tools
### 4.1 工具接口
**文件**: `src/Tool.ts`
核心类型 `ToolUseContext` 定义了工具执行的完整上下文,包括:
- 可用工具列表、命令、MCP 客户端
- `AbortController` 中断控制
- `AppState` 读写
- 文件状态缓存、权限上下文
- Agent/子代理相关状态
### 4.2 工具注册
**文件**: `src/tools.ts`
所有工具在此文件中集中注册。支持条件加载(通过 `bun:bundle` feature flags
| 工具 | 功能 |
|------|------|
| **BashTool** | 执行 shell 命令 |
| **FileReadTool** | 读取文件 |
| **FileEditTool** | 编辑文件(精确替换) |
| **FileWriteTool** | 写入文件 |
| **GlobTool** | 文件模式匹配搜索 |
| **GrepTool** | 内容正则搜索(基于 ripgrep |
| **WebFetchTool** | 抓取网页内容 |
| **WebSearchTool** | 网页搜索 |
| **AgentTool** | 启动子代理 |
| **SendMessageTool** | 向子代理发送消息 |
| **NotebookEditTool** | 编辑 Jupyter Notebook |
| **AskUserQuestionTool** | 向用户提问 |
| **EnterPlanModeTool** | 进入计划模式 |
| **ExitPlanModeTool** | 退出计划模式 |
| **EnterWorktreeTool** | 创建 Git Worktree |
| **ExitWorktreeTool** | 退出 Git Worktree |
| **TaskCreateTool** | 创建任务 |
| **TaskUpdateTool** | 更新任务 |
| **TaskGetTool** | 获取任务详情 |
| **TaskListTool** | 列出任务 |
| **TaskOutputTool** | 获取任务输出 |
| **TaskStopTool** | 停止任务 |
| **SkillTool** | 执行技能 |
| **TodoWriteTool** | 写入待办事项 |
| **LSPTool** | Language Server Protocol 交互 |
| **MCPTool** | 调用 MCP 工具 |
| **ToolSearchTool** | 搜索可用工具 |
| **ConfigTool** | 配置管理 |
| **BriefTool** | 简洁模式 |
| **ScheduleCronTool** | 定时任务CronCreate/Delete/List |
| **ListMcpResourcesTool** | 列出 MCP 资源 |
| **ReadMcpResourceTool** | 读取 MCP 资源 |
**内部/实验性工具**feature flag 控制):
- `REPLTool` — 仅内部用户
- `SleepTool` — 主动等待
- `RemoteTriggerTool` — 远程触发
- `MonitorTool` — 监控工具
- `SendUserFileTool` — 发送文件给用户KAIROS
- `PushNotificationTool` — 推送通知
- `SubscribePRTool` — PR 订阅
- `TeamCreateTool` / `TeamDeleteTool` — 团队/多代理管理
- `TungstenTool` — 内部工具
### 4.3 Bash 工具安全系统
**文件**: `src/tools/BashTool/bashSecurity.ts`2,592 行)
**文件**: `src/tools/BashTool/bashPermissions.ts`2,621 行)
Bash 工具有最复杂的安全系统:
- 命令白名单/黑名单
- 破坏性命令检测rm -rf, git push --force 等)
- 沙箱模式
- Bash AST 解析器(`bashParser.ts` 4,436 行)用于静态分析命令安全性
---
## 五、权限系统
### 5.1 权限模式
**文件**: `src/types/permissions.ts`
三种权限模式:
- **`default`**: 默认模式,危险操作需要用户确认
- **`plan`**: 计划模式,只读操作
- **`bypass`**: 跳过权限检查(需用户明确启用)
### 5.2 权限规则
```typescript
type ToolPermissionContext = {
mode: PermissionMode
alwaysAllowRules: ToolPermissionRulesBySource // 始终允许
alwaysDenyRules: ToolPermissionRulesBySource // 始终拒绝
alwaysAskRules: ToolPermissionRulesBySource // 始终询问
isBypassPermissionsModeAvailable: boolean
}
```
权限规则可在多个层级配置:
- 全局设置 (`~/.claude/settings.json`)
- 项目设置 (`.claude/settings.json`)
- 命令行参数
- 运行时用户选择
---
## 六、任务系统Tasks
**文件**: `src/Task.ts`
支持的任务类型:
| 类型 | 说明 |
|------|------|
| `local_bash` | 本地 Shell 后台命令 |
| `local_agent` | 本地子代理 |
| `remote_agent` | 远程代理 |
| `in_process_teammate` | 进程内协作者(多代理) |
| `local_workflow` | 本地工作流 |
| `monitor_mcp` | MCP 监控 |
| `dream` | Dream 任务(后台推理) |
任务状态机:`pending → running → completed/failed/killed`
---
## 七、MCP 集成
**文件**: `src/services/mcp/client.ts`3,348 行)
**文件**: `src/services/mcp/auth.ts`2,465 行)
MCP (Model Context Protocol) 深度集成:
- 支持 stdio 和 SSE 传输
- OAuth 2.0 认证流程
- 工具、资源、提示的完整支持
- 官方 MCP 服务器注册表(`officialRegistry.ts`
- 连接生命周期管理(`MCPConnectionManager.tsx`
- 通道权限控制(`channelPermissions.ts`
---
## 八、技能系统Skills
**文件**: `src/skills/`
技能是更高级的命令抽象:
- `bundled/` — 内置技能
- `loadSkillsDir.ts` — 从目录加载自定义技能
- `mcpSkillBuilders.ts` — 从 MCP 构建技能
- 支持用户通过 `/skill-name` 快捷调用
---
## 九、UI 系统
### 9.1 Ink 终端渲染
**文件**: `src/ink/`96 个文件)
自定义的 Ink (React for CLI) 框架:
- `layout/` — 布局引擎(基于 Yoga layout
- `components/` — 基础 UI 组件
- `hooks/` — React hooks终端尺寸、焦点、搜索等
- `termio/` — 终端 I/O 和 DEC 控制序列
- `events/` — 事件系统
### 9.2 主要组件
**文件**: `src/components/`389 个文件)
关键组件包括:
- `PromptInput/` — 用户输入框支持多行、Vim 模式)
- `VirtualMessageList` — 虚拟滚动消息列表
- `Spinner` — 加载动画
- `permissions/` — 权限请求 UI
- `mcp/` — MCP 相关 UI
- `MessageSelector` — 消息选择器
- `CostThresholdDialog` — 成本阈值对话框
---
## 十、命令系统
**文件**: `src/commands/`207 个文件)
Slash 命令系统(用户通过 `/command` 触发):
| 分类 | 命令示例 |
|------|---------|
| **Git** | `/commit`, `/branch`, `/diff`, `/pr_comments`, `/review` |
| **会话** | `/resume`, `/session`, `/compact`, `/clear`, `/exit` |
| **配置** | `/config`, `/model`, `/theme`, `/permissions`, `/vim` |
| **工具** | `/mcp`, `/plugin`, `/skills`, `/hooks` |
| **调试** | `/doctor`, `/debug-tool-call`, `/cost`, `/stats`, `/perf-issue` |
| **AI 模式** | `/plan`, `/fast`, `/effort`, `/brief`, `/thinkback` |
| **协作** | `/agents`, `/tasks`, `/teleport`, `/remote-setup` |
| **其他** | `/memory`, `/export`, `/help`, `/feedback`, `/version` |
---
## 十一、服务层
**文件**: `src/services/`130 个文件)
| 服务 | 说明 |
|------|------|
| `api/` | Anthropic API 通信claude.ts, bootstrap.ts, filesApi.ts |
| `mcp/` | MCP 协议客户端和服务器管理 |
| `oauth/` | OAuth 2.0 认证 |
| `analytics/` | 分析追踪GrowthBook 特性开关) |
| `compact/` | 对话压缩autoCompact, reactiveCompact |
| `policyLimits/` | 策略限制管理 |
| `remoteManagedSettings/` | 远程托管设置 |
| `plugins/` | 插件加载与管理 |
| `SessionMemory/` | 会话记忆 |
| `tips/` | 使用提示 |
| `lsp/` | LSP 服务 |
| `tools/` | 工具相关服务 |
| `extractMemories/` | 自动记忆提取 |
| `voice/` | 语音交互 |
---
## 十二、状态管理
**文件**: `src/state/`
- `AppState.tsx` — 全局应用状态类型定义
- `AppStateStore.ts` — 状态存储实现
- `store.ts` — 状态存储工厂
- `selectors.ts` — 状态选择器
- `onChangeAppState.ts` — 状态变更监听
状态包含消息列表、任务状态、权限上下文、MCP 连接、成本追踪等。
---
## 十三、辅助系统
### 13.1 记忆系统
**文件**: `src/memdir/`8 个文件)
管理 `MEMORY.md` 和持久化记忆目录,跨会话保持上下文。
### 13.2 Vim 模式
**文件**: `src/vim/`5 个文件)
终端输入框支持 Vim 键绑定。
### 13.3 语音交互
**文件**: `src/services/voice.ts`, `voiceStreamSTT.ts`
语音输入支持STT
### 13.4 代理群集Agent Swarms
**文件**: `src/utils/swarm/`
支持多代理协作leader/worker 权限同步、team 管理、沙箱权限请求。
### 13.5 插件系统
**文件**: `src/services/plugins/`, `src/utils/plugins/`
- `pluginLoader.ts`3,302 行)— 插件加载器
- `marketplaceManager.ts`2,643 行)— 插件市场管理
- 支持内置插件和第三方插件
---
## 十四、Feature Flags 系统
通过 `bun:bundle``feature()` 函数实现编译时特性开关:
| Flag | 功能 |
|------|------|
| `ABLATION_BASELINE` | A/B 测试基线 |
| `DUMP_SYSTEM_PROMPT` | 导出系统提示 |
| `PROACTIVE` | 主动模式 |
| `KAIROS` | Assistant 模式 |
| `AGENT_TRIGGERS` | 定时任务 |
| `AGENT_TRIGGERS_REMOTE` | 远程触发 |
| `MONITOR_TOOL` | 监控工具 |
| `COORDINATOR_MODE` | 协调器模式 |
| `REACTIVE_COMPACT` | 响应式压缩 |
| `CONTEXT_COLLAPSE` | 上下文折叠 |
| `KAIROS_GITHUB_WEBHOOKS` | GitHub Webhook |
| `KAIROS_PUSH_NOTIFICATION` | 推送通知 |
外部构建通过 DCEDead Code Elimination移除内部功能。
---
## 十五、关键文件索引
| 文件 | 行数 | 功能 |
|------|------|------|
| `cli/print.ts` | 5,594 | 非交互式输出/打印模式 |
| `utils/messages.ts` | 5,512 | 消息创建与处理 |
| `utils/sessionStorage.ts` | 5,105 | 会话持久化存储 |
| `utils/hooks.ts` | 5,022 | Hooks 系统实现 |
| `screens/REPL.tsx` | 5,005 | 主 REPL 界面 |
| `main.tsx` | 4,683 | 主入口/初始化 |
| `utils/bash/bashParser.ts` | 4,436 | Bash 命令解析器 |
| `utils/attachments.ts` | 3,997 | 附件处理 |
| `services/api/claude.ts` | 3,419 | API 通信 |
| `services/mcp/client.ts` | 3,348 | MCP 客户端 |
| `utils/plugins/pluginLoader.ts` | 3,302 | 插件加载器 |
| `commands/insights.ts` | 3,200 | 洞察命令 |
| `bridge/bridgeMain.ts` | 2,999 | Bridge 主进程 |
| `utils/bash/ast.ts` | 2,679 | Bash AST |
| `tools/BashTool/bashPermissions.ts` | 2,621 | Bash 权限 |
| `tools/BashTool/bashSecurity.ts` | 2,592 | Bash 安全 |
---
## 十六、架构亮点
### 1. 启动性能优化
- 多阶段懒加载:快速路径零导入,主路径并行预取
- `startupProfiler.ts` 追踪每个启动阶段耗时
- MDM、Keychain、OAuth 凭证并行预取
### 2. 安全设计
- Bash 命令 AST 级静态分析
- 多层权限控制(白名单、黑名单、始终询问)
- 沙箱模式隔离
- 破坏性操作自动检测与拦截
### 3. 多代理架构
- 子代理AgentTool支持并发执行
- 团队协作TeamCreate/TeamDelete
- 进程内协作者InProcessTeammate
- 远程代理RemoteAgent
- Leader/Worker 权限同步
### 4. 上下文管理
- Auto Compact 自动压缩历史
- Reactive Compact 智能压缩
- Context Collapse 上下文折叠
- Token Budget 精细控制
- 文件状态缓存 LRU
### 5. 可扩展性
- 插件系统 + 插件市场
- MCP 协议集成
- 自定义技能
- Hooks 系统
- Feature Flags 编译时裁剪
---
## 十七、数据流图
```
User Input
┌─────────────┐ ┌──────────────┐
│ PromptInput │────▶│ REPL.tsx │
└─────────────┘ └──────┬───────┘
┌──────▼───────┐
│ query.ts │ ◄── System Prompt (constants/prompts.ts)
│ (主循环) │ ◄── Memory (memdir/)
└──────┬───────┘ ◄── CLAUDE.md
┌──────▼───────┐
│ claude.ts │ ── Anthropic Beta Messages API (streaming)
│ (API 调用) │
└──────┬───────┘
┌────────────┼────────────┐
▼ ▼ ▼
text_delta tool_use end_turn
│ │ │
▼ ▼ ▼
渲染文本 ┌─────────┐ 返回结果
│权限检查 │
└────┬────┘
┌────▼────┐
│工具执行 │ → BashTool / FileReadTool / AgentTool / ...
└────┬────┘
tool_result → 继续 API 调用(循环)
```
---
*报告生成完毕。源代码已还原至 `package/source/src/` 目录。*