前言¶
DeepSeek Harness(dsh)默认的输入框行为是「裸 Enter 发送、Shift+Enter 换行」。在写多行提示词时,这个顺序是反的:一不留神就发出去了,想换行还得先按 Shift。这会打断工作流,尤其是需要分多段输入长提示词的场景。
dsh 的 composer keymap 在 CRITICAL 优先级处理 Enter:裸 Enter 提交、Shift+Enter 落到纯文本编辑器的换行、Alt+Enter 被吞掉、CtrlKey/MetaKey 走加速提交。要在不修改 dsh 源码的前提下改变这个行为,需要在 window 捕获阶段拦截按键,重放官方已经实现的手势。
下面介绍 zevire/dsh-client-composer-enter,一个针对 dsh 输入框的第三方非官方插件,它把 Enter/Shift+Enter/Alt+Enter 的行为对调,同时原样保留官方的 Cmd/Ctrl+Enter 互补手势。
插件定位¶
dsh-client-composer-enter 是 DeepSeek Harness 的客户端插件,由维护者 zevire 开发。它不修改 dsh 任何源码,通过 profile bundle 的方式介入,在输入框按键层面改变默认行为。
插件在 dsh 0.1.7-rc.2 / 0.2.0-rc.2 / 0.2.1-rc.2(桌面版与 Web profile)上验证通过。它是一个零依赖、无打包器、不联网的本地插件,MIT 许可证。
核心功能¶
插件调整了输入框的 Enter 相关按键行为,具体如下:
| 按键 | 结果 |
|---|---|
Enter |
插入换行 |
Shift + Enter |
发送(重放官方 enter 手势) |
Alt + Enter |
发送(同上,第二个发送键) |
Cmd/Ctrl + Enter |
不改动 —— 官方互补 Queue/Steer 手势 |
Shift + Alt + Enter、AltGr+Enter 等 |
不改动 |
IME 组合中(isComposing / keyCode 229) |
交还输入法 |
/、@ 菜单或命令弹层打开 |
交还官方选择器 |
已认领命令 / 提交中(data-phase ≠ plain) |
交还官方提交路径 |
Cmd/Ctrl+Enter 在官方快捷键表里是 fixed.complementary(「使用互补的 Queue/Steer 方式」):默认「繁忙时排队」设置下,它在智能体运行时等于插话发送,空闲时等同普通发送。插件不动它,确保与官方行为一致。
安装与启用¶
本包是标准的 dsh profile bundle(package.json 声明 dsh.bundle.patch,cordis.patch.yml 插入一行 Loader 条目)。
桌面版:
1. 打开 dsh 设置
2. 进入「设置 → 插件 → 安装」
3. 粘贴本目录的绝对路径(如 D:\Code\dsh-client-composer-enter)
4. 装完后是停用状态,需在面板里启用
5. 桌面 profile 由 Electron 独占,CLI 会拒绝 dsh plugin --profile desktop …
其它 profile(CLI):
dsh plugin --profile web add /absolute/path/to/dsh-client-composer-enter
pnpm 会把包链接进 profile 的 node_modules,dsh 会把它追加进 dsh.profile.bundles。实测启用后即时生效,若未生效重启一次应用。
卸载:
- 面板里移除
- 或 dsh plugin --profile web remove dsh-client-composer-enter
配置¶
每次按键都会读 localStorage,改完无需刷新:
| 键 | 取值 | 作用 |
|---|---|---|
dsh.composerEnter |
off |
回到官方按键表:Enter 发送、Shift+Enter 换行、Alt+Enter 无行为 |
dsh.composerEnterSendKeys |
both(默认)/ shift / alt |
哪个组合键发送 |
兼容面¶
插件依赖 dsh 以下 DOM 选择器与语义,任一项改名或移除,插件只会退回官方按键表(不会破坏 composer):
| 选择器 / 语义 | 归属 |
|---|---|
[data-composer-input][contenteditable="true"]、data-phase="plain" |
ui-conversation |
[data-trigger-menu] |
ui-input-trigger |
[data-composer-card] [role="listbox"] |
ui-commands 弹层 |
keymap 的四种修饰键语义、按住键守卫(event.repeat) |
ui-conversation composer keymap |
已知限制¶
- 设置 → 快捷键里显示的仍是官方映射(
fixed.send/fixed.newline/fixed.complementary由官方只读注册)。实际生效以本插件为准。 Shift+Enter/Alt+Enter走官方enter手势,繁忙时的投递方式遵循官方设置(默认排队),插件从不插话。- 官方没有提供可用的按键 seam(固定输入观察回调在 window 冒泡阶段,晚于编辑器的 target 阶段),所以是 DOM 层改道。
- 只改文本输入区的 Enter;按钮、队列/插话控件、工作区选择器均不变。
适用场景¶
适合需要频繁输入多行提示词的 dsh 用户,尤其是使用 Web profile 或 CLI 的开发者。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
结尾¶
dsh-client-composer-enter 通过在 window 捕获阶段拦截按键并重放官方手势,在不修改 dsh 源码的前提下调整了输入框的 Enter 行为。如果你习惯「Enter 换行、Shift+Enter 发送」,这个插件可以直接使用。
- 插件目录页:https://www.skillhub.cn/plugins/zevire/dsh-client-composer-enter
- GitHub:https://github.com/zevire/dsh-client-composer-enter