Claude Code源码泄漏,深度架构分析
字数 5970,阅读大约需 30 分钟
1. 项目概览

Claude Code 是 Anthropic 推出的 命令行 AI 编程助手,允许开发者直接在终端中将编码任务委托给 Claude 模型。它是一个功能极其丰富的系统,涵盖了交互式 REPL、多 Agent 编排、远程执行、MCP(Model Context Protocol)集成、插件/技能扩展、权限管控等多个维度。
技术栈概要:
-
• 语言:TypeScript(TSX) -
• 运行时:Bun / Node.js(≥18) -
• UI 框架:React + 自定义 Ink 终端渲染引擎 -
• 构建系统:Bun bundler(支持编译期 feature gate 死代码消除) -
• API 集成:Anthropic Claude API(支持 Bedrock / Vertex 等多平台) -
• 协议:MCP(Model Context Protocol)、WebSocket、Unix Domain Socket
代码规模:
-
• TypeScript/TSX 源文件:~1,884 个 -
• 总代码行数:~102,250 行(不含依赖) -
• 最大单文件: main.tsx(803KB / 4,683 行) -
• 核心目录:约 60 个顶层模块
2. 顶层目录结构
claude-code/
├── main.tsx # 主编排入口(803KB),启动、配置加载、命令/工具注册
├── setup.ts # REPL 启动前初始化(权限、worktree、插件预加载)
├── context.ts # 系统/用户上下文管理(git 状态、claude.md 发现)
├── commands.ts # 命令注册中心(70+ 内建命令 + 技能 + 插件命令)
├── tools.ts # 工具注册中心(50+ 内建工具 + MCP 动态工具)
├── query.ts # 核心查询循环(async generator,流式响应)
├── QueryEngine.ts # 查询引擎高层编排类
├── Tool.ts # 工具基础抽象(接口、权限、渲染)
├── Task.ts # 后台任务状态与生命周期管理
├── ink.ts # Ink 终端渲染封装与主题系统
├── history.ts # 会话历史与粘贴内容管理
├── cost-tracker.ts # 会话成本与用量追踪
├── replLauncher.tsx # REPL 启动器
├── dialogLaunchers.tsx # 对话框启动器集合
├── interactiveHelpers.tsx # 交互式 UI 辅助工具
│
├── entrypoints/ # 程序入口点
│ ├── cli.tsx # CLI 引导(快速路径优化、feature flag 门控)
│ ├── init.ts # 会话初始化(配置校验、遥测、安全检查)
│ └── mcp.ts # MCP 服务器入口
│
├── cli/ # CLI 基础设施(结构化 I/O、NDJSON、远程传输)
├── tools/ # 45+ 工具实现(每个工具一个目录)
├── commands/ # 100+ 命令实现
├── components/ # 146 个 React 终端 UI 组件
├── hooks/ # 87 个 React Hook(输入、权限、导航、集成)
├── services/ # 38 个服务模块(API、MCP、分析、LSP 等)
├── utils/ # 329 个工具函数(消息、存储、认证、git 等)
├── state/ # 集中式状态管理(不可变 Store 模式)
├── bridge/ # Claude Code Remote (CCR) 桥接层
├── remote/ # 远程会话管理(SDK 集成)
├── constants/ # 常量定义(API 限制、beta 头、系统提示)
├── types/ # 核心类型定义(命令、权限、Hook、插件)
├── plugins/ # 插件系统
├── skills/ # 技能系统(18 个内建技能)
├── memdir/ # 记忆系统(auto-memory、团队记忆)
├── coordinator/ # 多 Agent 协调器模式
├── keybindings/ # 键绑定系统(72 个动作、18 个上下文)
├── migrations/ # 数据迁移(模型版本、设置迁移)
├── screens/ # 全屏 UI(REPL、Doctor、ResumeConversation)
├── server/ # DirectConnect WebSocket 服务端
├── query/ # 查询子模块(配置、依赖注入、token 预算)
├── context/ # 上下文子模块
├── ink/ # 自定义 Ink 渲染器(非标准 Ink 库)
├── vim/ # Vim 模式支持
├── voice/ # 语音输入/输出
├── buddy/ # Buddy 功能
├── schemas/ # JSON Schema 定义
├── tasks/ # 任务管理子系统
└── public/ # 公共静态资源
3. 核心架构:启动流程
整个应用的启动链路如下:
cli.tsx (入口)
│ 快速路径检测:--version / --dump-system-prompt / --claude-in-chrome-mcp 等
│ 动态导入,最小化模块评估时间
↓
init.ts (会话初始化)
│ 配置校验、OpenTelemetry 遥测、安全检查(root/sandbox 验证)
│ 环境变量安全设置
↓
main.tsx (主编排)
│ ┌─ profileCheckpoint() ─┐
│ │ startMdmRawRead() (MDM) │ 并行启动优化
│ └─ startKeychainPrefetch() (钥匙链)─┘
│
│ ┌─ GrowthBook feature flags 加载
│ │ getSystemContext() ← git 状态
│ │ getUserContext() ← claude.md 发现
│ │ getCommands() ← 注册 70+ 命令
│ │ getTools() ← 注册 50+ 工具
│ └─ MCP 工具发现与注册
↓
setup.ts (REPL 前准备)
│ Node 版本检查 → 会话管理 → UDS 消息服务
│ 终端恢复 → Worktree 处理 → Tmux 会话
│ 后台任务:插件加载、Hook 预取、MCP 资源
│ 权限验证 → 发行说明 → 最近活动
↓
replLauncher.tsx (REPL 启动)
│ 动态导入 App + REPL 组件
│ 包裹 ThemeProvider → Ink root render
↓
REPL.tsx (交互循环)
└── 用户输入 → Query → API 调用 → 工具执行 → 响应渲染 → 等待输入...
关键设计决策:
-
• 并行预取:命令、插件、Hook、MCP 资源在启动时并发加载 -
• 懒加载:通过动态 import()延迟加载重型模块(OpenTelemetry、插件等) -
• Feature Gate:Bun bundler 的 feature()函数实现编译期死代码消除
4. 查询系统(Query System)— 核心引擎
查询系统是 Claude Code 的心脏,负责编排用户输入到 API 调用再到工具执行的完整循环。
4.1 Async Generator 流式架构
// query.ts — 核心查询循环
export async function* query(params: QueryParams):
AsyncGenerator<StreamEvent | Message | ToolUseSummaryMessage, Terminal>
采用 异步生成器 模式实现流式响应:
用户输入
↓
queryEngine.ask()
↓
query() async generator 主循环:
┌─────────────────────────────────────────────────────────┐
│ 1. 消息预处理 │
│ snipCompact → microCompact → contextCollapse → auto │
│ │
│ 2. API 调用 │
│ queryModelWithStreaming() │
│ │
│ 3. 流式响应渲染 │
│ yield StreamEvent → UI 实时更新 │
│ │
│ 4. 工具使用检测 │
│ 检测 tool_use content blocks │
│ │
│ 5. 权限检查 │
│ useCanUseTool → allow / deny / ask │
│ │
│ 6. 工具执行 │
│ toolOrchestration.runTools() │
│ │
│ 7. 结果处理 │
│ generateToolUseSummary() │
│ │
│ 8. Stop Hook 执行 │
│ 任务完成检测、模板分类 │
│ │
│ 9. yield Messages → 下一轮迭代或终止 │
└─────────────────────────────────────────────────────────┘
4.2 消息压缩管线
为在有限的上下文窗口中维持长对话,系统实现了四级链式压缩:
-
1. Snip Compact — 删除旧消息,保留近期上下文 -
2. Micro Compact — 缓存重复工具调用的摘要 -
3. Context Collapse — 用语义摘要归档旧对话段 -
4. Auto Compact — 当前三级仍然不够时,触发完整会话总结
4.3 依赖注入
interface QueryDeps {
queryModel: () => Promise<...> // 可注入 mock
compact: () => Promise<...> // 会话压缩
// ...其他依赖
}
通过 QueryDeps 接口实现依赖注入,productionDeps() 工厂提供生产环境实现,测试时可替换为 mock。
4.4 Token 预算管理
query/tokenBudget.ts 负责追踪长时间运行查询的 token 消耗,在超出阈值时触发压缩策略。
5. 工具系统(Tool System)
5.1 工具抽象层(Tool.ts — 793 行)
所有工具遵循统一的 Tool 接口:
interface Tool {
// 核心属性
name: string
inputSchema: ZodSchema // Zod 验证
outputSchema: ZodSchema
// 执行
call(args, context, progress): Promise<Result>
// 权限与安全
validateInput(): ValidationResult
checkPermissions(): PermissionResult // allow / deny / ask / passthrough
getPath(): string // 提取文件路径用于权限匹配
isDestructive(): boolean
isReadOnly(): boolean
// 并发与中断
isConcurrencySafe(): boolean
interruptBehavior(): 'cancel' | 'block'
// UI 渲染(5 种状态)
renderToolUseMessage() // 执行发起
renderToolUseProgressMessage() // 进行中进度
renderToolResultMessage() // 最终结果
renderToolUseRejectedMessage() // 权限拒绝
renderToolUseErrorMessage() // 错误
renderGroupedToolUse() // 并行分组显示
// 搜索与分类
isSearchOrReadCommand(): boolean
isOpenWorld(): boolean
shouldDefer: boolean // 延迟加载标志
searchHint: string // ToolSearch 匹配关键词
}
buildTool() 工厂函数:包裹部分 ToolDef 并填充智能默认值(fail-closed 策略:默认不并发安全、默认需要权限检查)。
5.2 工具分类(45+ 工具)
|
|
|
|
|---|---|---|
| 执行 |
|
|
| 文件操作 |
|
|
| 搜索发现 |
|
|
| 网络 |
|
|
| Agent 编排 |
|
|
| 规划 |
|
|
| 任务管理 |
|
|
| MCP |
|
|
| 技能 |
|
|
| 实用 |
|
|
| worktree |
|
|
| LSP |
|
|
5.3 工具注册与过滤
getAllBaseTools() → 全部可用工具列表(含 feature gate)
↓ 过滤层
filterToolsByDenyRules() → 权限 deny 规则过滤
↓
模式过滤 → SIMPLE 模式仅 Bash/Read/Edit
↓
REPL 模式过滤 → 隐藏被 REPL 包裹的原始工具
↓
isEnabled() 检查 → 运行时权限检查
↓
assembleToolPool() → 合并内建 + MCP 工具,去重,排序(prompt cache 稳定性)
5.4 BashTool — 最复杂的工具
BashTool 拥有 20+ 支撑文件,体现了系统对安全性的极致重视:
-
• bashPermissions.ts— 通配符规则匹配(如"Bash(git *)") -
• bashSecurity.ts— 命令 AST 解析进行语义安全分析 -
• readOnlyValidation.ts— 只读约束检测 -
• sedEditParser.ts— sed 编辑命令解析 -
• shouldUseSandbox.ts— 沙箱必要性判定 -
• destructiveCommandWarning.ts— 破坏性命令警告(rm、mv 等) -
• commandSemantics.ts— 命令语义解释 -
• pathValidation.ts— 路径安全检查
命令分类系统:自动检测命令是搜索类(grep/find/rg)、只读类(cat/head/wc)还是列表类(ls/tree),支持管道中每段独立判定。
5.5 延迟加载机制(Tool Deferral)
工具定义 shouldDefer=true
↓
首次加载时仅发送 name + searchHint(不含完整 schema)
↓
模型通过 ToolSearchTool 按关键词搜索
↓
匹配后返回完整 JSONSchema,工具变为可调用
这一机制显著减少了初始 system prompt 的 token 消耗。
6. 权限系统(Permission System)
6.1 权限模式
系统支持 6 种权限模式:
|
|
|
|---|---|
default |
|
acceptEdits |
|
plan |
|
bypassPermissions |
|
dontAsk |
|
auto |
|
6.2 规则系统
interface ToolPermissionContext {
mode: PermissionMode
additionalWorkingDirectories: Map<string, string>
alwaysAllowRules: ToolPermissionRulesBySource // 始终允许
alwaysDenyRules: ToolPermissionRulesBySource // 始终拒绝
alwaysAskRules: ToolPermissionRulesBySource // 始终询问
}
规则来源(按优先级):policySettings > cliArg > userSettings > projectSettings > localSettings > flagSettings > command > session。
6.3 权限检查流程
工具执行请求
↓
validateInput() → 输入校验(在权限提示前,快速失败)
↓
checkPermissions() → 返回 PermissionResult
├── allow → 直接执行
├── deny → 拒绝并记录
├── passthrough → 交给上层判断
└── prompt → 向用户展示权限请求
↓
useCanUseTool Hook
├── 规则匹配(通配符模式)
├── Auto-mode 分类器(如启用)
├── 权限请求队列(批量处理)
└── 用户交互决定
7. 状态管理(State Management)
7.1 Store 实现
采用自研的极简不可变 Store 模式(类似 Zustand):
type Store<T> = {
getState: () => T
setState: (updater: (prev: T) => T) => void
subscribe: (listener: Listener) => () => void
}
无外部依赖,仅 35 行代码。通过 onChange 回调和 subscribe 监听器实现变更通知。
7.2 AppState 结构
AppState 是全局不可变状态树,核心字段包括:
AppState
├── Settings # 用户配置
├── Model Selection # mainLoopModel, mainLoopModelForSession
├── UI State # verbose, briefOnly, expandedView, statusLineText
├── Tool Permission Context # 权限规则、模式、工作目录
├── Tools # 当前可用工具列表
├── Messages # 完整对话历史
├── MCP # 连接、资源、工具
├── Tasks # Map<string, TaskState> 后台任务
├── Plugins # 已加载插件、错误、禁用列表
├── Speculation # 推测执行状态
├── Session Hooks # 会话钩子
├── Attributions # Git 归因追踪
├── File History # 文件修改历史
├── Notifications # 通知队列
├── Todo # 待办事项列表
├── Agent Swarms (可选) # 多 Agent 集群状态
└── Remote Managed Settings # 远端管控设置
7.3 React 集成
// AppState.tsx
<AppStateProvider>
{children} // 通过 React Context 提供状态
</AppStateProvider>
// 使用
const value = useAppState(selector) // 基于 Object.is 比较的选择器订阅
8. UI 渲染系统
8.1 自定义 Ink 引擎
Claude Code 并未使用标准 Ink 库,而是维护了一个 自定义的终端 React 渲染器(/ink/ 目录),基于 Yoga 布局引擎,支持:
-
• 复杂的 Flexbox 终端布局 -
• 焦点管理与选择 -
• 动画帧(useAnimationFrame) -
• 终端焦点检测 -
• Tab 状态追踪 -
• 虚拟滚动
8.2 主题系统
<ThemeProvider>
<App>
... // 所有组件通过 useTheme() 获取主题
</App>
</ThemeProvider>
8.3 核心 UI 组件
|
|
|
|---|---|
REPL.tsx
|
|
FullscreenLayout.tsx |
|
VirtualMessageList.tsx |
|
Messages.tsx |
|
Message.tsx |
|
AgentProgressLine.tsx |
|
LogSelector.tsx |
|
BridgeDialog.tsx |
|
ConsoleOAuthFlow.tsx |
|
Stats.tsx |
|
CoordinatorAgentStatus.tsx |
|
BaseTextInput.tsx |
|
8.4 键绑定系统
-
• 72 个可绑定动作,分布在 18 个上下文(Global、Chat、Autocomplete、Confirmation 等) -
• 支持和弦键(chord)、平台特定绑定(Windows/macOS/Linux) -
• 用户可自定义覆盖 -
• Vim 模式完整支持
9. 服务层(Services)
38 个服务模块组成了系统的后端基础设施:
9.1 API 服务
services/api/
├── claude.ts # 主 API 交互:流式调用、消息规范化、token 计数
├── client.ts # Anthropic SDK 客户端管理
├── bootstrap.ts # API 初始化
├── withRetry.ts # 重试逻辑
└── errors.ts # 错误分类(可重试 vs 致命)
9.2 MCP 服务(Model Context Protocol)
services/mcp/
├── types.ts # MCP 服务器配置类型(stdio/sse/http/ws/sdk 传输)
├── MCPConnectionManager.tsx # 连接生命周期管理
├── client.ts # MCP 客户端封装
├── InProcessTransport.ts # 进程内传输(测试用)
├── SdkControlTransport.ts # SDK 传输
├── auth.ts # MCP 认证(含 OAuth、XAA)
├── channelPermissions.ts # MCP 通道权限回调
├── elicitationHandler.ts # 处理 MCP 服务器的 elicitation 请求
└── vscodeSdkMcp.ts # VSCode SDK MCP 集成
9.3 其他关键服务
|
|
|
|---|---|
analytics/ |
|
lsp/ |
|
tools/ |
|
SessionMemory/ |
|
teamMemorySync/ |
|
compact/ |
|
AgentSummary/ |
|
plugins/ |
|
extractMemories/ |
|
oauth/ |
|
policyLimits/ |
|
voice.ts |
|
vcr.ts |
|
tokenEstimation.ts |
|
notifier.ts |
|
10. 桥接与远程系统
10.1 Bridge — Claude Code Remote (CCR)
Bridge 层实现了 CLI 与云端环境(claude.ai、Web UI)的分布式执行桥接:
REPL 会话
↓
useReplBridge Hook(自动启动)
↓
initReplBridge → bridgeApi.createSession()
↓
replBridge.initBridgeCore() → WebSocket 连接
↓
消息轮询循环 ← 转发 REPL 消息 → 发送 Bridge 消息
↓
权限请求 → 队列 → UI → 用户决定
↓
工具执行结果 → 路由回 Bridge
核心文件(33 个,~500K 行):
-
• bridgeMain.ts— 多会话编排、连接生命周期、消息路由 -
• replBridge.ts— REPL 特定桥接(入站队列、权限转发) -
• bridgeApi.ts— HTTP 客户端(OAuth + JWT + 设备信任) -
• remoteBridgeCore.ts— WebSocket 管理、重连退避、心跳 -
• bridgeMessaging.ts— 消息协议序列化/反序列化
10.2 Remote Session
remote/
├── RemoteSessionManager.ts # 远程会话生命周期管理
├── SessionsWebSocket.ts # WebSocket 客户端(OAuth 认证、自动重连)
├── remotePermissionBridge.ts # 权限路由(SDK ↔ 远程会话)
└── sdkMessageAdapter.ts # SDK 消息格式适配
11. 扩展系统
11.1 插件系统
interface BuiltinPluginDefinition {
name: string
description: string
version: string
defaultEnabled?: boolean
isAvailable?: () => boolean // 平台特定可用性
skills?: BundledSkillDefinition[] // 技能列表
hooks?: HooksSettings // Hook 配置
mcpServers?: MCPServerDefinition[] // MCP 服务器定义
}
特点:
-
• 通过 @builtin市场标识注册 -
• 用户可通过 /plugin命令启用/禁用 -
• 支持技能、Hook、MCP 服务器三种扩展方式 -
• 设置持久化到用户配置
11.2 技能系统
interface BundledSkillDefinition {
name: string
description: string
getPromptForCommand(args, context): Promise<ContentBlockParam[]> // 技能即提示词
allowedTools?: string[] // 工具白名单
whenToUse?: string // 使用指南
model?: string // 覆盖模型
context?: 'inline' | 'fork' // 执行上下文
files?: Record<string, string> // 绑定参考文件
hooks?: HooksSettings // 启用特定 Hook
}
18 个内建技能包括:remember(记忆管理)、debug(调试)、loop(循环)、scheduleRemoteAgents(远程 Agent 调度)等。
核心理念:技能是提示词,不是代码。首次调用时触发文件提取(memoized),目录前缀注入 prompt。
11.3 命令系统
命令按优先级加载:
-
1. 内建命令(70+ 静态导入) -
2. 绑定技能(同步注册) -
3. 内建插件技能 -
4. 技能目录命令 -
5. 工作流命令(feature-gated) -
6. 插件命令
命令类型:prompt(模型可调用技能)、local(CLI-only)、local-jsx(Ink UI 命令)
12. 记忆系统(Memory System)
memdir/
├── memdir.ts # 核心操作(MEMORY.md 入口,200 行 / 25KB 上限)
├── memoryTypes.ts # 四种记忆类型:user / feedback / project / reference
├── findRelevantMemories.ts # 记忆检索
├── memoryScan.ts # 记忆文件扫描
├── memoryAge.ts # 时间戳追踪
├── paths.ts # 记忆目录路径
├── teamMemPaths.ts # 团队记忆路径
└── teamMemPrompts.ts # 团队记忆提示构建
记忆类型:
|
|
|
|---|---|
user |
|
feedback |
|
project |
|
reference |
|
MEMORY.md 作为索引文件,每条记忆指向独立的 .md 文件,支持团队共享模式。
13. 多 Agent 编排
13.1 Agent 工具
AgentTool 支持多种 Agent 派生模式:
-
• 本地 Agent(LocalAgentTask)— 同进程子 Agent -
• 远程 Agent(RemoteAgentTask)— CCR 环境隔离执行 -
• 进程内队友(InProcessTeammate)— 共享上下文 -
• Fork Agent — Git worktree 隔离 -
• 多 Agent 集群(Agent Swarms)— feature-gated
13.2 协调器模式(Coordinator Mode)
coordinator/coordinatorMode.ts
├── isCoordinatorMode() # 检测协调器/工作者模式
├── matchSessionMode() # 恢复时确保模式一致
├── getCoordinatorUserContext() # 为派生工作者构建上下文
└── 工具白名单管理 # 基于会话类型限制可用工具
13.3 任务系统
type TaskType = 'local_bash' | 'local_agent' | 'remote_agent' |
'in_process_teammate' | 'local_workflow' | 'monitor_mcp' | 'dream'
type TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'killed'
任务 ID 生成:类型前缀(b/a/r/t/w/m/d)+ 8 位随机字符(36^8 ≈ 2.8 万亿组合)。输出持久化到磁盘文件。
14. Hook 系统
87 个 React Hook 构成了 UI 逻辑的核心:
14.1 输入与通信
|
|
|
|---|---|
useTextInput |
|
useTypeahead |
|
useCommandKeybindings |
|
useReplBridge |
|
14.2 权限与安全
useCanUseTool(~40K 行)是最大的 Hook,负责:权限决策路由、分类器审批追踪、权限上下文管理、工具权限队列与批处理。
14.3 导航与历史
|
|
|
|---|---|
useArrowKeyHistory |
|
useHistorySearch |
|
useVirtualScroll |
|
14.4 集成
|
|
|
|---|---|
useIDEIntegration |
|
useVoice |
|
useInboxPoller |
|
useSwarmPermissionPoller |
|
15. 成本与遥测
15.1 成本追踪
// cost-tracker.ts 提供的追踪维度
getTotalCost() // 总费用(USD)
getTotalDuration() // 总耗时
getTotalAPIDuration() // API 调用耗时
getTotalInputTokens() // 输入 token
getTotalOutputTokens() // 输出 token
getTotalCacheReadInputTokens() // 缓存读取 token
getTotalCacheCreationInputTokens() // 缓存创建 token
getTotalWebSearchRequests() // Web 搜索次数
getTotalLinesAdded() / Removed() // 代码行变更
支持按模型分别追踪,会话恢复时可恢复成本状态。
15.2 分析系统
-
• Analytics — 无依赖队列模式,init 时挂接发送器 -
• GrowthBook — Feature flag 评估(缓存、懒评估) -
• OpenTelemetry — 遥测追踪(延迟加载) -
• Metadata 清洗 — 不收集代码内容或文件路径
16. 数据迁移
/migrations/ 目录包含 12 个幂等迁移脚本,处理:
-
• 模型版本升级(Sonnet 4.5 → Sonnet 4.6, Opus → Opus 1M) -
• MCP 服务器配置迁移 -
• 自动更新偏好迁移 -
• 远程控制设置迁移 -
• Auto-mode opt-in 重置
每个迁移均记录分析日志,支持安全的增量升级。
17. 关键架构模式总结
17.1 编译期 Feature Gate
import { feature } from "bun:bundle"
if (feature("COORDINATOR_MODE")) {
// 编译时决定是否包含此代码块
// 未启用时整个分支被死代码消除
}
17.2 懒加载 Schema
const schema = lazySchema(() => z.object({...}))
// 延迟 Zod schema 创建,避免循环依赖
17.3 Memoization 策略
大量使用 lodash memoize 缓存昂贵操作(命令加载、工具列表、git 状态等),按 cwd/context 键缓存,支持手动清除。
17.4 流式 + 进度回调
tool.call(args, context, onProgress)
// onProgress 回调支持实时 UI 更新
// 类型安全的进度类型:BashProgress, AgentToolProgress 等
17.5 渲染与逻辑分离
每个工具定义 5 种渲染方法,严格分离执行逻辑和 UI 展示。支持 condensed 样式、verbose 模式、transcript 模式。
17.6 安全优先
-
• 权限系统多层过滤(deny 规则 → 模式过滤 → 运行时检查) -
• Bash 命令 AST 级别安全分析 -
• 破坏性操作显式警告 -
• 沙箱执行支持 -
• 文件路径安全验证 -
• 设备文件阻止(防止 /dev/zero等导致挂起)
17.7 优雅降级
技能/插件加载失败不会崩溃主进程,返回空数组。API 错误支持分类重试(可重试 vs 致命)。
18. 系统数据流全景图
┌───────────────────────────────────────────────────────────────────┐
│ 用户终端界面 │
│ ┌─────────────┐ ┌───────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ useTextInput│ │ useTypeahead│ │ Vim Mode │ │ useVoice │ │
│ └──────┬──────┘ └─────┬─────┘ └────┬─────┘ └──────┬───────┘ │
│ └───────────────┼──────────────┼───────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ REPL.tsx (主交互循环) │ │
│ └──────────────────────────┬─────────────────────────────────┘ │
└─────────────────────────────┼─────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 查询引擎 (QueryEngine) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ query() Async Generator 主循环 │ │
│ │ ┌─ 消息压缩管线 ──────────────────────────────────┐ │ │
│ │ │ Snip → Micro → ContextCollapse → AutoCompact │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ ┌─ API 调用 ─────────────────────────────────────┐ │ │
│ │ │ queryModelWithStreaming() → Anthropic API │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ ┌─ 工具执行 ─────────────────────────────────────┐ │ │
│ │ │ 权限检查 → toolOrchestration.runTools() │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ ┌─ Stop Hooks ───────────────────────────────────┐ │ │
│ │ │ 任务完成检测 / 模板分类 │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────┬───────────────────────┬───────────────────┘
↓ ↓
┌─────────────────────┐ ┌──────────────────────────────┐
│ 工具系统 (45+) │ │ 服务层 (38 模块) │
│ ┌───────────────┐ │ │ ┌────────────────────────┐ │
│ │ BashTool │ │ │ │ API Service │ │
│ │ FileRead/Edit │ │ │ │ MCP Service │ │
│ │ AgentTool │ │ │ │ Analytics / Telemetry │ │
│ │ WebSearch/Fetch│ │ │ │ LSP Service │ │
│ │ MCPTool │ │ │ │ Session Memory │ │
│ │ SkillTool │ │ │ │ Plugin Manager │ │
│ │ Task*Tool │ │ │ │ Cost Tracker │ │
│ │ ... │ │ │ │ Token Estimation │ │
│ └───────────────┘ │ │ └────────────────────────┘ │
└─────────────────────┘ └──────────────────────────────┘
↓ ↓
┌─────────────────────────────────────────────────────────┐
│ 扩展层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │ Plugins │ │ Skills │ │ MCP │ │ Hooks │ │
│ │ (市场) │ │ (技能) │ │ (服务器) │ │ (事件) │ │
│ └──────────┘ └──────────┘ └──────────┘ └────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 桥接 & 远程层 │
│ ┌────────────────┐ ┌──────────────────────────────┐ │
│ │ Bridge (CCR) │ │ Remote Session Manager │ │
│ │ WebSocket │ │ SDK Message Adapter │ │
│ │ OAuth + JWT │ │ Permission Routing │ │
│ └────────────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
19. 文件规模参考
|
|
|
|
|---|---|---|
main.tsx |
|
|
REPL.tsx |
|
|
query.ts |
|
|
QueryEngine.ts |
|
|
interactiveHelpers.tsx |
|
|
commands.ts |
|
|
tools.ts |
|
|
Tool.ts |
|
|
utils/
|
|
|
components/
|
|
|
bridge/
|
|
|
services/
|
|
|
hooks/
|
|
|
commands/
|
|
|
tools/
|
|
|
本文档基于源码静态分析生成,反映了 Claude Code 截至 2026 年 3 月的架构状态。
夜雨聆风