dsh-composer-autopair

DSH PLUGIN会话与消息

仓库 lov0vo/dsh-composer-autopair

会话与消息 未标注验证等级 安全审查:未标注 可信度:未标注 可安装插件

为 DeepSeek Harness 聊天输入框提供括号与引号自动配对:打左半边自动补右半边,光标停在中间,支持全角半角与中文输入法。

一句话选型结论

按资料字段整理

dsh-composer-autopair 是会话与消息类的 DSH 可安装插件,未做沙盒验证,暂无安全审查结论,列出 5 项功能,没有现成安装命令,需要按仓库 README 接入。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类会话与消息 收录类型可安装插件 验证等级未标注验证等级 安全审查未标注
验证等级 UNKNOWN 未标注验证等级
GitHub 星标 0 复刻 0 · 未关闭 issue 0
最近更新 2026-10-05 创建于 2026-10-05
README 10.4 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

5 项功能
字段来自项目仓库与公开索引,中文说明由本站标注

dsh-composer-autopair:DeepSeek Harness 聊天输入框的符号自动配对插件

  • 17 组半角全角符号自动配对
  • 光标居中,退格成对删除
  • 选中文字自动包裹
  • 兼容中文输入法提交
  • 可热插拔并随时开关

上游标签

autopairdeepseek-harnessdshdsh-pluginlexicalplugin

验证等级与安全审查

未标注验证等级
自动化流程结论,不是人工审核
验证等级未标注验证等级上游未给出验证结论,安装前请自行确认
安全审查未标注静态分析结论,未标注不代表已通过审查
仓库健康度未标注按仓库活跃度与最近更新时间给出
可信度未标注综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 列出了 5 项功能,能直接看出它解决什么问题。

先想清楚的地方

  • 安全审查还没结论,装之前先看仓库改了什么、要什么权限。
  • 没有现成安装命令,要按仓库 README 手动接入。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在会话与消息场景里给 DSH 补能力的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-composer-autopair当前 未做沙盒验证 未标注 0 未标注 无
dsh-desktop L3 · 安装规范通过 低风险 3.0 万 未标注 无
openpets L4 · 沙盒安装通过 低风险 1,274 未标注 有
deeptide L4 · 沙盒安装通过 低风险 1,104 0.1.1-rc.2 有
jingyun-dsh L3 · 安装规范通过 低风险 1,004 未标注 有
study-mate 未做沙盒验证 未标注 856 未标注 无

仓库档案

会话与消息
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方lov0vo仓库 dsh-composer-autopair · 默认分支 main
分类会话与消息client
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言JavaScript仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 0 / 0收录时的数值,非实时
创建 / 更新2026-10-05 · 2026-10-05最后推送 2026-10-05
本站收录2026-10-05首次进入本站目录的时间

README 全文

10.4 KB
作者原文,中文版优先;只做安全转义,不改内容

dsh-composer-autopair

> DSH(DeepSeek Harness)聊天输入框的括号 / 引号自动配对插件:打左半边自动补右半边,光标停在中间。

English | 中文

能做什么

你输入 结果
( ( “ 【 《 「 『 〔 … 自动补上对应右半边,光标落在两个符号中间
光标在 () 中间再按一次 ) 越过右半边,不会变成 ())
光标在一对空引号 “” 中间再按引号键 再嵌一对 → ““””(中文输入法这时只会给右引号 ”)
引号里已经有内容,再按引号键收尾 越过右引号(正常收尾,不会多嵌一对)
选中一段文字后按 ( 变成 (选中文字),并把原文重新选中
在 () 中间按一次退格 两个一起删掉
中文输入法直接提交 ( 同样补上右半边
输入法手动提交右半边 )、而右边已经有 ) 越过它,不会变成 ())
DSH 问答卡片里的输入框(AskUserQuestion 那种 ``) 上面这些行为全都一样生效

配对表(17 组,半角 + 全角):

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

不管的事:设置页的输入框、终端、右侧栏编辑器、文件树一律不碰;输入法正在组字(composition)时不插手。

问答卡片的输入框是个普通 `(不是 Lexical),插件靠「旁边有aria-hidden镜像 div」或「类名带fieldInput」认出它;本机还有别的 textarea 想纳入时,往 localStorage 的dsh-composer-autopair:textareas` 里写逗号分隔的选择器即可。

安装

