为 OpenCode 2 提供轻量级、实时的 token 用量监视器。勾选项表示已实现且通过相应验证;未来版本的示例仅用于说明设计。
目标:提供可本地安装的完整会话树用量面板,不包含 npm 发布。
- OpenCode 2.0.9 主插件与
./tui入口集成 - 向原生
sidebar.content追加基础面板,保留宿主内容 - 子代理视图通过
session.composer.top提供使用量入口,适配宿主隐藏侧边栏的行为(初版显示完整面板,后改为按需弹窗) - 检测当前会话,沿
parentID汇总根会话及所有后代 - 分页读取完整消息,包括压缩前历史和未打开的子代理
- 快照替换与继承历史去重,防止重复累计
- 显示 Input、Output、Reasoning、Cache Read、Cache Write
- 显示缓存命中率 Cache Rate
- 显示五类 token 的总量 Total
- 按当前查看会话的活动模型估算 Est. Cost,支持模型切换
- 未选模型时使用所在位置的默认模型;缺失适用价格按 0 并标注
- 按每条消息的传入 token 数选择价格阶梯
- 数字使用千位逗号分组:
1200 → 1,200、125000 → 125,000、1500000 → 1,500,000 - 空会话保留基础统计行并显示零;零值 Cache Write 与 Est. Cost 隐藏
- 消息用量上报后合并刷新,切换会话时隔离旧请求
- 加载、不可用、未更新与失败恢复状态
- 实际打包产物在 OpenCode 2.0.9 和 2.0.10 中验证加载、显示、刷新与子代理累计
预览及安装说明见 README.md,验证结果见 验证记录。
目标:让上下文消耗情况清晰可见。
- 读取活动模型的上下文窗口大小
- 显示已用 / 最大上下文
- 显示上下文用量百分比
- 处理上下文限制未知的模型
- 在模型切换后同步更新上下文指标
Context 72,400 / 128,000 (56.6%)
上下文行显示在面板第一行;百分比与用量同行,进度条留待后续版本。
目标:提供更直观的性能指标。
- 显示实时 TPS(每秒 token 处理量)
- 显示平均 TTFT(首 token 处理时间)
TPS 48.7 tok/s
TTFT 2.7s
目标:让整棵树的模型调用次数可见。
- 显示全树(含子代理)的
Steps计数 - 口径与 OpenCode 官方统计一致:每条 assistant 消息为一个 step,compaction 与用户消息不计
- 分叉继承副本不重复计数
- 行位置为 Context 之后、Input 之前;无 Context 时位于面板第一行
- 实际打包产物在 OpenCode 2.0.11 中验证显示与刷新
Steps 1,234
目标:按每条消息实际使用的模型统计费用,并在 OpenCode 缺少价格时使用厂商官方价格补全。
- 内置可追溯的厂商官方价格快照
- 首版收录最近半年发布且具有明确标准 token 定价的模型
- OpenCode 完整适用价格优先,缺失时整条消息回退到官方价格
- 按 assistant 与 compaction 消息实际模型分别计算
- 支持价格阶梯、缓存读写和 Reasoning 费用
- 支持网关模型到厂商模型的精确 ID 与明确别名映射
- 区分免费、部分可计算和价格不可用
- 已收录模型永久保留,后续持续核验价格和来源
- 通过单元测试与 OpenCode 2.0.11 打包集成验证
- 根据 OpenAI 官方 Standard 价格补全两款模型的短、长上下文费率
- 将 OpenAI 长上下文切换边界校正为传入 token 超过 272,000
- 通过类型检查、45 项自动化测试及构建
目标:按需提供比侧边栏更详细的 token 信息。以弹窗的形式显示。
- 添加
/usage - 显示当前会话树的 token 信息
- 显示 context 各项占比
- 显示 token 明细与上下文用量
- 显示各个模型费用
- 拆分为 Context Window / Last Request / Context Breakdown / Session / By Model,口径互不混用
- 紧凑数字(K/M)、来源条形图、Session 单行汇总、
d详细模式切换 - 子代理视图保留 Context、Total、Cost、TPS 单行摘要,点击打开可关闭的原生居中统计弹窗
- 在
/usage中显示模型的定价信息。
- 按 OpenCode 2.0.26 原生回答页脚口径累计当前查看会话的全部保留轮次,每轮只取最终已完成回答
- 不计轮次之间的空闲,不额外叠加子代理耗时,未完成回答不写入原生累计值
- 复用完整消息历史,重开会话和插件重启后恢复累计值,不依赖执行日志 API
- 侧边栏
Run Time、子代理单行Time、/usage的Run Time (this session)三处显示 - 移除各耗时入口的
Running...文本及点号动画,保留~实时估算、未更新标记与零值隐藏 - 运行中以
~显示当前轮已耗时估算,首轮非零估算可见;共享 500ms 单调时钟,不定时读取 API,结束后校正为原生值 - 时间缺失显示不可用,读取失败保留旧值并标注未更新;分叉副本不继承耗时,已提交回退随删除历史扣除
- 移除动画后通过类型检查、205 项测试、构建及真实 OpenCode 2.0.26 完整打包集成复验
- 首轮尚无 idle 消息时依据原生会话时间保持起点,synthetic/steer 不误重置;重连校时期间保留同一开放轮次的可信显示,247 项测试及真实 OpenCode 2.0.28 完整打包验证通过
- macOS 物理多屏切换导致耗时倒退的实机复验(终端焦点事件、视图重建与模拟重连已覆盖,不代表已验证物理切屏、App Nap 或睡眠/唤醒)
- 首次 npm 发布:
@chenlongapps/opencode-token-usage@0.2.1
- TPS 显示机制修改:100ms 突发合并、首批基线、500ms 最小跨度、时间加权平滑与静默过期;209 项测试及真实 OpenCode 2.0.26 本地 Responses SSE 打包集成验证通过
- 异常流与 TTFT 回收:离屏会话的共享活动检查、重连对账、丢失结束事件回收及异步竞态保护;长工具/重试等待不按静默时长误清理,234 项测试及真实 OpenCode 2.0.26 打包集成验证通过(长等待采用加速时钟)