dsh-composer-ux 0.20.0 → 0.21.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,35 @@
2
2
 
3
3
  本项目遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
4
4
 
5
+ ## [0.21.0] — 2026-10-10(「优化提示词」默认收缩:面板打开回到快捷指令那半 + 优化选项加折叠)
6
+
7
+ 用户 2026-10-10(截图):「让优化提示词默认收缩起来」。确认后两处都改:
8
+
9
+ ### 1. 打开面板回到默认那一半(不再被"上次的结果"顶过去)
10
+
11
+ - 旧规则:结果框"从无到有"就自动切到优化那半 —— 但**重开面板时上一轮的结果也算"从无到有"**,
12
+ 于是每次打开都直接落在优化那半、外加一整组选项,把「优化完成」顶到看不见(截图里只剩一行)。
13
+ - 现在:每次**打开**面板 ⇒ 回到「快捷指令」那半,哪怕上一轮结果还摆着(打开那一刻就有的结果框算
14
+ **基线**,不抢视图;切换按钮写「上次的结果在这儿」)。
15
+ - 保留的:**面板已经开着**时结果框从无到有照旧自动切过去(点 ✨ 必须看得到结果,不能"点了没反应");
16
+ 「**正在跑**」是打开时唯一的例外 —— 那时要能看见进度与「取消」。
17
+ - 点 ✨ 另外**明确**切一次那半:上一轮结果还在时它不是"从无到有",只靠那条规则会看起来没反应。
18
+
19
+ ### 2. 「优化选项」加一层折叠,默认收起
20
+
21
+ - 收起时标题行右侧给一行当前值摘要(权限 · 上下文 · 只读工具 · Bash;指定过模型时才带模型),
22
+ 不点开也看得见关键值;展开后与 0.14.0 的形态完全一致(七个控件 + 详情)。
23
+ - 卡片改成**受控**(`open` / `onToggle` 由面板给):折叠要在每次打开面板时复位,卡片只负责画。
24
+
25
+ ### 验证
26
+
27
+ - `npm test`:30 套件 **2591 passed / 0 failed**。`panel-split-render` 40→55:
28
+ 新增 §0(把"打开=默认""从无到有才切"这两条跨渲染规则抽成纯函数钉住 —— SSR 一次渲染测不到转换)、
29
+ §2 改成"有结果框也不抢视图"、§2c 直接渲卡片验收起/展开两态、§3 直接渲结果框验布局;
30
+ `client-registration` 271→276(旧的那条源码断言改写 + 5 条新契约)。
31
+ - `npm run test:mutations`:**195 条全部咬住**(EB 的 expect 跟着改,新增 HP–HU 5 条:
32
+ 打开不回到默认、不复位折叠、折叠初值改展开、收起照样渲七个控件、摘要丢了、✨ 不明确切换)。
33
+
5
34
  ## [0.20.0] — 2026-10-10(适配 DSH 0.2.1-alpha.2:真机测出并修掉三处真问题)
6
35
 
7
36
  用户 2026-10-10:把 `D:\DeepSeek Harness`(未封装版检出)升到最新(`dsh-v0.2.1-alpha.2`)并用它测插件。
package/README.md CHANGED
@@ -143,10 +143,17 @@ dsh plugin --profile web add <你克隆或解压出来的目录>
143
143
  - **0.12.0 起有记忆链**:你把成品插进输入框、改了几处、又点一次优化时,宿主会把**上一版成品**
144
144
  一起给模型(截断 1500 字),它只需围绕变化点调整、不必从零重写(你已确认过的地方不会被改回去)。
145
145
  不带的三种情况:同一段原文重跑(同文重试)、草稿就是上一轮成品(对成品重跑)、上一轮失败/取消;“重新优化”只在你手改过框里成品时才带。
146
- - **面板分两半(0.13.1)**:中部现在是「**优化提示词**」(结果框)与「**快捷指令**」(分类 + 条目列表)**二选一**,
147
- 中间一个切换按钮(▸ / ▾)换着看;打开面板**默认展开快捷指令**,标题行的**三档档位与 ✨ 按钮始终露在外面**
148
- —— 所以「跑一次优化」永远是一步,不必先展开。**点 ✨ 会自己切到优化那半**(否则结果被藏在收起的一半里,
149
- 看起来像没反应);手动切回快捷指令不会被抢回去;点结果框的「✕」会顺手切回快捷指令。
146
+ - **面板分两半(0.13.1)**:中部现在是「**优化提示词**」(结果框 + 优化选项)与「**快捷指令**」(分类 + 条目列表)**二选一**,
147
+ 中间一个切换按钮(▸ / ▾)换着看;标题行的**三档档位与 ✨ 按钮始终露在外面**
148
+ —— 所以「跑一次优化」永远是一步,不必先展开。**点 ✨ 会自己切到优化那半**(否则结果被藏在收起的一半里,
149
+ 看起来像没反应);手动切回快捷指令不会被抢回去;点结果框的「✕」会顺手切回快捷指令。
150
+ - **默认收缩(0.21.0,用户 2026-10-10 的截图)**:每次**打开面板**都回到「快捷指令」那半,
151
+ 哪怕上一轮的结果还摆着 —— 旧规则是"结果框从无到有就自动切过去",而重开面板时旧结果也算"从无到有",
152
+ 于是每次打开都直接落在优化那半、外加一整组选项,把「优化完成」顶到看不见。
153
+ 现在:打开那一刻就有的结果框算**基线**(不抢视图,切换按钮会写「上次的结果在这儿」);
154
+ **面板已经开着**时结果框从无到有照旧自动切过去;「**正在跑**」是打开时唯一的例外(要能看见进度与「取消」)。
155
+ 同一张面板里的「**优化选项**」也加了一层折叠、**默认收起** —— 收起时标题行右侧给一行当前值摘要
156
+ (权限 / 上下文 / 只读工具 / Bash,指定过模型时才带模型),不点开也看得见关键值。
150
157
  - **修掉「展开后看不到按钮」(0.13.1)**:以前结果框和快捷指令列表**挤同一块固定高度**,结果框一长
