dsh-ps-preflight:Agent 执行 PowerShell 前的静态分级与审计

前言

在 DeepSeek Harness(DSH)里给 agent 开 PowerShell,授权往往按「能碰哪些目录、要不要审批、沙箱开不开」来管范围;一条已经落在授权范围内的 Remove-Item -Recurse -Force 仍然可能是不可逆操作。现有控制面通常不会按命令文本本身再判一档风险。

下面介绍的 dsh-ps-preflight(维护者 dingchenhui0618-arch,分类 admin-security)在命令进 shell 之前做同步静态分级:删除、覆盖、网络下载、触碰凭据等维度,高风险要求二次确认,每条判定写入本地 JSONL 审计。实现为零依赖、不联网、不调模型;判定是纯函数,README 称单条命令亚毫秒级出结果。

这是什么

dsh-ps-preflight 是 DSH 社区插件(目录页:skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight)。它在 pwsh / powershell 工具调用上挂 tools/pre-execute 钩子:每条命令得到 none / low / medium / high 之一,附带命中规则、评分与命令摘要。社区目录与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,装插件前建议自行查看源码与 MIT 许可证。插件与宿主同进程运行,不能当作独立安全边界。

核心功能

全量预检与四类必测

  1. 默认拦截工具名:pwsh、powershell(可在配置里改 tools 列表)。
  2. 必测四类:删除、覆盖、网络下载、触碰凭据;另覆盖动态执行(如 iex、-EncodedCommand、ScriptBlock::Create)、系统改动、权限改动。
  3. 组合升级:例如「下载且执行」「读凭据且外发」会直接升到 high,即使单步看起来不致命。

风险档与动作

档位 含义 动作
none 只读、查询等 放行
low 可恢复的写 放行
medium 单文件删除、覆盖、下载、读凭据路径等 记录,不拦
high 递归删除、强制推送、下载并执行、凭据外发、系统/权限改动等 二次确认;拒绝或超时则不执行

medium 故意不拦,避免日常工作里频繁点确认;分界线放在 README 所称的「不可逆」一侧。

二次确认

  • 面板内确认(默认 confirmMode: auto 下优先):「预检」面板最近 8 秒内仍在轮询时,命令停住,卡片倒计时,120 秒内未点视为拒绝(可用 confirmTimeoutMs 调整)。
  • harness 原生审批:面板未打开或在其他窗口时走 tools 的 ask;会话 approval policy 为 never 时失败关闭,等同拒绝。
  • mode: audit 时只记录、不拦。

待确认队列是宿主级:同一 DSH 进程内各会话的高风险命令共用一个队列。

审计

默认路径为 $DSH_HOME/ps-preflight-audit.jsonl(通常 ~/.dsh/ps-preflight-audit.jsonl),可通过 auditPath 修改。每行 JSON 含时间、tier、decision、findings、脱敏且截断至 300 字符的 command 等字段。经人工确认的高风险命令会写两行(分析 pending 与结论 allow/deny)。超过 2 MB 轮转至 .1(只保留一代)。脱敏为模式匹配,README 明确说明不是保证。

预检面板

装好后对话视图顶部多一个「预检」tab:计数、待确认队列、「试一试」(只分级不执行)、最近记录,底部显示审计文件位置与大小。

与 dsh-warden 的差异(README 自述)

同维护者之前的 dsh-warden 在工程骨架上有参考;判定逻辑、面板与审计格式为本项目新写。warden 在正则命中后调模型;本插件纯规则、每条命令都分级并落审计,高风险必二次确认,命令参数不出本机。

明确不覆盖的能力

README 列出限制:不是安全边界、不是完整 PowerShell 解析器、只看命令文本、不覆盖 bash/computer、分析器异常时 degraded 放行、审计写失败会被吞掉等。使用前应把这些边界当作设计前提,而非「已实测某产品」的结论。

安装与启用

DSH 要求见 package.json:dsh 版本 >=0.2.0-rc.2 <0.3.0。官方 README 安装方式如下。

# 从 npm(发布后)
dsh plugin --profile <你的 profile> add dsh-ps-preflight

# 或直接从 GitHub 源码
dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-ps-preflight

README 说明:不需要任何配置即可使用,默认 mode 为 enforce。

可选配置写在插件 config(cordis.patch.yml 的 - id: dsh-ps-preflight 条目下),例如:

键 默认 说明
mode enforce audit = 只记录不拦
confirmMode auto panel / ask / auto
confirmTimeoutMs 120000 面板等待超时
panelWindowMs 8000 判定面板是否「有人在看」
tools ["pwsh","powershell"] 拦截的工具名
auditPath $DSH_HOME/ps-preflight-audit.jsonl 审计文件
maxAuditBytes 2097152 轮转阈值

典型用法

  1. 安装并打开 DSH 对话,切到「预检」tab,观察检查条数与最近记录。
  2. 在「试一试」中粘贴待执行命令,点「预检」,查看档位与命中规则,再决定是否让 agent 真正调用 shell 工具。
  3. 若 agent 触发 high,在待确认卡片点「确认执行」或「拒绝」;若未开面板,按 harness 原生审批流程处理。
  4. 需要只观测、不拦截时,将 mode 设为 audit;需要固定确认通道时,将 confirmMode 设为 panel 或 ask。
  5. 事后复查:tail 或编辑器打开 auditPath 对应 JSONL,按 decision、tier 过滤。

适用场景与注意

适合:在 Windows 或跨平台场景下频繁让 agent 跑 PowerShell,希望在误删、覆盖敏感文件、一键下载执行、凭据外发等路径上多一层可解释、可审计的闸门,且不希望把命令发给外部模型。

注意:

  • 插件不能防同进程恶意绕过;安装前请阅读 GitHub 仓库 源码与 MIT 许可证。
  • 动态拼接、自定义函数、从文件读入的脚本等,静态文本分析可能看不见。
  • 社区目录星标等信息以站点为准;仓库 README 标注 136 条测试通过、Node ≥22。

结尾

dsh-ps-preflight 补的是「命令进 shell 前」的一层:纯规则分级、高风险二次确认、全量本地审计,与范围类授权互补。目录页:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight;源码与详细规则表:https://github.com/dingchenhui0618-arch/dsh-ps-preflight。

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

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

小夜