dsh-conversation-stats:DSH Web GUI 的会话统计插件

前言

在 DSH Web GUI 里跑智能体任务时,一次会话可能包含多轮对话、多次工具调用和多次模型调用。轮数、步数、token 用量、缓存命中、LLM/工具耗时这些信息分散在会话日志里,逐条打开历史会话不容易核对。

dsh-conversation-stats 面向这个问题:在 DSH Web GUI 顶部新增「会话统计」tab,把会话数据从 ~/.dsh/sessions 下的会话日志中解析出来,以总览和明细两种视图展示。下面介绍它的能力、安装方式和需要注意的点。

这是什么

dsh-conversation-stats 是 DeepSeek Harness(DSH)Web GUI 的会话统计插件,由 wellcover 维护,许可证为 MIT。

它会在顶部「对话」「轨迹」之后注册 conversation.view tab,排在「对话」「轨迹」及用量插件的 tab 之后。页面列出每个对话的轮数、步数、模型调用次数、token 用量(输入 / 输出 / 缓存),并汇总 LLM/工具耗时、模型分布、结束原因;点击会话可展开逐条模型调用明细与工具调用统计。

它不依赖常驻监听,直接解析 ~/.dsh/sessions/**/session.jsonl.zstd,因此历史对话与当前对话同样可见。

核心功能

会话总览

  • 会话总览表包含:标题/片段、轮数、步数、调用、输出 tok、输入 tok、缓存 tok、缓存命中率、最后活跃。
  • 默认按最后活跃倒序。
  • 跨工作区会话一并列出,每行标注 cwd
  • 汇总 chips 显示:会话数、总轮数、总步数、总模型调用、总 token。

缓存命中率

v1.0.6 引入缓存命中率列:

命中率 = 缓存读 /(输入 + 缓存读)

分子分母都为 0 时显示「—」。

会话明细

点击某个会话后,可查看:

  • 会话信息卡
  • 工具调用表:次数、总耗时、失败数
  • 逐条模型调用明细表:时间、模型、结束原因、输入、输出、缓存、工具

刷新与删除

  • 页面显示扫描时间。
  • 支持手动「刷新」,页面 60 秒自动刷新。
  • 列表结果缓存 30 秒,?refresh=1 可强制重扫。
  • v1.0.2 起,总览表最右侧有「删除」列;点击红色确认弹层后,删除对应会话目录 ~/.dsh/sessions/…/<sessionId>,其中包括 session.jsonl.zstd

加载归档会话

v1.0.3 起,总览表有「加载」列。对已归档会话显示绿色「恢复」按钮,点击后会话 id 从 DSH storages/workspace.jsonglobal.archivedSessionIds 移除,使该会话重新出现在 DSH 对话列表。该操作需要重启 DSH Web 后生效。

安装与启用

环境要求

  • Node 引擎要求:>=22
  • 插件会读取当前 dsh 进程可访问的会话目录;安装前应检查源码和 MIT 许可证。

从 GitHub 安装

dsh plugin --profile web add github:wellcover/dsh-conversation-stats

如需锁定稳定版本 tag:

dsh plugin --profile web add github:wellcover/dsh-conversation-stats#v1.0.6

从源码打包安装

cd dsh-conversation-stats
npm pack
dsh plugin --profile web add dsh-conversation-stats-1.0.6.tgz

重启

装完重启 dsh web,或重新打开桌面应用。

手动安装

如果没有 pnpm,可以按下面步骤手动安装:

1、把包装拷到 ~/.dsh/profiles/web/node_modules/dsh-conversation-stats

2、在 profile package.jsondsh.profile.bundles 追加 "dsh-conversation-stats"

3、在 cordis.patch.yml 追加:

- insert:
    - id: conversation-stats
      name: 'dsh-conversation-stats'
      inject:
        - fs
        - webServer

4、重启 dsh web

典型用法

1、打开 DSH Web GUI 顶部「会话统计」tab。

2、查看总览表、汇总 chips 和会话明细。

3、需要重新扫描时,点击「刷新」,或等待 60 秒自动刷新。

4、对已归档会话点击「恢复」,然后重启 DSH Web。

5、确认要删除某段会话时,在总览表最右侧「删除」列操作,并等待确认弹层。

数据口径

  • 会话扫描路径:$DSH_HOME/sessions,默认是 ~/.dsh/sessions
  • 数据文件:.jsonl.zstd 会话日志,直接解析,不做常驻监听。
  • token 字段:inputTokensoutputTokenscacheReadTokenscacheWriteTokens;不同提供方可能缺少某些字段,缺省按 0 计。
  • 缓存命中率:缓存读 /(输入 + 缓存读)。
  • 列表缓存 30 秒;?refresh=1 强制重扫;页面 60 秒自动刷新。

适用场景与注意

适合这类需求:

  • 需要在 Web GUI 里快速核对多段 DSH 会话的轮数、步数和 token 用量。
  • 需要查看工具调用耗时、失败数、模型调用明细和结束原因。
  • 需要管理历史会话,包括删除会话或恢复已归档会话。

注意:

  • 插件以当前 dsh 进程权限运行,会读取并可能删除会话目录;安装前建议先阅读源码,确认许可证为 MIT。
  • DSH_HOME 指向别处或 ~/.dsh/sessions 为空,列表可能为空。
  • 若顶部没有「会话统计」tab,先确认 profile bundles 包含本包,并重启。
  • 若提示会话统计加载失败,检查 cordis.patch.yml 中是否存在本插件行,且 inject 包含 fswebServer,然后重启。
  • 删除会话会删除对应目录,不是仅从界面隐藏。
  • 恢复归档会话必须重启 DSH Web 后生效。

链接

GitHub: https://github.com/wellcover/dsh-conversation-stats

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

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

Xiaoye