项目结构
Claude Code 的源码组织清晰,采用功能导向的目录结构。以下是主要目录和文件的详细说明。
顶层结构
src/
├── main.tsx # 主入口 (4,683 行)
├── QueryEngine.ts # LLM 查询引擎 (1,295 行)
├── query.ts # 查询管道 (1,729 行)
├── Tool.ts # 工具类型定义 (792 行)
├── commands.ts # 命令注册表 (754 行)
├── tools.ts # 工具注册表 (354 行)
├── cost-tracker.ts # Token 成本追踪 (323 行)
├── context.ts # 上下文管理 (189 行)
├── history.ts # 会话历史 (464 行)
├── setup.ts # 初始化逻辑 (477 行)
└── interactiveHelpers.tsx # 交互辅助 (365 行)
核心目录
commands/ — 命令系统 (189 文件)
包含 101+ 斜杠命令的实现,每个命令是一个独立模块:
commands/
├── commit.ts # /commit
├── diff.ts # /diff
├── review.ts # /review
├── doctor.ts # /doctor
├── config.ts # /config
├── tasks.ts # /tasks
├── memory.ts # /memory
├── mcp.ts # /mcp
├── skills.ts # /skills
├── compact.ts # /compact
├── resume.ts # /resume
├── share.ts # /share
└── ... # 更多命令
tools/ — 工具系统 (184 文件)
43+ Agent 工具的实现,每个工具包含输入 Schema、权限和执行逻辑:
tools/
├── BashTool/ # Shell 命令执行
├── FileReadTool/ # 文件读取
├── FileWriteTool/ # 文件写入
├── FileEditTool/ # 文件编辑
├── GlobTool/ # 文件搜索
├── GrepTool/ # 内容搜索
├── AgentTool/ # 子 Agent 派遣
├── MCPTool/ # MCP 工具调用
├── WebFetchTool/ # 网页抓取
├── WebSearchTool/ # 网页搜索
├── NotebookEditTool/ # Jupyter 编辑
├── EnterWorktreeTool/ # Git Worktree
├── EnterPlanModeTool/ # 计划模式
├── TaskCreateTool/ # 任务创建
├── SendMessageTool/ # 消息发送
└── ...
components/ — UI 组件 (389 文件)
基于 React + Ink 的终端 UI 组件库:
components/
├── Message/ # 消息渲染
├── Tool/ # 工具调用展示
├── Permission/ # 权限提示
├── Input/ # 用户输入
├── StatusBar/ # 状态栏
├── Spinner/ # 加载动画
├── CodeBlock/ # 代码块
├── Diff/ # 差异展示
├── Markdown/ # Markdown 渲染
└── ...
hooks/ — React Hooks (104 文件)
自定义 React Hooks 管理各种状态和逻辑:
hooks/
├── usePermission.ts # 权限管理
├── useTools.ts # 工具状态
├── useMessages.ts # 消息流
├── useSuggestions.ts # 建议提示
├── useTheme.ts # 主题切换
├── useKeyboard.ts # 键盘输入
└── ...
services/ — 服务层 (130 文件)
外部集成和内部子系统:
services/
├── api/ # Anthropic API 客户端
├── mcp/ # MCP 服务器管理
├── lsp/ # LSP 集成
├── oauth/ # OAuth 2.0 认证
├── compression/ # 上下文压缩
├── analytics/ # GrowthBook 分析
├── memory/ # 自动记忆提取
├── plugins/ # 插件加载器
├── telemetry/ # OpenTelemetry
├── rateLimit/ # 速率限制
├── voice/ # 语音处理
├── notifications/ # 通知系统
└── ...
bridge/ — IDE 桥接 (31 文件)
与 IDE 的双向通信:
bridge/
├── vscode/ # VS Code 扩展
├── jetbrains/ # JetBrains IDE
├── repl/ # REPL 桥接
├── auth/ # JWT 认证
├── permissions/ # 权限回调
└── runner/ # 会话运行器
其他重要目录
| 目录 | 文件数 | 说明 |
|---|---|---|
utils/ | 331 | 工具函数库 |
ink/ | 50+ | Ink 渲染引擎定制 |
state/ | 6 | 全局状态管理 |
memdir/ | 10 | 持久化记忆目录 |
tasks/ | 12 | 任务管理系统 |
skills/ | 20 | 技能系统 |
keybindings/ | 14 | 快捷键配置 |
context/ | 11 | 上下文收集 |
constants/ | 23 | 常量和配置 |
types/ | 8 | TypeScript 类型定义 |
migrations/ | 13 | 配置迁移脚本 |
vim/ | 8 | Vim 模式支持 |
voice/ | 5 | 语音输入 |
remote/ | 5 | 远程会话 |
server/ | 3 | 服务器模式 |
screens/ | 3 | 全屏界面(Doctor, REPL, Resume) |
coordinator/ | 1 | 多 Agent 协调器 |
buddy/ | 8 | 伴侣精灵系统 |
关键文件大小排名
| 文件 | 行数 | 职责 |
|---|---|---|
main.tsx | 4,683 | 应用入口,CLI 配置 |
query.ts | 1,729 | 查询管道 |
QueryEngine.ts | 1,295 | LLM API 引擎 |
Tool.ts | 792 | 工具类型系统 |
commands.ts | 754 | 命令注册表 |
setup.ts | 477 | 初始化流程 |
history.ts | 464 | 会话历史管理 |
interactiveHelpers.tsx | 365 | 交互辅助函数 |
tools.ts | 354 | 工具注册表 |
cost-tracker.ts | 323 | 成本追踪 |