Back to home@Shizuku-keop

dsh-health

Session loop-health diagnostics for DeepSeek Harness: oscillation/stall/near-repeat/per-tool/token/compaction profiles + auditable 0-100 score. CLI + live watch bundle.

Stars
1
Language
JavaScript
Created
Aug 26, 2026
Updated
Aug 26, 2026
GitHub repo

Introduction

dsh-health

DeepSeek Harness 会话循环健康度诊断:振荡 / 卡住 / 参数漂移 / per-tool / token / 压缩画像 + 可审计健康评分。

npm 包名:dsh-health-clidsh-health 在 npm 已被占位保留);命令仍是 dsh-health。 当前里程碑:M6(发布完成:GitHub Release + BWH 收录 + 官方展示)。设计文档见 DESIGN.md,进度见 docs/PROGRESS.md

安装

npm i -g dsh-health-cli      # npm 发布版(命令 dsh-health)
# 或源码安装:npm i -g D:\path\to\dsh-health

零运行时依赖,要求 Node ≥ 22.19(内置 node:zlib zstd 与 node:sqlite 支持)。

快速上手

dsh-health               # 等价 scan:列出最近会话
dsh-health scan          # 列出会话(--sort time|score|tokens)
dsh-health diag <id>     # 解码一个会话,打印 meta + 事件统计
dsh-health report <id>   # 全检测器分析:健康评分 + 发现清单
dsh-health verify        # 自检:后端可读 + 检测器可跑(30 秒)
dsh-health --help

CLI 自动定位本机 $DSH_HOME/sessions--root <path> 可覆盖(隔离环境/测试);--sqlite <path> 显式指定 SQLite 库(默认自动探测)。

当前能力(M1–M6 完整)

  • 双后端会话读取:JSONL+zstd(多帧容器、packed 行展开、seq 校验、torn-tail)与官方 SQLite 存储(schema 17、只读打开、packed 行/zstd blob/varint 解码、外库拒绝)——统一接口自动嗅探;
  • 7 检测器 + 0–100 可审计评分:振荡 / 参数漂移 / 卡住 / per-tool / token 成本 / 压缩健康 / 综合评分;每条发现带建议动作证据 seq
  • live 实时镜像dsh-health-live bundle):静态 cordis 插件监听 session/event 增量落盘 $DSH_HOME/.dsh-health/<sessionId>.jsonl——纯观察,不注入、不干扰 harness 循环;
  • watch 实时告警watch <id> 单会话跟随(从日志 seed 历史 + live 增量 fold)、watch --all 多会话概览、--interval 控制轮询(默认 2s);
  • scan 排序--sort time(默认,header-only 快)/ --sort score|tokens(全量分析,--max-scan 上限防慢,默认 50);
  • 三格式输出--format text|json|md(report 与 scan 均支持);
  • 退出码门槛reportscore < 60 → exit 2(CI 可用;边界 60 不触发);
  • verify 自检:JSONL/SQLite 发现、完整读 + 检测器、SQLite 只读打开——PASS/FAIL 输出;
  • 与其他插件兼容(DESIGN.md §13,真机实测):只有 source.kind === 'user' 算用户输入(dsh-mnemon 等插件注入不污染判定);未知事件类型/消息来源宽容跳过。

安装 live bundle(可选,watch 实时功能需要)

dsh plugin --profile web add dsh-health-live   # npm 或本地路径
# 重启 dsh web 后生效;watch 无 live 时自动回退全量日志读

测试基础设施(M4)

SQLite 无真机数据(本机 rc.2 仍写 JSONL)——采用权威 fixturescripts/build-sqlite-fixture.mjs 用官方 @deepseek-ai/dsh-session-persistence-sqlite(npm 0.1.1-rc.2)把真实会话事件写入 schema-17 库,验证读取器与官方写路径的互操作。官方包不可用时 SQLite 测试自动跳过(CI 无依赖仍跑 JSONL)。

路线图

M内容状态
M1仓库骨架 + JSONL 后端读取 + diag 骨架
M27 检测器 + 0–100 可审计评分
M3scan 排序 / --format md / 退出码门槛
M4SQLite 后端(官方存储迁移)+ verify 自检
M5dsh-health-live bundle + watch✅ 已本机验证
M6发布:GitHub Release + BWH 收录 + 官方展示
M7web 健康卡片(ConversationNode)+ 插件活动可见✅ 代码完成,重启后生效

Web 健康卡片(M7)

dsh-health-live bundle 现包含浏览器端 client.js:注册一个 ConversationNodeDefinition (kind health),把实时会话事件流折叠进与 CLI 相同的检测器,每个 turn 结束在会话流中 渲染一张健康卡片(评分徽标 + 告警列表 + 建议动作 + 插件活动)。

# 安装(bundle 已含 client.js + dsh.client 声明)
dsh plugin --profile web add dsh-health-live
# 重启 dsh web 后,client-modules 扫描到 dsh.client 声明 → 卡片出现在会话流
  • 浏览器端与 CLI 共用同一套检测器(零依赖纯函数打包进 client.js),评分一致;
  • 纯观察:只读事件流、折叠、渲染,不注入任何消息(§13 契约延续);
  • 构建:pnpm run build:bundle(tsdown → lib/client.js → 同步 bundle/)。

测试

npm test       # node --test --test-isolation=none "tests/*.spec.js"(67 项)
npm run smoke  # 合成会话冒烟;或 node scripts/smoke-test.mjs <真实日志>

License

MIT