前言¶
在 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。
典型用法¶
- 按上文命令为
desktopprofile 安装插件并重启 DSH。 - 在对话中让模型执行需要工作区外权限的操作(例如写工作区外路径、申请
danger-full-access等),触发 DSH 标准审批弹窗。 - 在命令行下方阅读插件生成的注释(风险、意图、按钮含义),再选择 Approve once 或 Deny。
- 需要回顾历史 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 并完全重启后试用。