DSH chat-enter-newline:自定义输入框 Enter 手势

前言

DeepSeek Harness(DSH)把「发送消息」与「换行」登记为固定输入操作,只在设置页展示并占用键位,真正的按键逻辑写死在编辑器的 Enter 命令中。这意味着社区插件无法直接覆盖这两个动作,只能通过改写事件修饰键来实现不同偏好。

插件介绍

DSH chat-enter-newline(npm 包名:dsh-chat-enter-newline)是 DSH 的一个插件,由维护者 tianshao88 发布。它的核心是:在主输入框内按偏好改写 Enter / Shift+Enter / Ctrl(Cmd)+Enter 的修饰键,让引擎读到另一种手势。事件保持可信、不阻断传播,「发送」和「换行」的语义仍由引擎决定。

核心功能

  • 每个手势可独立选择「发送消息」或「换行」。
  • 默认值与引擎一致,未改动时干预次数为 0。
  • 只在 [data-composer-input="true"] 的主输入框内生效;队列编辑框、提问卡片等不受影响。
  • 输入法组合(isComposing、keyCode 229)与 Alt 组合一律放行;/、@ 菜单展开时 Enter 归菜单。
  • 不提供「打断键」、键位方案预设或自定义组合键。

行为对照

手势 默认(与引擎一致) 可改为
Enter 发送消息 换行
Shift+Enter 换行 发送消息
Ctrl/Cmd+Enter 发送消息 换行

安装与启用

从 Git 仓库或本地目录安装(profile 要与实际运行的一致):

dsh plugin --profile <profile> add github:tianshao88/dsh-chat-enter-newline
dsh plugin --profile <profile> add file:<本目录绝对路径>

卸载:

dsh plugin --profile <profile> remove dsh-chat-enter-newline

安装后无需重启引擎,刷新页面即可看到设置行;若没出现,再重启引擎。改完源码要重跑一次安装——file: 是复制而不是软链。

偏好与配置

偏好命名空间:chat-enter-newline(等于 cordis.patch.yml 里的 Loader 条目 id)。持久化文件:$DSH_HOME/profiles/<profile>/cordis.patch.yml。字段:

  • enter:send 或 newline
  • shiftEnter:send 或 newline
  • ctrlEnter:send 或 newline

持久化不用重启:设置行里的选择立即写入该文件并立即生效。也可以直接手改该文件,只写要覆盖的手势,未写的字段走 schema 默认。示例:

- id: chat-enter-newline
  name: dsh-chat-enter-newline
  config:
    enter: newline     # 只写要覆盖的手势;未写的字段走 schema 默认
    ctrlEnter: send

两个半边

半边 文件 职责
宿主 index.js 声明一个 volatile Config 并调用 settings.configure({ auto: false }),表明界面自带
浏览器 client.js 绑定 ctx.configForms.get(条目 id)、改写 Enter 手势、把设置行注册进 settings.general.item(order 21)

浏览器半边只 require('react'),刻意不引用任何引擎客户端包——官方 practices.md 禁止这么做,且它们的导出会随版本变化。

依赖与兼容性

运行时依赖只有引擎同款的 @deepseek-ai/schemastery,用于声明 Config schema。

peerDependencies 声明:@deepseek-ai/dsh: ^0.2.0-rc.2(该范围覆盖 0.2.x 的 rc,0.2.1-rc.2 已通过安装校验)。引擎只检查 peerDependencies 中的 @deepseek-ai/dsh*。

已知限制

  • 设置 → 快捷键 的速查表仍显示 Enter / Shift+Enter 且只读:那是引擎的固定输入操作目录,插件无法改写,因此两处显示会不一致。
  • 偏好按设备与平台独立,和引擎自己的键位覆盖一样不跨设备同步。
  • 本插件不改变「忙碌时 Enter 是排队还是插话」的行为,那是 设置 → 通用 里引擎自己的 composer-enter 行。
  • 依赖引擎的几个 DOM 语义属性与槽位名。引擎大版本改动时失效模式是「静默不生效」,不会破坏原生功能。

开发与验证

逻辑单测:

node test.mjs

引擎契约自检(需要本机装有 DSH,默认读 D:\Tools\DeepSeek\resources\app.asar,可用 --archive= 或 $DSH_ASAR 覆盖):

node tools/asar.mjs check

tools/asar.mjs 只读检查打包后的 app.asar,逐条核对上文列出的契约。

适用场景与注意

适合希望自定义输入框 Enter 手势的用户。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证(MIT)。

总结

DSH chat-enter-newline 通过改写修饰键实现 Enter 手势的自定义,默认与引擎一致,改动最小。如需更完整的键位方案或自定义组合键,可参考其他社区插件。

  • 目录页:https://www.skillhub.cn/plugins/tianshao88/dsh-chat-enter-newline
  • GitHub:https://github.com/tianshao88/dsh-chat-enter-newline
羽毛球分组比赛记分
小程序二维码

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

Xiaoye