メインコンテンツへスキップ
N

dsh-session-timing

neverwocao/dsh-session-timing

Wall-clock session and turn timing for the DSH Web GUI: a timer chip in the session header shows the session total, every finished turn shows its own duration above the action row, and a sidebar panel totals today, the last 7 days, the last 30 days or all sessions. The numbers are folded from turn/start and turn/end in the session log, so paging, compaction and restarts do not change them.

インストール

dsh plugin --profile web add github:neverwocao/dsh-session-timing

README

会话耗时 · 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

関連プラグイン