OpenCode(Claude Code)核心架构分析 — 源码文件树、核心循环、设计亮点

OpenCode(Claude Code)核心架构分析

源码路径:~/code/opencode/claudecode/
语言:TypeScript + React(Ink 终端 UI)
运行时:Bun(不是 npm/yarn/pnpm)
分析深度:基于源码结构 + 关键文件行数统计


一、整体架构

┌─────────────────────────────────────────────────────────────────────────────┐
│                          入口层(entrypoints)                               │
│                                                                             │
│  cli.tsx (302 LOC)                                                          │
│  ├── --version                      → 零模块加载,直接返回版本号              │
│  ├── --dump-system-prompt            → 输出系统提示词后退出(Ant-only)        │
│  ├── --claude-in-chrome-mcp          → MCP 服务器模式                        │
│  ├── --daemon-worker=<kind>          → 后台工作进程(Lean 模式)              │
│  ├── remote-control/rc/bridge/sync    → 桥接模式(feature BRIDGE_MODE)       │
│  ├── daemon [subcommand]             → 常驻守护进程                           │
│  ├── ps|logs|attach|kill|--bg       → 会话管理(~/.claude/sessions/)        │
│  ├── new|list|reply                  → 模板作业(feature TEMPLATES)          │
│  └── [default]                       → 加载 main.tsx(完整 CLI)            │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                        main.tsx (4,683 LOC)                                │
│                                                                             │
│  启动阶段(三并行预处理):                                                   │
│  ├── profileCheckpoint        — 性能埋点(入口时刻)                          │
│  ├── startMdmRawRead         — MDM 子进程并行读取(macOS 配置)              │
│  └── startKeychainPrefetch    — Keychain 并行预读(OAuth + API Key)        │
│                                                                             │
│  条件导入(Dead Code Elimination):                                          │
│  ├── feature('COORDINATOR_MODE')  → ./coordinator/coordinatorMode.js        │
│  └── feature('KAIROS')            → ./assistant/index.js(Agent 模式)       │
│                                                                             │
│  初始化阶段:                                                                │
│  ├── init()                    — 遥测、配置加载                              │
│  ├── fetchBootstrapData()     — 引导数据获取                                │
│  ├── loadPolicyLimits()       — 组织策略限制加载                            │
│  ├── initializeGrowthBook()   — Feature Flag 服务                           │
│  └── renderAndRun()           — Ink UI 渲染                                 │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         Ink UI 层(React Terminal)                         │
│                                                                             │
│  screens/                    — 独立功能界面:REPL、ResumeConversation、Doctor  │
│  components/                 — 100+ Ink React 组件                           │
│  ink.ts                      — Ink Root 定义                                │
│                                                                             │
│  buddy/                      — 伴侣精灵(Companion Sprite)动画与通知          │
│  keybindings/                — 快捷键解析、绑定管理(11 个文件)               │
│  outputStyles/               — 输出样式加载                                   │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                      核心状态与消息循环                                       │
│                                                                             │
│  bootstrap/state.ts (1,758 LOC)  — 全局 AppState(56KB 压缩后)              │
│  query.ts (1,729 LOC)            — 对话循环核心                              │
│  context.ts                      — 系统上下文 / 用户上下文                    │
│  history.ts                      — 会话历史                                   │
│  tasks.ts                        — 任务状态管理                               │
│  dialogLaunchers.tsx             — 对话框启动器                              │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         工具系统(Tools)                                     │
│                                                                             │
│  tools.ts (389 LOC)               — 工具注册中心(40+ 工具)                  │
│  Tool.ts (792 LOC)                — Tool 接口定义                            │
│  tools/                           — 44 个工具子目录                           │
│    BashTool, AgentTool, FileReadTool, FileEditTool, FileWriteTool            │
│    WebSearchTool, WebFetchTool, GrepTool, GlobTool, Task*, Skill*            │
│    NotebookEditTool, REPLTool, LSPTool, ExitPlanModeTool                    │
│    TeamCreateTool, TeamDeleteTool, SendMessageTool                           │
│    SleepTool, CtxInspectTool, WebBrowserTool, WorkflowTool ...               │
│                                                                             │
│  services/tools/                  — 工具编排层(toolOrchestration)            │
│  services/mcp/                    — MCP 客户端 + 服务器(client.ts 3,348 LOC) │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                      命令系统(Commands)                                     │
│                                                                             │
│  commands.ts (754 LOC)            — 命令定义(/slash 命令)                   │
│  commands/                        — 86 个命令子目录                           │
│    login, logout, model, config, context, compact, diff, review               │
│    mcp, skills, tasks, session, plan, resume, share, theme                   │
│    install-github-app, install-slack-app, doctor, feedback ...                │
│                                                                             │
│  cli/                             — CLI 处理器与传输层                         │
│    handlers/                      — 命令处理程序                               │
│    transports/                    — 7 种传输方式:local/remote/stdio/…         │
│    bg.js                          — 后台会话管理                              │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         支撑服务层(Services)                                │
│                                                                             │
│  api/claude.ts (3,419 LOC)        — Anthropic API 调用(含重试逻辑)          │
│  api/filesApi.ts                  — 文件下载(parseFileSpecs)               │
│  compact/                          — 上下文压缩(autoCompact + reactiveCompact)│
│  analytics/                        — GrowthBook + Telemetry                  │
│  lsp/                              — LSP 集成                               │
│  plugins/                          — 插件系统(pluginLoader.ts 3,302 LOC)    │
│  mcp/                              — Model Context Protocol 客户端/服务端     │
│  oauth/                            — OAuth 认证                              │
│  policyLimits/                    — 组织策略限制                              │
└──────────────────────────────────┬──────────────────────────────────────────┘
                                   ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         存储与会话层                                         │
