Lyoko-Jeremie/dsh-plugin-usage-insights ↗★ 0

dsh-usage-insights

Token usage, context occupancy, session metrics and cross-session totals in the DeepSeek Harness right sidebar. 适合需要监控Token消耗、缓存命中率及费用明细的Web端用户。

パッケージ
dsh-usage-insights
互換性
未検証
バージョン
0.11.0
ライセンス
MIT
最終更新
2026/10/22

同名パッケージの別リポジトリ

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Lyoko-Jeremie/dsh-plugin-usage-insights

ドキュメント

README 全文を読む ↗

dsh-usage-insights · DSH 用量洞察

English | 简体中文

在 DeepSeek Harness Web 版的右侧栏里,查看每个对话的 Token 用量、上下文占用、会话指标,以及跨对话的用量汇总与峰谷费用。

这是一个纯展示插件:所有数字都来自 Harness 已经发布的会话投影,插件不写入会话日志、不新增模型可见内容、不上传任何数据。

用量面板

功能

插件在右侧栏提供两个页面。

用量(当前对话)

  • 会话概览:请求数、Token 总量、输入 / 缓存读 / 输出(缓存写仅在提供商上报显式缓存写入时显示)、缓存命中率、费用,以及峰谷比例(按 Token 与按请求各一行)。
  • 缓存命中:三条横条分别显示本会话累计、当前回合、最近一步的缓存命中率。条形使用幂次刻度(1-(1-r)^0.3)放大 90% 以上区间的差异,并带 50% / 90% / 99% 三档刻度尺与条内刻度线;百分比数字按状态着色:≥90% 绿色、70–90% 琥珀色、 官方没有提供「当前离线时段」的查询接口。DeepSeek 文档只以文字定义时段,账户接口也只返回余额,因此插件始终按请求开始时刻 + 北京时间规则 + 节假日日历在本地判定。

配置项参考

- insert:
    - id: usage-insights
      name: dsh-usage-insights
      config:
        stepHistory: 200            # 折叠保留的请求数(checkpoint 大小)
        stepWindow: 200             # 下发给客户端的请求数(「显示全部」可看到)
        bandDays: 90                # 每日聚合保留天数
        compactionThreshold: 0.5    # 可选:读不到后端阈值时手动指定(0-1)
        useBuiltinHolidays: true    # 使用内置 2025-2026 节假日
        holidays: []                # 额外放假日 YYYY-MM-DD
        holidayRanges: []           # 额外放假区间 YYYY-MM-DD..YYYY-MM-DD
        holidaySync:
          enabled: false
          urlTemplate: 'https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{year}.json'
          years: []
          timeoutMs: 4000

架构

Host(index.js)
├── usageSteps 投影:折叠 step/start + assistant/message + assistant/attempt
│     → 最近 200 个请求(时间、回合、模型、四桶、峰谷)
└── usageBands 投影:按天 × 时段 × 模型聚合(90 天 + 终身总量)
        │  Harness 投影缓存 checkpoint(重开/重启恢复)
        ▼
Client(dist/client.js)
├── 「用量」页:读 tokenUsage / contextPressure / contextBreakdown / sessionStats / usageSteps / usageBands
├── 「用量汇总」页:读会话列表中的 usageBands 投影值
└── 输入框柱状图按钮:展开右侧栏并打开用量页
  • Host 半只做投影折叠与节假日解析,不做任何 UI。
  • Client 半不依赖任何 @deepseek-ai/* 客户端包,只用平台基线(React)和自己的组件与样式。
  • 不新增 Session 事件,不改变会话格式。

开发

npm install
npm run typecheck        # TypeScript
npm test                 # Vitest:计价、峰谷、投影折叠、聚合、格式化
npm run build            # 生成 dist/client.js(Harness module-loader 格式)
npm run verify:bundle    # 在伪造 module loader 下校验注册面
npm run verify:render    # 用真实 React 在 Harness 外渲染两个面板
npm run check            # 以上全部

安装到本地 profile 后即可预览:

dsh plugin install /absolute/path/to/dsh-plugin-usage-insights
dsh web

目录结构:

index.js              Host 半:注册投影、解析节假日、可选同步
src/host/             投影折叠、节假日解析
src/shared/           峰谷判定(Host 与 Client 共用)
src/client/           注册、面板容器、展示组件、样式、文案
src/lib/              纯函数:格式化、计价、聚合、视图派生
dist/client.js        构建产物(浏览器模块)
assets/               README 截图

已知限制

  • 分步明细是窗口:每个会话的 Host 保留最近 200 条并全部下发给 Client,主/子合并后默认展示最近 30 条,可用「显示全部」查看窗口内所有请求;更早的请求只存在于会话日志中,聚合计数不受影响。
  • 每日聚合保留 90 天,更早的天只计入终身总量。
  • 2027 年及以后的节假日需要等国务院公告;可手动配置或开启自动同步。
  • 极少数失败尝试(assistant/attempt 且此前没有成功消息)没有模型路由,按当前会话模型计价。
  • 子会话作为独立对话计入汇总;主/子拆分见上文,团队与普通子代理无法在会话维度区分。
  • 压缩摘要、标题生成等辅助模型调用不写入会话事件,因此不在用量统计内。
  • 费用是基于配置价格的估算,不是官方账单。

隐私

  • 所有计算在本地完成,插件没有遥测、不上传用量数据。
  • 唯一可能的网络请求是可选开启的节假日数据同步,只请求公开的节假日 JSON。

致谢

License

MIT

价格配置

Harness 不提供货币计价,价格表由插件维护,位于 src/client/config.ts。内置的是 DeepSeek 官方价格(元 / 百万 tokens,读取于 2026-10-21):

模型时段缓存命中缓存未命中输出
deepseek-flash高峰0.0428
deepseek-flash空闲0.0214
deepseek-v4-pro高峰0.30927
deepseek-v4-pro空闲0.154.513.5

修改价格后重新构建:

export const PRICING: PricingTable = {
  currency: 'CNY',
  prices: [
    { model: 'deepseek-flash', input: 2, cacheRead: 0.04, cacheWrite: 2, output: 8,
      offPeak: { input: 1, cacheRead: 0.02, cacheWrite: 1, output: 4 } },
  ],
  // fallback: { input: 2, cacheRead: 0.04, cacheWrite: 2, output: 8 },
}
npm run build   # 重新生成 dist/client.js

计费公式参考 Reasonix:金额 = Σ tokens × 每百万单价,每个桶先取整到微单位再相加,避免浮点误差。单时段价格表只产生一个金额;峰谷双档价格表在缺少分步数据时产生区间(下界全按空闲、上界全按高峰),有分步数据时则按实际时段精确计价。

配置项参考

- insert:
    - id: usage-insights
      name: dsh-usage-insights
      config:
        stepHistory: 200            # 折叠保留的请求数(checkpoint 大小)
        stepWindow: 200             # 下发给客户端的请求数(「显示全部」可看到)
        bandDays: 90                # 每日聚合保留天数
        compactionThreshold: 0.5    # 可选:读不到后端阈值时手动指定(0-1)
        useBuiltinHolidays: true    # 使用内置 2025-2026 节假日
        holidays: []                # 额外放假日 YYYY-MM-DD
        holidayRanges: []           # 额外放假区间 YYYY-MM-DD..YYYY-MM-DD
        holidaySync:
          enabled: false
          urlTemplate: 'https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{year}.json'
          years: []
          timeoutMs: 4000