dsh-plugin-guard

28Star2Fork2Issue0Watching

DeepSeek Harness 的安装安全网:安装前自动快照、启动失败自动回退、不兼容插件自动隔离并生成事故报告自动触发 Agent 分析。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
JavaScript
License
MIT
分支
main
deepseek-harnessdsh-plugin

安装

$ dsh plugin --profile web add github:lxzy-7/dsh-plugin-guard

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 lxzy-7/dsh-plugin-guard:先查看仓库 https://github.com/lxzy-7/dsh-plugin-guard.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

为 DeepSeek Harness(DSH)打造的"插件安装安全网":安装前自动留底、坏插件自动隔离,并生成事故报告让 AI 自动接手分析。它不评判插件好坏,只保证"任何变更都可逆 + 启动失败自动回退 + 事故不会被悄悄吃掉"。

核心能力

  • 安装前自动快照:DSH 内部任何安装/卸载/启用切换插件的工具运行前,都会对所有 profile 自动留一份配置快照(不会阻塞调用)
  • 一键或自动回退:把 profile 的 4 个配置文件还原到任意一份快照,并重跑 pnpm install --frozen-lockfile 复原 node_modules
  • 守护启动:boot-guard 脚本在启动 dsh web 前做快照、启动后做 HTTP 健康检查;失败时自动 kill 进程、回退、重试一次
  • 黑屏/客户端崩溃检测:v0.3.1+ 起会确认 web 客户端真正渲染成功,区分"HTTP 200 但页面黑屏报错"和真正可用
  • 自动隔离不兼容插件:v0.3.2+ 当回退和重试都失败时,从启动日志诊断出问题插件并写入 disabled: true 让应用至少能起来
  • 事故报告自动触发 Agent 分析:任何启动失败都会写一份"事故定位报告",并在下一次会话的提示词里强制让 AI 先去读它

技术实现

  • 语言: JavaScript (ESM,Node 18+) + PowerShell(Windows 守护脚本)+ bash(macOS/Linux 守护脚本)
  • 关键依赖: js-yaml(解析 cordis.patch.yml)+ @deepseek-ai/schemastery(声明 settings.namespace 的 schema)+ Node 自带 node:fs/node:http/node:child_process;客户端侧通过 ModuleLoader.load 注入 React 组件
  • 架构模式: 标准 Cordis bundle 插件 + 进程外脚本(CLI + 守护)。Node 端通过 tools.guard 钩子 + systemPrompt.section 注入 + webServer.register 注册 HTTP API + settings.register('guard', schema) 注册插件自有设置卡;客户端 lib/client.js 通过 slots.inject 注册 settings.section / shell.overlay / settings.plugin.item 三个槽位
  • 入口文件: src/index.js(node 端 export apply)+ lib/client.js(浏览器端 export inject)+ scripts/guard-cli.js(独立 CLI dsh-guard)+ scripts/boot-guard.{sh,ps1}(守护启动脚本)

适用场景

每天都要折腾插件、频繁安装/卸载新功能、DSH 自带 dsh plugin add 经常"装上后应用就崩"的用户。装了它之后,即便踩到一个坏插件,下次启动也会自动还原成正常状态——你不用再为插件实验支付"应用起不来"的代价。事故报告还会让 AI Agent 自动接手诊断,省掉手动翻日志的功夫。

前置依赖与兼容性

依赖最低版本说明
Node.js>= 18package.json engines.node 字段;使用 node: 协议内置模块
DSHrc.7+(推荐)设置面板里"插件 → 插件配置"卡片依赖 rc.7 引入的 settings.namespace;早期版本会回退为只通过 config.json 路径工作,备份管理 HTTP API 仍可用
pnpm任意已安装版本守护脚本与回退流程会调用 pnpm install --frozen-lockfile;通过 DSH_GUARD_PNPM 环境变量可手动指定 pnpm 路径,否则按 PATH 探测
平台Windows / macOS / Linux跨平台;Windows 用 boot-guard.ps1 + rollback.cmd,其他系统用 boot-guard.sh + dsh-guard CLI
原生模块全部使用 Node 内置模块和 js-yaml 纯 JS 依赖,无需 native binding

安装方式

