大模型应用
从 source map 还原被压缩的…
当你拿到一个包含 sourcesContent 的 .map 文件(如 npm 包误发布的 cli.js.map),想还原出可读的 TypeScript 源码并理解其 CLI/命令系统/MCP/终端 UI 架构时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 58/100 ×0.15
适用场景
从 source map 还原被压缩的 特定
解决思路
- 用脚本从 source map 还原源码:读取 .map 文件,JSON.parse 后遍历 sources 与 sourcesContent 数组,跳过 content 为 null 的项,把 sourcePath 去掉 webpack:/// 和 ./ 前缀做路径归一化,用 fs.mkdirSync(dirname, {recursive:true}) 建目录后写入文件,最后打印还原文件数。
- 若官方 npm 版本已被下架,可尝试从镜像缓存安装原包,例如:npm install -g https://mirrors.cloud.tencent.com/npm/@anthropic-ai/claude-code/-/claude-code-2.1.88.tgz。
- 按目录结构理解代码:entrypoints(CLI 启动与初始化)、commands(命令定义如 login/mcp/review/tasks)、components(Ink/React 终端 UI)、services(核心业务逻辑)、hooks(终端状态管理)、utils(认证/文件/进程辅助)、ink(自定义终端渲染基础设施)。
- 研究 CLI 入口引导模式:用 parseArgs 解析 process.argv,若有 args.command 则动态 loadCommand 并执行 handler.run(args),否则用 ink 的 render 渲染 React 的 App 组件进入交互式 REPL,并用 main().catch 兜底打印错误并 process.exit(1)。
- 研究命令加载系统:定义 CommandSource 为 builtin|skill|plugin|mcp,loadCommand 依次查找内置命令、MCP 注册命令、动态 skill 命令,找不到则抛 Unknown command 错误。
- 研究 Ink/React 终端 UI 组件写法:用 Box/Text/useInput 构建界面,useInput 处理回车发送、退格删除、其他字符追加,用 flexDirection="column"、flexGrow、overflowY 布局消息列表,流式时显示光标字符。
- 研究 MCP 集成:用 StdioTransport(command/args/env)连接 MCP server,创建 McpClient 并 connect,调用 listTools 发现工具并注册,callTool 转发调用,resolve 把 MCP 工具名映射为 CLI 命令。
- 研究认证工具:从 ~/.claude/credentials.json 读取凭据,写入时用 mode 0o600 仅属主可读写;getApiKey 优先取 ANTHROPIC_API_KEY 环境变量,其次读凭据文件,都没有则报错提示登录。
- 研究特性开关模式:定义 FeatureFlag 联合类型,用 RUNTIME_FLAGS 从环境变量(如 CLAUDE_FF_MCP_STREAMING==="1")解析布尔值,isEnabled 查询后在命令加载处按需 registerCommand。
- 研究终端状态管理 hook:useConversation 用 useState 维护 messages 与 isStreaming,用 useRef 持有 Anthropic 客户端,sendMessage 调用 messages.stream 并遍历 chunk,遇到 content_block_delta 的 text_delta 时累加文本并更新最后一条 assistant 消息,finally 中关闭流式状态。
- 参考已文档化的命令:claude login(OAuth/API key 认证)、claude mcp(管理 MCP 连接)、claude review(代码审查)、claude tasks(任务管理)、claude config(查看/编辑配置)。
- 尝试运行还原源码:git clone 仓库后手写 package.json(type: module,依赖 @anthropic-ai/sdk、ink、react、commander,devDeps 含 typescript、@types/react、@types/node),npm install,export ANTHROPIC_API_KEY,再用 npx tsc --noEmit 做类型检查。
- 排错:bun:bundle 宏报错时替换为运行时 flag 检查或改用 Bun 构建;缺 package.json 时依据源码 import 从 node_modules 反推重建;map 文件过大无法一次性解析时用 stream-json 流式解析;镜像链接失效时查 archive.org 或其他 npm 镜像;TS 路径别名未解析时在 tsconfig.json 的 paths 中按原 bundle 别名结构补齐。
- 注意法律边界:该仓库与 Anthropic 无关联,原始代码版权归 Anthropic,仅用于存档与研究,未经授权不得用于生产或商业产品。
适用边界 · 注意事项
- 不要将还原出的源码用于生产环境或商业产品,版权归原公司所有。
- 若没有 .map 文件或其中 sourcesContent 为空,则无法用此方法还原源码。
- 还原源码依赖 bun:bundle 等构建期宏,直接编译运行会遇到缺失宏的问题,需先做 stub 或改用 Bun。