**[English](DOCUMENTATION.md)** | **[中文](DOCUMENTATION.zh-CN.md)** # Claude Code — 源码文档与架构分析 > **Claude Code** 是 Anthropic 官方的 Claude CLI 工具。本文档提供了对其源码架构、模块和内部设计模式的全面逆向工程分析。 --- ## 如何阅读本文档 本文档是对 Claude Code 源码树进行深度分析的成果。它面向希望了解 Claude Code 底层工作原理的**开发者和工程师**——包括其架构、模块边界、数据流和设计决策。 **结构:** 文档采用自顶向下的组织方式,从项目概览和技术栈开始,然后深入到各个主要子系统(工具、命令、状态、服务、UI)。每个章节都是独立的;你可以通过目录跳转到任意章节。 **受众:** 熟悉 TypeScript、React 和 CLI 工具的中高级开发者。有 AI/LLM 工具开发经验会有帮助,但不是必需的。 **范围:** 本文档涵盖源码树结构、模块清单和架构模式。不深入涉及运行时行为,也不包含性能基准测试或安全审计。 --- ## 目录 1. [项目概览](#1-项目概览) 2. [技术栈](#2-技术栈) 3. [目录结构](#3-目录结构) 4. [入口点](#4-入口点) 5. [核心架构](#5-核心架构) 6. [工具系统](#6-工具系统) 7. [命令系统](#7-命令系统) 8. [状态管理](#8-状态管理) 9. [任务系统](#9-任务系统) 10. [服务与集成](#10-服务与集成) 11. [UI 层](#11-ui-层) 12. [工具函数](#12-工具函数) 13. [特殊模式](#13-特殊模式) 14. [插件与技能](#14-插件与技能) 15. [钩子与可扩展性](#15-钩子与可扩展性) 16. [文件统计](#16-文件统计) 17. [架构模式](#17-架构模式) --- ## 1. 项目概览 Claude Code 是一个功能丰富的交互式终端应用,允许直接在命令行中进行 AI 辅助软件工程。它提供: - **交互式 REPL**,用于与 Claude 进行代码相关的对话 - **40+ 工具**,用于文件操作、Shell 执行、网络搜索等 - **100+ 斜杠命令**,用于提交、审查、调试等工作流 - **Agent/任务系统**,用于通过子 Agent 并行处理复杂工作 - **计划模式**,用于在编码前设计实现策略 - **MCP(Model Context Protocol)** 集成,提供可扩展的服务端工具 - **插件与技能系统**,用于用户自定义扩展 - **语音模式**、**桌面/移动端桥接**和**远程会话** --- ## 2. 技术栈 | 层级 | 技术 | |----------------|--------------------------------------------------------------| | 语言 | TypeScript (`.ts` / `.tsx`) | | 运行时 | Bun(打包工具,通过 `bun:bundle` 实现特性标志) | | UI 框架 | React + [Ink](https://github.com/vadimdemedes/ink)(终端 React 渲染器)| | API 客户端 | `@anthropic-ai/sdk`(Anthropic SDK) | | MCP | `@modelcontextprotocol/sdk` | | CLI 框架 | `@commander-js/extra-typings` | | 数据验证 | Zod v4 | | 样式 | Chalk(终端颜色) | | 状态管理 | Zustand 风格 Store + React Context | --- ## 3. 目录结构 ```text claude-code-analysis/ └── src/ # 所有源码(单一顶级目录) ├── main.tsx # 主引导与初始化 ├── QueryEngine.ts # 对话循环编排器 ├── Tool.ts # 工具类型定义与接口 ├── Task.ts # 任务类型定义与生命周期 ├── commands.ts # 命令注册表 ├── tools.ts # 工具注册表与工厂 ├── context.ts # 系统/用户上下文构建器 ├── query.ts # 查询上下文准备 ├── setup.ts # 启动阶段编排 ├── history.ts # 聊天会话历史 ├── cost-tracker.ts # Token 用量与定价 ├── ink.ts # Ink 渲染封装 ├── replLauncher.tsx # REPL React 组件启动器 ├── tasks.ts # 任务执行管理器 │ ├── commands/ # 101 个命令模块(斜杠命令) ├── tools/ # 41 个工具实现 ├── services/ # 核心服务(API、MCP、分析等) ├── components/ # React/Ink UI 组件(130+ 文件) ├── utils/ # 工具函数(300+ 文件) ├── state/ # 应用状态管理 ├── types/ # TypeScript 类型定义 ├── hooks/ # React Hooks ├── schemas/ # Zod 验证模式 ├── tasks/ # 任务类型实现 ├── entrypoints/ # 入口点定义(CLI、SDK、MCP) ├── bootstrap/ # 应用启动与全局状态 ├── screens/ # 全屏 UI 布局 ├── plugins/ # 插件系统(内置插件) ├── skills/ # 自定义技能系统(内置技能) ├── memdir/ # 内存目录自动发现 ├── constants/ # 应用常量 ├── migrations/ # 数据/模式迁移 ├── ink/ # Ink 终端自定义 ├── keybindings/ # 键盘绑定系统 ├── context/ # React Context(信箱、通知) ├── query/ # 查询处理模块 ├── outputStyles/ # 输出格式化样式 ├── vim/ # Vim 模式集成 ├── voice/ # 语音输入/输出 ├── native-ts/ # 原生 TypeScript 绑定 ├── assistant/ # Kairos(助手)模式 ├── bridge/ # Bridge 模式(常驻远程连接) ├── buddy/ # Buddy/队友系统 ├── coordinator/ # 多 Agent 协调 ├── remote/ # 远程会话处理 ├── server/ # 服务器实现 ├── cli/ # CLI 参数解析 └── upstreamproxy/ # 上游代理设置 ``` --- ## 4. 入口点 ### 主入口:`src/main.tsx` 主引导文件(约 1,400 行)。执行以下操作: 1. 通过 `startupProfiler.ts` 进行**启动性能分析** 2. **MDM(移动设备管理)** 原始数据预读取 3. **钥匙串预取**(macOS OAuth + API 密钥并行读取) 4. 通过 Bun 的 `feature()` 进行**特性标志初始化**,实现死代码消除 5. 通过 Commander.js 进行 **CLI 参数解析** 6. **身份认证**(API 密钥、OAuth、AWS Bedrock、GCP Vertex、Azure) 7. **GrowthBook** 初始化(A/B 测试与特性标志) 8. **策略限制**和**远程托管设置**加载 9. **工具、命令、技能和 MCP 服务器**注册 10. 通过 `replLauncher.tsx` **启动 REPL** ### 其他入口点(`src/entrypoints/`) | 文件 | 用途 | |---------------------|----------------------------------------------| | `cli.tsx` | CLI 入口点,带 React/Ink UI 渲染 | | `init.ts` | 引导初始化、版本检查 | | `mcp.ts` | Model Context Protocol 集成 | | `agentSdkTypes.ts` | Agent SDK 的类型定义 | | `sandboxTypes.ts` | 沙箱执行环境类型 | | `sdk/` | SDK 相关实现 | ### 启动阶段:`src/setup.ts` 负责编排: - Node.js 版本验证 - 工作树初始化 - 会话与权限模式设置 - Git 根目录检测 - UDS 消息服务器启动 --- ## 5. 核心架构 ### 5.1 查询引擎(`src/QueryEngine.ts`) 应用的核心(约 46KB)。管理用户与 Claude 之间的对话循环: - **消息管理** — 维护包含用户、助手、系统和工具消息的对话历史 - **流式传输** — 实时 Token 流式传输与工具调用执行 - **自动压缩** — 当接近上下文窗口限制时自动压缩上下文 - **提示词缓存** — 通过缓存感知策略优化重复上下文 - **重试逻辑** — 处理 API 错误、速率限制和过载,支持退避策略 - **用量追踪** — 统计 Token 数量(输入/输出/缓存读取/缓存写入)和成本 - **工具编排** — 分发工具调用、收集结果、管理权限 ### 5.2 上下文构建器(`src/context.ts`、`src/query.ts`) 准备系统提示词和用户上下文: - 发现并合并 `CLAUDE.md` 文件(项目级、用户级、全局级) - 构建系统上下文(操作系统、Shell、平台、Git 状态) - 集成用户上下文(权限、工作目录) - 跨查询缓存上下文以提升性能 ### 5.3 成本追踪(`src/cost-tracker.ts`) 追踪每次会话的成本: - 按模型统计 Token 数量(输入、输出、缓存读取/写入) - 通过定价表计算美元成本 - 会话持续时间追踪 - 网络搜索请求计数 - 文件变更指标 --- ## 6. 工具系统 ### 架构(`src/Tool.ts`、`src/tools.ts`) 每个工具都是一个自包含的模块,包含: - **JSON Schema** 输入验证 - **权限模型**(询问/允许/拒绝模式) - **进度追踪**类型 - **错误处理**和用户提示 ### 完整工具清单(41 个工具) #### 文件操作 | 工具 | 用途 | |-------------------|--------------------------------------------| | `FileReadTool` | 读取文件内容,支持行范围 | | `FileWriteTool` | 创建或覆盖文件 | | `FileEditTool` | 精确字符串替换编辑 | | `GlobTool` | 基于模式的文件匹配 | | `GrepTool` | 基于正则的内容搜索(基于 ripgrep) | #### 代码执行 | 工具 | 用途 | |-------------------|--------------------------------------------| | `BashTool` | 执行 Shell 命令,支持超时 | | `PowerShellTool` | 执行 PowerShell 命令(Windows) | | `REPLTool` | 执行 Python 代码(仅内部使用) | | `NotebookEditTool`| Jupyter Notebook 单元格操作 | #### 网络与搜索 | 工具 | 用途 | |-------------------|--------------------------------------------| | `WebFetchTool` | 获取并解析网页内容 | | `WebSearchTool` | 互联网搜索 | | `ToolSearchTool` | 搜索可用的延迟加载工具 | #### Agent 与任务管理 | 工具 | 用途 | |-------------------|--------------------------------------------| | `AgentTool` | 生成子 Agent 进行并行工作 | | `TaskCreateTool` | 创建新的后台任务 | | `TaskGetTool` | 获取任务状态和结果 | | `TaskUpdateTool` | 更新任务状态或描述 | | `TaskListTool` | 列出所有任务及其状态 | | `TaskStopTool` | 终止正在运行的任务 | | `TaskOutputTool` | 流式读取任务输出 | | `SendMessageTool` | 向运行中的 Agent 发送消息 | #### 计划与工作流 | 工具 | 用途 | |-------------------|--------------------------------------------| | `EnterPlanModeTool` | 进入只读计划模式 | | `ExitPlanModeTool` | 退出计划模式并获得批准 | | `EnterWorktreeTool` | 创建隔离的 Git 工作树 | | `ExitWorktreeTool` | 从工作树返回并携带变更 | #### MCP(Model Context Protocol) | 工具 | 用途 | |-------------------|--------------------------------------------| | `MCPTool` | 调用 MCP 服务器上的工具 | | `McpAuthTool` | MCP 服务器认证 | | `ListMcpResourcesTool` | 列出 MCP 服务器资源 | | `ReadMcpResourceTool` | 读取特定 MCP 资源 | #### 配置与系统 | 工具 | 用途 | |-------------------|--------------------------------------------| | `ConfigTool` | 读取/修改设置 | | `SkillTool` | 执行用户自定义技能 | | `AskUserQuestionTool` | 提示用户输入/确认 | | `BriefTool` | 生成会话摘要 | | `TodoWriteTool` | 管理待办事项列表 | | `SleepTool` | 暂停执行指定时长 | #### 团队与远程 | 工具 | 用途 | |-------------------|--------------------------------------------| | `TeamCreateTool` | 创建 Agent 团队 | | `TeamDeleteTool` | 删除 Agent 团队 | | `RemoteTriggerTool` | 触发远程任务执行 | | `ScheduleCronTool` | 调度定时任务 | | `LSPTool` | Language Server Protocol 集成 | #### 内部工具 | 工具 | 用途 | |-------------------|--------------------------------------------| | `SyntheticOutputTool` | 用于结构化响应的合成输出 | --- ## 7. 命令系统 ### 注册表(`src/commands.ts`) 命令是 `src/commands/` 下的模块化目录,每个目录包含一个 `index.ts`(或类似文件),导出一个 `Command` 定义,包含名称、描述、处理函数和可选的别名。 ### 完整命令清单(101 个模块) #### Git 与版本控制 `commit`、`commit-push-pr`、`diff`、`branch`、`review`、`autofix-pr`、`pr_comments`、`teleport`、`rewind`、`tag` #### 会话与历史 `session`、`resume`、`clear`、`compact`、`export`、`share`、`summary`、`context` #### 配置与设置 `config`、`permissions`、`privacy-settings`、`theme`、`color`、`keybindings`、`vim`、`output-style`、`statusline`、`env` #### Agent 与任务管理 `agents`、`tasks`、`brief` #### 文件与代码操作 `files`、`add-dir`、`diff`、`debug-tool-call`、`copy` #### 开发与调试 `doctor`、`heapdump`、`perf-issue`、`stats`、`bughunter`、`ctx_viz`、`ant-trace` #### 身份认证 `login`、`logout`、`oauth-refresh` #### 扩展与插件 `mcp`、`plugin`、`reload-plugins`、`skills` #### 工作区 `plan`、`sandbox-toggle`、`init` #### 信息与帮助 `help`、`version`、`cost`、`usage`、`extra-usage`、`release-notes`、`status`、`insights` #### 平台集成 `desktop`、`mobile`、`chrome`、`ide`、`install`、`install-github-app`、`install-slack-app` #### 记忆与知识 `memory`、`good-claude` #### 模型与性能 `model`、`effort`、`fast`、`thinkback`、`thinkback-play`、`advisor` #### 特殊操作 `bridge`、`voice`、`remote-setup`、`remote-env`、`stickers`、`feedback`、`onboarding`、`passes`、`ultraplan`、`rename`、`exit` --- ## 8. 状态管理 ### Store 架构(`src/state/`) | 文件 | 用途 | |-------------------|------------------------------------------------| | `AppState.tsx` | React Context 提供者,带 `useAppState(selector)` Hook | | `AppStateStore.ts`| 中心状态结构定义 | | `store.ts` | Zustand 风格 Store 实现 | ### 关键状态字段 ```typescript { settings: UserSettings // 来自 settings.json 的用户配置 mainLoopModel: string // 当前活跃的 Claude 模型 messages: Message[] // 对话历史 tasks: TaskState[] // 运行中/已完成的任务 toolPermissionContext: { // 每个工具的权限规则 rules: PermissionRule[] bypassMode: 'auto' | 'block' | 'ask' denialTracking: DenialTrackingState } kairosEnabled: boolean // 助手模式标志 remoteConnectionStatus: Status // 远程会话连接状态 replBridgeEnabled: boolean // 常驻桥接(CCR)状态 speculationState: Cache // 内联推测缓存/预览 } ``` --- ## 9. 任务系统 ### 任务类型(`src/Task.ts`) | 类型 | 描述 | |-----------------------|-------------------------------------------------| | `local_bash` | 本地 Shell 命令执行 | | `local_agent` | 本地子 Agent(通过 AgentTool 生成) | | `remote_agent` | 远程 Agent 执行 | | `in_process_teammate` | 进程内队友(共享内存空间) | | `local_workflow` | 本地多步骤工作流 | | `monitor_mcp` | MCP 服务器监控任务 | | `dream` | 自动梦境后台任务 | ### 任务生命周期 ```text pending -> running -> completed -> failed -> killed ``` ### 任务状态结构 ```typescript { id: string // 带类型前缀的唯一 ID(例如 "b-xxx" 表示 bash) type: TaskType status: TaskStatus description: string startTime: number endTime?: number outputFile: string // 磁盘持久化输出 outputOffset: number // 当前读取位置 notified: boolean // 是否已报告完成 } ``` --- ## 10. 服务与集成 ### 10.1 API 客户端(`src/services/api/`) | 文件 | 用途 | |-----------------------------|----------------------------------------------| | `client.ts` | Anthropic SDK 客户端,支持多提供商 | | `claude.ts` | 消息流式传输与工具调用处理 | | `bootstrap.ts` | 启动时获取引导数据 | | `usage.ts` | Token 用量记录 | | `errors.ts` / `errorUtils.ts` | 错误分类与处理 | | `logging.ts` | API 请求/响应日志 | | `withRetry.ts` | 指数退避重试逻辑 | | `filesApi.ts` | 文件上传/下载 | | `sessionIngress.ts` | 远程会话桥接 | | `grove.ts` | Grove 集成 | | `referral.ts` | 推荐/通行证系统 | **支持的提供商:** - Anthropic 直连 API - AWS Bedrock - Google Cloud Vertex AI - Azure Foundry ### 10.2 MCP 集成(`src/services/mcp/`) | 文件 | 用途 | |-------------------------|------------------------------------------------| | `client.ts` | MCP 客户端实现 | | `types.ts` | 服务器定义与连接类型 | | `config.ts` | 配置加载与验证 | | `auth.ts` | MCP 服务器的 OAuth/认证 | | `officialRegistry.ts` | 官方 MCP 服务器注册表 | | `InProcessTransport.ts` | 进程内 MCP 传输 | | `normalization.ts` | URL/配置规范化 | | `elicitationHandler.ts` | 通过 MCP 提示用户 | ### 10.3 分析与遥测(`src/services/analytics/`) | 文件 | 用途 | |-----------------------------|--------------------------------------------| | `index.ts` | 事件日志 API | | `growthbook.ts` | 特性标志与 A/B 测试 | | `sink.ts` | 分析接收器配置 | | `datadog.ts` | Datadog 集成 | | `firstPartyEventLogger.ts` | 第一方分析 | | `metadata.ts` | 事件元数据增强 | ### 10.4 上下文压缩(`src/services/compact/`) | 文件 | 用途 | |----------------------------|---------------------------------------------| | `compact.ts` | 完整上下文窗口压缩 | | `autoCompact.ts` | 自动压缩触发器 | | `microCompact.ts` | 选择性消息修剪 | | `compactWarning.ts` | 压缩用户警告 | | `sessionMemoryCompact.ts` | 跨压缩的记忆持久化 | ### 10.5 其他服务 | 目录/文件 | 用途 | |-------------------------------|-------------------------------------------| | `SessionMemory/` | 会话记忆持久化与转录 | | `MagicDocs/` | 智能文档生成 | | `AgentSummary/` | Agent 执行摘要 | | `PromptSuggestion/` | 建议的后续提示词 | | `extractMemories/` | 从对话中提取学习内容 | | `plugins/` | 插件生命周期管理 | | `oauth/` | OAuth 客户端流程 | | `lsp/` | Language Server Protocol 客户端 | | `remoteManagedSettings/` | 远程配置同步 | | `settingsSync/` | 设置同步 | | `teamMemorySync/` | 团队记忆同步 | | `policyLimits/` | 速率限制与配额 | | `autoDream/` | 自动梦境后台功能 | | `tips/` | 上下文提示系统 | | `toolUseSummary/` | 工具使用分析 | | `voice.ts` / `voiceStreamSTT.ts` | 语音输入处理 | --- ## 11. UI 层 ### 框架 UI 使用 **React** 构建,通过 **Ink** 渲染到终端。组件使用标准 React 模式(Hooks、Context、Props),但渲染为终端 ANSI 输出而非 DOM。 ### 核心应用组件 | 组件 | 文件 | 用途 | |--------------------|-------------------------------|-------------------------------| | `App` | `components/App.tsx` | 根应用组件 | | `REPL` | `screens/REPL.tsx` | 主 REPL 界面 | | `Messages` | `components/Messages.tsx` | 对话消息列表 | | `PromptInput` | `components/PromptInput/` | 带自动补全的用户输入 | | `StatusLine` | `components/StatusLine.tsx` | 底部状态栏 | ### 组件分类 #### 消息展示 `Message.tsx`、`MessageRow.tsx`、`MessageResponse.tsx`、`MessageModel.tsx`、`MessageTimestamp.tsx`、`MessageSelector.tsx`、`messages/`(专用消息类型子目录) #### 对话框与模态组件 `TrustDialog/`、`AutoModeOptInDialog.tsx`、`BypassPermissionsModeDialog.tsx`、`CostThresholdDialog.tsx`、`BridgeDialog.tsx`、`ExportDialog.tsx`、`InvalidConfigDialog.tsx`、`InvalidSettingsDialog.tsx`、`ManagedSettingsSecurityDialog/`、`IdeAutoConnectDialog.tsx`、`IdleReturnDialog.tsx`、`WorktreeExitDialog.tsx`、`RemoteEnvironmentDialog.tsx` #### 代码展示 `HighlightedCode/`、`StructuredDiff/`、`FileEditToolDiff.tsx` #### 设置与配置 `Settings/`、`ThemePicker.tsx`、`OutputStylePicker.tsx`、`ModelPicker.tsx`、`LanguagePicker.tsx` #### 任务与 Agent UI `tasks/`、`teams/`、`agents/`、`CoordinatorAgentStatus.tsx`、`TaskListV2.tsx`、`TeammateViewHeader.tsx` #### 导航与搜索 `GlobalSearchDialog.tsx`、`HistorySearchDialog.tsx`、`QuickOpenDialog.tsx`、`SearchBox.tsx` #### 设计系统 `design-system/`、`Spinner/`、`CustomSelect/`、`LogoV2/`、`HelpV2/` #### 权限 `permissions/`(基于角色的访问对话框和提示) --- ## 12. 工具函数 `src/utils/` 目录包含 **300+ 文件**,提供底层功能。主要分类: ### Git 与版本控制 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `git.ts` | Git 命令封装 | | `git/` | 扩展 Git 工具 | | `gitDiff.ts` | Diff 生成与解析 | | `gitSettings.ts`| Git 指令开关 | | `github/` | GitHub API 辅助工具 | | `worktree.ts` | Git 工作树自动化 | ### Shell 与进程 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `Shell.ts` | Shell 执行封装 | | `shell/` | Shell 配置与辅助工具 | | `bash/` | Bash 专用工具 | | `powershell/` | PowerShell 工具 | | `execFileNoThrow.ts` | 安全进程启动 | | `process.ts` | 进程管理 | ### 认证与安全 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `auth.ts` | API 密钥、OAuth、AWS/GCP 凭证管理 | | `secureStorage/`| 钥匙串集成(macOS) | | `permissions/` | 权限规则、文件系统沙箱 | | `crypto.ts` | 加密工具 | | `sandbox/` | 沙箱环境 | ### 配置 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `config.ts` | `.claude/config.json` 管理 | | `settings/` | `settings.json` 验证与应用 | | `env.ts` | 静态环境变量 | | `envDynamic.ts` | 动态环境检测 | | `envUtils.ts` | 环境变量解析 | | `managedEnv.ts` | 托管环境配置 | ### 文件系统 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `claudemd.ts` | CLAUDE.md 自动发现与解析 | | `fileStateCache.ts` | 文件变更追踪 | | `fileHistory.ts`| 文件快照(用于撤销) | | `filePersistence/` | 持久化文件存储 | | `glob.ts` | Glob 模式匹配 | | `ripgrep.ts` | Ripgrep 集成 | ### AI 与模型 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `model/` | 模型选择与上下文窗口管理 | | `modelCost.ts` | Token 定价表 | | `thinking.ts` | 扩展思考模式配置 | | `effort.ts` | 任务工作量级别管理 | | `fastMode.ts` | 速度优化模式 | | `advisor.ts` | AI 顾问集成 | | `tokens.ts` | Token 计数与估算 | ### Agent 与集群 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `swarm/` | 多 Agent 集群协调 | | `teammate.ts` | 队友/Agent 模式工具 | | `forkedAgent.ts`| 分叉 Agent 进程管理 | | `agentContext.ts`| Agent 执行上下文 | ### 性能与诊断 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `startupProfiler.ts` | 启动性能监控 | | `headlessProfiler.ts`| 运行时性能分析 | | `fpsTracker.ts` | 帧率指标 | | `diagLogs.ts` | 诊断日志(无 PII) | | `debug.ts` | 调试工具 | ### UI 辅助工具 | 文件/目录 | 用途 | |-----------------|------------------------------------------------| | `theme.ts` | 主题管理 | | `renderOptions.ts` | Ink 渲染配置 | | `format.ts` | 数字/时长格式化 | | `markdown.ts` | Markdown 处理 | | `cliHighlight.ts` | CLI 语法高亮 | --- ## 13. 特殊模式 ### 13.1 Bridge 模式(`src/bridge/`) 通过基于 WebSocket 的会话入口与 Claude.ai 保持常驻连接。支持持久化后台会话和远程访问。 ### 13.2 Kairos / 助手模式(`src/assistant/`) 企业助手功能: - 后台任务处理 - 推送通知 - GitHub Webhook 订阅 - 远程任务监控 - 通过 `KAIROS` 标志进行功能门控 ### 13.3 协调器模式(`src/coordinator/`) 多 Agent 编排: - 任务面板管理 - Agent 交互协调 - 通过 `COORDINATOR_MODE` 标志进行功能门控 ### 13.4 语音模式(`src/voice/`) 语音输入/输出支持: - 语音转文字(STT)集成 - 文字转语音 - 语音转录 - 语音关键词检测 ### 13.5 计划模式 用于在编码前设计实现策略的只读模式: - 在 `.claude/plans/` 中创建计划文件 - 限制工具为只读操作 - 执行前需要用户明确批准 - 由 `EnterPlanModeTool` / `ExitPlanModeTool` 管理 ### 13.6 工作树模式 用于安全实验的 Git 工作树隔离: - 创建临时 Git 工作树 - 支持 tmux 会话管理 - 临时分支创建 - 变更可以合并或丢弃 ### 13.7 Vim 模式(`src/vim/`) 终端输入的 Vim 键绑定集成。 --- ## 14. 插件与技能 ### 插件系统(`src/plugins/`) - `plugins/bundled/` 中的**内置插件**(键盘快捷键、主题等) - 通过 `PluginInstallationManager` 管理插件生命周期 - 用于插件管理的 CLI 命令 - 通过 `reload-plugins` 命令支持热重载 ### 技能系统(`src/skills/`) - `skills/bundled/` 中的**内置技能**(提交、审查、简化等) - 技能是可通过 `/skill-name` 调用的命名提示词 - 技能发现与执行引擎 - 变更检测支持实时更新 --- ## 15. 钩子与可扩展性 ### 钩子模式(`src/schemas/hooks.ts`) 通过 Zod 验证定义: - `HookEvent` — 执行前/执行后生命周期钩子 - `PromptRequest` / `PromptResponse` — 用户提示协议 - 同步和异步钩子响应模式 - 权限决策钩子 ### React Hooks(`src/hooks/`) | Hook | 用途 | |---------------------|--------------------------------------------| | `useSettings` | 设置变更检测 | | `useTerminalSize` | 终端尺寸追踪 | | `useExitOnCtrlC` | 信号处理 | | `useBlink` | 光标闪烁动画 | | `useDoublePress` | 双按键检测 | | `useCanUseTool` | 工具权限验证 | ### 工具 Hooks(`src/utils/hooks/`) 用于 Shell 配置、权限状态和工具行为的额外 Hooks。 --- ## 16. 文件统计 | 分类 | 数量 | |-----------------------------|---------| | **TypeScript 文件总数** | 1,884 | | **命令模块** | 101 | | **工具实现** | 41 | | **UI 组件** | 130+ | | **工具函数文件** | 300+ | | **服务模块** | 35+ | | **顶层源文件** | 18 | | **入口点** | 6 | | **`src/` 中的子目录** | 37 | --- ## 17. 架构模式 ### 延迟加载与死代码消除 通过 `require()` 条件导入,由 Bun 的 `feature()` 标志门控。这使得在打包时可以对整个子系统(例如 `KAIROS`、`COORDINATOR_MODE`)进行 Tree-Shaking。 ```typescript const assistantModule = feature('KAIROS') ? require('./assistant/index.js') : null; ``` ### 基于工具的执行模型 与外部世界的每次交互都通过已注册的 `Tool` 进行。工具具有: - 声明式 JSON Schema 输入 - 执行前的权限检查 - 执行期间的进度报告 - 结构化结果输出 ### 命令模式 斜杠命令是模块化目录,每个目录导出一个 `Command` 对象。`commands.ts` 中的注册表将它们聚合在一起,支持可选的特性门控条件。 ### 消息驱动架构 对话是一系列类型化消息(`UserMessage`、`AssistantMessage`、`SystemMessage`、`ProgressMessage` 等),由 `QueryEngine` 管理。工具结果作为 `ToolResultBlockParam` 消息注入。 ### 上下文压缩 当对话上下文接近模型窗口限制时,系统自动压缩旧消息,同时保留关键上下文。提供多种策略:完整压缩、微压缩(选择性修剪)和会话记忆持久化。 ### 权限优先安全模型 每次工具执行都经过权限检查。模式包括: - **询问** — 每次操作都提示用户 - **自动允许** — 基于信任规则允许 - **拒绝** — 阻止特定操作 - **文件系统沙箱** — 将文件访问限制在项目目录内 ### React 终端 UI 整个 UI 是通过 Ink 渲染的 React 组件树。这使得以下特性成为可能: - 声明式 UI 更新 - 组件组合与复用 - 状态驱动渲染 - 针对终端特定行为的 Hooks(光标、窗口调整、键盘) --- --- ## 贡献 欢迎贡献!如果你发现了额外的架构细节、发现了不准确之处,或想扩展特定子系统的覆盖范围: 1. **Fork** 本仓库 2. 为你的更改**创建分支**(`git checkout -b fix/tool-system-details`) 3. **提交 Pull Request**,并附上清晰的描述说明你添加或修正了什么 请保持贡献的事实性和技术准确性。这是一份参考文档——推测内容应明确标注。 --- > **免责声明:** 这是一份非官方的独立分析。Claude Code 是 [Anthropic](https://www.anthropic.com/) 的产品。所有商标归其各自所有者所有。 *生成于 2025-03-31。基于对 Claude Code 源码树的分析。*