dsh-fonttune 0.7.1 → 0.7.3

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.en.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to **dsh-fonttune** are documented here. Chinese version: [CHANGELOG.md](CHANGELOG.md).
4
4
 
5
+ ## [0.7.3] - 2026-10-29
6
+
7
+ ### Fixed
8
+ - **Every conversation axis was inert on DSH 0.2.1-rc.4 and 0.2.2**: those releases dropped the conversation container's `_markdown_` class-hash segment and its `[data-dss-prose]` wrapper, so the dialog rules matched zero elements and font, size, line height, weight and tracking all failed silently — while the card, its writes and the floating panel still looked fine. The markdown block elements inside `[data-conversation-content]` now stand in as the fallback scope.
9
+ - **The floating panel measured the whole window instead of the conversation on those same releases**: it looked for the same two markers, so the dot parked on the window's corner and the panel's expand direction was read from the window; it now recognises that content container too.
10
+
11
+ ### Changed
12
+ - **The compatibility table states what was verified**: the 0.2.1-rc.4 and 0.2.2-alpha.2 rows used to mean "the card, its writes and the panel"; from this release on they mean "the type actually renders on the conversation and the panel measures the conversation".
13
+
14
+ ## [0.7.2] - 2026-10-28
15
+
16
+ ### Changed
17
+ - **The compatibility table lists DSH 0.2.1-rc.4 and 0.2.2-alpha.2**: both were verified live — the settings card, its writes and the floating panel all behave as documented.
18
+
5
19
  ## [0.7.1] - 2026-10-20
6
20
 
7
21
  ### Changed
package/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  **dsh-fonttune** 的重要变更都记录在这里。英文版见 [CHANGELOG.en.md](CHANGELOG.en.md)。
4
4
 
5
+ ## [0.7.3] - 2026-10-29
6
+
7
+ ### 修复
8
+ - **DSH 0.2.1-rc.4 与 0.2.2 上对话排印轴全部失效**:这两个版本去掉了对话容器的 `_markdown_` 类名哈希段与 `[data-dss-prose]` 包裹层,对话规则命中零个元素,字体、字号、行高、字重、字距等轴全部静默失效(卡片、写入与悬浮面板看起来仍正常)。现在把 `[data-conversation-content]` 内的 markdown 块元素作为兜底作用域。
9
+ - **同一版本上悬浮面板把对话区认成了整个窗口**:面板找对话区的两个旧标记同样消失,圆点会贴到窗口角落、展开方向也按窗口计算;现在它也认这一层内容容器。
10
+
11
+ ### 变更
12
+ - **兼容对照表补上验证范围**:0.2.1-rc.4 与 0.2.2-alpha.2 一栏原先只验了「卡片、写入、面板」,没有验「字体是否真的渲染到对话上」;这一版起该栏按「字体实际生效 + 面板按对话区定位」验收。
13
+
14
+ ## [0.7.2] - 2026-10-28
15
+
16
+ ### 变更
17
+ - **兼容对照表列出 DSH 0.2.1-rc.4 与 0.2.2-alpha.2**:两条线实测通过,设置卡片、控件写入与悬浮面板均正常。
18
+
5
19
  ## [0.7.1] - 2026-10-20
6
20
 
7
21
  ### 变更
package/README.en.md CHANGED
@@ -39,7 +39,7 @@ The floating tuning panel (left, with its "in force right now" readout) and the
39
39
 
40
40
  | Plugin version | Supported DSH versions |
41
41
  | --- | --- |
42
- | **0.7.x** (latest, 0.7.1) | 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-alpha.1, 0.2.1-alpha.2, 0.2.1-alpha.3, 0.2.1-alpha.4, 0.2.1-alpha.5, 0.2.1-rc.1, 0.2.1-rc.2 |
42
+ | **0.7.x** (latest, 0.7.3) | 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-alpha.1, 0.2.1-alpha.2, 0.2.1-alpha.3, 0.2.1-alpha.4, 0.2.1-alpha.5, 0.2.1-rc.1, 0.2.1-rc.2, 0.2.1-rc.4, 0.2.2-alpha.2 |
43
43
  | 0.6.x (0.6.2) | 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-alpha.1, 0.2.1-alpha.2, 0.2.1-alpha.3, 0.2.1-alpha.4, 0.2.1-alpha.5, 0.2.1-rc.1, 0.2.1-rc.2 |
44
44
  | 0.5.x (0.5.0) | 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-alpha.1, 0.2.1-alpha.2 |
45
45
  | 0.4.x (0.4.2) | 0.1.7-alpha.1, 0.1.7-alpha.2, 0.1.7-rc.1, 0.1.7-rc.2, 0.2.0-rc.1, 0.2.0-rc.2, 0.2.1-alpha.1, 0.2.1-alpha.2 |
