codeburn Open Design 提供方深度解析:事件流 JSONL 的会话发现、Token 归因与本地成本核算
【免费下载链接】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点击查看免费下载Open Design 是 codeburn 所追踪的 37 类 AI 编码工具/代理之一它以每次运行一个事件流 JSONL 日志的方式落盘token 用量附着在周期性的usage事件上而非每条会话轮次上。本文以 docs/providers/open-design.md 为骨架结合 src/providers/open-design.ts 的实现与 tests/providers/open-design.test.ts 的测试夹具完整讲解其日志目录发现、事件格式解析、缓存读取与推理 token 的计费归因、跨运行去重机制以及排查成本为 $0类问题时的调试清单。Open Design 在 codeburn 中的定位在 codeburn 的提供方体系中Open Design 属于核心提供方core provider它被静态导入并常驻内存而非像 Antigravity、Warp、Vercel AI Gateway 等提供方那样按需懒加载。这一点在 src/providers/index.ts 与 src/providers/index.ts 的coreProviders数组中可以确认——openDesign与 Claude、Cline、Codex、Gemini 等一并列在 eager 列表内。// src/providers/index.ts节选 import { openDesign } from ./open-design.js // ... const coreProviders: Provider[] [ claude, cline, clineCli, /* ... */ openDesign, pi, omp, /* ... */ ]作为实现事实tests/providers/open-design.test.ts 中有一条专门断言allProviderNames()包含open-design保证该提供方始终注册在--provider参数校验的白名单中。其整合方式非常轻薄读取 Open Design 代理在本地落盘的运行日志解析出每次调用的模型、token 与成本喂给 codeburn 统一的分组、报表与 dashboard 管线不涉及网络请求、配额接口或 provider 级缓存。数据来源默认目录、环境变量覆盖与多形态目录发现各操作系统默认路径Open Design 的运行日志按平台存放在应用数据目录下src/providers/open-design.ts 的getOpenDesignDir()按platform()分派OS默认路径macOS~/Library/Application Support/Open DesignWindows%APPDATA%/Open DesignLinux~/.config/Open DesignWindows 分支有一个细节当%APPDATA%环境变量缺失时会回退到~/AppData/Roaming避免join得到非法路径。环境变量覆盖设置$CODEBURN_OPEN_DESIGN_DIR可以覆盖上述所有默认路径这在调试和测试中尤其有用详见下文调试清单。源码中的常量ENV_DIR CODEBURN_OPEN_DESIGN_DIRsrc/providers/open-design.ts在getOpenDesignDir()第一行就被读取只要该变量存在就直接作为基目录返回。多形态目录发现逻辑Open Design 的安装形态并不统一可能把日志根目录以namespaces根、data目录、runs目录或普通根目录四种形态之一暴露出来。为此 src/providers/open-design.ts 的discoverOpenDesignSessions()依据基目录的 basename做分支runs目录直接对该目录做逐 run 扫描namespace 由其父目录推导data目录扫描其下的runs子目录namespaces根遍历每个 namespace 子目录再进入ns/data/runs扫描普通根目录同时尝试base/data/runs与base/runs两种形态若存在namespaces子目录也一并遍历。无论从哪种形态进入最终都会被归一化到namespace/data/runs/runId/events.jsonl这一标准形态。逐 run 扫描由discoverRunsDir()src/providers/open-design.ts完成它读取目录下的每个子目录只把其中确实存在且为常规文件的events.jsonl记为SessionSource目录不存在或为空时静默返回空列表不会抛错中断整个扫描。一个关键细节是按解析后路径去重dedupeSources()src/providers/open-design.ts用一个Set对 source.path 去重。由于普通根形态会同时探测data/runs与runs两个位置若某个安装的目录结构存在重叠例如runs恰好就是data/runs的父目录引用关系模糊根不会导致同一个 run 被重复计数。存储格式逐行 JSON 的事件流Open Design 每次运行生成一个events.jsonl文件每行一个 JSON 事件对象字段结构为{ id: ..., event: ..., data: { ... }, timestamp: ... }id事件唯一标识用于去重见下文去重机制event事件类型目前代码只消费start与agent两种data事件负载按事件类型承载不同字段timestamp事件时间既可以是 ISO 8601 字符串也可以是数字 epoch 毫秒值。事件类型语义从 src/providers/open-design.ts 的解析循环可以归纳出三类有效事件start事件运行起始data.model携带当前模型标识用于为后续 usage 事件播种模型agentdata.type status状态切换事件data.model同样会更新当前模型agentdata.type usagetoken 用量事件data.usage中携带四个计数字段{ event: agent, data: { type: usage, usage: { input_tokens: 1000, output_tokens: 200, cached_read_tokens: 50, thought_tokens: 25 } } }usage各字段含义如下字段含义input_tokens本次调用的输入 token 总数已包含缓存读取部分output_tokens输出 token 数cached_read_tokens其中命中缓存、按缓存读取费率计价的 token 数thought_tokens推理reasoningtoken 数按输出费率计价解析的健壮性守卫解析器对脏数据相当宽容这体现在 src/providers/open-design.ts 的一组小工具函数上parseEvent()L53-L63对每一行先 trim空行跳过JSON.parse失败或解析结果不是普通对象时返回null并跳过——单行损坏不会拖垮整个 runstringValue()L36-L38只接受非空字符串tokenValue()L40-L42只接受有限正数负数、NaN、Infinity、非数字一律归一为 0防止损坏日志产生负 token 进而污染聚合总额timestampValue()L44-L51字符串原样保留数字按new Date(value)转为 ISO 字符串无法解释的数字返回空串。其中数字时间戳的兼容处理有专门测试覆盖run-mixed夹具中第二条 usage 事件的时间戳是数字1782122405000tests/providers/open-design.test.ts 验证经parseAllSessions与日期范围过滤后其timestamp被正确归一化为2026-06-22T10:00:05.000Z且在跨日聚合中不会被误排除。Token 归因与本地成本核算先减缓存、后计费Open Design 的input_tokens字段是含缓存读取的总额。如果直接把它当作新鲜输入去计价缓存命中的部分就会被按全价输入费率重复计费。因此解析器在调用计费函数前先做减法src/providers/open-design.tsconst uncachedInputTokens Math.max(0, usage.inputTokens - usage.cacheReadTokens)Math.max(0, …)同样是为了防御损坏数据若缓存读取数异常大于输入总数不会产生负的新鲜输入。推理 token 折入输出thought_tokens属于推理链 token按业界惯例以输出费率计价。解析器将其直接并入输出参数再传给calculateCostsrc/providers/open-design.tsconst costUSD calculateCost( currentModel, uncachedInputTokens, usage.outputTokens usage.reasoningTokens, 0, // cacheCreationTokens usage.cacheReadTokens, 0, // webSearchRequests )对应 src/models.ts 的calculateCost(model, inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens, webSearchRequests, speed)缓存读取 token 走cacheReadCostPerToken档位缓存写入档位在此传 0推理 token 因并入outputTokens而按outputCostPerToken计价。测试中也用同一函数反算验证run-mixed夹具中 codex 调用期望costUSD ≈ calculateCost(model, 950, 225, 0, 50, 0)tests/providers/open-design.test.ts即输入 950 1000 − 50 缓存、输出 225 200 25 推理。由此产出的ParsedProviderCall记录把各分量拆开保留src/providers/open-design.tsinputTokens存减缓存后的新鲜输入cacheReadInputTokens与cachedInputTokens都记缓存读取数reasoningTokens独立成字段供报表分别展示。未知模型与 $0 成本成本计算完全在本地进行。若模型名不在定价表中calculateCost返回 0codeburn 会给出no pricing data提示默认仅在CODEBURN_VERBOSE1时输出明细而不会虚构价格。因此成本为 $0有两种常见成因一是模型本身无定价数据二是模型从未被正确播种见下节怪癖。Provider 级无缓存文档明确Open Design 提供方没有 provider 级缓存。每次扫描都重新读取磁盘上的events.jsonl跨扫描的一致性不依赖缓存层而是依赖下述去重键机制。去重机制open-design:sessionId:eventId与其他提供方一样codeburn 用去重键防止同一份日志被重复统计例如多次运行codeburn扫描同一目录、或解析中断后重扫。Open Design 的去重键构造规则src/providers/open-design.tsopen-design:sessionId:eventIdsessionId取运行目录名即events.jsonl所在目录的 basenameeventId取事件自身的id字段若某事件没有id字段则回退到行号计数器line-0、line-1……fallbackEventCounter。去重通过解析器共享的seenKeys: Setstring实现同一个Set实例被传入不同解析器乃至不同扫描轮次usage事件若发现自己的键已存在则直接跳过。测试对这一点做了直接验证tests/providers/open-design.test.ts 用同一个seenKeys对run-mixed夹具连续解析两次第一次产出 2 条调用第二次产出 0 条——证明去重键确实跨解析轮次生效。另外夹具run-mixed中特意安排了两个id相同的 usage 事件evt-glm-usage第二次解析被去重键拦截说明同一 run 内重复 id 的脏数据也不会被重复统计。已知边界与怪癖先有模型后有 usage解析器维护一个currentModel状态只有start事件或agentstatus事件携带了模型之后后续usage事件才会被计入在模型未知前到达的 usage 事件会被直接丢弃而不会归因到unknown模型。从源码看这是if (!usage || !currentModel) continuesrc/providers/open-design.ts这一守卫的直接结果。设计意图很明确宁可丢一条无法归属的用量也不把成本挂到错误模型上造成报表污染。这一行为在夹具中有正反两个例子run-start-seededstart事件先播种glm-5.2随后到达的 usage 事件被正确计入模型glm-5.2、输入 770、输出 33、缓存读取 7、推理 3run-no-usage整个 run 只有start、status和一条message事件、没有任何 usage 事件解析结果为空——tests/providers/open-design.test.ts 断言calls长度为 0。不追踪工具与 bash 命令Open Design 的事件流目前不暴露逐调用per-call的工具名因此每次产出的调用记录中tools与bashCommands恒为空数组。这意味着按工具维度如 Skills Agents 细分的报表中Open Design 的数据不会出现在工具维度统计里。仅两个模型的显示名覆盖modelDisplayName()维护了一个很小的映射表src/providers/open-design.ts原始模型串显示名openai-codex:gpt-5.5GPT-5.5glm-5.2GLM-5.2GLM-5.2GLM-5.2除此之外的任何模型串原样展示。也就是说模型重命名只作用于这两个特例新模型接入 Open Design 时无需改动代码即可显示。测试覆盖三组夹具与七条用例测试夹具位于 tests/fixtures/open-design/采用真实的namespaces目录形态namespaces/release-stable/data/runs/runId/events.jsonl每条用例都基于真实文件而非内存字符串夹具 run场景run-mixed混合模型运行start播种 codexusage 用数字时间戳status切到 glm第二次 usage 携带重复 id验证去重run-start-seededstart先播种模型验证无 status 前置也能归属run-no-usage只有 start/status/message、无 usage验证零产出tests/providers/open-design.test.ts 共 7 条用例覆盖环境变量覆盖下的目录发现3 个 run 全部发现、project 均为release-stable、混合模型拆分为逐模型调用含 token/时间戳/成本断言、无 usage 运行零产出、start 播种模型、数字 epoch 时间戳在日期聚合中的归一化、跨解析器轮次去重以及核心提供方注册断言。测试通过process.env[CODEBURN_OPEN_DESIGN_DIR]指向夹具的data目录来驱动发现逻辑并在afterEach中还原环境变量与临时缓存目录tests/providers/open-design.test.ts——这也从侧面演示了调试该提供方时的标准手法。在 codeburn 中调试 Open Design 的清单基于文档When fixing a bug here一节结合源码与测试可整理出如下排查顺序确认安装实际使用的目录形态。先用codeburn doctor查看 probe 到的路径probeRoots()返回的就是overrideDir ?? getOpenDesignDir()src/providers/open-design.ts。然后按需设置CODEBURN_OPEN_DESIGN_DIR指向具体的data、runs或namespaces根——这是把发现逻辑指向指定目录最快的方式测试正是这么做的。若成本为 $0先查模型播种。检查该 run 的events.jsonl里在第一个usage事件之前是否出现过携带data.model的start或status事件若没有usage 事件会被静默丢弃。其次再排查模型是否在定价表内未知模型会输出 no pricing data 提示可用CODEBURN_VERBOSE1查看。新增测试夹具时事件文件放入tests/fixtures/open-design/保持namespaces/ns/data/runs/runId/events.jsonl形态用例追加到tests/providers/open-design.test.ts并在测试的beforeEach中把CODEBURN_OPEN_DESIGN_DIR指向新夹具目录。这条清单同样适用于向 Open Design 事件流新增字段或新事件类型的场景先确认目录形态与模型播种顺序再以夹具驱动解析就能在改动src/providers/open-design.ts后快速验证不回归。赞分享【免费下载链接】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点击查看免费下载相关推荐CodeBurn 解析 DroidFactory CLI会话JSONL 数据源、会话级 Token 均摊与成本核算实现详解CodeBurn 解析 DroidFactory CLI会话JSONL 数据源、会话级 Token 均摊与成本核算实现详解 Droid 是 FactoryCodeBurn 的 Qwen Code CLI 集成JSONL 会话解析、Token 成本核算与去重机制全解析CodeBurn 的 Qwen Code CLI 集成JSONL 会话解析、Token 成本核算与去重机制全解析 CodeBurn 是一款本地运行、无需账号的CodeBurn 集成 OpenClaudeClaude Code 分支的 JSONL 会话解析与成本核算全解析CodeBurn 集成 OpenClaudeClaude Code 分支的 JSONL 会话解析与成本核算全解析 本文聚焦 CodeBurn 对 OpenCl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于计算机视觉的道路坑洼检测:多种算法模型对比与Python实战

