DSH Plugins Marketplace

DSH Plugins

Plugins

/

Terminal & Clients

/

dsh-composer-pro

d

dsh-composer-pro

Manifest valid

Make the DSH input box feel like VS Code: automatic pairing of brackets and quotes (half-width and full-width), wrap the selection with symbols when text is selected, skip the closing bracket, delete empty pairs; the autocomplete popup uses VS Code's `fuzzyScore` for scoring (`lib/fuzzy.js` is taken verbatim from `microsoft/vscode`, MIT), with four candidate categories: document words / language word lists (HTML·JS·Python·Java·CSS) / workspace files / model names in settings, matched characters rendered in bold, and the top candidate shown in inline gray text; auto-popup after typing two letters, Tab to accept, Enter to send. Standard DSH bundle plugin: one command to install, no third-party runtime dependency, no files written, no host source code changes.

UI (client)hasBundlePatch

更便捷的输入框(dsh-composer-ease · DSH 输入框增强)

中文 · English

概览

两镜头演示:围栏语言与对话上下文

动图两镜头(真机录制,纯净 profile:只有官方插件 + 本插件):① 新会话里写围栏 ```py 再打 def —— 弹层顶上标「本文围栏 · py」,给的是 Python 词表;② 对话里已经有 Java 代码时打 pub —— 顶上标「据对话推断 · java」,首条直接是 public。依据行就是「凭什么给这张词表」的答案。

把 DeepSeek Harness(DSH)Web 输入框的手感对齐 VS Code:括号引号自动配对、选中一段再打括号就环绕起来、 光标右边已是闭符时再打它直接跳过、退格删掉一对空括号;再给一个补全弹层——草稿里出现过的词、各语言关键字与标签、 工作区文件路径、settings 里配的模型名,打满两个字母自己弹。

标准 DSH bundle 插件:一条命令安装、不 require 任何第三方包、不写任何文件、不改宿主一行源码,也不需要任何令牌。 浏览器半边是纯 DOM(不依赖 react、不引编辑器库),服务端半边只有两个只读路由。

装在哪、怎么装

你要装在哪装法注意
DSH Web(dsh web)dsh plugin --profile web add https://github.com/mengge237/dsh-composer-ease推荐。也可以装本机源码目录:dsh plugin --profile web add "E:/S_Software/deepseek-harness/plugins/dsh-composer-ease"
官方桌面端(Electron)用桌面端自己的插件管理器装别用 dsh plugin --profile desktop(那条路被 Electron 独占,CLI 会拒绝);桌面端会话里让 DSH 自己装
开发(改代码)源码目录 + file: 装法客户端半边每次请求现读磁盘,改完刷新页面即生效;服务端半边(lib/index.js、lib/words.js)改完要重启 dsh web

卸载:dsh plugin --profile web remove dsh-composer-ease(不留任何数据文件,没有要清理的东西)。

特性

编辑手感(对齐 VS Code)

  • 自动配对:( [ { " ' 反引号成对插入,光标落在中间;全角也一样(( 【 「 《 “ ‘),中文输入法下走 input 事件补配对(IME 合成的字符不一定带对应 keydown);光标前是标识符或路径字符时不配对(保护 call( 与 E:/path 这类写法)
  • 环绕选区:选中一段再打开括号 → (选中内容),并且选区还原到内层内容上,接着打字就是改内容; 半角走 keydown、全角/中文输入法走 beforeinput(IME 合成的字符没有可用的 keydown,只有 beforeinput 能在 DOM 变更前拿到要插的字符);Shift 组合键打出的 { " 同样有效
  • 行内灰字提示:首位候选比已打的前缀多出来的那截,用灰字贴在光标后面(VSCode inline suggestion 手感),Tab 收下、Esc 收起
  • 跳过闭符:光标右边已经是该配对的闭符时,再打它只移动光标,不重复插
  • 删空对:光标夹在 () 中间按退格,一次删掉两侧
  • 语言提示:草稿里写了代码围栏(```js / ```python)就按该语言上词表

补全弹层的位置与手感(对齐 VSCode)

  • 锚在光标上,不是输入框左边缘:一行长文时不会把弹层甩到半屏外
  • 优先落在光标下方;下方放不下(输入框在窗口底部,通常如此)才翻到光标上方 6px,永远不盖住你正在写的那一行
  • 宽度固定一档、高度封顶可滚:宽度不随候选长短抖动,打字快时不会一跳一跳
  • 行内排版照 VS Code:左边类型图标、中间标签(命中字符加粗)、右边一个淡类型词——类型信息一律在右侧, 不会跑到候选名前面去
  • 候选列表没变就不重画:连续按键时不会闪,也不会出现两个弹层

补全候选(四类)

  • 本文词:草稿里已经出现过的标识符,按出现次数排序,本地即时算、不等网络(VSCode 的 word based suggestions 口径)
  • 排序口径 = VS Code 的模糊打分:lib/fuzzy.js 逐字取自 microsoft/vscode(MIT,见 THIRD-PARTY.md)—— 前缀、词边界、驼峰、连续命中都加分,间隔与分散扣分;命中位置由它给出,列表里命中的字符加粗(就是 VS Code 那个样子)
  • 语言词表:HTML 标签 112、JS 关键字 47、Python 129、Java 56、CSS 属性 600、HTML 全局属性 27(数据来源见「来源与许可」)
  • 中文词也算候选:草稿与上下文里的汉字词(按二元/三元组拆,中文没空格分词)同样按前缀提示—— 写过「关于文档的说明」,后面打「文」就提示「文档」,跟写代码时提示变量一个手感
  • 上下文候选:页面上可见的对话文本里出现过的标识符(≥4 字符)也按前缀补出来,右侧类型标「上下文」—— 刚讨论过的函数名、文件名不用再手打一遍(只读页面文本,2 秒缓存,不动宿主 DOM)
  • 语言推断:没写围栏时先按上下文猜(def/import/.py → python,<div> → html,const/await → javascript), 猜不出再退到习惯
  • 语言习惯:没写围栏时按你实际在用的语言上词表——草稿里写过 ```js 或接受过某套词表的候选都会记一笔(存本机 localStorage,不上传任何东西)
  • 工作区文件:深度 ≤3、跳过 node_modules,按路径段前缀匹配(见「候选匹配规则」)
  • 模型名与片段:从 settings 真源读出的模型 id,加上几个常用代码片段

