DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Enter Send — DeepSeek Harness 插件(DSH Plugin)
← Plugins
E

dsh-enter-send

Enter Send

DSH 撰写器的发送快捷键重映射:在 Enter 与 Ctrl/Cmd+Enter 之间切换,并在“设置 → 常规”中提供偏好设置项。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:Nalleyer/dsh-enter-send#f8a8ebaa445df122890a877bc666dc646f2e8451
README兼容性版本

兼容性与来源证明

Enter Send 以 dsh-enter-send 发布,当前版本为 0.1.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/10

版本

0.1.2stable
2026/9/10
0.1.1stable
2026/9/7
0.1.0stable
2026/9/7

相关插件

正在加载相关插件…

最新版
0.1.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/10
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

README

dsh-enter-send

English | 简体中文

DeepSeek Harness(dsh)客户端插件:在 设置 → 常规 页面新增"发送快捷键"选项,重映射聊天输入框的发送 / 换行键位。

选项EnterCtrl/Cmd+Enter
Enter 发送(默认,保持 dsh 原生行为)发送换行
Ctrl+Enter 发送换行发送
  • Shift+Enter 两种模式下都是换行(浏览器默认行为,不拦截)。
  • 中文输入法(IME)组合输入中的 Enter 一律放行,不会误发。
  • 默认值 enter 下普通 Enter 行为与官方完全一致,升级无感知。
  • 设置持久化到 $DSH_HOME/settings.yaml(namespace enter-send.mode);同时写入浏览器 localStorage 作为非本机访问/内存模式下的兜底,重启 Web 后仍会恢复上次选择。

安装

前置条件

  • dsh 0.1.2-rc.1(web 平台):插件声明的最低版本;已兼容验证到 0.1.5-rc.1(最新发布版),更高版本需重新确认
  • 从 git 安装时,安装过程会运行 prepare 脚本自动构建:构建工具链为 esbuild(npm 生态,仅需 Node.js,随 devDependencies 自动安装);本机装有 bun 时自动改用 bun 构建
  • 运行测试需要 bun(仅开发用)

方式一:从 GitHub 安装(源码,安装时自动构建)

dsh plugin --profile web add github:Nalleyer/dsh-enter-send

git 安装拉取的是源码,不会附带构建产物,因此 pnpm ≥ 10 在得到显式允许前会拒绝运行 prepare 构建脚本——首次 add 会失败,dsh 会打印修法:把 pnpm 提示的确切包键写进该 profile 的 pnpm-workspace.yaml:

allowBuilds:
  dsh-enter-send: true

然后重新执行 add。请注意:该授权允许包代码在安装时于你的机器上执行(不在任何沙箱内),只对源码可信的包授权,并建议锁定 commit(github:Nalleyer/dsh-enter-send#<sha>)。

本包声明了 dsh.bundle 清单,add 后加载行会自动写入 profile 的 patch 层,无需手动编辑;重启 dsh web 即可生效。

方式二:tarball / npm 安装(预构建产物,无需构建授权)

# tarball(仓库内 pnpm pack 产出)
dsh plugin --profile web add ./dsh-enter-send-0.1.0.tgz

# 或 npm 发布后按包名安装
dsh plugin --profile web add dsh-enter-send

本地开发(--patch overlay,不写入 profile)

# 注意:--patch 必须放在转发给 web app 的未知选项(如 --port)之前:
# commander 遇到未知选项就将其及后续 token 当作位置参数,--patch 放后面
# 会报 unknown option;也不能写成父级形式(dsh --patch ... web)。
dsh web --patch ./cordis.patch.yml --port 8091

卸载

dsh plugin --profile web remove dsh-enter-send   # 移除依赖与加载层
# 卸载后 $DSH_HOME/settings.yaml 中残留的 enter-send 段无害,可手动删除

插件打包与安装的官方说明见 dsh 开发文档。

构建与测试

node scripts/build.mjs   # 产出 lib/index.js(host 半)+ lib/client.js(浏览器半)
                         # 构建优先用 esbuild(npm),无 esbuild 时回退 bun
bun test                 # keymap 逻辑单测 + composer 契约回归 + bundle 形态冒烟测试(需要 bun)

工作原理

  • 拦截层:document 捕获阶段 keydown 监听(addEventListener(..., true)),先于 React 委托的 composer onKeyDown。命中条件:目标是 composer 的可编辑区域(兼容旧版 textarea,以及新版带 data-composer-input、data-phase 且 contenteditable="true" 的 Lexical 编辑器)、非 disabled、非 IME 组合 isComposing || keyCode === 229。
  • 发送:拦截后向 composer 编辑区域派发合成的无修饰 Enter keydown(bubbles: true),冒泡到 React root 触发 composer 原生提交路径——草稿 / 附件 / 队列 / busy 仲裁全部复用,不重复实现。合成事件会再次经过捕获阶段,由同步标志防重入。
  • 换行:向 composer 编辑区域派发合成的 Shift+Enter keydown(bubbles: true),走 composer 自身的原生换行路径(KEY_ENTER 对 Shift+Enter 放行,Lexical 的 Enter 处理插入换行符),草稿同步与真实 Shift+Enter 完全一致。早期版本依赖的 document.execCommand("insertText", "\n") 在当前 Lexical composer 上已实测失效——返回成功但不派发 beforeinput,Lexical 把未变化的 DOM 回滚,因此替换为上述合成 keydown 方案(该结论在 0.1.5-rc.1 上复验仍成立)。
  • 持久化:浏览器半通过 settingsScope 绑定 enter-send namespace,host 半注册 schemastery schema(mode: "enter" | "ctrl-enter"),读写 $DSH_HOME/settings.yaml;选择同时存入浏览器 localStorage,在非 loopback/内存模式下也能跨重启保留。

目录结构

├── package.json          # dsh.bundle + dsh.client 清单(platform: web)
├── cordis.patch.yml      # bundle 配置层(dsh.bundle.patch),兼本地开发 --patch
├── scripts/build.mjs     # 构建脚本(bun build + __ModuleLoader__.load 包装)
├── src/
│   ├── types.ts          # 模式类型与 settings 常量(双端共用)
│   ├── locales.ts        # 中/英字典 + LocaleNamespaceMap 声明
│   ├── node/index.ts     # host 半:注册 settings namespace(dsh-settings)
│   └── client/           # 浏览器半:
│       ├── index.ts      # apply 入口:设置行 + settingsScope + keymap + 样式
│       ├── EnterSendRow.tsx  # 设置行组件(仿官方 EnterBehaviorRow)
│       ├── keymap.ts     # 按键重映射核心(纯逻辑,可单测)
│       ├── styles.ts     # 设置行样式(运行时注入 <style>,随卸载清理)
│       └── contract.d.ts # 仅类型:引入 settings.general.item 插槽契约
├── lib/                  # 构建产物(.gitignore,不入库)
└── test/                 # bun test:keymap 逻辑 + composer 契约 + bundle 形态冒烟

兼容性说明

已对照 dsh 0.1.5-rc.1(web 平台)逐项复核,插件依赖的上游契约均未变化,键位与 DOM 识别逻辑无需改动(本次只做了清单补齐、样式对齐与测试加固):

  • 设置行插槽:settings.general.item(列表型插槽,id + order + locale + inject 注册形态)与官方 EnterBehaviorRow(id: composer-enter, order: 20)完全同构;本插件用 order: 21 紧随其后。官方仍是浏览器半 ctx.slots.register(...)、宿主半 ctx.inject(["settings"], ...) 注册 schema 的同一套写法。
  • composer DOM 标记:data-composer-input(ComposerContentEditable)与 data-phase(InputBar 以 input?.phase ?? "inert" 透传)仍落在同一个 contenteditable div 上,且 contenteditable 随 editable、aria-disabled 随禁用态同步——isComposerTarget / findComposerTarget 无需调整。若上游拆分这两个属性或改名,需同步更新。
  • composer 键位:registerComposerKeymap 对 shiftKey === true 的 Enter 仍返回 false(放行给 Lexical 原生换行),其余 Enter 走 handlers.submit(ctrlKey || metaKey);因此合成 Shift+Enter 换行、合成无修饰 Enter 发送两条路径都仍然成立。若上游改动 Enter / Shift+Enter 的 keymap 处理,需同步更新 newlineViaComposer / sendViaComposer(见 src/client/keymap.ts)。
  • 客户端模块表:lib/client.js 以 require 取用的 @deepseek-ai/dsh-client-store 与 @deepseek-ai/dsh-client-ui-primitives 均在 shell 的静态模块表内,且已一并写入 package.json 的 dsh.client.inject;dsh.client.inject 与产物 require 的一致性由 test/bundle-smoke.test.ts 守住。
  • settingsScope / store API:ctx.settingsScope.bind({ namespace }) → getSnapshot() / subscribe() / set(field, value) 与 createSnapshotStore(init, { persist: { name } }) 均未变,读写仍落在 $DSH_HOME/settings.yaml 的 enter-send 段。
  • 换行动作不再依赖 document.execCommand(在当前 Lexical composer 上实测失效);该结论已在 0.1.5-rc.1 上复验。

License

MIT

相关插件

继续浏览 productivity-workflow 分类下经过校验的插件。

Acp App@deepseek-ai/dsh-acp-appdsh ACP 配置文件包:基于 dsh-base 的仅限自动化的 JSON-RPC stdio 和进程生命周期管理Client Ui Task Board@linxin666/dsh-client-ui-task-board面向 DSH Web GUI 的主机权威任务面板,支持实际会话执行、主机 cron 调度以及可选的跨平台空闲睡眠保护;以挂载方式提供,无需修改 DSH 源代码。Web All@linxin666/dsh-web-allDSH Web UI 全家桶聚合插件:一键安装全部功能插件(task-board / git-graph / pet / remote-web-ui / web-ui-settings / skin-center / community-plugins / compat shim)。compat 桥接层已并入本包(src/client),无需独立 compat npm 包。Agent Teams@nanmicoder/dsh-agent-teamsAgentTeams for DeepSeek Harness:通过自然语言驱动多智能体团队协作(队长、成员、具有依赖关系的任务、消息传递),并在 Web GUI 中提供树状监视器