在审批卡上增加可选的拒绝理由:理由会先作为 steering 消息进入当前轮,再把审批答成拒绝;浮层只跟随你正在查看的会话。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-approval-reason-dock
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:FzqxDedafeiyu/dsh-approval-reason-dock
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
给 DeepSeek Harness Web 端加一层审批拒绝理由:审批卡出现时可以填一句理由,插件会先把理由作为 steering 用户消息送进当前对话,再把审批答成「拒绝」。这样模型下一步就能读到理由,而不是只收到一句"用户拒绝了工具 X"、只能靠猜。
预览

为什么做这个
Harness 的审批卡只有「允许一次 / 拒绝」两个动作,拒绝结果是封闭的枚举值,协议里没有携带理由的字段。于是拒绝理由要么丢失,要么得等下一轮再说。当拒绝本身有上下文("网络不稳"、"先别动那个文件")时,它应该立刻进入对话。
这个插件在宿主 UI 之上加一个小浮层,不替换内置审批卡、不修改审批协议与审计事件;渲染失败时静默隐藏,内置卡照常工作(fail-soft)。
行为
- 当前会话存在可作答的审批时,右上角出现浮层(注册在
shell.overlay槽)。 - 浮层跟随主视图当前会话:只提供该会话的审批;其他会话的审批保持安静,切过去才会出现。标题下方显示会话名。
- 浮层默认展开,可折叠成半透明的「待审核」小按钮以免挡住正文,点击小按钮重新展开;每个新审批默认展开。
- 理由草稿按审批分别保留:多个会话同时挂审批时,来回切换不会清掉另一个会话已输入的文字。
- 填理由并点「拒绝并说明」:
- 以
remote.session.prompt(mode: "steer")把(审批拒绝理由)<文本>作为 steering 用户消息送进当前轮; - 如果当前轮已不再接受 steering,则自动降级为
mode: "queue"排队; - 最后把审批答成
rejected。
- 以
- 拒绝成功后浮层立即收起;只有理由发送失败时保留错误码提示(可手动关闭)。
- 「只拒绝」= 不带理由,等价于内置卡的「拒绝」。
安装
要求 DSH 0.2.2-rc.1 或同系列更高的 0.2.x(见 engines.dsh)。
版本匹配:
| DSH 版本 | 插件版本 | 状态 |
|---|---|---|
0.2.1-rc.2 |
0.1.0 |
已验证稳定;0.1.1 不支持该版本线 |
0.2.2-rc.1 |
0.1.1+ |
已验证(0.1.1 的全部真机测试都跑在这个版本) |
在 DSH 0.2.1-rc.2 上请显式安装已验证的旧版本线:
dsh plugin --profile web add dsh-approval-reason-dock@0.1.0
0.1.1 不声明支持 0.2.1 的原因:它需要客户端侧 uiSession 服务注入(exports.inject),而该服务在 0.2.1 的客户端 runner 中是否存在未验证。DSH 插件管理器会按 engines.dsh 做兼容性评估,0.1.1 在 0.2.1 上可能被标记为不兼容;固定安装 @0.1.0 可以不依赖那次校验。
用 DSH CLI 安装(npm 包):
dsh plugin --profile web add dsh-approval-reason-dock
推荐:在 DSH 的插件管理页用 npm 包名或 GitHub spec 安装 bundle:
dsh-approval-reason-dock
github:FzqxDedafeiyu/dsh-approval-reason-dock
或者从 GitHub 源码用 CLI 安装:
dsh plugin --profile web add github:FzqxDedafeiyu/dsh-approval-reason-dock
手工管理 profile 的话:把 bundle 加入 dsh.profile.bundles,让它自带的 patch 插入行:
- insert:
- id: approval-reason-dock
name: dsh-approval-reason-dock
包内包含 cordis.patch.yml、index.js(空宿主半)、client.js(浏览器半)、locale/*.json、icon.svg。
兼容性与风险
- 浏览器半依赖 DSH 客户端内部接口:
shell.overlay槽、uiSession的会话状态交互、remote.session.prompt。这些不是稳定的公开契约,Harness 升级后可能需要更新插件。 - 内部接口缺失时浮层保持隐藏,审批仍可通过内置卡正常完成(fail-soft)。
- 插件不发起网络请求,除待处理审批的元数据外不读取会话内容。
隐私
你输入的理由会成为会话日志与模型上下文里的普通用户消息(限 500 字、纯文本、不渲染 HTML),不会发往任何其他位置。
卸载
从 dsh.profile.bundles 移除 dsh-approval-reason-dock(或在插件管理页卸载),重启 DSH 即可。
开发
node test/harness.mjs
harness 会校验清单/打包形态、加载真实的 client.js factory,并在假的 React/Cordis/槽环境里驱动完整拒绝流程(理由投递、steer→queue 降级、失败提示、审批已被处理)。npm run pack:check 校验实际发布文件清单。
仓库结构:
client.js 浏览器半(window.__ModuleLoader__ bundle)
index.js 宿主半(空 apply)
cordis.patch.yml Loader 行
locale/{en,zh}.json 展示元数据
icon.svg 插件图标
test/harness.mjs 沙箱测试
.github/workflows/ CI
维护
发布流程、本机安装/回退、升级冒烟与排障见交付与维护手册。
许可证
MIT,见 LICENSE。
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-task-board★ 10290
侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
zhu1090093659/dsh-web#packages/dsh-web-all★ 10290
DSH Web UI 插件与皮肤合集:任务看板、git 图、右侧面板、远程移动端 UI、桌宠、实时 token 统计与皮肤中心。
ccch1mneyyy/dsh-TUI★ 7336
Claude Code 风格全屏终端 UI:像素鲸鱼顶栏、实时工作状态行、思考流式展开。
MeteorNOX/DeepSeek-Balance-Whale-Widget★ 7093
右下角常驻的小鲸鱼挂件:余额、今日已用与每轮对话消耗(含峰谷价),余额预警与今日预算的泡泡内容都可编辑;泡泡点击序列模块化自定义,支持并列加权 A/B、随机台词与随机图片;内置 30+ 厂商模板(OpenAI / OpenRouter / Kimi / 硅基流动 / 方舟 / 智谱 / MiniMax 等),按模型查余额与订阅额度;另有任务结束音效、导入音频、自定义角色与资源管理。数据全在本机,无遥测。
omdsh-dev/DSH-better-sidebar★ 5036
侧边栏完整工作台:内置文件渲染编辑、终端、Git 与子代理,支持三方插件注册新 Tab。
Devin-AXIS/deepseek-design#deepseek-idesign★ 1792
可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。