release-skill 0.4.1 → 0.4.2
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.kimi-plugin/plugin.json +1 -1
- package/CHANGELOG.md +15 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +16 -9
- package/README.zh-CN.md +12 -8
- package/adapters/claude/.claude-plugin/marketplace.json +1 -1
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +81 -18
- package/adapters/claude/schemas/release-plan.schema.json +5 -0
- package/adapters/claude/schemas/release-project.schema.json +5 -0
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +81 -18
- package/adapters/codex/schemas/release-plan.schema.json +5 -0
- package/adapters/codex/schemas/release-project.schema.json +5 -0
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +81 -18
- package/adapters/kimi/schemas/release-plan.schema.json +5 -0
- package/adapters/kimi/schemas/release-project.schema.json +5 -0
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +81 -18
- package/adapters/workbuddy/schemas/release-plan.schema.json +5 -0
- package/adapters/workbuddy/schemas/release-project.schema.json +5 -0
- package/bin/release-skill.bundle.mjs +81 -18
- package/package.json +1 -1
- package/schemas/release-plan.schema.json +5 -0
- package/schemas/release-project.schema.json +5 -0
- package/src/adapters/plugin-marketplace.mjs +21 -5
- package/src/commands/prepare.mjs +19 -13
- package/src/core/plan.mjs +4 -3
- package/src/platforms/codebuddy.mjs +92 -10
- package/src/platforms/registry.mjs +4 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "广州市风荷科技有限公司"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"defaultPrompt": [
|
|
21
21
|
"Assess this project for release readiness.",
|
|
22
|
-
"Prepare a release plan for version 0.4.
|
|
22
|
+
"Prepare a release plan for version 0.4.2.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|
package/.kimi-plugin/plugin.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.4.2 locale=en baseline=sha256:b8676f90eb68c93e40f84ff16de18a8c472e6a06e321bcc25895799e9e6f3896 -->
|
|
4
|
+
## [0.4.2] - 2026-08-12
|
|
5
|
+
|
|
6
|
+
v0.4.2 makes the CodeBuddy consumer marketplace configurable per distribution instead of hardcoding a single marketplace, so CodeBuddy plugin distributions can target a project-declared marketplace source.
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- **Plan schema**: production plans carry the resolved codebuddy marketplace coordinates so approval and publish review the exact marketplace target.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Configurable CodeBuddy marketplace**: codebuddy-plugin distributions now accept `marketplace` and `marketplaceSource` in project configuration, and prepare threads both values into the consumer install action instead of assuming a fixed marketplace.
|
|
15
|
+
<!-- release-skill:changelog:end version=0.4.2 locale=en -->
|
|
16
|
+
|
|
17
|
+
|
|
3
18
|
<!-- release-skill:changelog:start version=0.4.1 locale=en baseline=sha256:e2ccb5ddfef6c5e00b047bbf4fa009f5f5c10b003aa2254756f6f9b73a9b3346 -->
|
|
4
19
|
## [0.4.1] - 2026-08-03
|
|
5
20
|
|
package/INSTALL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.4.
|
|
5
|
+
<!-- release-skill:release-version: 0.4.2 -->
|
|
6
6
|
## Prerequisites
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 or later
|
|
@@ -114,7 +114,7 @@ tag pinned to the exact version (never the bare repository URL, which installs
|
|
|
114
114
|
the latest release or default branch), confirm the trust prompt, then reload:
|
|
115
115
|
|
|
116
116
|
```
|
|
117
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.4.
|
|
117
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.4.2
|
|
118
118
|
/plugins reload
|
|
119
119
|
```
|
|
120
120
|
|
package/INSTALL.zh-CN.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.4.
|
|
5
|
+
<!-- release-skill:release-version: 0.4.2 -->
|
|
6
6
|
## 前置条件
|
|
7
7
|
|
|
8
8
|
- Node.js 22.0.0 或更高版本
|
|
@@ -104,7 +104,7 @@ Kimi Code 有交互式插件市场,但**没有可脚本化的非交互安装
|
|
|
104
104
|
(切勿使用裸仓库地址,它会安装最新 release 或默认分支),确认信任提示后重新加载:
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.4.
|
|
107
|
+
/plugins install https://github.com/ifoohoo/release-skill/releases/tag/release-skill-v0.4.2
|
|
108
108
|
/plugins reload
|
|
109
109
|
```
|
|
110
110
|
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[简体中文](README.zh-CN.md) · Installation: [English](INSTALL.md) / [简体中文](INSTALL.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.4.
|
|
5
|
+
<!-- release-skill:release-version: 0.4.2 -->
|
|
6
6
|
Release preparation for Claude Code, CodeBuddy, WorkBuddy, Codex, and Kimi Code, with human-edited files kept intact.
|
|
7
7
|
|
|
8
8
|
release-skill helps a maintainer answer three questions: what will be released,
|
|
@@ -14,19 +14,21 @@ Setup surfaces only the deterministic `compactSummary` review view; the full
|
|
|
14
14
|
report stays in a temporary session directory.
|
|
15
15
|
|
|
16
16
|
<!-- release-skill:managed:start id=latest-release -->
|
|
17
|
-
**0.4.
|
|
17
|
+
**0.4.2** (2026-08-12)
|
|
18
18
|
|
|
19
|
-
v0.4.
|
|
19
|
+
v0.4.2 makes the CodeBuddy consumer marketplace configurable per distribution instead of hardcoding a single marketplace, so CodeBuddy plugin distributions can target a project-declared marketplace source.
|
|
20
20
|
|
|
21
21
|
**Changed**
|
|
22
22
|
|
|
23
|
-
- **
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
- **Plan schema**: production plans carry the resolved codebuddy marketplace coordinates so approval and publish review the exact marketplace target.
|
|
24
|
+
|
|
25
|
+
**Fixed**
|
|
26
|
+
|
|
27
|
+
- **Configurable CodeBuddy marketplace**: codebuddy-plugin distributions now accept `marketplace` and `marketplaceSource` in project configuration, and prepare threads both values into the consumer install action instead of assuming a fixed marketplace.
|
|
26
28
|
<!-- release-skill:managed:end id=latest-release -->
|
|
27
29
|
|
|
28
30
|
<!-- release-skill:capability:external-write-boundary -->
|
|
29
|
-
> **Current boundary:** v0.4.
|
|
31
|
+
> **Current boundary:** v0.4.2 is the current source candidate; v0.4.1 remains
|
|
30
32
|
> the latest published release (v0.2.2 previously held
|
|
31
33
|
> published status before the platform verification convergence fix was added).
|
|
32
34
|
> v0.1.1 completed a real production release to GitHub and npm — the first
|
|
@@ -45,8 +47,8 @@ v0.4.1 is the unreleased source candidate that migrates release-skill to Apache
|
|
|
45
47
|
> publish global preflight.
|
|
46
48
|
|
|
47
49
|
<!-- release-skill:capability:safe-first-command -->
|
|
48
|
-
> **Production path verified since the v0.1.1 milestone; v0.4.
|
|
49
|
-
> source candidate and v0.4.
|
|
50
|
+
> **Production path verified since the v0.1.1 milestone; v0.4.2 is the current
|
|
51
|
+
> source candidate and v0.4.1 is the latest published release.** The npm-installed CLI is the supported user entry. Source checkout
|
|
50
52
|
> is the development/contributor fallback.
|
|
51
53
|
>
|
|
52
54
|
> **Start here:**
|
|
@@ -501,6 +503,11 @@ verification is automated. Kimi Code and CodeBuddy/WorkBuddy are returned as
|
|
|
501
503
|
`manualFollowUps` with `verifiedBySystem: false`; their completion is not a
|
|
502
504
|
condition for the automated release to reach `VERIFIED`.
|
|
503
505
|
|
|
506
|
+
A `codebuddy-plugin` distribution may optionally declare `marketplace` (and
|
|
507
|
+
`marketplaceSource`, the URL consumers use to add the marketplace) to override
|
|
508
|
+
the default unified marketplace `artifact-skill-set`; undeclared distributions
|
|
509
|
+
keep the default and produce byte-identical frozen plans.
|
|
510
|
+
|
|
504
511
|
For every npm distribution, `prepare` statically checks the exact packed
|
|
505
512
|
tarball against concrete `package.json` entry targets. `publish` and
|
|
506
513
|
`reconcile` repeat the same check on the frozen tarball before any remote
|
package/README.zh-CN.md
CHANGED
|
@@ -2,25 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · 安装指南:[中文](INSTALL.zh-CN.md) / [English](INSTALL.md)
|
|
4
4
|
|
|
5
|
-
<!-- release-skill:release-version: 0.4.
|
|
5
|
+
<!-- release-skill:release-version: 0.4.2 -->
|
|
6
6
|
面向 Claude Code、CodeBuddy、WorkBuddy、Codex 和 Kimi Code 的发布准备工具,完整保留人工维护的文件内容。
|
|
7
7
|
|
|
8
8
|
release-skill 帮助维护者回答三个问题:准备发布什么、还有哪些检查未通过、最终发布的内容是什么。它不重新生成、也不回写项目源文件。`prepare` 把每个配置的公开文件复制到隔离快照并验证字节——先冻结并供人工审阅,再从同一份冻结产物发布。`setup` 只显示确定性的 `compactSummary` 审阅视图,完整报告保留在临时会话目录中。
|
|
9
9
|
|
|
10
10
|
<!-- release-skill:managed:start id=latest-release -->
|
|
11
|
-
**0.4.
|
|
11
|
+
**0.4.2** (2026-08-12)
|
|
12
12
|
|
|
13
|
-
v0.4.
|
|
13
|
+
v0.4.2 将 CodeBuddy 消费者市场改为按分发渠道可配置,不再硬编码单一市场,CodeBuddy 插件分发可以指向项目声明的市场来源。
|
|
14
14
|
|
|
15
15
|
**变更**
|
|
16
16
|
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
- **计划模式**:生产计划携带解析后的 CodeBuddy 市场坐标,审批与发布时可核对确切的市场目标。
|
|
18
|
+
|
|
19
|
+
**修复**
|
|
20
|
+
|
|
21
|
+
- **CodeBuddy 市场可配置**:codebuddy-plugin 分发在项目配置中接受 `marketplace` 与 `marketplaceSource`,prepare 将两个值透传进消费者安装动作,不再假定固定市场。
|
|
20
22
|
<!-- release-skill:managed:end id=latest-release -->
|
|
21
23
|
|
|
22
24
|
<!-- release-skill:capability:external-write-boundary -->
|
|
23
|
-
> **当前边界:** v0.4.
|
|
25
|
+
> **当前边界:** v0.4.2 是当前源码候选,v0.4.1 仍是最新已发布版本(v0.2.2 曾处于已发布状态,后因平台验证收敛修复而更新)。
|
|
24
26
|
> v0.1.1 已完成 GitHub 与 npm 的
|
|
25
27
|
> 真实生产发布,是首次生产验证的历史里程碑,并从冻结 Git ref 完成精确 npm
|
|
26
28
|
> 安装及 Claude/Codex 消费者安装验证;"当前发布版本"与"首次生产验证里程碑"
|
|
@@ -33,7 +35,7 @@ v0.4.1 是尚未发布的源码候选:将 release-skill 调整为 Apache Licen
|
|
|
33
35
|
> 远端唯一性检查在 `publish` 全局预检执行。
|
|
34
36
|
|
|
35
37
|
<!-- release-skill:capability:safe-first-command -->
|
|
36
|
-
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.4.
|
|
38
|
+
> **生产路径自 v0.1.1 里程碑起已完成真实生产验证;v0.4.2 是当前源码候选,v0.4.1 是最新已发布版本。**
|
|
37
39
|
> npm 安装的 CLI 是受支持的用户入口;源码 checkout 保留为开发/贡献者路径。
|
|
38
40
|
>
|
|
39
41
|
> **第一条命令:**
|
|
@@ -449,6 +451,8 @@ hook 在 `prepare` 调用时运行,命令调用本身即授权执行。gate
|
|
|
449
451
|
|
|
450
452
|
每个适配器闭包都自带 CLI、skills 和 schemas 副本,安装后无需外部依赖即可运行。Claude/Codex 验证是自动化的;Kimi Code 和 CodeBuddy/WorkBuddy 以 `manualFollowUps` 返回并标记 `verifiedBySystem: false`,其完成情况不阻塞自动发布进入 `VERIFIED`。
|
|
451
453
|
|
|
454
|
+
`codebuddy-plugin` 分发可以可选地声明 `marketplace`(以及 `marketplaceSource`,即消费者添加市场所用的 URL)来覆盖默认统一市场 `artifact-skill-set`;未声明的分发保持默认值,冻结计划字节不变。
|
|
455
|
+
|
|
452
456
|
每个 npm 分发在 `prepare` 时都会针对精确封装的 tarball 静态校验
|
|
453
457
|
`package.json` 声明的具体入口。`publish` 与 `reconcile` 在任何远端动作前对同一
|
|
454
458
|
冻结 tarball 重复校验,`verify` 则在允许进入 `VERIFIED` 前对精确安装目录重复校验。
|
|
@@ -9,7 +9,7 @@ const __bundlePkgRoot = __bundleResolve(__bundleDirname(__bundleFileURLToPath(im
|
|
|
9
9
|
// Provide a real require() for CJS packages bundled into ESM (e.g. yaml, ajv).
|
|
10
10
|
const __bundleRealRequire = __bundleCreateRequire(import.meta.url);
|
|
11
11
|
// Package identity injected at build time — closure-independent --version probe.
|
|
12
|
-
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.4.
|
|
12
|
+
const __bundlePkg = Object.freeze({"name":"release-skill","version":"0.4.2"});
|
|
13
13
|
|
|
14
14
|
var __create = Object.create;
|
|
15
15
|
var __defProp = Object.defineProperty;
|
|
@@ -17400,6 +17400,19 @@ function normalizePlanForDigest2(plan) {
|
|
|
17400
17400
|
}
|
|
17401
17401
|
return normalized;
|
|
17402
17402
|
}
|
|
17403
|
+
function resolveCodeBuddyMarketplace(action) {
|
|
17404
|
+
const marketplace = action?.marketplace ?? CODEBUDDY_MARKETPLACE_NAME;
|
|
17405
|
+
if (typeof marketplace !== "string" || marketplace.length === 0) {
|
|
17406
|
+
throw new Error(`codebuddy marketplace must be a non-empty string when declared, got ${JSON.stringify(action?.marketplace)}`);
|
|
17407
|
+
}
|
|
17408
|
+
return marketplace;
|
|
17409
|
+
}
|
|
17410
|
+
function resolveCodeBuddyMarketplaceSource(action) {
|
|
17411
|
+
if (action?.marketplace === void 0 || action?.marketplace === null) {
|
|
17412
|
+
return CODEBUDDY_MARKETPLACE_SOURCE;
|
|
17413
|
+
}
|
|
17414
|
+
return typeof action.marketplaceSource === "string" && action.marketplaceSource.length > 0 ? action.marketplaceSource : null;
|
|
17415
|
+
}
|
|
17403
17416
|
async function resolveCodeBuddyBoundPlanDigest(context) {
|
|
17404
17417
|
const plan = context?.plan;
|
|
17405
17418
|
if (!plan || typeof plan !== "object" || Array.isArray(plan)) {
|
|
@@ -17440,12 +17453,14 @@ function buildCodeBuddyManualInstructions({
|
|
|
17440
17453
|
version,
|
|
17441
17454
|
ref,
|
|
17442
17455
|
attestationDir,
|
|
17443
|
-
requiresInstalledClosure
|
|
17456
|
+
requiresInstalledClosure,
|
|
17457
|
+
marketplace,
|
|
17458
|
+
marketplaceSource
|
|
17444
17459
|
}) {
|
|
17445
17460
|
return [
|
|
17446
17461
|
`CodeBuddy/WorkBuddy \u63D2\u4EF6\u5B89\u88C5\u65E0\u6CD5\u9501\u5B9A\u51BB\u7ED3 ref\uFF08codebuddy CLI marketplace add/install \u6CA1\u6709 ref \u9009\u9879\uFF0C\u8DDF\u8E2A\u9ED8\u8BA4\u5206\u652F\uFF09\uFF0C\u56E0\u6B64\u5B89\u88C5\u662F\u9700\u8981\u4EBA\u5DE5\u7ED3\u679C\u8BC1\u660E\u7684\u624B\u52A8\u6B65\u9AA4\u3002`,
|
|
17447
17462
|
`1) publish \u5B8C\u6210\u6240\u6709\u8FDC\u7AEF\u5199\u5165\u540E\u8FDB\u5165 PUBLISHED \u72B6\u6001\uFF08\u81EA\u52A8\u5316 Git \u5206\u652F/\u6807\u7B7E\u3001npm \u548C GitHub Release \u5199\u5165\u5DF2\u5B8C\u6210\uFF09\u3002\u6B64 codebuddy \u68C0\u67E5\u70B9\u6807\u8BB0\u4E3A\u9700\u8981\u4EBA\u5DE5\u5B89\u88C5\u3002`,
|
|
17448
|
-
`2) \u4ECE\u7EDF\u4E00\u5E02\u573A "${
|
|
17463
|
+
`2) \u4ECE\u7EDF\u4E00\u5E02\u573A "${marketplace}"${marketplaceSource ? ` (${marketplaceSource})` : ""} \u5B89\u88C5 ${plugin}\u3002\u786E\u8BA4\u5B89\u88C5\u7684\u63D2\u4EF6\u7248\u672C\u7B49\u4E8E\u51BB\u7ED3\u7248\u672C ${version}\u3002`,
|
|
17449
17464
|
`3) \u5C06\u4EBA\u5DE5\u7ED3\u679C JSON \u5199\u5165: ${attestationDir}/${CODEBUDDY_ATTESTATION_FILE}`,
|
|
17450
17465
|
` \u5FC5\u586B\u5B57\u6BB5: platform="codebuddy", version, planDigest\uFF08\u51BB\u7ED3\u8BA1\u5212\u6458\u8981\uFF09, result("passed" \u6216 "failed"), actor\uFF08\u786E\u8BA4\u4EBA\uFF09, confirmedAt\uFF08ISO 8601 \u65F6\u95F4\u6233\uFF09${requiresInstalledClosure ? '\uFF0CinstallChannel("desktop" \u6216 "cli")\uFF0CinstallPath\uFF08\u5B9E\u9645\u5B89\u88C5\u540E\u7684\u63D2\u4EF6\u76EE\u5F55\uFF09' : ""}`,
|
|
17451
17466
|
` \u53EF\u9009\u5B57\u6BB5: note\uFF08\u5907\u6CE8\uFF09`,
|
|
@@ -17509,12 +17524,29 @@ function validateCodeBuddyAttestation(attestation, action, isoNow, boundPlanDige
|
|
|
17509
17524
|
return { valid: false, error: 'codebuddy attestation installPath must not contain path traversal ("..")', normalized: null };
|
|
17510
17525
|
}
|
|
17511
17526
|
if (normalized.installChannel === "cli") {
|
|
17512
|
-
|
|
17527
|
+
let resolvedMarketplace;
|
|
17528
|
+
try {
|
|
17529
|
+
resolvedMarketplace = resolveCodeBuddyMarketplace(action);
|
|
17530
|
+
} catch (resolveErr) {
|
|
17531
|
+
return { valid: false, error: resolveErr.message, normalized: null };
|
|
17532
|
+
}
|
|
17533
|
+
const expectedSuffix = `.workbuddy/plugins/marketplaces/${resolvedMarketplace}/plugins/${action.plugin}`;
|
|
17513
17534
|
if (!normalized.installPath.endsWith(expectedSuffix)) {
|
|
17514
17535
|
return { valid: false, error: `codebuddy CLI attestation installPath must end with "${expectedSuffix}", got "${normalized.installPath}"`, normalized: null };
|
|
17515
17536
|
}
|
|
17516
17537
|
}
|
|
17517
17538
|
}
|
|
17539
|
+
if (normalized.marketplace !== void 0) {
|
|
17540
|
+
let resolvedMarketplace;
|
|
17541
|
+
try {
|
|
17542
|
+
resolvedMarketplace = resolveCodeBuddyMarketplace(action);
|
|
17543
|
+
} catch (resolveErr) {
|
|
17544
|
+
return { valid: false, error: resolveErr.message, normalized: null };
|
|
17545
|
+
}
|
|
17546
|
+
if (normalized.marketplace !== resolvedMarketplace) {
|
|
17547
|
+
return { valid: false, error: `codebuddy attestation marketplace "${normalized.marketplace}" does not match the resolved marketplace "${resolvedMarketplace}"`, normalized: null };
|
|
17548
|
+
}
|
|
17549
|
+
}
|
|
17518
17550
|
if (normalized.result !== "passed" && normalized.result !== "failed") {
|
|
17519
17551
|
return { valid: false, error: `codebuddy attestation result "${normalized.result}" must be "passed" or "failed"`, normalized: null };
|
|
17520
17552
|
}
|
|
@@ -17607,6 +17639,17 @@ async function executeCodeBuddyManualRequirement(action, context) {
|
|
|
17607
17639
|
});
|
|
17608
17640
|
}
|
|
17609
17641
|
const ref = action.ref ?? `v${action.version}`;
|
|
17642
|
+
let marketplace;
|
|
17643
|
+
try {
|
|
17644
|
+
marketplace = resolveCodeBuddyMarketplace(action);
|
|
17645
|
+
} catch (marketplaceErr) {
|
|
17646
|
+
return createResult({
|
|
17647
|
+
actionType,
|
|
17648
|
+
status: ActionStatus.EXECUTE_FAILED,
|
|
17649
|
+
error: marketplaceErr.message
|
|
17650
|
+
});
|
|
17651
|
+
}
|
|
17652
|
+
const marketplaceSource = resolveCodeBuddyMarketplaceSource(action);
|
|
17610
17653
|
let attestationDir;
|
|
17611
17654
|
try {
|
|
17612
17655
|
attestationDir = codebuddyAuthorityDir(context, planDigest, action.plugin);
|
|
@@ -17622,7 +17665,9 @@ async function executeCodeBuddyManualRequirement(action, context) {
|
|
|
17622
17665
|
version: action.version,
|
|
17623
17666
|
ref,
|
|
17624
17667
|
attestationDir,
|
|
17625
|
-
requiresInstalledClosure: Boolean(context.plan?.skillResourceClosure)
|
|
17668
|
+
requiresInstalledClosure: Boolean(context.plan?.skillResourceClosure),
|
|
17669
|
+
marketplace,
|
|
17670
|
+
marketplaceSource
|
|
17626
17671
|
});
|
|
17627
17672
|
const requirement = {
|
|
17628
17673
|
kind: "codebuddy-manual-install-requirement",
|
|
@@ -17632,6 +17677,8 @@ async function executeCodeBuddyManualRequirement(action, context) {
|
|
|
17632
17677
|
repo: action.repo,
|
|
17633
17678
|
ref,
|
|
17634
17679
|
entrySkill: action.entrySkill,
|
|
17680
|
+
marketplace,
|
|
17681
|
+
...marketplaceSource ? { marketplaceSource } : {},
|
|
17635
17682
|
planDigest,
|
|
17636
17683
|
attestationDir,
|
|
17637
17684
|
attestationFile: CODEBUDDY_ATTESTATION_FILE,
|
|
@@ -17644,7 +17691,7 @@ async function executeCodeBuddyManualRequirement(action, context) {
|
|
|
17644
17691
|
confirmedAt: "<ISO 8601 timestamp>",
|
|
17645
17692
|
...context.plan?.skillResourceClosure ? {
|
|
17646
17693
|
installChannel: '<"desktop" or "cli">',
|
|
17647
|
-
installPath: `<actual .workbuddy/plugins/marketplaces/${
|
|
17694
|
+
installPath: `<actual .workbuddy/plugins/marketplaces/${marketplace}/plugins/${action.plugin} directory>`
|
|
17648
17695
|
} : {},
|
|
17649
17696
|
note: "<optional note>"
|
|
17650
17697
|
},
|
|
@@ -17736,6 +17783,8 @@ var init_codebuddy = __esm({
|
|
|
17736
17783
|
CODEBUDDY_ATTESTATION_FILE = "release-skill-codebuddy-attestation.json";
|
|
17737
17784
|
CODEBUDDY_MARKETPLACE_NAME = "artifact-skill-set";
|
|
17738
17785
|
CODEBUDDY_MARKETPLACE_SOURCE = "https://github.com/ifoohoo/artifact-skill-set";
|
|
17786
|
+
__name(resolveCodeBuddyMarketplace, "resolveCodeBuddyMarketplace");
|
|
17787
|
+
__name(resolveCodeBuddyMarketplaceSource, "resolveCodeBuddyMarketplaceSource");
|
|
17739
17788
|
CODEBUDDY_PLUGIN_MANIFEST_RELATIVE = join4(".codebuddy-plugin", "plugin.json");
|
|
17740
17789
|
CODEBUDDY_MAX_ATTESTATION_VALIDITY_MS = 24 * 60 * 60 * 1e3;
|
|
17741
17790
|
__name(resolveCodeBuddyBoundPlanDigest, "resolveCodeBuddyBoundPlanDigest");
|
|
@@ -18465,9 +18514,10 @@ var init_registry = __esm({
|
|
|
18465
18514
|
marketplace: ".claude-plugin/marketplace.json"
|
|
18466
18515
|
}),
|
|
18467
18516
|
marketplaceSourceForm: null,
|
|
18468
|
-
// codebuddy installs from a unified marketplace
|
|
18469
|
-
//
|
|
18470
|
-
// ./codebuddy.mjs); the
|
|
18517
|
+
// codebuddy installs from a unified marketplace whose identity is optional
|
|
18518
|
+
// on the action: a distribution may declare `marketplace` to override the
|
|
18519
|
+
// default constant in ./codebuddy.mjs (resolveCodeBuddyMarketplace); the
|
|
18520
|
+
// entry-version binding does not apply either way (null = N/A).
|
|
18471
18521
|
marketplaceEntryCarriesVersion: null,
|
|
18472
18522
|
// codebuddy has no marketplace add that can pin a frozen ref (attestation
|
|
18473
18523
|
// loop instead), so the marketplace ref form does not apply (null = N/A).
|
|
@@ -74267,15 +74317,16 @@ function createPluginMarketplaceAdapter(deps = {}) {
|
|
|
74267
74317
|
try {
|
|
74268
74318
|
attestation = JSON.parse(await readFile18(resolve21(attestationDir, CODEBUDDY_ATTESTATION_FILE), "utf8"));
|
|
74269
74319
|
} catch {
|
|
74320
|
+
const marketplaceSource = resolveCodeBuddyMarketplaceSource(action);
|
|
74270
74321
|
return createResult({
|
|
74271
74322
|
actionType,
|
|
74272
74323
|
status: ActionStatus.OBSERVED,
|
|
74273
74324
|
observation: {
|
|
74274
74325
|
installed: false,
|
|
74275
74326
|
manualInstallRequired: true,
|
|
74276
|
-
marketplaceSource:
|
|
74327
|
+
...marketplaceSource ? { marketplaceSource } : {},
|
|
74277
74328
|
attestationDir,
|
|
74278
|
-
error: `codebuddy attestation is missing; write ${resolve21(attestationDir, CODEBUDDY_ATTESTATION_FILE)} after the manual install (marketplace ${
|
|
74329
|
+
error: `codebuddy attestation is missing; write ${resolve21(attestationDir, CODEBUDDY_ATTESTATION_FILE)} after the manual install${marketplaceSource ? ` (marketplace ${marketplaceSource})` : ""}`
|
|
74279
74330
|
}
|
|
74280
74331
|
});
|
|
74281
74332
|
}
|
|
@@ -74328,7 +74379,17 @@ function createPluginMarketplaceAdapter(deps = {}) {
|
|
|
74328
74379
|
});
|
|
74329
74380
|
}
|
|
74330
74381
|
const normalizedPath = normalizedAttestation.installPath.replaceAll("\\", "/");
|
|
74331
|
-
|
|
74382
|
+
let resolvedMarketplace;
|
|
74383
|
+
try {
|
|
74384
|
+
resolvedMarketplace = resolveCodeBuddyMarketplace(action);
|
|
74385
|
+
} catch (resolveErr) {
|
|
74386
|
+
return createResult({
|
|
74387
|
+
actionType,
|
|
74388
|
+
status: ActionStatus.OBSERVED,
|
|
74389
|
+
observation: { installed: false, error: resolveErr.message }
|
|
74390
|
+
});
|
|
74391
|
+
}
|
|
74392
|
+
const expectedSuffix = `.workbuddy/plugins/marketplaces/${resolvedMarketplace}/plugins/${action.plugin}`;
|
|
74332
74393
|
if (!normalizedPath.endsWith(expectedSuffix)) {
|
|
74333
74394
|
return createResult({
|
|
74334
74395
|
actionType,
|
|
@@ -80887,7 +80948,6 @@ function buildExternalActions(unitResults, resolvedVersions, productionAssets, e
|
|
|
80887
80948
|
for (const platform of PLATFORMS) {
|
|
80888
80949
|
const dist = frozenUnitDists ? frozenUnitDists.find((d) => d.type === platform.distributionType) : (unit.distributions ?? []).find((d) => d.type === platform.distributionType);
|
|
80889
80950
|
if (!dist) continue;
|
|
80890
|
-
const requiresMarketplace = platform.schemaRequiredFields.includes("marketplace");
|
|
80891
80951
|
const timeoutMs = Number.isInteger(dist.timeoutMs) ? dist.timeoutMs : 3e5;
|
|
80892
80952
|
const externalMarketplace = dist.marketplaceRepo !== void 0 && dist.marketplaceRepo !== null;
|
|
80893
80953
|
const marketplaceSourceType = dist.marketplaceSourceType ?? (externalMarketplace ? "standalone-index" : "bundled-family");
|
|
@@ -80921,7 +80981,8 @@ function buildExternalActions(unitResults, resolvedVersions, productionAssets, e
|
|
|
80921
80981
|
parameters: {
|
|
80922
80982
|
consumer: platform.id,
|
|
80923
80983
|
plugin: dist.plugin,
|
|
80924
|
-
...
|
|
80984
|
+
...dist.marketplace !== void 0 ? { marketplace: dist.marketplace } : {},
|
|
80985
|
+
...dist.marketplaceSource !== void 0 ? { marketplaceSource: dist.marketplaceSource } : {},
|
|
80925
80986
|
repo: externalMarketplace ? dist.marketplaceRepo : unit.publicRepo,
|
|
80926
80987
|
version,
|
|
80927
80988
|
entrySkill: dist.entrySkill,
|
|
@@ -80948,7 +81009,8 @@ function buildExternalActions(unitResults, resolvedVersions, productionAssets, e
|
|
|
80948
81009
|
expected: {
|
|
80949
81010
|
installed: true,
|
|
80950
81011
|
plugin: dist.plugin,
|
|
80951
|
-
...
|
|
81012
|
+
...dist.marketplace !== void 0 ? { marketplace: dist.marketplace } : {},
|
|
81013
|
+
...dist.marketplaceSource !== void 0 ? { marketplaceSource: dist.marketplaceSource } : {},
|
|
80952
81014
|
version,
|
|
80953
81015
|
entrySkill: dist.entrySkill,
|
|
80954
81016
|
...externalMarketplace ? { marketplaceLocation: "external", repo: dist.marketplaceRepo } : {}
|
|
@@ -81085,7 +81147,6 @@ function buildExternalActions(unitResults, resolvedVersions, productionAssets, e
|
|
|
81085
81147
|
for (const platform of PLATFORMS) {
|
|
81086
81148
|
const dist = frozenUnitDists ? frozenUnitDists.find((d) => d.type === platform.distributionType) : (unit.distributions ?? []).find((d) => d.type === platform.distributionType);
|
|
81087
81149
|
if (!dist) continue;
|
|
81088
|
-
const requiresMarketplace = platform.schemaRequiredFields.includes("marketplace");
|
|
81089
81150
|
const timeoutMs = Number.isInteger(dist.timeoutMs) ? dist.timeoutMs : 3e5;
|
|
81090
81151
|
const externalMarketplace = dist.marketplaceRepo !== void 0 && dist.marketplaceRepo !== null;
|
|
81091
81152
|
const freeze = externalMarketplace ? externalFreezes.get(`${unit.id} ${dist.type}`) : null;
|
|
@@ -81119,7 +81180,8 @@ function buildExternalActions(unitResults, resolvedVersions, productionAssets, e
|
|
|
81119
81180
|
parameters: {
|
|
81120
81181
|
consumer: platform.id,
|
|
81121
81182
|
plugin: dist.plugin,
|
|
81122
|
-
...
|
|
81183
|
+
...dist.marketplace !== void 0 ? { marketplace: dist.marketplace } : {},
|
|
81184
|
+
...dist.marketplaceSource !== void 0 ? { marketplaceSource: dist.marketplaceSource } : {},
|
|
81123
81185
|
repo: externalMarketplace ? dist.marketplaceRepo : unit.publicRepo,
|
|
81124
81186
|
ref: externalMarketplace ? freeze.ref : resolvedTag,
|
|
81125
81187
|
version: unitVersion,
|
|
@@ -81158,7 +81220,8 @@ function buildExternalActions(unitResults, resolvedVersions, productionAssets, e
|
|
|
81158
81220
|
installed: true,
|
|
81159
81221
|
consumer: platform.id,
|
|
81160
81222
|
plugin: dist.plugin,
|
|
81161
|
-
...
|
|
81223
|
+
...dist.marketplace !== void 0 ? { marketplace: dist.marketplace } : {},
|
|
81224
|
+
...dist.marketplaceSource !== void 0 ? { marketplaceSource: dist.marketplaceSource } : {},
|
|
81162
81225
|
repo: externalMarketplace ? dist.marketplaceRepo : unit.publicRepo,
|
|
81163
81226
|
version: unitVersion,
|
|
81164
81227
|
ref: externalMarketplace ? freeze.ref : resolvedTag,
|
|
@@ -398,6 +398,11 @@
|
|
|
398
398
|
"minLength": 1,
|
|
399
399
|
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
400
400
|
},
|
|
401
|
+
"marketplaceSource": {
|
|
402
|
+
"type": "string",
|
|
403
|
+
"minLength": 1,
|
|
404
|
+
"description": "消费者添加统一市场所用的来源 URL(如 codebuddy plugin marketplace add);可选,仅在可知时声明"
|
|
405
|
+
},
|
|
401
406
|
"marketplaceRepo": {
|
|
402
407
|
"type": "string",
|
|
403
408
|
"pattern": "^[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*$",
|
|
@@ -191,6 +191,11 @@
|
|
|
191
191
|
"minLength": 1,
|
|
192
192
|
"pattern": "^[a-z0-9][a-z0-9._-]*$"
|
|
193
193
|
},
|
|
194
|
+
"marketplaceSource": {
|
|
195
|
+
"type": "string",
|
|
196
|
+
"minLength": 1,
|
|
197
|
+
"description": "消费者添加统一市场所用的来源 URL(如 codebuddy plugin marketplace add);可选,仅在可知时声明"
|
|
198
|
+
},
|
|
194
199
|
"marketplaceRepo": {
|
|
195
200
|
"type": "string",
|
|
196
201
|
"pattern": "^[a-z0-9][a-z0-9._-]*/[a-z0-9][a-z0-9._-]*$",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "release-skill",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "广州市风荷科技有限公司"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"defaultPrompt": [
|
|
21
21
|
"Assess this project for release readiness.",
|
|
22
|
-
"Prepare a release plan for version 0.4.
|
|
22
|
+
"Prepare a release plan for version 0.4.2.",
|
|
23
23
|
"Help me understand the release workflow."
|
|
24
24
|
]
|
|
25
25
|
}
|