乐于分享
好东西不私藏

两行命令还原claude code源码,一起分析最牛AI编程工具的源码

两行命令还原claude code源码,一起分析最牛AI编程工具的源码

今天AI圈最大的瓜莫过于Claude Code源码泄露事件,chaofanshou的github仓库已经清空了源码,不过我们可通过简单操作还原源码,以下详解还原步骤与核心技术架构。

一、代码还原

由于是在出差路上,这部分工作我就交给我的麻辣小龙虾通过qq远程执行了。大家可以在上 https://spicyclaw.cn 下载一键安装包,绑定QQ,就能和我一样远程调动openclaw干活了。

还原源码需提前准备Node环境,这里我就不展开说明了。
还原具体操作分三步:
第一步,下载ClaudeCode官方最新发布包并解压,包内包含关键的cli.js.map源码映射文件,该文件本为调试所用,生产环境本不应发布,此次意外泄露成为还原源码的关键。

命令原文:
mkdir claude-code-extract && cd claude-code-extract
npm pack @anthropic-ai/claude-code@2.1.88
tar -xzf anthropic-ai-claude-code-2.1.88.tgz
cd package

第二步,编写unpack还原脚本,借助sourcemap文件解析源码。

文件unpack.mjs全文:
import { readFileSync, writeFileSync, mkdirSync } from “fs”;
import { dirname, join } from “path”;

const mapFile = join(import.meta.dirname, “cli.js.map”);
const outDir = join(import.meta.dirname, “unpacked”);

console.log(“Reading source map…”);
const map = JSON.parse(readFileSync(mapFile, “utf-8”));

const sources = map.sources || [];
const contents = map.sourcesContent || [];

console.log(`Found ${sources.length} source files.`);

let written = 0;
let skipped = 0;

for (let i = 0; i < sources.length; i++) {
const src = sources[i];
const content = contents[i];

if (content == null) {
skipped++;
continue;
}

const outPath = join(outDir, src.replace(/^\.\.\//g, “”));
mkdirSync(dirname(outPath), { recursive: true });
writeFileSync(outPath, content);
written++;
}

console.log(`Done! Wrote ${written} files to ${outDir}`);
if (skipped > 0) console.log(`Skipped ${skipped} files with no content.`);

第三步,执行node unpack.mjs命令,即可获取完整前端CLI工具源码。

命令行原文:node unpack.mjs

需注意,还原内容仅为前端交互部分,不包含核心模型代码。

通过以上三个步骤即可得到完整的claude code cli源码:

二、代码分析

1. 项目概览
@anthropic-ai/claude-code 是由 Anthropic 开发的一款交互式命令行(CLI)AI 助手。它旨在直接运行在终端中,通过自然语言指令帮助开发者理解代码库、编辑文件、运行终端命令以及管理 Git 工作流。

其核心特性包括:

1)代码库感知:能够读取和理解整个项目的结构和内容。

2)工具执行:可以安全地执行 Bash 命令、搜索文件、读取/写入内容。

3)交互式 UI:基于 ink(React 的终端渲染器)提供丰富的终端用户体验。

4)可扩展性:支持 Model Context Protocol (MCP) 和自定义工具。

2. 核心架构分析

2.1 入口与初始化 (main.tsx)

项目的入口点位于 src/main.tsx。它负责复杂的启动逻辑,包括:

1)环境检查:验证驱动环境(如 Bun 或 Node.js)及操作系统特性。

2)参数解析:使用 commander 处理 CLI 参数,支持多种模式(交互式 REPL、非交互式 -p 模式、SSH 远程模式等)。

3)配置与迁移:加载全局配置并运行必要的版本迁移逻辑。

4)预热(Prefetching):异步预取 Git 状态、用户上下文、工具设置等,以优化首屏渲染性能。

2.2 核心查询引擎 (QueryEngine.ts)

QueryEngine 是处理 AI 交互的核心类。它管理一个完整的对话生命周期(Session):

1)状态维护:维护对话历史 (mutableMessages)、文件状态缓存、Token 使用情况和成本追踪。

2)工具集成:将所有可用工具及其权限逻辑集成到查询循环中。

3)处理循环:
接收用户输入(通过 processUserInput 处理命令如 /slash)。
生成系统提示词(包含当前上下文、可用工具描述)。
调用底层的序列化查询函数(query),通过生成器模式逐步处理 LLM 的响应。
执行工具调用并在获得结果后反馈给模型。

2.3 工具系统 (Tool.ts)

项目采用高度模块化的工具化设计。每个工具(如 BashTool, FileReadTool, McpTool)都遵循 Tool 接口:

1)Schema 定义:使用 zod 定义输入参数,供模型理解如何调用。

2)执行逻辑 (call):具体的异步执行代码。

3)权限控制:通过 checkPermissions 和全局权限系统配合,确保危险操作(如写文件、删库)在执行前获得用户授权。

4)渲染逻辑:通过 React 组件(如 renderToolUseMessage)定义在终端中展示工具调用过程和结果的样式。

3. 技术栈亮点

3.1 终端用户界面 (TUI)

项目大量使用 ink 库,实现了接近 IDE 体验的终端界面。它支持:
1)语法高亮的 Markdown 渲染。
2)可交互的表格和动画加载器(Spinners)。
3)实时更新的进度条(如 BashProgress)。
4)丰富的键盘快捷键支持。

3.2 权限与安全性

安全性是 Claude Code 的核心。它实现了一套细粒度的权限模型:

1)默认不信任:敏感操作默认需用户手动确认(Y/N)。

2)路径限制:支持基于文件系统的沙箱化和路径白名单。

3)自动分析:部分版本包含针对 Bash 命令的安全分类器,尝试理解意图以减少不必要的询问。

3.3 MCP (Model Context Protocol) 整合

通过 MCPTool 和相关服务,项目可以无缝连接到外部 MCP 服务器。这扩展了 Claude 的能力边界,使其能够访问数据库、调用第三方 API 或使用特定语言的 LSP(Language Server Protocol)支持。

4. 关键目录结构分析

src/assistant/: 可能是针对更高级别指令(如 Kairos 模式)的处理逻辑。

src/components/: 全部的 TUI React 组件。

src/services/: 外部服务集成(API, MCP, Analytics, Telemetry)。

src/tools/: 具体的内置工具实现。

src/utils/: 庞大的工具函数库,涵盖 Git, 文件系统, 认证, 性能分析等。

src/state/: 基于 AppStateStore 的全局状态管理。

5. 总结

Claude Code 是一个工程化极高的 AI 二进制应用。它不仅展示了 LLM 在代码开发中的强大能力,更在“终端交互体验”和“AI 与本地环境安全协同”这两个具有挑战性的领域提供了卓越的范式。其源码展示了如何通过 React 范式管理复杂的命令行交互,以及如何利用高度抽象的工具系统构建一个具备强大自动修复和执行能力的 Agent 环境。