返回首页
ClaudeCode Agent

Claude Code 源代码分析

创建 CLAUDE.md

这样它会将项目的规范、构建命令和架构要点记录下来,后续对话中它会自动参考这个文件,不再需要你重复解释背景。有利于后续的代码分析、调试和功能开发。

运行 /init 命令

/init - 自动分析该项目并生成 CLAUDE.md
我已为该仓库成功创建了CLAUDE.md文件。以下是文件包含的内容:

### CLAUDE.md 内容概要
1. **概述** - 包含项目统计信息(约1884个文件、51.2万行代码、40+工具、80+命令)的项目说明,以及法律免责声明。

2. **命令** - 构建与开发相关命令:
    - `npm run prepare-src` - 准备源码
    - `npm run build` - 使用esbuild构建
    - `npm run check` - 执行类型检查
    - `npm start` - 运行编译后的命令行工具

3. **高层架构**:
    - src/query.ts中的核心智能体循环模式
    - 核心目录(入口点、命令行、命令、工具、组件、服务、状态、工具函数)
    - 关键文件及其用途
    - 工具系统架构(通过buildTool()实现的构建者模式)
    - 权限系统流程
    - 上下文管理策略
    - 子智能体架构(默认、分支、工作树、远程)
    - 基于AppStateStore的状态管理
    - 所采用的核心设计模式

该文件为后续使用Claude Code的用户提供了在该代码库中高效开展工作所需的全部必要信息。

CLAUDE.md

本文件用于指导 Claude Code(claude.ai/code)处理此代码仓库中的代码。

概述

本仓库包含 Claude Code v2.1.88 的反编译源代码,该工具是基于 Anthropic 旗下 Claude 模型构建的 AI 编程助手。代码库内容包括:

  • 约 1,884 个 TypeScript/TSX 文件
  • 约 512,664 行代码
  • 40 余个内置工具
  • 80 余个斜杠命令
  • 生产级智能体执行框架,支持权限控制、流式输出、并发处理与状态持久化

命令

构建命令
# 为编译准备源码
npm run prepare-src

# 构建项目(基于 esbuild 尽力构建)
npm run build

# 仅执行类型检查
npm run check

# 运行编译后的命令行工具
npm start
开发流程

项目使用 TypeScript,strict 模式设为 false。构建流程如下:

  1. src/ 目录复制到 build-src/
  2. feature('X') 转换为 false(死代码消除)
  3. MACRO.VERSION 替换为 '2.1.88'
  4. 使用 esbuild 进行打包

注意:完整重新构建需要使用 Bun(而非 Node.js)以支持其编译期内置特性。esbuild 构建为尽力兼容模式,需为 108 个按特性开关控制的模块手动编写桩代码。

高层代码架构

核心智能体循环

应用在 src/query.ts(785KB,最大文件)中采用经典智能体循环模式:

用户输入 → 查询引擎 → Claude API → 响应
                          ↓
                stop_reason == "tool_use"?
               /                          \
             是                            否
              |                             |
        执行工具                        返回文本
        追加 tool_result
        循环回到 → 查询引擎
目录结构

核心目录说明:

  • src/entrypoints/ - 应用入口(CLI、SDK、MCP 服务端)
  • src/cli/ - 命令行基础架构与命令处理器
  • src/commands/ - 约 80 个斜杠命令实现
  • src/tools/ - 40 余个内置工具实现
  • src/components/ - 基于 React/Ink 的终端 UI 组件
  • src/services/ - 业务逻辑层(API 客户端、分析统计、MCP、工具等)
  • src/state/ - 应用状态管理(AppState 存储)
  • src/utils/ - 工具函数(权限、消息、模型选择、Git 操作等)
关键文件
文件 用途
src/main.tsx REPL 启动入口(4,683 行)
src/QueryEngine.ts SDK/无头模式查询生命周期引擎
src/query.ts 主智能体循环
src/Tool.ts 工具接口 + buildTool 工厂函数
src/commands.ts 斜杠命令定义
src/tools.ts 工具注册器与预设配置
工具系统架构

工具系统通过 buildTool() 工厂采用构建者模式。每个工具均实现:

  • 生命周期validateInput()checkPermissions()call()
  • 能力标识isEnabled()isConcurrencySafe()isReadOnly()isDestructive()
  • 渲染:用于展示工具调用与结果的 React 组件
  • 面向 AIprompt()description()mapToolResultToAPI()

内置工具包括:文件读取、文件编辑、文件写入、通配符匹配、文本搜索、Bash 执行、网络请求、网络搜索、智能体、技能、向用户提问等。

权限系统

权限执行流程:

  1. validateInput() - 提前拦截非法参数
  2. 工具使用前钩子 - 用户自定义 Shell 命令
  3. 权限规则 - alwaysAllow/alwaysDeny/alwaysAsk
  4. 交互式确认 - 无匹配规则时请求用户授权
  5. checkPermissions() - 工具专属权限逻辑
上下文管理

三种压缩策略:

  • autoCompact - 通过 Claude API 对历史消息进行摘要
  • snipCompact - 移除无效消息(特性开关控制)
  • contextCollapse - 重构上下文结构(特性开关控制)
子智能体架构

支持多种智能体启动模式:

  • default - 进程内运行,共享对话上下文
  • fork - 子进程,全新消息队列,共享文件缓存
  • worktree - 独立 Git 工作树 + 子进程
  • remote - 桥接至 Claude Code 远程服务
状态管理

基于 React Context 与 AppStateStore 管理状态,包含:

  • toolPermissionContext - 权限规则与模式
  • fileHistory - 文件操作的撤销快照
  • attribution - 提交记录追踪
  • fastMode - 快速模式状态
  • mainLoopModel - 当前选用模型
