release-skill 0.9.21 → 0.9.22
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/plugin.json +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.cursor-plugin/plugin.json +1 -1
- package/.kimi-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/CHANGELOG.md +26 -0
- package/INSTALL.md +2 -2
- package/INSTALL.zh-CN.md +2 -2
- package/README.md +12 -14
- package/README.zh-CN.md +12 -14
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +26 -11
- package/adapters/claude/skills/release-help/SKILL.md +2 -2
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/release-skill.bundle.mjs +26 -11
- package/adapters/codex/skills/release-help/SKILL.md +2 -2
- package/adapters/cursor/.cursor-plugin/plugin.json +1 -1
- package/adapters/cursor/bin/release-skill.bundle.mjs +26 -11
- package/adapters/cursor/skills/release-help/SKILL.md +2 -2
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +26 -11
- package/adapters/kimi/skills/release-help/SKILL.md +2 -2
- package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
- package/adapters/qoder/bin/release-skill.bundle.mjs +26 -11
- package/adapters/qoder/skills/release-help/SKILL.md +2 -2
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +26 -11
- package/adapters/workbuddy/skills/release-help/SKILL.md +2 -2
- package/bin/release-skill.bundle.mjs +26 -11
- package/package.json +1 -1
- package/platform-manifest.json +4 -4
- package/skills/release-help/SKILL.md +2 -2
- package/skills-src/release-help/SKILL.md +2 -2
- package/src/commands/post-release-local.mjs +24 -13
package/platform-manifest.json
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
3
|
"platformId": "release-skill",
|
|
4
4
|
"platformName": "release-skill Plugin Platform",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.22",
|
|
6
6
|
"logicalRoot": "skills-src/",
|
|
7
|
-
"logicalRootDigest": "
|
|
8
|
-
"projectionDigest": "
|
|
9
|
-
"projectionId": "release-skill:platform:0.9.
|
|
7
|
+
"logicalRootDigest": "f189a94c83be3c2d898867b42302432c5c93083dacdb110ce632a6e1d8d3e2fd",
|
|
8
|
+
"projectionDigest": "fc361c1567bacfe4b32c984a1ce882d24a5e0e0f7f212e21e73a43bb5bb59392",
|
|
9
|
+
"projectionId": "release-skill:platform:0.9.22",
|
|
10
10
|
"manifestRequired": true,
|
|
11
11
|
"projectionSources": {
|
|
12
12
|
"skills-src-root": {
|
|
@@ -28,9 +28,9 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
28
28
|
|
|
29
29
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
30
30
|
|
|
31
|
-
## 0.9.
|
|
31
|
+
## 0.9.22 候选边界
|
|
32
32
|
|
|
33
|
-
当前 0.9.
|
|
33
|
+
当前 0.9.22 候选精确消费 Foundation 0.21.0 的公开包根 API。0.9.22 仍是源码候选,不能从本说明推断已批准、发布或验证。
|
|
34
34
|
|
|
35
35
|
冻结前,`prepare` 或新建 `ship` 状态可重复传入 `--unit <id>`;不传则选择全部单元。延期单元不进入计划,也不获得发布状态。完整配置、生成物新鲜度和顶层 Hook 仍覆盖全项目;`publicSourceAuthorityReceipt` 的 coordinator 与 subjects 必须共同选择。冻结后以 `plan.units` 为唯一范围,publish、reconcile、verify、distribute 不再接受 `--unit`。
|
|
36
36
|
|
|
@@ -28,9 +28,9 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
28
28
|
|
|
29
29
|
治理诊断只运行 release-skill 自己的只读检查程序,不运行目标 Skill、业务脚本、构建、hook 或发布动作,也不把 `prepare`、`verify`、`release-finish` 当作静态治理入口。用户要求实际接入或发布时,把已有授权带到对应原业务入口;各入口继续执行原有确认、副作用和状态机合同。
|
|
30
30
|
|
|
31
|
-
## 0.9.
|
|
31
|
+
## 0.9.22 候选边界
|
|
32
32
|
|
|
33
|
-
当前 0.9.
|
|
33
|
+
当前 0.9.22 候选精确消费 Foundation 0.21.0 的公开包根 API。0.9.22 仍是源码候选,不能从本说明推断已批准、发布或验证。
|
|
34
34
|
|
|
35
35
|
冻结前,`prepare` 或新建 `ship` 状态可重复传入 `--unit <id>`;不传则选择全部单元。延期单元不进入计划,也不获得发布状态。完整配置、生成物新鲜度和顶层 Hook 仍覆盖全项目;`publicSourceAuthorityReceipt` 的 coordinator 与 subjects 必须共同选择。冻结后以 `plan.units` 为唯一范围,publish、reconcile、verify、distribute 不再接受 `--unit`。
|
|
36
36
|
|
|
@@ -720,7 +720,7 @@ function isCodeBuddyResidualEnvelope(error) {
|
|
|
720
720
|
}
|
|
721
721
|
|
|
722
722
|
function isCodeBuddyReadCommand(target, command, args) {
|
|
723
|
-
return target.host === 'codebuddy'
|
|
723
|
+
return (target.host === 'codebuddy' || target.host === 'workbuddy')
|
|
724
724
|
&& (command === 'codebuddy' || command === 'cbc' || command === CODEBUDDY_MACOS_PATH)
|
|
725
725
|
&& Array.isArray(args)
|
|
726
726
|
&& (
|
|
@@ -732,7 +732,7 @@ function isCodeBuddyReadCommand(target, command, args) {
|
|
|
732
732
|
}
|
|
733
733
|
|
|
734
734
|
function isCodeBuddyWriteCommand(target, command, args, kind) {
|
|
735
|
-
if (target.host
|
|
735
|
+
if (!['codebuddy', 'workbuddy'].includes(target.host) || !['codebuddy', 'cbc', CODEBUDDY_MACOS_PATH].includes(command)) return false;
|
|
736
736
|
const expected = kind === 'marketplace-update'
|
|
737
737
|
? ['plugin', 'marketplace', 'update', target.marketplace]
|
|
738
738
|
: ['plugin', 'update', `${target.plugin}@${target.marketplace}`, '--scope', 'user'];
|
|
@@ -754,14 +754,14 @@ async function runCodeBuddyRead(target, command, args, label, env, run) {
|
|
|
754
754
|
}
|
|
755
755
|
}
|
|
756
756
|
|
|
757
|
-
function exactCodeBuddyMarketplaceObservation(target, stdout) {
|
|
757
|
+
function exactCodeBuddyMarketplaceObservation(target, stdout, { acceptedTypes = ['git'] } = {}) {
|
|
758
758
|
const parsed = parseJson(stdout, `${target.host} marketplace list`);
|
|
759
759
|
if (!Array.isArray(parsed)) throw new Error(`${target.host} marketplace list did not return an array`);
|
|
760
760
|
const matches = parsed.filter((entry) => entry?.name === target.marketplace);
|
|
761
761
|
if (matches.length !== 1) {
|
|
762
762
|
throw new Error(`${target.host} marketplace list did not contain exactly one ${target.marketplace}`);
|
|
763
763
|
}
|
|
764
|
-
if (matches[0].type
|
|
764
|
+
if (!acceptedTypes.includes(matches[0].type)) {
|
|
765
765
|
throw new Error(`${target.host} marketplace ${target.marketplace} is not a git marketplace`);
|
|
766
766
|
}
|
|
767
767
|
return { installed: true, exact: true, found: matches[0] };
|
|
@@ -1228,13 +1228,14 @@ async function observeHubMarketplace(target, command, env, run) {
|
|
|
1228
1228
|
if (!observed.installed) return observed;
|
|
1229
1229
|
return { ...observed, commit: await observeHubCheckout(target, observed.root, env, run) };
|
|
1230
1230
|
}
|
|
1231
|
-
const
|
|
1231
|
+
const codeBuddyFamily = target.host === 'codebuddy' || target.host === 'workbuddy';
|
|
1232
|
+
const listed = codeBuddyFamily
|
|
1232
1233
|
? (await runCodeBuddyRead(target, command, CODEBUDDY_MARKETPLACE_LIST_ARGS, 'codebuddy marketplace list', env, run)).output
|
|
1233
1234
|
: await run(command, [...CODEBUDDY_MARKETPLACE_LIST_ARGS], { env });
|
|
1234
1235
|
const entries = parseJson(listed.stdout, `${target.host} marketplace list`);
|
|
1235
1236
|
if (!Array.isArray(entries)) throw new Error(`${target.host} marketplace list did not return an array`);
|
|
1236
1237
|
if (!entries.some((entry) => entry?.name === target.marketplace)) return { installed: false };
|
|
1237
|
-
exactCodeBuddyMarketplaceObservation(target, listed.stdout);
|
|
1238
|
+
exactCodeBuddyMarketplaceObservation(target, listed.stdout, { acceptedTypes: ['git', 'github'] });
|
|
1238
1239
|
const root = await resolveContained(env.CODEBUDDY_CONFIG_DIR, `plugins/marketplaces/${target.marketplace}`);
|
|
1239
1240
|
return { installed: true, root, commit: await observeHubCheckout(target, root, env, run) };
|
|
1240
1241
|
}
|
|
@@ -1243,7 +1244,7 @@ async function runHubStructuredUpdate(target, detected, run, { plan, root, verif
|
|
|
1243
1244
|
const env = hostEnvironment(target.host);
|
|
1244
1245
|
const codeBuddy = target.host === 'codebuddy' || target.host === 'workbuddy';
|
|
1245
1246
|
const readPlugin = async () => {
|
|
1246
|
-
const output =
|
|
1247
|
+
const output = codeBuddy
|
|
1247
1248
|
? (await runCodeBuddyRead(target, detected.command, CODEBUDDY_PLUGIN_LIST_ARGS, 'codebuddy plugin list', env, run)).output
|
|
1248
1249
|
: await run(detected.command, ['plugin', 'list', '--json'], { env });
|
|
1249
1250
|
const listed = parseJson(output.stdout, `${target.host} plugin list`);
|
|
@@ -1343,9 +1344,14 @@ async function runStructuredUpdate(target, detected, run, {
|
|
|
1343
1344
|
if (target.targetKind === 'hub-backed') return runHubStructuredUpdate(target, detected, run, { plan, root, verifyInstalledPayload });
|
|
1344
1345
|
if (target.host === 'codebuddy' || target.host === 'workbuddy') {
|
|
1345
1346
|
const env = hostEnvironment(target.host);
|
|
1346
|
-
const listedObservation =
|
|
1347
|
-
|
|
1348
|
-
|
|
1347
|
+
const listedObservation = await runCodeBuddyRead(
|
|
1348
|
+
target,
|
|
1349
|
+
detected.command,
|
|
1350
|
+
CODEBUDDY_PLUGIN_LIST_ARGS,
|
|
1351
|
+
`${target.host} plugin list`,
|
|
1352
|
+
env,
|
|
1353
|
+
run,
|
|
1354
|
+
);
|
|
1349
1355
|
const listed = listedObservation.output;
|
|
1350
1356
|
const observed = exactPluginObservation(target, listed.stdout);
|
|
1351
1357
|
if (
|
|
@@ -1421,9 +1427,14 @@ async function runStructuredUpdate(target, detected, run, {
|
|
|
1421
1427
|
pluginRecovered = true;
|
|
1422
1428
|
}
|
|
1423
1429
|
if (!pluginRecovered) {
|
|
1424
|
-
const afterList =
|
|
1425
|
-
|
|
1426
|
-
|
|
1430
|
+
const afterList = await runCodeBuddyRead(
|
|
1431
|
+
target,
|
|
1432
|
+
detected.command,
|
|
1433
|
+
CODEBUDDY_PLUGIN_LIST_ARGS,
|
|
1434
|
+
`${target.host} plugin list`,
|
|
1435
|
+
env,
|
|
1436
|
+
run,
|
|
1437
|
+
);
|
|
1427
1438
|
after = exactPluginObservation(target, afterList.output.stdout);
|
|
1428
1439
|
}
|
|
1429
1440
|
if (!after.exact) throw new Error(`${target.host} did not update to the frozen plugin identity`);
|