dsh-health-readout:用声明式配置把多处读数合成一条健康结论

前言

在 DSH 里跑智能体或工作流时,模型往往只能看到对话上下文,很难系统性地回答「现在算不算健康」。常见做法是临时 cat 某个状态文件、或让模型自己拼凑 JSON,但读不到和读到了却判错是两回事:前者应明确为「无法判断」,后者需要可重复的判定规则。

下面介绍维护者 laa1991 在 GitHub 仓库 laa1991/dsh-health 发布的 dsh-health-readout(社区目录分类:工作流)。它是一个只读的 DSH 插件:你在配置里声明「从哪里读、什么算健康、异常对应什么结论」,插件组合已有读数(本地文件、JSON 字段、日志尾部、HTTP JSON 等),返回一条总判决及每条读数的明细。它不写入、不持久化状态、也不充当新的真相来源。

这是什么

dsh-health-readout(npm 包名 dsh-health-readout,当前版本 0.1.0,MIT 许可证)面向 DeepSeek Harness 用户:把分散的健康信号收成一次工具调用结果,供模型或编排逻辑使用。插件通过 Cordis patch 暴露工具 health_readout,无浏览器端、无设置界面;结论以工具返回值形式进入会话。

三条内置规则

README 强调这三条由类型与测试强制,而非约定俗成:

  1. 「无法得知」绝不能当成正常。 读不到的来源产出 unknown,不会变成 ok、0 或 false;unknown 会单独展示并影响总判决。
  2. 每条判定必须可被证伪。 selftest: true 时会对每条声明的 criterion 喂反例;若某条 criterion 始终为绿,会报告为不可证伪的「装饰项」。
  3. 每条 reading 必须写 blind spot。 blind 为必填,说明该读数看不清什么,避免误读为全覆盖。

核心能力

声明式 spec

在数据目录下的 readings.json(默认可从仓库 examples/readings.example.json 复制后修改)中定义 readings 数组。每条 reading 包含 id、title、source、healthy,以及必填的 blind。

示例结构(与 README 一致):

{
  "readings": [{
    "id": "queue-depth",
    "title": "Queue depth is under the ceiling",
    "source":  { "kind": "json-field", "path": "status.json", "field": "queueDepth" },
    "healthy": { "op": "lt", "value": 8, "bad": "degraded" },
    "blind":   "A single sample: a queue that drains and refills between samples looks identical to a quiet one."
  }]
}

数据源种类(source kind)

kind 含义 必填字段
file-age-seconds 文件距上次写入的秒数 path
file-size 字节数 path
file-exists 路径是否存在(false 表示已知不存在) path
json-field JSON 文件内点分路径字段 path, field
jsonl-last-field JSONL 最后一条可解析行的点分字段(尾部读取) path, field,可选 maxBytes
text-count 文件尾部 maxBytes 内正则匹配次数 path, pattern,可选 maxBytes, flags
dir-count 目录下文件数,可按后缀过滤 path,可选 suffix
http-json-field HTTP JSON 端点内的点分字段(带超时) url, field,可选 timeoutMs

spec 内相对路径相对于 dataDir 解析;支持 ~ 与 ${dataDir} 展开。

判定运算符与状态

healthy.op 支持:lt、lte、gt、gte、eq、neq、between、matches、exists、absent。

不满足 healthy 条件时,healthy.bad 指定该条读数的状态(默认 degraded)。严重度序列为:ok < notice < unknown < degraded < broken;最差的 reading 决定总判决。unknown 故意高于 notice,避免在看不见的部分时仍给出自信的 ok。

工具 health_readout

只读调用,可选参数:

  • only:逗号分隔的 reading id,只评估子集。
  • selftest:为 true 时额外验证每条 criterion 能否变红。

输出列出每条读数的值、判决、原因与 blind spot;读不到的项单独列出(README 原话:"Could not read" is not "fine".)。

安装与配置

安装

配置项解析顺序:插件行内 config: → 环境变量 → 内置默认值。

官方安装方式(README Install 节):

dsh plugin --profile <name> add dsh-health-readout      # npm
dsh plugin --profile <name> add ./dsh-health-readout-0.1.0.tgz
dsh plugin --profile <name> add <git-url>               # prebuilt: no build step, no postinstall

包内即为可运行文件,无 build、无 prepare、无运行时依赖;从 git URL 安装时不需要用户授予构建权限。运行环境要求 Node.js >= 18.0.0。

配置项

含义 config key 环境变量 默认值
readings 所在目录 dataDir DSH_HEALTH_READOUT_DATA_DIR ~/.dsh-health-readout
声明文件 specFile DSH_HEALTH_READOUT_SPEC dataDir 下的 readings.json
只评估部分 id only DSH_HEALTH_READOUT_ONLY 全部

注意: dataDir 刻意不是 DSH 平台目录。DSH 升级可能重建自身目录;用户声明的 readings 应放在你完全控制的 path 上,避免被升级清掉。

典型用法

  1. 选定 dataDir(默认可用 ~/.dsh-health-readout,或通过 config / DSH_HEALTH_READOUT_DATA_DIR 指定)。
  2. 将仓库中 examples/readings.example.json 复制为 <dataDir>/readings.json,按你的监控对象编辑 readings。
  3. 在 profile 中安装插件并填写上述 config(如需)。
  4. 在 DSH 会话中调用工具 health_readout;需要抽检 criterion 时传入 selftest: true;临时只看几条时传 only。

维护者提供的测试命令(无额外测试框架):

node --test test/criteria.test.mjs test/sources.test.mjs test/spec.test.mjs test/readout.test.mjs

README 写明套件自报用例数(撰写时为 46);若与文档数字不一致,以套件输出为准。

适用场景与限制

适合: 已有状态文件、JSON 快照、日志尾部或只读 HTTP 指标,希望 agent 在一次工具调用里得到统一「ok / notice / unknown / degraded / broken」结论,且不想在插件里再写查询或写库。

不适合或需知:

  • 不做跨行聚合:例如「JSONL 里还有多少条未关闭」若需折叠多行,应在产生快照的上游完成,spec 只读已有聚合值。
  • 无历史:每次 reading 是当前单点采样;趋势需外部 recorder(写入,超出只读范围)。
  • 无 changed-within 类算子:与历史比较需要状态。
  • unknown 会拉高判决:缺文件即影响总结论,这是刻意设计。
  • 信任模型: spec 可读取 dsh 进程能读到的任意路径;谁写 spec,谁对路径负责。
  • 权限: 插件以当前 dsh 进程权限运行;安装前请自行审阅 源码与 MIT 许可证。

社区目录 skillhub.cn 上的 laa1991/dsh-health 与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,目录是独立站点上的发现入口。

结尾

dsh-health-readout 把「读哪里、怎样算健康、失败算什么」写进一份 JSON 声明,通过只读工具 health_readout 输出一条可审计的总判决。若你的工作流已经产出文件或接口型指标,又希望模型别靠猜,可以按 README 安装并在自管目录维护 readings.json。

  • 目录页:https://www.skillhub.cn/plugins/laa1991/dsh-health
  • GitHub:https://github.com/laa1991/dsh-health
羽毛球分组比赛记分
小程序二维码

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

小夜