源码反编译地址

系统架构图

┌─────────────────────────────────────────────────────────────────────────────────┐
│                              CLI 入口层 (Entrypoints)                            │
├─────────────────────────────────────────────────────────────────────────────────┤
│  src/entrypoints/cli.tsx                                                        │
│  ├── Runtime Polyfill (feature(), MACRO)                                        │
│  ├── 快速路径分发 (--version, --daemon, --bridge, etc.)                          │
│  └── 加载 main.tsx                                                              │
│                                                                                 │
│  src/main.tsx (~234KB)                                                          │
│  ├── Commander.js CLI 定义                                                      │
│  ├── 参数解析 & 配置初始化                                                        │
│  ├── 认证/权限/会话初始化                                                         │
│  └── 启动 REPL 或 Pipe 模式                                                      │
└─────────────────────────────────────────────────────────────────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              UI 渲染层 (Ink/React)                               │
├─────────────────────────────────────────────────────────────────────────────────┤
│  src/screens/REPL.tsx (~5000+ 行)                                               │
│  ├── 主交互界面                                                                  │
│  ├── 消息显示 & 输入处理                                                          │
│  ├── 工具权限确认 UI                                                             │
│  └── 快捷键 & Vim 模式                                                           │
│                                                                                 │
│  src/ink/ (自定义 Ink 框架)                                                      │
│  ├── React Reconciler                                                           │
│  ├── Terminal I/O                                                               │
│  └── Hooks (useInput, useTerminalSize, etc.)                                    │
│                                                                                 │
│  src/components/                                                                │
│  ├── Messages.tsx / MessageRow.tsx (消息渲染)                                    │
│  ├── PromptInput/ (用户输入)                                                     │
│  ├── permissions/ (权限 UI)                                                      │
│  └── Spinner.tsx, Dialog 等                                                      │
└─────────────────────────────────────────────────────────────────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              核心引擎层 (Query Engine)                           │
├─────────────────────────────────────────────────────────────────────────────────┤
│  src/QueryEngine.ts (~1300 行)                                                  │
│  ├── 对话状态管理                                                                │
│  ├── 消息队列 & 上下文构建                                                        │
│  ├── Token 追踪 & 自动压缩                                                       │
│  └── 文件历史快照 & 归因                                                          │
│                                                                                 │
│  src/query.ts (~1700 行)                                                        │
│  ├── API 请求循环                                                                │
│  ├── 流式响应处理                                                                │
│  ├── 工具调用编排                                                                │
│  └── 错误恢复 & 重试                                                             │
└─────────────────────────────────────────────────────────────────────────────────┘
                                        │
                    ┌───────────────────┼───────────────────┐
                    ▼                   ▼                   ▼
┌───────────────────────┐  ┌───────────────────────┐  ┌───────────────────────┐
│      API 通信层        │  │      工具系统层        │  │      服务层           │
├───────────────────────┤  ├───────────────────────┤  ├───────────────────────┤
│ src/services/api/     │  │ src/Tool.ts           │  │ src/services/         │
│ ├── claude.ts (核心)  │  │ (工具接口定义)         │  │ ├── mcp/ (MCP协议)   │
│ ├── providers:        │  │                       │  │ ├── oauth/           │
│ │   ├── Anthropic     │  │ src/tools.ts          │  │ ├── plugins/         │
│ │   ├── Bedrock       │  │ (工具注册表)           │  │ ├── compact/         │
│ │   ├── Vertex        │  │                       │  │ ├── lsp/             │
│ │   └── Azure         │  │ src/tools/            │  │ ├── analytics/       │
│ └── errors.ts         │  │ ├── BashTool/         │  │ └── policyLimits/    │
│                       │  │ ├── FileEditTool/     │  │                       │
│                       │  │ ├── FileReadTool/     │  │                       │
│                       │  │ ├── AgentTool/        │  │                       │
│                       │  │ ├── WebFetchTool/     │  │                       │
│                       │  │ └── ... (50+ 工具)    │  │                       │
└───────────────────────┘  └───────────────────────┘  └───────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              状态管理层 (State)                                  │
├─────────────────────────────────────────────────────────────────────────────────┤
│  src/state/AppStateStore.ts                                                     │
│  ├── AppState 类型定义                                                           │
│  ├── 消息列表、工具权限、MCP 连接                                                  │
│  └── 会话配置、模型设置                                                           │
│                                                                                 │
│  src/state/store.ts (Zustand-style store)                                       │
│  src/bootstrap/state.ts (模块级单例状态)                                          │
└─────────────────────────────────────────────────────────────────────────────────┘
                                        │
                                        ▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              基础设施层 (Utils & Types)                          │
├─────────────────────────────────────────────────────────────────────────────────┤
│  src/utils/                          │  src/types/                              │
│  ├── model/ (模型选择)               │  ├── message.ts (消息类型)               │
│  ├── permissions/ (权限系统)         │  ├── permissions.ts                      │
│  ├── auth.ts (认证)                  │  ├── hooks.ts                            │
│  ├── config.ts (配置)                │  └── global.d.ts                         │
│  ├── git.ts                          │                                          │
│  ├── messages.ts                     │  src/constants/                          │
│  └── claudemd.ts                     │  └── prompts.ts (系统提示)               │
└─────────────────────────────────────────────────────────────────────────────────┘

数据流图

用户输入
    │
    ▼
┌──────────────┐
│ PromptInput  │ ◄─── 历史命令、自动补全
└──────┬───────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐
│  斜杠命令?   │────►│   Commands   │──► 本地执行
└──────┬───────┘     └──────────────┘
       │ 否
       ▼
