dsh-enter-send

DSH PLUGIN文档与办公

仓库 JHyugou/dsh-enter-send

文档与办公 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

DSH 插件:在输入框工具行「权限」按钮右侧加一个发送键开关,可在 Enter 发送与 Ctrl+Enter 发送之间切换,另一个键自动变为换行(Send-key toggle chip for DeepSeek Harness)

一句话选型结论

按资料字段整理

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

分类文档与办公 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-19 创建于 2026-10-19
README 10.7 KB 正文体量,越大说明说明书写得越细

安装

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

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

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

  3. 3
    确认已挂载

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

  4. 4
    试跑并检查权限

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

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

能做什么

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

上游标签

composerdeepseek-harnessdsh-pluginkeyboard

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

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

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

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

更适合

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

不太适合

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

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-enter-send当前 L5 · 运行验证通过 低风险 0 未标注 有
reactive-resume L3 · 安装规范通过 低风险 4.4 万 未标注 有
webnovel-writer L4 · 沙盒安装通过 低风险 7,742 未标注 有
answer-me-with-html L4 · 沙盒安装通过 低风险 4,782 未标注 有
univer-workspace L4 · 沙盒安装通过 低风险 2,258 未标注 有
last30days-skill-cn L4 · 沙盒安装通过 低风险 1,880 未标注 有

仓库档案

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

README 全文

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

dsh-enter-send

给 DeepSeek Harness 的输入框工具行加一个发送键开关:放在「权限(工作区内修改)」控件的右侧,
点一下就能在 Enter 发送 与 Ctrl+Enter 发送 之间切换。

(截图来自 node tools/browser-check.mjs --shot,是本机 desktop profile 真实渲染的工具行:
+ / 工作区内修改 / 电脑操控:全自动 / ↵ Ctrl+Enter 发送 / … / 模型 / 发送。
conversation.input.left 是 list 席位,别的插件也可能在这条行里占一格——这里
dsh-computer-use 用 order 0 排在前面;本控件与相邻控件同高、同中线,左右间距就是工具行
自己的 column-gap(12px)。)

用法

操作 结果
点工具行里的 ↵ Enter 发送 弹出菜单:「发送方式」下两项,当前项带对勾
选 Enter 发送(默认) Enter 提交(DSH 原生);Ctrl/Cmd+Enter 换行、Shift+Enter 换行
选 Ctrl+Enter 发送 Ctrl/Cmd+Enter 提交(与按 Enter、点发送按钮同一条路径);Enter 换行、Shift+Enter 换行

两种模式都是「发送键之外的另一个键负责换行」:Enter 发送模式下是 Ctrl+Enter(以及 DSH 原生的
Shift+Enter),Ctrl+Enter 发送模式下是 Enter(以及 Shift+Enter)。

细节:

  • 选择保存在浏览器 localStorage(键 dsh-enter-send.mode.v1,v1 存 {version:1,mode}),跨刷新保留;
    换浏览器/清站点数据会回到默认,DSH 本身不受影响。
  • 只在输入框正文里改写按键:队列里的小编辑器、重命名框、终端、其它 contenteditable 一律不碰。
  • 输入法组字中的 Enter 原样放行;Alt/AltGraph 组合原样放行。
  • 补全菜单(/、@)已高亮候选时,Enter 仍然归菜单去选中候选,不会被改成换行。
  • 长按不会连发:重放事件保留 repeat 标志,交给 DSH 自己的「长按不重复发送」判断。
  • 窄卡片(容器宽度 ≤ 460px)下与权限控件一样只留图标,不额外占宽。
  • 默认值就是 Enter 发送:装上插件、不动开关,Enter 提交仍然完全是 DSH 原生行为
    (唯一变化是 Ctrl+Enter 从 DSH 的「互补 Queue/Steer 提交」变成换行,见「已知限制」)。

安装(本机 desktop profile 已装好)

# link 方式装进 desktop profile(改代码即时生效;desktop profile 只能由桌面应用管理,
# 用应用里的「插件」面板安装,或在应用内执行等价的 pnpm 操作)
dsh plugin --profile  add <本目录路径>
dsh plugin --profile  remove dsh-enter-send     # 卸载

装好后宿主会热加载(dsh-client-modules 增量扫描 Loader 条目),已经打开的窗口刷新一次页面(Ctrl+R)
即可看到新控件。

验证

