Pular para o conteúdo principal
L

dsh-cost

luyquan/dsh-cost

DSH web plugin: a real-pricing usage-cost line beside the official token stats — per-model cost breakdown with a verified price table. / DSH 费用统计行:在官方 Token 用量行旁按模型显示真实费用(按模型分别标注,价格均来自官方定价页)。

Instalar

dsh plugin --profile web add github:luyquan/dsh-cost

README

dsh-cost-line · DSH 费用统计行

在 DeepSeek Harness Web 界面的 官方 Token 用量统计行下方,新增一行按模型分别标注真实费用统计——格式与官方统计行完全一致(管道分隔、自动截断、悬停显示全量明细)。

仓库:https://github.com/LuYquan/dsh-cost · 开源协议:MIT

dsh-cost-line 效果截图

价格来源保证真实:内置价格表全部逐条核对自官方定价页(每条注明来源 URL 与核对日期 checkedAt),绝不虚构;未收录的模型一律显示"价格未知",绝不估算。

特性

  • 按实际路由追溯:优先使用 request/context 中解析完成后的真实 provider/model(request/header 仅作旧日志兜底);流式 usage 与最终消息按 turn/step 替换去重,失败但已上报 usage 的请求也不会漏算;
  • 格式与官方一致:12px 次级文本、管道分隔统计组、超长省略号截断、延迟悬停 Tooltip 展示全量(含每个模型的输入/输出/缓存 token 明细);
  • 价格真实:DeepSeek 的人民币与美元官方价分别保存、分别计费,不再用单一汇率近似人民币账单;其他仅发布美元价的模型才通过 usdToCnyRate 换算;
  • 按时间自动计价:DeepSeek 自北京时间 2026-08-17 00:00 起切换峰谷计费,插件按请求实际发生时间自动选择高峰/空闲价(高峰 09:00–12:00、14:00–18:00 北京时间),无需手动切换;
  • 峰谷切换提醒:Web 页面保持打开时,跨过峰谷边界会使用 DSH 官方 Toast 显示“进入高峰/空闲”消息;初次打开页面保持静默,休眠恢复后最多补一条当前状态提醒;除 DeepSeek 默认时钟外,已使用模型的自定义峰谷 schedule 也会提醒;
  • 多模型 / 多套餐:内置 DeepSeek、OpenAI、Anthropic、Google 的现行官方价格;支持任意套餐名、按模型选择套餐、版本号通配和长上下文分段价;
  • 价格审计可见:悬停明细显示请求套餐→实际生效套餐、价格核验日期、DeepSeek 当前时段和下一切换时间;套餐回退、过期或未提供核验日期的价格会在费用行直接警告;
  • 双数据路径:宿主侧以官方投影机制(sessionProjections)计算,可跨分页/压缩存活;投影注册表缺失时客户端自动降级为节点折叠(与官方统计行的兜底模式一致);
  • i18n:中文 / English 双语文案,随界面语言自动切换。

安装

通过官方 CLI(推荐):

dsh plugin --profile web add dsh-cost-line@latest

或手动安装:把 dsh-cost-line 加入 profile 的 package.json 依赖与 dsh.profile.bundles,然后重启 dsh web

安装并重启后,会话输入框下方会出现费用行,例如:

… 官方统计行(turn · 时长 · token)…
费用 ¥2.36 | DeepSeek-V4-Flash ¥2.36

悬停费用行可查看每个模型的完整明细(每模型一行,含输入/输出/缓存 token 与缓存命中率):DeepSeek-V4-Flash ¥2.36(输入 46.9M · 输出 260K · 缓存 46.4M · 缓存命中率 98%)

配置

插件配置通过 loader(cordis.patch.yml 中对应行的 config 字段):

