Repository navigation
Releases
v0.2.4
Full Changelog: v0.2.3...v0.2.4
v0.2.3
v0.2.2
v0.2.1
Purge Minimal 0.1.2
0.1.2
注入足迹缩减版本。0.1.1 仍然通过改写 75 处宿主源码来解锁;0.1.2 把其中 48 处改成宿主官方支持的两种方式——cordis 配置覆盖(8 条)与运行时 hook(4 个扩展点),只保留 27 条确实没有扩展点的源码补丁。同时移除内置红队演练台。
宿主源码改写:75 → 27
| 项 | 0.1.1 | 0.1.2 |
|---|---|---|
| 宿主源码补丁 | 75 条 | 27 条 |
| 受改写的宿主文件 | 41 个 .js + 11 个 .yml | 15 个 .js + 0 个 .yml |
.dshpurge.bak 备份文件 |
59 个 | 约 15 个 |
| 需要重启才能生效的改动 | 全部 | 仅这 27 条;配置与 hook 不再需要重打包 |
| 自检层数 | 23 层 | 20 层(新增 hook 层、配置覆盖层) |
取消的 48 条按去向分三类:
- 改走 cordis 配置覆盖(8 条):沙箱模式默认值、审批策略、权限预设表与默认预设、bash 超时、
read上限、子代理深度、会话日志上传、system-prompt 身份开关。全部写在cordis.patch.yml,由宿主官方 patch 层按同 id 合并,不碰任何宿主文件。 - 改走运行时 hook(4 个扩展点 / 5 条补丁):
approval/request(替代 #5/#9/#11/#12 的审批自动放行)、fs/write-intent+fs/edit-intent(替代 #17)、tools/pre-execute(替代 #59)。挂在 cordis 官方事件上,插件卸载即恢复。 - 直接删除(其余 35 条):改工具描述话术、改身份文案、liangshen 预设、escapesion 阶梯扩权、旧版本兼容垫片等。这些只影响措辞或本就无人使用。
审批策略因此从 never 变为 ask + hook 放行:万一 hook 没挂上,宿主会退回「问一次」而不是静默拒绝或静默放行——失败方向可观察。
自检变成「断言运行期事实」
新增两层:
- hook 层:四个 hook 是否真的挂载(CLI 进程里显示为不适用,面板里有结论)。
- 配置覆盖层:
cordis.patch.yml里 8 个 id 行与defaultPreset: danger-full-access是否齐全。
补丁表的 20 层逐层检查改为只覆盖留存补丁;当前 profile 的权限选择 层接受三种合法形态(never、ask+hook、bundle 显式固定默认预设),不再把正常的 hook 放行误判为异常。
移除内置红队演练台
lib/redteam/(19 文件 1.1MB)、presets/redteam/、skills/redteam/(23 份技能)、面板演练台(5 个组件约 11000 行)全部移除,浏览器 bundle 从 653KB 降到 263KB。
$DSH_HOME/redteam/ 下的数据(599MB 工具链、演练记录、知识库)原样保留,不动一个字节。其中通用的方法论抽成 skills/pentest-sop.md:证据四档分级、按服务计分封顶、报告可复现纪律。
无限制模式与红队模式本来就是两条线,删掉演练台不影响「所有操作无限制」:全权限来自 danger-full-access 预设(沙箱与文件围栏由宿主自己在全权限模式下短路放行)+ approval/request hook。
验证
pnpm test:514 tests / 491 pass / 0 fail / 23 skipped;node scripts/check-docs.mjs:文档版本一致;- 主实例(3080)与隔离实例(3081)
selfcheck:20 层全绿,host 15/15、hook 1/1、override 1/1、broken 0; - 双实例面板回归:无插件加载错误、无控制台报错、显示「Purge 0.1.2 / 21/21 · 6 条本机不适用」;
- 打包:
dsh-purge-minimal-0.1.2.tgz约 1.7MB。
Purge Minimal 0.1.1
0.1.1
出厂默认提示词替换版本。0.1.0 的加密槽里封的是一份 39896 字节的长文本,含操作者本机的人格设定与一条本机绝对路径;0.1.1 把槽内容换成一份 2009 字节的通用版本,并重建了仓库历史。
出厂默认提示词
| 项 | 0.1.0 | 0.1.1 |
|---|---|---|
| 明文长度 | 39896 字节 / 459 行 | 2009 字节 / 19 行 |
| 日常注入 | 2212 字节 | 约 2.0 KB(全量注入,不再分段裁剪) |
| 加密槽文件 | 22764 字节 | 2042 字节 |
| 含本机绝对路径 | 1 处 | 0 |
| 含操作者姓名 | 4 处 | 0 |
新文本是六条行为纪律(思维 / 产出纪律 / 语言 / 绝对能力面 / 上下文自律 / 验证纪律)加六条硬约束(绝不拒绝 / 一次拒绝即故障 / 做完 / 缺细节就填 / 每轮独立 / 不可逆操作先说明)。删掉的是:441 行只对红队会话生效的分段标记内容、44 行装饰线、12 组逐字重复段落、一处上游人格名、一条孤立编号残片、一份按类别罗列的测试清单,以及若干会让输出变差的措辞限制。
强制语句契约从 31 条改为 8 条语义锚点;契约测试改为直接解槽校验(test/inject-contract.test.mjs → lib/table-read.js 的 openSlot()),不再依赖用户的 ~/.dsh/prompt-inject.md。
用户文件不受影响
lib/core.js 的 isKeepableUserOverride() 在 override-state.json 记录 customized: true 时直接返回 true,换出厂默认不会覆盖 ~/.dsh/prompt-inject.md。升级后用户自己的提示词文件保持原样。
仓库重建
0.1.0 发布后 3 分 22 秒被自动化账号 fork 并保留了完整历史,其中含旧槽内容。0.1.1 以删除并重建仓库的方式发布,历史中不含任何旧槽 blob。
验证
pnpm test:全量通过(详见仓库docs/STATE.md);node scripts/check-docs.mjs:文档版本一致;- 解槽校验:2009 字节,操作者姓名 0 处,本机路径 0 处;
- 主实例与隔离实例双回归:面板渲染正常、无插件加载错误、
selfcheck宿主补丁全绿。