dsh-write-create-only:禁止 write 覆蓋已存在文件

前言

在 DeepSeek Harness(DSH)中,write 工具的默認行爲是全文件覆寫。模型一旦誤用 write 去修改已有文件,原內容會被整段覆蓋。DSH 默認的 fs-observation-policy 只要求先讀過文件,並不禁止覆寫操作。與其事後靠模型自覺,不如把“write = 僅創建”立成硬約束。

核心能力

本插件提供以下功能:
1. 只攔 write:edit、read 等其他工具完全不受影響。
2. 目標已存在 → 拒絕:在工具執行前直接拒絕,提示改用 edit。
3. 目標不存在 → 放行:新建文件操作照常。
4. 保守放行:路徑無效、stat 拋錯等不確定情形一律放行,絕不誤傷合法調用。
5. 全局生效:所有 agent 與會話統一適用。

安裝與啓用

插件安裝後自動掛載,重啓 DSH web 後生效。

從 GitHub 安裝(源碼在 src/,安裝時自動構建):

dsh plugin --profile web add github:better-er/dsh-write-create-only

從 npm 安裝(包內含構建產物 lib/index.js):

dsh plugin --profile web add dsh-write-create-only

工作原理

dsh 的每個工具在執行前都會走 tools/pre-execute 異步瀑布。本插件在此瀑布中註冊一個全局監聽器:
1. 只對 exec.name === 'write' 生效。
2. 取出 exec.arguments.file_path,用 ctx.fs.resolve 成絕對目標,再調用 ctx.fs.stat。
3. stat 返回非空即目標已存在,返回 { kind: 'deny', reason } 拒絕本次調用。
4. 其餘情況一律 return next() 放行。

選擇 tools/pre-execute 而非 fs/write-intent,是因爲後者是單槽瀑布且已被默認策略佔用;tools/pre-execute 是多監聽器瀑布,不影響 write 的 schema。

卸載

徹底移除插件:

dsh plugin --profile web remove dsh-write-create-only

開發與驗證

插件提供運行時冒煙驗證,覆蓋攔截/放行/容錯等斷言:

npm install
npm run build
node scripts/smoke.mjs

License

MIT

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