Skip to content

fix(scripts): sync-plugin-version 支持嵌套字段路径,修 marketplace.json 卡在 1.1.8 的老漂移 - #23

Merged
jnMetaCode merged 1 commit into
mainfrom
fix/sync-plugin-version-nested-paths
May 10, 2026
Merged

fix(scripts): sync-plugin-version 支持嵌套字段路径,修 marketplace.json 卡在 1.1.8 的老漂移#23
jnMetaCode merged 1 commit into
mainfrom
fix/sync-plugin-version-nested-paths

Conversation

@jnMetaCode

Copy link
Copy Markdown
Owner

Summary

接上 #22(v5.1.0 对齐 PR)。在那个 PR 的 sanity check 里发现的老漂移:

.claude-plugin/marketplace.jsonplugins[0].version 一直停在 1.1.8,而其他 4 个 manifest(package.json + 3 个 plugin.json)已经在 1.2.1。原因是中文版用的简化版 sync-plugin-version.js 只 match 顶层 "version": 字段,处理不了嵌套路径。

实际影响

  • Claude Code marketplace 用户看到的 superpowers-zh plugin 版本是 1.1.8,跟 npm 包真实版本不同步
  • git blame 显示 marketplace.json 自 v1.1.8 起这个字段就没动过

改动

scripts/sync-plugin-version.js

  • TARGETS 改为对象数组 { path, field },对齐上游 .version-bump.json 格式
  • 加入 .claude-plugin/marketplace.json 作为同步目标
  • field='version':保留原顶层 regex(保格式)
  • field='plugins.0.version':新增嵌套 regex ("plugins"\s*:\s*\[\s*\{[\s\S]*?"version"\s*:\s*")[^"]+("),锚定到 plugins 数组首项
  • 都用 regex 替换而非 JSON.stringify,保持原文件格式(缩进、行内/多行数组等)

.claude-plugin/marketplace.json

  • plugins[0].version: 1.1.81.2.1(追上其他 manifest)

package.json

  • scripts.version 钩子加入 git add .claude-plugin/marketplace.json

Test plan

  • 当前状态跑 sync:marketplace.json 1.1.8 → 1.2.1,其他 4 个 manifest 不动(识别为 already at
  • 升级场景:临时把 package.json bump 到 1.3.0,4 个 manifest 全部同步到 1.3.0
  • 幂等性:相同版本再跑输出 plugin manifests already at 1.2.1
  • 边界:marketplace.json diff 干净,只动 version 一行(owner/source/author/keywords 等其他字段完全没动)
  • npm pack --dry-run:90 文件 228KB(跟 chore: 跟上游 v5.1.0 对齐 — 补缺失文件、清已废弃流程、修 cursor-plugin dangling #22 merge 后一致)
  • node --check scripts/sync-plugin-version.js 语法 OK
  • CI 跑过

不在本 PR 内

  • 不引入上游 bump-version.sh 替换简化版(改动太大,下次单独评估)
  • 不支持任意 dot-path(仅 hardcode versionplugins.0.version 两种 case),避免过度工程;未来真有第 3 种再加

补上之前简化版未实现的 plugins.0.version 路径,把
.claude-plugin/marketplace.json 纳入版本同步目标。

修复 marketplace.json 卡在 1.1.8 的老漂移(自 v1.1.8 起没动过):
plugins[0].version 1.1.8 -> 1.2.1(追上其他 4 个 manifest)。

实现:
- TARGETS 改为对象数组 { path, field },对齐上游 .version-bump.json 格式
- field='version' 走顶层 regex(保留原行为)
- field='plugins.0.version' 走嵌套 regex(锚定到 plugins 数组首项)
- 都用 regex 替换而非 JSON.stringify,保持原文件格式(缩进/数组写法等)

测试:
- 升级场景 1.2.1 → 1.3.0:4 个 manifest 全部同步
- 幂等性:版本相同时输出 "already at"
- 边界:marketplace.json 其他字段完全未动(diff 仅 version 一行)
- npm pack:90 文件 228KB 不变
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant