Skip to content

OrcaWhisper/Claude-Code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Claude-Code

这不是 Anthropic 官方仓库。

这个仓库用于归档和阅读从公开 npm 发布包中可提取出的 Claude Code TypeScript 源码。

Claude-Code 收录的是 Anthropic Claude Code CLI 工具的 TypeScript 源码提取结果。Claude Code 是 Anthropic 官方推出的命令行编程助手,可直接在终端里与 Claude 交互,完成编辑文件、执行命令、搜索代码库、处理 Git 工作流等软件工程任务。

这里展示的内容并不是来自官方开源仓库,而是从官方发布到 npm 的安装包中附带的 source map 里还原出来的源码。

源码是怎么泄露出来的

2026 年 3 月 31 日,开发者 Chaofan Shou(@Fried_rice) 公开提到,Claude Code 的源码可以直接通过 npm 包中的 source map 还原出来。

问题的关键在于,官方发布的 @anthropic-ai/claude-code 包中包含了 cli.js.map 文件。这个 source map 不只是调试辅助文件,它的 sourcesContent 字段里还内嵌了打包前的原始源码内容。也就是说,只要拿到这个 map 文件,就可以把构建前的 .ts / .tsx 文件批量恢复出来。

因此,这次事件更像是一次发布流程上的源码暴露,而不是传统意义上的代码仓库被攻破。源码并非通过入侵获得,而是随着 npm 发布产物一起被公开分发了出去,最终导致 Claude Code 的主要 TypeScript 源码可以被低成本提取和重建。

如何自行提取

直接克隆这个仓库

git clone git@github.com:OrcaWhisper/Claude-Code.git
cd Claude-Code

或者从 npm 包中自行提取

  1. 下载并解压 npm 包:
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
  1. 创建一个 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.`);
  1. 运行提取脚本:
node unpack.mjs

提取后的源码会出现在 unpacked/ 目录中。

仓库结构

当前这份整理后的源码树,不只是一个简单的 CLI 入口文件,而是一套相当完整的终端 agent 应用。按现有仓库内容,大致可以这样理解:

.
├── README.md                  # 项目说明
├── package.json               # 包信息、依赖与启动脚本
├── bun.lock                   # Bun 锁文件
├── preview.png                # 项目预览图
├── src/                       # 还原出的主要 TypeScript 源码
│   ├── bootstrap-entry.ts     # 最外层启动入口,处理版本号和若干 fast path
│   ├── main.tsx               # 主程序初始化入口
│   ├── query.ts               # 模型对话与工具调用的核心循环
│   ├── commands/              # Slash 命令实现
│   ├── tools/                 # 模型可调用工具实现
│   ├── components/            # Ink / React 终端 UI 组件
│   ├── hooks/                 # 各类 React Hooks 与状态逻辑
│   ├── services/              # 核心服务层,如 MCP、LSP、提示、分析、同步等
│   ├── state/                 # 全局状态与 store
│   ├── tasks/                 # 后台任务、子代理、工作流相关逻辑
│   ├── bridge/                # Remote control / bridge 能力
│   ├── remote/                # 远程会话与连接管理
│   ├── commands/              # 用户输入的命令体系
│   ├── skills/                # 技能系统与内置 skill
│   ├── plugins/               # 内置插件与插件接入逻辑
│   ├── context/               # 上下文与 provider
│   ├── constants/             # 常量、文案、限制与配置项
│   ├── types/                 # 类型定义
│   ├── utils/                 # 各种底层工具函数
│   ├── ink/                   # 终端 UI 渲染框架适配层
│   ├── assistant/             # assistant 模式相关逻辑
│   ├── coordinator/           # 多 agent / 协调器模式
│   ├── server/                # 本地服务与 direct connect 相关代码
│   ├── ssh/                   # SSH 会话支持
│   ├── vim/                   # Vim 风格输入和动作支持
│   └── ...
└── vendor/                    # 部分原生能力或外部源码目录

这份源码里最值得关注的部分

如果你是第一次阅读 Claude Code 的实现,建议优先关注这几块:

  1. src/bootstrap-entry.ts 看启动链路和 fast path 分流。

  2. src/main.tsx 看 CLI 初始化、命令装配、权限和全局配置是如何接起来的。

  3. src/commands.ts 看所有 slash 命令是如何聚合和加载的。

  4. src/tools.ts 看模型真正能调用哪些工具,例如 Bash、读写文件、搜索、MCP、任务控制等。

  5. src/query.ts 看 agent loop 的核心逻辑,包括消息拼接、工具调用、compact、继续执行等。

  6. src/screens/REPL.tsx 看终端交互 UI 主界面是怎么组织的。

免责声明

这个仓库中的代码知识产权归 Anthropic 所有。

Claude-Code 仅作为学习、研究与技术参考用途的整理归档,不代表 Anthropic 官方立场,也未获得 Anthropic 的认可、授权或支持。关于源码使用限制,请以对应 npm 包的官方许可条款为准:

https://www.npmjs.com/package/@anthropic-ai/claude-code/v/2.1.88

About

Claude Code source archive reconstructed from the published npm source map.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages