【免费下载链接】cli-continuesresume any AI coding session in another tool — Claude Code, Copilot, Gemini, Codex, Cursor项目地址https://gitcode.com/gh_mirrors/cl/cli-continues点击查看免费下载cli-continues运行后命令名为continues是一个开源的 AI 编程会话续接 CLI 工具它只读扫描 Claude Code、Codex、Copilot、Gemini CLI、Cursor 等 16 款 AI 编程工具的本地会话文件把上下文搬运到另一个工具继续干活。项目采用 TypeScript vitest 构建社区贡献的核心场景就是添加一个新的 AI 工具解析器parser。本文按照项目自身的 TDD测试驱动开发规范完整走一遍从写失败的测试到注册解析器、跑通全部转换路径的贡献流程帮你用最小代价提交一个合格的 PR 。 核心关键词速览cli-continues、AI 会话续接session resume、解析器parser、TDD 流程、测试夹具fixture、适配器注册表registry一、动手前 5 分钟了解 cli-continues 的解析器架构在写代码之前先花 5 分钟理解项目的数据流这是后面所有步骤的地图CLI → 注册表 (registry) → 会话索引 → 各工具解析器 (parsers) → Markdown 交接文档 → 续接/跨工具切换项目对添加新工具做了非常好的工程化约束关注点对应文件作用工具名单src/types/tool-names.tsTOOL_NAMES是唯一权威清单SessionSource类型自动派生解析器实现src/parsers/每个工具一个文件如 codex.ts官方推荐的最简参考实现适配器注册src/parsers/registry.ts统一的ToolAdapter接口 register()注册注册表自动接入 TUI、索引、续接逻辑测试夹具src/tests/fixtures/index.ts每个工具一个createXxxFixture()工厂函数主测试套件src/tests/unit-conversions.test.ts基于夹具覆盖所有工具间的转换路径无需真实会话文件两个必须记住的项目约定见 CLAUDE.mdESM-only所有本地导入必须带.js扩展名会话数据只读解析器绝不修改源工具的会话文件。二、环境准备一键拉起的开发环境项目要求Node.js 22OpenCode 和 Crush 的解析用到内置node:sqlite使用 pnpm 管理依赖git clone https://gitcode.com/gh_mirrors/cl/cli-continues cd cli-continues pnpm install日常开发只需要这几条命令命令用途pnpm test运行全部单元测试vitestpnpm run test:watch测试 watch 模式TDD 循环必备pnpm run dev用 tsx 直接跑源码无需构建pnpm run buildTypeScript 编译到dist/npx vitest run src/__tests__/unit-conversions.test.ts只跑某一个测试文件⚠️ 建议先跑一次pnpm test确认本机环境全部通过再开始改代码。三、TDD 核心纪律先写测试且夹具必须以真实 schema 为准CLAUDE.md 把 TDD 定死为项目纪律任何代码改动都从这里开始先写会失败的测试—— 无论是新解析器、新特性还是 bug 修复夹具数据必须基于真实会话文件—— 写 fixture 之前先去该工具的真实存储目录读一份真实会话文件核对字段名和数据结构拿不到真实数据就停下来问—— 请用户提供一个样本或指出存储目录严禁凭空想象 schema。这一点是新手最容易踩的坑看着网上文档猜字段名结果和真实格式对不上。四、完整流程为新工具添加解析器的 5 个步骤下面以新工具newtool为例按 TDD 顺序走完整个流程。第 1 步写失败的测试Red在动手写解析器之前先在 src/tests/unit-conversions.test.ts 所在套件中规划测试并在 src/tests/fixtures/index.ts 中创建夹具工厂createNewtoolFixture()用fs.mkdtempSync建一个匹配该工具真实存储布局的临时目录写入最小但真实的会话数据至少 2 条 user 消息 2 条 assistant 消息可参考 createClaudeFixture 的写法返回{ root, cleanup }结构方便测试结束后清理。此时运行pnpm test测试应该红的 —— 这正是 TDD 想要的状态。第 2 步把工具名加入权威清单在 src/types/tool-names.ts 的TOOL_NAMES数组末尾加上newtool。这一步很巧妙SessionSource类型是从TOOL_NAMES自动派生的加上名字后编译器会立刻把所有需要更新的位置暴露出来相当于给 TDD 上了第二道保险。第 3 步实现解析器src/parsers/newtool.ts新建解析器文件对外必须导出两个函数参考最简实现 codex.ts导出函数职责parseNewtoolSessions(): PromiseUnifiedSession[]扫描工具存储目录发现会话文件读取元数据id、cwd、repo、分支、时间戳、摘要按updatedAt降序返回extractNewtoolContext(session): PromiseSessionContext读取完整会话提取消息与工具活动调用generateHandoffMarkdown()生成交接文档现有解析器都遵循几条隐形规范照做即可导入共享工具cleanSummary、extractRepoFromCwd、homeDir来自 parser-helpers.tsJSONL 格式用流式读取readline避免整个文件进内存用 tool-summarizer.ts 的SummaryCollector.add()累计工具使用、追踪被修改的文件保证 16 个工具的 Tool Activity 板块格式一致recentMessages只保留最近约 10 条但必须保证至少含一条 user 消息解析失败的文件/会话静默跳过catch后 continue单个坏文件不能拖垮整个 CLI。第 4 步在注册表注册适配器在 src/parsers/registry.ts 中import两个函数并添加一段register({...})条目声明name、label、color、storagePath、binaryName、parseSessions、extractContext、nativeResumeArgs、crossToolArgs、resumeCommandDisplay字段清单见 ToolAdapter 接口。注册完成后什么都不用再改——快速续接子命令、来源配色、帮助文本、会话索引、续接逻辑全部由注册表自动接线没有 switch 语句和硬编码数组要维护。这里还有一道防漏网机制注册表末尾有完整性断言registry.ts#L942-L948。如果你在第 2 步加了名字却在第 4 步忘了注册程序在模块加载时会立即抛出Registry incomplete: missing adapter(s) for ...错误信息直指漏掉的工具名。第 5 步补全夹具与全部转换路径Green回到测试侧完成三件事在 fixtures/index.ts 补上第 1 步规划的createNewtoolFixture()此时它读取的临时数据应能被真实解析器解析在 unit-conversions.test.ts 中让newtool既作为源也作为目标覆盖全部 N-1 条新转换路径两个方向跑pnpm run test:watch看着测试从红变绿 ✅。主套件会校验每条转换路径产出的交接 Markdown结构完整Session Overview、Recent Conversation 等、至少含一条 user 和一条 assistant 消息、会话 ID 跨源唯一、内容注入安全等。新工具只要数据真实、解析正确这些断言会自动为它服务。五、提交前检查清单 PR 合并的最低测试要求出自 CLAUDE.md新解析器fixture 工厂 低层解析测试 双向全部 N-1 转换路径新增工具函数独立测试文件覆盖边界情况bug 修复先补能复现该 bug 的回归测试再修复。本地最终验证顺序pnpm lint # biome 代码检查 pnpm test # 全量单测 pnpm run dev # 手动跑一下 CLI确认新工具出现在列表里六、常见文件速查表你要做的事打开这个文件理解项目架构与 TDD 规范CLAUDE.md查看/添加工具名src/types/tool-names.ts照抄最简解析器src/parsers/codex.ts注册适配器src/parsers/registry.ts复用工具活动摘要src/utils/tool-summarizer.ts写测试夹具src/tests/fixtures/index.ts跑转换路径测试src/tests/unit-conversions.test.ts七、写在最后cli-continues 的贡献体验被设计得很友好TOOL_NAMES派生类型帮你圈定改动范围注册表完整性断言帮你兜底fixture 测试让新解析器不需要安装目标工具就能被验证。只要记住 TDD 三句话——先写失败测试、夹具忠于真实 schema、双向转换路径全覆盖——你的第一个解析器 PR 就会非常扎实。去 src/parsers/ 目录看看下一个 AI 工具可能就等你来接 赞分享【免费下载链接】cli-continuesresume any AI coding session in another tool — Claude Code, Copilot, Gemini, Codex, Cursor项目地址https://gitcode.com/gh_mirrors/cl/cli-continues点击查看免费下载相关推荐从零搭建 SoundCleod 开发环境Electron 应用调试完整教程从零搭建 SoundCleod 开发环境Electron 应用调试完整教程 SoundCleod 是一款基于 Electron 的开源桌面应用它把 Soun桌面应用音视频LaMa图像修复系统5个实战技巧打造高效AI修复解决方案LaMa图像修复系统5个实战技巧打造高效AI修复解决方案 LaMaLarge Mask Inpainting作为当前最先进的傅里叶卷积图像修复系统通过创人工智能计算机视觉深度学习图像处理eSpeak NG贡献者终极指南从Bug修复到新语言添加完整流程eSpeak NG贡献者终极指南从Bug修复到新语言添加完整流程 eSpeak NG是一个开源的文本到语音合成器支持100多种语言和口音适用于Linux、语音音频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考