151
158
  (条目多 + 成品多行)就把列表挤没、再把自己底部的**「插入输入框 / 重新优化 / 复制」顶出面板边界被裁掉**。
152
159
  现在两半互斥、各自内部滚,而且结果框拆成「可滚内容区 + **钉在底部的按钮行**」—— 面板再矮也不裁那排按钮。
@@ -553,7 +560,7 @@ Windows 上 DSH 给模型的终端工具是 **PowerShell**(工具名 `pwsh`)
553
560
  | 工具循环的消息形状 / 轮次封顶 / 异常必须降级 | 同上第 6 节(假 llm 驱动整条循环,逐条检查 `role:'tool'` 与 `toolCallId`) |
554
561
  | 工具路径:默认关、开了才派、**查完吐散文必须回落**、拿不到工作目录就不派 | `test/quick-commands.mjs` 5g 节(13 条,真路由 + 假 llm) |
555
562
  | 工具读到的内容不进台账 | 同 5g 节:断言台账里只有工具名与次数、没有读到的文件内容 |
556
- | 变异守卫真的会咬人,且**必须是指定的那条测试变红** | `npm run test:mutations`:**189 条全部咬住**(判据是 `red.some(line => line.includes(item.expect))`,不是"有红就行") |
563
+ | 变异守卫真的会咬人,且**必须是指定的那条测试变红** | `npm run test:mutations`:**195 条全部咬住**(判据是 `red.some(line => line.includes(item.expect))`,不是"有红就行") |
557
564
  | **桌面应用里弹系统文件夹框**(0.18.0 起;0.19.0 起默认关、设置页可开) | ✅ **有真机证据**:2026-10-09 用户在桌面应用点「选择工作区目录」,实测「成功替换为系统文件管理器」(先用 profile 补丁验过一次,之后的插件内 shadow 版走的是同一条 preload 桥);`node test/directory-flow.mjs` 49 条 + 变异 FS–FY(判定/状态机)与 GZ/HA(开关幂等装卸)罩着 |
558
565
  | **设置字段全部进了宿主 schema**(0.19.2 起) | `test/client-registration.mjs` 第 16 节:把设置契约里 49 个 `*_FIELD` 常量逐个核对 `ownSchema()`,再点名 6 个(5 个通知 + 目录选择)+ 变异 HG/HH。**为什么值得单列一行**:写设置走 `settings.mutate`,字段没进 schema 会被直接抛 `Config field "…" is not volatile` —— 0.17.0 的 5 个通知字段就是这么漏的(症状是"开关拨不动 + 写入失败提示"),2026-10-09 才发现并修掉 |
559
566
  | 发布门禁三条判据 | `npm run gates` 全过;`check:tag` 实测 `v0.12.0` 的 tag 名与所指提交里的版本一致 |
@@ -690,9 +697,9 @@ node build.mjs # 产出 lib/index.js + lib/client.js
690
697
  # ⚠️ 宿主半会**内联** schemastery / cosmokit:
691
698
  # 优先用 DSH 检出里的 vendor 副本,检出不在时退到 node_modules
692
699
  # 里同版本的 npm 包(两者逐字节相同)——CI 上走的就是退路
693
- npm test # 30 个套件;当前 2569 passed, 0 failed(2026-10-09 实测;CI 三平台同样全绿)
700
+ npm test # 30 个套件;当前 2591 passed, 0 failed(2026-10-09 实测;CI 三平台同样全绿)
694
701
  # 走 scripts/run-tests.mjs:顺带把"多少套件/多少条"记进 test/.last-run.json
695
- npm run test:mutations # 手动跑:变异测试,证明那套护栏真的在咬人(189 条,须单独跑)
702
+ npm run test:mutations # 手动跑:变异测试,证明那套护栏真的在咬人(195 条,须单独跑)
696
703
  # 同样记录结果,供下面的文档门禁核对
697
704
  npm run gates # 发版门禁三条一起跑:tag 指向 / 包内容 / 文档数字
698
705
  npm run check:tag # ① tag 名里的版本 == 该 tag 所指提交里的 package.json 版本