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):构造单条规则的单行拒绝原因。

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

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

小夜