# dsh-approval-autofocus 让 Web / 桌面端 DSH 的**审批卡一出现就能直接按 Enter 批准**,不用先点一下卡片。 零依赖的 DSH 客户端小插件。装上以后: - `Enter` → **允许一次** - `Esc` → **拒绝** [English](README.md) ## 它修的是什么 审批卡(`@deepseek-ai/dsh-client-ui-approval`)本身已经绑定了 Enter / Esc,但它的键盘处理有一道前提——**焦点必须已经在卡片内部**: ```js if (event.defaultPrevented || !event.currentTarget.contains(document.activeElement) || ...) return; ``` 而审批卡是**接管 composer 位置**渲染的:被替换掉的输入框以 `display:none` 隐藏,浏览器随即把焦点退回 `
`,卡片自己又不主动取焦点。于是 Enter 落空,必须先点一下卡片正文才有效。 **不装插件时的土办法**:审批卡出现后,先点一下卡片正文(不是按钮),再按 `Enter`。 ## 它做什么 监听 DOM,一旦审批卡出现就把焦点移进卡片正文区域;但只在「焦点本来就空闲」时才移动: | 当前焦点 | 行为 | | --- | --- | | ``,或已因 composer 被接管而丢失 | 移入卡片 | | 终端、对话框、任何输入框 / 可编辑区域 | **不动**,绝不抢焦点 | 卡片自身的行为完全不变:拒绝按钮、`Esc`、输入法组合状态、待处理请求锁都照旧。 ## 安全说明 审批是安全边界,而这个插件刻意把它变成一键操作——有几点值得知道: - 插件**只移动焦点**,不代按任何按键、不自动批准任何东西;`Enter` 必须还是你自己按的。 - 只在焦点空闲(`` 或已被隐藏的 composer)时才接管;你在终端、对话框、任何输入框里打字时它什么都不做。 - 如果模型的输出试图诱导你按 `Enter`(提示词注入),卡片预聚焦意味着误触一次 `Enter` 就会批准。介意的话可以点走焦点——插件不会抢回来——或直接停用插件。 - 兜底选择器永远不会落在「允许一次」按钮或其他操作控件上:按钮和表单控件都被排除在外,误触 `Enter` 最坏也只是落在卡片正文里没有任何效果。 ## 安装 ### 从压缩包安装(推荐) 1. 把文件夹解压到一个**不会删、不会挪**的位置,例如 `~/插件/dsh-approval-autofocus`; 2. 侧栏 → **插件** → **添加插件**,粘贴该文件夹的**绝对路径**; 3. 装完点 **立即启用**;若页面提示需要重启,重启一次 DSH。 > ⚠️ DSH 是链接到这个目录的:目录被删或挪走,插件就会失效。 ### 从 Git 仓库安装 侧栏 → **插件** → **添加插件**,粘贴仓库地址即可。仓库需要一个真实的远端。 ### 手动挂到 profile 把包加进 `~/.dsh/profiles/