Files
calude-code/codebase_analysis.md
T
2026-04-28 10:40:28 +08:00

11 KiB
Raw Blame History

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) 全量 TSmoduleResolution: 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 对话循环:

  1. 上下文管理 — 自动压缩(auto compact)、微压缩(microcompact)、snip(历史裁剪)
  2. API 调用 — 流式调用 Anthropic Messages API
  3. 工具执行 — 解析模型返回的 tool_use 块,执行对应工具
  4. 循环继续 — 将工具结果拼接回消息列表,继续下一轮推理

关键特性:

  • 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 — 从文件系统加载自定义 skill
  • bundled/ — 内置 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.tsultraplan/prompt.txt 桩文件
Enter 键无响应 modifiers-napi native 包缺失,加 try-catch 容错
setup 被跳过 移除 preload.ts 中默认设置的 LOCAL_RECOVERY=1

总结

这是一个 功能极其完整的 AI 编程助手 实现,涵盖:

  1. 完整的终端 TUI 交互界面 (React/Ink)
  2. 40+ 内建工具 (文件操作、搜索、Shell、Agent、MCP)
  3. 87+ 斜杠命令
  4. 多 Agent 并行执行 (Coordinator/Worker 架构)
  5. MCP 协议支持
  6. Skill/Plugin 扩展系统
  7. 自动上下文压缩 (auto compact, reactive compact, snip)
  8. 流式工具执行
  9. 多层权限控制
  10. 语音输入支持
  11. Git Worktree 隔离执行
  12. IDE 集成 (VS Code, JetBrains)
  13. OAuth / API Key 认证
  14. 会话持久化与恢复