│                                                                             │
│  utils/sessionStorage.ts (5,105 LOC) — SQLite 会话存储                      │
│  utils/attachments.ts (3,997 LOC)    — 附件处理(图片/文件)                  │
│  utils/messages.ts (5,512 LOC)       — 消息规范化与工具结果                    │
│  memdir/                            — 记忆目录(memory snapshot)            │
│  state/AppState.ts                  — React 状态管理                         │
└─────────────────────────────────────────────────────────────────────────────┘

二、源码文件树(精简版)

仅列出有注释说明的模块/文件,__init__.py 类文件和 node_modules 已省略。

claudecode/src/
│
├── main.tsx                          # 完整 CLI 入口(4,683 LOC)
├── entrypoints/
│   ├── cli.tsx                       # CLI 快速路径(302 LOC,零导入版本检测)
│   ├── init.ts                       # 初始化(遥测、配置、策略)
│   └── agentSdkTypes.ts              # SDK 类型定义
│
├── bootstrap/
│   └── state.ts                      # 全局 AppState(1,758 LOC)
│
├── query.ts                          # 核心对话循环(1,729 LOC)
├── context.ts                        # 系统/用户上下文
├── history.ts                        # 会话历史
├── tasks.ts                          # 任务状态管理
├── Task.ts                           # Task 接口(7 种任务类型)
├── Tool.ts                           # Tool 接口定义(792 LOC)
├── tools.ts                          # 工具注册中心(389 LOC)
│
├── commands.ts                       # 命令定义(754 LOC)
├── commands/                         # 86 个命令子目录
│   ├── login/, logout/              # 认证
│   ├── model/, config/              # 模型与配置
│   ├── context/, compact/           # 上下文管理
│   ├── diff/, review/               # 代码审查
│   ├── mcp/, skills/               # 扩展
│   ├── tasks/, session/           # 任务与会话
│   ├── plan/, resume/             # 计划模式
│   ├── doctor/, feedback/         # 健康检查与反馈
│   ├── install-github-app/,       # GitHub App 安装
│   └── install-slack-app/,        # Slack App 安装
│
├── tools/                            # 44 个工具实现
│   ├── BashTool/                   # Shell 命令执行
│   ├── AgentTool/                  # 子 Agent 委托
│   ├── FileReadTool/              # 文件读取(含图片处理)
│   ├── FileEditTool/              # 文件编辑(diff 解析)
│   ├── FileWriteTool/             # 文件写入
│   ├── GlobTool/ GrepTool/        # 文件搜索
│   ├── WebSearchTool/             # 网页搜索
│   ├── WebFetchTool/              # 网页抓取
│   ├── TaskCreateTool/, TaskGetTool/, TaskUpdateTool/, TaskListTool/  # 任务管理
│   ├── SkillTool/                 # Skill 加载
│   ├── REPLTool/                  # REPL 虚拟机
│   ├── NotebookEditTool/          # Jupyter 笔记本
│   ├── LSPTool/                   # 语言服务器协议
│   ├── ExitPlanModeTool/          # 退出计划模式
│   ├── TeamCreateTool/, TeamDeleteTool/   # 团队(多 Agent)
│   ├── SendMessageTool/           # 发送消息
│   ├── SleepTool/                 # 延迟(主动模式)
│   ├── CtxInspectTool/            # 上下文检查(CONTEXT_COLLAPSE)
│   ├── WebBrowserTool/            # 浏览器自动化(WEB_BROWSER_TOOL)
│   ├── WorkflowTool/              # 工作流脚本
│   ├── CronCreateTool/, CronDeleteTool/, CronListTool/  # 定时任务
│   ├── MonitorTool/               # 监控(MONITOR_TOOL)
│   └── environments/             # 终端执行环境(local, ssh, docker…)
│
├── services/
│   ├── api/
│   │   ├── claude.ts             # Anthropic API 调用(3,419 LOC)
│   │   ├── filesApi.ts           # 文件解析下载
│   │   ├── bootstrap.ts          # 引导数据
│   │   └── errors.ts             # 错误定义
│   ├── compact/                   # 上下文压缩(autoCompact)
│   │   ├── autoCompact.ts         # 自动压缩阈值检测
│   │   └── compact.ts            # 压缩执行
│   ├── mcp/
│   │   ├── client.ts             # MCP 客户端(3,348 LOC)
│   │   ├── auth.ts               # MCP 认证(2,465 LOC)
│   │   └── officialRegistry.ts   # 官方 MCP 注册表
│   ├── analytics/                 # GrowthBook + 遥测
│   ├── plugins/
│   │   ├── pluginLoader.ts       # 插件加载器(3,302 LOC)
│   │   └── marketplaceManager.ts # 插件市场管理
│   ├── lsp/                       # 语言服务器协议
│   ├── oauth/                     # OAuth
│   └── tools/
│       └── StreamingToolExecutor.ts  # 流式工具执行
│
├── utils/
│   ├── messages.ts                # 消息规范化(5,512 LOC)
│   ├── sessionStorage.ts          # SQLite 会话存储(5,105 LOC)
│   ├── hooks.ts                   # 钩子系统(5,022 LOC)
│   ├── bash/
│   │   ├── bashParser.ts         # Shell 解析(4,436 LOC)
│   │   └── ast.ts               # Bash AST(2,679 LOC)
│   ├── attachments.ts             # 附件处理(3,997 LOC)
│   ├── config.ts                  # 配置管理
│   ├── auth.ts                    # 认证
│   ├── permissions/               # 权限系统
│   ├── plugins/                   # 插件工具
│   ├── model/                     # 模型选择
│   ├── settings/                  # 设置管理(含 MDM)
│   └── secureStorage/             # 安全存储
│
├── state/
│   └── AppState.tsx               # React 状态
│
├── components/                     # 100+ Ink React 组件
│   ├── Spinner.tsx                # 旋转动画
│   ├── ConfirmDialog.tsx          # 确认对话框
│   ├── Text.tsx, Box.tsx …       # Ink 基础组件
│   └── screens/                   # 全屏界面
│       ├── REPL.tsx               # REPL 界面
│       ├── ResumeConversation.tsx # 恢复对话
│       └── Doctor.tsx            # 诊断界面
│
├── hooks/                          # React Hooks
│   ├── useCanUseTool.ts           # 工具权限检查
│   └── useMergedTools.ts          # 工具合并
│
├── bridge/                         # 桥接模式(BRIDGE_MODE)
│   ├── bridgeMain.ts              # 桥接主逻辑(2,999 LOC)
│   └── replBridge.ts             # REPL 桥接
│
├── coordinator/                    # 协调者模式(COORDINATOR_MODE)
│   └── coordinatorMode.ts         # 多 Agent 协调
│
├── assistant/                      # Agent 模式(KAIROS)
│   └── sessionHistory.ts           # Agent 会话历史
│
├── memdir/                         # 记忆目录
│   ├── memoryScan.ts              # 记忆扫描
│   ├── findRelevantMemories.ts   # 相关记忆查找
│   └── memoryAge.ts              # 记忆生命周期
│
├── cli/
│   ├── bg.js                      # 后台会话管理
│   ├── handlers/                   # 命令处理器
│   │   ├── templateJobs.ts        # 模板作业
│   │   └── ...
│   └── transports/                 # 传输层(7 种)
│       ├── local.ts, remote.ts, stdio.ts …
│
├── server/                         # API 服务器
├── ink.ts                          # Ink Root
├── replLauncher.tsx               # REPL 启动器
│
├── native-ts/
│   └── yoga-layout/               # Yoga 布局引擎(C++ → TS)
│
├── daemon/                         # 守护进程
│   ├── main.ts                   # Daemon 主入口
│   └── workerRegistry.ts         # Worker 注册表
│
├── plugins/context_engine/         # 上下文引擎插件
├── plugins/memory/                # 记忆提供方插件
│
├── skills/                         # 内置 Skill
│   └── ...
│
├── migrations/                    # 数据库迁移
│
├── types/
│   ├── message.ts                 # 消息类型
│   ├── permissions.ts             # 权限类型
│   ├── tools.ts                   # 工具进度类型
│   ├── ids.ts                     # SessionId、AgentId
│   └── hooks.ts                   # 钩子类型
│
├── constants/
│   ├── prompts.ts                 # 系统提示词
│   ├── oauth.ts                   # OAuth 配置
│   └── tools.ts                   # 工具常量
│
├── schemas/                       # JSON Schema 定义
│
├── keybindings/                   # 快捷键系统(11 个文件)
│   ├── parser.ts, resolver.ts    # 解析与绑定
│   ├── defaultBindings.ts        # 默认快捷键
│   └── loadUserBindings.ts      # 用户绑定加载
│
├── outputStyles/                  # 输出样式系统
├── voice/                         # 语音模式
├── vim/                           # Vim 集成
├── more right/                    # 权限扩展
│
└── vendor/                        # 外部源码
    ├── audio-capture/             # 音频捕获
    ├── image-processor/           # 图片处理
    ├── modifiers-napi/            # NAPI 修饰器
    └── url-handler/              # URL 处理

