dsh-session-metrics:一行看清 Session 的 Token、上下文与耗时

前言

在 DSH 桌面端里跑长对话或工具链时,输入框下方会有一条内置统计栏:Token、上下文占用、模型与工具耗时等。默认展示往往分散在多个格子或弹层里,想快速扫一眼「这一轮花了多少模型时间、缓存命中如何、轮次与步数走到哪」需要多点几下。dsh-session-metrics 是社区维护的客户端插件,用一行汇总关键指标,其余明细放在悬浮面板里,且不改动 DSH 核心、不写盘、不另起服务。

这是什么

dsh-session-metrics(npm 包名同名)由 fegnze 维护,面向 DSH 0.2.0-rc.2 与 0.2.1-rc.2 的 桌面端(desktop profile)。它在 conversation.composer.dock 注册 id: stats、priority: -1,遮蔽内置统计单元,在输入框下方替换为单行:计费 Token、上下文、缓存、模型耗时、本轮模型耗时、工具耗时、轮次、步数;鼠标悬停、聚焦或点击可打开与内置风格接近的明细面板。数字与 DSH 自带的 contextPressure、sessionStats、tokenUsage 投影对齐,Host 侧再从 Session 事件日志折叠出工具调用次数、失败数、Session 跨度等投影里没有的字段。

插件目录页:fegnze/dsh-session-metrics。源码与说明:GitHub。许可证 MIT(见仓库 LICENSE)。

核心功能

统计栏一行展示

主行展示:计费 Token、上下文使用、缓存命中、模型耗时、本轮模型(当前轮次计费与进行中的模型墙钟时间,空闲时显示最近一轮关闭值)、工具耗时、轮次、步数。Token 与上下文在面板内用 k/M 单位并显示占比;无数据时整行隐藏。

明细悬浮面板

悬停或点击主行打开面板,内容包括:工具调用次数与失败数、本轮模型时间、Session 时间跨度、上下文用量及分解、Token 拆分、按累计耗时排序的工具 Top 列表。按 Escape、点击外部或指针离开可关闭。

Host 侧从 Session 日志折叠

Host 订阅 session/event,将持久化日志折叠为按 Session 的计数器:turn/start、step/start 驱动轮次与步数;单步模型时间取 step/start 到 assistant/message 的间隔;tool/call / tool/result 配对统计各工具调用次数与耗时。时间差均基于日志提交时间戳,而非页面观察者墙钟。插件加载前已存在的 Session 会通过 session.snapshotEvents() 回填,后续按 seq 只折叠一次;Host 中已销毁的 Session 会从内存移除。

与内置投影协同、本地只读 API

主行读取 DSH 已提供的投影;Host 通过仅本机可访问的 /myspace-session-metrics/api(GET、校验 sessionId,并要求 loopback、合法 Host、同源 Origin/Fetch Metadata 及请求头 X-DSH-Session-Metrics: 1)每 2.5 秒轮询补充数据;页面不可见时暂停轮询。计数器仅在内存中,插件卸载或 DSH 重启后丢失,不上传、不落盘。

与新版 dock 的兼容

在较新 DSH 上,同优先级空覆盖也会遮蔽拆分的 activity、usage 单元,避免重复统计条,同时不隐藏其他插件的 dock 项;旁侧旧版上下文条隐藏(数值已并入主行)。根节点保留 data-composer-stats 钩子以便主题样式一致。禁用插件会释放覆盖并恢复内置统计。

安装与启用

通过 DSH 插件管理器安装 npm 包 dsh-session-metrics。仅支持桌面 profile,不要在 Web profile 安装。

包内已带原生 ModuleLoader Client,无需本地构建。开发时可安装 link:/absolute/path/to/dsh-session-metrics,修改 Host 后需重启 DSH(Host 模块缓存不会因刷新页面重载)。

运行环境要求(来自 package.json):Node >=22,dsh 为 0.2.0-rc.2 || 0.2.1-rc.2;peerDependencies 为 @deepseek-ai/dsh-app-boot 的对应 RC 版本。

典型用法

安装并启用插件后,打开任意 Session 对话页:有 Token 或上下文等投影数据,或 Host 能读到计数时,输入框下方会出现替换后的统计行。日常只需扫主行;需要工具失败数、Session 跨度或 Token 分解时,将指针移到该行或点击打开面板。

若投影与 Host 均无数据,统计行保持隐藏,行为与 README 描述一致。

维护者本地校验示例(来自 README,面向贡献者而非终端用户必做步骤):

npm test
node --check src/client.js

单元测试覆盖日志折叠、Host 路由边界与 Client 遮蔽逻辑;真实桌面会话中的主行与悬浮面板需单独做运行时验收。

适用场景与注意

适合谁: 经常在 DSH 桌面端调试 Agent、关心单 Session 的 Token/上下文压力、模型与工具耗时分布的开发者。

版本与平台: 仅列出的 DSH RC 桌面版本;Web 端不适用。

数据含义(README Limitations):

  1. Token 由模型提供方上报;某步无 usage 记录则只有耗时、无 Token,缓存占比显示为 — 而非臆造百分比。
  2. 工具耗时只统计在观测日志内完整开始并结束的调用;轮次结束时仍未结束的调用计为一次失败调用。
  3. 无 assistant 消息的轮次(例如中途取消)不计模型时间,轮次间隙「本轮模型」可能仍显示上一轮关闭值。
  4. 自 Host 可见日志起点计数;从存储恢复但未重放事件的 Session 只统计之后追加的事件。
  5. Host 读数为本地轮询计数,不是 tracing/计费源,也不上传数据。

安全与信任: 插件以当前 DSH 进程权限运行,会注入客户端 UI 并注册本地 HTTP 路由。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行判断是否纳入工作流。社区插件目录 skillhub.cn 为独立生态站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-metrics 把输入框下方的 Session 观测收成一行,明细按需展开,并与 DSH 内置统计投影对齐,适合桌面端日常调 Session 时使用。更多信息见目录页 https://www.skillhub.cn/plugins/fegnze/dsh-session-metrics 与仓库 https://github.com/fegnze/dsh-session-metrics。

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

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

小夜