基于计算机视觉的道路坑洼检测:多种算法模型对比与Python实战

简介:这份资源是面向计算机相关专业学生与项目实战学习者的道路坑洼检测课程设计资料,基于计算机视觉方法实现路面病害识别,并横向对比AlexNet、LeNet-5、LeNet-5 2.0等多种算法模型的检测效果,适合作为毕设、课设、期末大作业或算…

2026/9/23 20:38:59 阅读更多 →
共享自习室系统Spring Boot落地避坑指南

共享自习室系统Spring Boot落地避坑指南

简介:本资源是一套完整的基于Java的共享自习室系统毕业设计项目,面向计算机相关专业本科生及Java Web开发初学者,解决高校或社区场景下自习空间在线预约、统一管理和高效调度的实际问题。压缩包共664个文件,含280个Java后端核心代…

2026/9/23 20:38:59 阅读更多 →
ite6801/6821开发实战:资料整理、C/C++环境搭建与避坑指南

ite6801/6821开发实战:资料整理、C/C++环境搭建与避坑指南

简介:面向嵌入式显示驱动开发者的ITE6801资料包,整合数据手册、编程手册、C/C驱动源码与开发板原理图,适用于智能电视、数字标牌、工控设备等场景的屏驱开发与调试。压缩包共15个文件、约10.37MB,其中9份PDF覆盖芯片Datasheet与编…