三、核心循环(query.ts,~1,729 LOC)

3.1 对话循环生命周期

用户输入
  │
  ▼
query.ts → runQuery()
  │
  ├── 1. 解析命令(isSlashCommand / getCommandsByMaxPriority)
  │         → 若是 / 命令,路由到 commands/ 对应处理器
  │
  ├── 2. 构建消息
  │         → createUserMessage() / createSystemMessage()
  │         → prependUserContext()(用户上下文)
  │         → appendSystemContext()(系统上下文)
  │         → createAttachmentMessage()(附件处理)
  │
  ├── 3. 上下文压缩检查
  │         → isAutoCompactEnabled()
  │         → calculateTokenWarningState()
  │         → 若超阈值 → buildPostCompactMessages()
  │
  ├── 4. 权限检查(PreToolUse Hooks)
  │         → canUseTool() 对每个工具调用检查权限
  │
  ├── 5. API 调用(normalizeMessagesForAPI → api/claude.ts)
  │         → streaming 或 blocking
  │         → 若超 token 限制 → ESCALATED_MAX_TOKENS
  │
  ├── 6. 处理流式响应
  │         → StreamingToolExecutor 执行工具调用
  │         → runTools() 编排工具执行
  │
  ├── 7a. 若有 tool_calls → 追加 tool result,循环回步骤 1
  │         → recordContentReplacement() 工具结果预算
  │
  └── 7b. 若为最终响应 → 保存会话历史
            → extractMemories() 记忆提取
            → executePostSamplingHooks()

