Skip to content

Releases

v0.3.0 — 按钮位置可自定义(9 个位置任选)

Choose a tag to compare

@duma520 duma520 released this 10 Nov 16:38

输入框按钮管家 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() 统一提交出口

三步安装

  1. 解压 zip,把 dsh-composer-butler-v0.3.0 整个目录放到
    C:\Users\<你的用户名>\.dsh\profiles\desktop\node_modules\@lanbaolu\dsh-composer-butler
    (@lanbaolu 目录不存在就新建)。
  2. 编辑 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"
  3. 重启 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.* 下的直接子元素;侧栏、消息区不在范围内。

链接

许可:BSD-3-Clause。

v0.1.0 — 输入框按键管家首发

Choose a tag to compare

@duma520 duma520 released this 10 Nov 11:04

这是什么

输入框按键管家(dsh-composer-butler)—— DSH 输入框工具栏的显隐总开关。

DSH 里插件一多,输入框周围就会挂满小按钮。这个插件在输入框右侧加一个「⋯」按钮,点开是一个清单:哪些控件可以收起来、当前哪些是显示的,一目了然。勾掉即从界面消失,勾上即回来,选择会自动记住。

亮点

  • 逐项开关:4 个方向之外的每个控件都能单独隐藏,不是一刀切
  • 零构建:纯 JS 手写 bundle,clone 下来就能跑,不需要 npm install
  • 双写持久化:localStorage 即时生效 + 服务端 state.json 落盘,换浏览器能补回
  • 自愈:切会话、热重载导致 DOM 重建后,MutationObserver(60ms 节流)自动重新套用隐藏
  • 防自锁:管家按钮永远不会出现在自己的清单里,不会出现「关掉自己再也打不开」
  • 重复提示:两个插件提供同名按钮时打「重复」徽章,提醒你留一个
  • 零隐私负担:不联网、不收集数据,运行期文件全部在 .gitignore 里

安装(30 秒)

  1. 下载下方的 dsh-composer-butler-v0.1.0.zip 并解压
  2. 把 dsh-composer-butler 整个目录放到:
    %USERPROFILE%\.dsh\profiles\desktop\node_modules\@lanbaolu\
  3. 编辑同目录上一级的 package.json,两处都要加:
    • "dependencies" 加 "@lanbaolu/dsh-composer-butler": "0.1.0"
    • "bundles" 数组加 "@lanbaolu/dsh-composer-butler"
  4. 完全退出 DSH 并重新启动
  5. 浏览器里 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。