前言¶
用 DSH 跑长会话时,最常见的几个问题都藏在”这一次到底发生了什么”里:这一轮为什么慢、token 都花在哪个模型上、工具为什么失败、429 是哪一次触发的、模型实际看到的上下文和我以为的是不是一回事。
现有的排查方式通常是翻本地会话日志、手工统计 token、凭感觉压时间轴,结论很难落到一条时间线上,也不容易导出留档。dsh-session-view 做的事情是把负载、成本、时序和原文这几件事合并到一个面板里,按分区看,不需要在日志和表格之间来回切。
下面介绍这个插件。
这是什么¶
dsh-session-view(包名 @local/dsh-session-view)是一个 DSH 客户端插件,维护者是 NAS1112,分类为客户端,社区目录页显示 star 数为 0。它在会话页上方加了一个「工具 / 内容」两个标签,把一次会话的负载、成本、时序和原文放在一起看。
插件只读本地会话日志(~/.dsh/sessions/...),不发起网络请求,不上报任何数据。价格、密度、脱敏开关等设置存在浏览器 localStorage。
核心功能¶
工具页(四个分区)¶
- 概览:体检结论(一句话判断)、问题清单、重复调用检测、工具分布、失败原因。
- 成本:按模型的 token 结构与价格、子智能体自动汇总、手动补充、单价导入导出、配置基线。
- 时序:时间轴(可缩放、可框选)、瀑布图、轮次基线(Tukey 异常判定)、耗时分布、轮次对比。
- 运维:平均/峰值 TPM、平均/峰值 RPM、首字延迟 P95、限流事件(点开看每一次 429)。
明细:可搜索、排序、分页的调用表 + 限流表,支持「原文」定位和「追问」回填。
内容页¶
系统提示词 / 提示词组装 / 上下文 / 用户与助手消息,逐条可复制、可回填到输入框。
通用¶
⌘K命令面板,紧凑/舒适密度切换。- 导出 Markdown / TSV / 单文件 HTML,HTML 可搜索排序,支持脱敏。
安装与启用¶
前置¶
需要 DSH 桌面版或 Web 版,且已有 profile 目录 ~/.dsh/profiles/<profile-name>/(常见为 desktop)。
步骤¶
1、先放到固定位置,不要放临时目录,DSH 会通过 link 引用这个路径。
mkdir -p ~/dsh-plugins
# 方式一:git clone 本仓库
git clone https://github.com/NAS1112/dsh-session-view.git ~/dsh-plugins/dsh-session-view
# 方式二:下载 zip 解压
unzip dsh-session-view-*.zip -d ~/dsh-plugins
# 得到 ~/dsh-plugins/dsh-session-view/
2、把插件登记到 profile。编辑 ~/.dsh/profiles/<profile-name>/package.json,加两处:
{
"dependencies": {
"@local/dsh-session-view": "link:/Users/<you>/dsh-plugins/dsh-session-view"
},
"dsh": {
"profile": {
"bundles": [
"...",
"@local/dsh-session-view"
]
}
}
}
dependencies 里的路径必须是绝对路径,指向解压后的目录;bundles 数组里加上包名,DSH 启动时才会挂载它。
3、完全退出应用再打开,只刷新页面不够,bundle 列表在启动时读取。
4、验证:打开任意会话,页面上方应出现「工具 / 内容」两个标签,右上角有一行版本标记(如 2026-11-04 19:48)。
自检(可选)¶
cd ~/dsh-plugins/dsh-session-view
node smoke.cjs # 期望:ok: rendered tools tab / content tab
node jump-check.cjs # 期望:高亮、筛选、提示各项断言通过
两个脚本都用桩 React 执行组件树,不需要浏览器和真实数据。jump-check.cjs 需要本机存在一组会话日志,否则会跳过数据相关断言。
卸载¶
从 profile 的 dependencies 和 bundles 里删掉对应条目,删掉目录,重启 DSH。
典型用法¶
- 这轮怎么这么慢 → 「时序」页:时间轴可缩放、可框选,瀑布图定位最慢的工具调用,轮次基线(Tukey 异常判定)标出离谱的那一次。
- token 都烧在哪了 → 「成本」页:按模型拆 token 结构与价格,子智能体自动汇总,导入单价后与配置基线对比。
- 工具为什么失败 → 「概览」页的问题清单、失败原因、重复调用检测;「运维」页的限流事件可以点开看每一次 429 的细节。
- 模型到底看到了什么 → 「内容」页:系统提示词、上下文与每条消息逐条还原,可复制、可回填到输入框复现问题。
- 留档或分享 → 导出 Markdown / TSV / 单文件 HTML(自包含、可搜索排序、支持脱敏)。
入口:打开任意会话,页面上方出现「工具 / 内容」两个标签;⌘K 呼出命令面板。
文件说明¶
| 文件 | 作用 |
|---|---|
package.json |
插件清单:dsh.client 声明客户端入口,dsh.bundle.patch 指向 bundle 配置 |
index.js |
Host 侧入口(空实现,渲染全在客户端) |
client.js |
全部 UI 与数据计算,单文件 |
cordis.patch.yml |
bundle patch,向宿主注入 session-view 这一行 |
locale/en.json、locale/zh.json |
语言包 |
icon.svg |
图标 |
smoke.cjs |
冒烟测试:node smoke.cjs,验证四个分区都能渲染 |
jump-check.cjs |
跳转回归测试:验证「原文」和「明细定位」落到正确位置 |
适用场景与注意¶
适合已经在用 DSH、需要事后复盘会话的开发者:想从一次会话里读出成本结构、慢调用位置、限流事件和真实上下文,而不是靠手工翻日志。
需要注意两点:一是插件以当前 DSH 进程的权限运行,能读到该 profile 下的全部会话日志,安装前应先检查源码和许可证(package.json 声明为 MIT);二是它只做只读分析,不修改日志,也不发起网络请求,导出报告是自包含 HTML、不含脚本外链。
结尾¶
dsh-session-view 的价值在于把一次会话的几个关键维度收进同一个只读面板,排查时不用再在日志、表格和时间轴之间来回手工拼接。安装前把源码和许可证过一遍,装好后用 smoke.cjs 和 jump-check.cjs 跑一遍自检。
目录页:https://www.skillhub.cn/plugins/NAS1112/dsh-session-view
GitHub:https://github.com/NAS1112/dsh-session-view