node --test                       # 25 项单元测试:偏好读写/迁移、Enter 判定表(两种模式 ×
#   修饰键组合)、DOM 事实提取、捕获阶段改写与重放、注册契约、
#   宿主入口契约(无需浏览器)
node tools/verify.mjs             # 宿主端 7 项:profile 清单/link/包契约 + 启动图收录 +
#   bundle 可取回 + /api 诊断路由
node tools/browser-check.mjs      # 真浏览器 20 项:席位/相邻/对齐/菜单/持久化/窄卡片折叠
#   + 两种模式下 Enter 与 Ctrl+Enter 的真实按键行为
#   (会发送 2 条测试消息)
node tools/browser-check.mjs --no-keys   # 只跑非破坏性检查(不发送任何消息)
node tools/browser-check.mjs --shot      # 额外把证据截图存到 docs/

三个脚本都用 ~/.dsh/.credentials.yaml 的 browser-session secret 现场铸签名 cookie(与浏览器同构),
不读取、不打印其它凭据;browser-check.mjs 用临时 --user-data-dir 起 headless Chrome,
与你正在用的窗口完全隔离,没有 Chrome/Edge 时会明确报错退出。

排障时可以在 DSH 窗口的 DevTools 控制台里看这几处:

localStorage.getItem('dsh-enter-send.mode.v1')                     // 当前选择
document.querySelector('.dsh-es-trigger')?.innerText               // 工具行里的控件
document.querySelector('[data-slot="conversation.input.left"]')    // 它注册到的席位

架构

DSH 插件是「宿主端 + 浏览器端」双半结构,本插件零 npm 依赖、零构建:

文件 角色
src/client.js 浏览器端 bundle(window.__ModuleLoader__.load 手写格式):chip UI、菜单、样式、Enter 改写
src/index.js 宿主端 Cordis 插件:让包成为 Loader 条目(浏览器 bundle 的发现前提)+ /api/dsh-enter-send.status 只读诊断路由
cordis.patch.yml 安装时自激活宿主端入口
package.json dsh.bundle.patch 自激活 + dsh.client.platform = web 浏览器 bundle 声明
test/ 单元测试(把 bundle 用 ModuleLoader 桩加载后直接断言)
tools/ 验证脚本:verify.mjs(宿主)、browser-check.mjs(真浏览器,可 --shot 截图)

界面:为什么用 conversation.input.left

@deepseek-ai/dsh-client-ui-conversation 的输入框工具行是固定结构(InputBar.tsx):

← 左组,gap 12px
[+]   权限控件 / 计划控件
{renderSlot('conversation.input.left', {})}   ← 本插件在这里
…模型 / 麦克风 / 发送…

conversation.input.left 是 list 席位,渲染位置就在权限与计划控件之后、工具行内,
正是截图里红框那一格——不需要 DOM 注入,也不需要 portal。chip 的规格直接照抄
PermissionSelect.module.css 的触发器(28px 高、border-radius: var(--dsw-radius-sm)、
13/20 medium、gap:4px、padding:0 4px 0 8px、--dsw-alias-label-secondary、
悬停 --dsw-alias-interactive-bg-hover、14px 前置图标 + 16px 折叠箭头),
菜单用 ui-primitives 的 Menu(与权限控件同一个组件、同一套样式),所以外观与相邻控件天然一致。

行为:为什么是「捕获阶段改写 + 重放」

DSH 的输入框是 Lexical 编辑器,键位在 KEY_ENTER_COMMAND(critical 优先级)里判定
(ui-conversation/src/client/input/editor/keymap.ts):

if (event?.shiftKey === true) return false        // Shift+Enter → 原生换行
if (handlers.arbitrate('enter', false) !== 'pass') …  // 菜单高亮 → 归菜单
event?.preventDefault()
handlers.submit(event?.ctrlKey === true || event?.metaKey === true)   // 其余 → 提交

本插件不调用任何 DSH 内部 API(也不 import 它的私有模块),而是在 document 捕获阶段先拿到按键,
把语义重放成等价的那一个:

选择 真实按键 重放成
Enter 发送(默认) Ctrl/Cmd+Enter Shift+Enter(→ DSH 原生的换行路径;替代 DSH 原本的「互补」提交)
Enter 发送(默认) Enter / Shift+Enter 不拦,完全交给 DSH
Ctrl+Enter 发送 Ctrl/Cmd+Enter 普通 Enter(→ 与按 Enter、点发送按钮完全同一条提交路径)
Ctrl+Enter 发送 Enter Shift+Enter(→ DSH 原生的换行路径)

