deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
⚠️ AI 生成声明 / AI-Generated Notice 本项目(代码、文档、测试)由 AI 助手(DeepSeek Harness 智能体) 生成,经人工在真实环境中测试验收。 This project (code, docs, tests) was generated by an AI assistant (a DeepSeek Harness agent) and manually verified against a live environment.
把「发送」和「换行」分配给你顺手的键 / Assign send & newline to the keys you like
中文 | English below
dsh-composer-keys 是 DeepSeek Harness Web 前端的输入框按键自定义插件:把 Enter、Ctrl/Cmd+Enter、Shift+Enter 或任意自定义组合键(如 Ctrl+S、Alt+Enter)自由分配给「发送」「换行」「打断」三个动作。
默认保持 DSH 原生行为——装上插件后一切照旧,只有你主动改绑才会变化。


DSH 原生(Enter=发送 / Shift+Enter=换行 / Ctrl+Enter=加速提交)与 微信风格(Ctrl+Enter=发送 / Enter 或 Shift+Enter=换行)一键切换。composer-keys 命名空间——与主题、语言等原生偏好同一条通道,重启保留、跨设备跟随用户文档。两层机制正交,互不冲突:
| 层 | 归属 | 管什么 |
|---|---|---|
| 手势 → 动作 | 本插件 | 哪个键触发「发送」、哪个键触发「换行」 |
| 动作 → 忙碌语义 | DSH 原生 | 智能体忙碌时提交是「排队」还是「转向」(即原生的 busy-Enter 设置) |
具体衔接规则:
一句话总结:插件决定"哪个键发送",原生设置决定"忙碌时发送意味着什么"。
[data-input-scroll]);审批面板、会话重命名框等其他输入区域不受影响。无活动会话的首屏(hero 界面)不渲染工具按钮属正常行为。isTrusted=false 识别并放行。从本地 clone 安装:
dsh plugin --profile web add /path/to/dsh-composer-keys
Git Bash / MSYS 下请使用正斜杠路径(如
D:/net/GitHub/dsh-composer-keys),反斜杠会被转义吞掉。
重启 dsh web 后生效。卸载:
dsh plugin --profile web remove dsh-composer-keys
已在 DSH 0.1.1-rc.2(Node 26, Windows 11, pnpm 11 hoisted profile)上验证。
window.__ModuleLoader__.load({id, factory})),无构建步骤;composer-keys 命名空间 schema,让浏览器半件的 ctx.settingsScope.bind() 可以读写持久化配置(apiproxy 对所有注册命名空间一视同仁地提供给 Web 端);{ apply, inject: ['locale', 'slots', 'settingsScope'] }——vendored cordis 对未声明服务的属性访问会直接抛 cannot get property X without inject,导致整个 entry 引导失败(页面横幅 "Failed to load plugins")。这是本插件踩过的坑,写在这里给其他插件作者参考;INSERT_LINE_BREAK_COMMAND 对象本身并 dispatch,保持草稿、选区及撤销历史同步;旧 textarea 仍使用原生编辑和 value setter 回退。命令按对象身份匹配,不能传命令名字符串,也不能用另一份 Lexical 导入的同名对象;--dsw-alias-bg-layer-*、--dsw-alias-border-l*、--dsw-alias-label-*、--dsw-alias-interactive-bg-hover、--dsw-alias-brand-primary、--dsw-alias-bg-mask-1)。[data-input-scroll])或调整语义 token 名,拦截/配色可能失效。Lexical 换行适配依赖 __lexicalEditor、_commands 与命令的 type 标签:若宿主不再提供这些字段或命令拒绝处理,插件会阻止已绑定的换行键并输出控制台警告(避免 Enter 意外发送草稿),不会绕过编辑器直接修改 DOM;A DeepSeek Harness web-composer plugin that assigns any chord — Enter, Ctrl/Cmd+Enter, Shift+Enter, or custom ones like Ctrl+S — to the Send, Newline, or Interrupt actions. Ships with native behavior by default; nothing changes until you rebind.
composer-keys namespace); two entries into one panel (Settings → General row + composer toolbar keyboard button).isTrusted=false; IME composition never intercepted.Install: dsh plugin --profile web add /path/to/dsh-composer-keys, then restart dsh web.
AI-generated notice: this project was generated by an AI assistant and verified manually in a live environment.
npm test
测试用 Node 内置测试运行器直接评估 client.js 的真实源码(提取其中的纯手势引擎与换行路径),无需构建、无第三方依赖。覆盖:手势归一化、绑定解析(含 mod 别名)、动作解析、零干预判定、互斥迁移、脏数据清洗、显示格式化,以及 Lexical 命令对象身份匹配、不可用时防误发送、IME/合成事件放行。
本地浏览器回归(本地工具,不写入 package.json):playwright-core 从本地安装 / $PLAYWRIGHT_CORE_PATH / npm 全局目录自动解析,浏览器自动探测系统 Chrome/Edge(CHROME_PATH 可显式指定):
node test/newline-regression.mjs '<本地 dsh-client-ui-conversation/lib/client.js 的绝对路径>'
该脚本针对本地 DSH bundle 的 Lexical 和原生 composer keymap 建立隔离页面,以真实浏览器按键验证换行、发送回调、选区替换和撤销/重做;不启动 DSH 服务、不改用户设置、不发起模型请求,不等同于完整在线 GUI 部署验证。
修复了 DSH 0.1.6-alpha.1 中自定义换行失效:旧实现用字符串 dispatch Lexical 命令(Lexical 按对象身份匹配命令,字符串永远失配),且 DOM 编辑回退可能不同步编辑器状态。新实现使用当前编辑器注册的命令对象;命令不可用时阻止已绑定的换行键,避免 Enter 意外发送草稿。已在 DSH 0.1.6-alpha.1(Node 26, Windows 11, pnpm 11 hoisted profile)上验证。更新插件后重启加载该插件的 dsh web 并刷新浏览器即可;此插件为手写浏览器 bundle,无需额外编译。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。