AIFireForAll/dsh-enter-lock

插件Plugin 原生Native ⭐ 4 MIT Web 界面Web UI

DeepSeek Harness plugin that locks the web chat composer Enter-send. Toggle with a lock button or Ctrl+Alt+L to prevent accidental sends while typing or editing long prompts; unlock to send. IME-safe and per-session.

项目介绍Project Overview

dsh-enter-lock 是一款 DeepSeek Harness Web 插件,在聊天输入框右下角注册锁形按钮,提供 Enter 发送锁功能。核心能力:锁定后仅拦截真正会发送的 Enter 及其组合键,Shift+Enter 换行、IME 候选词确认、@ 文件与会话菜单确认以及官方发送按钮均不受影响;状态按会话独立保存,Ctrl/Shift+K 快捷键可切换。适用于中文输入法误触确认、长提示词编辑以及结构化文本撰写等场景。注意锁状态仅存于浏览器内存,刷新后清除。

dsh-enter-lock is a DeepSeek Harness Web plugin that adds an Enter-send lock button to the chat composer. It intercepts Enter keystrokes that would submit a message while preserving Shift+Enter line breaks, IME candidate confirmation, @ file and session menu selection, and the official send button. The lock state is isolated per conversation and toggled by clicking or Ctrl/Shift+K. It is suited for Chinese IME users and editors of long prompts. The state lives only in browser memory and is cleared on reload.

或使用命令行安装(适合开发者)Or use CLI install (for developers)

命令行安装CLI Install

dsh plugin --profile web add github:AIFireForAll/dsh-enter-lock

AIFireForAll/dsh-enter-lock 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

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 永远放行。
  • 快捷键Ctrl+Shift+K(Windows / Linux)/ Cmd+Shift+K(macOS)锁定/解锁,焦点需位于输入框卡片内。
  • 与 at file(@ 文件候选)兼容:锁定状态下打开 @ 文件/Session 候选菜单时,按 Enter 仍可正常确认选中的文件/会话——锁只拦截真正会发送的 Enter,不干扰候选选择。

状态样式说明

状态 锁图标样式 含义
解锁(普通状态) 灰色描边图标 当前 Enter 可正常发送消息
锁定(关锁状态) 红色填充 + 白色锁图标 当前 Enter 无法发送消息

鼠标悬浮到锁图标上时,tooltip 会显示当前状态的提示:

  • 解锁:已解锁,当前 Enter 可正常发送消息
  • 锁定:已锁定,当前 Enter 无法发送消息

可以防止什么行为

锁定状态下,以下键盘发送行为都会被阻止:

  • 普通 Enter 发送;
  • Ctrl+Enter / Cmd+Enter 发送;
  • 其他会触发官方提交路径的 Enter 组合;
  • 尚未编辑完成的输入内容被意外提交。

同时保留这些正常行为:

  • Shift+Enter 仍然插入换行;
  • 输入法候选词确认的 Enter 不受影响;
  • @ 文件/Session 候选菜单(at file)、/ 命令菜单打开时,Enter 确认候选不受影响;
  • 输入框内容的编辑、复制、粘贴、附件操作不受影响;
  • 鼠标点击官方发送按钮仍然可以发送——锁只防键盘误触。

快捷键

  • Windows / LinuxCtrl+Shift+K
  • macOSCmd+Shift+K

仅在焦点位于聊天输入框卡片内时生效:处理器需要从当前焦点元素所在的输入框卡片解析会话 id,焦点在聊天区或侧边栏时不会切换。IME 组合期间不触发,长按的自动重复(key repeat)被忽略。

环境要求

  • DeepSeek Harness 0.1.0-rc.6 或更新版本;
  • web profile;
  • 基于 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 并刷新页面。

使用方法

  1. 启动 DeepSeek Harness Web:

    dsh web
    
  2. 在聊天输入框右下角、模型选择器和发送按钮附近找到锁形按钮。

  3. 锁定 / 解锁方式:

    • 点击输入框右下角的锁形按钮。
    • 快捷键:Ctrl+Shift+K(Windows / Linux)或 Cmd+Shift+K(macOS),焦点需位于输入框卡片内。
  4. 锁定状态下:

    • 普通 Enter:不发送。
    • Ctrl+Enter / Cmd+Enter:不发送。
    • Shift+Enter:仍然插入换行。
    • 输入法组合期间的 Enter:正常用于候选词确认,不受影响。
    • @ 文件/Session 候选菜单(at file)、/ 命令菜单打开时:Enter 确认候选,不受影响。
    • 点击官方发送按钮:仍可发送,锁只防键盘误触。
  5. 锁状态按会话独立保存,刷新页面或重启后自动清除。

配置

插件默认零配置,不需要填写 API Key、设置项或 settings.yaml。锁状态仅保存在浏览器内存中。

功能与限制

  • 锁定状态只保存在浏览器内存中,不写 settings.yaml,不发起网络请求。
  • 插件使用官方 conversation.input.right 槽位,不替换官方 composer。
  • 锁定只拦截「真正会发送」的 Enter:候选菜单打开且已有高亮项时,Enter 归菜单用于确认候选,不做拦截。
  • 不干扰其他输入框、按钮、浏览器快捷键或全局快捷键。

疑难排查

输入框旁边看不到锁按钮

  1. 确认插件已挂载:

    dsh --profile web --dump-config | grep dsh-enter-lock
    
  2. 重启 dsh web 并强制刷新页面(Ctrl+F5)。

  3. 确认当前使用的是 web profile。

快捷键不生效

  1. 确认焦点在聊天输入框卡片内(先点击输入框):处理器需要从焦点元素解析会话 id,焦点在聊天区或侧边栏时不会切换。
  2. 确认使用的是 Ctrl+Shift+K(macOS 为 Cmd+Shift+K):旧版本的 Ctrl+Alt+L 组合在 Windows 输入法环境下会被系统消费,已不再使用。
  3. IME 组合期间快捷键被有意忽略,先完成候选词确认再试。
  4. 确认安装版本为 0.4.0 及以上(0.3.x 中快捷键被刻意禁用)。

锁定后仍然“发送”了

  • 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

License

MIT

上一个 Prev dsh-PaddleOCR-Skills 下一个 Next dsh-auto-approval