核心设计模式
模式 实现位置
异步生成器流式输出 QueryEnginequery()
构建者 + 工厂模式 buildTool()
标记类型 SystemPromptasSystemPrompt()
特性开关 + 死代码消除 来自 bun:bundlefeature()
可辨识联合类型 Message 相关类型
观察者 + 状态机 StreamingToolExecutor
快照状态 FileHistoryState
即发即弃写入 recordTranscript()

Claude Code Agent 详细工作流程

55.5k tokens

1. 整体架构概览

Claude Code 的 Agent 系统采用分层架构,从主 REPL 到子 Agent 形成完整的调用链:

用户输入 → REPL (main.tsx) → QueryEngine → query() 主循环 
                                      ↓
                        [根据需要调用 Agent 工具]
                                      ↓
                              runAgent() → 子 query() 循环

2. 核心文件位置

文件 功能
src/query.ts 主 Agent 循环(785KB,最大文件)
src/QueryEngine.ts SDK/无头模式查询生命周期引擎
src/tools/AgentTool/AgentTool.tsx Agent 工具定义
src/tools/AgentTool/runAgent.ts 子 Agent 执行逻辑
src/tools/AgentTool/forkSubagent.ts Fork 子 Agent 实现
src/services/tools/toolOrchestration.ts 工具编排执行

3. 主 Agent 循环 (query.ts)

3.1 循环结构

主循环在 queryLoop() 函数中,采用 while(true) 无限循环:

// src/query.ts:307
while (true) {
  // 1. 准备消息和上下文
  // 2. 调用 Claude API
  // 3. 检查是否需要执行工具
  // 4. 执行工具并获取结果
  // 5. 继续循环或返回
}

3.2 详细流程步骤

步骤 1: 上下文预处理

  • 应用工具结果预算限制 (applyToolResultBudget)
  • 历史消息裁剪 (snipCompactIfNeeded)
  • 微压缩 (microcompact)
  • 上下文折叠 (contextCollapse)
  • 自动压缩 (autocompact)

步骤 2: API 调用

  • 调用 Claude API 获取模型响应
  • 流式处理响应内容

步骤 3: 判断停止条件

stop_reason == \"tool_use\"?
      /          \\
    yes          no
     |            |
  执行工具      返回文本
  追加结果       结束循环
  继续循环

步骤 4: 工具执行 (runTools)

  • 工具分区:只读工具并发执行,修改工具串行执行
  • 权限检查
  • 调用工具的 call() 方法
  • 收集工具结果

4. 子 Agent 执行流程 (runAgent.ts)

4.1 Agent 初始化

当主 Agent 调用 Agent 工具时,执行以下步骤:

// src/tools/AgentTool/runAgent.ts:248
export async function* runAgent({
  agentDefinition,      // Agent 定义(内置或用户定义)
  promptMessages,       // 给子 Agent 的提示消息
  toolUseContext,       // 工具使用上下文
  canUseTool,           // 权限检查函数
  isAsync,              // 是否异步执行
  // ... 更多参数
}: {...}) {
  // 1. 准备 Agent 环境
  // 2. 初始化 Agent 特定的 MCP 服务器
  // 3. 创建子 Agent 上下文
  // 4. 调用子 query() 循环
  // 5. 清理资源
}

4.2 关键初始化步骤

  1. 模型选择 (getAgentModel)

    • 可以继承父模型或使用 Agent 特定模型
  2. Agent ID 创建 (createAgentId)

    • 每个子 Agent 有唯一标识符
  3. 权限模式设置

    • bubble: 权限提示冒泡到父终端
    • auto: 自动决定
    • 其他模式...
  4. 工具池解析 (resolveAgentTools)

    • 根据 Agent 定义过滤可用工具
  5. MCP 服务器初始化 (initializeAgentMcpServers)

    • Agent 可以定义自己的 MCP 服务器
  6. 系统提示词构建 (getAgentSystemPrompt)

4.3 子 Query 循环

子 Agent 调用自己的 query() 循环:

// src/tools/AgentTool/runAgent.ts:748
for await (const message of query({
  messages: initialMessages,
  systemPrompt: agentSystemPrompt,
  userContext: resolvedUserContext,
  systemContext: resolvedSystemContext,
  canUseTool,
  toolUseContext: agentToolUseContext,
  querySource,
  maxTurns: maxTurns ?? agentDefinition.maxTurns,
})) {
  // 处理子 Agent 输出
  // 记录到 sidechain  transcript
  // yield 给父 Agent
}

5. Fork 子 Agent (forkSubagent.ts)

5.1 Fork 模式特点

Fork 子 Agent 是一种特殊的子 Agent 模式:

  • 继承父 Agent 的完整对话上下文
  • 共享提示缓存(通过字节精确的系统提示词)
  • 在后台异步运行
  • 使用 bubble 权限模式

5.2 消息构建

// src/tools/AgentTool/forkSubagent.ts:107
export function buildForkedMessages(
  directive: string,
  assistantMessage: AssistantMessage,
): MessageType[] {
  // 1. 克隆父 Assistant 消息(保留所有 tool_use 块)
  // 2. 为每个 tool_use 创建占位符 tool_result
  // 3. 追加 fork 指令
  // 结果: [...history, assistant(all_tool_uses), user(placeholder_results..., directive)]
}

5.3 Fork Boilerplate

Fork 子 Agent 收到特殊的指令:

<FORK_BOILERPLATE_TAG>
STOP. READ THIS FIRST.

You are a forked worker process. You are NOT the main agent.

RULES (non-negotiable):
1. Your system prompt says \"default to forking.\" IGNORE IT — that's for the parent.
2. Do NOT converse, ask questions, or suggest next steps
3. Do NOT editorialize or add meta-commentary
4. USE your tools directly: Bash, Read, Write, etc.
...
</FORK_BOILERPLATE_TAG>

