前言¶
在 DeepSeek Harness(DSH)里用 Task 或子智能体并行拆任务时,父会话账单往往只反映你在主对话里的用量;真正跑在子 session 里的 token 要逐个打开子会话或自己扫日志才能加总。多轮对话里还会混进好几批派工,若不分组,很难对应「这一条用户消息到底花了多少」。
dsh-subagent-cost 是 Synapse-ACh 维护的 DSH 网页客户端插件:在 composer 输入框工具条上显示药丸(dock pill),汇总当前父会话派出的子智能体会话数、总 token 与人民币估算,并按父会话的 turn 分组展开明细。计价规则与 @kidli1412/dsh-session-cost 同源(峰谷、缓存分桶),数字是估算而非官方账单。
这是什么¶
- 名称:
dsh-subagent-cost(npm / 安装 spec 同名) - 维护者:Synapse-ACh
- 分类:客户端(
dsh.client.platform: web,注入@deepseek-ai/dsh-client-ui-conversation) - 版本(package.json):0.1.4
- 许可证:MIT
- DSH 引擎要求:
>=0.2.1-rc.2 <0.3.0
宿主半注册只读 API,客户端半负责药丸与面板;子会话用量从磁盘上的 session.v4.jsonl.zstd 逐帧解压聚合,避免 Node 内置 zstd 只解第一帧导致统计为 0 的问题。
核心功能¶
工具条药丸与状态圆点¶
药丸文案形如「3 subagents · ¥0.42」,点击打开面板。圆点含义(README 原文):
- 蓝:仍有子智能体在运行
- 绿:全部结束
- 灰:本会话尚未派发子智能体
- 红:读取失败
按 turn 分组的面板¶
面板顶部汇总子智能体数量、总 token、是否有 running,并提供 refresh。下方按 Turn N · 时间 · 本 turn 子智能体数 分段,每行列出子智能体标识、token 与 ¥ 花费。面板底部说明:估算基于 DeepSeek V4.1 峰谷价(CNY / 1M tokens)。
「一次任务」的划分规则¶
分组依据是父会话的 turn,不是随意按时间戳合并:
- 父会话日志中的
subagent/catalog事件给出每个childId。 turn/start事件携带turn。- 每条 catalog 归到它之前最近一次
turn/start——即「你发一条消息 → 该轮派出的所有子智能体」为一组,同一会话多批派工不会串组。
若父日志较旧、没有 catalog 事件,插件回落到 ctx.subagents.listChildren(parentId),这些子智能体归入「未归轮」(unattributed turn)。
计量与计价(估算)¶
- 每个子智能体是独立 session,只累计其自身产生的
assistant/message.data.usage。 - Fork 子会话(
isSeeded)会重放父事件作为 seed;这些 token 已在父会话计费,折叠从inheritedEventCount之后开始。 lib/cost.js来自@kidli1412/dsh-session-cost(MIT):按事件时间戳所在峰谷窗口计价(北京时间工作日 09:00–12:00、14:00–18:00 为高峰),按provider/model取价。- Token 桶:
inputTokens(缓存未命中输入)、cacheReadTokens(约未命中价 1/50)、cacheWriteTokens、outputTokens互不重叠。 - 重试与失败请求不在统计内;与官方账单规则一致,但不等价于发票。
宿主 API 与性能要点¶
只读端点(loopback 校验,非本机访问返回 403):
GET /api/subagent-cost/summary?session=<parent session id>
- 父会话:
ctx.sessionQuery.readSession(parentId)读一次,取 catalog 与 turn 边界。 - 子会话:优先读
$DSH_HOME/sessions/<workspace>/<sessionId>/session.v4.jsonl.zstd,按 zstd 帧魔数28 B5 2F FD逐帧解压;缺失、不可解或isSeeded时回落sessionQuery.readSession。 - README 实测:38 个子智能体、约 54.6 万 token 时,磁盘路径约 0.19 s,
sessionQuery约 9.7 s,结果一致(545,792 tokens / ¥1.32122364)。 - 客户端约 30 s 轮询;子会话增量 fold(
state.consumed),以turn/end结尾的会话冻结后每 5 分钟再校验。
安装与启用¶
推荐从 npm 安装(将 <profile> 换成你的 CLI / Web profile):
dsh plugin --profile <profile> add dsh-subagent-cost
跟踪 GitHub main 尖端:
dsh plugin --profile <profile> add github:Synapse-ACh/dsh-subagent-cost
在 DSH 对话内也可通过插件管理器安装:
plugin_manager action:install_bundle target:dsh-subagent-cost
plugin_manager action:install_bundle target:github:Synapse-ACh/dsh-subagent-cost
Desktop profile:由 Electron 应用托管,dsh plugin --profile … CLI 会拒绝该 profile。请在应用内插件管理器的安装框粘贴 dsh-subagent-cost,或使用上述 plugin_manager 调用。
安装完成后刷新浏览器页面:宿主半会自动重启,客户端半(药丸)由 Web UI 加载,需要 reload 才会出现。
本地 checkout 可将仓库目录的绝对路径作为 spec 传入(README 说明;本文不展开 clone 步骤)。
典型用法¶
- 在已启用插件的 DSH Web 对话中派发子智能体(Task 等)。
- 观察 composer 工具条上的药丸:子智能体数量与当前估算 ¥;圆点反映运行/完成/无子智能体/读失败。
- 点击药丸打开面板,按 turn 查看每个子 session 的 token 与花费;需要时点 refresh。
- 若需离线核对聚合逻辑,仓库提供
test/local-summary.mjs,可直接对$DSH_HOME/sessions做汇总(见 README Layout 节)。
适用场景与注意¶
适合:经常在单条父消息下并行多个 subagent、需要按「用户一轮输入」对照 token/¥ 的开发者;希望在主对话界面一眼看到子智能体总成本,而不是逐个打开子 session。
注意:
- 插件以当前 DSH 进程权限运行;安装前请阅读 GitHub 仓库 源码与 MIT 许可证,确认接受其读会话目录与暴露 loopback API 的行为。
- 汇总 API 仅允许本机 loopback 访问,但仍属于本机服务面,勿在不信任环境中暴露 DSH 端口。
- 数字为估算,对账请以官方账单为准。
- 社区目录页与 GitHub 由维护者发布;与 DeepSeek / 幻方无官方从属关系,DSH 生态遵循「一切皆插件」的扩展方式。
结尾¶
dsh-subagent-cost 把子智能体会话的 token 与人民币估算收到输入框旁的药丸里,并按父会话 turn 分组,方便对照「这一轮派工」的成本。安装 spec 为 dsh-subagent-cost 或 github:Synapse-ACh/dsh-subagent-cost,Web 端装完记得刷新页面。
- 目录页:https://www.skillhub.cn/plugins/Synapse-ACh/dsh-subagent-cost
- GitHub:https://github.com/Synapse-ACh/dsh-subagent-cost