dsh-cost-profiler
Verifieddsh-cost-profiler · v0.1.0 · MIT · Web UI
Turn-level cost & performance profiler for the DeepSeek Harness: per-turn token/latency/cost attribution, slow-tool ranking, and a /cost session report
Install
dsh plugin add dsh-cost-profiler Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Creators
Readme
dsh-cost-profiler
DeepSeek Harness 的 turn 级成本/性能剖析器 —— 做归因分析,而不只是余额显示。
DSH 插件生态里有几百个"剩余额度"组件,但没有一个能回答:一个会话的 token、时间、费用到底花在了哪里。本插件把会话自身的事件流折叠成按 turn、按模型、按工具的剖析报告,按需渲染 —— 零额外 LLM 调用、零额外存储。
功能
/cost斜杠命令 —— 即时会话报告,三档粒度:/cost或/cost summary—— 总量、按模型分解、最慢工具排行/cost full—— 附加逐 turn 时间线(每 turn 的墙钟 / LLM ≈ / 工具 ≈ / token / 估算费用)/cost json—— 机器可读输出,便于脚本与面板集成
- 跨会话汇总 —— 内置面板严格限于当前会话;「这周 / 这个工作区所有会话一共花了多少」只有这里能回答:
/cost week//cost month//cost all—— 按工作区聚合 + 按会话明细(按估算费用排序,附 token 与费用;后缀json输出机器可读格式)
cost_report工具 —— 当你问"到目前为止花了多少"时,模型可以主动调用获取同一份报告costProfiler会话投影 —— 上述两者的数据源,同时暴露在客户端 wire 上,供面板类集成使用- 渲染输出 —— 命令结果与工具卡片都以真 Markdown 渲染(见输出渲染)
输出示例
Session cost $0.04 (est) · 2 turns · 27.6k in · 2.7k out · 88.5% cache hit · 58s wall
**Turns** 2 · **Messages** 2 · **Retries** 0
**Wall** 58s · **LLM ≈** 36.16s · **Tools ≈** 3.84s
**Tokens** 27.6k in · 213.1k cache hit (88.5%) · 2.7k out · 5.5k reasoning
**Estimated cost** $0.04 — API list prices (peak), USD
| Model route | In (uncached) | Cache hit | Cache write | Out | Reasoning | Msgs | Est. cost |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| `deepseek/deepseek-v4-pro` | 15.2k | 115k | 0 | 1.9k | 3.4k | 1 | $0.03 |
| `deepseek/deepseek-flash` | 12.4k | 98.1k | 0 | 812 | 2.1k | 1 | $0.0053 |
**Slowest tools**
| Tool | Calls | Total | Max | Errors |
| --- | ---: | ---: | ---: | ---: |
| `bash` | 1 | 2.3s | 2.3s | 1 |
| `read_file` | 1 | 1.54s | 1.54s | 0 |
输出渲染
同一份报告文本在聊天界面里以 Markdown 渲染,表格就是表格,而不是裸露的管道符:
/cost的结果走聊天的 Markdown 渲染器(conversation.chat.commandview槽),cost_report调用走工具卡片槽(tool.call.toolview)。- 折叠行的标签就是报告首行本身,而首行写成纯文本散文(
Session cost $0.04 (est) · 2 turns · …),因此在任何不渲染 Markdown 的位置也读得通。 - 30 行以内的报告默认展开;更长的(繁忙会话的
/cost full)默认收起为那一行摘要 —— 点击行即可展开。 /cost json渲染为 JSON 代码块,可用代码块自带的复制按钮。- 若客户端半边不可用(或 Markdown 渲染失败),卡片降级为宿主发出的等宽文本。报告全程都是纯文本 —— 模型看到的始终是文本,不是标记。
从没有客户端半边的版本升级上来时:插件组合会按进程缓存包的客户端声明,因此需要完全重启应用(仅刷新页面无效)后槽才会加载。
安装
在 DSH 内(Plugins 页面、插件管理工具或 CLI):
dsh plugin --profile <profile> add dsh-cost-profiler
手动方式:把包加进 profile 的 package.json 依赖,并把包名加进 dsh.profile.bundles,然后在 profile 目录运行 pnpm install。bundle 自带 cordis.patch.yml,无需手工改组合配置。
工作原理
插件注册一个纯会话投影,把持久化会话事件(assistant/message、tool/call → tool/result、turn/*、step/*)折叠为:
- 按模型路由(
{provider}/{model})的 token 桶,含缓存读/写与推理 token —— 只取assistant/message的权威结算值,流式采样与中止的重试不会重复计数(与官方 token-usage 投影语义一致); - 由
tool/call→tool/result事件时间差(按callId配对)得到的工具耗时,以及每个工具的调用次数、总耗时、最大耗时与错误数; - turn 墙钟与
LLM ≈估算(step 墙钟减去工具耗时)。
逐 turn 明细有上限(默认 100 turn),会话总量始终覆盖全程。状态为纯 JSON,可随投影 checkpoint 持久化。
费用估算
费用按 API 牌价计算并标注为估算值 —— 订阅/配额计费可能不同。内置 DeepSeek 公开模型的默认价目(峰值与低谷时段;低谷为峰值一半)。未配置价格的模型显示 —,而不是给出错误数字。
报告语言由 language 配置键控制(en 或 zh,默认 en)——宿主半边读不到应用界面语言,因此与卡片小文案不同,报告正文不会自动切换。/cost json 的字段值始终为英文,保证脚本解析稳定。
设置 showCosts: false 可完全关闭费用列,或在 profile 的 cordis.patch.yml 中按路由覆盖价格:
- id: cost-profiler
name: dsh-cost-profiler
config:
showCosts: true
offPeak: false # 用低谷价(峰值一半)估算
currency: USD # 费用显示币种
detailTurns: 100 # /cost full 保留的逐 turn 明细条数
language: en # 报告语言:en | zh(卡片小文案自动跟随应用界面语言)
prices: # 每百万 token 的价格
deepseek/deepseek-flash: { input: 0.3, cacheRead: 0.006, cacheWrite: 0, output: 1.2 }
# 也支持裸模型名或 "default" 键作为兜底
default: { input: 1, output: 2 }
跨会话汇总
/cost week(还有 month、all)读取本地已存储的会话做汇总 —— 按工作区聚合 + 按会话明细(按估算费用排序)。内置面板严格限于当前会话,这类跨会话归因没有任何官方入口。
数据来源(按优先级):
- 本插件在该会话自己的 checkpoint(逐模型路由桶,定价最准);
- 应用的官方
tokenUsagecheckpoint(只有会话总量、无路由 —— 按该会话最近使用的模型或你的default价定价); - 直接重放会话日志(不依赖任何 checkpoint)。
说明:
- 只读且隐私有界:扫描
~/.dsh(尊重$DSH_HOME),只读标题、时间戳与用量/计时数字 —— 不碰消息正文 —— 且不写任何文件。 - 当前会话最后几条事件可能滞后一个 checkpoint 刷新周期(通常几秒)。
- 无剖析活动的会话会被跳过;窗口内没有数据时给出指向
/cost all的提示,而不是空表。 cost_report模型工具刻意保持会话内范围 —— 跨会话大表会撑爆模型上下文。
说明与限制
LLM ≈由 step 计时推导,非逐请求精确计时 —— 视为近似值即可。- 会话内剖析范围为当前会话(子代理会话各自独立);跨会话汇总见上文。
/cost命令只输出文本,不进入模型上下文;/cost json是面板类集成的接入点。- 卡片小文案(运行态/JSON 标签/错误提示/代码块按钮)通过应用的 locale 注册表跟随界面语言(中/英);报告正文由宿主半边生成,为英文。
兼容性
- DSH
0.2.0-rc.1及之后的0.2.0-rc.x(peer 范围^0.2.0-rc.1)、cordis^4.0.1、Node ≥ 20。 - 宿主半边为纯 ESM,无构建步骤、无原生模块。客户端半边是手写的 classic script(不走打包器),注册两个 UI 槽;聊天界面缺失时自动降级为纯文本。
开发
node --test # 44 个单元测试:fold/report/prices/history 层 + 客户端半边
许可证
MIT —— 见 LICENSE。