dsh-composer-ease
Verifieddsh-composer-ease · v0.9.69 · MIT · Web UI
Composer for the DeepSeek Harness Web GUI: bracket and quote pairing, wrap-on-selection, closer skipping, empty-pair backspace, and a completion popup over draft words, language tables, workspace files and model ids. Full-width brackets typed through a Ch
Install
dsh plugin add dsh-composer-ease Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
description: "给 DSH Web 输入框加补全与编辑:括号与引号自动配对、选中一段再打符号直接框住、跳闭符、空对一次删两侧;补全弹层给本文词、语言词表、工作区文件与模型名,中文候选来自词典(含领域词表、无写死长度上限),打满两个字符自动弹、Tab 接受、回车保持发送。中文输入法打出的全角括号默认换成半角 ()(菜单可关回全角)。标准 DSH bundle 插件:一条命令安装、零第三方运行时、不写文件、不改宿主源码;语言词表在服务端,改过需重启 dsh web。" kind: "package-reference"
dsh-composer-ease
English | 中文
概述
dsh-composer-ease 是一个 DSH bundle 插件,把 Web 输入框的手感对齐 VS Code:括号与引号成对、选中一段再打开符就环绕、闭符跳过、空对一次删两侧,打满两个字符弹补全。浏览器半边是纯 DOM;服务端半边只有两条只读的本机路由,一个字节都不写。
目录
安装
dsh plugin --profile web add https://github.com/mengge237/dsh-composer-ease
dsh plugin --profile web remove dsh-composer-ease
桌面端(Electron)用它自己的插件管理器装,dsh plugin --profile desktop 会被 CLI 拒绝。开发时:浏览器半边每次请求现读磁盘(刷新即生效),服务端半边要重启 dsh web。
使用本包
| 操作 | 键 / 触发 | 行为 |
|---|---|---|
| 自动配对 | ( [ { " ' 反引号与全角家族 |
光标落在中间;光标前是路径/标识符字符、或右边紧跟文字时不配对 |
| 环绕选区 | 选中后打任意开符 | 内容 → (内容);只支持单行选区(见边界) |
| 跳闭合 / 删空对 | 右边已是闭符 / 光标夹在 () 里按退格 |
不重复插;一次删两侧 |
| 补全 | 打满两个字符,或 Ctrl+Space |
弹层:本文词、语言词表、工作区文件、模型名、片段 |
| 接受 / 选择 | Tab 或点击 / ↑ ↓ |
回车仍是发送;← → Home End 只收弹层、挪光标 |
| 关闭 | Esc |
Shift+Enter 仍是换行 |
补全跟着上下文走:写了代码围栏就上该语言词表;否则由草稿与可见对话投票,再退到你最近接受过候选的语言。
理解实现
lib/index.js—— 服务端半边:/dsh-composer-ease/words与/config.json,都在本机信任栅栏之后;排序用lib/fuzzy.js(VS Code 的fuzzyScore,逐字取用)。lib/client/*.js—— 浏览器半边,九个片段由tools/build-client.mjs拼成lib/client.js(宿主只认一个文件)。- 中文候选只来自词典(
lib/cjk-lexicon.js):前缀在词表里匹配,词长由数据决定,不再写死一个长度上限。 - 弹层是纯 DOM、锚在光标上;从不碰宿主编辑器的数据模型。
边界与已知限制
逐条阅读见 docs/边界与实现.md(多行包裹、插入限制、输入法行为、波浪线几何),每条都写了为什么。
开发与测试
npm run build # 片段 → lib/client.js
npm test # 五支离线套件,185 项,0 网络
npm run check:all # 结构 / 重复 / 重构预算 / 文档 / 隐私 / 散文 / 副本
node test/real/matrix.mjs "http://127.0.0.1:3081/?token=…" 3 --verbose # 真机矩阵,每轮 45 条
宿主 composer 是 Lexical:不认 sel.modify(...)、不认 beforeinput 的 preventDefault、input 事件不保证派发 —— 选区操作一律走「摊平偏移 + 显式 Range + 跨帧校验」。
来源与许可
- 交互设计参照 Visual Studio Code(MIT);除
lib/fuzzy.js逐字取用外没有复制源码(见 THIRD-PARTY.md)。 - 词表数据借用自 monaco-editor、codemirror/lang-html、codemirror/lang-css、MDN browser-compat-data 与 jieba 词典;每条的仓库、commit、取用文件与许可证原文都记在 THIRD-PARTY.md。
- 本插件自身:MIT(见 LICENSE)。
开发说明
- 只改
lib/client/*.js,然后npm run build;不要手改lib/client.js。 - 每条约定都有可执行判据放在
tools/check-*.mjs;CI 只负责把它们拉起来(.github/workflows/checks.yml,ubuntu + windows,concurrency保证每分支只留最新一次)。 - 发版:改
package.json版本 → CHANGELOG 写条目并回填 commit sha →npm run check:all。