Repository navigation
Releases
v0.3.0 — 按钮位置可自定义(9 个位置任选)
输入框按钮管家 v0.3.0
给 DSH 输入框工具栏装一个「总开关面板」:把用不上的按钮收起来,并且让这个面板按钮自己出现在你想让它出现的任何位置。
面向 DSH Web GUI 用户。解决的问题是:插件一多,输入框被挤成一条缝;更糟的是工具栏那一整行在窄窗口 / 首页态下会被官方不渲染,连管理入口都找不到。
本版新增(v0.3.0)
1. 按钮位置可自定义(9 选 N)
面板顶部新增「按钮显示位置(可多选,勾上即出现)」:
| # | 位置 | 槽位 | 什么时候真的看得见 |
|---|---|---|---|
| 1 | 输入框底部工具行 | conversation.composer.dock |
已打开会话(默认) |
| 2 | 输入框左侧 | conversation.input.left |
已打开会话 |
| 3 | 输入框右侧 | conversation.input.right |
已打开会话;活动区展开时被官方隐藏 |
| 4 | 输入卡片左上浮层 | conversation.input.overlay |
已打开会话 |
| 5 | 输入框上方排队区 | conversation.input.dock |
有排队/附件才出现 |
| 6 | 会话标题右侧 | conversation.session.header.actions |
有会话即显示 |
| 7 | 会话头部工具区 | conversation.session.header.utilities |
有会话即显示 |
| 8 | 侧栏最底部 | sidebar.footer.action |
常驻,不依赖会话 |
| 9 | 右下角悬浮球 | shell.overlay |
任何时刻都在(默认不勾) |
- 可同时勾多个,勾完即时生效并落盘(localStorage +
state.json); - 默认只勾第 1 个,升级后行为不变;
- 设置页与侧栏「更多」这两个入口固定保留,不会被关掉(防自锁)。
2. 修复 state.json 并发写坏
hidden 与 anchors 变更会各自触发一次 POST /state,两次 fs.writeFile 交错写入会让文件末尾出现重复段、整个 JSON 解析失败,表现为插件读不回配置。现改为同路径 Promise 串行 + 临时文件 rename 原子写,12 个并发 POST 压测后文件仍完整。
3. 修复诊断快照的瞬时误读
位置变更后立即采集 DOM 会拍到「状态已删、React 还没卸载按钮」的中间态,容易被误判成门控失效。上报已延后一个宏任务。
从 v0.1.0 升上来还包含(v0.2.0 / v0.2.1)
| 版本 | 变化 |
|---|---|
| v0.2.1 | 侧栏「更多」菜单入口从最底部改到第一行(order: 40 → -100);修复插件详情页配置区空白(引用未定义的 ButlerPluginConfig,抛 ReferenceError 被官方错误边界吞掉) |
| v0.2.0 | 入口从 1 个变 3 个:工具栏 ⋯ + 设置页分区 + 侧栏「更多」菜单行;新增 commitHidden() 统一提交出口 |
三步安装
- 解压 zip,把
dsh-composer-butler-v0.3.0整个目录放到
C:\Users\<你的用户名>\.dsh\profiles\desktop\node_modules\@lanbaolu\dsh-composer-butler
(@lanbaolu目录不存在就新建)。 - 编辑
C:\Users\<你的用户名>\.dsh\profiles\desktop\package.json,两处各加一行:dependencies里加"@lanbaolu/dsh-composer-butler": "file:./node_modules/@lanbaolu/dsh-composer-butler"dsh.profile.bundles数组末尾加"@lanbaolu/dsh-composer-butler"
- 重启 DSH,然后 Ctrl+F5 强刷页面。
装完点输入框工具栏里的 ⋯(或 设置 → 输入框按钮管家,或侧栏「更多」第一行)。
本机若装有 dsh-super-injector,也可以直接注入:注入器会替你完成第 1、2 步。
配置路径
| 内容 | 路径 |
|---|---|
| 运行期状态(隐藏清单 + 位置清单) | <包根>\state.json |
| 侦察快照(诊断用) | <包根>\scan.json |
| 预留规则表 | <包根>\rules.json |
| 浏览器本地副本 | composer-butler.hidden.v1 / composer-butler.anchors.v1 |
| 自定义数据目录 | cordis.patch.yml 的 config.dataDir(绝对路径) |
这三个 json 都不会进仓库(.gitignore 已排除),删掉等于恢复默认。
版本历史
| 版本 | 日期 | 一句话 |
|---|---|---|
| v0.3.0 | 2026-11-11 | 按钮位置可自定义(9 选 N)+ 悬浮球;修复 state.json 并发写坏 |
| v0.2.1 | 2026-11-10 | 侧栏「更多」入口排到第一行;修复插件详情页配置区空白 |
| v0.2.0 | 2026-11-10 | 入口从 1 个变 3 个 |
| v0.1.0 | 2026-11-01 | 首个可用版本:⋯ + 显隐面板 + 持久化 + 自愈 + 防自锁 + 重复标记 |
已知限制
- 只隐藏界面,不卸载。被隐藏的控件仍在后台运行;要真正停用请用侧栏「插件」页的开关。
- 位置只能从 9 个 list 型插槽里选。官方 80 个 slot 声明中,
single型已被官方占用(如conversation.input.permission= 完全权限),重复注册会抛slot "..." is single。 - 勾了某个位置也可能暂时看不到——是那个位置自身没渲染(如排队区要有排队消息、输入框右侧在活动区展开时被隐藏),面板灰字已标注条件。
- 依赖官方 DOM 结构。官方若给 slot 子元素加包裹层,隐藏机制会失效。
- 状态不跨机器同步。本机 + 本浏览器。
- 升级后必须 Ctrl+F5,浏览器不会自动换掉旧模块。
- 隐藏范围限于
conversation.input.*下的直接子元素;侧栏、消息区不在范围内。
链接
- 仓库:https://github.com/duma520/dsh-composer-butler
- 完整文档:README.md(1400+ 行,含零基础安装、逐项图解、配置文件逐字段、排错手册、18 条 FAQ)
- 逐版变更:软件升级迭代记录.md
许可:BSD-3-Clause。
v0.1.0 — 输入框按键管家首发
这是什么
输入框按键管家(dsh-composer-butler)—— DSH 输入框工具栏的显隐总开关。
DSH 里插件一多,输入框周围就会挂满小按钮。这个插件在输入框右侧加一个「⋯」按钮,点开是一个清单:哪些控件可以收起来、当前哪些是显示的,一目了然。勾掉即从界面消失,勾上即回来,选择会自动记住。
亮点
- 逐项开关:4 个方向之外的每个控件都能单独隐藏,不是一刀切
- 零构建:纯 JS 手写 bundle,clone 下来就能跑,不需要
npm install - 双写持久化:
localStorage即时生效 + 服务端state.json落盘,换浏览器能补回 - 自愈:切会话、热重载导致 DOM 重建后,
MutationObserver(60ms 节流)自动重新套用隐藏 - 防自锁:管家按钮永远不会出现在自己的清单里,不会出现「关掉自己再也打不开」
- 重复提示:两个插件提供同名按钮时打「重复」徽章,提醒你留一个
- 零隐私负担:不联网、不收集数据,运行期文件全部在
.gitignore里
安装(30 秒)
- 下载下方的
dsh-composer-butler-v0.1.0.zip并解压 - 把
dsh-composer-butler整个目录放到:
%USERPROFILE%\.dsh\profiles\desktop\node_modules\@lanbaolu\ - 编辑同目录上一级的
package.json,两处都要加:"dependencies"加"@lanbaolu/dsh-composer-butler": "0.1.0""bundles"数组加"@lanbaolu/dsh-composer-butler"
- 完全退出 DSH 并重新启动
- 浏览器里
Ctrl+F5强制刷新
看到输入框右侧的「⋯」就成功了。详细步骤(含三种装法、验证方法、卸载、急救)见包内 README.md。
用法
点「⋯」→ 清单里勾上 = 显示,勾掉 = 隐藏。
| 按钮 | 作用 |
|---|---|
| 重新扫描 | 重扫 DOM,刷新清单(刚装了新插件时用) |
| 全部恢复 | 清空隐藏清单,全部显示 |
关闭 / 点外部 / Esc |
关面板,不改状态 |
兼容性
- DSH 0.2.x(依赖
conversation.input.*槽位与ctx.slots) - Node.js
^22.19.0 || >=24.0.0 - 浏览器:任意现代浏览器(Chrome / Edge / Firefox)
已知限制(重要)
- 只隐藏,不卸载。被隐藏的插件仍在后台运行;要彻底停用请用 DSH 侧栏「插件」页的开关。
- 依赖官方 DOM 结构(
data-slot锚点 +display:contents)。官方若改动 Slots 实现,本插件可能失效。 - 控件身份靠可观测特征推断(
aria-label→title→ 文本 → svg → 位置),官方改文案会导致指纹漂移。 - 状态不跨机器同步。
校验
- 插件规范:
npx --yes dsh-plugin-standard@2 . --json→ 0 FAIL(仅 1 条关于无 build/test 脚本的 WARN,纯 JS 零构建插件不适用) - 语法:
node --check lib/index.js、node --check lib/client.js - 仓库不含任何运行期数据与凭据(提交前已扫描关键词与高熵串)
许可
BSD-3-Clause。Copyright (c) 2026, duma520。