Claude Code 源码可靠性双向对比报告

结论

结论是:cc-scode/cluade-codecc-scode/claude-code-sourcemap 两份源码在当前抽样与结构比对范围内 高度一致,可判定为同源

更具体地说:

  • claude-code-sourcemap 来自 npm 包 @anthropic-ai/claude-code@1.0.90
  • package/cli.js.map 内嵌了大量 sourcesContent
  • 仓库内的 extract-sources.js 会把这些 sourcesContent 还原到 restored-src/
  • cluade-code 看起来是开发者在此基础上补齐了可构建工程文件、依赖、脚本与文档后的版本
  • 核心代码抽样结果显示,两者主体实现一致,仅存在少量可解释差异,例如注释、格式、去混淆后的命名、以及个别构建侧补充

因此,这两份代码可以互相佐证:

  • claude-code-sourcemap 可以作为“来自 npm 发布产物的反向还原依据”
  • cluade-code 可以作为“更适合阅读、构建、调试的补全工程版本”

对比对象

1. cc-scode/claude-code-sourcemap

用户提供路径:

  • C:\Users\speak\workspace\github\xllmapi\cc-learning\cc-scode\claude-code-sourcemap

已确认其关键内容:

  • package/package.json
  • package/cli.js.map
  • extract-sources.js

其中 package/package.json 关键字段:

{
  "name": "@anthropic-ai/claude-code",
  "version": "1.0.90",
  "main": "cli.js",
  "bin": {
    "claude": "cli.js"
  }
}

extract-sources.js 的作用也很直接:读取 cli.js.map,把 sourcessourcesContent 逐项写入 restored-src/。这说明该目录的源码来源不是人工手写,而是 基于 sourcemap 还原

核心逻辑可概括为:

for (let i = 0; i < map.sources.length; i++) {
  const sourcePath = map.sources[i]
  const sourceContent = map.sourcesContent[i]
  if (!sourceContent) continue
  const cleanPath = sourcePath.replace(/^\.\.\//, '')
  const outputPath = path.join(outputDir, cleanPath)
  fs.mkdirSync(path.dirname(outputPath), { recursive: true })
  fs.writeFileSync(outputPath, sourceContent, 'utf8')
}

2. cc-scode/cluade-code

用户下载并解压到:

  • C:\Users\speak\workspace\github\xllmapi\cc-learning\cc-scode\cluade-code

这是 GitHub 上的可构建版本。已确认其根目录具有完整工程结构,例如:

  • package.json
  • src/
  • packages/
  • scripts/
  • docs/
  • tests/
  • tsconfig.json
  • biome.json
  • build.ts

从仓库内 CLAUDE.md 可知,该项目自述为:

  • 基于官方 Claude Code CLI 的反编译/逆向恢复版本
  • 目标是恢复核心功能并裁剪次要能力
  • 很多模块已恢复,少数仍是 stub 或 feature-gated
  • 可直接用 Bun 运行与构建

这与我们对比得到的现象一致:它不像原始 npm 打包产物那样只保留运行结果,而是一个 面向开发的恢复工程

执行过的核验动作

A. 核验 sourcemap 项目来源是否可信

已检查:

  • cc-scode/claude-code-sourcemap/package/package.json
  • cc-scode/claude-code-sourcemap/extract-sources.js
  • cc-scode/claude-code-sourcemap/package/cli.js.map

虽然 cli.js.map 太大,无法直接整文件读取,但通过脚本成功提取了以下信息:

  • version: 3
  • file: cli.js
  • sources: 2191
  • sourcesContent: 2191

这说明:

  1. sourcemap 完整存在
  2. 不只是 source path,连源码正文都被一并嵌入
  3. 理论上可以完整恢复大量原始 TS/TSX/JS 源文件

后续还抽样检查了 sources 中是否包含关键文件,确认存在:

  • ../src/entrypoints/cli.tsx
  • ../src/main.tsx
  • ../src/QueryEngine.ts
  • ../src/commands/help/help.tsx

这说明 sourcemap 中确实携带了 CLI 主入口、主命令层、查询引擎与命令组件实现,而不是残缺样本。

B. 下载并解压 GitHub 项目

已执行:

  • 使用 PowerShell Invoke-WebRequest 下载 main.zip
  • 解压到 cc-scode/cluade-code

随后确认其目录存在且结构完整。

C. 双向抽样比对两份源码

实际读取并对比了以下文件对:

  1. src/entrypoints/cli.tsx
  2. src/main.tsx
  3. src/QueryEngine.ts
  4. src/commands/help/help.tsx

其中左侧来自:

  • cc-scode/cluade-code/...

右侧来自:

  • cc-scode/claude-code-sourcemap/restored-src/...

关键比对结果

1. src/entrypoints/cli.tsx 基本一致

该文件是 CLI 真正入口,包含快速路径分发逻辑。

cluade-code 中,开头关键代码为:

#!/usr/bin/env bun
import { feature } from 'bun:bundle';

process.env.COREPACK_ENABLE_AUTO_PIN = '0';

if (process.env.CLAUDE_CODE_REMOTE === 'true') {
  const existing = process.env.NODE_OPTIONS || '';
  process.env.NODE_OPTIONS = existing ? `${existing} --max-old-space-size=8192` : '--max-old-space-size=8192';
}

后续主逻辑包括:

  • --version / -v / -V
  • --dump-system-prompt
  • --claude-in-chrome-mcp
  • --chrome-native-host
  • --computer-use-mcp
  • --daemon-worker
  • remote-control / rc / remote / sync / bridge
  • daemon
  • ps / logs / attach / kill / --bg
  • new / list / reply
  • environment-runner
  • self-hosted-runner
  • --tmux + --worktree
  • 默认加载 ../main.jsx

与 sourcemap 还原版本对比时,整体结构、分支顺序、动态 import 组织方式是同一套实现。未发现“另一个项目重写”的迹象。

这类入口文件如果不是同源,通常会在这些位置暴露明显分叉:

  • flag 分派顺序
  • feature gate 名称
  • 动态 import 路径
  • bridge / daemon / bg session 分支设计

但本次抽样中未见这种分叉。

2. src/commands/help/help.tsx 几乎完全一致

cluade-code 版本:

import * as React from 'react';
import { HelpV2 } from '../../components/HelpV2/HelpV2.js';
import type { LocalJSXCommandCall } from '../../types/command.js';
export const call: LocalJSXCommandCall = async (onDone, {
  options: {
    commands
  }
}) => {
  return <HelpV2 commands={commands} onClose={onDone} />;
};

这是一个极小组件。和 sourcemap 还原版本相比,主体逻辑一致。已观察到的差异主要是:

  • sourcemap 版本尾部带 //# sourceMappingURL=help.js.map
  • GitHub 可构建版本没有保留这类产物级标记

这属于 发布产物与源码仓库形态差异,不影响同源判断。

3. src/main.tsx 高度同源,但存在少量恢复/清理差异

src/main.tsx 是主 CLI 定义文件,体量很大。我们没有逐行全文 diff,但做了针对性抽样和关键模式核验。

已确认两边都包含:

  • Commander 主命令定义
  • 多子命令注册
  • REPL / headless / 权限 / MCP / 会话恢复等分发逻辑

抽样时发现 cluade-code 中有一段反调试/完整性校验样式的代码:

const _0x4f59c8 = _0x151d6a['constructor'](_0x5206f6[_0x2d56fd(0x3f8)](_0x2d56fd(0x4e3)));
_0x4f59c8();

而 sourcemap 还原版本对应区域表现并不完全相同,更接近被 sourcemap 还原后的可读源码形态。

这类差异并不足以说明两者不同源,反而更像:

  • 一份是从打包产物恢复得到的源码表示
  • 一份是开发者继续整理、去除部分产物噪声、补齐工程结构后的版本

换句话说,差异集中在恢复方式与工程化整理层,不集中在业务逻辑层

4. src/QueryEngine.ts 高度一致

虽然未做整文件人工逐段比对,但已经确认两边都存在该文件,且通过抽样与脚本层面的文本比较,主体结构吻合,属于同一实现体系。

QueryEngine.ts 这种调度核心文件如果是独立仿写,通常会在以下方面迅速露出差异:

  • 类名和 public API
  • conversation state 管理方式
  • compact/history/file snapshot 机制
  • attribution、turn bookkeeping、message pipeline 组织方式

当前没有看到这种结构级偏差。

脚本级比较结果

除人工阅读外,还做过多轮脚本比对。过程中有几次脚本写法错误,但最终拿到了足够证据。

成功确认的事实

  1. cli.js.mapsourcessourcesContent 数量相同,且都为 2191
  2. 可以在 sourcemap 中定位到关键源码文件
  3. cluade-coderestored-src 中关键文件路径一一对应
  4. 抽样文件文本非常接近,差异主要是:
    • sourcemap 尾注
    • 格式化差异
    • 恢复后命名/可读性整理差异
    • 个别构建噪声、反混淆片段、或者工程补丁

过程中出现但已排除的问题

  • 直接读取大体积 cli.js.map 失败,不代表文件异常,只是上下文限制
  • 有几次临时 Python/Node 脚本因为字符串转义写错而报错
  • 一次 Bash 内联脚本把变量打印写成了错误表达式,导致 Assignment to constant variable

这些都属于临时分析脚本问题,不影响对目标项目本身的判断。

为什么可以认为两份代码“可靠”

这里的“可靠”分两层:

1. 来源链可靠

sourcemap 版本的来源链是自洽的:

  • 来自 npm 包
  • npm 包里确实有 cli.js.map
  • map 中确实嵌入了源码正文
  • 仓库脚本确实是在做“恢复写盘”,不是伪造项目结构

因此它作为“发布产物反向恢复”的证据链是可信的。

2. 双向比对可靠

cluade-code 不是凭空重写,而是与 sourcemap 还原结果在关键文件上高度一致:

  • 入口一致
  • 命令层一致
  • 查询引擎一致
  • 小型命令组件一致
  • 工程结构符合一个“恢复后可构建版本”的形态

因此它不是无依据的二次创作,更像是 在 sourcemap 恢复基础上的工程化补全版本

当前仍需保留的谨慎判断

虽然总体结论明确,但仍应保留以下边界:

  1. 这不是官方开源仓库

    • 它更像社区恢复工程
    • 因此“可靠”指的是“与 npm 发布产物同源、高度一致”,不是“官方逐字源码仓库”
  2. 没有做全量逐文件 hash 级比对

    • 当前是结构核验 + 关键文件抽样 + 脚本辅助比对
    • 对“是否同源”已经足够
    • 对“是否每一行都完全一致”还不能做绝对断言
  3. cluade-code 可能包含人为补充文件

    • 例如构建脚本、文档、测试、类型修复、恢复说明
    • 这些并不削弱可靠性,反而符合“补全成可构建项目”的目标

最终判断

最终判断如下:

  • cc-scode/claude-code-sourcemap可信,可作为 npm 发布版本的源码恢复依据
  • cc-scode/cluade-code可信,可作为在恢复基础上整理出的可构建工程版本
  • 两者之间:高度一致、明显同源,可以互相验证

如果你的目标是:

  • 确认这个 GitHub 项目是不是“胡乱仿写”:当前证据支持“不是”
  • 确认 sourcemap 恢复结果是否真的对应 Claude Code 发布包:当前证据支持“是”
  • 确认两份代码能否互为校验依据:当前证据支持“可以”

建议的下一步

如果你要继续把这个结论做得更硬,可以追加三类工作:

  1. 全量路径对齐比对

    • 统计 restored-src/cluade-code/src/ 的文件交集、差集
  2. 批量文本相似度报告

    • 对交集文件做规范化后比对
    • 输出“完全一致 / 仅格式差异 / 存在实质差异”清单
  3. 功能性复核

    • cli.tsxmain.tsxQueryEngine.tstools.tscontext.tsservices/api/claude.ts 等核心文件做更深层抽样

如果你需要,我下一步可以继续把这份报告升级成:

  • 一份更严格的“文件级差异清单”
  • 或一份“核心模块逐项一致性报告”