dsh-plugin-yanyan-toolkit 1.4.0 → 1.4.1

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,18 @@
2
2
 
3
3
  All notable changes to this project are documented here.
4
4
 
5
+ ## 1.4.1 — 2026-11-15
6
+
7
+ ### 图标生成:修复生成图标偏小 + 版本号迭代
8
+
9
+ - **现象**(用户反馈):插件页「已安装插件」列表里研研工具包的哈士奇图标明显比 dsh-ops / dsh-pet 等邻居插件小。
10
+ - **根因**:`packages/dsh-plugin-yanyan-icon/lib/index.js` 的 `buildIconSvg` 默认布局为 `outer=6 / frameSize=52 / padding=4 / radius=14`,位图仅占 `44/64≈69%`;浅紫背景 `#eef2ff` 描边 `#c7d2fe` 在白底上几乎不可见,视觉上只剩中间一小块。用 Edge 无头浏览器按 DSH 真实 30px / 36px 渲染做了五方案对比图确认。
11
+ - **修复**:改为用户选定的「方案 A · 适度放大」——`outer=3 / frameSize=58 / padding=3 / radius=13`,位图占 `52/64≈81%`,保留圆角框呼吸感且 30px 下明显更清楚。同步 `normalizeOptions` 默认值、根与子包两处 `cordis.patch.yml` 的 config、单测断言与双语文档。
12
+ - **图标重生成**:用更新后的 `buildIconSvg` 重新生成聚合根包 `icon.svg` 与桌面三张哈士奇 `icon.svg` / `icon-2.svg` / `icon-3.svg`,结构校验 3/3 PASS 并经真实 Edge `<img>` 渲染确认。
13
+ - **版本**:聚合根包 → `1.4.1`;图标生成组件 `dsh-plugin-yanyan-icon` → `1.0.1`(随生成器修复一并迭代);其余组件版本不变。
14
+ - **测试**:`npm test` 全绿;新增「默认布局方案 A」单测锁定 `52/64` 占比,防止回退。
15
+ - **生效**:涉及 bundle 行与 `cordis.patch.yml`,需重新 `npm pack` 并在插件页更新安装(或重建 bundle 后刷新页面)。
16
+
5
17
  ## 1.4.0 — 2026-11-15
6
18
 
7
19
  ### 新增「图标生成」组件包
package/README.en.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  English | [中文](README.md)
4
4
 
5
- > **Current version: v1.4.0** | Requires DSH **0.2.2-rc.2**
5
+ > **Current version: v1.4.1** | Requires DSH **0.2.2-rc.2**
6
6
 
7
7
  > Repository: [GitHub](https://github.com/sweet560/dsh-plugin-yanyan-toolkit)
8
8
 
@@ -21,7 +21,7 @@ Each plugin has its own loader row and can be toggled independently on the Plugi
21
21
 
22
22
  ## Independent component versions
23
23
 
24
- Every component in the bundle keeps its own independent `package.json` version (the umbrella root and the four plugins can be released independently, no forced lockstep): currently `dsh-plugin-yanyan-toolkit` 1.4.0, `dsh-plugin-yanyan-update` 1.2.1, `dsh-plugin-yanyan-subagent` 1.2.2, `dsh-plugin-yanyan-icon` 1.0.0, `@linxin666/dsh-session-archive` 0.4.18.
24
+ Every component in the bundle keeps its own independent `package.json` version (the umbrella root and the four plugins can be released independently, no forced lockstep): currently `dsh-plugin-yanyan-toolkit` 1.4.1, `dsh-plugin-yanyan-update` 1.2.1, `dsh-plugin-yanyan-subagent` 1.2.2, `dsh-plugin-yanyan-icon` 1.0.1, `@linxin666/dsh-session-archive` 0.4.18.
25
25
 
26
26
  On the plugin detail page's "Included components" list, a small `v<version>` badge appears next to each component title. The official `InstalledPluginChild` protocol only has `id/name/enabled/locked` and no `version`, so DSH itself never renders per-component versions. The host half adds a `/__dsh-plugin-yanyan-toolkit/components` route that **dynamically reads each component's own `package.json`** (never hardcoded, so versions cannot drift), and the client half reuses the `MutationObserver` + `ctx.effect` injection skeleton from the Plugin Update package: it matches `[data-plugin-rows] li[data-plugin-row]` rows by the real package name in the inline `<code>` and injects the badge. It never mutates React-managed DOM, never touches other plugins' detail pages, and re-attaches automatically after a re-render.
27
27
 
package/README.i18n.yaml CHANGED
@@ -2,6 +2,6 @@
2
2
  # last confirmed-consistent state. README.md (default, Chinese) and
3
3
  # README.en.md (English) form the active pair; README.zh.md mirrors README.md.
4
4
  # Re-record with: node scripts/verify-docs.mjs --write <dir>
5
- README.md: bafd61766e70c1d6f4e8c9c103b80f62e65a4ddc
6
- README.en.md: ab283e9a713a57c87b93df14b2a3744d77fea275
7
- README.zh.md: bafd61766e70c1d6f4e8c9c103b80f62e65a4ddc
5
+ README.md: e046d9ed15a5c6a3ade4c84b2f07b6f2d49e8eff
6
+ README.en.md: b975a95112fa62509001c2509b9fc57b98e428f0
7
+ README.zh.md: e046d9ed15a5c6a3ade4c84b2f07b6f2d49e8eff
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.en.md) | 中文
4
4
 
