← 返回列表
未验证
不重启进程即可循环验证插件加载与清理
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/21 · 已提供中文文档
DeepSeek Harness 插件的模拟重启测试引擎:针对动态 cordis 插件、npm/文件插件和 agent 预设执行 apply -> cleanup -> apply 循环,无需重启 DSH 进程。自动监听、自动修复循环。
综合分
27.3
GitHub 分
27.3
用户评分
—
★ Stars
0
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add tkwkeven/dsh-sim-restart-tester该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-sim-restart-tester
DeepSeek Harness(DSH)宿主级「模拟重启」测试引擎:不实际重启 DSH 进程,就能对插件做
apply(冷启动)→ 全部清理(模拟 stop)→ 再次 apply(模拟重启) 的循环测试,并在失败时自动
打报告、派修复子代理改文件、再测,直到全部通过。
它解决什么问题
DSH 的插件(尤其是自定义插件和 agent preset)在开发/修改过程中最常见的两个痛点:
1. 改完插件不敢重启:cordis.yml / cordis.patch.yml 一旦写错(插件名引用缺失、YAML
解析失败、apply 抛异常),DSH 进程启动即崩溃;在无界面的部署里(如飞书机器人进程)甚至
会出现「旧进程退了、新进程没起来」的静默宕机,日志里什么都查不到。
2. 重启成本高、无法自动化验证:手动改一次配置 → 重启 → 看日志 → 再改,一轮就是几十秒
甚至几分钟,改多个插件时根本验证不过来。
本插件把「重启」这件事在隔离环境里模拟出来:冷启动、清理、再启动的完整生命周期循环,
覆盖 DSH 里所有插件类型,任何失败都给出可读的阶段(load / apply / cleanup / config)、轮次
和错误堆栈,并落盘完整报告。配合文件监视器,插件一被修改就自动跑全量测试——把「重启后才发现
炸了」变成「保存文件后几秒就知道有没有问题」。
功能特性
- 覆盖全部插件类型:
- 动态 Cordis 插件(cordis_define 创建的 code.host / code.client):在隔离 worker
中重新编译源码并模拟,复刻动态沙箱语义——require / fetch / 定时器被拦截并给出明确
报错指引,ctx 注入门禁、harness 桩、React 桩一应俱全。
- npm 插件与本地文件插件(./plugins/.mjs):在独立 node 子进程中真实 import 模块
(真实模块解析与依赖),用 mock ctx 执行 apply/cleanup 重启循环;进程级隔离,崩溃或
挂起都不影响宿主。
- agent presets(~/.dsh/.agent-presets 与部署 agent-presets):配置校验——YAML 可
解析、插件行引用可解析、插件 id 唯一,不执行 apply。
- 自动监视 + 打回修复闭环:监视 composition(cordis.yml / cordis.patch.yml /
package.json / pnpm-lock.yaml / pnpm-workspace.yaml)、plugins/ 目录、
~/.dsh/.agent-presets 与 ~/.dsh/settings.yaml。任何插件被安装 / 修改 / 移除后,自动
(1.2s 防抖)执行全量模拟重启测试;失败时报告落盘 /sim-restart/,并自动派生
修复子代理读取失败详情、修复目标文件,文件变化再次触发全量测试,直到全部通过或达到最大
修复轮数。
- 失败可诊断:每次测试输出结构化 JSON 报告(latest.json),含每个目标的通过状态、
失败阶段、错误名称 / 消息 / 堆栈前 8 行;中文错误信息直接说明该改哪里。
- 零依赖自包含:自带无依赖的轻量 YAML 解析器(解析 composition 与 preset 不需要引入
yaml 包);唯一运行时依赖是 DSH 宿主本身提供的 tools / shell / subagents 等服务。
安装
将 plugins/sim-restart-tester.mjs 与 plugins/preflight.mjs(后者是前者的源码预检依赖,
必须放在同目录)放入你的 profile 插件目录,例如:
/plugins/sim-restart-tester.mjs
/plugins/preflight.mjs
在 profile 的 cordis.patch.yml 中挂载(插入到列表里):
- insert:
- id: sim-restart-tester
name: ./plugins/sim-restart-tester.mjs
重启 DSH 进程生效(composition 配置不热更新)。
依赖:需要 DSH 宿主提供 tools(工具注册)、shell(子进程执行)、subagents
(自动修复子代理;缺失时自动修复功能自动降级为「仅报告,不修复」)。
使用
注册三个工具,所有会话(Web GUI、飞书/Lark 等)可用:
sim_restart_test — 对插件做模拟重启测试
两种模式:
A. 动态插件源码模式(开发 cordis_define 插件时用):
sim_restart_test({ pluginId: "xxx", hostSource: "", clientSource: "", cycles: 2 })
参数:
| 参数 | 说明 |
| --- | --- |
| pluginId | 目标插件标识(仅用于报告标注,可选) |
| hostSource / clientSource | 动态插件的 Host / Client 半源码(cordis_define 的 code.host / code.client 函数体原文,含 return {...};可用 cordis_inspect_self(pluginId, packageId) 获取) |
| cycles | 启动-停止轮数:1=仅冷启动,2=冷启动+1 次重启(默认 2),最大 5 |
| extraServices / missingServices | 额外视为「已提供」/「缺失」的 ctx 服务名(模拟服务环境) |
| clientStrict | Client 半 apply/清理异常是否判为失败(默认 false:浏览器环境差异只记警告) |
B. 全量自动模式(对所有 composition 插件做真实加载模拟):
sim_restart_test({ auto: true })
参数:
| 参数 | 说明 |
| --- | --- |
| auto | 自动发现并测试全部 composition 插件(npm 插件、文件插件、agent presets) |
| targets | 按 id / 路径 / 包名过滤目标(可选) |
| cycles | 同上 |
| autoFix | 失败时自动启动修复子代理打回修复(默认 false) |
| fixRounds | 最大自动修复轮数(默认 3,最大 5) |
| presetCheck | 是否校验 agent presets 配置(默认 true) |
| coreStrict | 是否把核心部署插件(@deepseek-ai/ bundle,模拟环境固有局限)的失败判为失败(默认 false=仅警告) |
返回结构化报告:passed=false 时附带失败阶段(load/apply/cleanup/config)、轮次与完整错误。
sim_restart_status — 查询引擎状态
无参数。返回:监视器开关状态、监视目录、最近一次自动测试结果、自动修复循环状态、报告文件位置。
sim_restart_watch — 控制自动监视
| 参数 | 说明 |
| --- | --- |
| enabled | true 启用自动监视 / false 停用(默认保持当前状态) |
| forceRun | true 立即执行一次全量自动测试 |
| autoFix / fixRounds | forceRun 时失败是否自动修复及最大轮数 |
配置
本插件无需配置项;行为由工具参数控制。报告统一写入 /sim-restart/:
/sim-restart/latest.json 最近一次全量测试报告
/sim-restart/*.json 历史报告
目录结构
dsh-sim-restart-tester/
├── plugins/
│ ├── sim-restart-tester.mjs 宿主插件(工具注册 + 自动监视 + 修复循环)
│ └── preflight.mjs 源码预检模块(BOM/编码/mojibake/语法,被前者依赖)
├── LICENSE
├── package.json
└── README.md
工作原理(简述)
- 动态插件源码模拟:源码在 codeRuntime 的隔离 worker 中编译执行,先经过 preflight.mjs
的预检(BOM / UTF-8 / GBK-mojibake / node --check 语法),再在 SIM_CORE 提供的沙箱里
apply(注入 mock ctx:可调用的魔法桩、动态工具门禁、require/fetch/定时器陷阱提示),
记录全部副作用清理器后执行 stop,再 apply 完成一轮重启。
- npm / 文件插件模拟:把插件模块在独立 node 子进程里真实 import(PROGRAM /
RUNNER_SCRIPT 两个模板由 SIM_CORE 拼装),mock ctx 由宿主通过 stdin 传入 JSON 描述,
子进程内完成 apply → cleanup → apply 循环并回报结果,宿主只做汇总;进程崩溃/超时不影响宿主。
- 自动监视:fs.watch 监听 composition / plugins / presets / settings 的变化,1.2s 防抖后
按变化类型做增量测试(composition 变化→全量;插件文件变化→只测该文件;其他→只做 preset 校验)。
- 修复循环:失败目标中排除部署核心 bundle 与配置类错误后,通过 subagents 的 spawn
provider 派生修复子代理(携带失败报告路径与修复指引),修复者改完文件后自动再测。
许可
MIT License,见 LICENSE。同作者(tkwkeven)的其他插件
扫码进群