dsh-composer-ux 0.28.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,54 @@
2
2
 
3
3
  本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
4
4
 
5
+ ## [0.29.0] — 2026-10-29(侧边栏**底部区**也能收:整块收成一行「账号与用量」)
6
+
7
+ 用户 2026-10-29(截图圈住左下角「今日消耗金额」卡片 + 下面那行账号):
8
+ 「这个位置的这些按钮也让它能收缩起来,兼容所有在这个部位的按钮」。
9
+ 追问两轮定下:**整个底部区一起收**(插件卡片 + 官方账号/设置行),形态是**一行细条**、点一下展开。
10
+
11
+ **为什么"整块藏"才是最兼容的做法**
12
+
13
+ 这个位置是**插槽拼出来的**:宿主在 `sidebar.footer.action` 与 `sidebar.settings` 两个槽里渲染内容,
14
+ 任何插件都能往里加东西(`@kenz1117/dsh-ui-usage-billing` 的用量卡片就走前一个槽)。这些内容的
15
+ 结构、类名、数量都不可预知,所以:
16
+
17
+ - 我们**不碰任何一个子节点**(不标属性、不改样式、不改文字);
18
+ - 只在外层容器上挂 `data-ux-footer-fold="folded"`,由一条 CSS 收起整块 —— 展开时一切原样,
19
+ 插件自己的按钮、卡片、弹层、事件监听全都没被动过。
20
+
21
+ **怎么找到那个容器**(不认哈希类名):宿主结构是 `aside > [nav, regionArea, footArea]`,
22
+ 所以 **nav 的父节点就是侧边栏根,根的最后一个元素子节点就是 `footArea`**。找不到 nav 时退一步:
23
+ 从账号菜单按钮往上退两层(`footArea > settingsArea > 账号按钮`),只求不崩、不误收整只侧边栏。
24
+
25
+ **设置位置**:输入体验 →「设置面板」卡 →「侧边栏」组 →「底部区」开关(默认**收起**)。
26
+
27
+ **测试**:新增 `test/sidebar-footer.mjs`(18 条:结构定位、整块藏/显、**不碰第三方节点**、幂等、找不到时不介入);
28
+ 变异新增 SZ / TA / TB(认错容器 / 样式丢了 / 细条重复插)。
29
+
30
+ ## [0.28.1] — 2026-10-29(兼容「往这一组里放按钮」的其它插件)
31
+
32
+ 用户 2026-10-29(截图圈住侧边栏那一行图标):「如果有其他插件在这里放按钮会怎么样,需要兼容所有往这里放按钮的插件」。
33
+
34
+ **以前会怎样(两个真问题)**
35
+
36
+ 1. **收成一条时把整只 `<nav>` 藏了**(`display:none`)—— 别的插件往这一组里塞的按钮会**跟着消失**。
37
+ 用户看不到自己的按钮,只会觉得"装了新插件没反应"。
38
+ 2. **只留图标时的选择器写的是 `nav > button`** —— 别人用包装层(div 包按钮)注入的节点压缩不到,
39
+ 而别人**裸按钮**的文字又会被 `font-size:0` 一起压掉(不是我们该管的东西)。
40
+
41
+ **现在怎么做**
42
+
43
+ - 只处理**认得出的面板行**:`nav` 的直接子节点里,**button + 非空 aria-label + 内含 aria-hidden 图标**。
44
+ 宿主自己的 `PanelRow` 与「更多」都长这样;**别的插件通过官方 panel 注册表注册的面板**由宿主渲染成
45
+ 同样的结构,所以天然跟着一起折叠 —— 它们本来就是这组里的入口。
46
+ - 其余节点(别的插件直接注入的按钮、包装层、分隔线……)**一个字都不改**:不加标记、不改宽度/字号/文字;
47
+ 收成一条时它们**原地留着、照样能点**(这时整只 nav 不隐藏,只藏面板行)。
48
+ - 关掉折叠时把标记与行内样式**全部还原**。
49
+
50
+ **测试**:`test/sidebar-nav.mjs` 新增第 6 节(9 条:分类、bar 模式保留别人的节点、icons 模式不碰别人的节点、
51
+ 关掉后摘干净);变异新增 SX / SY 两条(把别人的节点当面板行、有别人的节点仍整体隐藏)。
52
+
5
53
  ## [0.28.0] — 2026-10-28(删掉四栏:微信通知 / 工作区目录选择 / 右键菜单 / OpenCode 请求头)
6
54
 
7
55
  用户 2026-10-28:「我的插件去掉微信通知,去掉工作区目录选择,去掉右键菜单,去掉 open code 请求头」。
package/README.md CHANGED
@@ -114,6 +114,34 @@ dsh plugin --profile web add <你克隆或解压出来的目录>
114
114
  - 单个字母/数字键不允许裸绑定(会与打字冲突);纯修饰键不会触发录制。
115
115
  - 部分 Ctrl/Meta 组合被浏览器占用(如 Ctrl+L、Ctrl+W、Ctrl+J),录制时无法在页面捕获——建议使用 Alt/Shift 组合或 Enter 系键位。
116
116
 
117
+ ## 左侧「全局面板」折叠(0.27.0,0.28.1 起对别的插件友好)
118
+
119
+ 侧边栏最上面那一组(插件 / 自动化任务 / 上下文洞察 / MCP连接器 / 更多)可以折叠,设置 →
120
+ 输入体验 →「设置面板」卡 →「侧边栏」组:
121
+
122
+ | 形态 | 界面 | 说明 |
123
+ |---|---|---|
124
+ | **收成一条**(默认) | 一行「全局面板 ▾」 | 点一下展开成原来那几颗,再点收起 |
125
+ | **只留图标** | 一行图标 | 悬停出名字 |
126
+ | **不折叠** | DSH 原样 | 等于关掉这个功能 |
127
+
128
+ **"打开后默认折叠"是默认行为**:状态记在 `$DSH_HOME/composer-ux-nav-fold.json`,不占宿主设置字段。
129
+
130
+ **别的插件往这里放按钮怎么办(0.28.1)**:只处理**认得出的面板行**(`button` + `aria-label` + 内含
131
+ `aria-hidden` 的图标)。别的插件**通过官方 panel 注册表**注册的入口,宿主会渲染成同样的结构,
132
+ 所以跟着一起折叠;而**直接往 DOM 里塞**的按钮/包装层**一个字都不改**——收成一条时它们原地留着、
133
+ 照样能点(这时只藏面板行,不藏整只 `nav`)。这条有 9 条测试盯着(`test/sidebar-nav.mjs` 第 6 节)。
134
+
135
+ ### 侧边栏底部区(0.29.0)
136
+
137
+ 左下角那一块(账号行 + 插件塞在这里的卡片,比如「今日消耗金额」)也能收:**整块收成一行
138
+ 「账号与用量 ▾」**,点一下展开。设置 → 输入体验 →「设置面板」卡 →「侧边栏」组 →「底部区」(默认收起)。
139
+
140
+ 做法是**整块藏/显**:只在最外层容器挂一个属性,**不碰里面任何一个节点** —— 所以别的插件往这个插槽里
141
+ 放什么都不会被我们改坏(用量卡片就是 `@kenz1117/dsh-ui-usage-billing` 放在 `sidebar.footer.action` 里的)。
142
+ 容器靠结构定位:nav 的父节点是侧边栏根,根的最后一个子节点就是底部区;找不到 nav 时从账号按钮往上退两层。
143
+ 这条有 18 条测试盯着(`test/sidebar-footer.mjs`)。
144
+
117
145
  ## 快捷指令与提示词优化
118
146
 
119
147
  输入框工具行里、「展开」按钮的左侧有一个同款胶囊按钮「快捷指令」(槽位 `conversation.input.right`,order 89 < 官方「展开」的 90)。点开展开面板:
@@ -651,9 +679,9 @@ node build.mjs # 产出 lib/index.js + lib/client.js
651
679
  # ⚠️ 宿主半会**内联** schemastery / cosmokit:
652
680
  # 优先用 DSH 检出里的 vendor 副本,检出不在时退到 node_modules
653
681
  # 里同版本的 npm 包(两者逐字节相同)——CI 上走的就是退路
654
- npm test # 29 个套件;当前 2603 passed, 0 failed(2026-10-28 实测;CI 三平台同样全绿)
682
+ npm test # 30 个套件;当前 2621 passed, 0 failed(2026-10-28 实测;CI 三平台同样全绿)
655
683
  # 走 scripts/run-tests.mjs:顺带把"多少套件/多少条"记进 test/.last-run.json
656
- npm run test:mutations # 手动跑:变异测试,证明那套护栏真的在咬人(198 条,须单独跑)
684
+ npm run test:mutations # 手动跑:变异测试,证明那套护栏真的在咬人(203 条,须单独跑)
657
685
  # 同样记录结果,供下面的文档门禁核对
658
686
  npm run gates # 发版门禁三条一起跑:tag 指向 / 包内容 / 文档数字
659
687
  npm run check:tag # ① tag 名里的版本 == 该 tag 所指提交里的 package.json 版本
package/dsh-plugin.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "manifestVersion": "0.15",
4
4
  "id": "dsh-composer-ux.input-experience",
5
5
  "name": "dsh-composer-ux",
6
- "version": "0.28.0",
6
+ "version": "0.29.0",
7
7
  "license": "MIT",
8
8
  "facets": {
9
9
  "host": {