dsh-enter-send

DSH PLUGINUI 与外观

仓库 Nalleyer/dsh-enter-send

UI 与外观 L4 · 沙盒安装通过 安全审查:低风险 可信度:银 可安装插件
安装这个插件

DSH plugin 在设置中新增发送快捷键选项,将聊天输入框在 Enter 发送与 Ctrl+Enter 发送之间切换,兼容中文输入法。

一句话选型结论

按资料字段整理

dsh-enter-send 是UI 与外观类的 DSH 可安装插件,验证等级 L4 · 沙盒安装通过,安全审查为低风险,列出 4 项功能,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类UI 与外观 收录类型可安装插件 验证等级L4 · 沙盒安装通过 安全审查低风险
验证等级 L4 L4 · 沙盒安装通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-08 创建于 2026-08-14
README 12.5 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add github:Nalleyer/dsh-enter-send
  1. 1
    确认版本与运行环境

    兼容的 DSH 版本为 0.1.1-rc.2;版本不匹配时安装会报错。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本0.1.1-rc.2版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

4 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-enter-send:DeepSeek Harness 的发送键位切换插件

  • 切换 Enter 发送
  • 兼容中文输入法
  • 设置持久化
  • Shift+Enter 换行

上游标签

dsh-plugin

验证等级与安全审查

L4 · 沙盒安装通过
自动化流程结论,不是人工审核
验证等级L4 · 沙盒安装通过安装命令在隔离沙盒内真实执行成功,无依赖错误
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度银综合仓库活跃度与验证结果

上面的结论来自上游最近一次自动化验证(2026-10-08): 同一套检查会在插件发新版后重跑,页面显示的是最新一次的逐项结果。

逐项检查结果

L1 · 已找到 ✓ 通过
  • L1.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L2 · 结构化 ✓ 通过
  • L2.0_DEFAULTED_FROM_L3 由 L3 推定 默认通过——L3 安装规范已通过(全库 L3 扫描策略)
L3 · 安装规范 ✓ 通过
  • L3.1_INSTALL_COMMAND_PARSED 安装命令已解析 方式:安装规范解析
  • L3.2_DSH_VERSION_DECLARED DSH 版本已声明 方式:DSH 版本声明
L4 · 安装已测 ✓ 通过
  • L4.1_INSTALL_EXECUTED_CONFINED 受限沙盒内执行安装 方式:沙盒安装执行
  • L4.2_INSTALL_SUCCESS 沙盒安装成功 方式:沙盒安装执行
  • L4.3_ARTIFACT_CONFIRMED 安装产物已确认 方式:沙盒安装执行
L5 · 运行已测 ✕ 未通过
  • L5.1_INSTALL_PASSED_SANDBOXED 沙盒安装通过 方式:沙盒安装执行
  • L5.2_WEB_BOOT_READY Web 启动就绪 插件目录树加载失败
  • L5.3_HTTP_SERVED HTTP 服务响应
— · 其它检查项
  • L4_0_SANDBOX 沙盒安装判定 方式:沙盒安装执行

风险详情

  • 审查结论 通过
  • 结论说明 vet 静态分析未发现可疑行为,判定为干净(clean)。
  • 风险计数 严重 0 / 高 0 / 中 0
  • 风险详情 未发现严重或警告级问题。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L4:在沙盒里真实装过,依赖能装上,不是纸面声明。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。
  • 标注了兼容的 DSH 版本(0.1.1-rc.2),按版本装不容易报错。
  • 列出了 4 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在UI 与外观场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-enter-send当前 L4 · 沙盒安装通过 低风险 0 0.1.1-rc.2 有
awesome-dsh-plugin L4 · 沙盒安装通过 低风险 1.8 万 0.1.1-rc.2 有
deepseek-balance-whale-widget L4 · 沙盒安装通过 低风险 4,492 0.1.7-rc.2 等 2 个 有
dsh-better-sidebar L4 · 沙盒安装通过 低风险 4,112 0.1.7-rc.2 等 10 个 有
dsh-deep-whale L4 · 沙盒安装通过 低风险 2,470 未标注 有
deepseek-design L4 · 沙盒安装通过 低风险 1,438 未标注 有

仓库档案

UI 与外观
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方Nalleyer仓库 dsh-enter-send · 默认分支 main
分类UI 与外观skin
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言TypeScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-08-14 · 2026-10-08最后推送 2026-10-08
本站收录2026-08-27首次进入本站目录的时间

README 全文

12.5 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-enter-send

English | 简体中文

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

选项 Enter Ctrl/Cmd+Enter
Enter 发送(默认,保持 dsh 原生行为) 发送 换行
Ctrl+Enter 发送 换行 发送
  • Shift+Enter 两种模式下都是换行(浏览器默认行为,不拦截)。
  • 中文输入法(IME)组合输入中的 Enter 一律放行,不会误发。
  • 默认值 enter 下普通 Enter 行为与官方完全一致,升级无感知。
  • 设置写入当前 profile 的配置文档(本插件条目 enter-send 的 mode 字段),随桌面端 / Web 端各自的配置一起持久化。

安装

前置条件

  • dsh 0.2.1-rc.2(web 平台):本版按该版本的客户端 API 复核;它和 0.2.0-rc.2 之间只有增量改动,两个版本都能跑。0.1.x 不再兼容(原因见下方「兼容性说明」)。
  • 桌面版自带这套运行时,直接可装;
  • CLI / web profile 需先把 @deepseek-ai/dsh 升到 0.2.x 一线——npm 上已发布 0.2.1-rc.2;在 0.1.x 下面装本版会复现"装了不激活"。
  • 从 git 安装时会运行 prepare 脚本自动构建:构建工具链是 esbuild(npm 生态,只需 Node.js,随 devDependencies 自动安装);本机有 bun 时回退用 bun 构建。

方式一:桌面版(推荐,官方入口)

桌面版不是用 CLI 的 web profile,而是 Electron 自有的保留 profile $DSH_HOME/profiles/desktop——在 CLI 里装的插件桌面版看不到,而且 npm 版 dsh CLI 会拒绝针对 desktop profile 的插件管理请求。桌面版请走它自己的入口:

  1. 打开 设置 → 插件 → 添加插件;
  2. 在包名/地址输入框里粘贴本仓库地址:
github:Nalleyer/dsh-enter-send

想锁定版本可以写 github:Nalleyer/dsh-enter-send#;
3. 点「安装」,等它把依赖装好并执行 prepare 构建;
4. 重启桌面版(或按提示重载 profile),设置 → 常规 里会出现「发送快捷键」一行。

> 安装对话框会提示:插件装入后不会自动更新,升级需要先卸载再安装新版本。

方式二:CLI(web profile)

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。

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

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

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

卸载

# CLI / web profile:
dsh plugin --profile web remove dsh-enter-send
# 桌面版:设置 → 插件 → 插件列表里卸载

卸载后插件条目残留的配置无害,可手动删除。

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

构建与测试

pnpm install             # 安装开发依赖(esbuild、typescript、tsx、0.2.1-rc.2 类型包)
node scripts/build.mjs   # 产出 lib/index.js(host 半)+ lib/client.js(浏览器半)
pnpm test                # keymap 单测 + composer 契约回归 + 提交策略单测 + bundle 形态冒烟
pnpm typecheck           # tsc --noEmit,按真实 0.2.1-rc.2 类型检查

测试用 node --import tsx --test(Node 24 自带 test runner,tsx 负责 TS 转译);pnpm test:bun 保留了 bun 入口。

工作原理

  • 拦截层:document 捕获阶段 keydown 监听(addEventListener(..., true)),先于 React 委托的 composer onKeyDown。命中条件:目标是 composer 的可编辑区域(带 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 方案。
  • 偏好持久化:浏览器半通过 ctx.configForms.get("enter-send") 取本插件条目的配置表单(getSnapshot / subscribe / set),host 半导出 Config schema(mode 为 volatile 字段)并关掉自动生成的配置页(settings.configure({ auto: false }));选择先落到本地 snapshot store(键盘与设置行读它),再排队写回 Host 文档。

目录结构

├── package.json              # dsh.bundle + dsh.client 清单(platform: web)
├── cordis.patch.yml          # bundle 配置层(dsh.bundle.patch),行 id = enter-send
├── scripts/build.mjs         # 构建脚本(esbuild + __ModuleLoader__.load 包装)
├── src/
│   ├── submission-settings.ts # 双端共用:条目 id、字段、模式常量与类型
│   ├── locales.ts            # 中/英字典 + LocaleNamespaceMap 声明
│   ├── node/
│   │   ├── index.ts          # host 半:导出 Config schema + 关闭自动配置页
│   │   └── contract.d.ts     # 仅类型:引入 ctx.settings 声明
│   └── client/
│       ├── index.ts          # apply 入口:设置行 + configForms + keymap + 样式
│       ├── submission.ts     # 提交策略:本地 store + Host 表单读写
│       ├── EnterSendRow.tsx  # 设置行组件(仿官方 EnterBehaviorRow)
│       ├── keymap.ts         # 按键重映射核心(纯逻辑,可单测)
│       ├── styles.ts         # 设置行样式(运行时注入 ,随卸载清理)
│       └── contract.d.ts     # 仅类型:引入 slots / locale / settings 声明
├── lib/                      # 构建产物(.gitignore,不入库)
└── test/                     # keymap + composer 契约 + 提交策略 + bundle 冒烟

兼容性说明

本版是一次 API 迁移,不是清单微调。 0.1.2 版依赖的三个上游契约在 0.2.0-rc.2 上全部变了,旧版装上去会静默不激活(客户端 fiber 等不到 settingsScope 服务),表现就是"装了没反应":

0.1.2 写法(失效) 0.2.x(本版)
host 侧 ctx.settings.register(ns, schema) 服务只提供 configure / describe / update / replace / mutate;改为导出 Config schema(profile 条目自带配置)
客户端 inject 含 settingsScope inject = ["slots", "locale", "configForms"],偏好走 ctx.configForms.get(entryId)
— 服务访问按 inject 门禁:ctx. 未列入 inject 即抛 cannot get property "…" without inject,注册字典的 ctx.locale.register() 因此必须声明 "locale"
settingsScope.bind({ namespace }).set(field, v) ctx.configForms.get(id).set(field, v),读取用 getSnapshot()/subscribe()
— 设置行注册需要 store / inject / locale;hooks 隔间 → useXxx 选择器 Hook
IconChevronDownOutline14 IconChevronDownOutlineRegular(图标命名改为 Regular/Medium)

仍成立的契约(已逐项复核 0.2.1-rc.2 产物):

  • 设置行插槽:settings.general.item(列表型,id + order + locale + inject)与官方 EnterBehaviorRow(id: composer-enter, order: 20)同构;本插件用 order: 21 紧随其后。
  • 条目 id 对齐:configForms.get() 的 key 是 profile 里的插件条目 id,因此 cordis.patch.yml 的插入行写成 id: enter-send,与客户端里的 SETTINGS_NAMESPACE 一致。若将来安装器改用别的行 id,改这一处即可(src/submission-settings.ts)。
  • 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 提交;因此合成 Shift+Enter 换行、合成无修饰 Enter 发送两条路径都仍然成立。上游若改动 Enter / Shift+Enter 的处理,需同步更新 newlineViaCursor / 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;两者一致性由 test/bundle-smoke.test.ts 守住。

0.2.1-rc.2 复核结果

按桌面版 0.2.1-rc.2 的实装产物(app.asar 内 dsh/package.json 版本 0.2.1-rc.2,cordis 4.0.5,schemastery 3.18.5)逐项复核,并用 npm 上真实的 0.2.1-rc.2 类型包做了 tsc --noEmit:插件代码无需改动,只补了一处健壮性处理。

  • 依赖实现没变:dsh-client-store、dsh-client-locale、dsh-settings 的 lib 输出与 0.2.0-rc.2 逐字节相同;schemastery(3.18.4 → 3.18.5)与 cordis(4.0.4 → 4.0.5)只有版本号与依赖范围变化,lib 相同。
  • dsh-client-ui-slots / dsh-client-ui-renderer 只有增量:新增 inline 插槽选项与 keyed hook 的 member 形参,本插件用的 register / inject / hooks 形态不变。
  • dsh-client-ui-settings 移除了"浏览器本地 memory 表单模式"(ConfigFormSnapshot.mode、ConfigForms.persistence):本插件只读 getSnapshot().value、写 set(field, value),不受影响。副作用是所有客户端表单写入都跨网络(set() 在传输失败时 reject),因此 setMode 给写入补了 .catch(),避免断线/被拒时冒出 unhandled rejection。
  • composer 契约不变:data-composer-input + data-phase 仍由 DraftEditor 透传到同一个 contenteditable div,KEY_ENTER 仍对 shiftKey === true 放行、其余走 submit(ctrlKey || metaKey);isComposing || keyCode === 229 的组合输入判断也没变。
  • 设置行插槽未变:0.2.1 官方 settings.general.item 的 order 为 -20/0/10/11/12/15/16/17/20/30/90/100,本插件的 21 仍紧随官方 composer-enter(order 20,管的是 busy 时 Enter 是排队还是打断),无冲突。
  • 客户端投递契约未变:仍是 window.__ModuleLoader__.load({ id, factory }),bundle 也只 require shell 静态模块表里的 @deepseek-ai/dsh-client-store 与 @deepseek-ai/dsh-client-ui-primitives(Menu、IconChevronDownOutlineRegular 都还在表内),因此不需要 dsh.client.external。
  • 清单字段未变:dsh.bundle.patch、dsh.client.platform、dsh.client.inject 照旧读取;0.2.1 的类型注释明确 inject 是"包名依赖信息,不是 Cordis 服务注入"。本版顺带补了 dsh.manifestVersion: 1 与 engines.dsh,把兼容范围写成声明(当前 dsh 不强制校验这两项)。

License

MIT

常见问题

8 问
答案由本站依据条目字段整理,不引用上游原文
dsh-enter-send 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add github:Nalleyer/dsh-enter-send` 即可。

dsh-enter-send 的验证等级是什么意思?

L4 · 沙盒安装通过。安装命令在隔离沙盒内真实执行成功,无依赖错误

dsh-enter-send 安全吗?

低风险。vet 静态分析未发现可疑行为,判定为干净(clean)。

dsh-enter-send 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-enter-send 支持哪些 DSH 版本?

上游记录的兼容版本包括 0.1.1-rc.2。

dsh-enter-send 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-enter-send 有哪些功能?

切换 Enter 发送、兼容中文输入法、设置持久化、Shift+Enter 换行。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

1 条
不同作者的仓库分开列,请确认你要装的是哪一个
UI 与外观
按星标排序,可作替代方案

awesome-dsh-plugin

awesome-dsh-plugin

A curated list of plugins for DeepSeek Harness (dsh) · DeepSeek Harnes

L4 · 沙盒安装通过 1.8 万 星

deepseek-balance-whale-widget

DeepSeek-Balance-Whale-Widget

DSH 界面右下角的常驻小鲸鱼余额挂件,实时显示 DeepSeek 账户余额、今日已用与每轮对话消耗,支持拖拽吸附、Q 弹动画与音效,开箱即

L4 · 沙盒安装通过 4,492 星

dsh-better-sidebar

DSH-better-sidebar

面向 DeepSeek Harness 的服务化侧边栏工作台插件,把文件编辑、终端、Git 变更、子代理任务与侧边对话整合进右侧栏与底部面板

L4 · 沙盒安装通过 4,112 星

dsh-deep-whale

dsh-deep-whale

DSH Web 鲸鱼娘皮肤系列(深海女仆工坊 maid-atelier)。

L4 · 沙盒安装通过 2,470 星

deepseek-design

deepseek-design

可视化设计工作室,支持网站、App 原型、海报、信息卡、报告和杂志的模板创建、元素编辑、选区级 AI 草稿衔接与导出。

L4 · 沙盒安装通过 1,438 星

superdesign-skill

superdesign-skill

Superdesign为DeepSeek Harness等编码代理提供设计判断力,将AI生成的平庸UI转化为可交付的精致前端,支持设计系统、

L3 · 安装规范通过 647 星

Nalleyer 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 2026-10-08。