3.2 消息规范化

所有消息在 utils/messages.ts(5,512 LOC)中统一规范化:

normalizeMessagesForAPI(messages: Message[])
// 转换为 Anthropic API 格式
// 处理 tool_calls / tool_result 配对
// 剥离签名块 stripSignatureBlocks()
// 生成工具摘要 createToolUseSummaryMessage()

3.3 上下文压缩

双重压缩机制(与 Hermes 类似但更早介入):

阶段 触发条件 执行位置
自动压缩(autoCompact) 上下文 >85% services/compact/autoCompact.ts
响应后压缩(postCompact) API 响应后检查 services/compact/compact.ts
反应式压缩(reactiveCompact) feature('REACTIVE_COMPACT') services/compact/reactiveCompact.ts
上下文折叠(contextCollapse) feature('CONTEXT_COLLAPSE') services/contextCollapse/

四、工具系统(Tool System)

4.1 Tool 接口设计

每个工具实现 Tool 接口,核心方法:

interface Tool<Input, Output, P extends ToolProgressData> {
  name: string              // 唯一标识
  aliases?: string[]        // 向后兼容别名
  inputSchema: Input        // Zod 输入 schema
  outputSchema?: z.ZodType  // Zod 输出 schema

  // 核心方法
  call(args, context, canUseTool, parentMessage, onProgress?): Promise<ToolResult<Output>>
  description(args, options): Promise<string>