2026/9/23 20:38:58 阅读更多 →

最新新闻

okbiye AI答辩PPT:功能与作用全解析

okbiye AI答辩PPT:功能与作用全解析

答辩是毕设的最后一道关,很多同学论文写得很好,却栽在了答辩PPT上:答辩前才开始做PPT,一页一页做了一周还是做不好,内容不知道怎么提炼,排版不专业,配色辣眼睛;讲稿写不好&#xff0…

2026/9/23 21:27:23 阅读更多 →
开源框架中的 Swiper 与 Switch 组件:从原理到实战

开源框架中的 Swiper 与 Switch 组件:从原理到实战

1. 引言在现代前端开发中,开源组件库极大地提升了开发效率。其中,Swiper 和 Switch 是两个非常常见且实用的组件:Swiper 用于实现轮播图、滑动切换等交互效果,而 Switch 则用于开关切换类交互。本文将从原理、用法到实战&#xff…

2026/9/23 21:27:23 阅读更多 →
Apache DolphinScheduler 飞书(Feishu)告警插件接入指南:Webhook 配置、代理参数与消息发送原理

Apache DolphinScheduler 飞书(Feishu)告警插件接入指南:Webhook 配置、代理参数与消息发送原理

任务调度大数据后端前端 【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 项目地址: https://gitcode.com/gh_mirrors/do/dolphinscheduler 点击查…

