前言¶
DSH 的官方能力里有 compaction(上下文压缩)和 session projection(会话投影),但当你想知道「这次启动为什么这么慢」「某个工具调用的 P95 耗时是多少」「这个会话的 token 花在哪」,官方没有直接给出答案。dsh-profiler 补的就是这一层运维视角的剖析与回档:启动归因、工具延迟采样、会话 token 归因,以及写文件类变更的可逆回档。它对标 Minecraft 服务端圈子里的 Spark(性能剖析)和 CoreProtect(审计回档)。
这是什么¶
dsh-profiler 是一个 DeepSeek Harness 插件,维护者是 Yuncan050115,托管在 https://github.com/Yuncan050115/dsh-profiler ,社区目录页在 https://www.skillhub.cn/plugins/Yuncan050115/dsh-profiler 。
它解决的问题有两类:一是观测——在 DSH 运行时拿到启动耗时、工具调用延迟、会话 token 的分布;二是回滚——在插件或 Agent 误改文件之后,按时间点恢复。两者都通过命令、Agent 工具和 HTTP 看板暴露,不需要额外搭建监控服务。
核心功能¶
README 给出一张能力清单,数据来源与输出如下:
| 能力 | 数据来源 | 输出 |
|---|---|---|
| 启动归因 | 进程 uptime 反推 + apply 计时 | 冷/热启动对照、插件挂载耗时、启动瀑布图 |
| 工具延迟 | session/event 的 tool/call ↔ tool/result 配对 | count / avg / p50 / p95 / p99 / 成功率 / 时间序列折线 / 火焰条 |
| token 归因 | 本地会话持久化(projcache) | 分类汇总、缓存命中率、Top 会话、环形图 |
| 变更回档 | 写文件类工具调用前的自动快照(append-only 历史库 + blob 去重) | 时间点列表、一键回档(可逆)、新文件回档即删除 |
| 生态扫描 | profiles 清单 | 第三方插件统计、跨会话记忆插件检测 |
| 诊断 | 阈值规则 | findings(启动慢 / P95 高 / 记忆缺口 / 缓存低…) |
直接可用的诊断结论由阈值规则生成,不需要自己写 SQL 或正则。
安装与启用¶
官方给的安装命令是:
dsh plugin --profile desktop add npm:dsh-profiler
也可以手动装:在 profile 的 package.json dependencies 里加 "dsh-profiler": "^2",在 bundles 数组里加 "dsh-profiler",npm install 后重启。手动方式适合需要锁版本或离线分发的场景。
插件当前版本是 2.0.0,许可证为 MIT,声明的 compatibility 为 0.2.1-rc.2: compatible,engines.node 要求 >=20。
典型用法¶
命令行侧,主命令是 /profiler,子命令覆盖 tools|sessions|plugins|json|export:
/profiler tools # 工具延迟汇总
/profiler sessions # 会话 token 归因
/profiler plugins # 生态扫描
/profiler json # JSON 输出
/profiler export # 导出
回档走两个命令:
/profiler rewind # 列出变更点
/profiler restore <id> # 恢复到某个变更点
回档前插件会自动存一个 restore-point,因此恢复操作本身也可以反向。新文件如果被回档,会直接删除。
Agent 侧有一个名为 profiler_report 的工具,Agent 可以自己调用,scope 取 summary/tools/sessions/plugins/rewind。
HTTP 侧默认暴露 /dsh-profiler 看板,包含延迟时间序列、火焰条、token 环形图、启动瀑布和回档时间线,页面 5 秒自刷新一次。机器读数据走 report.json 和 rewind.json,恢复走接口:
GET /dsh-profiler/report.jsonGET /dsh-profiler/rewind.jsonPOST /dsh-profiler/rewind/restore
跑一遍插件自带的测试可以验证契约、采样和回档全链路:
node test/smoke.mjs # 契约 + 采样 + 回档全链路(快照→修改→恢复→新文件删除)
node test/edge.mjs # 降级与脏数据场景
适用场景与注意¶
适合两类人:一是自己维护 DSH profile、想定位启动慢或工具慢的插件作者;二是希望在 Agent 误改文件之后能按时间点恢复,而不是靠手工 diff 的运维角色。
几个使用上的事实需要知道:
- 插件以当前 dsh 进程的权限运行,命令、工具和 HTTP 端口的能力边界与 DSH 进程一致。安装前应先阅读源码,确认它是否符合你的安全要求。
- 许可证是 MIT,源码可以自由看、自由改。
- 设计上有一处刻意的取舍:profile 的
node_modules下没有@deepseek-ai/*软链,因此插件零外部依赖,只用node:fs/os/path/crypto/url,工具和命令定义按官方源码契约手工构造。也就是说它不依赖 DSH 内部包,升级 DSH 时契约变动需要由插件自己跟进。 cordis.patch.yml声明了 bundle patch,属于需要留意的改动点。- README 给出的实测基线是:2026-10-23,DSH 0.2.1-rc.2,Windows 环境,冷启动 11,738 ms / 热启动 4,391 ms / 插件挂载约 1.5 s / 6 进程 RSS 约 2 GB / 37 会话累计 3300 万 tokens / 缓存命中 97.5%。这是作者自己的环境数据,只作参考,不代表你的机器也长这样。
结尾¶
dsh-profiler 的价值在于把「启动归因 / 工具耗时 / token 归因 / 变更回滚」这四件事收进一个插件,避开了自建监控的成本。如果你已经在跑 DSH 并关心这些指标,可以先装起来用 /profiler 看一眼;如果只是想知道插件生态里有哪些工作流类工具,目录页可以用来做一次横向对比。
目录页:https://www.skillhub.cn/plugins/Yuncan050115/dsh-profiler
仓库:https://github.com/Yuncan050115/dsh-profiler
需要说明的是,SkillHub 是独立的 AI Skills 社区站点,与 DeepSeek / 幻方没有官方从属关系。