前言¶
DSH 把会话、任务和流式输出组织在 Web 界面里,但开发者想知道「这个会话消耗了多少 token、预估花了多少、缓存命中了多少」时,一般只能去翻日志、手算,或者接一套外部监控。dsh-session-stats-panel 做的是把用量看板直接放进左侧栏,作为一个独立的「会话统计」页面,不弹窗、不改设置项。它由 Oblivionis7999(织风裁月)维护,零第三方依赖,图表全部是手写内联 SVG / CSS。
下面介绍这个插件的能力、安装方式、页面口径和注意事项。
这个插件是什么¶
一句话定位:在 DSH Web 左侧栏「自动化任务」下面新增一个独立的「会话统计」页面,复刻会话用量看板。代码分宿主半和浏览器半:宿主半只读 ctx.sessionQuery,并注册两条只读 HTTP 路由;浏览器半负责渲染页面。
它补的是官方包没覆盖的部分。官方 @deepseek-ai/dsh-session-stats 注册的是宿主侧 sessionStats 投影(tok/s、墙钟时间),本插件做的是按会话聚合的 token / 成本 / 缓存命中率,以及 DSH 进程自身的运行状态采样。
核心功能¶
页面布局¶
顶部是大标题 + 时间档(近 24 小时 / 近 7 天 / 近 14 天 / 近 30 天)+ 币种(人民币 / 美元)。
第一行四张等宽指标卡:总 Token 消耗、预估成本、会话数、缓存命中率。
第二张横跨整行的是「DSH 运行状态」卡:CPU(单核)/ 内存(RSS)/ 事件循环 p99 / 运行时长,外加一条 5 分钟 CPU 面积折线。
第三行并排:「每日消耗」按模型分色的堆叠柱状图 +「Token 构成」按模型分段的环形图。
第四张横跨整行的「分模型明细」卡:模型 / tokens / 占比条 / 成本。
运行状态采样¶
每 5 秒采样一次:CPU(进程 %、整机 %、核数)、RSS/堆、事件循环 p99/均值、运行时长、PID、Node 版本。底部是 60 点(5s x 60 = 300s)的 CPU 环形缓冲折线。
成本估算口径¶
只认「模型原厂官方价目」:DeepSeek 指向 DeepSeek,GLM 指向智谱,Kimi 指向 Moonshot,Grok 指向 xAI,GPT 指向 OpenAI,Claude 指向 Anthropic,Qwen 指向阿里云,以此类推。转售/聚合平台价(如 OpenCode Zen)和跨厂商兜底价一律不用。
DeepSeek 按峰/谷逐条计价,其它厂商平铺单价;海外厂商的 USD 按 usdRate(默认 7.1)折算。查不到官方价目的模型不猜、不计钱:响应里 priced:false、costCNY:0、priceLevel:"unpriced"、priceKey:null、sourceUrl:null;分模型明细的成本列显示「未计价」,表底灰字提示「N 个模型无官方定价,未计入金额(tokens x.xxM)」。
README 附了一份「抓取日 2026-11-04」核验的原厂价目表,覆盖 DeepSeek、智谱、阿里云、MiniMax、阶跃、小米、美团、xAI、OpenAI 等,并给出各厂商官方文档链接。模型价格会变动,判断某模型当前是否计价应以该表和插件实际行为为准,成本只能作为本地估算,不能当作账单。
图表与配色¶
图表颜色只取自宿主响应里的 modelPalette(10 色),按 route 在窗口内首次出现的顺序分配,第 11 个及以后归入中性灰的「其他」切片;客户端不硬编码颜色,只读 color 字段。深色主题只对色块做亮度/饱和度微调,不维护第二套硬编码色板。
主题跟随宿主明暗色,消费 --dsw-alias-* 设计 token(带浅色兜底值),浅色为白底 + #e8eaed 细边框,主色为 #12b886 / #0ca678。
安装与启用¶
先取得插件目录的绝对路径,下面用 <插件目录> 表示。本地开发用 link 安装,不复制文件:
dsh plugin --profile web add "link:<插件目录>"
卸载用包名:
dsh plugin --profile web remove dsh-session-stats-panel
要分发给别人,用 git 方式安装:
dsh plugin --profile web add "git+https://github.com/Oblivionis7999/dsh-session-stats-panel.git"
装完重启 DSH(bundle 列表变化不支持热重载),浏览器 Ctrl+Shift+R 强刷。装好后左侧栏「自动化任务」下面会出现「会话统计」。
运行要求来自 package.json:peerDependency @deepseek-ai/dsh 版本 >=0.2.1-rc.5(optional),engines.node 为 >=22.19.0,版本 2.2.2,许可证 MIT。
页面口径与缓存¶
阅读页面时要注意几个口径:
1、近 7 天 是「今天及之前 6 个自然日」,按北京时区(UTC+8)对齐;柱状图与汇总严格同源,柱子之和恒等于卡片总量,默认时间档是 近 7 天。
2、币种切换不重新请求,美元是人民币按 usdRate(默认 7.1)派生显示。
3、总 Token 是四个互斥桶相加:inputTokens(未缓存输入)+ outputTokens + cacheReadTokens + cacheWriteTokens;缓存命中率分母为 inputTokens + cacheReadTokens + cacheWriteTokens(为 0 时记 0)。
4、会话数是窗口内至少有一条 usage 事件的会话数,平均值 = 窗口总量 / 会话数。
5、宿主半不写任何会话数据,只处理 event.type === "assistant/message" 且带 data.usage 的事件;assistant/attempt、非消息事件、空 usage、时间戳非法的事件一律跳过,绝不抛错。模型/供应商来自 data.message.source,缺失时路由为 unknown/unknown。
缓存与增量:overview 响应缓存默认 ttlMs 60s;会话级缓存按 ctx.sessionPersistence.list() 的 revision 判断是否变化,只有 revision 变了的会话才重新 readSession,其余复用内存结果;没有 persistence 后端时退化为「每会话 60s TTL」。单次扫描并发上限 sessionConcurrency(默认 3),单会话读取超时 readTimeoutMs(默认 10s),单会话失败只记日志,不影响其它会话。
有一个坑需要单独说明:cordis.patch.yml 里的 id 是 loader 表的键,DSH 按 id 合并 bundle 补丁,后加载的覆盖先加载的。官方包已经占用 id: session-stats,如果本插件也用同名,官方侧 sessionStats 投影会静默不挂载,界面看不出异常,只是流式计时数据缺失。因此本插件的 loader id 固定为 session-stats-panel,并由 tools/selfcheck.mjs 断言守住,防止回退。
适用场景与注意¶
适合想在 Web 界面里直接看会话用量、成本估算和 DSH 进程状态的 DSH 开发者;做多厂商模型对比时,按模型分色的每日消耗和 Token 构成能省掉手工拆分。
注意事项:
1、插件以当前 dsh 进程的权限运行,安装前应检查源码与许可证(MIT)。
2、本包不修改 profile 配置、不监听端口、不写用户数据;宿主半只注册两条只读 HTTP 路由。
3、价格表是抓取日快照,模型官方价格会变,成本只能作为估算。
4、仓库自检脚本齐全:npm run selfcheck 会依次跑 tools/selfcheck.mjs(纯核心冒烟)、tools/selfcheck-host.mjs(假 ctx 跑路由)、tools/selfcheck-client.mjs(假环境渲染页面),可用来核对行为。
5、这是社区维护项目,GitHub 2 stars、分类为客户端,采用前先读源码更稳妥。
结尾¶
这个插件的价值在于把用量看板放进 DSH Web 侧栏,用各厂商原厂官方价目做本地成本估算,零第三方依赖、图表全部内联。目录页在 https://www.skillhub.cn/plugins/Oblivionis7999/dsh-session-stats-panel,仓库在 https://github.com/Oblivionis7999/dsh-session-stats-panel。需要说明的是,社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系,不要当作官方应用商店。