dsh-approval-consult
审批等待期间,向执行 AI 提问,装了并启用 DSH 的自动审查插件时也可问自动审查 AI,问清风险与后果再决定;执行 AI 的回答会留在会话里。
安装
dsh plugin --profile web add dsh-approval-consult
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
审批咨询台 · dsh-approval-consult



[English](README.en.md) · 中文
在 DSH(DeepSeek Harness)里,当某个工具调用正在等待你审批时,让你可以分别问「执行任务的 AI」和「自动审查 AI」,把风险问清楚再决定;有用的问答会自动留在会话里,不会“选完就忘”。
这是一个本地 DSH Web 插件(宿主 Cordis 插件 + 浏览器端 dsh.client 模块),无构建步骤、无第三方运行时依赖。
为什么需要它
Auto 审查(@deepseek-ai/dsh-experimental-auto-review)会在工具执行前做一次风险审查。审查拒绝后,用户会看到一张审批卡片:
- 拒绝:AI 会立刻收手,但它不知道你为什么拒绝;
- 允许一次:AI 继续跑,但它不知道审查 AI 提醒了什么;
- 用户想弄明白审查意见,只能先拒绝、再把理由复制给 AI —— 又慢又容易丢上下文。
审批咨询台把这一步搬到审批卡片旁边:
- 悬浮胶囊 → 面板(桌面右侧抽屉 / 手机底部弹层);
- 「执行 AI」「审查 AI」两条独立通道,可自由选择问谁,也可以「双问」;没装官方自动审查插件时自动降级为只问执行 AI(不显示审查 AI 相关入口与文案,
reviewerMode可强制开关); - 常用问题一键发送,回答流式输出;常用问题可在面板内直接编辑(新增/删除/排序/恢复默认),
持久化到 ~/.dsh-approval-consult/presets.json(DSH 以 --profile 启动时落在该 profile 数据目录;
可用 dataDir 配置或环境变量 DSH_APPROVAL_CONSULT_DATA 覆盖);
- 执行 AI 的问答自动注入会话(AI 下一步就能看到;官方 Chat 默认隐藏普通 context 行,所以用户回看入口是面板线程与「咨询记录」历史面板);
- 审查 AI 的回答默认不进主对话,点「转达给执行 AI」才注入(仅审批等待期间可用;结束后记录只读,不能转达);
- 看完直接在面板里「允许一次 / 拒绝」,和官方审批卡片是同一个动作;
- 面板里能看到执行 AI / 审查 AI 的实时回答、缓存命中与「已保存到会话」标记;
- 与自动拒绝倒计时(
dsh-approval-timeout)可选集成:默认打开面板不打扰倒计时,只有你真正开始提问时才暂停(可配置on-open/off;该插件的取消是全局的,自动暂停遇到其它待审批项会拒绝并提示)。没装该插件时完全不探测、不显示任何倒计时内容。
安装
当前版本 v1.2.0,已发布到 npm(dsh-approval-consult)和 GitHub Release。
npm install dsh-approval-consult,或让 Agent 用plugin_manager安装这个包名;下面也保留了 tarball / 本地目录两种方式。
方式 A:npm
1. npm install dsh-approval-consult(或让 Agent 用 plugin_manager 的 install_bundle 安装 npm 包名);
2. 在 DSH Web 的「插件」里启用;
3. 重启一次 dsh web 更稳。
方式 B:从 Release 安装(tarball)
1. 在 Releases 下载
dsh-approval-consult-1.2.0.tgz;
2. 打开 DSH Web → 左侧「插件」→「添加插件」→「安装第三方插件」,填这个 tarball 的绝对路径,
或直接填下载链接
3. 安装完成后点「立即启用」,重启一次 dsh web 更稳。
方式 C:本地目录(源码 / 开发)
1. git clone https://github.com/0tests/dsh-approval-consult;
2. 打开 DSH Web →「插件」→「添加插件」→「安装第三方插件」,输入该目录的绝对路径;
3. 安装完成后点「立即启用」。
方式 D:CLI / 会话内
让 Agent 用 plugin_manager 的 install_bundle 安装该 tarball / 目录 / npm 包(需要审批权限)。
桌面端(DSH Desktop):桌面端内部是同一套 Web 应用,插件不用改代码,但要装进桌面端使用的
desktopprofile(它只启动这一个 profile)。步骤与验收清单见 [docs/DESKTOP.md](docs/DESKTOP.md)。
发布默认devWatch: false、devTools: false(安全默认)。本地开发时可在 profile 的
cordis.patch.yml覆盖:- id: approval-consult→devWatch: true/devTools: true。
以本地目录(link)安装且打开 devWatch 时,lib/impl.js改动会自动热重载;lib/client.js的改动由
DSH 的 client-hmr 自动热更到已打开的页面。修改package.json/cordis.patch.yml后建议重启一次 DSH。
使用
1. 触发一个需要审批的工具调用(例如 Auto 审查拒绝一次中风险操作,或 sandbox 需要临时提权)。
2. 审批卡片出现时,右上角(手机在右上角偏下)会出现「⚠ 审批有疑问?」胶囊。
3. 点胶囊打开面板:
- 顶部:状态、工具名;若装有
dsh-approval-timeout会显示倒计时与暂停入口(没装则完全不做这件事); - 上下文卡片:风险等级/审查结论/理由、审查依据条数、工具参数(可展开)、执行 AI 上一步说明;
- Tab:执行 AI / 审查 AI(未装自动审查插件时只有执行 AI)/ 双问(同上);
- 预设问题 chips:点一下即发送;点右侧「编辑」可新增/删除/排序/恢复默认,保存后立即生效;
- 输入区:自由提问,支持追问;回答流式显示,并标注缓存命中/输入/输出 token;
- 底部:拒绝 / 允许一次。
4. 读完再决定。执行 AI 的问答会以「审批咨询记录」注入会话;审查 AI 的回答可点「转达给执行 AI」(审批结束前)。
5. 审批结束后面板保留全部问答(banner 提示已结束),可继续阅读或关闭。
审查 AI 的两种模式
- 官方审查已捕获:直接显示当时那次审查的
risk/decision/reason、审查依据条数,并可追问。上下文 = 官方那次审查请求的原始前缀(REVIEW_POLICY+ 四段材料 + 它的结论),不塞主对话。 - 没有捕获到官方审查(例如 sandbox 提权这类非 auto-review 的审批):面板显示「审查材料已就绪」和「让审查 AI 重新评估」按钮。点击后按官方
REVIEW_POLICY与同样的四段材料规则(从会话日志重建ENVIRONMENT / PROJECT_INSTRUCTIONS / FILTERED_HISTORY / PENDING_ACTION)跑一次分类,给出 advisory 的风险结论,然后可继续追问。这只是帮你判断的参考意见,不是官方审批结论。
没有装自动审查插件时
宿主启动时通过 cordis 插件注册表检测 experimental-auto-review 是否在运行(reviewerMode: 'auto' 默认):
- 未安装/未启用:
/context.features.reviewerAvailable = false,客户端隐藏「审查 AI」tab、双问、审查侧文案与「重新评估」入口,只保留「执行 AI」问答;宿主/ask、/review对 reviewer 也直接返回409 reviewer-unavailable(防止旧页面/脚本绕过)。 - 已安装:恢复双通道;也可用
reviewerMode: 'on' / 'off'强制开关。
配置
在 profile 的 cordis.patch.yml 中覆盖本插件的 config(或在 bundle 的 cordis.patch.yml 中修改后重启):
键 · 默认 · 说明
devWatch · false · 宿主实现文件变化时自动热重载(本地开发用 profile patch 打开;生产保持 false)
maxQuestionChars · 2000 · 单条提问长度上限
maxConcurrentJobs · 3 · 同一审批下并发回答数上限
executorMaxTokens · 4000 · 执行 AI 侧回答预算(代码内再按 ≥3000 兜底)
reviewerMaxTokens · 2400 · 审查 AI 侧回答预算(代码内再按 ≥1800 兜底)
threadTtlMs · 7200000 · 线程在宿主内存中的保留时间
timeoutAutoPause · on-send · 自动拒绝倒计时的暂停策略:on-send 仅开始时提问暂停 / on-open 打开面板即暂停 / off 完全不自动暂停(面板里的「暂停倒计时」按钮始终可用)
reviewerMode · auto · 审查 AI 能力:auto 按官方自动审查插件是否安装/启用自动检测(没装时只保留执行 AI);on 强制显示;off 强制只问执行 AI
presets · 内置 · { executor: [...], reviewer: [...] } 部署默认常用问题;用户在面板里编辑后以 <数据目录>/presets.json 为准(优先于本配置)
dataDir · 自动 · 用户数据目录。默认 ~/.dsh-approval-consult;--profile 启动的 DSH 用该 profile 的 data/approval-consult;也可用 DSH_APPROVAL_CONSULT_DATA 覆盖
devTools · false · 开放 /debug/* 排障接口(含会话注入/能力开关,生产务必关闭)
数据目录优先级:dataDir/DSH_APPROVAL_CONSULT_DATA>$DSH_PROFILE_DIR/data/approval-consult
>--profile推导 >~/.dsh-approval-consult。npm 安装升级不会覆盖用户配置。
旧版本写在包内 data/presets.json 的配置会自动读取并在下次保存时迁移到新位置。
设计要点
1. 双通道、互不污染;上下文缓存命中
- 执行 AI 通道:捕获主对话最近一次请求的完整
GenerateOptions(provider/model/system/tools/messages/toolHistory 原样保留),只在其后追加一条 user 消息。因为前缀逐字节一致,provider 的 prompt cache 基本全部命中(实测 63.6 万输入 token 中 63.4 万为缓存命中,97%–99.7%)。 - 审查 AI 通道:捕获 auto-review 自己那次审查请求(
system以REVIEW_POLICY开头),原样复用;追加它的结论 JSON 和本线程问答回合。追问时前缀继续增长,后续同样命中缓存。 - 两条通道都带
[[approval-consult-side-query]]哨兵 + `WeakSet
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:8,最后更新 2026-11-05