ZachT11/dsh-runtime-env-watch ↗★ 0

dsh-runtime-env-watch

Periodic AI runtime, hardware, and remote-device status checks for DeepSeek Harness 适合需要实时监控系统硬件指标及自定义服务状态的运维人员。

パッケージ
dsh-runtime-env-watch
互換性
未検証
Harness ピア範囲
>=0.2.0-rc.2 <0.3.0-0
Cordis ピア範囲
~4.0.5
バージョン
0.2.0
ライセンス
MIT
最終更新
2026/10/26

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:ZachT11/dsh-runtime-env-watch

ドキュメント

README 全文を読む ↗

配置检查项

检查项定义在 runtime-checks.json,路径由 checksFile 控制,默认相对于当前 workspace。它是普通 JSON,支持热加载;不要提交带密钥的实际配置,仓库已把 runtime-checks.json 加进 .gitignore。

完整样例见 runtime-checks.example.json。示例里的 battery、gpu、robot 需要机器上真的有对应设备或服务;没有就删掉对应的 check 或 metrics。

最小硬件示例:

{
  "checks": [
    {
      "id": "hardware",
      "kind": "hardware",
      "intervalSeconds": 15,
      "metrics": ["cpu", "memory", "disk", "uptime"]
    }
  ]
}

通用字段

字段说明
id唯一名称,报告和 status_check({id}) 用它
kindhardware / http / command / tcp / file
intervalSeconds该检查的周期,5–3600,缺省用 statusIntervalSeconds
timeoutMs单次检查超时,缺省由周期推导,最多 15 秒
enabledfalse 时不执行
expect阈值/断言,见下

hardware

metrics 可选:cpu、memory、disk、uptime、battery、gpu、processes、ports、temperature。

  • cpu / memory / uptime:Node os,无外部依赖。
  • disk:Node fs.statfs;diskPaths 可指定盘符/挂载点,默认系统盘。
  • battery:PowerShell Win32_Battery(WMI),笔记本/带电池设备可用。
  • gpu:nvidia-smi,没有 NVIDIA 驱动会记为失败项。
  • processes / ports:PowerShell Get-Process / Get-NetTCPConnection。
  • temperature:WMI MSAcpi_ThermalZoneTemperature,很多主板不暴露,失败会明确写出。

示例:

{
  "id": "battery",
  "kind": "hardware",
  "intervalSeconds": 60,
  "metrics": ["battery"],
  "expect": { "battery.percent": { "min": 20 } }
}

http(远程机器人/服务)

{
  "id": "robot",
  "kind": "http",
  "intervalSeconds": 10,
  "url": "http://192.168.1.50:8080/api/status",
  "headers": { "Authorization": "Bearer REPLACE_ME" },
  "fields": {
    "battery": "battery.level",
    "mode": "mode",
    "x": "pose.x",
    "y": "pose.y",
    "error": "error"
  },
  "expect": {
    "battery": { "min": 20 },
    "error": { "equals": null }
  }
}
  • fields 用点路径从 JSON 里取值,也支持 [0] 数组下标。
  • 没有 fields 时,整个 JSON 对象作为数据;_status 是 HTTP 状态码。
  • 非 2xx 直接算失败;超时由 timeoutMs 控制。

command(SSH/ROS/本地脚本)

{
  "id": "robot-camera",
  "kind": "command",
  "intervalSeconds": 15,
  "command": ["ssh", "robot@192.168.1.50", "cat /run/camera.json"],
  "json": true,
  "fields": { "fps": "fps", "online": "online" },
  "expect": { "fps": { "min": 5 } }
}
  • command 是 argv 数组,不经过 shell,避免引号/注入问题。
  • json: true 时解析 stdout;否则把 stdout 放进 stdout 字段。
  • 可以用 SSH、ros2 topic echo --once、本地桥接脚本、PLC/机器人厂商 CLI。
  • 命令以 Host 权限执行,只配置可信命令。

tcp(端口/链路)

{
  "id": "robot-link",
  "kind": "tcp",
  "intervalSeconds": 5,
  "host": "192.168.1.50",
  "port": 8080
}

连不上/超时记为失败。

file(心跳文件)

{
  "id": "robot-heartbeat",
  "kind": "file",
  "intervalSeconds": 15,
  "path": "D:/robot/heartbeat.json",
  "maxAgeSeconds": 60,
  "minSize": 1
}
  • exists: false 表示“文件必须不存在”。
  • minSize / maxAgeSeconds 不满足会告警。

expect 断言

expect 的 key 是数据路径,value 支持:

  • min / max:数值范围
  • equals:严格相等(对象/数组按稳定序列化比较)
  • contains:字符串包含
  • exists:是否存在(null 是否算存在由这条规则决定)

不满足时该 check 标记为“异常”,报告里带具体原因。

插件配置

字段默认说明
enabledtrue总开关(volatile,切换后下一次请求生效)
probeSeconds30运行时环境(runtime_env)的最小探测间隔
statusIntervalSeconds30检查项没有写 intervalSeconds 时的默认周期
reminderMinutes10无变化时的心跳间隔
staleMinutes10状态超过该年龄时在报告里标“数据已过期”
watchFiles见源码运行时巡检关注的关键文件
checksFileruntime-checks.json检查项配置文件,相对 workspace 或绝对路径
sectionOrder21静态规则段在系统提示里的位置

probeSeconds、statusIntervalSeconds、reminderMinutes、staleMinutes、watchFiles、checksFile 是普通配置,不在自动设置表单里;改 profile 的 cordis.patch.yml 后重启。

使用

正常对话即可。第一次 agent/pre-step 后会看到:

【AI 运行环境巡检】第 3 轮 · 第 1 步 · 采集于 2026/10/26 07:51:55(0 秒前)
工作目录:D:/Project/DSH/寻找
平台:Windows_NT 10.0.26100(x64) / Node v24.21.0 / git version 2.56.0.windows.1
Shell:PowerShell 7.6.6
Git:当前目录不是 Git 仓库(git 可用)
关键文件:package.json 20:06:21;package-lock.json 20:06:21
变化:首次巡检,无历史可比
规则:……

【硬件与远程状态】按配置周期巡检;采集于 2026/10/26 07:51:55
- 硬件:正常;CPU 12%(12 核);内存 63%(9.6 GB/15.2 GB);磁盘 C:\ 已用 63.2%(剩余 73.6 GB);开机 6d 15h
- robot:正常;battery=78;mode=AUTO;x=1.2;error=null
异常:robot battery=12 < 20
  • 让模型“检查运行环境”:调用 runtime_env。
  • 让模型“检查所有状态/机器人状态”:调用 status_check;可传 { "id": "robot" } 或 { "refresh": true }。
  • 设置 → 插件里的 runtime-env-watch 自动表单只有 enabled 一个开关。