前言¶
长期跑 DeepSeek Harness(DSH)时,常见问题不是「不知道哪里坏了」,而是信息分散:崩溃日志在 AppData、配置备份是 patch 旁的 .bak-* 兄弟文件、插件一改就要考虑 boot 风险。自己逐条查可以,但重复劳动多,且把清理、停插件、备份配置直接交给 Agent 又缺少统一的确认与审计门。
下面介绍社区插件 dsh-steward(仓库 stallenlu/dsh-steward,npm 包名 @sidady/dsh-steward)。它在默认态做只读健康检查,需要动环境时走 plan → 一次性指纹 → confirm → audit 的授权链路;当前资料中的版本为 v0.9.14,分类为 admin-security,维护者为 stallenlu。
这是什么¶
dsh-steward 是一个 DSH Cordis bundle,同时包含 host 与 Web client。package.json 中的描述概括为:只读体检(启动崩溃、备份新鲜度、配置漂移、工作区增长、插件更新、宿主版本兼容、模型可用性等),外加显式授权的动作层(清缓存、加密备份易失数据、插件 enable/disable、知识沉淀、发现项静音、切换默认模型等)。
插件零 npm 依赖(仅使用 Node 内置模块),也不 import 其它插件的内部模块;对 disk-cleaner、config-manager 等能力通过 HTTP 路由与宿主服务按需调用,缺失时 fail-soft 降级,不把 Web UI 整体拖垮。运行要求 Node ≥ 22,许可证 MIT。
核心功能¶
只读体检(report)¶
体检侧刻意「重新实现」解析逻辑(如 crash 日志、.bak-* 备份提示),避免跨包耦合。资料中列出的主线包括:
- 启动后诊断:读桌面版 crash 日志,解析未激活项与 import 失败,结合新鲜度门与归因门点名可疑插件。
- 配置与变更风险:关注
cordis.patch.yml.bak-*、插件变更订阅、配置指纹漂移(相对上次基线)。 - 日常运维项:工作区体积与增长、插件市场缓存对照的更新检出、备份新鲜度、报告
coverage可信度自检、静音项带过期时间等。 - 模型巡检(v0.9.x):默认模型哨兵探针(有并发与超时预算)、跨服务商可用率台账;对 404/422 与配额/网关/busy 区分对待,不代删模型。
报告可通过四种出口使用(README 原文):host 前缀路由 /api/dsh-steward/(同源校验 + POST)、Agent 工具 dsh_steward_report、侧栏面板与右侧栏 Tab。v0.4 起还有 boot 后约 45 秒自动体检,以及在 systemPrompt 注入「用户报崩溃先调体检」的护栏(不可用时降级为侧栏红点)。
授权执行(act)¶
默认不写盘、不自动重启。授权后可执行的七类动作为:clean(经 disk-cleaner 的 safe 级清理)、backup(DCA1 加密导出,口令不经 Agent)、disable / enable、knowledge、ack / unack。链路在 lib/actions.js:plan 人话摘要、一次性指纹、confirm 门、归因门、审计留痕。
执行入口:工具 dsh_steward_act,或面板上的动作卡。L2 对话框可用规则式 intent.js(零 token)或可选的 brain.js 模型理解(仍只翻译、白名单校验、不自动执行)。
Web 面板与运维可见性¶
Client 提供三 Tab 面板、动作卡、设置项(v0.8.0 起阈值写入 $DSH_HOME/dsh-steward/settings.json)。v0.9.14 起路由与工具通过 ctx.inject 延迟注册,ping 响应可带 wiring.route(registered / pending / failed: ...),用于区分「面板能打开但 /api/dsh-steward/ 未挂上」这类静默失败。
运行数据目录(资料原文):audit.jsonl、knowledge.jsonl、trend.json(≤400 条)、acked.json、last-report.json、settings.json、config-baseline.json 等,位于 $DSH_HOME/dsh-steward/。
明确不做¶
README 强调底线:不删任意文件(清理走 disk-cleaner 语义)、不代跑提权命令、不自动拉起/重启宿主、不改 cordis.patch.yml、备份口令不进产物;采集限流(如日志份数与单份大小上限),单步失败不向宿主抛错。
安装与启用¶
安装前请在 SkillHub 目录页 或 GitHub 阅读源码与许可证,并理解插件以当前 DSH 进程权限读写 profile、日志与数据目录。
官方 README 给出的方式为通过宿主 plugin_manager 的 install_bundle,而不是手工改 profile:
从 npm 安装(推荐):target 传包名 @sidady/dsh-steward。
# 在 DSH 中调用 plugin_manager.install_bundle,target 为:
@sidady/dsh-steward
从本地目录安装(开发用):target 传插件目录的绝对路径;由宿主写入 profile 的 package.json / cordis.patch.yml 并热挂载,不要手工编辑这两个文件。
装完后 README 要求核对三件事,否则可能出现「已安装但路由 404」或 boot 失败:
cordis.patch.yml里- insert:的name必须等于node_modules下实际目录名(npm 为@sidady/dsh-steward)。- 同一 bundle 不得残留旧目录名导致的重复 client factory 注册。
- 改码后 link 依赖应 remove → install,并以 profile 落库、路由 200、
ping版本三者一致为准。
若面板报「接口没有挂上」类 404,资料建议:设置里停用再启用 bundle,或重启 DSH Web;也可查看 ping 的 wiring.route 字段。运维上 plugin_manager set_bundle enabled:false 再 enabled:true 等价于重挂。
典型用法¶
侧栏与对话入口¶
启用后可在左侧栏和/或右侧栏进入管家面板(ui.entry 可在设置中选一:双入口、仅左、仅右)。总览页输入自然语言(如「清理一下缓存」「有什么问题吗」)会先定位动作卡,命中后仍须在卡上预览并确认,不会绕过授权链。
HTTP API 与工具¶
同源 POST 到前缀路由 /api/dsh-steward/。v0.9.8 起 必须带 action,畸形或超长 body 返回 400,不再有「空 body 默认做全量体检」。
可用 ping 做连通性与布线检查(含 wiring)。完整体检、模型扫描等动作为耗时操作;前端对 report / model-scan 等配置了较长超时预算,超时文案会说明服务端可能仍在运行。
Agent 侧调用只读报告:
dsh_steward_report
需要执行变更时,先 plan 再 confirm(经 dsh_steward_act),与会话审计写入 audit.jsonl。
本地静态验证(不启动宿主)¶
开发者可在克隆后的目录执行 README 中的检查:
for f in dsh-steward/lib/*.js dsh-steward/smoke.mjs; do node --check "$f"; done
node dsh-steward/smoke.mjs
当前资料记载 smoke.mjs 为大量断言(含打包自检、延迟注册、配色与时间戳等静态规约)。
适用场景与注意¶
适合谁:希望自己或 Agent 有一套统一、只读优先的 DSH 健康视图,且对清缓存、备份、停插件等操作要求可审计、可确认,而不是直接在对话里执行 shell 或改配置的人。
依赖与降级:clean 依赖 dsh-disk-cleaner 路由;backup 依赖 dsh-config-manager 的导出路由;disable/enable 依赖宿主 pluginManager。缺依赖时对应动作卡 plan 阶段拒绝,其它体检项仍可用。
安全与信任:插件属于社区 admin-security 类能力,会读 crash 日志、profile、工作区元数据,并在授权后触发清理与插件状态变更。安装前应自行审查 GitHub 源码 与 MIT 许可证;SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
生态背景:DSH 奉行「一切皆插件」;dsh-steward 通过 Cordis patch 与 client slots 挂载,设计上避免 export const inject 硬依赖,以免自身成为 boot 期单点故障。
结语¶
dsh-steward 把「看清楚」和「经授权再动手」拆成两层:默认只读报告与趋势,执行动作统一走指纹与 confirm。若你在维护多插件 DSH 环境,需要可重复的体检口径与可留痕的运维动作,可以从 npm 包 @sidady/dsh-steward 安装并在面板或 dsh_steward_* 工具中试用。
- 目录页:https://www.skillhub.cn/plugins/stallenlu/dsh-steward
- 源码与 README:https://github.com/stallenlu/dsh-steward