dsh plugin --profile web add github:lxzy-7/dsh-plugin-guard

安装到 web profile 后需要重启 dsh web 让 bundle 插件生效,并建议改用 boot-guard 脚本启动以启用启动级回退保护。

配置项

配置类型说明默认值
keepSnapshots整数每个 profile 保留多少份历史快照,超出的旧快照会被自动清理10(最少 2,最多 100)
port整数健康检查和事故报告使用的 web 端口(与 dsh web 实际端口一致即可)3080
DSH_HOME 环境变量路径所有 guard 状态文件根目录;用于多用户/多实例隔离~/.dsh
DSH_GUARD_PNPM 环境变量命令路径强制覆盖 pnpm 启动器查找路径自动探测 PATH

所有配置项都在 $DSH_HOME/guard/config.json,首次写入时自动创建。普通用户无需手动编辑。

常见问题

Q: 安装后是否需要做额外配置?

A: 不需要。所有配置项都有合理默认值,配置文件在首次写入时自动生成。建议在 DSH 设置 → 备份管理页面里检查下保留快照数量是否合心意。

Q: 插件安装失败或被隔离了,怎么恢复?

A: 隔离意味着插件与当前 DSH 版本不兼容、回退无法解决。两种恢复方式:①升级该插件到兼容版本;②确认不需要它(保持禁用状态)。需要取消隔离时执行 dsh-guard quarantine --undo <插件id>,会从 cordis.patch.yml 里移除 disabled: true 行。

Q: 数据会不会被回滚弄丢?

A: 只回滚 5 个配置文件 + 通过 pnpm install --frozen-lockfile 复原依赖, 触及 ~/.dsh 下的会话日志、凭据、用户数据。回退前会自动先存一份 pre-rollback 快照,所以回退本身也可一键还原。

Q: 怎么卸载?

A: 从 cordis.patch.yml 删除 guard 这一行,重启 dsh web。如需彻底清理数据,删除 $DSH_HOME/guard/$DSH_HOME/rollbacks/ 目录即可。

Q: 我改了 dsh web 的端口(不是默认 3080)怎么办?

A: 编辑 $DSH_HOME/guard/config.json 把 port 字段改成实际端口;或临时用 dsh-guard health --port <N> / dsh-guard incident --port <N> 覆盖。

Q: 为什么 bundle 插件的修改要重启 dsh web?

A: 因为 DSH 在 web 进程启动时一次性加载 bundle 插件到 profile 层栈,运行期改 cordis.patch.yml 不影响已加载的实例——这是 DSH 本身的加载机制限制。

Q: 它会在 DSH 进程里执行第三方代码吗?

A: 快照只是纯文件复制(5 个配置文件 + manifest),不运行任何代码、不评估任何行为。启动级检测由 boot-guard 脚本启动 dsh web 完成(DSH 会连同所有已装插件一起加载),这是检测"插件是否搞坏启动"必须的一步。运行期间插件从不执行额外代码、从不修改配置。

上手难度

入门 — 普通用户安装后零配置即可享受"安装前自动快照 + 启动失败自动回退"的核心保护;高级用法(CLI、quarantine、定制 boot-guard 启动器)属于可选项,遇到事故时再学即可。

已知问题与限制

  • 事故自动分析仅覆盖启动失败类事故;对话中途报错需要主动调用 dsh_rollback action=incident(或 dsh-guard incident)手动生成报告
  • bundle 插件的加载变化需要重启 dsh web 才生效(DSH 自身机制,非本插件限制)
  • 会话日志损坏属于数据问题,不在回退范围——回退只覆盖 5 个配置文件与 node_modules
  • 健康检查只看 HTTP /(200-499 即视为健康),不看具体业务接口;客户端渲染崩溃自 v0.3.1 起才被检测(需要 dsh-client-runtime 配合上报心跳)
  • 自动隔离(quarantine)只对 cordis.patch.yml 里的可禁用插件生效,普通 npm 依赖类插件无法被自动隔离
  • DSH 根目录(node_modules/.pnpm)的版本更新无法通过 profile 回退撤销;事故报告会检测并明确标注这种情形

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/lxzy-7/dsh-plugin-guard)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录