5
- > **当前版本:v1.4.0** |适配 DSH **0.2.2-rc.2**
5
+ > **当前版本:v1.4.1** |适配 DSH **0.2.2-rc.2**
6
6
 
7
7
  > 仓库:[GitHub](https://github.com/sweet560/dsh-plugin-yanyan-toolkit)
8
8
 
@@ -21,7 +21,7 @@
21
21
 
22
22
  ## 组件独立版本与显示
23
23
 
24
- 聚合包里的每个组件都保留自己独立的 `package.json` 版本(聚合根包与四个功能插件可各自发版,互不强求一致):当前为 `dsh-plugin-yanyan-toolkit` 1.4.0、`dsh-plugin-yanyan-update` 1.2.1、`dsh-plugin-yanyan-subagent` 1.2.2、`dsh-plugin-yanyan-icon` 1.0.0、`@linxin666/dsh-session-archive` 0.4.18。
24
+ 聚合包里的每个组件都保留自己独立的 `package.json` 版本(聚合根包与四个功能插件可各自发版,互不强求一致):当前为 `dsh-plugin-yanyan-toolkit` 1.4.1、`dsh-plugin-yanyan-update` 1.2.1、`dsh-plugin-yanyan-subagent` 1.2.2、`dsh-plugin-yanyan-icon` 1.0.1、`@linxin666/dsh-session-archive` 0.4.18。
25
25
 
26
26
  在插件详情页「包含的组件」列表里,每个组件中文标题右侧会显示一个 `v<版本>` 小标签。官方的 `InstalledPluginChild` 协议只有 `id/name/enabled/locked`,不含 `version`,DSH 自身不会渲染组件版本;本包由 host 半区新增 `/__dsh-plugin-yanyan-toolkit/components` 路由**动态读取各组件自己的 `package.json`**(绝不写死,避免失同步),client 半区照抄 `插件更新` 包已有的 `MutationObserver` + `ctx.effect` 注入骨架,按 `[data-plugin-rows] li[data-plugin-row]` 与行内 `<code>` 里的真实包名匹配后注入版本标签,不改 React 管理的 DOM、不误伤其它插件详情页,页面重渲染后自动重挂。
27
27
 
package/README.zh.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [English](README.en.md) | 中文
4
4
 
5
- > **当前版本:v1.4.0** |适配 DSH **0.2.2-rc.2**
5
+ > **当前版本:v1.4.1** |适配 DSH **0.2.2-rc.2**
6
6
 
7
7
  > 仓库:[GitHub](https://github.com/sweet560/dsh-plugin-yanyan-toolkit)
8
8
 
@@ -21,7 +21,7 @@
21
21
 
22
22
  ## 组件独立版本与显示
23
23
 
24
- 聚合包里的每个组件都保留自己独立的 `package.json` 版本(聚合根包与四个功能插件可各自发版,互不强求一致):当前为 `dsh-plugin-yanyan-toolkit` 1.4.0、`dsh-plugin-yanyan-update` 1.2.1、`dsh-plugin-yanyan-subagent` 1.2.2、`dsh-plugin-yanyan-icon` 1.0.0、`@linxin666/dsh-session-archive` 0.4.18。
24
+ 聚合包里的每个组件都保留自己独立的 `package.json` 版本(聚合根包与四个功能插件可各自发版,互不强求一致):当前为 `dsh-plugin-yanyan-toolkit` 1.4.1、`dsh-plugin-yanyan-update` 1.2.1、`dsh-plugin-yanyan-subagent` 1.2.2、`dsh-plugin-yanyan-icon` 1.0.1、`@linxin666/dsh-session-archive` 0.4.18。
25
25
 
26
26
  在插件详情页「包含的组件」列表里,每个组件中文标题右侧会显示一个 `v<版本>` 小标签。官方的 `InstalledPluginChild` 协议只有 `id/name/enabled/locked`,不含 `version`,DSH 自身不会渲染组件版本;本包由 host 半区新增 `/__dsh-plugin-yanyan-toolkit/components` 路由**动态读取各组件自己的 `package.json`**(绝不写死,避免失同步),client 半区照抄 `插件更新` 包已有的 `MutationObserver` + `ctx.effect` 注入骨架,按 `[data-plugin-rows] li[data-plugin-row]` 与行内 `<code>` 里的真实包名匹配后注入版本标签,不改 React 管理的 DOM、不误伤其它插件详情页,页面重渲染后自动重挂。
27
27
 
package/cordis.patch.yml CHANGED
@@ -38,6 +38,6 @@
38
38
  - id: dsh-plugin-yanyan-icon
39
39
  name: 'dsh-plugin-yanyan-icon'
40
40
  config:
41
- radius: 14
42
- padding: 4
41
+ radius: 13
42
+ padding: 3
43
43
  borderWidth: 1
package/icon.svg CHANGED
@@ -1,5 +1,5 @@
1
1
  <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="plugin icon">
2
- <defs><clipPath id="yyicon-clip"><rect x="10" y="10" width="44" height="44" rx="10"/></clipPath></defs>
3
- <rect x="6" y="6" width="52" height="52" rx="14" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
4
- <image x="10" y="10" width="44" height="44" preserveAspectRatio="xMidYMid slice" clip-path="url(#yyicon-clip)" xlink:href="data:image/png;base64,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"/>
2
+ <defs><clipPath id="yyicon-clip"><rect x="6" y="6" width="52" height="52" rx="10"/></clipPath></defs>
3
+ <rect x="3" y="3" width="58" height="58" rx="13" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
4
+ <image x="6" y="6" width="52" height="52" preserveAspectRatio="xMidYMid slice" clip-path="url(#yyicon-clip)" xlink:href="data:image/png;base64,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"/>
5
5
  </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-yanyan-toolkit",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "研研工具包:聚合「插件更新」「会话管理」「子智能体管理(日志根除 + 内存投影根治)」「图标生成」四个可独立开关的插件。",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -6,7 +6,7 @@
6
6
 
7
7
  - 在插件页「已安装插件」标题行右侧提供「图标生成」按钮,点开下拉面板。
8
8
  - 选择 PNG / JPEG / WebP 图片后,浏览器用原生 Canvas 居中裁切(cover)并缩到 48×48 PNG。
9
- - POST 到本包 host 半区 `/__dsh-plugin-yanyan-icon/generate`,由纯函数 `buildIconSvg` 包装成 64×64 viewBox、圆角矩形背景、居中内嵌位图的自包含静态 SVG。
9
+ - POST 到本包 host 半区 `/__dsh-plugin-yanyan-icon/generate`,由纯函数 `buildIconSvg` 包装成 64×64 viewBox、圆角矩形背景、居中内嵌位图的自包含静态 SVG(默认位图占 52/64≈81%,在 30px 列表行下清晰可辨)。
10
10
  - 按插件列表真实的 30px 行尺寸与 36px 卡片尺寸双预览,支持一键下载 `icon.svg`。
11
11
  - 生成物无脚本、无外链、无 foreignObject、无 currentColor(`<img>` 上下文不继承页面色),解码后不超过 32 KiB,与 DSH 市场索引的内联图标上限对齐。
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  - 在插件页「已安装插件」标题行右侧提供「图标生成」按钮,点开下拉面板。
8
8
  - 选择 PNG / JPEG / WebP 图片后,浏览器用原生 Canvas 居中裁切(cover)并缩到 48×48 PNG。
9
- - POST 到本包 host 半区 `/__dsh-plugin-yanyan-icon/generate`,由纯函数 `buildIconSvg` 包装成 64×64 viewBox、圆角矩形背景、居中内嵌位图的自包含静态 SVG。
9
+ - POST 到本包 host 半区 `/__dsh-plugin-yanyan-icon/generate`,由纯函数 `buildIconSvg` 包装成 64×64 viewBox、圆角矩形背景、居中内嵌位图的自包含静态 SVG(默认位图占 52/64≈81%,在 30px 列表行下清晰可辨)。
10
10
  - 按插件列表真实的 30px 行尺寸与 36px 卡片尺寸双预览,支持一键下载 `icon.svg`。
11
11
  - 生成物无脚本、无外链、无 foreignObject、无 currentColor(`<img>` 上下文不继承页面色),解码后不超过 32 KiB,与 DSH 市场索引的内联图标上限对齐。
12
12
 
@@ -2,6 +2,6 @@
2
2
  - id: dsh-plugin-yanyan-icon
3
3
  name: 'dsh-plugin-yanyan-icon'
4
4
  config:
5
- radius: 14
6
- padding: 4
5
+ radius: 13
6
+ padding: 3
7
7
  borderWidth: 1
@@ -77,8 +77,8 @@ export function normalizeOptions(raw) {
77
77
  return {
78
78
  background: safeColor(c.background, '#eef2ff'),
79
79
  border: safeColor(c.border, '#c7d2fe'),
80
- radius: clampInt(c.radius, 0, 28, 14),
81
- padding: clampInt(c.padding, 0, 16, 4),
80
+ radius: clampInt(c.radius, 0, 28, 13),
81
+ padding: clampInt(c.padding, 0, 16, 3),
82
82
  borderWidth: clampInt(c.borderWidth, 0, 4, 1),
83
83
  };
84
84
  }
@@ -86,14 +86,16 @@ export function normalizeOptions(raw) {
86
86
  // 核心纯函数:生成 64×64 viewBox、圆角矩形背景、居中内嵌位图的自包含静态 SVG。
87
87
  // 无 script、无 foreignObject、无外链、无 currentColor(<img> 上下文不继承页面色,
88
88
  // 所有颜色都给显式值),内嵌图片经 clipPath 裁成圆角,四周留出 padding 呼吸空间。
89
+ // 默认布局(方案 A):outer=3 / frameSize=58 / padding=3 / radius=13,位图占 52/64≈81%,
90
+ // 在 DSH 列表行 30px 下比旧的 44/64≈69% 明显更大,同时保留圆角框呼吸感。
89
91
  // 只写 xlink:href 一个 href,避免同一份 base64 在文件里出现两次把体积翻倍。
90
92
  export function buildIconSvg(dataUrl, rawOptions) {
91
93
  if (!validateDataUrl(dataUrl)) {
92
94
  throw new Error('仅支持 PNG / JPEG / WebP 的 base64 图片数据。');
93
95
  }
94
96
  const o = normalizeOptions(rawOptions);
95
- const outer = 6;
96
- const frameSize = 52;
97
+ const outer = 3;
98
+ const frameSize = 58;
97
99
  const inner = frameSize - o.padding * 2;
98
100
  const ix = outer + o.padding;
99
101
  const innerRadius = Math.max(0, o.radius - o.padding);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-yanyan-icon",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "图标生成:根据上传的图片生成适配插件列表图标位的 icon.svg",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",