2026/4/6 10:44:21
网站建设
项目流程
1、claude code源代码是如何泄漏的2026年3月31号Anthropic 在发布 anthropic-ai/claude-code-2.1.88 npm包时将cli.js.map map文件也打进了包里根据这个map文件可以把编译/压缩后的js还原成原始TypeScript代码。紧接着在x上有人就发现了这一事件恢复流程1下载claude-code2.1.88 npm包npm pack anthropic-ai/claude-code2.1.88 tar -xvzf anthropic-ai-claude-code-2.1.88.tgz cd package/ $ ll total 142488 drwxr-xr-x 10 320 4 5 00:11 ./ drwxr-xr-x 4 128 4 5 00:11 ../ -rw-r--r-- 1 596 10 26 1985 bun.lock -rwxr-xr-x 1 13047043 10 26 1985 cli.js* -rw-r--r-- 1 59766257 10 26 1985 cli.js.map -rw-r--r-- 1 147 10 26 1985 LICENSE.md -rw-r--r-- 1 1242 10 26 1985 package.json -rw-r--r-- 1 2037 10 26 1985 README.md -rw-r--r-- 1 116949 10 26 1985 sdk-tools.d.ts drwxr-xr-x 4 128 4 5 00:11 vendor/ #cli.js.map 这个文件便是整个时间的罪魁祸首2创建一个recover.jsimport fs from fs; import path from path; const map JSON.parse(fs.readFileSync(cli.js.map, utf-8)); if (!map.sources || !map.sourcesContent) { console.error(❌ 没有 sourcesContent无法直接还原); process.exit(1); } map.sources.forEach((file, i) { const content map.sourcesContent[i]; if (!content) return; const filePath path.join(recovered, file); // 创建目录 fs.mkdirSync(path.dirname(filePath), { recursive: true }); // 写文件 fs.writeFileSync(filePath, content); }); console.log(✅ 源码还原完成 - ./recovered);3运行recover.jsnode recover.js #执行成功后就会多了src目录包含了 4756 个源文件 drwxr-xr-x 13 416 4 5 00:14 ./ drwxr-xr-x 4 128 4 5 00:11 ../ -rw-r--r-- 1 596 10 26 1985 bun.lock -rwxr-xr-x 1 13047043 10 26 1985 cli.js* -rw-r--r-- 1 59766257 10 26 1985 cli.js.map -rw-r--r-- 1 147 10 26 1985 LICENSE.md drwxr-xr-x 194 6208 4 5 00:14 node_modules/ -rw-r--r-- 1 1242 10 26 1985 package.json -rw-r--r-- 1 2037 10 26 1985 README.md -rw-r--r-- 1 588 4 5 00:14 recover.js -rw-r--r-- 1 116949 10 26 1985 sdk-tools.d.ts drwxr-xr-x 55 1760 4 5 00:14 src/2、编译源代码、运行泄漏的源码包含完整的 TypeScript/TSX 源码树但缺少编译所需的构建配置。所以无法直接编译需要进行修改。https://github.com/lanjingling/open-claude-code这个本仓库提供了使源代码可编译和可打包的必要构建基础设施同时完整保留了原始源代码。可供学习二次开发。1编译# 克隆仓库 git clone https://github.com/lanjingling/open-claude-code.git cd open-claude-code # 安装依赖 npm install --ignore-scripts # 打包以下两种方法二选一 #【推荐】使用 Bun 打包单文件输出 → dist/cli.js bun run build # 或使用 TypeScript 编译 npm run build:tsc2运行# 测试版本输出 node dist/cli.js --version # 输出: open-claude-code-1.0.0 (based on Claude Code-2.1.88) # 交互模式需要 API Key ANTHROPIC_BASE_URLhttps://xxx/anthropic \ ANTHROPIC_API_KEYsk_xxx \ ANTHROPIC_MODELclaude-sonnet-4-20250514 \ DISABLE_TELEMETRY1 \ CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1 \ node dist/cli.js说明DISABLE_TELEMETRY和CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1主要用来避免远程遥测和非必要网络请求。可以在国内购买一个大模型api账号比如接口ai为了方便可将以上环境变量export到或项目(项目/.claude/setting.json)的配置文件 env 字段中和官方一致。例如{ env: { ANTHROPIC_AUTH_TOKEN: sk-xxx, ANTHROPIC_BASE_URL: https://xxx/anthropic, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }启动后界面如下这就是目前估值3800亿美金最牛ai coding公司的产品代码运行效果3、修改内容总结1新增构建脚本tsconfig.jsonTypeScript 编译配置无运行时影响build.tsBun 构建脚本无运行时影响2新增存根文件在src下建立了107个存根文件这些是 Anthropic 内部 Bun 构建时通过feature()标志进行死代码消除所删掉的模块的最小存根。空模块export {};~60无— 仅满足模块解析纯类型存根interface~30无— 无运行时效果运行时存根空函数~17实际无影响— 这些模块位于feature()标志守护的代码路径上在 external build 中始终为false永远不会被执行修改package.json添加了 70 个 npm 依赖和构建脚本原始 dependencies 为空所有依赖被打包新增依赖仅用于编译修改src/entrypoints/sdk/coreTypes.generated.ts追加了约 120 行类型定义 1 个函数因为原始生成文件在发布时被截断。补充的类型根据代码库中的使用方式推断。3关闭所有 Anthropic 内部功能KAIROS助手模式、DAEMON、BRIDGE_MODE、CHICAGO_MCP计算机使用、COORDINATOR_MODE、SSH_REMOTE、WORKFLOW_SCRIPTS 等90。与官方公开发布版行为一致因为公开版本的这些功能本来就是关闭的。