- insert:
    - id: cost-line
      name: 'dsh-cost-line'
      config:
        showPerModelInLine: true   # 行内显示各模型费用(默认 true)
        maxInLine: 3               # 行内最多显示几个模型,超出显示 …(默认 3)
        peakReminders: true        # 峰谷切换时显示 DSH Toast(默认 true)
        priceStaleAfterDays: 90    # 超过多少天提示价格需复核;0 关闭警告
        currency: 'CNY'            # 显示币种:'CNY'(默认,人民币)或 'USD'
        usdToCnyRate: 6.7878       # 仅用于未发布人民币价的模型(默认:CFETS 2026-08-14 中间价)
        billingTier: 'standard'    # 全局套餐名;也支持 fast 等提供商自有名称
        billingTierByModel:        # 可选:按实际路由选套餐;支持 *,最具体规则优先
          'openai/gpt-5.5*': priority
          'anthropic/claude-opus-*': fast
          'anthropic/*': batch
        priceOverrides:            # 真实价格;键支持 provider/model 的 * 通配
          'acme/acme-1':
            inputPerM: 0.5         # USD / 每百万 token 输入(缓存未命中)
            outputPerM: 1.5        # USD / 每百万 token 输出
            cacheReadPerM: 0.05    # 可选:缓存命中
            cacheWritePerM: 0.1    # 可选:缓存写入
            displayName: 'Acme-1'  # 可选:模型显示名(默认 model id)
            source: 'https://provider.example/pricing'
            checkedAt: '2026-08-17' # 建议填写;缺失时费用行提示复核
            tiers:                 # 可选:任意名称的套餐价
              reserved: { inputPerM: 0.4, outputPerM: 1.2 }
            bands:                 # 可选:按本次请求总输入 token 选择整单费率
              - aboveInputTokens: 200000
                rate: { inputPerM: 1.0, outputPerM: 2.0 }
            schedule:              # 可选:为该模型配置峰谷/调价调度(任意模型均可)
              effectiveAt: '2026-09-01T00:00:00Z'
              kind: peak-off-peak  # 或 rate(到期整体换价)
              peak: { inputPerM: 0.8, outputPerM: 2.4 }
              offPeak: { inputPerM: 0.4, outputPerM: 1.2 }
              peakWindows: [[9, 18]]   # UTC 时段(半开区间)
              source: 'https://provider.example/pricing'
              checkedAt: '2026-08-17'

priceOverrides 用于:① 未收录模型的官方价格;② 你的部署提供商自有价格(例如网关代理价);③ 任意新模型。键可以是精确路由,也可以用 *,例如 'openrouter/openai/gpt-5.5*';用户规则始终优先于内置表,同层规则以更具体者优先。数值单位固定为 USD / 百万 token;覆盖内置 DeepSeek 项后,CNY 显示也会按 usdToCnyRate 换算这套自定义 USD 价。未附 schedule 的覆盖项代表一套完整的固定价格,会替代内置调价计划。自定义数字不会继承内置价格的核验日期,请同时填写自己的 source / checkedAt请填写真实价格——插件只会照实计算,不会替你编造。

加载时会校验套餐名、有限非负费率、日期、长上下文阈值以及 0..24 的非重叠整数 UTC 峰谷窗口;无效片段会被安全丢弃并写入 dsh-cost-line 宿主警告。套餐名前后空格会自动去除。

模型支持

token 用量与模型追溯对任意模型开放(宿主投影按 request/context 的实际解析路由精确归因,无需配置);费用显示取决于价格表——内置表 + priceOverrides 共同决定哪些模型有价。

内置价格表(每条以 checkedAt 为准,新增条目核对于 2026-08-17):

  • DeepSeek:deepseek-v4-flash / deepseek-v4-pro(含官方峰谷调度,自动生效)
  • OpenAI:gpt-5.5gpt-5.5-progpt-5.4gpt-5.4-mini 及其官方固定快照 ID;5.5/5.4 自动处理 >272K 输入的整单长上下文费率,并内置适用的 Batch / Flex / Priority 价格;
  • Anthropic:Claude Fable 5、Opus 5/4.8/4.7/4.6/4.5、Sonnet 5/4.6/4.5、Haiku 4.5;内置 Batch,Opus 5/4.8 另有 Fast;4.5 的 API 别名和日期快照通过安全通配共同覆盖;
  • Google(Standard 档):gemini-3.7-flashgemini-3.6-flash(2026 促销价,2027-01-01 起自动翻倍)、gemini-3.5-flashgemini-3.5-flash-litegemini-3.1-flash-litegemini-2.5-flashgemini-2.5-flash-lite——以上模型同时内置 Batch / Flex / Priority 三档价格(见下方套餐说明)

