首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >前些日,Claude Code开源了!51万行代码,全网狂欢

前些日,Claude Code开源了!51万行代码,全网狂欢

作者头像
jeffery_jcm
发布2026-06-26 11:11:08
发布2026-06-26 11:11:08
1420
举报

背景2026年3月31日, Claude Code源代码通过npm注册表中的一个map文件惨遭泄露,全部在线裸奔。

Claude Code代码泄漏:

npm包未加密:

避免侵权:博主先是用python实现一版(clean-room rewrite)又用rust复刻了claude code github 2小时突破5w stared

这次代码泄露的规模非常庞大:超1,900个文件,总计51.2万行TypeScript代码被开源

版本一:基于Python版本分析:

这是一个将 Anthropic Claude Code(TypeScript)重写为 Python 的移植工作空间。项目背景是 2026 年 3 月 31 日 Claude Code 源代码泄露事件后,作者 Sigrid Jin 使用 oh-my-codex (OmX) 工具链驱动,在数小时内完成了核心架构的 Python 清净室重写

指标

数据

Python 文件数

54

总代码行数

~1,162 行

子包数量

31 个

镜像 Command 条目

207 个

镜像 Tool 条目

184 个

原始 TS 文件数

1,902 个

测试文件

1 个 (10 个测试用例)

架构总览

1. 数据模型层 —

models.py 定义了三个核心数据类:

数据类

用途

特性

Subsystem

表示一个顶层子系统/模块

frozen=True,包含 name/path/file_count/notes

PortingModule

表示一个待移植的命令或工具模块

frozen=True,含 status 默认为 'planned'

PortingBacklog

移植待办清单

可变,聚合多个 PortingModule

2. CLI 入口 —

main.py 提供 8 个子命令:

代码语言:javascript
复制
渲染完整的 Markdown 移植摘要

3. 命令 & 工具清单 — commands.py / tools.py

两个模块几乎是镜像对称的,结构完全一致:

代码语言:javascript
复制
# 共同模式:
SNAPSHOT_PATH → load_*_snapshot() → PORTED_* → build_*_backlog()
                                              → find_*() / get_*()
                                              → render_*_index()
  • reference_data/ 下的 JSON 快照文件加载
  • 使用 @lru_cache(maxsize=1) 避免重复 I/O
  • 支持按名称模糊搜索和精确查找

4. 工作空间清单 — port_manifest.py

动态扫描 src/ 目录结构:

  • 使用 Path.rglob('*.py') 递归查找所有 Python 文件
  • Counter 统计各顶层模块的文件数
  • 为核心模块提供人类可读的注释描述

5. 对等审计 — parity_audit.py

这是项目中最复杂的模块(139 行),核心功能:

  • 维护 TS → Python 的文件名映射表(ARCHIVE_ROOT_FILES,17 条)
  • 维护 TS → Python 的目录映射表(ARCHIVE_DIR_MAPPINGS,30 条)
  • 计算覆盖率指标:根文件覆盖、目录覆盖、文件总数比、命令/工具条目比
  • 支持有/无本地归档两种模式

6. 提示路由 — runtime.py

实现了一个简单的基于关键词匹配的路由引擎 PortRuntime

  • 将 prompt 分词后对每个 command/tool 计算匹配分数
  • 确保结果中至少各包含一个 command 和 tool 的代表
  • 按分数降序排列返回

7. 子包 Placeholder(30 个子包)

每个子包(如 assistant/, bridge/, utils/ 等)都只包含一个 __init__.py,模式完全一致:

  • reference_data/subsystems/*.json 加载元数据
  • 暴露 ARCHIVE_NAME, MODULE_COUNT, SAMPLE_FILES, PORTING_NOTE
  • 作为原始 TS 子系统的 Python 占位符

代码质量评估

✅ 优点

代码语言:javascript
复制
全面使用 from __future__ import annotations,所有函数签名都有类型提示

⚠️ 需要改进的地方

问题

说明

严重度

代码重复

commands.py 和 tools.py 几乎完全相同(~95% 重复),应抽象为基类或泛型工厂

🟡 中

30 个 placeholder 子包

每个 __init__.py 的代码模式完全相同,应使用工厂函数或元类自动生成

🟡 中

搜索算法简单

find_commands/find_tools 仅用 in 做子串匹配,无权重、无模糊匹配

🟢 低

缺乏异常处理

JSON 文件加载无 try/except,若文件损坏会直接崩溃

🟡 中

测试覆盖不足

仅 1 个测试文件 10 个用例,缺少单元测试(如 runtime.py 的路由逻辑未测试)

🟠 较高

无依赖管理

缺少 pyproject.toml / requirements.txt / setup.cfg

🟡 中

无日志系统

所有输出直接 print(),无 logging 模块

🟢 低

Claude Code 上下文窗口溢出处理机制 (Python版):

一、总体防线架构

Claude Code 对上下文溢出采用五层纵深防御策略,从"预防"到"恢复"逐层降级处理:

二、Layer 1:预防层 — 硬限制

constants/apiLimits.ts

在发送请求前,对消息列表进行预计算,确保不会超出模型上下文窗口。

推测包含的常量:

代码语言:javascript
复制
export const MAX_TOKENS_BEFORE_COMPACT = 180_000  // ~90% of 200k window
export const CONTEXT_WARNING_THRESHOLD  = 0.8     // 80% 时触发警告
export const OUTPUT_TOKEN_BUDGET        = 8_192    // 单次最大输出 token
export const MAX_CONTEXT_WINDOW         = 200_000  // claude-3.7 最大上下文

constants/toolLimits.ts

工具调用结果的输出上限,防止单个工具响应撑爆上下文:

代码语言:javascript
复制
输出截断至 ~100KB

三、Layer 2:监控层 — 实时感知

components/ContextVisualization.tsx

在 REPL 交互界面实时显示上下文用量的可视化进度条,用户可直观看到:

  • 已使用 token 数 / 总窗口大小
  • 当前轮次消耗占比
  • 预计还能进行多少轮对话

hooks/notifs/useRateLimitWarningNotification.tsx

当上下文使用量接近阈值时,弹出警告通知并建议用户:

  • 运行 /compact 压缩对话
  • 开始新会话
  • 清理不必要的上下文(commands/clear/

Token 追踪链路

代码语言:javascript
复制
API 响应的 usage 字段
  → services/api/emptyUsage.ts (usage 数据结构)
  → costHook.ts (钩子触发)
  → cost_tracker.py / CostTracker (累计记录)
  → commands/cost/cost.ts (用户查询 /cost)
  → commands/extra-usage/ (扩展用量展示)
  → commands/usage/ (整体用量面板)

四、Layer 3:主动压缩层 — 核心机制

这是最关键的一层。Claude Code 的压缩机制有两种触发方式

4.1 用户手动触发:/compact 命令

代码语言:javascript
复制
commands/compact/compact.ts  ← 主逻辑
commands/compact/index.ts    ← 命令注册入口
components/CompactSummary.tsx ← 压缩完成后的 UI 展示

Claude Code 核心查询时序图

关键组件说明:

代码语言:javascript
复制
进程入口,负责初始化环境、解析 CLI 参数并启动 TUI。

五、Layer 4:记忆持久化层 — 跨轮次保留

压缩丢失的信息通过记忆系统异步持久化,需要时再召回:

SessionMemory 工作原理

代码语言:javascript
复制
核心:管理本次会话的记忆存取

六、Layer 5:工具层截断 — 防止单次爆炸

代码语言:javascript
复制
// 推测内容
export const MAX_LINES = 2000
export const MAX_FILE_SIZE_BYTES = 500_000
export const WARN_LINES_THRESHOLD = 500

当文件超出限制时:

  • 只读取前 N 行
  • 提示用户使用 line_range 参数指定范围
  • 在输出末尾附加截断提示

utils/CircularBuffer.ts

用于 BashTool 的命令输出流

代码语言:javascript
复制
// 推测实现
class CircularBuffer {
  private buf: string[] = []
  private maxLines: number

  push(line: string) {
    if (this.buf.length >= this.maxLines) {
      this.buf.shift()  // 循环覆盖,只保留最新的 N 行
    }
    this.buf.push(line)
  }

  toOutput(): string {
    return this.buf.join('\n')
  }
}

七、完整数据流:从溢出到恢复

八、与主流框架的设计对比

方案

Claude Code

LangChain

OpenAI Assistants

主策略

/compact 主动压缩(AI 生成摘要)

滑动窗口裁剪 / MapReduce

Threads 自动管理

用户可见

✅ 完全可见,有 UI 展示

❌ 透明裁剪

❌ 内部管理

信息保留

高(AI 摘要 + memdir 持久化)

低(直接丢弃旧消息)

中(向量检索)

多 Agent

Agent 结果只传摘要,不传历史

通常共享上下文

独立 Thread

工具输出

多层截断(limits.ts + CircularBuffer)

通常无特殊处理

有限制

自动触发

✅ analyzeContext.ts 自动检测

需手动配置

✅ 自动

九、关键设计原则总结

Claude Code 的上下文管理核心思想是:"压缩而非截断"(Compact, not Truncate)AI 生成摘要优于机械截断

  • /compact 让 Claude 自己来总结对话历史,比直接删除消息保留更多语义信息用户知情权
  • 通过 ContextVisualization 和 CompactSummary 让用户始终知道上下文状态信息不丢失
  • 原始历史通过 SessionMemory + memdir 持久化,必要时可召回多层防线
  • 从 API 限制、工具截断、实时监控到主动压缩,层层保护Agent 隔离
  • 子 Agent 只返回摘要,天然防止多 Agent 协作时的上下文爆炸

这套机制使 Claude Code 能在单次会话中处理大规模代码库重构等超长任务,是其核心竞争优势之一。

下期详细介绍Rust版本Claude Code实现和源码解析. 谢谢🙏

下下期详细介绍基于Harness工程下的Claude Code架构设计!谢谢

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AGI炼丹房 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4. 工作空间清单 — port_manifest.py
  • 5. 对等审计 — parity_audit.py
  • 6. 提示路由 — runtime.py
  • 7. 子包 Placeholder(30 个子包)
  • 代码质量评估
    • ✅ 优点
    • ⚠️ 需要改进的地方
    • constants/toolLimits.ts
    • components/ContextVisualization.tsx
    • hooks/notifs/useRateLimitWarningNotification.tsx
    • Token 追踪链路
    • 4.1 用户手动触发:/compact 命令
    • SessionMemory 工作原理
    • utils/CircularBuffer.ts
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档