fuguier001/dsh-procguard ↗★ 0

@fuguier001/dsh-procguard

DSH 进程看护管家:对账并自修复 launchd/systemd 看护层与插件依赖链。macOS 全链路实测,Linux systemd 骨架(未实测),不支持 Windows(桩已删:无验证手段不做假实现)。 通过 GitHub Packages 分发。 适合需长期稳定运行的用户;macOS 实测,Linux 未实测,不支持 Windows。

Package
@fuguier001/dsh-procguard
Compatibility
Unverified
Version
1.0.2
License
MIT
Last updated
Sep 12, 2026

Install

This plugin has no verified bundle, or compatibility checks failed. Read the repository notes first. Read the full README ↗

dsh-procguard

DSH(DeepSeek Harness)进程看护管家:一个跑在 dsh web 进程里的 Cordis 插件,把自己的看护层安装进操作系统——launchd(macOS)/ systemd(Linux,骨架)保活、启动前依赖链校验、内存哨兵、断链自愈。进程死了有人拉起,链断了有人修,泄漏了有现场。

它解决什么问题

2026-09-12 的一次完整事故复盘(同一台机器,一夜两崩):

事故根因本包对应的层
凌晨 ~05:24 宿主崩溃V8 堆 59 小时缓慢泄漏至 4GB 上限 OOM,死后 2 小时无人拉起launchd/systemd 保活 + mem-watch 哨兵(超 2.5GB 自动抓堆快照留证)
早上 07:10 重启即崩link: 插件 peer 依赖符号链接断链,插件树连坐,boot 失败preflight 启动闸(拒启+明示原因)+ 管家每 5 分钟断链自愈

四层防御架构

第 1 层  OS 保命     launchd agent(KeepAlive):崩溃 ≤30s 自动拉起,开机自启
第 2 层  启动闸      preflight:boot 前校验依赖链,断链拒启并明示原因(不再裸崩留堆栈)
第 3 层  内存哨兵    mem-watch:每 5 分钟采样 RSS,超阈值 kill -USR2 抓堆快照(12h 限一次)
第 4 层  管家(本包)  procguard 插件:每 5 分钟对账 8 项资产,agent 掉册自动重装、断链自动重建

关键设计:插件不负责"救自己的命"(OS 层负责),插件负责"把 OS 层维持在正确状态"。插件死了前三层还在;前三层出问题,下次插件上岗时修好。OS 看护层是本包的交付物,卸载插件不回收。

本插件零外部 import(不依赖 @deepseek-ai/* 任何包,仅 ctx 注入的 timer/shell/fs),失败面从构造上收窄:坏也只坏自己,不连坐插件树——对照 2026-09-12 imgview 的 peer import 断链连坐事故。

平台支持

平台状态说明
macOS✅ 全链路实测断链→自愈、boot 安全(3099 端口双轮测试)、live 热加载均验证
Linux🟡 骨架未实测systemd user 单元同构逻辑已写;assets 脚本仍为 mac 方言(lsof 等),真机验证前请勿依赖
Windows❌ 不支持(桩已删)无 POSIX 信号(SIGUSR2 快照路径不存在)、无验证手段。不做看起来像实现了的假实现

安装

第一步:部署 OS 看护层(只需一次)

git clone https://github.com/fuguier001/dsh-procguard.git
cd dsh-procguard/assets && bash install-os-layer.sh

部署 4 个脚本、2 个 launchd agent、桌面重启入口,全部幂等可重跑。

第二步:安装插件(web profile)

方式一:GitHub Packages(npm registry,需配一次 .npmrc)

# 在 ~/.npmrc(没有就新建)加两行:
@fuguier001:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=

cd ~/.dsh/profiles/web
pnpm add @fuguier001/dsh-procguard

方式二:GitHub 直装(免 registry 配置)

cd ~/.dsh/profiles/web
pnpm add github:fuguier001/dsh-procguard

第三步:挂进组合

把本仓库根目录 cordis.patch.yml 里的行并进 ~/.dsh/profiles/web/cordis.patch.yml,重启 dsh web(或等 patchReload: live 热加载)。

验证

tail -f ~/.dsh/web-restart.log        # 应出现 "[procguard] 管家上岗" 与每 5 分钟的 "对账完成"
cat ~/.dsh/procguard-status.json      # 8 项资产对账结果

升级 / 卸载

cd ~/.dsh/profiles/web && pnpm update @fuguier001/dsh-procguard   # 升级(GitHub Packages 方式)
launchctl bootout gui/$(id -u)/com.fuguier001.dsh-web             # 停用保活层(一般不需要)

已知边界

  • 管家的对账资产清单(路径、agent 名)当前按作者机器写死(~/Documents/DSCli/dsh-imgview 等);换机器需改 lib/index.js 顶部 assets 常量。
  • 堆快照依赖启动参数 --heapsnapshot-signal=SIGUSR2(keepalive 脚本已内置);手动 dsh web 启动的实例没有该开关,哨兵只记警情不动进程。
  • 插件沙箱按实例 cwd 授权文件写入:keepalive 保证 cd $HOME,故 ~/.dsh/procguard-status.json 正常落盘;若从其他目录裸启 dsh web,状态写盘会被拒(已优雅降级:只记日志,审计与自愈不受影响,2026-09-12 3099 端口实测)。
  • Linux 的 assets 脚本移植(lsof→ss、launchctl→systemctl)欢迎 PR——带上你的真机验证记录。

License

MIT