  // 权限与状态
  isEnabled(): boolean
  isConcurrencySafe(input): boolean
  isReadOnly(input): boolean
  isDestructive?(input): boolean

  // UI 行为
  interruptBehavior?(): 'cancel' | 'block'
  isSearchOrReadCommand?(input): { isSearch, isRead, isList }
  requiresUserInteraction?(): boolean

  // MCP
  isMcp?: boolean
  mcpInfo?: { serverName: string; toolName: string }

  // 延迟加载
  shouldDefer?: boolean      // 需 ToolSearch 先决条件
  alwaysLoad?: boolean       // 初始提示词必定包含
}

4.2 工具注册与条件加载

tools.ts 是唯一的工具注册中心:

export function getAllBaseTools(): Tools {
  return [
    AgentTool,
    TaskOutputTool,
    BashTool,
    ...(hasEmbeddedSearchTools() ? [] : [GlobTool, GrepTool]),
    ExitPlanModeV2Tool,
    FileReadTool,
    FileEditTool,
    // ... 40+ 工具
  ]
}

条件加载示例:

// ANT-ONLY 工具
...(process.env.USER_TYPE === 'ant' ? [ConfigTool, TungstenTool] : [])

// Feature Flag 工具
...(WebBrowserTool ? [WebBrowserTool] : [])       // feature('WEB_BROWSER_TOOL')
...(isTodoV2Enabled() ? [TaskCreateTool, ...] : [])

// 协作(Swarm)模式
...(isAgentSwarmsEnabled() ? [getTeamCreateTool(), getTeamDeleteTool()] : [])

4.3 权限系统

三层权限模式(types/permissions.ts):

模式 行为
default 首次调用询问,之后记住决策
accept 自动允许所有工具
deny 拒绝所有工具

权限规则支持来源过滤(tool_permission_rules_by_source),可按 MCP 服务器前缀 blanket-deny。

4.4 任务系统(Task.ts)

支持 7 种任务类型:

类型 前缀 说明
local_bash b 本地 Shell 执行
local_agent a 本地子 Agent
remote_agent r 远程 Agent
in_process_teammate t 进程内队友
local_workflow w 本地工作流
monitor_mcp m MCP 监控
dream d 梦境模式

Task ID 使用 randomBytes(8) 生成,36 进制(数字 + 小写字母),前缀 8 位组合约 2.8 万亿种。


五、命令系统(86 个命令)

commands.ts 统一注册所有 / 命令:

// 每个命令的结构
{
  name: string
  description: string
  handler: (args, appState) => Promise<void>
  aliases?: string[]
}

典型命令目录结构(以 commands/config/ 为例):

  • index.ts — 命令处理器
  • get.tsconfig get 子命令
  • set.tsconfig set 子命令
  • list.tsconfig list 子命令

六、插件与 MCP 系统

6.1 插件系统(pluginLoader.ts,3,302 LOC)

发现 → 加载 → 挂钩注册
  │
  ├── 本地插件:~/.claude/plugins/
  ├── 市场插件:Claude Code Marketplace
  └── 内置插件:plugins/context_engine/, plugins/memory/

6.2 MCP 客户端(client.ts,3,348 LOC)

支持动态连接多个 MCP 服务器,工具自动暴露给模型。认证模块(auth.ts,2,465 LOC)处理 OAuth 与 API Key。


七、存储与会话