重放用的是同元素上的合成 KeyboardEvent:Lexical 的 keydown 监听挂在编辑器根元素上、
不检查 isTrusted,所以合成事件与真实按键走同一条链路;repeat 标志跟着原事件走,长按不会连发。
补全菜单高亮时([role="listbox"][aria-activedescendant])Enter 交给 DSH 的菜单仲裁去选候选,
不会被改成换行。

与 DSH 的耦合点(都有降级)

依赖 变化时的表现
conversation.input.left 席位 席位消失 → ctx.slots.inject 等待/摘除,插件静默失效,不影响 DSH 其它功能
[data-composer-input] / contenteditable="true" 改名 → 按键改写不生效(退化成「只有开关,没有行为」),控制台无异常
Lexical 的 KEY_ENTER_COMMAND 语义(Shift=换行、其余=提交) 语义变化 → 重放结果跟着变;单元测试会先失败
[role="listbox"][aria-activedescendant] 补全菜单改名 → 菜单打开时 Enter 会被改成换行(可接受的降级)
localStorage 不可用(隐私模式) 降级为「本次会话有效」

任何一处失败都只降级本插件自己;插槽渲染器会把崩溃的条目隔离在 [data-slot-error],不会拖累外壳。

已知限制

  • 开关是浏览器本地偏好(localStorage),不写宿主设置,所以同一台机器的另一个浏览器/另一份
    profile 数据不会同步;DSH 官方设置里也不会出现这一项。
  • 只覆盖输入框正文的 Enter:队列里那条小编辑器(Enter 保存)按自己的语义走,不受开关影响。
  • conversation.input.left 是 list 席位:别的插件也在用(例如 dsh-computer-use,order 0),
    它们按各自 order 排列;本插件用 order 100,所以排在它们之后。想让开关更靠左(比如紧贴权限控件),
    把 src/client.js 里 ctx.slots.register({ … order: 100 … }) 的 order 调小即可。
  • 「Ctrl+Enter 发送」模式下,Ctrl+Enter 走的是普通提交语义(与 Enter 相同,遵守 DSH 自己的
    队列/转向偏好),不是 DSH 原生的「互补」提交;这正是「Ctrl+Enter 就是发送键」的含义。
  • 「Enter 发送」模式下,Ctrl/Cmd+Enter 被改成换行,因此 DSH 原生的「互补 Queue/Steer 提交」
    (固定按键 fixed.complementary)在这个模式下不可用;需要它时切到「Ctrl+Enter 发送」即可
    (那里 Ctrl+Enter 是发送键,Enter 是换行键)。快捷键帮助里由 DSH 自己登记的那条说明不会随之变化。
  • 桌面端与 Web 端一致:Windows/macOS 桌面只把可配置快捷键拦在原生层,Enter/Ctrl+Enter 属于
    固定动作,仍然走 DOM,所以本插件在桌面应用与浏览器里行为相同。

本机开发备注

  • .ref/ 是本机 DSH 内置包源码摘录与探查脚本(仅本地参考,已 gitignore,不随包发布);
    摘录用 dsh-remind 里的 tools/asar.mjs,源码可在 E:\deepseek-harness 查看。
  • 改了 src/client.js 后:宿主会重新计算 bundle 版本(按文件 mtime/size),页面刷新即生效;
    宿主端 src/index.js 改动需要重启 DSH(或插件页重载)。

常见问题

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

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

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

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-enter-send 安全吗?

低风险。

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

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

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

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

这条记录的数据可靠吗?

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

同名或近似条目

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

webnovel-writer

webnovel-writer

基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。

L4 · 沙盒安装通过 7,742 星

answer-me-with-html

answer-me-with-html

Answer me with HTML — an agent skill that answers hard questions with

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

last30days-skill-cn

last30days-skill-cn

last30days-cn 是一个 AI Agent 技能(Skill),能够自动搜索中国互联网 8 大主流平台最近 30 天的内容,综合分

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

dsh-bili-scroll

dsh-bili-scroll

DSH 插件:每天替你刷一轮 B站,读字幕挑出值得的、写一份日报,值得的 @ 你

L5 · 运行验证通过 1,025 星

JHyugou 的其它插件

6 个

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