package/README.md CHANGED
@@ -39,7 +39,7 @@
39
39
 
40
40
  | 插件版本 | 支持的 DSH 版本 |
41
41
  | --- | --- |
42
- | **0.7.x**(最新,0.7.1) | 0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2、0.2.1-alpha.3、0.2.1-alpha.4、0.2.1-alpha.5、0.2.1-rc.1、0.2.1-rc.2 |
42
+ | **0.7.x**(最新,0.7.3) | 0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2、0.2.1-alpha.3、0.2.1-alpha.4、0.2.1-alpha.5、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.4、0.2.2-alpha.2 |
43
43
  | 0.6.x(0.6.2) | 0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2、0.2.1-alpha.3、0.2.1-alpha.4、0.2.1-alpha.5、0.2.1-rc.1、0.2.1-rc.2 |
44
44
  | 0.5.x(0.5.0) | 0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2 |
45
45
  | 0.4.x(0.4.2) | 0.1.7-alpha.1、0.1.7-alpha.2、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-alpha.1、0.2.1-alpha.2 |
package/lib/client.js CHANGED
@@ -2968,19 +2968,36 @@ function codeSelector(hints) {
2968
2968
  CODE_SELECTOR = codeSelector(null);
2969
2969
 
2970
2970
  /**
2971
- * The dialog surface: DSH renders the conversation markdown in a CSS-module
2972
- * container whose class hashes per release (`_markdown_<hash>_…`), wrapped in a
2973
- * stable `[data-dss-prose]` container (measured on 0.1.5-rc.3: every markdown
2974
- * container on the page sits inside one). A class-substring match degrades
2975
- * safely — no match means the dialog follows the interface axis, the same
2976
- * behavior as an unknown token name — but it costs an attribute scan per
2977
- * element per rule, so the browser half prefers the stable wrapper when it can
2978
- * see one and falls back to the substring form otherwise.
2971
+ * The dialog surface, across two host generations.
2972
+ *
2973
+ * Up to DSH 0.2.1 the conversation markdown sat in a CSS-module container whose
2974
+ * class carried a `_markdown_` hash segment (`_markdown_<hash>_…`), wrapped in
2975
+ * a stable `[data-dss-prose]` container. DSH 0.2.2 dropped both: the class is
2976
+ * now `<hash>_root` and the prose wrapper is gone, which left every dialog rule
2977
+ * matching zero elements and the whole conversation axis silently inert.
2978
+ *
2979
+ * What 0.2.2 does still expose is the content container
2980
+ * `[data-conversation-content]`, so the markdown block elements inside it
2981
+ * stand in for the scope. A class-substring match degrades safely — no match
2982
+ * means the dialog follows the interface axis, the same behavior as an unknown
2983
+ * token name — but it costs an attribute scan per element per rule, so the
2984
+ * browser half prefers the stable wrapper when it can see one and falls back to
2985
+ * the element list otherwise.
2979
2986
  */
2987
+ var MARKDOWN_BLOCK_ELEMENTS = "p,li,h1,h2,h3,h4,h5,h6,blockquote,td,th,dt,dd";
2988
+
2980
2989
  var MARKDOWN_SELECTOR =
2981
- '[class*="_markdown_" i]' +
2990
+ '[data-dss-prose]' +
2991
+ CODE_EXCLUDES +
2992
+ ',[data-dss-prose] *' +
2993
+ CODE_EXCLUDES +
2994
+ ',[class*="_markdown_" i]' +
2982
2995
  CODE_EXCLUDES +
2983
2996
  ',[class*="_markdown_" i] *' +
2997
+ CODE_EXCLUDES +
2998
+ ',[data-conversation-content] :where(' +
2999
+ MARKDOWN_BLOCK_ELEMENTS +
3000
+ ')' +
2984
3001
  CODE_EXCLUDES;
2985
3002
 
2986
3003
  /**
@@ -10859,9 +10876,18 @@ function mountFloatPanel(scope, t, hostCtx) {
10859
10876
  * The hint is what `harvestScope` names the dialog rules by where the host has
10860
10877
  * it; the substring form is the same fallback the stylesheet builder uses, so
10861
10878
  * the panel measures the very element the type axes already style.
10879
+ *
10880
+ * DSH 0.2.1-rc.4 and 0.2.2 dropped BOTH of them — no `_markdown_` class-hash
10881
+ * segment and no `[data-dss-prose]` wrapper — which left the panel with no
10882
+ * candidate region at all: it fell back to the whole window and the dot parked
10883
+ * on the window's corner instead of the conversation's. Those lines still mark
10884
+ * the content container, so its block elements are the third anchor, the same
10885
+ * shape the stylesheet builder grew (`MARKDOWN_BLOCK_ELEMENTS`).
10862
10886
  */
10863
10887
  var PROSE_HINT = "[data-dss-prose]";
10864
10888
  var PROSE_FALLBACK = '[class*="_markdown_" i]';
10889
+ var PROSE_CONTENT =
10890
+ "[data-conversation-content] :where(p,li,h1,h2,h3,h4,h5,h6,blockquote,td,th)";
10865
10891
 
10866
10892
  /**
10867
10893
  * How many candidate regions are read before the list is handed over.
@@ -10941,6 +10967,7 @@ function mountFloatPanel(scope, t, hostCtx) {
10941
10967
  try {
10942
10968
  add(document.querySelectorAll(PROSE_HINT));
10943
10969
  add(document.querySelectorAll(PROSE_FALLBACK));
10970
+ add(document.querySelectorAll(PROSE_CONTENT));
10944
10971
  } catch (error) {
10945
10972
  // A page without a queryable document keeps the empty list (the window).
10946
10973
  }
package/lib/shared.cjs CHANGED
@@ -2959,19 +2959,36 @@ function codeSelector(hints) {
2959
2959
  CODE_SELECTOR = codeSelector(null);
2960
2960
 
2961
2961
  /**
2962
- * The dialog surface: DSH renders the conversation markdown in a CSS-module
2963
- * container whose class hashes per release (`_markdown_<hash>_…`), wrapped in a
2964
- * stable `[data-dss-prose]` container (measured on 0.1.5-rc.3: every markdown
2965
- * container on the page sits inside one). A class-substring match degrades
2966
- * safely — no match means the dialog follows the interface axis, the same
2967
- * behavior as an unknown token name — but it costs an attribute scan per
2968
- * element per rule, so the browser half prefers the stable wrapper when it can
2969
- * see one and falls back to the substring form otherwise.
2962
+ * The dialog surface, across two host generations.
2963
+ *
2964
+ * Up to DSH 0.2.1 the conversation markdown sat in a CSS-module container whose
2965
+ * class carried a `_markdown_` hash segment (`_markdown_<hash>_…`), wrapped in
2966
+ * a stable `[data-dss-prose]` container. DSH 0.2.2 dropped both: the class is
2967
+ * now `<hash>_root` and the prose wrapper is gone, which left every dialog rule
2968
+ * matching zero elements and the whole conversation axis silently inert.
2969
+ *
2970
+ * What 0.2.2 does still expose is the content container
2971
+ * `[data-conversation-content]`, so the markdown block elements inside it
2972
+ * stand in for the scope. A class-substring match degrades safely — no match
2973
+ * means the dialog follows the interface axis, the same behavior as an unknown
2974
+ * token name — but it costs an attribute scan per element per rule, so the
2975
+ * browser half prefers the stable wrapper when it can see one and falls back to
2976
+ * the element list otherwise.
2970
2977
  */
2978
+ var MARKDOWN_BLOCK_ELEMENTS = "p,li,h1,h2,h3,h4,h5,h6,blockquote,td,th,dt,dd";
2979
+
2971
2980
  var MARKDOWN_SELECTOR =
2972
- '[class*="_markdown_" i]' +
2981
+ '[data-dss-prose]' +
2982
+ CODE_EXCLUDES +
2983
+ ',[data-dss-prose] *' +
2984
+ CODE_EXCLUDES +
2985
+ ',[class*="_markdown_" i]' +
2973
2986
  CODE_EXCLUDES +
2974
2987
  ',[class*="_markdown_" i] *' +
2988
+ CODE_EXCLUDES +
2989
+ ',[data-conversation-content] :where(' +
2990
+ MARKDOWN_BLOCK_ELEMENTS +
2991
+ ')' +
2975
2992
  CODE_EXCLUDES;
2976
2993
 
2977
2994
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-fonttune",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "Font plugin for the DeepSeek Harness Web GUI: the conversation gets its own font, size, line height and weight, the interface font and weight follow it, code keeps its own axis with ligature control, and whole setups save as presets.",
5
5
  "type": "module",
6
6
  "icon": "icon.svg",
@@ -48,7 +48,9 @@
48
48
  "0.2.1-alpha.4": "compatible",
49
49
  "0.2.1-alpha.5": "compatible",
50
50
  "0.2.1-rc.1": "compatible",
51
- "0.2.1-rc.2": "compatible"
51
+ "0.2.1-rc.2": "compatible",
52
+ "0.2.1-rc.4": "compatible",
53
+ "0.2.2-alpha.2": "compatible"
52
54
  }
53
55
  }
54
56
  },