触发与接受

  • 打满 2 个标识符字符自动弹;Ctrl+Space 手动弹;行首或空白后打 /、@ 也弹
  • Tab 接受(或鼠标点某一行);↑↓ 选择;Esc 关闭
  • 回车不吃弹层:聊天框里回车就是发送。这条是 2026-10-16 真机事故换来的——原来回车也算接受,弹层开着时连按回车会把候选一遍遍插进正文

性能

  • 工作区文件索引与模型 id 各带 20 秒 TTL 缓存:首次全盘走一遍约 23ms,之后命中 0~1ms
  • 每个按键只发一次本地请求(loopback),后发先至的旧响应按序号丢弃

键位(对照 VS Code)

操作键 / 触发行为
自动配对( [ { " ' 反引号;全角 ( 【 「 《 “ ‘光标前是路径/标识符字符时不配对;光标右边紧跟文字时只插这一个开符(在一段文字前打前引号就只出一个引号);右边已是同一个闭符时跳过
环绕选区选中后打任意开括号选区 → (选区),选区保持在内层
跳过闭合光标右已是应得的闭符时再打它不重复插,移过去
删空对光标夹在 () 中间按退格一次删两侧
补全打满 2 个标识符字符 / Ctrl+Space弹层:本文词优先,其后语言词表 / 文件 / 模型 / 片段
接受只有 Tab 或点击某一行回车保持发送;接受后弹层不会自己复开
关闭与选择Esc / ↑ ↓Shift+Enter 仍是换行

候选匹配规则

  • 文件候选只认「某个路径段以查询开头」:attrib → 5_临时/attrib-index.diff 排第一;段内中段匹配要求查询 ≥3 个字符
  • 不做松散模糊(纯子序列):路径本来就长,子序列几乎必中,等于「打一个字给你一堆别的文件」,会逼着人逐个核对
  • 子序列只留给词表 / 模型 / 片段这类短候选,且查询至少 3 个字符

已知边界

  • 服务端半边改代码要重启 dsh web(ESM 已载入内存不重读);客户端半边刷新页面即生效
  • 语言词表的键位(如 inp → input)在服务端,因此首次装好或改完词表后,要重启一次才全线生效
  • 只在 0.2.0-rc.2 的 web 与桌面端两个 profile 上实测过(宿主版本更新后请重跑自检)
  • 老式 textarea 形态的输入框只有离线测试覆盖,真机上没样本
  • 不改宿主 composer 的数据模型:所以 Alt+↑/↓ 移动行、Ctrl+D 复制行、Ctrl+/ 注释切换这类要动 Lexical 文档模型的操作没有做,别当已有功能
  • 补全只做「插入文本」,不做语义分析:它不知道你的代码里哪些符号可以用

目录结构

路径用途
lib/index.js服务端半边:两条只读路由(/dsh-composer-ease/words、/config.json)与本机信任栅栏
lib/client.js浏览器半边:keydown 捕获层、配对与环绕、补全弹层(纯 DOM,无第三方依赖)
lib/words.js各语言词表(静态数组,出处与 commit 写在文件头)
test/五支测试 + 真机验收报告(REPORT-2026-10-16.md)
docs/README 配图
THIRD-PARTY.md借用数据的来源与许可证原文
cordis.patch.ymlDSH bundle 声明(dsh.bundle.patch)

开发与测试

npm test        # 五支,61 项,0 网络:数据层 / 路由与信任栅栏 / bundle 形状 / 假 DOM 行为测试 / 许可与合规
  • test/selftest.mjs:候选排序、模型 id 解析、文件收集封顶、workspace.json v2 形状、词表命中
  • test/server-routes.mjs:路由形状、本机信任栅栏(非 loopback Host 与跨站 Origin 一律 403)、方法闸、config.json 载荷
  • test/client-smoke.mjs:bundle 头与导出形状、键位判据、本文词与围栏识别
  • test/client-behavior.mjs:假 DOM 驱动真监听——配对、环绕、跳闭合、删空对、Ctrl+Space 取数、Tab 接受替换、回车放行、接受后不复开
  • test/compliance.mjs:许可与条例自检(9 项)——自家 MIT 署名、每个借用件在 THIRD-PARTY.md 里都有仓库+许可+钉住的 commit、 MIT/CC0 原文照录、逐字搬来的代码带出处头(含「改了什么」)、运行时零第三方依赖、仓里没有密钥、版本号与更新日志对得上、 登记表那侧 npm 键合法、上游版权声明原样保留且排在我们的说明之前。反向对照过:删掉台账里一行、把版本号改成 9.9.9,它都会红
  • 真机验收(headless 打真 composer):脚本已入仓 —— test/real/real5.mjs(五场)与 test/real/real-regress.mjs(12 条邻接行为), 要一个跑在 3081 的纯净 profile;读数与结论见 test/REPORT-2026-10-20.md 与 test/REPORT-2026-10-16.md

改这块前先读 README 的「形态与边界」与语言词表文件头:宿主 composer 是 Lexical,它认三条规矩—— ① 不认 sel.modify(...),选区操作必须走「摊平字符偏移 + 显式 Range」;② 不认 beforeinput 的 preventDefault, 它照自己的模型照样插,所以「拦 + 自己插」一定双份,只能「让它插完再收尾」;③ 改选区要跨帧校验(它会重渲染并冲掉 一次性的写入),且 input 事件不保证派发(空框首次插入就没有),任何收尾都不能只挂在 onInput 上。

常见问题

  • 打 inp 没出现 input? 语言词表在服务端半边:装好之后(或改过词表之后)要重启一次 dsh web
  • 为什么回车不接受候选? 聊天框里回车是发送键;接受请用 Tab(0.2.2 起如此,之前回车也算接受,会连插候选)
  • 选中一段再打括号没框住? 0.3.0 起已修:半角走 keydown、全角与中文输入法走 beforeinput;若你用的是老版本,先升级
  • 为什么不再给一堆不相关的文件? 0.2.2 起文件候选只认路径段前缀;要更宽的匹配请直接用 / 或 @ 触发
  • 它会改我的文件吗? 不会。只读工作区文件清单与 settings 真源,一个字节都不写
  • 桌面端怎么装? 桌面端是独立 profile,用桌面端自己的插件管理器装(dsh plugin --profile desktop 会被拒)

更新日志

  • 0.9.10(2026-10-20):治手快那一拍的顺序问题(本人:「时有时没有,三个引号」)。成因是一类读到旧状态:上一键挂起的光标复位还没落地,下一键就来读 caret/before 了 —— 空框打 " 得 "" 之后紧接着再打 ",因为光标还没挪到两符中间,第二下会当成字面插入,于是多出一个。修法:keydown 与 beforeinput 先就地 flush 上一次挂起的光标复位,再读状态(flushCaretFix 本身幂等:文本不匹配就什么都不做)。真机回归补 4 条手速场景(0ms 连按两下 / 0ms 连按三下 / 打完 " 立刻上屏中文 / 打完两下立刻上屏中文),15 → 23 项。 说清楚:这一条在本机用 Playwright 复现不出来(它的两键间隔总比真实手速宽),所以只能算「堵住一类已知会读旧状态的顺序」,不是「已复现的故障被修好」。判据上我做了反向对照(把两处 flush 去掉)——在 Playwright 的时序下 15/15 仍然全绿,说明这条修复没有被我手上的仪器证伪过,也没有被它证实过。如果你再看到多出来的引号,请回我一句「还在」,我会改用「配对插入整体原子化」那条更重的路。
  • 0.9.9(2026-10-20):修本人报的那条真正的路径——「先打『你好』→ 前面打 " → 再打 "」。真机复现出两种落法,都会堆出多余引号:A 回最前打 "(没选中),光标紧贴一个没闭合的开符、后面还有正文,此时再打同一个得到 ""你好(两个没闭合的开引号,谁都用不上);B 选中文字打 ",会被框成 "你好"(光标落在闭符之后),再打 " 就堆出本人报的 "你好""。修法:A 认作补闭合,闭符落到这一段的末尾("|你好 + " → "你好");B 认作已经框好,不再加一个("你好" + " → "你好")。两条都有边界:空对不算已框好(连打三下引号仍是 """,写 ``` 围栏那种用法不能被挡)、a( 后打 ( 仍只插一个。用例 client-behavior 90 → 96 项、真机回归 15 → 19 项(4 条就是本人这条路径的两种落法 × 快慢);反向对照过:把这两条规则关掉,B 立刻红成 "你好""、A 红成 ""你好。离线 133 项、真机 6+19 项,各连跑 3 轮全绿
  • 0.9.8(2026-10-20):把 0.9.7 的「落地后按真文本复核」也补到输入法那条路(beforeinput 补闭符)上——之前只有半角 keydown 那条有这道网。判据:配对被落地之后,按真文本重算一次规则,本该「只插一个」的就把多出来的闭符撤掉。离线 127 项、真机 21 项复跑全绿(真机结果与 0.9.7 一致,这一版只加网、不改行为)
  • 0.9.7(2026-10-20):修 0.9.6 自己引入的回归——「配对后光标复位」当时靠盲定时器撒一串(0/16/48/110ms),两头都出错:要么没抢在输入法前面(" 配好对之后紧接着上屏中文,文字落到闭引号外面成 ""你好,末尾再打就是本人报的 "你好""),要么在用户已经打完字之后才开火,把光标拽回原位(读数 caret=1)。逐点采样的真机读数说清了时机:我们自己插入的文本节点在 microtask / rAF / setTimeout 0 那一刻都还不存在,约 2ms 才出现,从那一刻起写光标就粘得住——所以这个时刻只能由 DOM 变化来定,不能猜。修法:① MutationObserver 等文本真的落地再写(不再撒盲定时器);② 连续两拍都读到目标位置、文本也没再变才算落地(Lexical 的重渲染比我们晚一拍,只写一次会被它冲掉);③ expect 文本护栏:文本被别人(用户/输入法)改过就立刻放手,绝不抢光标;④ 落地后按真文本复核一次,判据本该「只插一个」的就把多出来的闭符撤掉。用例补 3 条手速场景(每步 10ms 与零等待)进 test/real/real-regress.mjs;反向对照过:去掉 observer 立刻红成 ""你好"",正是本人报的形状。离线 127 项、真机 6+15 项全绿
  • 0.9.6(2026-10-20):修配对之后光标跑掉与空框打全角开符不补闭符,两条是同一个根因的两面。真机取证(dsh --profile demo --port 3081 + Playwright,在 window 捕获阶段记录「按键那一刻」的读数,绕开插件自身处理器)推翻了交接文档里的三条旧假设:① keydown 里读 DOM 不是空的(text='"' + '你好'、caret=3 全对)——影子状态不需要;② preventDefault() 拦不住 Lexical,它照自己的模型再插一遍,所以「拦 + 自己插」必然双份;③ input 事件在空框首次插入时根本不派发(探针里只有 beforeinput),这才是「补闭符时灵时不灵」的真因。实测的两条缺陷:配对之后光标停在开符之前(空框打 " 值对但 caret=0,接着打字打到引号外面、连按第三下被当成「跳过闭符」吞掉,""" 只出 "");空框打 “ 只得到 “(补闭符挂在 onInput 上,而那一场没有 input)。修法:① 光标改成按绝对偏移写 + 跨帧校验;② beforeinput 改成判定在这里、落地等原生插完再收尾——不拦默认、不自己插开符,「只插一个」的情况零干预,要补闭符/要跳过/要框住的才记一条 pending,事后读状态确认再动,且幂等(onInput 那条先到也不会补两次);③ 选区框完之后把原生多插的那一个开符删掉(真机读数:选中 abc 打 “ 曾得 ““abc”)。假 DOM 顺带补齐「浏览器那半步」(beforeinput 没被拦住就照默认落字,可模拟 input 缺席),六条目标规格转正、替换掉 0.9.3 挂的 4 条旧规格;client-behavior 84 → 90 项。另:安装地址换成规范路径 mengge237/dsh-composer-ease(GitHub 已把 mengge237-labs 迁走,旧地址只剩重定向)
  • 0.9.5(2026-10-20):补上单书名号 〈〉(U+3008/3009)到成对家族。取证时发现它不在表里,所以 〈〉 空对按 Backspace 完全不生效、空框打 〈 也不配对;与 《》 同属中文成对标点,不该漏。用例 79 → 84 项(〈〉 的配对、跳闭符、空对删除,外加 《》 的空对删除),全套 121 项全绿
  • 0.9.4(2026-10-20):修全角/中文标点的空对里按 Backspace 只删一侧。取证读数:()(码点 ff08 ff09)删完残留 ff09、“”(201c 201d)残留 201d,而半角 ()、[] 正常。成因是 pairbackspace 两次删除各派发一次 input,onInput 的「全角开符自动补闭符」在前删之后看到孤零零的 ( 就把 ) 补了回来(半角因 charCode < 127 不走那条分支)。修法:删除期间把 suppressInput 计数 +2,让这两次 input 被吞掉。用例 75 → 79 项(五个家族各一条),全套 116 项全绿
  • 0.9.3(2026-10-20):只加测试,不改行为。client-behavior 从 42 增到 75 项——新增 29 条「成对家族行为矩阵」(九种开符空框配对、五种前方未闭合只插一个、三种右边已是闭符则跳过、四种框住选区、连按两/三下、五种标识符或路径后不配对、中文正文后仍配对)与 4 条基础用法(/ 与 @ 触发候选、全角闭符跳过与放行)。另挂 4 条「目标规格/已知缺口」,默认跳过,CE_PENDING=1 node test/client-behavior.mjs 才跑:beforeinput 路线要补的三条,以及这次新测出来的真 bug——全角空对()里按 Backspace 只删一侧(ASCII () 正常)
  • 0.9.2(2026-10-20):修**「前方有引号、后方再打还是一对」——原来只看光标前一个字符,当前面是「好」这种正文时看不到更早那个没闭合的开符,于是又补一对:"你好 末尾打 " 得 "你好""、“文字 末尾打 “ 得 “文字“”(后者是 onInput 里的中文自动补闭符又补了一次)。改为按未闭合**判定(对称引号看奇偶、非对称看开符多于闭符),命中就只插一个字符;「框住 + 打引号」同一套判定跟进(keydown 与 beforeinput 两条路都改),不再变成 ""abc"。假 DOM 用例从 36 增到 42,五支测试全绿
  • 0.9.1(2026-10-20):修框住之后的光标落点——用符号把选区框起来后,光标原来停在闭符之前(回选到内层内容),现在落在闭符之后,接着打字就接在 "内容" 后面;正常打一对引号/括号那条路不变,光标仍在成对符号中间。落点按「选区后面的剩余文本长度」反推,多行/单行都验过(真机:"AAA\nBBB\nCCC" 后打 X 得 "AAA\nBBB\nCCC"X)
  • 0.9.0(2026-10-20):三件事。① 配对守卫扩到整个成对家族(( [ { ( 【 「 《 “ ‘ " '),光标前是其中任意一个时只插一个字符、不补对——修掉括号类同样的「多出一个」;② 多行选区不再被压成一行:真机实测 Lexical 只认 paste 通道,原来的 insertText 会把 AAA\nBBB\nCCC 清成 \n\n,现在合成 ClipboardEvent 走粘贴,三行原样保留(选区仍还原到内层内容);③ 弹层顶部那行「据对话推断 · java」整行删除,改成右下角一块语言水印:只写语言名(java、java · python),斜排、透明当底纹,角度随语言种数增长(1→14°、2→26°、3→38°、封顶 45°),不吃点击、无语言时不渲染
  • 0.8.1(2026-10-20):修中文引号重复——光标前已经是引号(半角 " ' 反引号,以及中文标点的 “”‘’「」『』)时,再打引号只插一个字符,不再补成一对(本人报的「有前引号时再打引号出两个」「中文模式打引号变成多个」两条同源)。连带收益:``` 围栏现在能直接连打三下,不再被配对吞掉一个。三条行为测试钉住,并做过反向对照(去掉守卫即变红)
  • 0.8.0(2026-10-19):改名「更便捷的输入框」,包名 dsh-composer-ease。上下文候选改为只读对话正文区(宿主的 [data-conversation-scroll] 与 [data-slot="conversation.chat.node"]):左侧栏、设置面板里的词不再进补全池子,也不再自我喂养已经画出来的候选;弹层顶上新增依据行(据对话推断 · java / 本文围栏 · python / 历史习惯 · javascript),让「凭什么给这张词表」看得见;回车发送时同步收掉弹层与灰字
  • 0.7.1(2026-10-16):碎片前缀整条候选清零(不只词典源:文件/模型/词表全不给),客户端消费 wordGate 后连弹层都不开;碰撞测试改为断言整条为空
  • 0.7.0(2026-10-16):中文补全改用词典判定完整词义(lib/cjk-lexicon.js,jieba MIT 的常用词子集):前缀必须是词表里的词或更长词的前缀,碎片(如「档管」)一律不提示;n-gram 只留给草稿/上下文兜底。新增碰撞测试(文档/档管/单字三种输入)
  • 0.6.3(2026-10-16):中文补全至少要 2 个字且必须是更长词的前缀才提示,单字不再弹(本人:要符合完整词义)
  • 0.6.2(2026-10-16):粘贴(Ctrl+V)立刻收起弹层与灰字、不为粘贴内容补全;插件被装两份时复用同一弹层/灰字元素(原来两套实例各画一个,出现「一个在输入框左上、一个在光标后」的双弹层)
  • 0.6.1(2026-10-16):IME 合成期间不补全——打拼音时(如 ye)不再被 JS 关键字 yield 抢, 弹层与行内灰字一起收起,上屏后再按中文内容重新判一次(本人 2026-10-16 报的「后面显示 eld」)
  • 0.6.0(2026-10-16):① 中文词补全——草稿/上下文里的汉字词按二元·三元组拆开后参与前缀匹配(中文没有空格分词; 长句尾巴按 1~4 字后缀各试一次),写过「文档」后面打「文」就能提示;触发条件也认汉字; ② 引号成串修复——补上 VS Code 的引号规则(前一个字符是同引号时只插一个),并按「一次按键只认最后一次」 守住延后的光标复位、按住键的自动重复不再配对、apply 加单例防止重复挂载(重复挂载会让一次按键执行两遍)
  • 0.5.0(2026-10-16):① 上下文关联——新增「上下文候选」(把页面上可见的对话文本里的标识符按前缀补出来,类型标「上下文」)与「语言推断」(没写围栏时按 def/import/.py、
    、const/await 这些线索猜语言,再退到习惯);② 行内排版照 VS Code:左边类型图标、中间标签(命中加粗)、右边淡类型词,类型不再跑到前面
  • 0.4.3(2026-10-16):修引号手感——① 光标右边紧跟文字时只插一个开符(在已有文字前打前引号不再被补成一对);② 右边已经是同一个引号时跳过而不是再套一对;③ 插入后光标立刻摆到中间(原来只延后一拍,快速连打两个引号会看不到右边已有闭符、再插一对),延后那一拍改成按绝对位置复位(不然会把光标挪到开符之前)
  • 0.4.2(2026-10-16):lib/fuzzy.js 顶部原样补回上游逐字的版权与许可头(MIT 要求保留声明,之前被我自己的出处说明顶掉了); 合规闸加一条判据盯死它。排序实现仍直接用上游那份(MIT 合规,不存在侵权,无需另写一套)
  • 0.4.1(2026-10-16):加合规自检闸 test/compliance.mjs(8 项:署名/出处/许可证原文/出处头/零依赖/无密钥/版本一致/登记表条例),挂进 npm test;仓公开前先跑它
  • 0.4.0(2026-10-16):排序换成 VS Code 的 fuzzyScore(lib/fuzzy.js 逐字取自 microsoft/vscode,MIT):前缀/词边界/驼峰/连续加分、间隔与分散扣分;列表按它的样子重画(命中字符加粗、右侧一个淡类型词),并去掉「本文出现 N 次」这类啰嗦标注
  • 0.3.0(2026-10-16):框选 + 打符号修复(Shift 组合键不再被挡、全角/中文输入法改走 beforeinput);新增行内灰字提示(首位候选的后缀贴在光标后);新增语言习惯(没写围栏时按你实际用过的语言上词表)
  • 0.2.3(2026-10-16):补全角/中文成对符(( 【 「 《 “ ‘,中文输入法下走 input 事件补配对);补全弹层改成贴光标定位(优先下方、放不下才翻上方 6px、宽度固定、高度封顶可滚、列表没变不重画)
  • 0.2.2(2026-10-16):回车不再被弹层吃掉;接受候选后弹层不再自动复开;文件候选改「路径段前缀」匹配;文件索引与模型 id 加 20s 缓存
  • 0.2.1(2026-10-16):修 Lexical 选区(改显式 Range)与捕获阶段时序(选区调整推一拍);环绕选区后选区还原到内层
  • 0.2.0(2026-10-16):新增本文词补全、语言词表(HTML/JS/Python/Java/CSS)、打两个字符自动弹、围栏语言提示
  • 0.1.0(2026-10-15):首版——自动配对、环绕选区、跳闭合、删空对、Ctrl+Space 弹层(文件与模型名)

来源与许可

  • 交互设计参照 Visual Studio Code(MIT,microsoft/vscode):word-boundary 抑制、surround、type-over closer、删除空对、 word based suggestions 的排序口径——未复制其源码,只对齐行为语义
  • 词表数据借用自 monaco-editor、codemirror/lang-html、codemirror/lang-css、MDN browser-compat-data, 每条都在 THIRD-PARTY.md 里写明了仓库、commit、取用文件与许可证原文;抽取是静态的,运行时不依赖这些项目
  • 本插件自身:MIT(见 LICENSE)

English README

Comments

Loading…

From the same category

dsh-TUI

by ccch1mneyyy

DSH 官方公众号收录的 TUI 补位插件:Claude Code 风,鲸鱼顶栏/实时状态/流式思考/双击 Esc 回滚/上下文进度+TPS。npm 一键装。 DSH official WeChat featured TUI plugin — Claude Code style: whale bar, live status, streaming thoughts, double-Esc rol

Terminal & ClientsManifest valid

★ 5k

↓ 10.4k/wk

MIT

TypeScript

Oct 21, 2026

dsh plugin --profile terminal add @deepseek-harness-tui/dsh-tui

by strukto-ai

The World's First Virtual Terminal for AI Agents

Terminal & ClientsManifest valid

★ 3.7k

↓ 152/wk

Apache-2.0

TypeScript

Oct 21, 2026

dsh plugin --profile agent add @struktoai/mirage-dsh

by bowenliang123

The best DeepSeek Harness plugin for context insight and management, with context dashboard / browser / sidebar and context command, for context statistics, composition, breakdown, evolution details,

Tools & CapabilitiesUI & ExperienceTerminal & ClientsManifest valid

★ 2.7k

↓ 43.4k/wk

Apache-2.0

TypeScript

Oct 21, 2026

dsh plugin --profile web add dsh-context

by huiliyi37

官方 DeepSeek Harness 的交互式终端 UI 插件:自研 ANSI 极简交互渲染、流式 Markdown/工具卡、16+ 主题、slash 命令与选择器、输入历史与本地偏好持久化、LSP 诊断、memory记忆,很丝滑的开发体验。

Terminal & ClientsManifest valid

★ 288

↓ 274/wk

Apache-2.0

TypeScript

Sep 30, 2026

dsh plugin --profile terminal add @huiliyi37/dsh-tianshu-tui

by c3cvld7aag

富江DSH完美破甲|富江破甲 DSH 本地插件,内置提示词规则,支持 Windows 一键安装、环境自动准备与一键卸载,全中文使用说明。

Terminal & ClientsManifest valid

★ 222

JavaScript

Oct 3, 2026

dsh plugin --profile web add fujiang-armor

by Hilbert-beinghappy

面向 DeepSeek Harness 的 Claude Code 风格终端界面,支持 Windows、macOS 与 Linux,兼容透明终端、VS Code 主题和自定义配色。

Terminal & ClientsManifest valid

★ 196

↓ 108/wk

MIT

TypeScript

Oct 13, 2026

dsh plugin --profile web add seektty