dsh-pr-gate:在写入时刻做确定性写入门控

前言

在 DeepSeek Harness(DSH)里跑智能体时,常见防护集中在「读回审阅」或「命令拦截」:用第二个模型重读回合、根据退出码核对目标、或阻止破坏性 shell 命令。PR 合并前,不少团队还会在 CI 里用 scope 策略和残留扫描拦不合规 diff。问题是:智能体每次 write / edit / str_replace_editor 落盘时,若没有在运行时做同样的确定性检查,问题文件已经写入磁盘,只能等 PR 阶段再发现。

下面介绍社区插件 dsh-pr-gate(维护者 zhengqiuyang),它把与 agent-pr-gate 在 CI 侧使用的 scope 策略和残留规则,挂到 DSH 的工具执行链上,在写入前拒绝、写入后扫描,并留下可给 CI 消费的 JSONL 账本。信任路径上不调用 LLM。

这是什么

dsh-pr-gate 是 DSH 的 admin-security 类插件,目录页见 SkillHub,源码在 GitHub。npm 包版本为 0.1.0(MIT)。

一句话定位:对智能体每一次文件写入做 scope 策略 + 残留扫描,并把原先留在 PR/CI 的门控前移到 写入当下。

核心功能

插件在三个阶段工作,均来自 README 中的说明:

阶段 Hook 确定性行为
写入前 tools/pre-execute Scope 策略:deny 的 glob 始终优先;allow 非空时表示「只允许这些路径」。被拒绝的写入不会落盘
写入后 tools/post-execute 对写入文本做残留扫描(例如面向审阅者的注入文案、被跳过的测试、调试标记等)。默认 residueMode: warn 只记录;设为 block 时会让写入失败并给出纠正反馈
全程 JSONL ledger 每个决策一行:工具、路径、动作、内容的 sha256、匹配模式、残留类型等。CI 中的 agent-pr-gate 可把该文件当作会话侧记录消费

一套策略,两个 enforcement 点:配置项 policyFile 可指向仓库里的 agent-pr-gate.yaml,与会话内 enforcement 与 CI 侧 allow/deny 对齐(策略条目会 union)。也可以不用文件,仅在插件配置里写 inline 的 allow / deny。

Scope 的 glob 语义与残留规则从 sibling 项目 agent-pr-gate vendored 同步(开发时用 npm run sync)。

安装与启用

官方安装命令(README 原文,默认 profile):

dsh plugin --profile default add dsh-pr-gate

README 说明:从 npm 安装,无需 build,也无需 allowBuilds 授权;仓库内已带预构建的 lib/。

兼容性(资料原文):

  • DSH:在 0.2.x 线验证(资料中的源码快照为 0.2.1-alpha.2);任意 profile 可通过 dsh plugin add 安装
  • Node:>= 20(CI 矩阵含 Node 20/22/24,Ubuntu 与 Windows)

安装后启动 DSH 时,日志中会出现类似 [dsh-pr-gate] active: … 的提示(README Compatibility 一节中的 disposable-profile 验证描述)。

典型配置

在 DSH 插件配置中增加(示例来自 README):

- id: dsh-pr-gate
  name: dsh-pr-gate
  config:
    tools: [write, edit, str_replace_editor]
    allow: [src/**, docs/**]     # 非空 = 只允许这些
    deny: ["**/*.pem", .github/workflows/**]
    policyFile: ""               # 或例如 agent-pr-gate.yaml
    residueMode: warn            # warn | block
    ledgerPath: .dsh-pr-gate/session.jsonl

tools 列出需要门控的写入类工具;ledgerPath 指定账本路径。若仓库已有 agent-pr-gate 的 YAML,把 policyFile 指过去即可与 CI 共用同一套策略文件。

适用场景与注意

适合谁:已经在 PR 或 CI 里用 agent-pr-gate(或同类 scope + 残留规则)的团队,希望在 DSH 会话里 写入前即拦截 越界路径或敏感文件,并在写入后捕获明显「残留」内容,同时保留 deterministic 账本供后续 CI 对齐。

权限与安全:插件随当前 dsh 进程权限 运行,能 hook 到配置中的写入工具。安装前应阅读 源码与 LICENSE,确认策略与账本路径符合本仓库规范。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

边界:README 写明信任路径零 LLM;路线图中有 bash 写启发式、ledger 到 GitHub check-run 等项,当前以 README 表格中的三阶段能力为准。若 DSH 官方或审阅类插件 later 提供同类确定性写入门控,维护者在 README「Kill criteria」中说明可能冻结在最后一个可用版本。

结尾

经过上面的步骤,你可以在默认 profile 安装 dsh-pr-gate,用 allow / deny 或 policyFile 对齐 CI 策略,并选择 warn 或 block 处理残留扫描结果。写入决策会落在 ledgerPath 指定的 JSONL 中,便于与 agent-pr-gate 的 PR 检查衔接。

  • 目录页:https://www.skillhub.cn/plugins/zhengqiuyang/dsh-pr-gate
  • GitHub:https://github.com/zhengqiuyang/dsh-pr-gate
羽毛球分组比赛记分
小程序二维码

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

小夜