插件是一个标准的 DSH 客户端插件包(dsh.client + dsh.bundle.patch),仓库里已带构建产物 lib/client.js。

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 具体做四件事:

  1. 由 src/autopair.mjs 生成 lib/client.js;
  2. 把包复制到 /plugins/dsh-composer-autopair/(稳定副本)和
    /profiles/desktop/node_modules/dsh-composer-autopair/;
  3. 在 profile 的 package.json 里登记 file: 依赖,指向稳定副本而不是仓库目录 ——
    仓库换位置时旧写法会变成悬空依赖,被 pnpm install 顺手清掉,插件从此静默失效;
  4. 挂 Loader 条目,按 profile 现状二选一:
profile 的 dsh.profile.bundles 做法 生效方式
已登记本包(dshmarket 装的,或手动加过) 走 bundle 路线:包自带的 cordis.patch.yml 会插入条目,deploy 只把 user-patch 里的托管块清掉 需要重启 DSH(bundle 列表只在宿主启动时读)
没有本包 走 user-patch 路线:在 profile 的 cordis.patch.yml 末尾插入托管块 该 profile 声明 patchReload: live 时插上即生效,不用重启

托管块长这样:

- insert:
- id: composer-autopair
name: dsh-composer-autopair

为什么必须二选一:两条都插会让 composer-autopair 这个 id 出现 2 行,
dshmarket 在安装 / 更新插件后做的「组合能否启动」静态检查会判成重复条目,
然后自动回滚整次更新。(本机真实 loader 是 1.0.5,重复其实只是「后层覆盖前层」;
但 dshmarket 是从 profile 的 pnpm-lock.yaml 读 loader 版本的,那里读不到这个包,
于是保守判成致命。)

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

开关

不用卸载就能临时关掉:

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

诊断与自检

插件每 3 秒写一份自检报告到 localStorage,不需要开 DevTools 也能从磁盘读:

键 内容
dsh-composer-autopair-report caps(是否取到编辑器实例、模型层最近一次异常)、stats(各类计数)、log(最近 12 条动作)、trace(最近 24 条事件流水,用来还原「这一次按键到底发生了什么」)
dsh-composer-autopair:probe 装载探针:能读到就说明插件真的跑起来了
dsh-composer-autopair:error 装载 / 模型层异常
dsh-composer-autopair:enabled on / off
node tools/read-report.mjs                  # 默认读 DSH 桌面端的 Local Storage
node tools/read-report.mjs ""  # 自定义路径

stats 里几个关键计数:

  • viaEditor / viaDom:走「Lexical 模型层」还是走「DOM 兜底路径」。正常情况 viaEditor 增长、viaDom 为 0;
  • nested:在空引号里再嵌一对的次数;
  • imeCommits / imePaired / imeSkippedCloser / imeDuplicate:输入法路径的四个分支;
  • imeNotSettled:输入法提交后模型迟迟没吸收、插件主动放弃的次数。正常应该是 0;
    它持续增长说明 DSH 的输入链路变了,此时报告里的 trace 能看出卡在哪一步。

> LevelDB 落盘有延迟:DSH 窗口不在前台时,Chromium 会把定时器压到约 60 秒一次、落盘也慢。
> 刚改完代码或刚操作完立刻读,可能读到上一版;等 1~2 分钟再看。压缩进 .ldb 之后读不出明文,
> 这时用 DevTools 控制台:JSON.parse(localStorage['dsh-composer-autopair-report'])。

它是怎么实现的

  1. 拦 beforeinput(document capture),不拦 keydown:中文输入法把 ( 提交成 ( 时,
    keydown 往往是 Process/keyCode 229;而不管走哪条路,最后都会有一次 beforeinput。
  2. 动作在 Lexical 模型层完成:从 [data-composer-input].__lexicalEditor 取到编辑器实例,
    在 editor.update() 里用 pending selection 的 insertText() 插入、用 Point.set() + dirty 摆光标。
    插入与光标在同一次 update 内原子完成,模型选区与 DOM 不会脱节 ——
    这是「光标一定在中间 / 中间的删除键能用 / 选中文字会被包起来」的前提。
  3. DOM 路径只作兜底:拿不到编辑器实例(或选区里有 @ 引用 chip 这类装饰节点)时,
    回退到 document.execCommand('insertText') + Selection.modify()。
  4. 输入法路径单独处理:compositionend 到达时 Lexical 往往还没把这次提交写进模型,
    所以这里轮询模型(最多 12 帧)等它落位,再做判断:刚提交的是左半边还是右半边;
    「我自己补的右半边」用一条带指纹的记录(文本节点 key + 光标位置 + 左右半边 + 时间)来识别,
    避免重复的 compositionend 多补一个,也不会把「删掉整对后在原地重打」误判成重复提交。
    等不到就什么都不做(记 imeNotSettled),绝不删输入法刚提交的字符。
  5. 引号单独一条规则:中文输入法在已开引号后只会给右引号,所以「空的一对中间」要再嵌一对,
    而「已有内容」时仍然是跳过收尾。提交上来的右引号若左边没有任何没收尾的左引号
    (光标停在一对已有内容的引号之后就是这样),就把它改写成一对 —— 引号永远成对。括号不受影响。
  6. 幂等 + 可卸载:installAutoPair 会先 dispose() 上一份;插件入口用 ctx.effect
    登记清理,停用 / 热重载时监听会被摘掉。

已知边界

  • 依赖 Lexical 的几个内部字段:__lexicalEditor、_pendingEditorState._selection、
    TextNode.setTextContent()、Point.set()。DSH 升级 Lexical 后可能失效 ——
    报告里的 caps.lexicalEditor / caps.editorError 能直接看出来;失效时会自动退回 DOM 兜底路径。
  • 只作用于聊天输入框([data-composer-input])。
  • 不含 / 斜杠命令与 @ 引用(那是 DSH 自带的能力,不去抢)。
  • 组字(composition)期间不干预。

开发

src/autopair.mjs        唯一真源:配对表、纯逻辑、Lexical 适配、插件入口 apply(ctx)
src/autopair.test.mjs   单测(72 个用例:纯逻辑 + 迷你 DOM 全链路 + 假 Lexical 模型层 + 假 textarea)
src/deploy.test.mjs     安装器单测(8 个用例:块摘除 / 路线选择 / 两条路线 / --check / 卸载)
build.mjs               由 src 生成 lib/client.js(DSH 客户端 bundle 形状)
deploy.mjs              安装 / 卸载(自动选择 Loader 挂载方式)
tools/read-report.mjs   从磁盘读诊断报告
lib/index.js            宿主半侧(no-op,只为让 Loader 挂载本包)
lib/client.js           构建产物,勿手改
cordis.patch.yml        bundle 式安装用的 Loader 条目声明
node --test src/autopair.test.mjs src/deploy.test.mjs   # 跑单测(80 个)
node build.mjs                      # 生成 lib/client.js
node deploy.mjs                     # 装进 profile

改配对表:编辑 src/autopair.mjs 的 DEFAULT_PAIRS,然后 node build.mjs && node deploy.mjs。

兼容性

在 DSH 桌面端(profile desktop,Windows)实测;凡是聊天输入框用同一套 Lexical 编辑器的
DSH 版本理论上都适用。装好后报告里的 caps.composerReady 为 true 才说明锚点对得上。

更新日志

每个版本的改动、根因和取舍都记在 CHANGELOG.md(中文为主,标题带英文摘要);
带说明的正式发布见 Releases。

最近几版:

版本 内部修订 一句话
0.5.3 v8 输入法包裹选区不再比对会被 Lexical 重建的节点身份(0.5.2 在真实编辑器里没生效)
0.5.2 v7 中文输入法选中文字再按符号,包住原文而不是替换掉
0.5.1 v6 修 0.5.0 回归:读不到模型光标时不再「什么都不补」
0.5.0 v5 中文输入法下引号每次都要成对
0.4.1 v4 同一个 loader id 不再挂两层(bundle 与 user-patch 二选一)

许可

MIT

常见问题

7 问
答案由本站依据条目字段整理,不引用上游原文
dsh-composer-autopair 怎么安装?

本站没有抓到该条目的安装命令,请到仓库主页确认安装方式;这类条目多数是生态应用或尚未发布安装包的项目。

dsh-composer-autopair 的验证等级是什么意思?

未标注验证等级。上游未给出验证结论,安装前请自行确认

dsh-composer-autopair 安全吗?

未标注。

dsh-composer-autopair 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-composer-autopair 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

dsh-composer-autopair 有哪些功能?

17 组半角全角符号自动配对、光标居中,退格成对删除、选中文字自动包裹、兼容中文输入法提交、可热插拔并随时开关。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

会话与消息
按星标排序,可作替代方案

dsh-desktop

dsh-desktop

为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。

L3 · 安装规范通过 3.0 万 星

openpets

openpets

L4 · 沙盒安装通过 1,274 星

deeptide

deeptide

L4 · 沙盒安装通过 1,104 星

jingyun-dsh

jingyun-dsh

井云 DSH 客户端插件,为 DeepSeek Harness 注入会员登录、订阅支付、算力管控与应用市场,让智能体和技能快速变成可交易商品

L3 · 安装规范通过 1,004 星

study-mate

study-mate

StudyMate 是 DSH 的「学习模式」预设与技能包,为数学、计算机科目定制学习路线、讲解课件与练习评估,跨科目共享记忆。

未标注验证等级 856 星

lov0vo 的其它插件

1 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。