套餐与档位(billingTier)

  • 会话日志不含档位信息,部署通过 billingTier 选择默认套餐(默认 standard),再通过 billingTierByModel 为不同实际路由选择套餐;两处均接受提供商自有名称,例如 Anthropic fast
  • billingTierByModelpriceOverrides 都支持 *,精确/更具体的规则优先,可一次覆盖版本化模型或同一网关下的一组模型;
  • 未内置档位数据的模型(如 DeepSeek)在非 standard 档下回退 standard(绝不猜测);
  • 内置套餐均保存官方公布的明确数值,不用统一倍率猜测;用户自定义模型可在 priceOverrides.*.tiers 中添加任意套餐;
  • 缓存存储费(Gemini $1/百万 token/小时)按小时计费、无法从用量推算,不计入(需要精确对账请用 priceOverrides 自行折算);
  • 分段输入定价可通过 priceOverrides.*.bands 精确配置;内置 GPT-5.5/5.4 已使用该机制,尚未核验的模型仍保持“价格未知”。

通过配置添加任意模型(示例:免费模型与带调度的模型):

        priceOverrides:
          'opencode/deepseek-v4-flash-free':   # 免费模型:价格为 0(请先核验你的提供商)
            inputPerM: 0
            outputPerM: 0
            displayName: 'DeepSeek V4 Flash Free'
          'opencode/mimo-v2.5-free':
            inputPerM: 0
            outputPerM: 0
            displayName: 'MiMo V2.5 Free'

不内置的情形(价格真实性原则):

  • 无法由会话 token 用量推导的额外费用(服务器工具调用、缓存按小时存储、Scale Tier 固定容量、区域/数据驻留溢价等);
  • 无官方公开价格可核验的模型与第三方网关自有价格(如 opencode 免费档)——显示“价格未知”,用 priceOverrides 填真实价格。

价格来源

所有内置价格均于 checkedAt 当日逐条核对自官方页面。DeepSeek 同时内置官方人民币与美元价(每百万 token):

模型 / 时段输入(未命中)输出缓存命中来源
deepseek-v4-flash 空闲¥1.5 / $0.22¥4.5 / $0.66¥0.05 / $0.007中文定价 / USD pricing
deepseek-v4-flash 高峰¥3 / $0.44¥9 / $1.32¥0.10 / $0.014同上
deepseek-v4-pro 空闲¥4.5 / $0.66¥13.5 / $1.98¥0.15 / $0.022同上
deepseek-v4-pro 高峰¥9 / $1.32¥27 / $3.96¥0.30 / $0.044同上

其他内置模型目前使用官方 USD 价:

模型输入(未命中)输出缓存命中来源
gpt-5.5(Standard,≤272K 输入)$5.00$30.00$0.50OpenAI model pricing
gpt-5.4(Standard,≤272K 输入)$2.50$15.00$0.25OpenAI model pricing
gpt-5.4-mini(Standard)$0.75$4.50$0.075OpenAI model pricing
Claude Opus 5 / 4.8 / 4.7 / 4.6 / 4.5$5.00$25.00$0.50Claude pricing
Claude Sonnet 5$2.00$10.00$0.20同上
Claude Sonnet 4.6 / 4.5$3.00$15.00$0.30同上
Claude Haiku 4.5$1.00$5.00$0.10同上
gemini-3.7-flash / 3.6-flash(Standard,2026 促销价)$0.75$3.75$0.075Google AI pricing
gemini-3.5-flash$1.50$9.00$0.15同上
gemini-3.5-flash-lite$0.30$2.50$0.03同上
gemini-3.1-flash-lite$0.25$1.50$0.025同上
gemini-2.5-flash$0.30$2.50$0.03同上
gemini-2.5-flash-lite$0.10$0.40$0.01同上
  • DeepSeek 自 2026-08-16 16:00 UTC(北京时间 2026-08-17 00:00) 起执行峰谷计费;生效前的历史调用仍按旧价重放,生效后按请求时间选择高峰/空闲价。
  • GPT-5.5 / GPT-5.4 在单次请求总输入 >272K 时,Standard、Batch、Flex 自动按官方规则对整单应用 2× 输入与 1.5× 输出;未公布的 Priority 长上下文倍率不会猜测,仍使用已核验的 Priority 费率。
  • Claude 缓存写入使用官方默认 5 分钟缓存价;若部署明确使用 1 小时缓存、区域端点或其他溢价,请通过精确/通配 priceOverrides 覆盖。
  • Google 的 3.7/3.6 Flash 促销价至 2026-12-31,2027-01-01 起翻倍,插件同样按时间自动适用;其余 Google 模型为现行价。
  • 未收录模型和第三方网关价格显示“价格未知”,请用 priceOverrides 填入真实价格。
  • 无专属缓存单价的提供商,缓存读取/写入按输入价计(可在 priceOverrides 中单独指定)。
  • 币种与汇率:DeepSeek 的 CNY / USD 账单直接使用对应官方价;Google 等仅有 USD 价的模型在 CNY 显示时才使用 usdToCnyRate。默认值为 2026-08-14 人民币对美元中间价 6.7878,可按部署需要更新。也可将 currency 设为 'USD'

