前言¶
用 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 / 幻方,并非官方应用商店。