dsh-approval-explainer:在 DSH 审批弹窗旁用模型推理解释命令含义与风险

前言

在 DeepSeek Harness(dsh)里,模型若要执行工作区外的操作,宿主会弹出审批对话框,通常只展示一行即将执行的命令。你要自己推断它做什么、会动哪些路径、点「同意一次」或「拒绝」各意味着什么;看不懂时,往往只能在盲目信任与盲目拒绝之间选。

社区插件 dsh-approval-explainer(维护者 ArisuYuuko,分类 admin-security)在同一弹窗里追加一段由模型推理生成的注释:代码在做什么、模型想达成什么、风险等级及理由、对各按钮含义的说明,便于带着依据做决定。DSH 生态主张「一切皆插件」;插件目录站 SkillHub 为社区站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-approval-explainer 是 DSH 审批弹窗的 AI 注释器:仅在模型请求权限外操作、触发真实审批时,利用会话中的 LLM 在后台生成说明,并在浏览器侧渲染到审批详情区域。它不改写审批策略,只观察 approval/request 瀑布流并补充可读信息。

核心功能

弹窗上的注释内容

未安装插件时,审批提示可能类似:

即将执行
& '<temp>\diagnose-windows-sandbox-acl.ps1' -Path 'D:\some-project' -AllowRewrite

安装后,同一弹窗会额外出现结构化说明,例如风险等级、代码作用、模型意图、风险判定理由、建议,以及各选项的实际后果(文件是否真的会写入、拒绝后模型会如何被通知等)。README 强调:注释会说明「Approve once」不只是「命令会跑」,还包括文件是否落盘、同一次授权下其他写入是否也被覆盖等决策所需信息。

设计约束(与行为相关)

要点 说明
仅真实审批 不对常规工具调用做注释;README 举例测量中 approval/request 2 次、tools/pre-execute 259 次,全量注释等于没有信号
不阻塞审批 后台生成,弹窗立即出现;生成失败或超时不影响你可批准的内容
失败可见 生成失败时在面板展示原因,而非静默挂起
参数来自会话 approval/request 不带工具参数,插件按 callId 在会话日志中查找 tool/call,找不到则如实说明,不编造
提示注入防护 系统提示将代码、路径、命令视为数据而非指令
不改策略 只观察审批瀑布,不决定谁可被授权

审批历史

每次真实 escalation 会记录,可通过本地 Web 端口访问:

http://127.0.0.1:<dsh-web-port>/dsh-approval/history

自 v0.9.0 起,浏览器半会在 Session 标题操作行(与 Conversation / Trajectory 同级,槽位 conversation.session.header.actions)增加 Approval history 按钮,点击在新标签页打开上述页面。

安装与启用

桌面端使用的 profile 一般为 desktop。安装命令(来自仓库 README):

dsh plugin --profile desktop add github:ArisuYuuko/dsh-approval-explainer

首次使用某 profile 会初始化该 profile。安装后需完全退出并重新打开 DSH;仅刷新页面不够,宿主侧(host half)只在进程启动时加载。

验证配置层是否生效:

dsh --profile desktop --dump-config

期望看到类似片段:

# == dsh-approval-explainer
- id: dsh-approval-explainer
  name: dsh-approval-explainer
  inject:
    - llm
    - approval

该插件为纯 JavaScript、无构建步骤,README 说明因此通常不需要为 allowBuilds 额外授权 pnpm。

卸载(含配置层):

dsh plugin --profile desktop remove dsh-approval-explainer

package.json 声明引擎要求为 dsh 版本 >=0.2.0-rc.1 <0.3.0-0,许可证 MIT;当前资料中 npm 包版本为 0.9.4。

典型用法

  1. 按上文命令为 desktop profile 安装插件并重启 DSH。
  2. 在对话中让模型执行需要工作区外权限的操作(例如写工作区外路径、申请 danger-full-access 等),触发 DSH 标准审批弹窗。
  3. 在命令行下方阅读插件生成的注释(风险、意图、按钮含义),再选择 Approve once 或 Deny。
  4. 需要回顾历史 escalation 时,在 Session 头点击 Approval history,或访问 http://127.0.0.1:<dsh-web-port>/dsh-approval/history。

注释在后台异步生成,弹窗会先出现;若 LLM 尚未返回,可稍等面板更新,或根据失败提示排查(不影响你是否具备批准权限)。

实现要点(便于排查问题)

插件是 DSH bundle:npm 包携带 cordis.patch.yml,向 profile 贡献一层配置;dsh plugin add 安装包并追加到 dsh.profile.bundles。

  • lib/index.js(Node 宿主):监听 approval/request,后台调用 LLM 生成注释、缓存,并提供 8 条 HTTP 路由。
  • lib/client.js(Web 浏览器):注册 conversation.approval.detail 槽,渲染命令与注释卡片;须以更低 priority(如 -1)覆盖官方 UI 的 priority: 0。

README 列出两条硬约束:宿主不得自行再注入 client 脚本(会导致 web 启动失败及 DSH 自愈清配置);宿主 apply() 不得抛错,否则可能出现「安装后 DSH 无法启动」。

适用场景与注意

适合:经常在 DSH 里批准 shell、文件、权限 escalation 的开发者;希望在 human-in-the-loop 环节看到可核对的风险与意图说明,而不是单行命令。

注意:

  • 插件以当前 dsh 进程权限运行,会向 LLM 发送与会话相关的上下文以生成注释;安装前应阅读 源码 与 MIT 许可证,确认符合你的安全策略。
  • 注释是辅助信息,不能替代你对命令与路径的审查;策略仍由 DSH 本体决定。
  • 社区目录页星标等统计以站点展示为准;GitHub 仓库当前资料中星标为 0。

结尾

dsh-approval-explainer 把审批弹窗从「一行命令 + 两个按钮」扩展为带风险、意图与选项含义的说明,且刻意不阻塞、不篡改审批结果。若你在桌面 DSH 中频繁遇到权限外操作,可按 README 安装到 desktop profile 并完全重启后试用。

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

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

小夜