4月1日(Claude code源码+Openclaw记忆系统改进)
Claude code的源码泄露怎么泄露的泄露的原因很简单当你用 JavaScript/TypeScript 开发一个 npm 包时构建工具通常会生成 source map 文件.map文件。这个文件的用途是把打包压缩后的代码映射回原始源码方便调试时定位问题。source map 文件里有一个sourcesContent字段直接包含了每一个原始源文件的完整内容正常情况下.map 文件不应该出现在发布到 npm 的生产包里。你需要在.npmignore里排除它们或者在构建配置里关闭 source map 生成Claude Code 使用 Bun 作为打包工具。Bun 的打包器默认生成 source map除非你显式关掉。这次泄露的直接原因据社区分析大概率是构建流水线里没有做好 .map 文件的清理发布时把一个 59.8 MB 的 source map 文件一起发到了 npm registry工具系统40 多个权限控制的工具Claude Code 的每一项能力都被封装成一个独立的工具模块放在tools/目录下。每个工具定义了自己的输入格式、权限模型和执行逻辑已公开的核心工具包括文件读写和编辑、Shell 执行支持沙箱、文件搜索、网页访问、Jupyter 笔记本编辑、子 Agent 调度、LSP 通信、MCP 资源访问等工具的权限系统分为四个模式default交互式逐次询问用户、auto通过 ML 分类器自动决策、bypass跳过检查、yolo拒绝所有。每个工具动作被分为低、中、高三个风险等级查询引擎46,000 行query/目录是整个代码库里最大的单一模块负责所有 LLM API 调用、流式传输、缓存和编排系统提示词采用模块化设计把提示词分成静态段可跨用户缓存和动态段每次会话独立生成。有一个函数叫DANGEROUS_uncachedSystemPromptSection()从命名就能看出来有人在这上面踩过坑Dream 记忆系统Claude 的「做梦」services/autoDream/下有一个叫 autoDream 的后台记忆整合引擎它的工作方式是这样的当三个条件同时满足的时候距上次执行超过 24 小时、至少经历了 5 次会话、成功获取了整合锁系统会启动一个后台子 Agent对记忆文件做一次整理。这个子 Agent 只有只读权限不能修改项目文件整理分四步先读取记忆目录和现有记忆文件然后从最近的日志和会话中提取新信息接着更新或合并记忆文件把相对日期转成绝对日期、删除过时信息最后做裁剪保持在 200 行以内源码里的提示词「你正在做一次梦对记忆文件做一次反思性的回顾。把你最近学到的东西整合成持久的、组织良好的记忆方便未来的会话快速定位」KAIROS 模式常驻后台的 Claudeassistant/目录下有一个叫 KAIROS 的模式外部版本里完全不存在从代码看KAIROS 是一个持续运行的后台助手。它不需要你主动输入会通过定时的 信号自主决定是否采取行动。它维护着一个只追加的每日日志文件记录观察、决策和操作这个模式有一个 15 秒 的阻塞预算限制任何可能打断用户工作流的主动操作如果执行时间超过 15 秒会被延后KAIROS 有三个普通 Claude Code 没有的专属工具SendUserFile给用户推送文件、PushNotification发推送通知、SubscribePR订阅 Pull Request 动态Coordinator 模式多 Agent 编排coordinator/目录实现了一个完整的多 Agent 编排系统。开启后Claude Code 会从单个 Agent 变成一个调度器同时管理多个工作 Agent 并行执行任务工作流程分四个阶段Research多个 Agent 并行调查代码库、Synthesis调度器汇总发现、制定方案、ImplementationAgent 按方案执行修改并提交、Verification验证修改是否生效调度器提示词里有一条规则「不要说根据你的发现去读实际的发现然后精确地说明该做什么」ULTRAPLAN远程规划一个把复杂规划任务卸载到远程云容器的模式。它会启动一个运行 Opus 4.6 的远程会话给它最多 30 分钟 思考时间。本地终端每 3 秒轮询一次结果同时有一个浏览器界面让你实时查看和审批规划方案claude-code/ ├── assistant/ # KAIROS 常驻助手模式 ├── bridge/ # IDE 桥接VS Code / JetBrains ├── buddy/ # 电子宠物系统 ├── commands/ # Slash 命令约 50 个 ├── components/ # React 终端渲染组件约 140 个 ├── coordinator/ # 多 Agent 编排 ├── memdir/ # 持久化记忆目录 ├── plugins/ # 插件系统 ├── query/ # 查询引擎46K 行最大模块 ├── services/ # 服务层含 autoDream 记忆整合 ├── skills/ # 用户自定义技能 ├── tools/ # 40 工具模块 ├── utils/ # 工具函数含 undercover.ts ├── voice/ # 语音输入 ├── main.tsx # 入口785KB ├── QueryEngine.ts # 查询引擎核心 └── Tool.ts # 工具基类29K 行OpenClaw记忆系统线性笔记到分层大脑痛点AI的金鱼记忆当我们养虾的时候都会有这样的经历昨天讨论的重要角色今天问起来他一脸茫然分散在十几个对话的知识点他无法形成关联每次都要从头解释背景浪费大量的token。这主要是我们的龙虾记忆系统出现了问题大多数AI助手的记忆方式是通过线性JSONL文件存储就是按时间顺序塞进一个抽屉没有分类没有索引也没有优先级解决方案分层记忆系统三层架构L0层完整原始记录 └─ 保留所有细节用于深度检索 L1层关键点提取 └─ 提取对话中的要点省70% token L2层结构化知识 └─ 转化为可复用的知识模块 L3层核心洞察 └─ 跨对话提炼的深层认知实际效果之前加载一次历史对话需要传递50,000 tokens现在智能组合 L3(30%) L2(40%) L1(30%)只需5,000 tokensToken节省90%核心组件6大模块1. 数据库层SQLite告别JSONL文件改用SQLite数据库对话树支持分支、合并像Git一样管理对话演进索引优化全文检索快10倍事务支持数据一致性有保障2.三级缓存L1缓存内存LRU算法最近使用的记忆 └─ 访问速度微秒级 L2缓存Redis可选分布式缓存 └─ 访问速度毫秒级 L3缓存SQLite持久化存储 └─ 访问速度秒级3. 异步I/O之前每条消息立即写入磁盘阻塞对话现在批量写入50条/批5秒定时刷新失败自动重试3次性能提升5倍4. 后台任务调度5个自动任务24小时运行任务频率功能记忆压缩每天3点L0→L1→L2→L3 自动分层衰减重算每小时根据访问频率调整记忆权重向量索引每5分钟更新语义检索索引缓存清理每小时清理过期缓存统计收集每天午夜生成使用报告5. 分支管理系统类似Git的对话版本控制# 创建新分支探索新思路 memory.branch(alternative-approach) # 合并分支整合多个视角 memory.merge(feature-branch) # 切换分支回到某个时刻 memory.checkout(version-2026-03-15)6. Obsidian同步模块每15分钟自动同步到Obsidian知识库C:\OpenClaw图书馆\OpenClaw-Memory\ ├── _系统概览.md # 系统状态报告 ├── 核心记忆/ # L3层核心洞察 ├── 对话树/ # 可视化对话分支 └── 知识图谱/ # 关联网络展示技术实现关键代码记忆分层算法async functioncompressMemory(conversationId) { // L0 → L1提取关键点 const l1 awaitextractKeyPoints(l0); // L1 → L2结构化知识 const l2 awaitstructureKnowledge(l1); // L2 → L3提炼核心洞察 const l3 awaitderiveInsights(l2); // 保存分层结果 awaitsaveLayers({ l1, l2, l3 }); }智能上下文组合function buildContext(query, limit 5000) { const l3Ratio 0.3; // 30% 核心洞察 const l2Ratio 0.4; // 40% 结构化知识 const l1Ratio 0.3; // 30% 关键点 const l3Tokens limit * l3Ratio; const l2Tokens limit * l2Ratio; const l1Tokens limit * l1Ratio; // 按比例组合各层记忆 returncombine({ l3: l3Tokens, l2: l2Tokens, l1: l1Tokens }); }异步批量写入class AsyncMemoryWriter { constructor() { this.buffer []; this.flushInterval 5000; // 5秒 this.batchSize 50; // 50条/批 } asyncwrite(message) { this.buffer.push(message); if (this.buffer.length this.batchSize) { awaitthis.flush(); } } asyncflush() { const batch this.buffer.splice(0); awaitretry(() db.insert(batch), { maxRetries: 3 }); } }部署指南1. 安装依赖cd C:\Users\Administrator\.openclaw npm install better-sqlite3 redis lru-cache2. 启动系统node start-advanced-memory-system.js3. 配置Obsidian同步在Obsidian中安装 Local REST API 插件配置端口 271244. 查看系统状态访问Obsidian中的 _系统概览.md 查看记忆总量L0/L1/L2/L3Token节省统计后台任务状态缓存命中率使用方法# 克隆项目 git clone https://github.com/your-repo/openclaw-advanced-memory # 安装依赖 npm install # 启动系统 node start-advanced-memory-system.js # 查看Obsidian同步 # 打开 C:\OpenClaw图书馆\OpenClaw-Memory\_系统概览.md性能对比指标之前JSONL现在SQLite分层检索速度2秒0.2秒10xToken消耗50,0005,00090%↓并发支持单线程多线程异步数据一致性无保障事务重试记忆分层无4层L0-L3后台优化无5个自动任务未来计划短期1个月向量数据库集成Pinecone/Qdrant多模态记忆支持图片、音频跨Agent记忆共享中期3个月记忆遗忘曲线模拟主动记忆推送基于上下文预测记忆图谱可视化长期6个月联邦学习跨用户知识提炼记忆市场用户交换记忆资产自我进化记忆AI自动优化分层策略核心洞察1. 记忆不是存储是计算传统方案把对话存起来需要时全文检索优化方案对话结束时就开始计算记忆提取关键点L1结构化知识L2提炼洞察L3结果存储的是经过计算的记忆不是原始数据2. Token优化是分层的误区直接截断历史对话正确做法L3层核心洞察永远保留L2层结构化知识优先保留L1层关键点按需保留L0层原始记录深度检索时才用结果在有限token内传递最大信息密度3. 记忆需要主动管理被动方案存进去就不动了主动方案衰减重算不用的记忆降权记忆压缩定期L0→L3缓存清理释放内存结果记忆系统会自我进化