dsh-m 0.9.88 → 0.9.89
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 +15 -1
- package/lib/client.js +10 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,13 @@ The full release history of dsh-m, maintained bilingually: **Chinese first, Engl
|
|
|
8
8
|
|
|
9
9
|
## 中文
|
|
10
10
|
|
|
11
|
+
### 0.9.89 优化:两行态头部视觉恒定——完整标题保留 + winctl 尺寸/行高不随断点跳变
|
|
12
|
+
|
|
13
|
+
- **需求(2026-10-15,主人真机反馈)**:0.9.88 的 720 断点两行重排带来两处可感知跳变——标题在「插件市场 ↔ DeepSeek Harness 插件市场」间换字;右上角 winctl 按钮忽大忽小(28↔36px),且标题/按钮垂直位置跨断点漂移 1–2px,来回拖拽「一跳一跳」。
|
|
14
|
+
- **方案**:① 两行态保留完整标题——seg 让行后首行空间充裕(640 宽实测 612px 内容区只需 ~300px),短标题切换退役(DOM 双 span 与基础隐藏规则保留,极端窄由 nowrap+ellipsis 兜底);② winctl 触控 36px 从容器断点迁 `pointer:coarse`(按钮大小跟随输入方式而非宽度:鼠标恒 28px、触屏恒 36px);③ winctl 盒钉 34px = seg 行高(按钮 28 + 边框 2 同源公式),单行/两行第一行高度归一。
|
|
15
|
+
- **验证**:全量 1496 测试全绿、typecheck 零错误;CDP 实测跨断点标题/按钮垂直中心 delta 0.0px(修复前 -1~-2px);主人真机验收通过。
|
|
16
|
+
- **杂项**:package-lock 根版本字段自 0.9.68 起历届发版漏改,本次补齐至当前版本并纳入发版流程。
|
|
17
|
+
|
|
11
18
|
### 0.9.88 特性:面板三区 resize——尺寸记忆 + 就地生长(ADR-0021)+ 验收三修
|
|
12
19
|
|
|
13
20
|
- **需求(2026-10-15)**:市场面板「920px 浏览卡片太挤、全屏又太大」的真实档位空洞 + 桌面窗口本能手势(下意识移向边缘想 resize)。`/grill-with-docs` 两轮锁定设计:三区手柄(右/下/右下角)、就地生长锚定、尺寸记忆全套;实施计划经独立评审 Agent 三轮对抗审核(计划 11 条 + 执行 2 条全闭环,含两条方法论沉淀:`treeShaking:false` 下「bundle 标识符缺席」类预言必假、esbuild 默认 charset=ascii 下中文 bundle 锚必假)。
|
|
@@ -623,7 +630,14 @@ The full release history of dsh-m, maintained bilingually: **Chinese first, Engl
|
|
|
623
630
|
|
|
624
631
|
## English
|
|
625
632
|
|
|
626
|
-
###
|
|
633
|
+
### Polish in 0.9.89 — constant two-row head: full title kept, winctl size/row height independent of the breakpoint
|
|
634
|
+
|
|
635
|
+
- **Need (2026-10-15, live feedback)**: the 720px two-row reflow shipped in 0.9.88 introduced two perceptible jumps — the title swapped between "插件市场" and "DeepSeek Harness 插件市场", and the winctl buttons changed size (28↔36px) while title/button vertical positions drifted 1–2px across the breakpoint.
|
|
636
|
+
- **Approach**: ① the two-row state keeps the full title — with seg moved to its own row the first row has ample room (~300px used of 612px at 640 width), so the short-title swap retires (DOM spans and base hiding kept; nowrap+ellipsis covers extreme narrow); ② the winctl touch bump (36px) moved from the container breakpoint to `pointer:coarse` (button size follows input modality, not width: mouse always 28px, touch always 36px); ③ the winctl box pinned to 34px = seg row height (same 28+2-border formula), normalizing first-row height across both modes.
|
|
637
|
+
- **Verification**: full suite 1496 green, typecheck clean; CDP measurement shows 0.0px vertical-center delta for title and buttons across the breakpoint (was -1~-2px); accepted on-device by the owner.
|
|
638
|
+
- **Misc**: package-lock root version fields, unsynced since 0.9.68, now track the release version and join the release checklist.
|
|
639
|
+
|
|
640
|
+
### 0.9.88 — three-zone panel resize: size memory + grow-in-place (ADR-0021) + acceptance fixes
|
|
627
641
|
|
|
628
642
|
- **Need (2026-10-15)**: a real gap between "cramped at 920px" and "overkill fullscreen", plus the instinctive desktop gesture of grabbing window edges. Design locked via two grill rounds: three handles (right/bottom/bottom-right), grow-in-place anchoring, full size memory; the implementation plan survived three independent adversarial review rounds (11 plan + 2 execution issues all closed, including two methodology findings: bundle-absence predictions are structurally false under `treeShaking:false`, and CJK bundle anchors are false under esbuild's default ascii charset).
|
|
629
643
|
- **Approach (ADR-0021)**: ① DOM-free `window-resize.js` — `clampSize` (min 640×460, viewport−8px margins, an origin second clamp keeping right/bottom edges inside margins for the freely-positioned form, degraded bounds on tiny viewports) + size-memory storage symmetric to position memory; ② gesture state machine mirrors ADR-0017 (rAF-batched writes, zero setState in gesture frames, setPointerCapture, primary-button guard, multi-pointer guard, unmount cleanup); ③ hot zones 6/8px edges + 14×14 corner, cursor-only affordance, four exemptions (fullscreen / narrow viewport / touch / scrollbar trade-off); ④ reclamp upgraded to size-first-then-position.
|
package/lib/client.js
CHANGED
|
@@ -2693,7 +2693,7 @@ var CSS = `
|
|
|
2693
2693
|
@media (pointer:coarse){.dshm-rz{display:none}} /* belt \u2461\uFF1Acoarse \u6307\u9488\u6574\u7EC4\u9690\u85CF\uFF08Q8\uFF09 */
|
|
2694
2694
|
/* \u7A97\u53E3\u63A7\u5236\u7EC4\uFF080.7.7\uFF09\uFF1A\u6700\u5927\u5316/\u5173\u95ED\u8FDE\u4F53\u6309\u94AE\u7EC4\u2014\u2014\u7B49\u5BBD\u4E24\u683C + \u53D1\u4E1D\u5206\u9694\u7EBF\uFF0C\u7EDF\u4E00\u7EBF\u6761\u56FE\u6807 */
|
|
2695
2695
|
/* \u7A97\u53E3\u63A7\u5236\u7EC4\uFF080.7.7/0.7.8\uFF09\uFF1A\u6700\u5927\u5316/\u5173\u95ED\u8FDE\u4F53\u6309\u94AE\u7EC4\u2014\u2014\u900F\u660E\u5E95 + \u53D1\u4E1D\u5916\u6846\uFF0C\u4E0E\u641C\u7D22\u6E05\u9664\u94AE\u540C\u4E00\u914D\u8272\u8BED\u8A00\uFF1B\u5BBD\u683C\u9632\u8BEF\u89E6 */
|
|
2696
|
-
.dshm-winctl{display:inline-flex;align-items:
|
|
2696
|
+
.dshm-winctl{display:inline-flex;align-items:center;height:34px;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#e5e7eb);border-radius:9px;background:transparent;overflow:hidden;flex:none}
|
|
2697
2697
|
.dshm-winctl button{appearance:none;border:0;background:transparent;color:var(--dsw-alias-label-secondary,#4b5563);width:44px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .15s,color .15s}
|
|
2698
2698
|
.dshm-winctl button + button{border-left:1px solid var(--dsw-alias-border-l1,rgba(127,127,127,.18))}
|
|
2699
2699
|
.dshm-winctl button:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.12));color:var(--dsw-alias-label-primary,inherit)}
|
|
@@ -3071,12 +3071,16 @@ button.dshm-dshchip:disabled{cursor:default;opacity:.75}
|
|
|
3071
3071
|
@container (max-width:720px){
|
|
3072
3072
|
.dshm-head{flex-wrap:wrap;row-gap:6px}
|
|
3073
3073
|
.dshm-head-divider{display:none}
|
|
3074
|
-
.
|
|
3075
|
-
|
|
3074
|
+
/* 0.9.89\uFF1A\u4E24\u884C\u6001\u4FDD\u7559\u5B8C\u6574\u6807\u9898\uFF08\u4E3B\u4EBA\u63D0\u8BAE\u5B9E\u6D4B\u91C7\u7EB3\uFF09\u2014\u2014seg \u8BA9\u884C\u540E\u9996\u884C\u7A7A\u95F4\u5145\u88D5
|
|
3075
|
+
\uFF08640 \u5BBD\u5B9E\u6D4B 612px \u5185\u5BB9\u533A\u53EA\u9700 ~300px\uFF09\uFF0C\u77ED\u6807\u9898\u5207\u6362\u53CD\u800C\u5236\u9020\u65AD\u70B9\u6362\u5B57\u95EA\u70C1\uFF1B
|
|
3076
|
+
\u6781\u7AEF\u7A84\u7531 .dshm-title \u7684 nowrap+ellipsis \u515C\u5E95\u3002DOM \u53CC span \u4E0E\u57FA\u7840\u9690\u85CF\u89C4\u5219
|
|
3077
|
+
\u4FDD\u7559\uFF08\u77ED\u6807\u9898\u6C38\u4E0D\u663E\u793A\uFF0C\u56DE\u9000\u96F6\u6210\u672C\uFF09\u3002 */
|
|
3076
3078
|
.dshm-spacer{order:1}
|
|
3077
3079
|
.dshm-head>.dshm-dshchip{order:2}
|
|
3078
3080
|
.dshm-winctl{order:3}
|
|
3079
|
-
.
|
|
3081
|
+
/* 0.9.89\uFF1Awinctl \u89E6\u63A7\u52A0\u5927\uFF0836px\uFF09\u4ECE\u5BB9\u5668\u65AD\u70B9\u8FC1\u81F3 pointer:coarse\u2014\u2014\u6309\u94AE\u5927\u5C0F\u4E0D\u8BE5\u968F
|
|
3082
|
+
\u4E24\u884C/\u5355\u884C\u6A21\u5F0F\u8DF3\u53D8\uFF08\u4E3B\u4EBA\u5B9E\u6D4B 720 \u8FB9\u754C\u5FFD\u5927\u5FFD\u5C0F\uFF09\uFF0C\u771F\u6B63\u53D8\u91CF\u662F\u8F93\u5165\u65B9\u5F0F\uFF1B\u89E6\u5C4F\u8BBE\u5907
|
|
3083
|
+
\u5168\u6A21\u5F0F\u6052 36px\uFF0C\u9F20\u6807\u8BBE\u5907\u5168\u6A21\u5F0F\u6052 28px */
|
|
3080
3084
|
.dshm-seg{order:4;flex:1 1 100%}
|
|
3081
3085
|
.dshm-seg button{flex:1;justify-content:center;white-space:nowrap;padding:0 10px;height:36px}
|
|
3082
3086
|
/* \u7248\u672C chip\uFF08\u5171\u8BC6 Q7 + \u8BC4\u5BA1 R5 \u6536\u7A84\uFF09\uFF1A\u5E38\u6001\u9690\u85CF\uFF08\u8BBE\u7F6E\u9875\u968F\u65F6\u53EF\u89C1\uFF09\uFF1Bwarn \u6001\u7F29\u4E3A \u2B06
|
|
@@ -3089,6 +3093,8 @@ button.dshm-dshchip:disabled{cursor:default;opacity:.75}
|
|
|
3089
3093
|
/* overlay \u7A84\u89C6\u53E3\u515C\u5E95\uFF1A\u8FD8\u539F\u6001 8px\uFF08.full \u7684 padding:0 \u7279\u5F02\u6027 (0,2,0)>(0,1,0) \u81EA\u7136\u4FDD\u6301\uFF09\uFF1B
|
|
3090
3094
|
\u7A84\u89C6\u53E3\u9ED8\u8BA4\u5168\u5C4F\u7684 JS \u5224\u5B9A\u5728 MarketPanel full \u521D\u59CB\u5316 */
|
|
3091
3095
|
@media (max-width:600px){.dshm-overlay{padding:8px}}
|
|
3096
|
+
/* \u89E6\u63A7\u76EE\u6807\u52A0\u5927\u968F\u8F93\u5165\u65B9\u5F0F\u800C\u975E\u5BBD\u5EA6\uFF080.9.89 \u8FC1\u79FB\uFF0C\u89C1 720 \u5757\u5185\u6CE8\u91CA\uFF09 */
|
|
3097
|
+
@media (pointer:coarse){.dshm-winctl{height:38px}.dshm-winctl button{height:36px}}
|
|
3092
3098
|
`;
|
|
3093
3099
|
function cssVersionOf(s) {
|
|
3094
3100
|
let h2 = 5381;
|