dsh-enter-newline:让 Harness 输入框 Enter 只换行不发送

前言

在 DeepSeek Harness(DSH)里写长提示词时,默认行为是:在聊天输入框按 Enter 会直接发送。写到一半想换行分段,消息却已经发出去了。社区插件 dsh-enter-newline 只改这一处交互:Enter 插入换行,发送交给界面上的发送按钮;Shift+Enter 与中文输入法组合输入期间的 Enter 行为按 README 说明保持不变。

这是什么

dsh-enter-newline 是 DSH 的客户端插件,维护者为 KunKun24(package.json 中作者署名为「困困」)。分类上属于在 Web 端注入客户端逻辑的插件:通过 Cordis patch 与 @deepseek-ai/dsh-client-ui-slots 注入,平台为 web。许可证为 MIT;当前 package.json 版本为 1.1.0,运行环境要求 Node >= 22.13.0。

核心功能

下面是对 README 与 package.json 中已写明能力的归纳。

  1. Enter 换行、不发送
    在 Harness 的 composer 输入框内,单独按 Enter 只插入一行换行,不会触发发送。

  2. 发送方式不变
    需要发出消息时,仍使用发送按钮(README 未改动 DSH 其它发送快捷键的表述,此处不延伸)。

  3. Shift+Enter 保持原样
    插件通过把真实键盘事件的 shiftKey 改写为 true,让 Lexical 走 Shift+Enter 的换行路径;dsh 提交逻辑里对 event.shiftKey === true 会直接 return false,从而不发送。

  4. 中文输入法
    组合输入过程中按 Enter,README 写明不会被拦截。

  5. 侧边栏开关
    侧边栏提供「换行设置」,可开关行为;设置保存在本机 localStorage,键名为 dsh-enter-newline。

  6. 作用范围
    仅作用于 composer 内、带 [data-lexical-editor] 的输入框;会话改名、设置页等其它输入框不受影响。

实现要点(为何不用 execCommand)

DSH 的输入框基于 Lexical 富文本编辑器,内容由 Lexical 数据模型管理。README 记录了早期踩坑:用 document.execCommand('insertLineBreak') 直接改 DOM 会绕过模型,Lexical 在 reconcile 时会把 DOM 重置回模型,连带把刚粘贴进去的内容冲掉。

当前做法是不碰 DOM,只在键盘事件上把 shiftKey 设为 true,交给 Lexical 处理换行。Lexical 侧按 Shift+Enter 走 INSERT_LINE_BREAK_COMMAND;dsh 提交处理器在 event.shiftKey === true 时不提交。两条路径同时满足时,实现「换行且不发送」。

安装与启用

DeepSeek Harness 生态采用「一切皆插件」思路;插件可在 DSH 内置市场或社区目录发现。社区目录页:dsh-enter-newline(SkillHub)。源码与说明:GitHub - KunKun24/dsh-enter-newline。

安装前请自行查看仓库源码与 MIT 许可证;插件在当前 dsh 进程权限下运行,与使用任何第三方 DSH 插件的通用注意一致。

方式一:插件市场(README 推荐)

在 dsh 的「插件市场」里搜索包名 dsh-enter-newline 直接安装。README 未给出额外的 CLI 市场安装单行命令,此处不臆造。

方式二:Release 压缩包

README 示例使用 profile web 与本地 tgz 路径:

dsh plugin --profile web add ./dsh-enter-newline-1.0.0.tgz

说明:示例文件名中的版本号为 README 安装示例原文;若你从 Release 下载,请以实际压缩包文件名为准。

方式三:手动装到 profile

# 1. 复制到 profile 的 vendor 目录
cp -r dsh-enter-newline ~/.dsh/profiles/web/vendor/dsh-enter-newline

# 2. 在 profile 的 package.json 里加一条依赖(file: 指向 vendor)
#    "dependencies": { "dsh-enter-newline": "file:./vendor/dsh-enter-newline" }

# 3. 装依赖并重启
cd ~/.dsh/profiles/web && pnpm install && dsh web

典型用法

  1. 按上述任一方式安装并启动 dsh web(或你使用的 profile)。
  2. 打开 Harness 聊天 composer,在输入框里输入多行内容:需要换行时按 Enter。
  3. 确认消息未自动发送后,点击发送按钮发出。
  4. 若不需要该行为,在侧边栏「换行设置」关闭;设置写入 localStorage: dsh-enter-newline。

需要保留「Enter 即发送」习惯时,关闭侧边栏开关即可,无需卸载。

卸载

README 给出的步骤:

从 profile 的 package.json 的 dependencies 和 dsh.profile.bundles 里删掉 dsh-enter-newline,再执行 pnpm install 并重启 dsh。插件本身不写业务数据。

适用场景与注意

适合谁: 经常在 Harness composer 里写长 prompt、需要 Enter 分段、又不希望误触发送的 Web 端用户。

注意:

  • 仅 Web 客户端(dsh.client.platform 为 web);README 未声明其它平台。
  • 行为绑定 Lexical composer 输入框;其它页面的输入框不受影响。
  • 社区目录与 DeepSeek / 幻方无 README 所述的官方从属关系,安装来源请自行核对。

结尾

dsh-enter-newline 用最小侵入的方式对齐「写提示词时 Enter 换行」的常见编辑器习惯,实现上依赖 Lexical 与 dsh 对 Shift+Enter 的既有约定,避免直接改 DOM。进一步了解或提 Issue,请访问 SkillHub 目录页 与 GitHub 仓库。

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

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

小夜