dsh-composer-enter
by frankzhangironly
DSH web 插件:重映射聊天编辑器的 Enter 行为(发送 / 换行等)
DSH web plugin: remap how Enter behaves in the chat composer (send / newline / i
安装
dsh plugin --profile web add github:frankzhangironly/dsh-composer-enterGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗
安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。
README
DeepSeek Harness (DSH) Web 插件:让你自定义回车键在对话框里的行为——可分别指定哪个组合键「发送消息」、哪个「插入换行」、哪个「插话(另一行为)/ 立即发送排队消息」。
插件为双面 DSH 插件:宿主(Node)侧负责设置命名空间与 loopback RPC 通道,浏览器侧在「设置 → 通用」渲染键位录制行,并在 document 捕获阶段拦截回车事件。
功能特性
- 设置 → 通用 中新增一行「回车键映射」:三个键位录制框,分别对应 发送消息、插入换行、插话(另一行为)。
- 配置持久化到
<dsh home>/settings.yaml的ui-composer-enter命名空间。直接编辑文件,UI 会在保存时自动刷新。 - document 捕获阶段拦截回车,在 React 根容器监听之前执行;对输入法组合期(
isComposing/ keyCode 229)和只读态一律放行。 - 不变式自动维护:发送与换行必须恰好一个为单独
Enter;插话键必须是与前两者不同的组合键。冲突的选择会被自动纠正。 - 零修改 DSH 主干,作为普通插件安装,
@deepseek-ai/dsh升级不影响。
安装
dsh plugin --profile web add dsh-composer-enter
安装后重启 dsh web,在 设置 → 通用 中即可看到新增的「回车键映射」一行。
从本地 checkout 安装:
dsh plugin --profile web add /path/to/dsh-composer-enter
配置项
命名空间 ui-composer-enter 暴露三个字段,均须匹配 ^(?:enter|(shift|ctrl|alt|meta)(\+(shift|ctrl|alt|meta))*+enter)$:
| 字段 | 默认值 | 含义 |
|---|---|---|
sendCombo |
enter |
发送消息 的组合键。 |
newlineCombo |
shift+enter |
插入换行 的组合键。 |
steerCombo |
ctrl+enter |
插话(另一行为) 的组合键:空闲时等同发送,智能体运行时插话或立即发送排队消息。必须与前两者不同,且不能是单独的 Enter。 |
可以在「设置」UI 改,也可以直接改 settings.yaml:
ui-composer-enter:
sendCombo: enter
newlineCombo: shift+enter
steerCombo: ctrl+enter
插件监听 settings/document-updated 事件,文件被外部修改后会自动重读。
拦截原理
当映射等于应用默认值(enter / shift+enter / ctrl+enter)时,完全不拦截,DSH 原生行为原样保留。
其他任意映射下:
- 插话组合 → 合成一个
Ctrl+Enter事件,沿用应用自带的 busy/queue 逻辑(空闲时立即发送,智能体运行时插话)。 - 发送组合 → 合成一个普通
Enter事件,沿用应用自带的弹层仲裁 / 队列提交逻辑。 - 其他所有 Enter 变体 → 通过
document.execCommand('insertText', false, '\n')插入换行。
合成事件用 dispatching 标志防重入(否则合成的 Enter 会再次落入「其他→换行」分支)。监听器在 捕获阶段 执行并调用 stopPropagation(),确保先于根容器监听器。输入法组合期与只读输入框一律放行。
仓库结构
composer-enter/
├── cordis.patch.yml # 宿主 bundle patch:插入 composer-enter 行
├── lib/
│ ├── index.js # 宿主半(Node):设置命名空间 + /composer-enter RPC
│ └── client.js # 浏览器半:设置行 + 回车拦截
├── package.json
├── pnpm-workspace.yaml
├── pnpm-lock.yaml
└── README.md / README.zh-CN.md
cordis.patch.yml 向宿主组合树插入一行,声明 inject: [connection],确保 RPC 通道在宿主连接服务就绪后才注册。
RPC 协议(宿主侧)
通道:/composer-enter · 权限:loopback(非本机调用方自动 403)。
| 端点 | 入参 | 返回 |
|---|---|---|
get |
{} |
{ ok: true, value: <已解析命名空间> } |
set |
部分命名空间对象 | 合并写回 settings.yaml 后 { ok: true, value: <已解析值> };校验失败返回 { ok: false, error }。 |
status |
{} |
{ ok: true, value: { exitAvailable } }(健康探针,同 dsh-system-control)。 |
handler 走宿主 settings 服务(dsh-settings-file),绕过浏览器侧的 WEB_SETTINGS_NAMESPACES 白名单——这是插件能托管第三方命名空间 ui-composer-enter 的关键。
兼容性
@deepseek-ai/dsh当前 web profile(插件消费connection、slots、locale、remote,以及可选的settings服务)。- Node ≥ 18(与 DSH 宿主运行时一致)。
- 浏览器:Chromium 内核(使用
KeyboardEvent合成与document.execCommand)。
许可证
MIT
原始 README: https://github.com/FrankZhangIronly/dsh-composer-enter/blob/main/README.zh-CN.md ↗
同类插件
查看全部 →
archify
Agent 技能:生成美观、可校验的架构图、工作流图、时序图、数据流图与生命周期图——自包含 HTML、带动画与清晰导出

dsh-turn-rewind
对话回退:基于持久 Change Ledger 回滚会话与工作区状态。

dsh-plugin-cc
把 DeepSeek Harness 接入 Claude Code:评审、批评、委派与会话导入

dsh-interconnect
跨实例互联:经 interconnect 服务在多个 DSH 实例间转发消息与事件。

dsh-chat-import
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。

dsh-crew
DSH 插件:从 Claude Code / Codex 向 DSH agent 派活——原生 subagent 进度、宿主内 worker 会话(分级预设),以及为纯文本宿主补上视觉与图像生成的多模态桥