kxdyh/dsh-agent-governor ↗★ 1

@kxdyh/dsh-agent-governor

Two interception layers for DeepSeek Harness agents: a DOL communication-semantics layer and a Sentinel tool-execution layer, each independently switchable from the conversation header. 适合需要对Agent的通信和工具执行进行安全审计与拦截控制的用户。

패키지
@kxdyh/dsh-agent-governor
호환성
미검증
버전
1.0.0
라이선스
MIT
최근 업데이트
2026. 9. 30.

설치

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:kxdyh/dsh-agent-governor

使用

元素含义
标题栏右侧的盾牌收纳两个开关。旁边的小圆点:灰=全关,橙=只开一层,绿=两层都开;出现拦截时短暂脉冲
盾牌右侧的数字自本次启动以来的拦截总数(Sentinel 拦截 + DOL 标记)
点击盾牌面板以 180–200ms 的 scale(0.96) → 1 + 淡入 + 上浮展开,两行分层卡片错峰入场;点击面板外或按 Esc 收起
每层的开关独立开关该层(role="switch",带 aria-checked)
影子模式该层只记录、不拦截,用来在正式启用前校准规则(对应截图里的 Shadow Mode)
统计行该层真实计数:Sentinel = 检查/拦截/证据条数;DOL = 审计/标记/纠正
清零统计只清计数,不动开关和证据缓存
盾牌右边的账本图标拦截记录:公共记录浮层,回答"哪一步被拦、为什么"
Sentinel 层详情里的删除防护删除拦截的子控件:右侧是开关,下面三档强度 —— 关注 / 拦截 / 严格。关闭不是强度,是那个开关;关掉后完全不检查删除操作

删除防护的三档强度(默认 拦截):

强度行为
关注只记录,不拦任何删除(适合先观察一段时间再收紧)。命中的记录带"影子"标记,只进记录不计入拦截
拦截拦下"未被你点名、也不是本会话自己创建"的递归强制删除(rm -rf、Remove-Item -Recurse -Force、del /s、rmdir /s)。单文件删除不受限
严格连单文件删除也要先有点名/属于自己创建(Remove-Item a.txt、rm a.txt 都会拦)。仍保留"自己创建的产物可删"与 tmp/cache 等豁免

面板默认视图保持精简:只有把该档位改成非默认时,Sentinel 那一行才会出现一个小标签(删除:关注 / 删除:严格 / 删除:关),点开 ? 才能改。

拦截记录每行 = 时间 · 层标签 · 规则名 · 第几步,下一行是理由;点某一行展开对象、 来源会话与轮次、规则 id。顶部三个筛选(全部/工具拦截/输出标记)+ 清空。最多保留 80 条, 落盘在 /storages/agent-governor-log.json,重启后继续累积。 记录示例(真实 payload):

{ "layer": "sentinel", "rule": "sentinel.evidence-gap", "deontic": "obligation",
  "title": { "zh": "数值证据缺失", "en": "Ungrounded numeric argument" },
  "detail": "参数中的数值 4213 未出现在本会话的已验证证据中(用户的输入或任何工具的真实返回)",
  "target": "process_refund {\"orderId\":\"A-1\",\"amount\":4213}",
  "turn": 6, "step": 12, "session": "session-2f1c", "shadow": false }

开关状态写在 /storages/agent-governor.json,重启后保持;两个半部分通过一个 仅限本机回环的 HTTP 路由(/dsh-agent-governor/state、/config、/reset)交换状态, 所以面板里的每个数字都来自宿主实时数据,没有估算。

入口一定存在。 选中会话时盾牌在标题栏右侧工具区;没有选中会话时(Hero 页)先在右上角浮层出现。 每次挂载后客户端会自检"我到底画出来了没有"(rect、计算样式、是否有带 transform 的祖先、 elementFromPoint 是否命中自己)并把结果上报给宿主;如果浮层里其实显示不出来,会自动改用标题栏 里的兜底席位,不让你找不到入口。自检结果和渲染异常都能从 GET /dsh-agent-governor/state 的 diag 字段读到。

配置

在 profile 的补丁层里给该条目加 config 即可(config.ruleOverrides 可按规则 id 开关, dispensations 用于豁免,repeatLimit 用于循环门):

- id: agent-governor
  name: '@kxdyh/dsh-agent-governor'
  config:
    dol: true
    sentinel: true
    repeatLimit: 5                                   # 打开重复调用门
    ruleOverrides:
      dol.absolute-claim: true                       # 打开绝对化承诺检查
      sentinel.evidence-gap: false                   # 关掉证据门
    dispensations: ['sentinel.history-rewrite']      # 豁免强推检查