2026/9/23 21:27:22 阅读更多 →
变电站智能化术语标准:Q/CSG 110017.12-2012关键定义与工程实践

变电站智能化术语标准:Q/CSG 110017.12-2012关键定义与工程实践

简介:《南方电网一体化电网运行智能系统技术规范 第1部分 第2篇:术语和定义》(Q/CSG 110017.12-2012)是南方电网发布的智能电网领域企业标准,面向电网规划、二次系统设计、标准编写及系统集成人员,重点解决…

2026/9/23 21:27:22 阅读更多 →
MATLAB虚拟网络仿真代码从零搭建:离散事件内核、链路模型与参数标定避坑指南

MATLAB虚拟网络仿真代码从零搭建:离散事件内核、链路模型与参数标定避坑指南

简介:这份资源是一套基于MATLAB编写的虚拟网络仿真代码,面向网络工程、云计算与分布式系统方向的研究者、开发者及教学学习者,用于搭建可直接运行的虚拟网络映射仿真环境,帮助理解虚拟网络资源到物理网络基础设施的映射过程。压缩…

2026/9/23 21:27:22 阅读更多 →
PaddleSpeech 服务端错误码体系解析:从 ErrorCode 定义到 RESTful 接口的统一异常处理

PaddleSpeech 服务端错误码体系解析:从 ErrorCode 定义到 RESTful 接口的统一异常处理

人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword…

2026/9/23 21:26:20 阅读更多 →

日新闻

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A…

2026/9/23 0:00:23 阅读更多 →
2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我

2k显示屏性能优化踩坑:版本升级后API全变了,这份源码解析救了我 刚把开发环境的显示器从1080P换到2K,跑老项目直接报错,版本升级后 API…

2026/9/23 0:01:25 阅读更多 →
3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点

3步搞定美眉图实战项目,告别官方文档抓不住重点 官方文档翻了三遍还是云里雾里?别急,美眉图在实战项目中常被用来做数据可视化,但它的原理比你想的简单。今天咱们直接上手,用一个完整的小项目把美眉图跑通,不再死磕那些冗长的理论说明。…

2026/9/23 0:01:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →