dsh-write-rule-guard:按正則規則攔截寫入內容的 DSH 插件

前言

在 DSH 的插件生態中,有時需要強制模型遵守特定的輸出格式,例如禁止使用全角圓括號。dsh-write-rule-guard 插件通過在寫入前攔截內容,實現了這一需求。

插件簡介

由 betterer 維護,分類爲 admin-security,開源協議爲 MIT。該插件通過 cordis 配置注入,默認攔截全角括號 [\uFF08\uFF09],並支持自定義正則規則。

核心功能

  • 內容攔截:攔截 edit、write、edit_remote、write_remote 等工具的寫入內容,根據配置的正則規則進行檢查。
  • 狀態機控制:攔截命中後,將當前回合的 pwsh 禁用,防止模型改用 pwsh 繞過。
  • 狀態恢復:寫入工具執行成功後,解除 pwsh 禁用狀態;回合結束時恢復允許。
  • 工具函數:提供 compilePattern、findMatches 等工具函數用於處理正則匹配。

安裝與啓用

使用以下命令安裝插件:

dsh plugin --profile web add github:better-er/dsh-write-rule-guard

安裝完成後,插件會通過 cordis.patch.yml 注入默認配置,重啓 DSH web 後即可生效。

配置方法

插件的配置文件位於 ~/.dsh/profiles/web/cordis.patch.yml。通過覆蓋 config 字段,可以調整攔截規則、禁用文案等。

配置項說明:
- enabled:是否啓用攔截(默認 true)。
- rules:規則列表,包含 pattern(正則)、message(攔截文案)、enabled(開關)。
- extraTools:額外攔截的工具列表,默認包含 dsh-remote-file-system 的 edit_remote 和 write_remote。
- pwshMessage:處於禁 pwsh 態時的攔截文案,支持 {reason} 佔位符。
- joiner:多條規則命中時的拼接分隔符。

配置示例:

- id: dsh-write-rule-guard
  config:
    enabled: true
    pwshMessage: '本次寫入未遵循用戶偏好,已被用戶拒絕寫入。'
    rules:
      - enabled: true
        pattern: '[\uFF08\uFF09]'
        message: '本次寫入未遵循用戶偏好,已被用戶拒絕寫入。請修改爲不使用括號的描述方式。行:{lines};文件:{file}'
    extraTools:
      - name: edit_remote
        contentKey: new_string
      - name: write_remote
        contentKey: content

適用場景與注意事項

  • 適用場景:需要在編輯文件或寫入內容時強制執行格式約束(如禁止特定字符)。
  • 環境要求:Node.js 版本需 >= 26.3.1,需依賴 @deepseek-ai/dsh。
  • 已知侷限:攔截成功後僅禁用當前回合的 pwsh。如果寫入工具(如 edit/write)執行成功,狀態機會將 pwsh 解除禁用。這意味着模型可能通過一次成功的寫入來繞過守衛,從而在後續操作中再次使用 pwsh 寫入違規內容。這是一個取捨後的行爲,無法防止通過成功寫入解除禁用後的繞過嘗試。

導出工具

插件導出了以下工具函數:
- compilePattern(pattern):編譯用戶正則,非法時返回 null。
- findMatches(content, pattern):掃描文本,返回匹配位置清單。
- collectLines(hits):提取命中所在的不重複行號。
- fillMessage(template, ctx):替換報錯文案佔位符。
- buildReason(message, file, hits, pattern):構造單條規則的單行拒絕原因。

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

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

小夜