dsh-ccswitch-usage:把 DSH 的 token 用量写进 CC Switch 用量面板

前言

用 DeepSeek Harness(DSH)做模型调用时,会话日志里会记录每次调用的 inputTokens、outputTokens 以及缓存相关 token。若你同时用 CC Switch 管理 Claude Code、Codex、OpenCode 等 CLI 的代理与用量,DSH 的消耗往往不在同一块面板里,总用量和成本要对账就得两边看。

社区插件 dsh-ccswitch-usage(维护者 LyaQanYi)在 DSH 侧监听完成后的模型调用,把用量写入 CC Switch 的 SQLite 库,字段与 CC Switch 自带的 DSH 会话导入器对齐,便于和其余应用一起统计。

这是什么

dsh-ccswitch-usage 是 DeepSeek Harness 的 Cordis 插件(npm 包名 dsh-ccswitch-usage,当前版本 0.1.0,MIT)。它不做推理本身,属于「模型推理」分类下的用量桥接:把 DSH 每次成功结束的模型调用折成一行记录,写入 CC Switch 的 proxy_request_logs(app_type = 'dsh'),费用按 CC Switch 的 model_pricing 表计算,与统计其他应用的方式一致。

目录页:SkillHub 插件页
源码:GitHub — LyaQanYi/dsh-ccswitch-usage

核心功能

DSH 每完成一次模型调用,会在会话日志里写一条 assistant/message,携带 inputTokens / outputTokens / cacheReadTokens / cacheWriteTokens。本插件订阅这条事件流,经折叠与串行写库,落表后 CC Switch 侧可以:

  • 在总用量、成本、缓存命中率里包含 DSH;
  • 在模型统计里看到 DSH 使用过的模型;
  • 在请求明细里逐条查看每次调用。

写库时还维护 session_usage_dedup 去重台账(request_id = 'dsh:<message.id>'),与官方导入器字段一致,便于将来 CC Switch 内置 DSH 导入器与插件并存时通过 INSERT OR IGNORE 避免重复计数。

首次启用时,若配置允许,会幂等地回填历史会话用量,可反复执行。

安装与启用

插件以 Host 侧代码运行,安装后需下次 DSH 启动(或重启 DeepSeek Harness.app)才会加载;仅刷新网页不够。安装前应自行查看仓库源码与 MIT 许可证,并确认本机 CC Switch 数据库路径与权限。

桌面版(DeepSeek Harness.app)

桌面版 profile 由 App 独占管理,不能使用全局 dsh 命令安装,需使用 App 内置 CLI 的完整路径(以 macOS 为例):

"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add /path/to/dsh-ccswitch-usage

成功时会把包以 link: 形式装进 ~/.dsh/profiles/desktop/node_modules/,并在 dsh.profile.bundles 中登记声明了 dsh.bundle 的包,无需手工改 bundles。

验证是否装上:

"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop list | grep ccswitch

卸载时将 add 改为 remove dsh-ccswitch-usage。已写入 CC Switch 的历史用量不会被插件删除。

非桌面版或自建 profile

dsh plugin --profile <profile 名> add /path/to/dsh-ccswitch-usage

手动安装

编辑 ~/.dsh/profiles/desktop/package.json,在 dependencies 中加入 link: 指向源码绝对路径,并在 dsh.profile.bundles 中包含 dsh-ccswitch-usage,随后在 profile 目录执行 App 内 CLI 的 plugin --profile desktop install 并重启 DSH。具体 JSON 结构见仓库 README。

配置

在 profile 的 cordis.patch.yml 中覆盖插件默认值,例如:

- id: dsh-ccswitch-usage
  name: dsh-ccswitch-usage
  config:
    enabled: true
    ccSwitchDbPath: ''      # 留空则 $CC_SWITCH_HOME/cc-switch.db,否则 ~/.cc-switch/cc-switch.db
    backfillOnStart: true   # 启动时补历史用量
    refreshPricing: true    # 60 秒后重新读定价,改价无需重启

ccSwitchDbPath 留空时使用环境变量或默认路径;首次启动回填由 backfillOnStart 控制。

数据写到哪里

主要写入两张表,语义与 CC Switch 的 session_usage_dsh.rs 导入器一致:

表 用途
proxy_request_logs 一条记录对应一次模型调用
session_usage_dedup 去重,request_id = 'dsh:<message.id>'

常见列含义包括:app_type = 'dsh',data_source = 'dsh_session',input_token_semantics = 2(FRESH,DSH 的 inputTokens 不含缓存读),session_id 为 DSH 会话 id;DeepSeek 账号路由时 provider_id 为 _dsh_account_session,否则为 _dsh_session。

适用场景与注意

适合谁:已在用 CC Switch 做代理与用量看板,又希望 DSH 的 token 与 Claude Code 等 CLI 出现在同一套统计里,而不是单独对会话日志做手工汇总。

运行权限:插件随当前 DSH 进程读写本机 CC Switch 数据库;安装前请确认路径与信任来源。

已知限制(来自 README,随 CC Switch / DSH 版本可能变化):

  • 部分 CC Switch 版本(README 提到本机 4.0.21)用量面板顶部尚无单独「DSH」筛选按钮,数据仍计入总量、模型统计与请求明细。
  • 仅完整成功的模型调用(assistant/message)记账;失败尝试(assistant/attempt)无用量,与官方导入器口径一致。
  • 定价表无精确模型命中时成本记 0,不做 LIKE 猜价;行数据保留,日后补价可重算。
  • CC Switch 写库 busy 时插件重试后跳过并打 warn,不阻塞会话。

结尾

dsh-ccswitch-usage 把 DSH 会话里的 token 事件转成 CC Switch 认可的 dsh 用量行,让 DSH 与常见 CLI 共用同一张价目表和面板。DeepSeek Harness 生态强调「一切皆插件」;SkillHub 等社区目录独立于 DeepSeek / 幻方,并非官方应用商店。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