最近价格核对:DeepSeek、OpenAI、Anthropic 2026-08-17;Google 各条以 checkedAt 为准。

数据链路与局限

  • 主路径(持久):宿主 sessionProjections 注册 usageCost 投影单元,按实际 request/context 路由折叠 usage chunk / final sample;同一 turn/step 后值替换前值(分页与压缩不影响);
  • turn/step 替换缓存是最多 512 项的有界映射,即使多个流交错也能正确替换,同时避免投影检查点无限增长;
  • 兜底路径(窗口):投影缺失时,客户端折叠当前可见的会话节点(仅覆盖已加载窗口,与官方兜底行为一致);
  • 费用按请求发生时间结算;投影 stateVersion 使用“状态结构第 4 代 + 价格/套餐/币种策略指纹”,安装升级或修改计费配置后都会自动从日志重算缓存,避免一个小计混用新旧价格;
  • 子代理(subagent)有独立会话日志,其费用归入各自会话,不计入父会话行;辅助标题生成等日志外请求不计(README 说明即文档);
  • 非法/负用量记录会被守卫丢弃(与官方 session-stats 一致)。

部署注意(社区插件规范)

  • 无 config 行也能启动:本插件的宿主与客户端入口都会在 config 缺失时套用默认值(resolveCostLineConfig)——Loader 不会自动应用 schemastery 默认值,社区插件必须在 apply(ctx, config) 内自行兜底,否则整棵插件树启动崩溃;
  • 建议在 profile 的 cordis.patch.yml 显式给出配置(幂等且便于维护),例如以同 id 条目覆盖(见上);显式配置与内置默认值等效,插件对两者都安全。

开发

pnpm install
pnpm check         # typecheck + 88 tests + build + 客户端包冒烟 + 价格门禁
pnpm prices:audit  # 内置路由/来源/核验日期审计(默认最长 120 天)
pnpm dsh:doctor    # 本机 Node、DSH CLI 与关键运行时包兼容性检查

CI 除每次 push/PR 的完整检查外,还会每月运行一次价格新鲜度审计。测试套件包含真实 Cordis Context + SessionProjectionRegistry 接线测试,并会加载最终客户端 bundle 检查模块交接形状;正式发布前仍应在目标 DSH Web 中完成一次真实请求与 UI 冒烟测试。

  • src/pricing.ts —— 价格表与折算(纯函数,无依赖)
  • src/peak-reminder.ts —— 峰谷状态与下一切换边界(纯函数)
  • src/usage-cost.ts —— 折叠状态机(宿主投影与客户端兜底共用)
  • src/index.ts —— 宿主插件(投影注册 + schemastery 配置)
  • src/client/ —— 客户端插件(slot 注册、组件、i18n)
  • tests/ —— 价格完整性(防虚构门禁)、折叠归因、组件渲染三套测试

构建产物:lib/index.js(宿主 ESM)+ lib/client.js(浏览器 bundle,window.__ModuleLoader__.load 格式,遵循 DSH 社区插件规范 dsh.bundle.patch / dsh.client.inject)。

License

MIT © 2026 dsh-cost-line contributors

Plugins relacionados