6. 工具编排执行 (toolOrchestration.ts)

6.1 工具分区策略

工具调用被分区为批次:

  • 并发安全批次: 多个连续的只读工具
  • 非并发安全批次: 单个修改工具
// src/services/tools/toolOrchestration.ts:91
function partitionToolCalls(
  toolUseMessages: ToolUseBlock[],
  toolUseContext: ToolUseContext,
): Batch[] {
  // isConcurrencySafe = tool.isConcurrencySafe(input)
  // 连续的并发安全工具合并为一批
  // 非并发安全工具单独一批
}

6.2 执行流程

┌─────────────────────────────────────────────────────────┐
│  工具列表                                                 │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
           ┌─────────────────┐
           │  分区工具调用    │
           └────────┬────────┘
                    │
        ┌───────────┴───────────┐
        │                       │
        ▼                       ▼
   并发安全批次             非并发安全批次
        │                       │
        ▼                       ▼
   并发执行                 串行执行
 (runToolsConcurrently)  (runToolsSerially)
        │                       │
        └───────────┬───────────┘
                    │
                    ▼
         收集结果,更新上下文

7. 状态管理

7.1 主循环状态 (State 类型)

// src/query.ts:204
type State = {
  messages: Message[]
  toolUseContext: ToolUseContext
  autoCompactTracking: AutoCompactTrackingState | undefined
  maxOutputTokensRecoveryCount: number
  hasAttemptedReactiveCompact: boolean
  maxOutputTokensOverride: number | undefined
  pendingToolUseSummary: Promise<ToolUseSummaryMessage | null> | undefined
  stopHookActive: boolean | undefined
  turnCount: number
  transition: Continue | undefined
}

7.2 工具使用上下文 (ToolUseContext)

在父子 Agent 间传递,包含:

  • agentId: 当前 Agent 标识符
  • readFileState: 文件读取缓存
  • options: 工具、模型、MCP 客户端等配置
  • abortController: 中止控制器
  • getAppState / setAppState: 应用状态访问

8. 关键特性

8.1 上下文管理

三种压缩策略:

  • autoCompact: 通过 Claude API 总结旧消息
  • snipCompact: 删除僵尸消息(特性开关)
  • contextCollapse: 重构上下文(特性开关)

8.2 持久化

  • Sidechain 转录:子 Agent 对话记录到独立文件
  • 内存快照:用于 Agent 恢复
  • 任务预算跟踪

8.3 权限系统

权限流程:

  1. validateInput() - 早期拒绝错误输入
  2. PreToolUse Hooks - 用户定义的 shell 命令
  3. Permission Rules - alwaysAllow/alwaysDeny/alwaysAsk
  4. Interactive Prompt - 无规则匹配时用户审批
  5. checkPermissions() - 工具特定逻辑

9. 总结

Claude Code 的 Agent 工作流程是一个递归的异步生成器循环

  1. 每个 Agent(主或子)运行自己的 query() 循环
  2. 循环中调用 Claude API,根据响应决定是否执行工具
  3. 工具执行可能触发新的子 Agent(通过 Agent 工具)
  4. 子 Agent 继承或克隆父上下文,有独立的工具池和权限
  5. Fork 模式优化了缓存共享和上下文继承
  6. 完整的状态管理和持久化支持 Agent 恢复和调试

Claude Code 智能体详细工作流程(code-review-graph)

86.4k tokens

基于对代码库的深入分析,以下是 Claude Code 智能体的完整工作流程:

1. 整体架构

智能体系统分为三个核心层次:

  • main.tsx - 应用入口,初始化 REPL
  • QueryEngine.ts - 会话生命周期管理
  • query.ts - 核心智能体循环

2. 详细工作流程

阶段一:初始化 (QueryEngine.submitMessage)

文件位置src/QueryEngine.ts:209-638

  1. 用户输入处理

    • 接收用户提示 (prompt)
    • 配置工作目录 (cwd)
    • 加载初始状态
  2. 系统提示构建

    • 获取默认系统提示
    • 加载自定义系统提示
    • 注入记忆机制提示 (如果启用)
  3. 用户输入预处理 (processUserInput)

    • 解析斜杠命令 (slash commands)
    • 处理附件
    • 验证权限
  4. 会话持久化

    • 将用户消息写入转录本 (transcript)
    • 刷新会话存储

阶段二:核心查询循环 (queryLoop)

文件位置src/query.ts:241-1729

这是一个 while(true) 无限循环,每次迭代代表一个"回合" (turn)。

2.1 上下文准备
消息历史 → 上下文压缩 → 系统提示拼接 → 模型调用

关键步骤

  1. 工具结果预算 (applyToolResultBudget)

    • 限制工具结果大小,防止上下文溢出
  2. 历史截断 (snipCompactIfNeeded)

    • 选择性地裁剪旧消息
  3. 微压缩 (microcompact)

    • 快速轻量级压缩
  4. 上下文折叠 (contextCollapse)

    • 将对话历史重构为更紧凑的形式
  5. 自动压缩 (autocompact)

    • 使用 Claude API 总结旧对话
    • 仅在超过阈值时触发
2.2 模型调用

文件位置src/query.ts:653-997

  1. API 调用准备

    • 选择模型 (主模型/回退模型)
    • 配置工具定义
    • 设置 Thinking 模式
  2. 流式响应处理

    • 逐块接收模型输出
    • 提取 tool_use 块
    • 实时执行工具 (流式工具执行模式)
    • 回填工具输入参数
  3. 错误处理与恢复

    • 模型回退 (fallback)
    • 图片尺寸错误处理
    • 流式中断处理
2.3 工具执行

文件位置src/query.ts:1360-1408

两种执行模式:

模式 说明
流式执行 (StreamingToolExecutor) 工具在流式响应期间并行执行
批量执行 (runTools) 等待完整响应后批量执行

工具执行流程

tool_use 块 → 权限检查 → 工具调用 → 结果生成 → tool_result

权限检查 (checkPermissions):

  • 验证工具输入
  • 运行预工具使用钩子
  • 检查权限规则 (alwaysAllow/alwaysDeny/alwaysAsk)
  • 交互式提示用户
2.4 停止钩子与恢复机制

文件位置src/query.ts:1062-1358

检查是否需要继续循环:

条件 处理方式
prompt_too_long 尝试 reactiveCompact 或 contextCollapse
max_output_tokens 升级到 64k 限制,或添加恢复消息
stop_hook 评估是否需要追问/修正
token_budget 检查是否达到预算,决定是否继续
无 tool_use 完成并返回
2.5 附件与内存注入

文件位置src/query.ts:1535-1643

在每个回合结束时注入:

  • 排队命令 (queued commands)
  • 相关内存附件
  • 技能发现结果
  • 文件变更通知

3. 关键数据流

用户输入
    ↓
[消息数组] → processUserInput → [消息数组]
    ↓
[消息数组] → 上下文压缩 → [消息数组]
    ↓
[消息数组] + 系统提示 → callModel → 助手消息 + tool_use
    ↓
tool_use → runTools → tool_result
    ↓
[消息数组] + 助手消息 + tool_result → 下一回合
    ↓
(循环直到没有 tool_use)

4. 核心组件

组件 文件 职责
QueryEngine QueryEngine.ts 会话生命周期管理
queryLoop query.ts 核心智能体循环
StreamingToolExecutor services/tools/StreamingToolExecutor.ts 并行工具执行
autocompact services/compact/autoCompact.ts 上下文自动压缩
stopHooks query/stopHooks.ts 智能停止判断

5. 重要的设计特性

  1. 异步生成器流 - 整个流程使用 AsyncGenerator 实现流式输出
  2. 状态机模式 - 使用 State 对象跟踪跨迭代状态
  3. Feature Flags - 通过 feature() 进行死代码消除
  4. 多级压缩策略 - snip → micro → auto → collapse,从轻量到重度
  5. 容错恢复 - 多层错误恢复机制 (fallback, reactiveCompact, 预算延续)

这就是 Claude Code 智能体的完整工作流程!

CLAUDE.md

在项目根目录的 CLAUDE.md(/init 后自动生成)最前面或“Tooling” 部分加入以下内容:

## Tooling for shell interactions (必须已安装)
- 查找文件:用 `fd` 或 `glob` 工具
- 文本搜索:用 `rg`(内置 Grep)
- **结构化/语法树搜索(推荐默认)**:用 `ast-grep --lang <语言> -p '<pattern>'`
  - 示例:`ast-grep --lang tsx -p 'function $$$($$$) { $$$ }'`(匹配任意函数)
  - 文档:https://ast-grep.github.io/llms.txt
- 生成依赖图:可用 Bash 配合 Graphviz(`dot -Tpng`)或输出 Mermaid 图

提示词:

请执行全局扫描:
1. 先用 Glob + Grep 快速列出项目主要模块/目录结构(忽略 node_modules、.git、dist 等)。
2. 对核心语言文件使用 ast-grep 进行结构化分析:提取所有模块、类/函数、导入/导出关系,构建完整调用链和模块依赖图(优先输出 Mermaid 图格式,便于复制)。
3. 识别遗留风险清单:包括死代码、循环依赖、高耦合模块、过时 API 调用、安全隐患模式(如硬编码密钥、正则 DoS 等)。
4. 最终输出:
   - 项目架构概述(分层图)
   - 模块依赖图(Mermaid 格式)
   - 遗留风险清单(按严重程度排序,每条带文件路径和建议)
   - 总结报告(Markdown 格式,可直接保存为 ARCHITECTURE.md)

请先输出执行计划(Plan),确认后再执行。

Claude Code v2.1.88 架构分析报告

生成日期:2026-04-18
代码版本:v2.1.88
分析范围:全局扫描 分析工具:ast-grep 插件:feature-dev


1. 项目概述

1.1 基本信息

属性
项目名称 Claude Code
版本 2.1.88
主要语言 TypeScript / TSX
代码文件数 1,884 个
总代码行数 ~512,664 行
TypeScript 文件 1,332 个
TSX 文件 552 个

1.2 核心功能

  • 40+ 内置工具:文件操作、Shell 执行、Git 集成、Web 搜索等
  • 80+ 斜杠命令:配置管理、会话控制、插件系统等
  • 多代理架构:支持子代理、协调器模式、工作树隔离
  • 终端 UI:基于 React + Ink 的交互式界面
  • 插件系统:可扩展的 MCP (Model Context Protocol) 支持
  • 技能系统:模块化功能实现

2. 项目架构概述

2.1 分层架构图

graph TB
    subgraph "入口层"
        Main[main.tsx]
        CLI[entrypoints/cli.tsx]
        SDK[entrypoints/agentSdk.ts]
    end

    subgraph "UI 层"
        Components[components/]
        Screens[screens/]
        Ink[ink/]
    end

    subgraph "命令/工具层"
        Commands[commands.ts<br/>50+ 命令]
        Tools[tools.ts<br/>40+ 工具]
        Skills[skills/]
    end

    subgraph "服务层"
        API[services/api/]
        Analytics[services/analytics/]
        MCP[services/mcp/]
        Compact[services/compact/]
        Remote[services/remoteManagedSettings/]
    end

    subgraph "核心引擎层"
        Query[query.ts<br/>主代理循环]
        QueryEngine[QueryEngine.ts<br/>查询引擎]
        State[state/<br/>状态管理]
    end

    subgraph "工具层"
        Utils[utils/<br/>564 文件]
        Types[types/]
        Constants[constants/]
        Hooks[hooks/]
    end

    Main --> Query
    Main --> Commands
    Main --> Tools
    CLI --> Main
    SDK --> QueryEngine
    
    Components --> State
    Screens --> Components
    
    Commands --> API
    Tools --> Query
    
    Query --> QueryEngine
    QueryEngine --> State
    QueryEngine --> API
    
    API --> Utils
    MCP --> Utils
    State --> Utils

2.2 核心数据流

用户输入 
  → REPL 界面 (screens/REPL.tsx)
  → 命令解析 (processSlashCommand.tsx)
  → 查询引擎 (QueryEngine.ts)
  → Claude API 请求 (services/api/claude.ts)
  → 响应处理
  → 工具执行 (StreamingToolExecutor.ts)
  → 状态更新 (AppStateStore.ts)
  → UI 重新渲染
  → 循环...

3. 模块依赖图

3.1 核心模块依赖关系

graph TD
    main[main.tsx<br/>入口点]
    query[query.ts<br/>代理循环]
    qe[QueryEngine.ts<br/>查询引擎]
    tools[tools.ts<br/>工具注册表]
    commands[commands.ts<br/>命令注册表]
    state[state/AppState.tsx<br/>状态管理]
    tool[Tool.ts<br/>工具基类]
    
    main --> query
    main --> qe
    main --> tools
    main --> commands
    main --> state
    
    query --> qe
    qe --> state
    qe --> tool
    tools --> tool
    commands --> state
    
    subgraph "高耦合模块"
        utils[utils/<br/>564 文件]
        components[components/<br/>389 文件]
    end
    
    main --> utils
    query --> utils
    qe --> utils
    state --> utils
    components --> state
    components --> utils

3.2 目录结构详解

目录 文件数 用途
src/utils/ 564 工具函数库(认证、配置、Git、安全等)
src/components/ 389 React/Ink UI 组件
src/commands/ 189 斜杠命令实现
src/tools/ 184 内置工具实现
src/services/ 130 核心服务(API、分析、MCP 等)
src/hooks/ 104 React Hooks
src/ink/ 96 终端 UI 工具箱
src/bridge/ 31 桥接模式(远程会话)
src/constants/ 21 共享常量和配置
src/skills/ 20 技能系统

4. 遗留风险清单

4.1 高严重程度

编号 文件路径 问题描述 修复建议
H-1 多处 远程管理设置强制执行:应用每小时轮询远程设置,拒绝更改会导致应用退出 增加用户完全控制选项,允许禁用远程管理
H-2 src/services/analytics/ 广泛的遥测收集:环境指纹、进程指标、用户跟踪数据,无法完全退出第一方日志记录 提供明确的选择退出机制,默认禁用详细遥测
H-3 src/tools/BashTool/ 1,225+ 次子进程调用:大量使用 execaspawnexecFile,存在注入风险 增加更严格的输入验证,使用参数化命令

4.2 中严重程度

编号 文件路径 问题描述 修复建议
M-1 src/tools.tssrc/main.tsx 循环依赖:24 个文件包含 "circular dependency" 注释,使用懒加载绕过 重构模块边界,提取共享接口到独立文件
M-2 212 个文件 功能门控死代码:960+ 处 feature() 调用,构建时移除,但源码中存在大量条件代码 考虑使用插件架构替代编译时条件
M-3 src/utils/ 高耦合模块:564 个工具函数被广泛依赖,形成中心辐射型依赖 按领域拆分 utils 为更小的独立模块
M-4 src/components/ 大型组件库:389 个组件,与状态管理紧密耦合 引入组件库分层,减少对全局状态的直接依赖

4.3 低严重程度

编号 文件路径 问题描述 修复建议
L-1 src/services/analytics/datadog.ts 动态代码执行:使用 eval()Function() 构造函数 替换为静态配置或安全的解析器
L-2 src/utils/bash/bashParser.ts 复杂正则表达式:存在 ReDoS 风险的嵌套量词模式 使用有限自动机或添加超时机制
L-3 多处 硬编码字符串常量:大量魔法字符串散落在代码中 集中到常量文件,使用枚举

5. 核心设计模式

5.1 架构模式

模式 实现位置 说明
代理循环 src/query.ts 经典的 "询问 → 工具使用 → 结果" 循环
构建器模式 src/Tool.ts buildTool() 工厂创建工具实例
状态机 src/services/tools/StreamingToolExecutor.ts 工具执行的异步状态管理
快照模式 src/utils/fileHistory.ts 文件操作的撤销/重做支持
懒加载 多处 使用 require() 在函数内部避免循环依赖

5.2 关键类/函数

名称 位置 职责
query() src/query.ts 主代理循环,协调整个交互流程
QueryEngine src/QueryEngine.ts SDK/无头查询生命周期引擎
buildTool() src/Tool.ts 工具构造工厂
getTools() src/tools.ts 获取当前环境可用的工具列表
AppStateStore src/state/AppStateStore.ts 全局状态管理

6. 构建系统

6.1 构建流程

npm run prepare-src
  ↓
scripts/prepare-src.mjs (修补 Bun 特定导入)
  ↓
npm run build
  ↓
scripts/build.mjs
  ├─ 复制 src/ → build-src/
  ├─ 转换 feature('X') → false
  ├─ 替换 MACRO.VERSION → '2.1.88'
  ├─ 创建入口包装器
  └─ esbuild 打包 (为缺失模块创建存根)
  ↓
dist/cli.js

6.2 功能门控

大量功能通过 feature('FLAG') 在构建时消除:

  • KAIROS - 自主助手模式
  • COORDINATOR_MODE - 多代理协调器
  • PROACTIVE - 主动通知
  • CONTEXT_COLLAPSE - 上下文折叠
  • VOICE_MODE - 语音模式
  • 以及 108+ 个内部模块

7. 安全考量

7.1 安全机制

机制 位置 说明
权限系统 src/utils/permissions/ alwaysAllow/alwaysDeny/alwaysAsk 规则
安全存储 src/utils/secureStorage/ macOS Keychain 集成
沙箱适配器 src/utils/sandbox/ 可选的沙箱隔离
PowerShell 安全 src/tools/PowerShellTool/ 危险 cmdlet 验证
MCP 认证 src/services/mcp/auth.ts MCP 服务器认证

7.2 隐私相关

  • 遥测:大量数据收集,包括环境指纹、使用指标
  • 第一方日志:无法完全禁用
  • 远程管理:每小时轮询配置更改
  • 文件系统访问:可配置的目录白名单

8. 总结与建议

8.1 架构优势

  1. 模块化设计:工具和命令系统清晰分离
  2. 可扩展性:插件和技能系统支持自定义功能
  3. 状态管理:集中式状态存储,支持快照和撤销
  4. 类型安全:全面的 TypeScript 类型定义

8.2 改进建议

  1. 解耦 utils 模块:将 564 个工具函数按领域拆分为独立包
  2. 减少循环依赖:重构模块边界,引入依赖注入
  3. 简化条件代码:考虑运行时插件替代编译时功能门控
  4. 增强隐私控制:提供完全透明和可配置的数据收集选项
  5. 组件分层:将 UI 组件与状态管理进一步解耦

8.3 技术债务估算

类别 数量 预估工作量
循环依赖 24+ 处 2-3 周
高耦合模块 2 个主要模块 3-4 周
功能门控重构 960+ 处 4-6 周
测试覆盖 未知 4-8 周
总计 13-21 周

附录

A. 核心文件清单

文件 大小 说明
src/query.ts 785KB 主代理循环(最大文件)
src/main.tsx 804KB REPL 启动器
src/QueryEngine.ts 47KB 查询引擎
src/Tool.ts - 工具接口和工厂
src/tools.ts - 工具注册表
src/commands.ts 25KB 命令注册表

B. 依赖统计

  • 运行时:Node.js >= 18
  • 核心库:React、Ink、Commander、Chalk、Lodash、Zod
  • 构建工具:esbuild、TypeScript
  • 缺失模块:108+ 个内部 Anthropic 模块(构建时存根化)

本报告基于对 Claude Code v2.1.88 反编译源码的全局静态分析生成。

Claude Code v2.1.88 架构分析报告

生成日期:2026-04-18
代码库版本:v2.1.88
分析工具:code-review-graph + ast-grep 插件:feature-dev


1. 项目架构概述

1.1 项目基本信息

属性
总文件数 1,919
代码行数 ~512,664
主要语言 TypeScript, JavaScript, TSX
知识图谱节点 16,237
知识图谱边 111,550
函数数量 14,190
类数量 128

1.2 架构分层图

graph TB
    subgraph "用户交互层"
        A[CLI入口<br/>entrypoints/cli.tsx]
        B[REPL界面<br/>screens/REPL.tsx]
        C[组件系统<br/>components/]
        D[命令处理<br/>commands/]
    end
    
    subgraph "查询引擎层"
        E[主代理循环<br/>query.ts]
        F[查询引擎<br/>QueryEngine.ts]
        G[上下文压缩<br/>services/compact/]
    end
    
    subgraph "工具系统层"
        H[工具工厂<br/>Tool.ts]
        I[工具注册表<br/>tools.ts]
        J[内置工具<br/>tools/]
        K[流式执行器<br/>services/tools/]
    end
    
    subgraph "权限与状态层"
        L[权限系统<br/>utils/permissions/]
        M[状态管理<br/>state/AppStateStore.ts]
        N[配置管理<br/>utils/config.ts]
    end
    
    subgraph "服务与集成层"
        O[API客户端<br/>services/api/]
        P[MCP服务<br/>services/mcp/]
        Q[插件系统<br/>utils/plugins/]
        R[技能系统<br/>skills/]
    end
    
    subgraph "基础设施层"
        S[工具函数<br/>utils/]
        T[类型定义<br/>types/]
        U[存储层<br/>utils/sessionStorage.ts]
    end
    
    A --> E
    B --> E
    C --> B
    D --> A
    
    E --> F
    F --> G
    
    E --> H
    H --> I
    I --> J
    J --> K
    
    K --> L
    L --> M
    M --> N
    
    F --> O
    J --> P
    J --> Q
    E --> R
    
    O --> S
    P --> S
    Q --> S
    R --> S
    S --> T
    S --> U

2. 模块依赖图

2.1 核心社区依赖关系

graph LR
    subgraph "核心模块(按大小排序)"
        A[utils-file<br/>5,323节点<br/>cohesion: 0.297]
        B[components-temp<br/>2,117节点<br/>cohesion: 0.126]
        C[bashtool-tool<br/>1,384节点<br/>cohesion: 0.137]
        D[mcp-mcp<br/>1,371节点<br/>cohesion: 0.188]
        E[plugin-call<br/>699节点<br/>cohesion: 0.082]
        F[ink-text<br/>672节点<br/>cohesion: 0.330]
        G[hooks-use<br/>535节点<br/>cohesion: 0.079]
        H[bridge-bridge<br/>340节点<br/>cohesion: 0.201]
        I[cli-handler<br/>321节点<br/>cohesion: 0.165]
        J[yoga-layout-flex<br/>205节点<br/>cohesion: 0.603]
    end
    
    A --> B
    A --> C
    A --> D
    A --> F
    A --> H
    
    B --> F
    B --> G
    
    C --> A
    
    D --> A
    D --> E
    
    E --> A
    
    H --> A
    H --> D
    
    I --> A
    I --> B

2.2 关键执行流程(Top 20)

流程名称 重要性 节点数
t2 0.905 10
linkSessionToPR 0.873 15
getSessionRecordingPaths 0.859 7
listSessionsImpl 0.858 15
reAppendSessionMetadata 0.858 8
name 0.853 32
call 0.853 18
projectDir 0.851 97
log 0.849 101
renderToolUseTag 0.849 9
userFacingName 0.849 9
taskAttachment 0.849 9
constructor 0.849 9
constructor 0.849 9
getLogByIndex 0.849 33
sessionInfo 0.848 97
value_0 0.846 22
records 0.845 76
call 0.845 58
checkPermissions 0.844 13

3. 遗留风险清单

3.1 严重风险

🔴 超大型文件/函数(技术债务高)
文件/函数 行数 位置 建议
cli/print.ts 5,595 src/cli/print.ts:1 拆分为多个模块,按功能分离
utils/messages.ts 5,513 src/utils/messages.ts:1 拆分为消息处理、序列化、验证模块
utils/sessionStorage.ts 5,106 src/utils/sessionStorage.ts:1 考虑使用数据库或分层存储抽象
utils/hooks.ts 5,023 src/utils/hooks.ts:1 按钩子类型拆分到独立文件
REPL() 函数 4,434 src/screens/REPL.tsx:572 拆分为多个小组件和自定义钩子
run() 函数 3,630 src/main.tsx:884 分解启动逻辑,使用初始化器模式

3.2 高风险

🟠 高耦合模块(凝聚力低)
社区 大小 凝聚力 问题 建议
bootstrap-session 216 0.006 几乎无内聚 重新设计模块边界
screens-prev 124 0.031 低内聚 提取共享组件
state-app 25 0.036 低内聚 重构状态管理逻辑
entrypoints-session 29 0.041 低内聚 明确职责划分
hooks-use 535 0.079 低内聚 按功能域分组钩子
plugin-call 699 0.082 低内聚 定义清晰的插件接口
context-use 50 0.087 低内聚 简化上下文层次结构
components-temp 2,117 0.126 中等内聚 提取可复用组件库
🟠 潜在安全敏感文件(250+ 文件含关键词)

文件示例:

  • src/services/api/claude.ts - API 客户端
  • src/services/mcp/auth.ts - MCP 认证
  • src/utils/auth.ts - 认证工具
  • src/commands/login/login.tsx - 登录流程

建议:

  • 执行安全审计,确认无硬编码凭证
  • 使用环境变量管理所有密钥
  • 实现密钥轮换机制
  • 添加密钥访问日志

3.3 中等风险

🟡 架构关注点
类别 发现 建议
循环依赖 需进一步检测 使用 madgedpdm 工具检测
死代码 已检测到(见下文) 执行清理,删除未使用代码
测试覆盖 未知 建议添加单元测试和集成测试
🟡 死代码检测(部分结果)

注:完整死代码列表见工具输出文件
建议使用 refactor_tool 进行全面扫描后清理


4. 目录结构详解

src/
├── entrypoints/          ## 应用入口点
│   ├── cli.tsx          ## CLI 入口
│   ├── sdk/             ## SDK 入口
│   └── ...
├── cli/                  ## CLI 基础设施
│   ├── handlers/        ## 命令处理器
│   ├── print.ts         ## 输出格式化(5,595行)
│   └── ...
├── commands/             ## ~80 个斜杠命令
│   ├── plugin/          ## 插件管理命令
│   ├── login/           ## 登录命令
│   └── ...
├── tools/                ## 40+ 内置工具
│   ├── BashTool/        ## Bash 工具实现
│   ├── PowerShellTool/  ## PowerShell 工具
│   └── ...
├── components/           ## React/Ink UI 组件
│   ├── PromptInput/     ## 提示输入组件
│   ├── Settings/        ## 设置组件
│   └── ...
├── screens/              ## 页面级组件
│   ├── REPL.tsx         ## 主 REPL 界面(5,006行)
│   └── Doctor.tsx       ## 诊断页面
├── services/             ## 业务逻辑层
│   ├── api/             ## API 客户端
│   ├── mcp/             ## MCP 服务
│   ├── compact/         ## 上下文压缩
│   └── ...
├── state/                ## 状态管理
│   └── AppStateStore.ts ## 应用状态存储
├── utils/                ## 工具函数库
│   ├── messages.ts      ## 消息处理(5,513行)
│   ├── sessionStorage.ts ## 会话存储(5,106行)
│   ├── hooks.ts         ## 钩子工具(5,023行)
│   ├── bash/            ## Bash 解析器
│   ├── permissions/     ## 权限工具
│   └── ...
├── hooks/                ## React 自定义钩子
├── bridge/               ## 桥接层
│   ├── bridgeMain.ts    ## 主桥接(3,000行)
│   └── replBridge.ts    ## REPL 桥接
├── plugins/              ## 插件系统
├── skills/               ## 技能系统
│   └── bundled/         ## 内置技能
├── types/                ## 类型定义
├── native-ts/            ## 原生 TypeScript 模块
│   └── yoga-layout/     ## Yoga 布局引擎
├── ink/                  ## Ink 渲染器
├── vim/                  ## Vim 模式
├── voice/                ## 语音功能
├── assistant/            ## 助手功能
├── buddy/                ## 伙伴系统
├── server/               ## 服务器模块
├── migrations/           ## 迁移脚本
├── schemas/              ## 模式定义
├── bootstrap/            ## 启动引导
├── keybindings/          ## 键绑定
├── constants/            ## 常量定义
├── memdir/               ## 内存目录
├── upstreamproxy/        ## 上游代理
├── coordinator/          ## 协调器
├── outputStyles/         ## 输出样式
├── main.tsx              ## 主入口(4,684行)
├── query.ts              ## 主代理循环(1,730行)
├── QueryEngine.ts        ## 查询引擎
├── Tool.ts               ## 工具接口
├── tools.ts              ## 工具注册表
├── commands.ts           ## 命令定义
├── context.ts            ## 上下文定义
├── setup.ts              ## 初始化设置
├── dialogLaunchers.tsx   ## 对话框启动器
├── replLauncher.tsx      ## REPL 启动器
├── costHook.ts           ## 成本钩子
├── cost-tracker.ts       ## 成本跟踪
├── interactiveHelpers.tsx ## 交互式助手
├── tasks.ts              ## 任务定义
├── Task.ts               ## 任务接口
├── ink.ts                ## Ink 工具
├── history.ts            ## 历史记录
└── projectOnboardingState.ts ## 项目引导状态

5. 关键架构模式

5.1 核心设计模式

模式 实现位置 用途
AsyncGenerator 流式 QueryEngine, query() 流式响应和工具执行
Builder + Factory buildTool() in Tool.ts 工具对象构建
Branded Types SystemPrompt, asSystemPrompt() 类型安全的品牌类型
Feature Flags + DCE feature() from bun:bundle 功能开关和死代码消除
Discriminated Unions Message types 消息类型区分
Observer + State Machine StreamingToolExecutor 工具执行状态管理
Snapshot State FileHistoryState 文件操作撤销
Fire-and-Forget Write recordTranscript() 异步持久化

5.2 工具系统架构

工具生命周期:
validateInput() → checkPermissions() → call() → mapToolResultToAPI()
     ↓                  ↓                    ↓
  验证输入         权限检查            执行工具逻辑
     ↓                  ↓                    ↓
  提前拒绝       PreToolUse Hooks        返回结果
                  Permission Rules
                  Interactive Prompt

5.3 权限决策流程

flowchart TD
    A[工具调用] --> B[validateInput]
    B --> C{输入有效?}
    C -->|否| D[拒绝执行]
    C -->|是| E[PreToolUse Hooks]
    E --> F[权限规则检查]
    F --> G{规则匹配?}
    G -->|alwaysAllow| H[执行工具]
    G -->|alwaysDeny| D
    G -->|alwaysAsk/无匹配| I[交互式提示]
    I --> J{用户批准?}
    J -->|是| K[checkPermissions]
    J -->|否| D
    K --> L{工具允许?}
    L -->|是| H
    L -->|否| D

6. 技术债务汇总

6.1 按优先级排序的重构建议

P0 - 立即处理
  1. 拆分为较小模块

    • src/cli/print.ts (5,595 行)
    • src/utils/messages.ts (5,513 行)
    • src/utils/sessionStorage.ts (5,106 行)
  2. 分解大型函数

    • REPL() - 4,434 行
    • run() - 3,630 行
P1 - 近期处理
  1. 重构低内聚模块

    • bootstrap-session (cohesion: 0.006)
    • screens-prev (cohesion: 0.031)
    • state-app (cohesion: 0.036)
  2. 清理死代码

    • 使用 refactor_tool 进行全面扫描
    • 删除未引用的函数和类
  3. 安全审计

    • 审查 250+ 含密钥/令牌关键词的文件
    • 确认无硬编码凭证
P2 - 中期规划
  1. 增加测试覆盖

    • 核心工具系统单元测试
    • 权限系统集成测试
    • 端到端 REPL 流程测试
  2. 架构优化

    • 明确模块边界和职责
    • 简化依赖关系
    • 考虑使用依赖注入
  3. 文档完善

    • 为大型模块添加设计文档
    • 更新 API 文档
    • 添加架构决策记录 (ADR)

7. 总结与建议

7.1 项目优势

架构清晰 - 分层设计合理,关注点分离较好
功能完整 - 40+ 内置工具,80+ 斜杠命令
类型安全 - 全面使用 TypeScript
可扩展性 - 插件系统、技能系统设计完善
权限精细 - 多层权限控制机制

7.2 主要挑战

⚠️ 技术债务 - 多个超大型文件/函数需要拆分
⚠️ 模块耦合 - 部分社区内聚性低,依赖关系复杂
⚠️ 测试缺失 - 需要建立完整的测试策略
⚠️ 安全审计 - 需要全面审查敏感代码

7.3 下一步行动

  1. 第一周:建立测试框架,添加核心模块测试
  2. 第二周:拆分 3 个最大的文件,模块化关键功能
  3. 第三周:执行安全审计,清理敏感代码
  4. 第四周:重构低内聚模块,优化依赖关系
  5. 持续:建立代码审查标准,防止技术债务累积

附录:工具使用说明

  • 重新生成分析:npm run prepare-src && npm run build
  • 知识图谱更新:code-review-graph update
  • 死代码检测:使用 refactor_tool(mode="dead_code")
  • 架构可视化:使用 get_architecture_overview_tool

本报告基于 code-review-graph 知识图谱和 ast-grep 结构化分析生成。

提示词:

请执行全局扫描:
1. 先列出项目主要模块/目录结构(忽略 node_modules、.git、dist 等)。
2. 提取所有模块、类/函数、导入/导出关系,构建完整调用链和模块依赖图(优先输出 Mermaid 图格式,便于复制)。
3. 识别遗留风险清单:包括死代码、循环依赖、高耦合模块、过时 API 调用、安全隐患模式(如硬编码密钥、正则 DoS 等)。
4. 最终输出:
   - 项目架构概述(分层图)
   - 模块依赖图(Mermaid 格式)
   - 遗留风险清单(按严重程度排序,每条带文件路径和建议)
   - 总结报告(Markdown 格式,可直接保存为 ARCHITECTURE.md)

请先输出执行计划(Plan),确认后再执行。