
参与 CodeBurn 开源贡献从环境搭建到新增 Provider 的完整贡献指南【免费下载链接】codeburnFree, local tool to track AI coding token usage and cost across 37 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, and task. npx codeburn项目地址: https://gitcode.com/gh_mirrors/co/codeburnCodeBurn 是一个免费、本地运行的 AI 编码 Token 用量与成本追踪工具覆盖 Claude Code、Cursor、Codex、Gemini 等 37 款工具与 Agent支持按模型、项目和任务维度统计详见 README.md。本文基于仓库根目录的 CONTRIBUTING.md 编写结合 package.json、.github/workflows 下的 CI 工作流与 docs/architecture.md 等源码级材料完整梳理贡献者从环境准备、代码规范、测试要求到提交流程尤其是新增 Provider这一最高门槛贡献类型的全过程。读完本文你将掌握如何为 CodeBurn 提交一个可合并、经得起全量测试与 CI 检查的 PR并理解项目针对AI 生成代码解析准确性设计的一整套自动化护栏。前置条件与开发环境搭建版本要求CONTRIBUTING.md 明确列出了硬性环境门槛均可在仓库中核实Node.js 22.20 或更新版本根目录 package.json 的engines.node声明为22.13.0贡献指南在此基础上进一步要求 22.20以保证tsx、vitest等现代工具链行为一致npm 10 或更新版本随新版 Node 一同分发无需单独安装操作系统macOS 或 Linux 可获得全部 Provider 的完整支持Windows 对大多数 Provider 可用但 Cursor / Antigravity 的开发在 macOS 上更顺畅可选工具链若改动涉及 macOS 菜单栏应用mac/Swift 实现需要 Swift 6 工具链若涉及 GNOME 扩展gnome/JavaScript 实现需要 GNOME 45 或更新版本。安装与开发模式git clone https://github.com/getagentseal/codeburn cd codeburn npm install仓库对本地开发做了精简设计没有独立的编译构建步骤。npm run dev直接通过tsx运行 src/cli.ts 源码npm run dev -- status # 在开发模式下以真实数据运行 CLI从 package.json 可以看到dev: NODE_OPTIONS--no-deprecation tsx src/cli.ts这正是改完即跑、无需构建的机制来源。常用命令速查CONTRIBUTING.md 给出的命令表与 package.json 的 scripts 一一对应命令作用npm test运行tests/下的 vitest 测试套件排除四个串行锁测试套件npm run test:locks串行运行四个对并行敏感parallelism-sensitive的cache-refresh-lock套件npm run test:watch与npm test相同范围watch 模式npm run dev -- status开发模式运行 CLI读取你的真实数据npm run build基于已签入的定价目录构建 CLI 与 dashboard不修改被跟踪的源码文件npm run bundle-litellm显式从上游源刷新已签入的定价目录结果数据变更需单独 review 并提交测试范围的刻意隔离npm test刻意限定在tests/目录test: vitest run tests --exclude \tests/cache-refresh-lock*\。原因是 Electron 应用位于 app/ 下自带独立的 vitest 配置与jsdom依赖见 app/vitest.config.ts若让根目录 vitest 的默认 glob 扫描到这些 spec会因找不到jsdom而报ERR_MODULE_NOT_FOUND: jsdom。因此根目录测试npm test、npm run test:locks、npm run test:watchElectron 应用测试进入app/目录安装依赖并运行cd app npm test。运行单个测试套件按路径直接调用 vitestnpx vitest run tests/providers/codex.test.ts动手编辑前的必读材料docs/architecture.md代码库全景图。该文档指出 CodeBurn 是一个 Node.js CLI 三个外置 GUI 客户端的架构——macOS 菜单栏Swift、Windows 托盘应用Rust React、GNOME 扩展JavaScript均通过codeburn status --format menubar-json --period p调用 CLI 并解析 JSON不共享代码只依赖输出契约核心数据管道为provider.discoverSessions() → createSessionParser() → src/parser.ts 聚合 → src/daily-cache.ts 按日持久化 → 输出格式化docs/providers/name.md你打算改动的 Provider 的专项文档例如 docs/providers/codex.mdRELEASING.md涉及版本号或发布流水线时必读SECURITY.md安全漏洞披露政策。项目目录布局CONTRIBUTING.md 给出了精简版布局与仓库实际结构一致src/ CLI、解析器、optimize 检测器、缓存层 src/providers/ 每个 AI 工具集成一个文件 src/data/ 内置的 litellm 定价快照 tests/ vitest 测试 mac/ Swift 菜单栏应用 gnome/ GNOME shell 扩展 scripts/ 构建辅助litellm bundle 等完整结构请见 docs/architecture.md。编码规范TypeScript 严格模式与热路径安全严格模式与any约束TypeScript 严格模式全局开启。不得在未加注释说明原因的情况下引入any。这一约定直接约束着 src/providers/ 与 src/parser.ts 中成百上千行解析代码的类型安全。热路径禁止 Bracket-Assign在src/providers/和src/parser.ts的热路径中禁止对解析得到的用户输入使用方括号赋值obj[key] value否则 CI 中的 Semgrep 规则会直接让 PR 失败。应改用Map或显式白名单。这条规则的底层动机见 .semgrep/rules/no-bracket-assign-hot-paths.yml对以{}字面量创建的对象做方括号赋值当 key 来自外部数据时可能造成原型污染prototype pollution规则的修复建议是用Object.create(null)初始化映射。该规则将src/providers/*.ts与src/parser.ts列为扫描范围严重级别为 ERROR。代码中的实际遵守示例可以在 src/parser.ts 看到——聚合各类 breakdown 时全部使用Object.create(null)初始化const modelBreakdown: SessionSummary[modelBreakdown] Object.create(null) const toolBreakdown: SessionSummary[toolBreakdown] Object.create(null) const mcpBreakdown: SessionSummary[mcpBreakdown] Object.create(null) // ... 其余 breakdown 同理与之配套的 CI 检查在 .github/workflows/ci.yml 中用semgrep --config .semgrep/rules/no-bracket-assign-hot-paths.yml --strict --json src/providers/ src/parser.ts扫描一旦发现结果即报错退出。Provider 解析器必须确定性给定相同输入Provider 解析器必须产生相同输出。如果解析逻辑读取了系统时钟或文档约定 session 路径之外的文件系统就必须补充基于 fixture 的测试以保证可复现。新 Provider 的注册与懒加载新 Provider 统一通过 src/providers/index.ts 注册。任何拉取重型原生依赖sqlite、protobuf的模块都必须懒加载以免拖慢未使用该 Provider 的用户。从源码可以看到该文件大量使用动态await import(./xxx.js)如 antigravity、warp、forge、goose、cursor、vercel-gateway、opencode、cursor-agent、crush、zcode、zed 等并将这些名字集中记录在lazyProviderNames数组中——这正是懒加载约定的落地实现。测试要求fixture 驱动与全量套件即门槛各类改动的测试红线新增 Provider必须在tests/providers/下带基于 fixture 的测试。目前 claude、goose、qwen 三个 Provider 没有测试文件是已知缺口新代码不得扩大这个名单新增 optimize 检测器src/optimize.ts中每个新检测器需要在tests/optimize.test.ts中至少有一个正例和一个反例改动菜单栏 JSON 契约需同步更新tests/menubar-json.test.ts新增跨进程刷新锁测试必须命名为tests/cache-refresh-lock-what.test.ts并且要加入 package.json 的test:locks脚本。原因很微妙npm test通过--exclude tests/cache-refresh-lock*排除该前缀若锁测试放在其他地方就会在完整 worker 池下并行执行而间歇性失败若名字匹配了前缀却未加入test:locks则永远不会被执行。test:locks当前覆盖四个套件且通过--poolOptions.forks.singleForktrue强制单进程串行test:locks: vitest run tests/cache-refresh-lock.test.ts tests/cache-refresh-lock-corrupt-body.test.ts tests/cache-refresh-lock-process.test.ts tests/cache-refresh-lock-status-snapshot.test.ts --poolOptions.forks.singleForktrue全量套件是合并的硬性门槛在打开或更新 PR 前必须在自己的分支和main上分别运行npm test并对比若改动涉及 Electron 应用则运行cd app npm test涉及mac/则在其目录运行swift test。你的分支必须做到零新增失败。只列出自己新增的测试作为验证不算验证——项目捕获到的回归几乎总是发生在作者从未运行过的既有测试里。这与 docs/architecture.md 强调的回归永远在没跑过的测试中的思路一脉相承。提交信息规范提交信息使用短祈使句主题可选正文。git log中的真实示例Enhance GNOME extension with scrollable UI, dark mode, charts, and performance fixes Add table column headers, oneshot placeholder, currency picker dropdown禁止 AI 联合作者尾注.github/workflows/block-claude-coauthor.yml 会拒绝任何提交中包含Co-authored-by: ... claude ...或... anthropic ...尾注的 PR。允许使用 AI 工具辅助写代码但推送前必须删除联合作者行。该工作流会遍历BASE_SHA..HEAD_SHA范围内每个提交用正则co-authored-by:.*(claude|anthropic)匹配一旦命中会在日志中打印精确的修复命令git rebase -i $BASE_SHA→ 对每个命中的提交标记reword→ 删除 Co-authored-by 行 →git push --force-with-lease然后以非零码退出阻断合并。开始工作前与维护者先对齐CONTRIBUTING.md 给出了四条协作铁律先在 issue 上留言。动手写功能或新 Provider 代码前在相关 issue 下说明你的计划等待维护者确认方案。重复已有进行中工作或采用不兼容方案的主动 PR 会被直接关闭一次只开一个 PR。在你的第一个 PR 合并或关闭前不会审查你的第二个 PR先回应 review 再写新代码。维护者在你的 PR 上贴出 findings 后在解决或答复之前不会审查任何新内容不要在带未答复 review 或已知失败测试的分支上叠加新 PR——落在 bug 修复之上的修复意味着下面的 PR 从未可合并过为你 Agent 提交的内容负责。用 AI Agent 写 PR 没问题项目自己也这么干但每个 PR 都署你的名字我的 agent 生成的不能作为对 review findings 的回应。如果 agent 产 PR 的速度快到你无法对照全量套件逐一验证就让它慢下来。新增 Provider全项目最高门槛新增 Provider 之所以门槛最高是因为解析错误会静默产生错误数据。PR 打开前必须完成安装并实际使用该工具。用该 Provider 真实编码生成真实 session。项目对自己发布的每个 Provider 都这么做用真实数据测试。运行npm run dev -- today和npm run dev -- models确认输出正确成本非零、模型名能解析、session 计数与工具内所见一致在 PR 中附上证据。提供 codeburn 正确解析真实 session 的截图或终端输出。没有本地测试证据的新 Provider PR 不会被 review不要依赖 AI 对存储路径或 schema 的猜测。工具会随版本改变数据格式唯一可靠的做法是安装工具、直接检查磁盘上的实际文件披露你的关联关系。如果你构建了该工具、供职于厂商或能从被收录中获益必须在 PR 描述中说明。被 CodeBurn 收录意味着在庞大用户群面前的曝光隐瞒的自我推广无论代码质量如何都会被关闭。项目还可能暂缓新工具提交直到该工具展现出作者之外的真正采用。仅凭在线文档或 AI 生成代码、缺乏真实数据测试证据的 Provider PR 将被直接关闭。这与 src/providers/ 中每个 Provider 一文件的模块化结构相呼应——解析器质量直接决定 src/parser.ts 聚合结果的正确性。提交流程从分支到合并从mainfork 或建分支推送分支向main开 PR自动化检查三重奏firstlook工作流.github/workflows/firstlook.yml自动评估 PRsemgrepCI.github/workflows/ci.yml热路径方括号赋值守卫block-claude-coauthor工作流扫描提交尾注维护者审查非平凡改动通常会被要求补测试默认squash-merge。PR 标题保持简短准确上下文放在描述里填写描述。如果 Summary 仍是模板PR 会被自动关闭写清楚改动内容与原因后重新打开即可.github/workflows/pr-limit.yml 中的门槛是 Summary 去除 HTML 注释后少于 12 个字符即关闭首次贡献且改动超过约 300 行需先开 issue 并在 PR 中引用pr-limit.yml 中bigChange 300、firstTimer判定后若无 issue 引用即关闭同一时刻最多保持 5 个打开的 PR。第 6 个会被自动关闭并附说明可等其一合并或关闭后重新打开pr-limit.yml中maxOpen 5想法多于槽位时为每个想法开 issue让工作在动手前可见、可讨论UI 改动必须附前后对比截图。没有截图没有 review。报告 Bug在 https://github.com/getagentseal/codeburn/issues 提交 issue推荐包含以下信息codeburn --version的输出涉及的 Provider 及 session 历史的大致体量如du -sh ~/.codex/sessions等失败命令的输出适用时加DEBUG1解析类 Bug一段脱敏后能复现问题的 JSONL 或 SQLite 片段。安全漏洞与许可安全漏洞不要提交到公开追踪器请遵循 SECURITY.md 的披露流程。CodeBurn 采用 MIT 许可证见 LICENSE。贡献即表示你同意你的贡献以相同条款授权。参与贡献即意味着接受本文所述的全套质量门槛——从热路径的原型污染防护、解析器确定性、fixture 测试到全量套件零新增失败的合并铁律——这些自动化护栏共同保证了 37 个 Provider 解析数据的正确性也让每个合入的改动可验证、可追溯。【免费下载链接】codeburnFree, local tool to track AI coding token usage and cost across 37 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, and task. npx codeburn项目地址: https://gitcode.com/gh_mirrors/co/codeburn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考