dsh-enter-lock
中文 | English
A DeepSeek Harness plugin that adds an Enter-send lock to the web chat composer.
DeepSeek Harness Web 插件:给聊天输入框增加一个 Enter 发送锁。
- 点击输入框旁的锁形按钮,即可锁定/解锁。
- 锁定后仍然可以正常编辑输入框中的内容,但按 Enter 不会发送消息。
- 再次点击按钮即可解锁,恢复 Enter 发送。
功能起因
DeepSeek Harness Web 的输入框默认在按下 Enter 时立即发送消息。以下场景很容易误触:
- 使用中文输入法时,按 Enter 只是为了确认候选词,但消息被直接发送;
- 编辑长提示词、代码或结构化文本时,想继续编辑,却误按 Enter;
- 输入框中的内容还没有编辑完,就意外进入了发送流程。
该插件补上了“发送前先解锁”这一层保护。
聚焦的功能
- 锁形按钮:注册在官方
conversation.input.right槽位,显示在输入框右下角、发送按钮附近;锁定状态为醒目的红色填充。 - 按会话隔离:每个会话独立保存锁状态,切换会话互不影响。
- 不替换官方输入框:只拦截键盘提交路径,保留官方输入状态机、命令菜单、队列、附件等能力。
- 中文输入法友好:IME 组合期间的 Enter 永远放行。
状态样式说明
| 状态 | 锁图标样式 | 含义 |
|---|---|---|
| 解锁(普通状态) | 灰色描边图标 | 当前 Enter 可正常发送消息 |
| 锁定(关锁状态) | 红色填充 + 白色锁图标 | 当前 Enter 无法发送消息 |
鼠标悬浮到锁图标上时,tooltip 会显示当前状态的提示:
- 解锁:
已解锁,当前 Enter 可正常发送消息 - 锁定:
已锁定,当前 Enter 无法发送消息
可以防止什么行为
锁定状态下,以下键盘发送行为都会被阻止:
- 普通
Enter发送; Ctrl+Enter/Cmd+Enter发送;- 其他会触发官方提交路径的 Enter 组合;
- 尚未编辑完成的输入内容被意外提交。
同时保留这些正常行为:
Shift+Enter仍然插入换行;- 输入法候选词确认的 Enter 不受影响;
- 输入框内容的编辑、复制、粘贴、附件操作不受影响;
- 鼠标点击官方发送按钮仍然可以发送——锁只防键盘误触。
快捷键(后续待开发)
键盘快捷键目前列为后续待开发工作。当前版本请使用输入框旁的锁按钮进行锁定和解锁;待快捷键在 Chrome / Edge 等环境完成兼容性验证后,再在后续版本中正式开放。
环境要求
- DeepSeek Harness
0.1.0-rc.6或更新版本; webprofile;- 基于 Chromium 的现代浏览器(Chrome / Edge 均可)。
安装
方式一:从本仓库 GitHub 安装
dsh plugin --profile web add github:AIFireForAll/dsh-enter-lock
也可以显式使用 Git URL:
dsh plugin --profile web add https://github.com/AIFireForAll/dsh-enter-lock.git
建议锁定到某个 commit 以保证可重复安装:
dsh plugin --profile web add 'github:AIFireForAll/dsh-enter-lock#<commit-sha>'
方式二:从本地目录安装
git clone https://github.com/AIFireForAll/dsh-enter-lock.git
dsh plugin --profile web add ./dsh-enter-lock
验证安装
dsh --profile web --dump-config | grep dsh-enter-lock
应能看到类似输出:
# == dsh-enter-lock
- id: dsh-enter-lock
name: dsh-enter-lock
安装完成后重启 dsh web 并刷新页面。
使用方法
启动 DeepSeek Harness Web:
dsh web在聊天输入框右下角、模型选择器和发送按钮附近找到锁形按钮。
锁定 / 解锁方式:
- 点击输入框右下角的锁形按钮。
锁定状态下:
- 普通
Enter:不发送。 Ctrl+Enter/Cmd+Enter:不发送。Shift+Enter:仍然插入换行。- 输入法组合期间的 Enter:正常用于候选词确认,不受影响。
- 点击官方发送按钮:仍可发送,锁只防键盘误触。
- 普通
锁状态按会话独立保存,刷新页面或重启后自动清除。
配置
插件默认零配置,不需要填写 API Key、设置项或 settings.yaml。锁状态仅保存在浏览器内存中。
功能与限制
- 锁定状态只保存在浏览器内存中,不写
settings.yaml,不发起网络请求。 - 插件使用官方
conversation.input.right槽位,不替换官方 composer。 - 不干扰其他输入框、按钮、浏览器快捷键或全局快捷键。
疑难排查
输入框旁边看不到锁按钮
确认插件已挂载:
dsh --profile web --dump-config | grep dsh-enter-lock重启
dsh web并强制刷新页面(Ctrl+F5)。确认当前使用的是
webprofile。
快捷键无法使用
快捷键功能当前尚未开放,属于后续待开发工作。请使用输入框旁的锁按钮操作。锁状态按会话保存:切换到新会话后,新会话默认是解锁状态。
锁定后仍然“发送”了
Shift+Enter是换行,不是发送。- 鼠标点击官方发送按钮是刻意操作,锁不会阻止。
- 如果输入框中的内容意外发送,请检查锁按钮是否显示为红色填充的锁定状态,以及是否使用了其他 Enter 组合键。
卸载
dsh plugin --profile web remove dsh-enter-lock
开发与构建
安装本仓库不需要构建:lib/ 已提交预构建产物,且没有 prepare / postinstall 脚本。
如需修改源码后重新生成构建产物:
npm run build # 生成 lib/index.js 与 lib/client.js
npm run check # 结构检查
目录结构
dsh-enter-lock/
├── package.json # dsh.bundle + dsh.client 插件声明
├── cordis.patch.yml # profile bundle patch
├── src/
│ ├── index.js # Host 半部(无依赖 no-op)
│ └── client.js # Web 半部:按钮与 Enter 拦截
├── lib/ # 构建产物
├── scripts/
│ ├── build.mjs
│ └── check.mjs
├── README.md
├── README.en.md
└── LICENSE
No comments yet. Be the first to write one.