dsh-composer-autopair:DSH 聊天输入框括号与引号自动配对

前言

在 DSH(DeepSeek Harness)里写提示词、贴代码片段或 JSON 时,括号、方括号、引号成对出现是常态。编辑器本身未必会像 IDE 那样自动补全右半边并把光标留在中间;手动补符号、再挪光标,在频繁对话场景里会反复打断思路。社区插件 dsh-composer-autopair(维护者 lov0vo)专门作用于 DSH 聊天输入框([data-composer-input]),在输入左半边符号时自动补上右半边,并把光标停在两者之间;同时处理退格删空对、选中文字包裹、中文输入法提交等边界。下面介绍它的能力、安装方式与使用注意。

这是什么

dsh-composer-autopair 是 DSH 的客户端插件(dsh.client + dsh.bundle.patch),当前包版本 0.5.1(MIT)。分类上属于客户端侧增强,不改动服务端逻辑。

一句话定位:在 DeepSeek Harness 聊天 composer 里,对半角与全角共 17 组括号、引号做自动配对;设置页输入框、终端、右侧栏编辑器、文件树不在作用范围内。输入法正在组字(composition)期间插件不干预。

核心功能

自动配对与光标

输入左半边符号时,自动插入对应右半边,光标落在两个符号中间。配对表如下(资料原文):

( )   [ ]   { }   " "   ' '   ` `
( )  [ ]  { }  【 】  《 》  〈 〉  「 」  『 』  〔 〕  “ ”  ‘ ’

常见交互(README 行为表)

场景 行为
光标已在 () 中间再按一次 ) 越过右半边,不会变成 ())
光标在空引号 “” 中间再按引号 再嵌一对 → ““””(适配中文输入法只给右引号 ” 的情况)
引号内已有内容,再按引号收尾 越过右引号,正常收尾
选中文字后按 ( 变为 (选中文字),并保持原文选中
在 () 中间按退格 左右半边一起删除
中文输入法提交 ( 同样补右半边 )
输入法提交右半边 ) 且右侧已有 ) 越过,不会变成 ())

实现要点(便于排查)

插件在 document capture 阶段监听 beforeinput,主要走 Lexical 模型层(从 [data-composer-input].__lexicalEditor 取实例);拿不到编辑器或选区含 @ 引用 chip 等装饰节点时,回退 DOM 兜底。不含 / 斜杠命令与 @ 引用能力——那是 DSH 自带行为,插件不覆盖。

安装与启用

仓库已带构建产物 lib/client.js。官方 README 给出的安装流程是克隆仓库后执行 deploy.mjs(构建 + 安装,并自动选择 Loader 挂载方式):

git clone https://github.com/lov0vo/dsh-composer-autopair
cd dsh-composer-autopair

node deploy.mjs            # 构建 + 安装(自动选择挂载方式)
node deploy.mjs --check    # 只看会做什么,不写盘
node deploy.mjs --remove   # 卸载(可逆)

deploy.mjs 会:由 src/autopair.mjs 生成 lib/client.js;把包复制到 <DSH_HOME>/plugins/dsh-composer-autopair/ 与 profile 的 node_modules;在 profile 的 package.json 登记 file: 依赖;并按 profile 是否已在 dsh.profile.bundles 登记本包,在 bundle 路线与 user-patch 路线之间二选一挂载 Loader 条目(两条都插会导致 composer-autopair id 重复,dshmarket 静态检查可能回滚整次更新)。

环境变量:DSH_HOME(默认 ~/.dsh)、DSH_PROFILE_DIR(默认 $DSH_HOME/profiles/desktop)。

  • bundle 路线(profile 已登记本包):需重启 DSH 后 bundle 列表生效。
  • user-patch 路线(profile 未登记本包):若 profile 声明 patchReload: live,插入托管块后可热生效。

安装前请自行阅读仓库源码与 MIT 许可证;客户端插件在当前 DSH 桌面进程内运行,与宿主同权限,仅安装未审计的第三方包时需自行评估风险。

典型用法与开关

临时关闭(无需卸载)

在 DevTools 控制台:

__dshComposerAutoPair.setEnabled(false);   // 关
__dshComposerAutoPair.setEnabled(true);    // 开
localStorage.setItem('dsh-composer-autopair:enabled', 'off');  // 重启后仍然关

自检与诊断

插件约每 3 秒向 localStorage 写入自检报告。常用键:dsh-composer-autopair-report(能力、统计、日志、事件 trace)、dsh-composer-autopair:probe(装载探针)、dsh-composer-autopair:error、dsh-composer-autopair:enabled(on / off)。

从磁盘读取报告(默认 DSH 桌面端 Local Storage 路径):

node tools/read-report.mjs
node tools/read-report.mjs "<leveldb 目录>"

正常情况统计里 viaEditor 应增长、viaDom 为 0;imeNotSettled 持续大于 0 可能表示 DSH 输入链路与插件假设不一致。LevelDB 落盘有延迟,刚操作完可等 1~2 分钟再读,或在控制台执行 JSON.parse(localStorage['dsh-composer-autopair-report'])。

装好后若 caps.composerReady 为 true,说明聊天输入框锚点对齐;依赖 Lexical 内部字段,DSH 升级后若失效,报告中的 caps.lexicalEditor / caps.editorError 可辅助判断,并会退回 DOM 兜底。

适用场景与注意

适合谁:长期在 DSH 聊天框里写代码块、结构化提示、带中文标点对话的用户,希望括号引号行为接近常见编辑器自动配对习惯。

边界(README 已知限制):

  • 仅聊天输入框;组字期间不处理。
  • 依赖 Lexical 若干内部 API,大版本升级后可能需等待插件更新。
  • 在 DSH 桌面端 profile desktop(Windows)有实测记录;其他使用同一套 Lexical composer 的版本理论上适用,以自检报告为准。

DSH 生态强调「一切皆插件」;社区目录 SkillHub 插件页 为独立站点,与 DeepSeek / 幻方无官方从属关系,安装来源以你信任的目录或 GitHub 仓库为准。

结尾

dsh-composer-autopair 把 IDE 里常见的括号、引号自动配对搬到 DSH 聊天 composer,并单独处理了中文输入法与空引号嵌套等细节。若你已在用 DSH 写提示词,可按 README 执行 node deploy.mjs 安装,用 node deploy.mjs --check 预览变更,用报告脚本或 localStorage 确认是否生效。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye