DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
W

dsh-write-rule-guard

Write Rule Guard

「DSH·写入规则守卫」:禁止在 edit/write 写入内容中使用匹配正则的字符,extraTools 可额外配置拦截更多工具。可在设置页逐条开关规则,也可在会话视图的「写入规则」页只给当前会话关掉条目。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:better-er/dsh-write-rule-guard#b5a8f7705c9ae38a9ed9790eb1269f49d59b7b34
README兼容性版本

兼容性与来源证明

Write Rule Guard 以 dsh-write-rule-guard 发布,当前版本为 0.4.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/11/4

版本

0.4.0stable
2026/10/31
0.3.3stable
2026/10/1
0.3.2stable
2026/9/30
查看其余 5 个版本收起版本
0.3.1stable
2026/9/28
0.3.0stable
2026/9/14
0.2.2stable
2026/9/3
0.2.1stable
2026/9/3
0.2.0stable
2026/9/2

相关插件

正在加载相关插件…

最新版
0.4.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 4
周下载
533
最近提交
2026/11/3
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 security-access 分类下经过校验的插件。

Experimental Auto Review@deepseek-ai/dsh-experimental-auto-review针对每个工具的 LLM 授权审查,适用于 DeepSeek Harness Auto 权限预设Cc Safety Netcc-safety-net编码代理 CLI 钩子——阻止破坏性命令和访问机密文件Doctor@linxin666/dsh-doctorDSH 配置档案的事务性救援模式,配备受监督的启动器、隔离的恢复容器、确定性修复、健康监控以及本地 Web 恢复控制台Pocketdsh-pocket把 DeepSeek Harness 装进你的口袋:一个包、一个设置页,手机扫码即同步访问电脑上的 DSH(局域网 + 公网,实时同屏)。

README

DSH·写入规则守卫

在写入类工具执行前按配置的正则拦截写入内容,命中即拒绝并把 pwsh 切到禁用态,防止改用 pwsh 绕过;被拦截工具一旦成功执行,本回合内即解除禁用,回合结束恢复允许。

默认规则与工具范围由 cordis.patch.yml 随安装注入,匹配全角圆括号,默认覆盖 edit / write / edit_remote / write_remote,都可在配置文件里改。代码不内置默认规则,rules 为空即不拦截。

设置页里有一页「写入规则守卫」,逐条列出规则,每条一个开关,另有总开关。开关写入活动 profile 的 Cordis patch,和手改配置文件等价,关掉的规则对所有会话都不再检查。

只想在某个会话里临时关掉某条规则时,切到会话视图的「写入规则」页,按条目开关。它只写当前会话的豁免,不碰全局设置;豁免按规则 pattern 记在 sessionOverrides 里。

工作方式

设置页由 client 半身绘制,通过 settings 远端的 describe 与 update 读写配置,不另存状态。

host 半身 lib/index.js 按 edit / write / edit_remote / write_remote 的成败维护「禁 pwsh」状态机。pre-execute 里拦截 edit / write / edit_remote / write_remote 的写入内容,按配置的 enabled / rules 逐条检查,命中即视为失败并进入禁 pwsh 态;post-execute 里按真实执行结果收口状态——返回错误视为失败继续禁用,执行成功则解除禁用。pwsh 的放行与否由当前禁态决定。

拦截范围

  • 工具:常态拦 edit 和 write 的写入内容,patch 默认再拦 dsh-remote-file-system 的 edit_remote 与 write_remote,也可自行配置更多工具;被拦截工具失败后,后续的 pwsh 进入禁用态被拦,文案由 pwshMessage 决定,缺省用内置默认。此后某次写入工具真实执行成功即解除禁用,回合结束一律回到允许。
  • 字段:edit 的 new_string、write 的 content;extraTools 的工具按各自 contentKey 提取新内容,默认 edit_remote 取 new_string、write_remote 取 content。
  • 场景:默认全局所有会话生效,run_code 内嵌的 edit / write 子调用同样被捕获;会话视图的「写入规则」页可以只给当前会话关掉指定条目。

宣传片

四件一起讲的宣传片,中文与日语配音两版同在一个投稿里:

文件四件套宣传片 · 一个核心,三个辅助
文件四件套宣传片

安装

从 GitHub 安装:源码在 src/,lib/ 不入仓库,安装时 npm 会触发 prepare 脚本现场构建出 lib/index.js 与 lib/client.js。

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

从 npm 安装:包内已含构建产物 lib/index.js 与 lib/client.js,安装时不再构建。

dsh plugin --profile web add dsh-write-rule-guard

两种方式装完都会自动挂载,重启 DSH web 后启用,无需手工编辑任何文件。

卸载

dsh plugin --profile web remove dsh-write-rule-guard

彻底移除,重启 DSH web 后不再加载。

配置

插件通过 cordis 配置注入,默认 enabled: true。规则列表 rules 由 cordis.patch.yml 随安装带入一条匹配全角圆括号的默认规则;代码不兜底默认,rules 为空即不拦截。extraTools 由 cordis.patch.yml 随安装带入 dsh-remote-file-system 的 edit_remote 与 write_remote,给空数组则只拦内置的 edit / write。

配置文件位于 ~/.dsh/profiles/web/cordis.patch.yml,在此文件中添加对本插件的 config 覆盖即可。

键默认说明
enabledtrue是否启用拦截
joiner单个空格多规则命中时拼接各规则文案的分隔符,可填空格或 \n 等,由配置决定形态
pwshMessage内置默认文案处于禁 pwsh 态时拦截 pwsh 的文案,支持 {reason} 占位符嵌入最近一次失败理由;空则回落到内置默认。禁 pwsh 态指本回合内某次被拦截工具失败
rulespatch 注入的单条匹配全角圆括号的默认规则,为空则不拦截规则列表,每条含 enabled / title / pattern / message。title 只用于设置页显示,留空则显示正则本身
extraToolspatch 注入的 edit_remote 与 write_remote额外拦截的工具列表,每项含 name 和 contentKey;给空数组则只拦截内置的 edit / write。文件路径参数固定按 file_path 读取,路径字段名不同的工具命中规则时 {file} 会填成「未知路径」;与内置 edit / write 同名的条目会覆盖内置映射
sessionOverrides{}会话级豁免,键为会话 id,值为该会话关掉的规则 pattern 列表。由会话视图的「写入规则」页写入

安装即随 cordis.patch.yml 注入一条默认规则,可直接对照修改;rules 为空则不拦截。设置页的开关与配置文件改的是同一份配置,两边都改以 profile 的覆盖层为准。

在设置页或会话页改过之后,完整配置会作为 profile 覆盖层固定下来,之后升级插件不会自动更新它。想重新跟随插件自带的默认值,把 profile 的 cordis.patch.yml 里本插件的 config 删掉即可。每条规则独立检查、任一命中即拦,缺 pattern 的条目被忽略。单条规则命中的输出即该规则 message 填占位符后的单行文本;多条命中时用顶层 joiner 拼接,不再自动追加明细。

pwshMessage 缺省或为空时回落代码内置默认文案,patch 也注入了同款,可在配置文件里改成别的写法;想带上原写入理由就在文案里加 {reason} 占位符。

配置示例,等价于 patch 注入的默认规则与工具范围:

patch 的 config 是整块替换而不是逐键合并,所以在 profile 里覆盖本插件的 config 时必须重述 extraTools,否则会退回空数组。

- id: dsh-write-rule-guard
  config:
    enabled: true
    joiner: ' '
    pwshMessage: 'あー!坏孩子被抓住啦!用 pwsh 绕过可不行哦!先改对了再来吧!'
    rules:
      - enabled: true
        title: 全角括号
        pattern: '[\uFF08\uFF09]'
        message: 本次写入未遵循用户偏好,已被用户拒绝写入。请修改为不使用括号的描述方式。行:{lines};文件:{file}
    extraTools:
      - name: edit_remote
        contentKey: new_string
      - name: write_remote
        contentKey: content

pattern 支持任意合法正则;若某条 pattern 是非法正则,该条保守放行不阻断。message 支持 {file}、{count}、{lines}、{pattern} 占位符,其中 {lines} 填充违规所在不重复行号的逗号分隔纯数字列表,如 3, 7。输出即填占位符后的结果,完全由 message 决定;需单行时 message 别写换行即可。

状态机与已知局限

对每个会话,按被拦截工具的结果维护一个只在当前回合内有效的开关:

事件结果
被拦截工具内容命中规则被拦进入禁 pwsh 态,记录该次规则理由
被拦截工具真实执行返回错误进入禁 pwsh 态,记录该错误信息
被拦截工具真实执行成功解除禁 pwsh 态,本回合后续 pwsh 放行
回合开始或结束一律重置为允许 pwsh

「成功」按真实执行结果判定,需要内容先过规则检查、再在 post-execute 看到无错误的返回值才算数;纯内容通过但执行阶段失败仍算失败。规则拦掉的调用也会以错误结果流经 post-execute,与执行失败走同一收口,语义一致。

为什么不直接检查 pwsh 要写什么:做不到。重定向、Out-File、Set-Content、变量、管道、运行时拼出来的命令,写文件的写法无穷多,很多内容还要等运行时才算得出来,静态检查拿不到,列黑名单必漏。所以这里不去猜命令的语义,只在「本回合已经出过一次写入失败」时把整条命令行先关上。规则查的始终是写入工具的内容,pwsh 本身从不参与内容匹配。

已知局限:禁用 pwsh 是为了拦住「直接用 pwsh 写文件绕过内容规则」这条路。本设计下模型只要先做一次成功写入把状态解开,之后仍可改用 pwsh 写入违规内容,从而绕开守卫——这是取舍后的有意行为:一次真实成功写入被当作「模型已遵守规则」的信号,代价是放开了这条潜在绕过路径。extraTools 配置的远程工具同样受规则检查,但远程操作的成功/失败判定由远端宿主决定。需要严格防绕过时不建议依赖本插件,应改用更底层、可逐命令校验的写保护。

构建

源码为 TypeScript:host 半身 src/index.ts,client 半身 src/client/index.ts 与 src/client/panel.tsx,用 tsdown 分别打包到 lib/index.js 与 lib/client.js。产物本身不带运行时依赖,tsdown 仅作 devDependency。

pnpm install
pnpm build    # 生成 lib/index.js 与 lib/client.js
pnpm watch    # 增量重建

导出

  • compilePattern(pattern):编译用户正则,非法时返回 null。
  • findMatches(content, pattern):扫描文本,返回匹配位置清单。
  • collectLines(hits):提取命中所在的不重复行号,升序排列。
  • fillMessage(template, ctx):替换报错文案占位符,ctx 含 file / count / line / pattern。
  • buildReason(message, file, hits, pattern):构造单条规则的单行拒绝原因。

License

MIT