11 KiB
11 KiB
Claude Code Haha — 项目代码分析
概述
本项目是基于 2026-03-31 泄露的 Anthropic Claude Code 源码 修复而成的本地可运行版本,命名为 Claude Code Haha。它是一个功能完整的 AI 编程助手 CLI 工具,支持接入任意 Anthropic 兼容 API(如 MiniMax、OpenRouter 等)。
Note
泄露的原始源码无法直接运行。本仓库修复了启动链路中的多个阻塞问题(Enter 键无响应、TUI 不启动、stub 文件缺失等),使完整的 Ink TUI 交互界面可以在本地工作。
技术栈
| 类别 | 技术 | 说明 |
|---|---|---|
| 运行时 | Bun | 高性能 JS/TS 运行时,用于替代 Node.js |
| 语言 | TypeScript (ESNext) | 全量 TS,moduleResolution: bundler |
| 终端 UI | React 19 + Ink 6 | 基于 React 渲染终端 TUI 界面 |
| CLI 解析 | Commander.js (@commander-js/extra-typings) |
命令行参数解析和子命令 |
| AI API | @anthropic-ai/sdk |
Anthropic Messages API 通信 |
| MCP 协议 | @modelcontextprotocol/sdk |
Model Context Protocol 客户端 |
| LSP | vscode-jsonrpc / vscode-languageserver-types |
Language Server Protocol 集成 |
| 可观测性 | OpenTelemetry (logs/metrics/tracing) | 遥测数据采集 |
| 特性开关 | GrowthBook (@growthbook/growthbook) |
A/B 测试与功能门控 |
| 构建特性 | bun:bundle (feature()) |
编译时死代码消除 |
| 数据验证 | Zod v4 | 输入 schema 定义与校验 |
| 云认证 | google-auth-library, @aws-sdk/client-bedrock-runtime |
Google/AWS 多云认证 |
| Markdown | marked + highlight.js |
Markdown 渲染和代码高亮 |
| 搜索 | fuse.js |
模糊搜索(命令/文件搜索) |
| 其他 | chalk, diff, chokidar, yaml, zod, ws |
着色、diff、文件监听、YAML 解析、WebSocket |
架构概览
启动链路
bin/claude-haha (Bash)
└─ bun --env-file=.env src/entrypoints/cli.tsx
├─ Fast paths: --version, --daemon, --bridge, ps/logs/attach/kill
└─ Full CLI: src/main.tsx (Commander.js 解析 → React/Ink TUI)
└─ src/screens/REPL.tsx (主交互 REPL 循环)
preload.ts— Bun preload 脚本,注入MACRO全局变量(版本号等)cli.tsx— Bootstrap 入口,通过 fast-path 优化各子命令的加载速度main.tsx(~800KB) — 核心主逻辑,Commander.js 定义所有命令行选项REPL.tsx(~900KB) — 交互式 REPL 界面,处理用户输入、消息渲染、工具执行
核心模块层次
graph TD
A[CLI Entry - cli.tsx] --> B[Main - main.tsx]
B --> C[REPL Screen - REPL.tsx]
C --> D[Query Engine - query.ts]
D --> E[API Service - services/api]
D --> F[Tool System - tools/]
D --> G[Auto Compact - services/compact]
C --> H[UI Components - components/]
C --> I[React Hooks - hooks/]
F --> J[Permission System - utils/permissions]
C --> K[MCP Clients - services/mcp]
C --> L[Slash Commands - commands/]
核心系统详解
1. Query Engine (query.ts, QueryEngine.ts)
核心循环:query() 是一个 AsyncGenerator,驱动整个 AI 对话循环:
- 上下文管理 — 自动压缩(auto compact)、微压缩(microcompact)、snip(历史裁剪)
- API 调用 — 流式调用 Anthropic Messages API
- 工具执行 — 解析模型返回的
tool_use块,执行对应工具 - 循环继续 — 将工具结果拼接回消息列表,继续下一轮推理
关键特性:
- Task Budget — 限制单次 agentic turn 的总 token 消耗
- Reactive Compact — 遇到 prompt-too-long 时自动触发压缩
- Streaming Tool Execution — 流式接收模型输出的同时并行启动工具执行
- Fallback Model — 主模型失败时自动降级到备用模型
2. Tool System (Tool.ts, tools.ts, tools/)
采用 buildTool() 工厂模式,统一工具定义接口。每个工具包含:
inputSchema(Zod) — 输入校验checkPermissions()— 权限检查call()— 执行逻辑renderToolUseMessage()/renderToolResultMessage()— UI 渲染prompt()— 给模型的工具说明
内置工具清单 (40+)
| 分类 | 工具 | 说明 |
|---|---|---|
| 文件操作 | FileReadTool, FileWriteTool, FileEditTool, NotebookEditTool |
读/写/编辑文件、Jupyter Notebook |
| 搜索 | GrepTool, GlobTool, WebSearchTool, ToolSearchTool |
Ripgrep 搜索、Glob 匹配、网页搜索、工具发现 |
| Shell | BashTool, PowerShellTool, REPLTool |
Bash/PowerShell 命令执行、REPL VM 模式 |
| 任务管理 | TaskCreateTool, TaskGetTool, TaskUpdateTool, TaskListTool, TaskStopTool, TaskOutputTool |
多任务并行管理 |
| Agent | AgentTool, TeamCreateTool, TeamDeleteTool, SendMessageTool |
子 Agent 派生、团队协作 |
| 计划模式 | EnterPlanModeTool, ExitPlanModeTool, EnterWorktreeTool, ExitWorktreeTool |
进入/退出计划模式、Git Worktree 隔离 |
| 网络 | WebFetchTool, WebBrowserTool |
HTTP 抓取、浏览器自动化 |
| MCP | MCPTool, ListMcpResourcesTool, ReadMcpResourceTool |
MCP 服务器工具代理 |
| 其他 | TodoWriteTool, SkillTool, AskUserQuestionTool, LSPTool, ConfigTool, SleepTool, BriefTool |
TODO 管理、Skill 调用、用户交互、LSP 诊断 |
| 特殊 | ScheduleCronTool, RemoteTriggerTool, WorkflowTool, MonitorTool |
定时任务、远程触发、工作流脚本 |
3. 斜杠命令系统 (commands/)
项目包含 87+ 个斜杠命令目录,覆盖:
| 分类 | 命令示例 |
|---|---|
| Git 操作 | /commit, /diff, /branch, /review, /pr_comments |
| 会话管理 | /session, /resume, /compact, /clear, /export, /share |
| 配置 | /config, /model, /theme, /keybindings, /permissions, /vim |
| Agent/协作 | /agents, /buddy, /tasks, /teleport |
| 开发工具 | /doctor, /stats, /debug-tool-call, /heapdump, /ctx_viz |
| 集成 | /mcp, /plugin, /skills, /chrome, /ide, /desktop |
| 其他 | /help, /version, /upgrade, /feedback, /voice, /login, /logout |
4. 服务层 (services/)
| 服务 | 说明 |
|---|---|
api/ |
API 调用封装 (重试、fallback、mock、dump prompts) |
mcp/ |
MCP 客户端管理 (连接、工具注册、资源读取) |
compact/ |
自动压缩 (auto compact, reactive compact, snip) |
oauth/ |
OAuth 认证流程 |
lsp/ |
LSP 服务器集成 |
analytics/ |
分析追踪 (GrowthBook, 事件上报) |
plugins/ |
插件加载与管理 |
voice.ts |
语音输入 (STT) |
tips/ |
使用提示推送 |
policyLimits/ |
组织策略限制 |
5. UI 组件 (components/)
基于 React + Ink 构建的终端 UI 组件体系,包含 113 个组件文件 + 31 个子目录:
- 核心交互:
PromptInput/,TextInput,VimTextInput,BaseTextInput - 消息渲染:
Message,MessageRow,Messages,VirtualMessageList(虚拟滚动) - 差异展示:
StructuredDiff/,FileEditToolDiff,diff/ - 对话框:
ModelPicker,ThemePicker,GlobalSearchDialog,HistorySearchDialog - 状态显示:
StatusLine,Spinner,AgentProgressLine,CoordinatorAgentStatus - Markdown:
Markdown,MarkdownTable,HighlightedCode/ - 设计系统:
design-system/,ui/
6. Skill 系统 (skills/)
Skill 是可扩展的指令文件系统:
bundledSkills.ts— 内置 skill 注册loadSkillsDir.ts— 从文件系统加载自定义 skillbundled/— 内置 skill 目录- 支持 YAML frontmatter 格式的
.md文件
7. 多 Agent 架构 (coordinator/)
- Coordinator Mode — 协调器模式,中央 Agent 分配任务给 Worker Agent
- Agent Tool — 派生子 Agent 执行独立任务
- Team System — 创建/删除团队成员
- Worktree — Git Worktree 隔离执行
8. 权限与安全 (utils/permissions/)
多层权限控制体系:
- PermissionMode:
default,plan,auto,bypass - 规则来源: project CLAUDE.md、user settings、CLI flags
- 规则类型:
alwaysAllow,alwaysDeny,alwaysAsk - Hooks:
PreToolUse,PostToolUse钩子
关键数据流
用户输入 → PromptInput → handlePromptSubmit()
→ slash command? → 执行 command handler
→ 否 → query() async generator
→ auto compact / microcompact / snip
→ prependUserContext() + appendSystemContext()
→ deps.callModel() (流式 API 调用)
→ 解析 tool_use 块 → StreamingToolExecutor
→ checkPermissions() → call() → ToolResult
→ 拼接 tool_result → 继续循环
→ stop_reason ≠ tool_use → 结束
项目文件统计
| 目录 | 估计文件数 | 说明 |
|---|---|---|
src/tools/ |
44 目录 | 内置工具实现 |
src/commands/ |
87 目录 + 15 文件 | 斜杠命令 |
src/components/ |
113 文件 + 31 目录 | UI 组件 |
src/hooks/ |
83 文件 + 2 目录 | React hooks |
src/utils/ |
298 文件 + 31 目录 | 工具函数 |
src/services/ |
16 文件 + 20 目录 | 服务层 |
| 总计 | ~700+ 文件 | 大型 TypeScript 项目 |
Important
核心文件体量巨大:
main.tsx(~800KB)、REPL.tsx(~900KB)、messages.ts(~193KB)、query.ts(~69KB)。这是一个工业级的 AI 编程助手完整实现。
本地修复清单
| 问题 | 修复方式 |
|---|---|
| TUI 不启动 | 恢复 cli.tsx 完整入口(原代码错误路由到 recovery CLI) |
| 启动卡死 | 创建 stub .md 文件(verify skill 导入缺失) |
--print 卡死 |
创建 filePersistence/types.ts 和 ultraplan/prompt.txt 桩文件 |
| Enter 键无响应 | modifiers-napi native 包缺失,加 try-catch 容错 |
| setup 被跳过 | 移除 preload.ts 中默认设置的 LOCAL_RECOVERY=1 |
总结
这是一个 功能极其完整的 AI 编程助手 实现,涵盖:
- ✅ 完整的终端 TUI 交互界面 (React/Ink)
- ✅ 40+ 内建工具 (文件操作、搜索、Shell、Agent、MCP)
- ✅ 87+ 斜杠命令
- ✅ 多 Agent 并行执行 (Coordinator/Worker 架构)
- ✅ MCP 协议支持
- ✅ Skill/Plugin 扩展系统
- ✅ 自动上下文压缩 (auto compact, reactive compact, snip)
- ✅ 流式工具执行
- ✅ 多层权限控制
- ✅ 语音输入支持
- ✅ Git Worktree 隔离执行
- ✅ IDE 集成 (VS Code, JetBrains)
- ✅ OAuth / API Key 认证
- ✅ 会话持久化与恢复