dsh-composer-ease:把 DSH 网页输入框做成 VS Code 手感

前言

在 DeepSeek Harness(DSH)里写提示词,常常要夹代码围栏、路径和模型名。浏览器里的 composer 默认只有基础编辑能力:括号要自己补全、刚聊过的标识符要手打、工作区里该引用的 README 要靠记忆。社区插件 dsh-composer-ease(维护者 mengge237,分类:客户端)针对 DSH Web 输入框做补全与编辑增强,目标是把「写代码」和「引用文件」时少按几次键;实现上不依赖第三方运行时、不写磁盘、不改宿主源码,属于标准 DSH bundle 插件。

下面按定位、能力、安装与典型用法说明,事实均来自 GitHub 仓库 README 与 package.json。

这是什么

一句话:让 DSH 的输入框在写代码和引用文件两件事上更接近 VS Code 的编辑与补全习惯。

插件通过 cordis.patch.yml 注入客户端脚本(@deepseek-ai/dsh-client-ui-input-trigger),服务端只提供两条只读路由(/dsh-composer-ease/words、/config.json)与本机信任栅栏。浏览器半边是纯 DOM,不引 React 或独立编辑器库。当前 package.json 版本为 0.9.21,许可证 MIT,声明与 DSH >=0.2.0-rc.2 兼容;README 写明主要在 0.2.0-rc.2 的 web 与桌面端 profile 上做过真机验收。

编辑增强:配对、环绕、跳闭符、删空对

README 把下列行为对齐 VS Code:

能力 行为摘要
自动配对 ( [ { " ' 反引号及全角对应符号成对插入,光标落在中间;光标前是标识符或路径字符时不配对
环绕选区 选中一段后再打开括号 → 内容被框住,选区留在内层
跳过闭符 光标右侧已是配对闭符时,再打同一符号只移动光标
删空对 光标夹在空括号中间按退格,一次删掉两侧

半角多走 keydown;全角与中文输入法走 beforeinput,因为 IME 合成字符不一定有可用 keydown。宿主 composer 基于 Lexical,插件不改宿主数据模型,因此 README 明确未实现行移动、复制行、注释切换等需改文档模型的操作。

补全弹层:四类候选与「凭什么给这张词表」

打满 两个标识符字符 自动弹出;也可用 Ctrl+Space 手动触发。行首或空白后打 /、@ 也会弹。弹层锚在光标位置,优先落在光标下方,放不下时翻到上方,宽度固定、高度可滚;列表未变时不重绘,避免连打时闪烁。

候选分四类,弹层顶部会标明词表来源(README 动图示例):

  1. 本文词:草稿里已出现过的标识符,按出现次数排序,本地即时计算。
  2. 语言词表:按代码围栏或对话上下文推断语言(例如围栏 ```py 标「本文围栏 · py」;对话里已有 Java 时打 pub 可标「据对话推断 · java」)。词表规模在 README 中给出(如 HTML 标签 112、JS 关键字 47、Python 129 等)。模糊排序使用 lib/fuzzy.js,逻辑取自 microsoft/vscode(MIT)。
  3. 工作区文件:深度 ≤3,跳过 node_modules 等目录;按路径段前缀匹配,并按「常用作上下文」加权(顶层 README/CHANGELOG/AGENTS 等优先,docs/** 次之,中间态目录如 5_临时 不进候选)。
  4. 模型名与片段:从 settings 读取的模型 id 与若干常用代码片段。

首位候选以行内灰字贴在光标后(类似 VS Code inline suggestion):Tab 接受,Esc 关闭;回车保持发送,不接受候选(README 说明这是为避免弹层开着时连按回车把候选插进正文)。接受也可用鼠标点选一行;↑↓ 切换条目。

安装与启用

推荐在 DSH Web(dsh web)下安装:

dsh plugin --profile web add https://github.com/mengge237/dsh-composer-ease

卸载:

dsh plugin --profile web remove dsh-composer-ease

README 提醒:官方桌面端(Electron) 应使用桌面端自己的插件管理器安装,不要用 dsh plugin --profile desktop(CLI 会拒绝该 profile)。开发时可用本机源码目录或 file: 装法;客户端改完刷新页面即生效,服务端(lib/index.js、lib/words.js)改完需 重启 dsh web。首次安装或改过语言词表后,也需重启一次才能让服务端词表全线生效。

典型用法(可对照 README 复现)

  1. 围栏决定词表:新会话里输入 ```py,再打 def,弹层应标「本文围栏 · py」,候选来自 Python 词表。
  2. 对话决定词表:对话中已有 Java 代码时输入 pub,弹层标「据对话推断 · java」,首条可为 public。
  3. 文件上下文:在工作区打 proj,PROJECT_MEMORY.md 等按权重排在前面;打 rea 时,中间态目录下的文件不应顶到列表前列(README 给出 2026-10-21 真机读数示例)。
  4. 接受补全:用 Tab 或点击行;发送消息仍用 回车。

本地自检可运行仓库内 npm test(README 称五支测试、61 项、无网络依赖)。

适用场景与注意

适合谁:长期在 DSH Web(或已用桌面端插件管理器装好该 bundle)里写带代码围栏、路径和模型引用的提示词,希望编辑与补全习惯接近 VS Code 的开发者。

权限与安全:插件以当前 dsh 进程权限 运行;服务端路由带本机信任栅栏(非 loopback Host 与跨站 Origin 返回 403)。安装前应自行查看 源码与许可证(MIT),确认符合你的环境策略。README 写明不需要任何令牌,语言习惯等仅存本机 localStorage。

已知边界(节选):补全只做文本插入,不做语义分析;老式 textarea 形态输入框仅有离线测试覆盖;引号自动配对有「右边紧跟文字不补」「空对里再打同一引号会跳过」等护栏;/ 菜单里可选「严格配对」开关(浏览器本地存储)。工作区文件索引与模型 id 各有约 20 秒 TTL 缓存。

DSH 生态理念是「一切皆插件」;SkillHub 目录页 为社区收录站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-composer-ease 把 DSH 网页 composer 的括号引号编辑、四类补全弹层和文件上下文排序接到一条安装命令里,并标明词表来源,方便对照「为什么出现这条候选」。需要细节、键位表与开发边界时,以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/mengge237/dsh-composer-ease
  • GitHub:https://github.com/mengge237/dsh-composer-ease
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