7.1 会话存储(sessionStorage.ts,5,105 LOC)

  • 位置:~/.claude/sessions/
  • 格式:每个 session 一个目录(包含 metadata.jsonlmessages.jsonl
  • 工具结果持久化:超过 maxResultSizeChars 的结果写入磁盘

7.2 记忆目录(memdir/)

~/.claude/
├── memories/
│   ├── MEMORY.md    # 持久记忆快照
│   └── USER.md     # 用户配置快照
└── sessions/        # 会话历史

八、特性开关系统(Feature Flags)

代码核心设计:Dead Code Elimination(构建时消除)

import { feature } from 'bun:bundle'

// 条件编译 — 外部构建时完全移除
if (feature('COORDINATOR_MODE')) {
  const coordinator = require('./coordinator/coordinatorMode.js')
}

// ANT-ONLY(公司内部构建标志)
if (process.env.USER_TYPE === 'ant') {
  // ANT 专有代码
}

// 环境变量开关(运行时)
if (process.env.CLAUDE_CODE_SIMPLE === '1') {
  // Simple 模式:Bash/Read/Edit 三件套
}

重要 Feature 标志:

标志 说明
KAIROS Agent 模式(助手模式)
COORDINATOR_MODE 协调者模式(多 Agent)
BRIDGE_MODE 桥接模式(远程控制)
DAEMON 常驻守护进程
BG_SESSIONS 后台会话管理
PROACTIVE 主动模式
VOICE_MODE 语音模式
WEB_BROWSER_TOOL 浏览器自动化工具
CONTEXT_COLLAPSE 上下文折叠
REACTIVE_COMPACT 反应式压缩
AGENT_TRIGGERS 定时任务(cron)
TEMPLATES 模板作业

九、传输层(CLI Transports)

cli/transports/ 支持 7 种运行方式:

传输方式 说明
local 本地 TTY
remote 远程(WebSocket)
stdio 标准 I/O(供 IPC)
agent SDK 代理模式
browser 浏览器内
mobile 移动端
desktop 桌面端(IDE 集成)

十、源码规模统计

指标 数值
TypeScript 文件(.ts) 1,332
React 文件(.tsx) 552
源码总行数 ~380,000 LOC
最大单文件 cli/print.ts(5,594 LOC)
次大单文件 utils/messages.ts(5,512 LOC)
第三大单文件 utils/sessionStorage.ts(5,105 LOC)
命令子目录 86
Ink 组件 144+
工具实现 44

十一、架构设计亮点

11.1 三并行预加载

main.tsx 顶部在 import 其他模块之前,启动三个独立的并行预处理:

  1. MDM 读取(macOS Managed Settings)— startMdmRawRead()
  2. Keychain 预读(OAuth + API Key)— startKeychainPrefetch()
  3. 性能埋点profileCheckpoint('main_tsx_entry')

注释说明这三个操作并行运行,与剩余 ~135ms 的模块导入并行执行,节省启动时间。

11.2 零开销版本检测

cli.tsx--version 路径:零 import,直接读取编译时内联的 MACRO.VERSION 立即返回,不触发任何模块加载。

11.3 工具结果预算(Content Replacement)

utils/toolResultStorage.ts 实现了工具结果的预算系统:当工具输出超过阈值时,写入磁盘并只将路径返回给模型,避免上下文污染。

11.4 双向引用完整性

Tool.ts 中的 ensureToolResultPairing(strict=true) 保证每条 tool_call 必有对应的 tool_result,防止模型产生幻觉的工具调用。

11.5 进程隔离的任务 ID

任务 ID 使用 randomBytes(8) 生成 64 位随机数,前缀标识任务类型,防止恶意 symlink 攻击(36^8 ≈ 2.8 万亿组合空间)。


十二、关键文件速查

文件 LOC 职责
main.tsx 4,683 完整 CLI 入口,三并行预加载
cli/print.ts 5,594 CLI 输出渲染(最大文件)
utils/messages.ts 5,512 消息规范化与工具结果
utils/sessionStorage.ts 5,105 SQLite 会话存储
utils/hooks.ts 5,022 钩子系统(Pre/Post Tool/Hook)
services/api/claude.ts 3,419 Anthropic API 调用与重试
services/mcp/client.ts 3,348 MCP 客户端
utils/plugins/pluginLoader.ts 3,302 插件加载
services/mcp/auth.ts 2,465 MCP 认证
bootstrap/state.ts 1,758 全局 AppState(56KB)
query.ts 1,729 核心对话循环
commands.ts 754 命令注册中心
tools.ts 389 工具注册中心
Tool.ts 792 Tool 接口定义
Task.ts 125 Task 接口(7 种任务类型)
entrypoints/cli.tsx 302 CLI 快速路径(零导入)
posted @ 2026-05-13 17:57  getmoon  阅读(37)  评论(0)    收藏  举报