release-skill 0.9.17 → 0.9.19
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 +10 -0
- package/.kimi-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/CHANGELOG.md +70 -2
- package/INSTALL.md +66 -9
- package/INSTALL.zh-CN.md +49 -8
- package/README.md +41 -20
- package/README.zh-CN.md +31 -19
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/consumer-contract-vectors.json +7 -7
- package/adapters/claude/bin/error-codes.json +1 -1
- package/adapters/claude/bin/foundation-resource-binding.json +1 -1
- package/adapters/claude/bin/prebuild-manifest.json +8 -4
- package/adapters/claude/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/claude/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/claude/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/claude/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/claude/bin/registry.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/claude/bin/rules.json +1 -1
- package/adapters/claude/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/claude/data/hosts/registry.json +1 -0
- package/adapters/claude/schemas/release-plan.schema.json +255 -25
- package/adapters/claude/schemas/release-project.schema.json +228 -26
- package/adapters/claude/skills/release-finish/SKILL.md +46 -7
- package/adapters/claude/skills/release-help/SKILL.md +47 -103
- package/adapters/claude/skills/release-verify/SKILL.md +2 -2
- package/adapters/claude/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/consumer-contract-vectors.json +7 -7
- package/adapters/codex/bin/error-codes.json +1 -1
- package/adapters/codex/bin/foundation-resource-binding.json +1 -1
- package/adapters/codex/bin/prebuild-manifest.json +8 -4
- package/adapters/codex/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/codex/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/codex/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/codex/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/codex/bin/registry.json +1 -1
- package/adapters/codex/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/codex/bin/rules.json +1 -1
- package/adapters/codex/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/codex/data/hosts/registry.json +1 -0
- package/adapters/codex/schemas/release-plan.schema.json +255 -25
- package/adapters/codex/schemas/release-project.schema.json +228 -26
- package/adapters/codex/skills/release-finish/SKILL.md +46 -7
- package/adapters/codex/skills/release-help/SKILL.md +49 -105
- package/adapters/codex/skills/release-verify/SKILL.md +2 -2
- package/adapters/codex/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/cursor/.cursor-plugin/plugin.json +10 -0
- package/adapters/cursor/bin/consumer-contract-vectors.json +110 -0
- package/adapters/cursor/bin/error-codes.json +161 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-contracts/LICENSE +202 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-contracts/NOTICE +10 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/LICENSE +202 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/NOTICE +10 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/THIRD_PARTY_NOTICES +142 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/LICENSE +202 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/NOTICE +10 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/native-NOTICE +2 -0
- package/adapters/cursor/bin/foundation-resource-binding.json +1 -0
- package/adapters/cursor/bin/kernel-protocol.json +60 -0
- package/adapters/cursor/bin/license-texts/Apache-2.0.txt +201 -0
- package/adapters/cursor/bin/license-texts/MIT.txt +21 -0
- package/adapters/cursor/bin/prebuild-manifest.json +83 -0
- package/adapters/cursor/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/cursor/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/cursor/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/cursor/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/cursor/bin/registry.json +347 -0
- package/adapters/cursor/bin/release-skill-local-finish.mjs +4 -0
- package/adapters/cursor/bin/release-skill.bundle.mjs +152352 -0
- package/adapters/cursor/bin/release-skill.mjs +54 -0
- package/adapters/cursor/bin/rules.json +104 -0
- package/adapters/cursor/bin/schemas/consumer-contract-vector.schema.json +149 -0
- package/adapters/cursor/data/hosts/claude/host-descriptor.json +45 -0
- package/adapters/cursor/data/hosts/codebuddy/host-descriptor.json +26 -0
- package/adapters/cursor/data/hosts/codex/host-descriptor.json +45 -0
- package/adapters/cursor/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/cursor/data/hosts/deepseek-harness/host-descriptor.json +23 -0
- package/adapters/cursor/data/hosts/kimi-code/host-descriptor.json +36 -0
- package/adapters/cursor/data/hosts/qoder/host-descriptor.json +26 -0
- package/adapters/cursor/data/hosts/registry.json +14 -0
- package/adapters/cursor/data/hosts/workbuddy/host-descriptor.json +34 -0
- package/adapters/cursor/data/licensing/registry.json +211 -0
- package/adapters/cursor/data/licensing/schema.json +207 -0
- package/adapters/cursor/native/safe-write/binding.gyp +41 -0
- package/adapters/cursor/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/adapters/cursor/native/safe-write/prebuilds.json +24 -0
- package/adapters/cursor/native/safe-write/src/safe_write.cc +2032 -0
- package/adapters/cursor/schemas/.render-manifest.json +41 -0
- package/adapters/cursor/schemas/approval-record.schema.json +115 -0
- package/adapters/cursor/schemas/artifact-lock.schema.json +111 -0
- package/adapters/cursor/schemas/artifact-plan.schema.json +52 -0
- package/adapters/cursor/schemas/artifact-policy.schema.json +76 -0
- package/adapters/cursor/schemas/evidence-event-v2.schema.json +164 -0
- package/adapters/cursor/schemas/evidence-event.schema.json +89 -0
- package/adapters/cursor/schemas/postpublish-approval-record.schema.json +47 -0
- package/adapters/cursor/schemas/release-plan.schema.json +2226 -0
- package/adapters/cursor/schemas/release-project.schema.json +1815 -0
- package/adapters/cursor/schemas/release-run.schema.json +777 -0
- package/adapters/cursor/skills/release-assess/SKILL.md +61 -0
- package/adapters/cursor/skills/release-config/SKILL.md +151 -0
- package/adapters/cursor/skills/release-docs/SKILL.md +120 -0
- package/adapters/cursor/skills/release-finish/SKILL.md +181 -0
- package/adapters/cursor/skills/release-help/SKILL.md +98 -0
- package/adapters/cursor/skills/release-marketplace/SKILL.md +157 -0
- package/adapters/cursor/skills/release-prepare/SKILL.md +136 -0
- package/adapters/cursor/skills/release-publish/SKILL.md +92 -0
- package/adapters/cursor/skills/release-reconcile/SKILL.md +81 -0
- package/adapters/cursor/skills/release-setup/SKILL.md +132 -0
- package/adapters/cursor/skills/release-verify/SKILL.md +110 -0
- package/adapters/cursor/src/schemas/adapter-build-manifest.schema.json +41 -0
- package/adapters/cursor/src/schemas/adapter-peer-verification-request.schema.json +54 -0
- package/adapters/cursor/src/schemas/adapter-peer-verification-result.schema.json +54 -0
- package/adapters/cursor/src/schemas/adapter-source.schema.json +47 -0
- package/adapters/cursor/src/schemas/audit-baseline-pin.schema.json +163 -0
- package/adapters/cursor/src/schemas/declared-read-surface-result.schema.json +61 -0
- package/adapters/cursor/src/schemas/engineering-baseline.schema.json +77 -0
- package/adapters/cursor/src/schemas/executable-identity-observation.schema.json +162 -0
- package/adapters/cursor/src/schemas/filesystem-root-binding.schema.json +14 -0
- package/adapters/cursor/src/schemas/filesystem-tree-observation.schema.json +71 -0
- package/adapters/cursor/src/schemas/fixed-set-publication-manifest.schema.json +108 -0
- package/adapters/cursor/src/schemas/fixed-set-publication-receipt.schema.json +148 -0
- package/adapters/cursor/src/schemas/host-capability-fact.schema.json +31 -0
- package/adapters/cursor/src/schemas/host-descriptor.schema.json +144 -0
- package/adapters/cursor/src/schemas/host-operation-plan.schema.json +57 -0
- package/adapters/cursor/src/schemas/host-operation-receipt.schema.json +81 -0
- package/adapters/cursor/src/schemas/host-probe-result.schema.json +30 -0
- package/adapters/cursor/src/schemas/host-registry.schema.json +18 -0
- package/adapters/cursor/src/schemas/host-verification-request.schema.json +67 -0
- package/adapters/cursor/src/schemas/host-verification-result.schema.json +149 -0
- package/adapters/cursor/src/schemas/managed-file-lock.schema.json +77 -0
- package/adapters/cursor/src/schemas/migration-manifest.schema.json +412 -0
- package/adapters/cursor/src/schemas/observation-scope.schema.json +91 -0
- package/adapters/cursor/src/schemas/operation-request.schema.json +58 -0
- package/adapters/cursor/src/schemas/operation-result.schema.json +130 -0
- package/adapters/cursor/src/schemas/platform-difference-registry.schema.json +110 -0
- package/adapters/cursor/src/schemas/plugin-verification-request.schema.json +499 -0
- package/adapters/cursor/src/schemas/plugin-verification-result.schema.json +1217 -0
- package/adapters/cursor/src/schemas/profile-adoption-declaration.schema.json +111 -0
- package/adapters/cursor/src/schemas/profile-descriptor.schema.json +99 -0
- package/adapters/cursor/src/schemas/project-manifest.schema.json +67 -0
- package/adapters/cursor/src/schemas/project-profile.schema.json +25 -0
- package/adapters/cursor/src/schemas/public-boundary-declaration.schema.json +73 -0
- package/adapters/cursor/src/schemas/report-binding.schema.json +42 -0
- package/adapters/cursor/src/schemas/report-model.schema.json +308 -0
- package/adapters/cursor/src/schemas/skill-family-directory-verification-request.schema.json +100 -0
- package/adapters/cursor/src/schemas/skill-family-directory-verification-result.schema.json +193 -0
- package/adapters/cursor/src/schemas/source-authority-receipt.schema.json +31 -0
- package/adapters/cursor/src/schemas/state-event-envelope.schema.json +38 -0
- package/adapters/cursor/src/schemas/state-snapshot-metadata.schema.json +25 -0
- package/adapters/cursor/src/schemas/structured-scan-policy.schema.json +97 -0
- package/adapters/cursor/src/schemas/surface-scan-policy.schema.json +42 -0
- package/adapters/cursor/src/schemas/timeout-policy.schema.json +24 -0
- package/adapters/cursor/src/schemas/token-estimate-record.schema.json +75 -0
- package/adapters/cursor/src/schemas/token-estimate-result.schema.json +43 -0
- package/adapters/cursor/src/schemas/watchdog-termination-envelope.schema.json +156 -0
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/consumer-contract-vectors.json +7 -7
- package/adapters/kimi/bin/error-codes.json +1 -1
- package/adapters/kimi/bin/foundation-resource-binding.json +1 -1
- package/adapters/kimi/bin/prebuild-manifest.json +8 -4
- package/adapters/kimi/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/kimi/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/kimi/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/kimi/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/kimi/bin/registry.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/kimi/bin/rules.json +1 -1
- package/adapters/kimi/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/kimi/data/hosts/registry.json +1 -0
- package/adapters/kimi/schemas/release-plan.schema.json +255 -25
- package/adapters/kimi/schemas/release-project.schema.json +228 -26
- package/adapters/kimi/skills/release-finish/SKILL.md +46 -7
- package/adapters/kimi/skills/release-help/SKILL.md +49 -105
- package/adapters/kimi/skills/release-verify/SKILL.md +2 -2
- package/adapters/kimi/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
- package/adapters/qoder/bin/consumer-contract-vectors.json +7 -7
- package/adapters/qoder/bin/error-codes.json +1 -1
- package/adapters/qoder/bin/foundation-resource-binding.json +1 -1
- package/adapters/qoder/bin/prebuild-manifest.json +8 -4
- package/adapters/qoder/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/qoder/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/qoder/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/qoder/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/qoder/bin/registry.json +1 -1
- package/adapters/qoder/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/qoder/bin/rules.json +1 -1
- package/adapters/qoder/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/qoder/data/hosts/registry.json +1 -0
- package/adapters/qoder/schemas/release-plan.schema.json +255 -25
- package/adapters/qoder/schemas/release-project.schema.json +228 -26
- package/adapters/qoder/skills/release-finish/SKILL.md +46 -7
- package/adapters/qoder/skills/release-help/SKILL.md +49 -105
- package/adapters/qoder/skills/release-verify/SKILL.md +2 -2
- package/adapters/qoder/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/consumer-contract-vectors.json +7 -7
- package/adapters/workbuddy/bin/error-codes.json +1 -1
- package/adapters/workbuddy/bin/foundation-resource-binding.json +1 -1
- package/adapters/workbuddy/bin/prebuild-manifest.json +8 -4
- package/adapters/workbuddy/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/workbuddy/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/workbuddy/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/workbuddy/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/workbuddy/bin/registry.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/workbuddy/bin/rules.json +1 -1
- package/adapters/workbuddy/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/workbuddy/data/hosts/registry.json +1 -0
- package/adapters/workbuddy/schemas/release-plan.schema.json +255 -25
- package/adapters/workbuddy/schemas/release-project.schema.json +228 -26
- package/adapters/workbuddy/skills/release-finish/SKILL.md +46 -7
- package/adapters/workbuddy/skills/release-help/SKILL.md +47 -103
- package/adapters/workbuddy/skills/release-verify/SKILL.md +2 -2
- package/adapters/workbuddy/src/schemas/host-descriptor.schema.json +9 -2
- package/bin/consumer-contract-vectors.json +7 -7
- package/bin/error-codes.json +1 -1
- package/bin/foundation-resource-binding.json +1 -1
- package/bin/prebuild-manifest.json +8 -4
- package/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/bin/registry.json +1 -1
- package/bin/release-skill-cli.mjs +115 -15
- package/bin/release-skill.bundle.mjs +4425 -1519
- package/bin/rules.json +1 -1
- package/data/hosts/cursor/host-descriptor.json +34 -0
- package/data/hosts/registry.json +1 -0
- package/package.json +7 -5
- package/platform-manifest.json +75 -9
- package/references/02-project-config.md +4 -0
- package/schemas/release-plan.schema.json +255 -25
- package/schemas/release-project.schema.json +228 -26
- package/scripts/sync-public-files.mjs +3 -22
- package/skills/release-finish/SKILL.md +46 -7
- package/skills/release-help/SKILL.md +47 -103
- package/skills/release-verify/SKILL.md +2 -2
- package/skills-src/release-finish/SKILL.md +46 -7
- package/skills-src/release-help/SKILL.md +47 -103
- package/skills-src/release-verify/SKILL.md +2 -2
- package/src/adapters/contract.mjs +1 -0
- package/src/adapters/plugin-marketplace.mjs +201 -9
- package/src/commands/post-release-finish.mjs +448 -0
- package/src/commands/post-release-local.mjs +312 -36
- package/src/commands/prepare.mjs +74 -9
- package/src/commands/publish.mjs +4 -1
- package/src/commands/ship.mjs +3 -0
- package/src/commands/verify.mjs +73 -0
- package/src/core/checkpoints.mjs +5 -2
- package/src/core/config.mjs +1 -1
- package/src/core/foundation-host-verification.mjs +168 -0
- package/src/core/plan.mjs +19 -1
- package/src/core/postpublish.mjs +9 -1
- package/src/core/run-retention.mjs +1 -1
- package/src/core/surface-host-bindings.mjs +1 -0
- package/src/core/verification-gates.mjs +1 -1
- package/src/platforms/registry.mjs +225 -16
- package/src/producers/build-adapters.mjs +21 -26
- package/src/producers/foundation-resource-projection.mjs +3 -3
- package/src/schemas/host-descriptor.schema.json +9 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { readFile } from 'node:fs/promises';
|
|
4
|
-
import { basename, dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { basename, dirname, isAbsolute, join, normalize, resolve } from 'node:path';
|
|
5
5
|
import { execFile as execFileCb } from 'node:child_process';
|
|
6
6
|
import { promisify } from 'node:util';
|
|
7
7
|
import { parseNodeMajor, meetsMinimum, computeReadinessStatus } from '../src/core/node-version.mjs';
|
|
@@ -426,9 +426,15 @@ Options:
|
|
|
426
426
|
--approve Approve the ship plan (boolean; plan digest is auto-resolved)
|
|
427
427
|
--hook-approval <path> Checkpoint approval for one requiresApproval hook (ship/distribute/postverify; repeatable)
|
|
428
428
|
--state <path> Override the durable ship state file
|
|
429
|
+
--cursor-executable-root <absolute-directory> Directory containing cursor-agent (verify/ship)
|
|
430
|
+
--cursor-user-state-root <absolute-directory> Explicit existing Cursor user state (verify/ship)
|
|
429
431
|
--update-local-hosts Update installed plugins for selected local hosts after VERIFIED
|
|
430
|
-
--hosts <ids> Comma-separated local hosts for post-release update: claude,codex,kimi,codebuddy,workbuddy,qoder. No local host is updated unless --hosts contains at least one id
|
|
432
|
+
--hosts <ids> Comma-separated local hosts for post-release update: claude,codex,kimi,codebuddy,workbuddy,qoder,cursor. No local host is updated unless --hosts contains at least one id
|
|
433
|
+
--cursor-plugins-root <absolute-directory> Required for Cursor Local installation/update; quit Cursor before running
|
|
431
434
|
--confirm-plan <digest> Confirm the exact VERIFIED plan before local host mutation
|
|
435
|
+
--finish Run the complete post-release finish orchestration and return COMPLETE/PENDING/FAILED
|
|
436
|
+
--finish-feedback <absolute-json-file> Read bound agent-reported host loading and setup results
|
|
437
|
+
--skip-local-hosts Explicitly skip host update, loading, and setup for this finish run
|
|
432
438
|
--no-hook-cache Force every prepare hook to run in full; neither read nor write the hook cache
|
|
433
439
|
--json Output results as JSON
|
|
434
440
|
--version Show version and exit
|
|
@@ -686,6 +692,8 @@ if (command === 'ship' && (args.includes('--help') || args.includes('-h'))) {
|
|
|
686
692
|
state: '--state <path>',
|
|
687
693
|
unit: '--unit <id> (repeatable before plan freeze)',
|
|
688
694
|
approve: '--approve --actor <name>',
|
|
695
|
+
cursorExecutableRoot: '--cursor-executable-root <absolute-directory>',
|
|
696
|
+
cursorUserStateRoot: '--cursor-user-state-root <absolute-directory>',
|
|
689
697
|
},
|
|
690
698
|
message: 'Repeat the same command to resume from the same state. For parallel or cross-session versions, use .release-skill/ships/<version>.json.',
|
|
691
699
|
}, null, 2));
|
|
@@ -700,6 +708,11 @@ Options:
|
|
|
700
708
|
--state <path> Specify the durable state file
|
|
701
709
|
--unit <id> Select a release unit before plan freeze (repeatable)
|
|
702
710
|
--approve --actor <name> Approve the plan bound to the current state
|
|
711
|
+
--cursor-executable-root <absolute-directory> Directory containing cursor-agent
|
|
712
|
+
--cursor-user-state-root <absolute-directory> Existing Cursor user-state directory
|
|
713
|
+
|
|
714
|
+
Cursor verification requires both directories on each verification attempt.
|
|
715
|
+
Runtime directories are private and are not saved in the plan or ship state.
|
|
703
716
|
|
|
704
717
|
Repeat the same command to resume from the same state.
|
|
705
718
|
For parallel or cross-session versions, use .release-skill/ships/<version>.json.`);
|
|
@@ -1098,6 +1111,10 @@ if (command === 'ship') {
|
|
|
1098
1111
|
adapterRegistry,
|
|
1099
1112
|
...(hasUnitSelection ? { unitIds } : {}),
|
|
1100
1113
|
...(postpublishApprovalPaths.length > 0 ? { postpublishApprovalPaths } : {}),
|
|
1114
|
+
cursorHostRuntime: {
|
|
1115
|
+
executableRoot: value('--cursor-executable-root'),
|
|
1116
|
+
existingUserStateRoot: value('--cursor-user-state-root'),
|
|
1117
|
+
},
|
|
1101
1118
|
});
|
|
1102
1119
|
if (hasJson) {
|
|
1103
1120
|
console.log(JSON.stringify(result, null, 2));
|
|
@@ -1130,9 +1147,9 @@ if (command === 'ship') {
|
|
|
1130
1147
|
const localHostUpdate = result.postRelease.localHostUpdate;
|
|
1131
1148
|
if (localHostUpdate?.promptRequired === true) {
|
|
1132
1149
|
console.log(`Post-release: ask whether to update local host plugins (${result.postRelease.localHostUpdate.hosts.join(', ')}).`);
|
|
1133
|
-
if (
|
|
1134
|
-
console.log(`Post-release command:
|
|
1135
|
-
console.log('Choose --hosts before adding --update-local-hosts
|
|
1150
|
+
if (result.postRelease.finishCommand) {
|
|
1151
|
+
console.log(`Post-release finish command: ${result.postRelease.finishCommand.argv.join(' ')}`);
|
|
1152
|
+
console.log('Choose --hosts before adding --update-local-hosts, or use --skip-local-hosts.');
|
|
1136
1153
|
}
|
|
1137
1154
|
printHubManualTargets(localHostUpdate.targets);
|
|
1138
1155
|
} else {
|
|
@@ -1525,6 +1542,48 @@ if (command === 'post-release') {
|
|
|
1525
1542
|
};
|
|
1526
1543
|
const planPath = value('--plan') ? resolve(value('--plan')) : undefined;
|
|
1527
1544
|
const runPath = value('--run') ? resolve(value('--run')) : undefined;
|
|
1545
|
+
const finishRequested = args.includes('--finish');
|
|
1546
|
+
const skipLocalHosts = args.includes('--skip-local-hosts');
|
|
1547
|
+
const feedbackValue = value('--finish-feedback');
|
|
1548
|
+
if (finishRequested || skipLocalHosts || args.includes('--finish-feedback')) {
|
|
1549
|
+
const valued = new Set([
|
|
1550
|
+
'--root', '--plan', '--run', '--confirm-plan', '--hosts',
|
|
1551
|
+
'--cursor-plugins-root', '--finish-feedback',
|
|
1552
|
+
]);
|
|
1553
|
+
const booleans = new Set(['--finish', '--skip-local-hosts', '--update-local-hosts', '--json']);
|
|
1554
|
+
const seen = new Set();
|
|
1555
|
+
let parameterError;
|
|
1556
|
+
for (let index = 1; index < args.length; index += 1) {
|
|
1557
|
+
const token = args[index];
|
|
1558
|
+
if (valued.has(token)) {
|
|
1559
|
+
if (seen.has(token)) parameterError ??= `post-release finish does not accept duplicate ${token}`;
|
|
1560
|
+
seen.add(token);
|
|
1561
|
+
const next = args[index + 1];
|
|
1562
|
+
if (!next || next.startsWith('-')) parameterError ??= `post-release finish requires a value for ${token}`;
|
|
1563
|
+
else index += 1;
|
|
1564
|
+
continue;
|
|
1565
|
+
}
|
|
1566
|
+
if (booleans.has(token)) {
|
|
1567
|
+
if (seen.has(token)) parameterError ??= `post-release finish does not accept duplicate ${token}`;
|
|
1568
|
+
seen.add(token);
|
|
1569
|
+
continue;
|
|
1570
|
+
}
|
|
1571
|
+
parameterError ??= `post-release finish does not accept ${token}`;
|
|
1572
|
+
}
|
|
1573
|
+
const rawHosts = value('--hosts');
|
|
1574
|
+
if (!finishRequested) parameterError ??= '--skip-local-hosts and --finish-feedback require --finish';
|
|
1575
|
+
if (skipLocalHosts && (args.includes('--update-local-hosts') || (typeof rawHosts === 'string' && rawHosts.trim().length > 0))) {
|
|
1576
|
+
parameterError ??= '--skip-local-hosts conflicts with --update-local-hosts and --hosts';
|
|
1577
|
+
}
|
|
1578
|
+
if (feedbackValue && (!isAbsolute(feedbackValue) || normalize(feedbackValue) !== feedbackValue)) {
|
|
1579
|
+
parameterError ??= '--finish-feedback requires a normalized absolute JSON file path';
|
|
1580
|
+
}
|
|
1581
|
+
if (parameterError) {
|
|
1582
|
+
if (hasJson) console.log(JSON.stringify({ error: 'POST_RELEASE_FINISH_INVALID', message: parameterError, exitCode: 1 }));
|
|
1583
|
+
else console.error(`Error: ${parameterError}`);
|
|
1584
|
+
await exitAfterFlush(1);
|
|
1585
|
+
}
|
|
1586
|
+
}
|
|
1528
1587
|
if (!planPath || !runPath) {
|
|
1529
1588
|
const message = 'post-release requires --plan <path> and --run <verify-or-postverify-run-path>';
|
|
1530
1589
|
if (hasJson) console.log(JSON.stringify({ error: 'MISSING_PARAMETERS', message, exitCode: 1 }));
|
|
@@ -1549,7 +1608,7 @@ if (command === 'post-release') {
|
|
|
1549
1608
|
requireDigest: true,
|
|
1550
1609
|
authorityPlanPath: planPath,
|
|
1551
1610
|
});
|
|
1552
|
-
if (!updateRequested) {
|
|
1611
|
+
if (!updateRequested || finishRequested) {
|
|
1553
1612
|
const { assertLocalFinishRun } = await import('../src/commands/post-release-local.mjs');
|
|
1554
1613
|
await assertLocalFinishRun({
|
|
1555
1614
|
plan,
|
|
@@ -1570,13 +1629,31 @@ if (command === 'post-release') {
|
|
|
1570
1629
|
.split(',')
|
|
1571
1630
|
.map((host) => host.trim())
|
|
1572
1631
|
.filter(Boolean);
|
|
1573
|
-
const
|
|
1632
|
+
const root = resolve(value('--root') ?? process.cwd());
|
|
1633
|
+
const result = finishRequested
|
|
1634
|
+
? await (async () => {
|
|
1635
|
+
const { runPostReleaseFinish } = await import('../src/commands/post-release-finish.mjs');
|
|
1636
|
+
return runPostReleaseFinish({
|
|
1637
|
+
root,
|
|
1638
|
+
plan,
|
|
1639
|
+
planPath,
|
|
1640
|
+
runPath: resolvedRunPath,
|
|
1641
|
+
selectedHosts,
|
|
1642
|
+
updateRequested,
|
|
1643
|
+
skipLocalHosts,
|
|
1644
|
+
confirmPlanDigest: value('--confirm-plan'),
|
|
1645
|
+
cursorPluginsRoot: value('--cursor-plugins-root'),
|
|
1646
|
+
feedbackPath: feedbackValue,
|
|
1647
|
+
});
|
|
1648
|
+
})()
|
|
1649
|
+
: updateRequested
|
|
1574
1650
|
? await updateLocalHostPlugins({
|
|
1575
1651
|
planPath,
|
|
1576
1652
|
runPath: resolvedRunPath,
|
|
1577
|
-
root
|
|
1653
|
+
root,
|
|
1578
1654
|
confirmPlanDigest: value('--confirm-plan'),
|
|
1579
1655
|
selectedHosts,
|
|
1656
|
+
cursorPluginsRoot: value('--cursor-plugins-root'),
|
|
1580
1657
|
})
|
|
1581
1658
|
: derivePostReleaseChecklist(plan, {
|
|
1582
1659
|
runPath: runRecord.command === 'postverify' && runRecord.status === 'DISTRIBUTED'
|
|
@@ -1588,6 +1665,14 @@ if (command === 'post-release') {
|
|
|
1588
1665
|
|
|
1589
1666
|
if (hasJson) {
|
|
1590
1667
|
console.log(JSON.stringify(result, null, 2));
|
|
1668
|
+
} else if (finishRequested) {
|
|
1669
|
+
console.log(`Post-release finish: ${result.finish.status}`);
|
|
1670
|
+
for (const [name, outcome] of Object.entries(result.finish.steps)) {
|
|
1671
|
+
console.log(` ${name}: ${outcome.status} - ${outcome.summary}`);
|
|
1672
|
+
}
|
|
1673
|
+
for (const action of result.finish.nextActions) {
|
|
1674
|
+
console.log(`Next [${action.type}] ${JSON.stringify(action)}`);
|
|
1675
|
+
}
|
|
1591
1676
|
} else if (!updateRequested) {
|
|
1592
1677
|
console.log(`Post-release status: ${result.status}`);
|
|
1593
1678
|
if (result.merge.promptRequired) console.log('Ask whether the user wants to merge the remaining branch.');
|
|
@@ -1611,6 +1696,9 @@ if (command === 'post-release') {
|
|
|
1611
1696
|
}
|
|
1612
1697
|
console.log('The release remains VERIFIED; restart updated hosts before using the new plugin bytes.');
|
|
1613
1698
|
}
|
|
1699
|
+
if (finishRequested) {
|
|
1700
|
+
await exitAfterFlush(result.finish.status === 'COMPLETE' ? 0 : result.finish.status === 'PENDING' ? 2 : 1);
|
|
1701
|
+
}
|
|
1614
1702
|
const success = !updateRequested || ['UPDATED', 'ALREADY_CURRENT', 'NO_APPLICABLE_HOSTS'].includes(result.status);
|
|
1615
1703
|
await exitAfterFlush(success ? 0 : 1);
|
|
1616
1704
|
} catch (err) {
|
|
@@ -1633,6 +1721,11 @@ if (command === 'post-release') {
|
|
|
1633
1721
|
|
|
1634
1722
|
// --- Verify command routing ---
|
|
1635
1723
|
if (command === 'verify') {
|
|
1724
|
+
const cursorValue = (flag) => {
|
|
1725
|
+
const index = args.indexOf(flag);
|
|
1726
|
+
return index !== -1 && args[index + 1] && !args[index + 1].startsWith('--')
|
|
1727
|
+
? args[index + 1] : undefined;
|
|
1728
|
+
};
|
|
1636
1729
|
|
|
1637
1730
|
const rootIdx = args.indexOf('--root');
|
|
1638
1731
|
const rawRoot = rootIdx !== -1 && args[rootIdx + 1] ? args[rootIdx + 1] : process.cwd();
|
|
@@ -1673,6 +1766,10 @@ if (command === 'verify') {
|
|
|
1673
1766
|
adapterRegistry: registry,
|
|
1674
1767
|
root,
|
|
1675
1768
|
verificationGatesAuthorized,
|
|
1769
|
+
cursorHostRuntime: {
|
|
1770
|
+
executableRoot: cursorValue('--cursor-executable-root'),
|
|
1771
|
+
existingUserStateRoot: cursorValue('--cursor-user-state-root'),
|
|
1772
|
+
},
|
|
1676
1773
|
});
|
|
1677
1774
|
if (result.status === 'VERIFIED') {
|
|
1678
1775
|
const {
|
|
@@ -1681,7 +1778,9 @@ if (command === 'verify') {
|
|
|
1681
1778
|
} = await import('../src/commands/post-release-local.mjs');
|
|
1682
1779
|
const plan = JSON.parse(await readFile(planPath, 'utf8'));
|
|
1683
1780
|
try {
|
|
1684
|
-
result.postRelease = derivePostReleaseChecklist(plan, {
|
|
1781
|
+
result.postRelease = derivePostReleaseChecklist(plan, {
|
|
1782
|
+
root, planPath, runPath: result.runPath,
|
|
1783
|
+
});
|
|
1685
1784
|
} catch (error) {
|
|
1686
1785
|
result.postRelease = unavailablePostReleaseChecklist(plan, error);
|
|
1687
1786
|
}
|
|
@@ -1709,9 +1808,9 @@ if (command === 'verify') {
|
|
|
1709
1808
|
}
|
|
1710
1809
|
if (result.postRelease?.localHostUpdate?.promptRequired === true) {
|
|
1711
1810
|
console.log(`Post-release: ask whether to update local host plugins (${result.postRelease.localHostUpdate.hosts.join(', ')}).`);
|
|
1712
|
-
if (result.postRelease.
|
|
1713
|
-
console.log(`Post-release command:
|
|
1714
|
-
console.log('Choose --hosts before adding --update-local-hosts
|
|
1811
|
+
if (result.postRelease.finishCommand) {
|
|
1812
|
+
console.log(`Post-release finish command: ${result.postRelease.finishCommand.argv.join(' ')}`);
|
|
1813
|
+
console.log('Choose --hosts before adding --update-local-hosts, or use --skip-local-hosts.');
|
|
1715
1814
|
}
|
|
1716
1815
|
printHubManualTargets(result.postRelease.localHostUpdate.targets);
|
|
1717
1816
|
} else {
|
|
@@ -1839,6 +1938,7 @@ This command creates an independent postVerify run and never reads or writes shi
|
|
|
1839
1938
|
plan = JSON.parse(await readFile(resolve(planPath), 'utf8'));
|
|
1840
1939
|
result.postRelease = derivePostReleaseChecklist(plan, {
|
|
1841
1940
|
root,
|
|
1941
|
+
planPath: resolve(planPath),
|
|
1842
1942
|
runPath: result.runPath,
|
|
1843
1943
|
postVerifyComplete: true,
|
|
1844
1944
|
});
|
|
@@ -1860,9 +1960,9 @@ This command creates an independent postVerify run and never reads or writes shi
|
|
|
1860
1960
|
} else if (result.postRelease?.localHostUpdate?.promptRequired === true) {
|
|
1861
1961
|
const localHostUpdate = result.postRelease.localHostUpdate;
|
|
1862
1962
|
console.log(`Post-release: ask whether to update local host plugins (${localHostUpdate.hosts.join(', ')}).`);
|
|
1863
|
-
if (
|
|
1864
|
-
console.log(`Post-release command:
|
|
1865
|
-
console.log('Choose --hosts before adding --update-local-hosts
|
|
1963
|
+
if (result.postRelease.finishCommand) {
|
|
1964
|
+
console.log(`Post-release finish command: ${result.postRelease.finishCommand.argv.join(' ')}`);
|
|
1965
|
+
console.log('Choose --hosts before adding --update-local-hosts, or use --skip-local-hosts.');
|
|
1866
1966
|
}
|
|
1867
1967
|
printHubManualTargets(localHostUpdate.targets);
|
|
1868
1968
|
}
|