Skip to content

Releases: MrChengl11/Stop-That-Shit-DSH

v0.2.0 — shell 写目标证明 / 依赖授权顺序

Choose a tag to compare

@MrChengl11 MrChengl11 released this 24 Oct 10:20

问题

在 files= 边界下,凡是用 shell 写文件(mkdir、touch、git add、> file)都会被判
WRITE_PATH_UNPROVEN,即使目标就在边界内 —— 因为上游判定引擎拿不到写目标路径。

修复

修复 位置 效果
A. 证明 shell 写目标 vendor-sts/src/shell-analysis.cjs mkdir -p src/new → ["src/new"];echo hi > src/out.txt → ["src/out.txt"];git add -A 这类不指名目标的仍为 []
A′. 适配层并集 lib/adapter.js shell 分析出的路径并入 affectedPaths,files= 边界能真正按路径判定
B. 依赖授权先于文件边界 vendor-sts/src/decision.cjs deps=allow 下装依赖不再被路径检查抢占;deps=ask / deps=deny 不变

行为变化(change + files=src/**)

场景 v0.1.0 v0.2.0
touch src/app.ts deny WRITE_PATH_UNPROVEN allow
echo hi > src/out.txt deny WRITE_PATH_UNPROVEN allow
touch README.md deny WRITE_PATH_UNPROVEN deny PATH_OUTSIDE_CONTRACT(理由变准确)
git add -A deny WRITE_PATH_UNPROVEN 不变(不指名目标)
npm run build / node scripts/build.js deny WRITE_PATH_UNPROVEN 不变(无法证明目标,仍 fail-closed)
deps=allow + npm install yaml deny WRITE_PATH_UNPROVEN allow

验证

node test/conformance.mjs   # 56/56 checks passed(不调模型)

断言从 49 条扩到 56 条:原来「mkdir -p src/new 应报 WRITE_PATH_UNPROVEN」那条已过时,
拆成界外已证明目标 / 界内已证明目标 / 不指名目标三条;另加 deps=allow 与 deps=deny 两条依赖授权顺序回归。

安装

tar -xzf dsh-stop-that-shit-0.2.0.tgz
cd package && node install.mjs

详情见 CHANGELOG.md。

v0.1.0 — Stop That Shit for DeepSeek Harness(二次开发)

Choose a tag to compare

@MrChengl11 MrChengl11 released this 24 Oct 08:43

Stop-That-Shit-DSH v0.1.0

Stop That Shit 的 DeepSeek Harness 适配层首个版本。

⚠️ 这是二次开发(derivative work),不是上游官方项目。
上游:lennney/stop-that-shit v0.2.5,MIT,作者 "Stop That Shit contributors"。
上游没有 DeepSeek Harness 适配器;本仓库只补宿主粘合层,判定引擎(vendor-sts/)一行未改。

装什么

三样东西:

  • dsh-stop-that-shit-0.1.0.tgz —— npm 包(42 个文件,含上游 vendor-sts/,无运行时依赖)
  • Source code (zip / tar.gz) —— 完整仓库快照

快速开始

# 1. 解剖到任意 DSH profile
tar -xzf dsh-stop-that-shit-0.1.0.tgz
cd package
node install.mjs --profile <your-profile>

# 2. 或者在 profile 里当普通依赖装
dsh plugin --profile <your-profile> add /path/to/package

install.mjs 是幂等的:复制到 ~/.dsh/plugins/dsh-stop-that-shit、建 junction、往 profile 的
dependencies 和 dsh.profile.bundles 里各写一条。--uninstall 反向操作。

装完不需要重启——profile HMR 会现场 reconcile 新的 bundle。

怎么用

会话第一条消息:

$stop-that-shit change files=src/** -- 修掉那个登录 bug

之后所有落在 src/ 之外的写操作会被拒绝,模型看到的是:

Error: STOP / SCOPE
Guard returned a pre-execution denial.
Reason: PATH_OUTSIDE_CONTRACT
Detail: The action writes outside the declared file boundary: src/outside.ts.
Code: S/PATH_OUTSIDE_CONTRACT
State: ARMED / change
Next: Keep the write inside files=..., or obtain a new explicit file boundary.

模式:answer / review / change / monitor / open。
档位:watch(默认,只提示)/ guard(拦)/ lock(连状态查询都收紧)/ off。
其余字段:files=a|b、deps=deny|ask|allow、hash=deny|ask|allow、agents=N。
查询:$stop-that-shit status(整条消息只能有这一句)。

自然语言纠偏也认:stop / review only / 只审查 / 只回答 / 只监控。

这一版的验证程度

层 证据
判定引擎 上游 v0.2.5 原样收录,未改一行
适配层 test/conformance.mjs 49/49 passed(零模型调用)
端到端 e2e/ 真实 headless DSH 启动 + 真实模型 turn
活会话 在真机桌面版里逐项实测:越界写 / review 模式写 / hash=deny / agents=0 / deps=ask 全部正确拒绝;未布防时全放行
PTC 嵌套 run_code 内派发的 write/read/subagent 同经 tools/pre-execute,同样被拦
打包 从 .tgz 解包后复跑 49/49,且能正常 import() 成 cordis 插件

已知限制

  • 这是 guardrail,不是 security boundary。 真正的边界仍是 DSH 的 sandbox 与 permission 设置。
  • 只覆盖经过工具调用的动作;模型直接输出的文本不归它管。
  • 上游的 SessionEnd / PostToolUseFailure / PermissionDenied 三个事件在 DSH 侧没有对应缝隙,未接线。
  • 武装状态下每次工具调用走一次上游判定,无子进程开销(in-process),但仍是同步路径上的工作。

兼容性

  • DeepSeek Harness 0.2.1-rc.2 / 0.2.1-rc.3
  • Node.js >= 22
  • 上游 stop-that-shit v0.2.5

仓库

  • lib/ 本仓库新增的适配层(DSH 扩展点 → 上游 ControlEvent v2)
  • vendor-sts/ 上游源码,原样(MIT)
  • docs/01–05 取证与设计记录(含兼容性判定、原生插件设计,中文)
  • NOTICE.md 二次开发声明,中英双语