┌──────────────┐     ┌──────────────┐
│ QueryEngine  │────►│   context.ts │──► 构建上下文
└──────┬───────┘     └──────────────┘    (git status, CLAUDE.md, memory)
       │
       ▼
┌──────────────┐     ┌──────────────┐
│   query.ts   │────►│ API Client   │──► Claude API
└──────┬───────┘     └──────────────┘    (流式响应)
       │
       ▼
┌──────────────┐
│ 响应解析     │
│ ├─ 文本块    │──► 渲染到终端
│ ├─ 思考块    │──► 显示思考过程
│ └─ 工具调用  │
└──────┬───────┘
       │
       ▼
┌──────────────┐     ┌──────────────┐
│ 工具权限检查 │────►│PermissionUI │──► 用户确认
└──────┬───────┘     └──────────────┘
       │ 允许
       ▼
┌──────────────┐
│  工具执行    │
│  ├─ Bash     │──► Shell 命令
│  ├─ Edit     │──► 文件修改
│  ├─ Read     │──► 文件读取
│  ├─ Agent    │──► 子代理
│  └─ MCP      │──► 外部工具
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ 工具结果     │──► 追加到消息
└──────┬───────┘
       │
       ▼
    循环回 query.ts (直到无更多工具调用)

核心模块详解

1. 入口层

文件职责
cli.tsx真正入口,注入 polyfill,分发快速路径
main.tsxCommander.js CLI,参数解析,初始化流程
replLauncher.tsx启动 REPL 屏幕

2. UI 层

模块职责
screens/REPL.tsx主交互界面,消息渲染,输入处理
ink/自定义 Ink 框架,终端渲染
components/React 组件库
hooks/React Hooks

3. 核心引擎

文件职责
QueryEngine.ts高层会话管理器
query.tsAPI 调用循环,工具执行
Tool.ts工具接口定义
tools.ts工具注册表

4. 工具系统

src/tools/
├── BashTool/          # Shell 执行
├── FileReadTool/      # 文件读取 (支持 PDF、图片、Notebook)
├── FileEditTool/      # 文件编辑 (字符串替换)
├── FileWriteTool/     # 文件创建/覆写
├── GlobTool/          # 文件搜索
├── GrepTool/          # 内容搜索
├── AgentTool/         # 子代理派生
├── WebFetchTool/      # URL 抓取
├── WebSearchTool/     # 网页搜索
├── AskUserQuestionTool/ # 用户交互
├── SkillTool/         # 斜杠命令
├── EnterPlanModeTool/ # 计划模式
├── TaskCreateTool/    # 任务管理 (Todo v2)
├── SendMessageTool/   # 消息发送
└── ... (50+ 工具)

5. 服务层

模块职责
services/api/API 客户端 (Anthropic/Bedrock/Vertex/Azure)
services/mcp/MCP 协议实现
services/oauth/OAuth 认证
services/plugins/插件系统
services/compact/对话压缩
services/lsp/LSP 集成

6. 状态管理

src/state/
├── AppStateStore.ts   # AppState 类型定义
├── store.ts           # Zustand-style store
└── onChangeAppState.ts

src/bootstrap/state.ts # 模块级单例
├── sessionId
├── cwd
├── projectRoot
├── tokenCounts
└── ...

关键流程

启动流程

cli.tsx
  │
  ├─► --version → 输出版本,退出
  ├─► --daemon → daemon/main.js
  ├─► --bridge → bridge/bridgeMain.js
  │
  └─► main.tsx
        │
        ├─► enableConfigs() → 加载配置
        ├─► initSinks() → 初始化分析
        ├─► init() → 信任对话框、遥测
        │
        └─► launchRepl() 或 runPipeMode()

API 调用流程

query()
  │
  ├─► getSystemPrompt() → 构建系统提示
  ├─► normalizeMessagesForAPI() → 格式化消息
  │
  ├─► claude.messages.create() → 发送请求
  │     └─► 流式处理响应
  │
  ├─► 遇到 tool_use → StreamingToolExecutor
  │     ├─► 权限检查
  │     ├─► tool.call()
  │     └─► 记录结果
  │
  └─► 循环直到 stop_reason != "tool_use"

工具执行流程

StreamingToolExecutor
  │
  ├─► findToolByName()
  ├─► 权限检查 (canUseTool)
  │     ├─► 已允许 → 执行
  │     ├─► 需确认 → PermissionRequest UI
  │     └─► 拒绝 → 返回错误
  │
  ├─► tool.call(input, context)
  │     └─► 返回 ToolResultBlockParam
  │
  └─► 追加到消息列表

包结构 (packages/)

packages/
├── color-diff-napi/        # ✅ 完整实现 (语法高亮 diff)
├── audio-capture-napi/     # ❌ stub
├── image-processor-napi/   # ❌ stub
├── modifiers-napi/         # ❌ stub
├── url-handler-napi/       # ❌ stub
└── @ant/
    ├── claude-for-chrome-mcp/  # ❌ stub
    ├── computer-use-mcp/       # ❌ stub
    ├── computer-use-input/     # ❌ stub
    └── computer-use-swift/     # ❌ stub

Feature Flags 系统

// cli.tsx 顶部的 polyfill
const feature = (_name: string) => false;

// 原版通过 bun:bundle 在构建时注入
// 本项目所有 30 个 feature flag 均返回 false

这意味着以下功能被禁用:

  • KAIROS (自主 Agent)
  • VOICE_MODE (语音)
  • BRIDGE_MODE (远程控制)
  • DAEMON (守护进程)
  • 等等…

技术栈

层次技术
运行时Bun
UI 框架React + Ink (终端渲染)
CLI 框架Commander.js
API 客户端@anthropic-ai/sdk
状态管理Zustand-style
类型系统TypeScript + Zod
构建Bun bundler
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