READMESource: main@e4f097ac
会话耗时 · dsh-session-timing
给 DeepSeek Harness Web UI 用的会话耗时插件:看每个会话用了多久、每一轮用了多久,并按时间段汇总。
| 想看什么 | 在哪里看 |
|---|---|
| 每个会话的总耗时 | 打开会话时标题栏右侧的 ⏱ 累计 12m 10s 胶囊;以及「会话耗时」面板里每个会话一行 |
| 每一轮的耗时 | Chat 中每一轮结束后、操作行上方:本轮 2 · 3m · 08:52:30 → 08:55:30 |
| 一段时间内的总耗时 | 侧边栏「会话耗时」面板:今天 / 近 7 天 / 近 30 天 / 全部 |
数据全部来自会话日志(turn/start、turn/end 两种事件),所以翻页、压缩上下文、重启 Harness 都不会让数字变化。
安装
要求:
- Node.js ≥ 20
- pnpm 在 DSH 进程的
PATH上(DSH 用它安装插件) - 带
dsh plugin命令的 DSH
一行安装(把 web 换成你的 profile 名,桌面版通常是 desktop):
dsh plugin --profile web add github:Neverwocao/dsh-session-timing#v1.0.0
装完重启 dsh web(插件行、客户端 bundle 都是启动时扫描的),再打开「插件」面板确认 会话耗时 已启用。
也可以用发布包或本地目录:
# 从 tag 的 tar 包安装
dsh plugin --profile web add https://github.com/Neverwocao/dsh-session-timing/archive/refs/tags/v1.0.0.tar.gz
# 本地开发:直接链接一份 checkout
dsh plugin --profile web add link:/绝对路径/dsh-session-timing
卸载:dsh plugin --profile web remove dsh-session-timing。
它是怎么做的
一个 Host 投影单元 + 一个 Client 半,都是公开接缝:
- Host(
index.js)注册sessionTiming会话投影单元,只折叠turn/start和turn/end。其余事件原样返回同一个 state 引用,因此对热路径零成本;值可以随投影缓存持久化,冷读也能从日志重算。 - Client(
client.js)挂在四个位置:会话标题栏、每轮的操作行前、侧边栏面板图标、主面板页面。当前会话通过 Session 绑定的投影读面订阅,不轮询;整个语料通过ctx.remote.session.list的投影值取,只有缺值或过期的行才逐条精确重算。
口径
| 名称 | 含义 |
|---|---|
| 轮次耗时 | turn/end 时间减 turn/start 时间,包含工具执行与等待 |
| 会话总耗时(活跃时长) | 所有已结束轮次之和 |
| 时间跨度 | 第一轮开始到最后轮结束;会话中间闲置时它大于活跃时长 |
| 时间段总耗时 | 所选时间段内各会话活跃时长之和 |
- 会话按最后活动日归档,所以「今天」指的是今天有过活动的会话。
- 正在进行的轮次不计入总量,只在标题栏胶囊里实时累加显示。
- 某一轮没有落
turn/end(崩溃、强杀)时,用下一轮的turn/start作为它的结束时间,历史保持单调。
开发
仓库没有依赖,测试只跑纯函数:
node --test # 或 npm test:9 个折叠/校验用例
npm run check # node --check 两个入口文件
目录:
index.js Host 插件:sessionTiming 投影单元(纯折叠)
client.js Client 插件:4 个挂载点 + 面板页面
cordis.patch.yml bundle patch:插入一条 Host 行
package.json dsh.bundle / dsh.client / 兼容版本范围
locale/{zh,en}.json 插件管理器中显示的名称与描述
icon.svg 插件图标(自绘秒表)
test/ 投影单元测试
改了 Client 代码后:本仓库是 link: 安装时,重启 dsh web 或刷新页面即可加载新 bundle。
兼容性
- 在 DSH
0.2.1-rc.5上验证;engines.dsh限定<0.3.0-0。 - 依赖的公开接缝:
sessionProjections(投影注册与读面)、slots(四个挂载点)、ctx.remote.session(会话列表与投影读取)。
已知限制
- 只折叠轮次边界,不细分每一步(step)的耗时;模型时间与工具时间请用 DSH 自带的
sessionStats统计条。 - 面板单次最多读取 120 个会话,超出会在页面底部提示。
- 面板不做自动刷新:切时间段或点「刷新」才会重算。
许可证
MIT © 2026 wzp168
No comments yet. Be the first to write one.