dsh-enter-send:在 DSH 输入框工具行切换 Enter 与 Ctrl+Enter 发送

前言

DeepSeek Harness(DSH)的对话输入框默认用 Enter 提交消息,Ctrl/Cmd+Enter 在部分场景下承担换行或与队列相关的互补提交。习惯在其它 IM 或编辑器里用 Ctrl+Enter 发送的人,往往需要反复适应这套键位;若只想在两种「发送键 / 换行键」组合之间切换,又希望控件出现在输入框工具行、与权限等控件对齐,单靠宿主设置通常做不到。下面介绍社区插件 dsh-enter-send(维护者 JHyugou,分类:客户端),它在「工作区内修改」权限控件右侧增加一个发送方式开关,在 Enter 发送 与 Ctrl+Enter 发送 之间切换,另一种组合键自动负责换行。

这是什么

dsh-enter-send 是面向 DSH Web/桌面客户端的浏览器端插件:零 npm 依赖、零构建,通过 conversation.input.left 插槽在输入框工具行渲染一枚 chip,点选后在两种发送语义间切换。选择保存在浏览器 localStorage(键 dsh-enter-send.mode.v1),刷新后仍有效;不写宿主全局配置,也不跨浏览器或 profile 同步。

插件在 SkillHub 目录 收录,源码与说明见 GitHub:JHyugou/dsh-enter-send。SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系。

核心功能

工具行上的发送方式开关

控件位于输入框工具行左组:在权限(工作区内修改)相关控件之后、conversation.input.left 列表插槽内。外观对齐 DSH 权限触发器规格(高度、圆角、字号与相邻控件一致);容器宽度 ≤ 460px 时与权限控件一样折叠为仅图标,不额外占宽。

点击工具行中的 ↵ Enter 发送(或当前模式对应的文案)会弹出「发送方式」菜单,两项互斥,当前项带对勾。

两种模式下的按键行为

模式 发送 换行
Enter 发送(默认) Enter 提交,行为与未装插件时 DSH 原生一致 Ctrl/Cmd+Enter、Shift+Enter 换行
Ctrl+Enter 发送 Ctrl/Cmd+Enter 提交(与按 Enter、点发送按钮同一路径) Enter、Shift+Enter 换行

两种模式都遵循「发送键之外的另一个主键负责换行」。默认 Enter 发送:装上插件、不碰开关时,Enter 提交仍完全是 DSH 原生行为;唯一变化是 Ctrl/Cmd+Enter 从 DSH 原生的「互补 Queue/Steer 提交」变为换行(见下文限制)。

作用范围与边界

插件只在输入框正文([data-composer-input] 内的 Lexical 编辑器)改写按键:队列里的小编辑器、重命名框、终端及其它 contenteditable 不处理。输入法组字中的 Enter、Alt/AltGraph 组合原样放行。补全菜单(/、@)已有高亮候选时,Enter 仍由菜单选中候选,不会被改成换行。长按保留事件的 repeat 标志,交给 DSH 自身「长按不重复发送」逻辑。

实现上不调用 DSH 私有 API,而是在 document 捕获阶段拦截按键并按当前模式重放为等价的 KeyboardEvent,使 Lexical 的 KEY_ENTER_COMMAND 走同一条链路。

安装与启用

README 给出的安装方式为将本机插件目录 link 进指定 profile(desktop profile 通常由桌面应用的「插件」面板或应用内等价操作管理):

# link 方式装进 desktop profile(改代码即时生效;desktop profile 只能由桌面应用管理,
# 用应用里的「插件」面板安装,或在应用内执行等价的 pnpm 操作)
dsh plugin --profile <profile> add <本目录路径>
dsh plugin --profile <profile> remove dsh-enter-send     # 卸载

装好后宿主会热加载浏览器 bundle;已打开的 DSH 窗口需刷新页面(Ctrl+R) 才能看到工具行上的新控件。

安装前请自行查看仓库源码与许可证(资料中 package.json 标明 MIT、版本 0.1.0)。插件以当前 DSH 进程与浏览器上下文运行,仅从目录名安装而不审阅代码存在 usual 风险。

典型用法

  1. 安装并刷新 DSH 对话页,在输入框工具行权限控件右侧找到发送方式 chip。
  2. 点击 chip,在菜单中选择 Enter 发送 或 Ctrl+Enter 发送。
  3. 在正文输入框中按所选模式的发送键提交;用另一组合键插入换行。

排障时可在 DevTools 控制台查看:

localStorage.getItem('dsh-enter-send.mode.v1')                     // 当前选择
document.querySelector('.dsh-es-trigger')?.innerText               // 工具行里的控件
document.querySelector('[data-slot="conversation.input.left"]')    // 注册到的席位

仓库还提供宿主与浏览器验证脚本(node --test、node tools/verify.mjs、node tools/browser-check.mjs 等),用于在无 UI 或 headless Chrome 下核对契约与按键行为;日常使用不依赖这些命令。

适用场景与注意

适合谁: 经常在 DSH 里写多行提示词、又希望发送键与常用编辑器或聊天软件一致的用户;需要在 Enter 发送与 Ctrl+Enter 发送之间快速切换、且接受偏好仅存本浏览器本地的人。

架构要点: 双半结构——src/client.js 提供 chip、菜单与按键改写;src/index.js 注册 Loader 条目与只读诊断路由 /api/dsh-enter-send.status。若 conversation.input.left 插槽或编辑器 DOM 约定变化,插件会降级(仅开关或静默失效),不拖累宿主其它功能。

已知限制(摘自 README):

  • 偏好仅存 localStorage,不同浏览器或清站点数据会回到默认 Enter 发送;DSH 官方设置里不会出现此项。
  • Enter 发送 模式下,Ctrl/Cmd+Enter 改为换行,DSH 原生的「互补 Queue/Steer 提交」在该模式下不可用;需要互补提交时可切到 Ctrl+Enter 发送。
  • Ctrl+Enter 发送 模式下,Ctrl+Enter 走普通提交语义,不是 DSH 原生的「互补」提交。
  • conversation.input.left 为列表插槽,与其它插件(如 dsh-computer-use)按 order 排列;本插件默认 order: 100,更靠左需自行改 src/client.js 中的注册顺序。

结尾

dsh-enter-send 把「用哪个键发送、用哪个键换行」做成输入框工具行里的一枚开关,默认不改变 Enter 发送时的原生提交行为,只在需要时切换到 Ctrl+Enter 发送。进一步了解与安装指引见 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye