【claude code】源码泄露架构分析
·
Claude Code 架构分析文档
目录
概述
Claude Code 是 Anthropic 官方推出的命令行 AI 编程助手工具。本文档基于 Claude Code v2.1.88 源代码进行架构分析。
架构总览
目录结构
主要目录说明
| 目录 | 说明 |
|---|---|
bootstrap/ |
启动时的状态初始化和全局配置 |
cli/ |
命令行解析、传输层、IO处理 |
commands/ |
各种斜杠命令的实现(/help, /commit 等) |
tools/ |
工具实现(Bash, Read, Edit, Agent 等) |
services/ |
核心服务(API、MCP、分析、压缩等) |
state/ |
React 状态管理(AppState) |
utils/ |
通用工具函数 |
types/ |
TypeScript 类型定义 |
components/ |
可复用的 UI 组件 |
screens/ |
主要屏幕界面(REPL 等) |
核心组件详解
1. 入口与初始化流程
关键代码路径:
main.tsx:1-500- CLI 解析和入口entrypoints/init.ts- 初始化逻辑bootstrap/state.ts- 全局状态管理
初始化顺序:
- 启动性能分析(
profileCheckpoint) - MDM 配置和 Keychain 预读取
- 配置系统启用(
enableConfigs) - 安全环境变量应用
- 优雅关闭设置
- GrowthBook Feature Flags 初始化
- REPL 界面渲染
2. 命令系统
命令类型:
| 类型 | 说明 | 示例 |
|---|---|---|
prompt |
展开为提示词发送给模型 | /commit, /review |
local |
执行本地代码,返回文本结果 | /clear, /cost |
local-jsx |
渲染 React UI 组件 | /config, /mcp |
命令加载流程:
3. 工具系统
工具生命周期:
工具组装流程:
// tools.ts 中的工具组装
export function assembleToolPool(
permissionContext: ToolPermissionContext,
mcpTools: Tools,
): Tools {
const builtInTools = getTools(permissionContext)
const allowedMcpTools = filterToolsByDenyRules(mcpTools, permissionContext)
return uniqBy(
[...builtInTools].sort(byName).concat(allowedMcpTools.sort(byName)),
'name',
)
}
4. 查询引擎
核心查询循环 (query.ts):
export async function* query(
params: QueryParams,
): AsyncGenerator<StreamEvent | Message, Terminal> {
// 1. 初始化状态
let state: State = {
messages: params.messages,
toolUseContext: params.toolUseContext,
// ...
}
// 2. 主循环
while (true) {
// 2.1 构建请求消息
let messagesForQuery = [...getMessagesAfterCompactBoundary(messages)]
// 2.2 应用工具结果预算
messagesForQuery = await applyToolResultBudget(...)
// 2.3 发送 API 请求
yield { type: 'stream_request_start' }
// 2.4 流式处理响应
for await (const event of streamAPIResponse(...)) {
yield event
}
// 2.5 检查是否继续
const transition = checkContinueCondition(...)
if (transition.type === 'terminal') {
return transition
}
// 2.6 更新状态继续循环
state = { ...state, ...transition.updates }
}
}
QueryEngine 类 (QueryEngine.ts):
5. 状态管理
AppState 结构:
interface AppState {
// 消息
messages: Message[]
// 工具和命令
tools: Tools
commands: Command[]
// MCP
mcp: {
tools: Tool[]
commands: Command[]
resources: Record<string, ServerResource[]>
clients: MCPServerConnection[]
}
// 权限
toolPermissionContext: ToolPermissionContext
// UI 状态
verbose: boolean
mainLoopModel: string
theme: ThemeName
// 思考配置
thinkingConfig: ThinkingConfig
// 文件历史
fileHistory: FileHistoryState
// ...更多状态
}
6. MCP (Model Context Protocol) 集成
MCP 连接流程:
MCP 工具包装:
// MCP 工具被包装为标准 Tool 接口
class MCPTool implements Tool {
name = `mcp__${serverName}__${toolName}`
mcpInfo = { serverName, toolName }
async call(input, context, ...): Promise<ToolResult> {
const client = getConnection(this.serverName)
const result = await client.callTool({
name: this.toolName,
arguments: input
})
return processMCPResult(result)
}
}
7. 权限系统
权限检查流程:
8. 上下文压缩
压缩策略:
| 策略 | 说明 | 触发条件 |
|---|---|---|
| Snip | 删除旧的对话历史 | 超过上下文限制 |
| MicroCompact | 缓存编辑优化 | 频繁修改相同文件 |
| Summary | 生成对话摘要 | 用户手动压缩 |
| ReactiveCompact | 响应式压缩 | API 返回 prompt_too_long |
9. API 服务层
API 请求流程:
// claude.ts 核心请求逻辑
async function* streamAPIResponse(params) {
const client = getAnthropicClient()
const betas = getMergedBetas(model, features)
const stream = await client.beta.messages.stream({
model: normalizeModelStringForAPI(model),
messages: normalizeMessagesForAPI(messages),
system: systemPrompt,
tools: tools.map(toolToAPISchema),
max_tokens: getMaxOutputTokens(model),
betas,
// ...更多参数
})
for await (const event of stream) {
yield normalizeStreamEvent(event)
}
}
数据流分析
用户输入到 AI 响应的完整流程
工具调用详细流程
关键设计模式
1. 工厂模式
工具创建使用 buildTool 工厂函数:
export function buildTool<D extends AnyToolDef>(def: D): BuiltTool<D> {
return {
...TOOL_DEFAULTS,
userFacingName: () => def.name,
...def,
}
}
2. 策略模式
权限检查使用策略模式,根据不同的权限模式应用不同的策略。
3. 观察者模式
状态管理使用订阅模式,组件通过 useAppState 订阅状态变化。
4. 命令模式
命令系统将操作封装为对象,支持不同的执行策略(prompt/local/local-jsx)。
5. 生成器模式
查询循环使用 AsyncGenerator 实现流式输出:
async function* query(params): AsyncGenerator<StreamEvent | Message, Terminal> {
while (true) {
yield event
if (shouldStop) return terminal
}
}
扩展点
添加新工具
- 在
tools/目录创建新工具目录 - 实现
Tool接口 - 在
tools.ts的getAllBaseTools()中注册
添加新命令
- 在
commands/目录创建命令文件 - 定义
Command对象 - 在
commands.ts中导入并添加到COMMANDS数组
添加 MCP 服务器
- 在 MCP 配置文件中添加服务器定义
- 客户端会自动发现并加载工具
添加权限规则
- 在设置文件中添加规则
- 或通过 CLI 参数指定
性能优化
启动优化
- 延迟加载:命令和工具使用动态导入
- 预取:MDM 配置和 Keychain 预读取
- 并行初始化:多个初始化任务并行执行
运行时优化
- 流式处理:API 响应使用流式处理
- 缓存:工具结果缓存、文件状态缓存
- 压缩:上下文压缩减少 Token 使用
内存优化
- 工具结果持久化:大结果保存到文件
- LRU 缓存:文件读取状态使用 LRU 缓存
- 消息裁剪:自动压缩旧消息
安全考虑
权限控制
- 细粒度权限:支持工具级别、命令级别的权限控制
- 沙箱执行:Bash 命令可在沙箱中执行
- 敏感命令保护:危险命令需要额外确认
数据安全
- API Key 保护:支持多种认证方式
- 敏感信息过滤:日志中过滤敏感信息
- 审计日志:记录关键操作
总结
Claude Code 是一个架构清晰、模块化设计的 AI 编程助手工具。主要特点:
- 模块化设计:核心组件(工具、命令、权限)独立且可扩展
- 类型安全:使用 TypeScript 和 Zod 确保类型安全
- 流式处理:API 响应和工具执行都支持流式处理
- 权限控制:细粒度的权限系统确保操作安全
- MCP 集成:通过 MCP 协议支持外部工具扩展
- 上下文管理:智能压缩策略管理长对话
这种架构使得 Claude Code 既是一个强大的编程助手,也是一个可扩展的 AI Agent 平台。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)