Claude Code 领域模型分析
1. 核心领域概念
1.1 主要实体一览
| 实体 | 核心文件 | 说明 |
|---|---|---|
| Tool | src/Tool.ts | AI 可调用的工具,统一接口定义 |
| Command | src/types/command.ts | 用户斜杠命令,三种子类型 |
| Query | src/query.ts | 一次 agentic 循环执行 |
| QueryEngine | src/QueryEngine.ts | 会话级对话管理器 |
| Message | src/query.ts | 对话中的消息单元 |
| AppState | src/state/AppStateStore.ts | 全局应用状态(~90 个字段) |
| Store | src/state/store.ts | 轻量级响应式状态容器 |
| Permission | src/types/permissions.ts | 权限决策结果 |
| MCPConnection | src/services/mcp/types.ts | MCP 服务器连接 |
| BridgeWorker | src/bridge/types.ts | 远程控制 Worker |
| Agent | src/tools/AgentTool/ | 子 Agent 定义与调度 |
| Session | src/bootstrap/state.ts | 会话生命周期 |
2. 核心实体关系图
3. Tool 系统领域模型
3.1 Tool 类型层次
3.2 Tool 执行生命周期
3.3 工具池组装
getAllBaseTools() -- 43 个工具全量列表
↓ filterToolsByDenyRules() -- 按权限策略过滤
↓ REPL 模式过滤 -- 隐藏 REPL 内部工具
↓ isEnabled() 过滤 -- 功能开关过滤
↓ + MCP 工具 -- 合并外部工具
↓ uniqBy('name') -- 去重(内置优先)
= 最终工具池
3.4 关键工具一览
| 工具 | 文件数 | 行数 | 核心特性 |
|---|---|---|---|
| BashTool | 18 | ~7000+ | 7 层安全分析、AST 解析、sed 拦截 |
| FileReadTool | 5 | 1183 | 文件去重、PDF 支持、token 预算 |
| AgentTool | 15 | 1398 | 子 Agent 调度、后台执行、worktree 隔离 |
| MCPTool | 4 | 77 | 原型模式、运行时动态克隆 |
| GrepTool | 1 | 577 | ripgrep 封装、结果按 mtime 排序 |
| WebFetchTool | 1 | 318 | 域名级权限规则、预批准主机 |
4. Command 系统领域模型
4.1 Command 类型层次
4.2 命令发现与优先级
4.3 命令分派流程
5. Query / 对话领域模型
5.1 Message 类型层次
5.2 Agentic 循环状态机
5.3 继续原因 (Transition Reasons)
| 原因 | 说明 |
|---|---|
next_turn | 正常工具调用后的下一轮 |
reactive_compact_retry | 413 后响应式压缩重试 |
collapse_drain_retry | 上下文折叠排水重试 |
max_output_tokens_recovery | 输出 token 截断恢复 |
max_output_tokens_escalate | 输出 token 升级到 64k |
stop_hook_blocking | stop hook 产生 blocking error |
token_budget_continuation | token 预算未耗尽,自动继续 |
5.4 错误恢复策略
6. 状态管理模型
6.1 Store 架构
6.2 数据流
6.3 Context Provider 层级
App.tsx
├── FpsMetricsProvider (FPS 指标)
├── StatsProvider (统计数据)
└── AppStateProvider (核心应用状态)
├── MailboxProvider (消息邮箱)
├── VoiceProvider (语音, feature-gated)
├── MCPConnectionManager (MCP 连接)
└── [子组件树]
6.4 Bootstrap State 的"上帝模块"
src/bootstrap/state.ts(1758 行)是一个全局可变状态模块,包含:
- 会话 ID、CWD、模型设置、计费统计
- OpenTelemetry meter/counter 引用
- Hook 注册表(
createSignal()创建的响应式信号) - 会话切换函数
switchSession()
文件顶部警告:// DO NOT ADD MORE STATE HERE - BE JUDICIOUS WITH GLOBAL STATE。这反映了工程团队对全局状态膨胀的警觉。
7. 权限领域模型
7.1 权限决策类型
7.2 BashTool 权限决策(最复杂)
8. MCP 集成领域模型
8.1 MCP 服务器生命周期
8.2 配置作用域
enterprise (企业级) > local (本地) > project (项目) > user (用户) > plugin (插件)
策略过滤:黑名单绝对优先 → 白名单检查 → 默认允许。
9. 会话领域模型
9.1 会话生命周期
9.2 会话持久化
- 会话消息持久化到
~/.claude/projects/目录 - 成本状态跨会话持久化(
cost-tracker.ts) - 支持
--continue(最近会话)、--resume <id>(指定会话)、--fork-session(分叉) - Teleport 功能:跨机器会话迁移