@lesliechan721/aw 0.1.0-beta.3
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/dist/authoring/assets/aw-config.d.mts +2 -0
- package/dist/authoring/assets/aw-config.mjs +556 -0
- package/dist/authoring/assets/aw-config.mjs.map +1 -0
- package/dist/authoring/scripts/add-skill.d.mts +2 -0
- package/dist/authoring/scripts/add-skill.mjs +355 -0
- package/dist/authoring/scripts/add-skill.mjs.map +1 -0
- package/dist/authoring/scripts/check-plugin-versions.d.mts +2 -0
- package/dist/authoring/scripts/check-plugin-versions.mjs +5 -0
- package/dist/authoring/scripts/check-plugin-versions.mjs.map +1 -0
- package/dist/authoring/scripts/init-plugin.d.mts +2 -0
- package/dist/authoring/scripts/init-plugin.mjs +512 -0
- package/dist/authoring/scripts/init-plugin.mjs.map +1 -0
- package/dist/authoring/scripts/lib/javascript-import-scanner.d.mts +4 -0
- package/dist/authoring/scripts/lib/javascript-import-scanner.mjs +261 -0
- package/dist/authoring/scripts/lib/javascript-import-scanner.mjs.map +1 -0
- package/dist/authoring/scripts/lib/plugin-root.d.mts +26 -0
- package/dist/authoring/scripts/lib/plugin-root.mjs +125 -0
- package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -0
- package/dist/authoring/scripts/lib/plugin-version-check.d.mts +55 -0
- package/dist/authoring/scripts/lib/plugin-version-check.mjs +777 -0
- package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -0
- package/dist/authoring/scripts/lib/semver.d.mts +9 -0
- package/dist/authoring/scripts/lib/semver.mjs +63 -0
- package/dist/authoring/scripts/lib/semver.mjs.map +1 -0
- package/dist/authoring/scripts/lib/skill-scaffold.d.mts +124 -0
- package/dist/authoring/scripts/lib/skill-scaffold.mjs +374 -0
- package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -0
- package/dist/authoring/scripts/plugin-status.d.mts +2 -0
- package/dist/authoring/scripts/plugin-status.mjs +96 -0
- package/dist/authoring/scripts/plugin-status.mjs.map +1 -0
- package/dist/authoring/scripts/validate-plugin.d.mts +2 -0
- package/dist/authoring/scripts/validate-plugin.mjs +4442 -0
- package/dist/authoring/scripts/validate-plugin.mjs.map +1 -0
- package/dist/authoring/scripts/validate-skill.d.mts +2 -0
- package/dist/authoring/scripts/validate-skill.mjs +126 -0
- package/dist/authoring/scripts/validate-skill.mjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/scripts/aw-skill-eval-engine.d.ts +13 -0
- package/dist/scripts/aw-skill-eval-engine.js +31 -0
- package/dist/scripts/aw-skill-eval-engine.js.map +1 -0
- package/dist/scripts/bundle-plugins.d.ts +18 -0
- package/dist/scripts/bundle-plugins.js +123 -0
- package/dist/scripts/bundle-plugins.js.map +1 -0
- package/dist/scripts/codex-eval-app-server.d.ts +89 -0
- package/dist/scripts/codex-eval-app-server.js +1228 -0
- package/dist/scripts/codex-eval-app-server.js.map +1 -0
- package/dist/scripts/codex-eval-isolation.d.ts +61 -0
- package/dist/scripts/codex-eval-isolation.js +318 -0
- package/dist/scripts/codex-eval-isolation.js.map +1 -0
- package/dist/scripts/codex-eval-process-management.d.ts +8 -0
- package/dist/scripts/codex-eval-process-management.js +69 -0
- package/dist/scripts/codex-eval-process-management.js.map +1 -0
- package/dist/scripts/codex-eval-process-tree.d.ts +38 -0
- package/dist/scripts/codex-eval-process-tree.js +803 -0
- package/dist/scripts/codex-eval-process-tree.js.map +1 -0
- package/dist/scripts/codex-eval-runtime-config.d.ts +62 -0
- package/dist/scripts/codex-eval-runtime-config.js +843 -0
- package/dist/scripts/codex-eval-runtime-config.js.map +1 -0
- package/dist/scripts/codex-trigger-eval.d.ts +84 -0
- package/dist/scripts/codex-trigger-eval.js +968 -0
- package/dist/scripts/codex-trigger-eval.js.map +1 -0
- package/dist/scripts/eval-plugin-skills-audited.d.ts +6 -0
- package/dist/scripts/eval-plugin-skills-audited.js +261 -0
- package/dist/scripts/eval-plugin-skills-audited.js.map +1 -0
- package/dist/scripts/eval-plugin-skills.d.ts +45 -0
- package/dist/scripts/eval-plugin-skills.js +1586 -0
- package/dist/scripts/eval-plugin-skills.js.map +1 -0
- package/dist/scripts/eval-run-layout.d.ts +17 -0
- package/dist/scripts/eval-run-layout.js +26 -0
- package/dist/scripts/eval-run-layout.js.map +1 -0
- package/dist/scripts/plugin-eval-contract.d.ts +185 -0
- package/dist/scripts/plugin-eval-contract.js +695 -0
- package/dist/scripts/plugin-eval-contract.js.map +1 -0
- package/dist/scripts/plugin-eval-materializer.d.ts +13 -0
- package/dist/scripts/plugin-eval-materializer.js +421 -0
- package/dist/scripts/plugin-eval-materializer.js.map +1 -0
- package/dist/scripts/plugin-staging.d.ts +43 -0
- package/dist/scripts/plugin-staging.js +196 -0
- package/dist/scripts/plugin-staging.js.map +1 -0
- package/dist/scripts/skill-reporting.d.ts +212 -0
- package/dist/scripts/skill-reporting.js +922 -0
- package/dist/scripts/skill-reporting.js.map +1 -0
- package/dist/scripts/test-plugin-scripts.d.ts +7 -0
- package/dist/scripts/test-plugin-scripts.js +674 -0
- package/dist/scripts/test-plugin-scripts.js.map +1 -0
- package/dist/src/adapters/helpers.d.ts +44 -0
- package/dist/src/adapters/helpers.js +95 -0
- package/dist/src/adapters/helpers.js.map +1 -0
- package/dist/src/authoring/workspace-commands.d.ts +46 -0
- package/dist/src/authoring/workspace-commands.js +133 -0
- package/dist/src/authoring/workspace-commands.js.map +1 -0
- package/dist/src/commands/catalog-publish.d.ts +33 -0
- package/dist/src/commands/catalog-publish.js +374 -0
- package/dist/src/commands/catalog-publish.js.map +1 -0
- package/dist/src/commands/catalog-source.d.ts +111 -0
- package/dist/src/commands/catalog-source.js +266 -0
- package/dist/src/commands/catalog-source.js.map +1 -0
- package/dist/src/commands/console.d.ts +3 -0
- package/dist/src/commands/console.js +44 -0
- package/dist/src/commands/console.js.map +1 -0
- package/dist/src/commands/dependency-operation-plan.d.ts +28 -0
- package/dist/src/commands/dependency-operation-plan.js +15 -0
- package/dist/src/commands/dependency-operation-plan.js.map +1 -0
- package/dist/src/commands/init.d.ts +31 -0
- package/dist/src/commands/init.js +63 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/options.d.ts +68 -0
- package/dist/src/commands/options.js +146 -0
- package/dist/src/commands/options.js.map +1 -0
- package/dist/src/commands/rebuild-command.d.ts +77 -0
- package/dist/src/commands/rebuild-command.js +1681 -0
- package/dist/src/commands/rebuild-command.js.map +1 -0
- package/dist/src/commands/rebuild-integration.d.ts +94 -0
- package/dist/src/commands/rebuild-integration.js +3289 -0
- package/dist/src/commands/rebuild-integration.js.map +1 -0
- package/dist/src/commands/rebuild-operations.d.ts +110 -0
- package/dist/src/commands/rebuild-operations.js +791 -0
- package/dist/src/commands/rebuild-operations.js.map +1 -0
- package/dist/src/commands/review-publication.d.ts +99 -0
- package/dist/src/commands/review-publication.js +904 -0
- package/dist/src/commands/review-publication.js.map +1 -0
- package/dist/src/commands/runtime.d.ts +176 -0
- package/dist/src/commands/runtime.js +746 -0
- package/dist/src/commands/runtime.js.map +1 -0
- package/dist/src/commands/status-v4.d.ts +102 -0
- package/dist/src/commands/status-v4.js +844 -0
- package/dist/src/commands/status-v4.js.map +1 -0
- package/dist/src/commands/status.d.ts +93 -0
- package/dist/src/commands/status.js +442 -0
- package/dist/src/commands/status.js.map +1 -0
- package/dist/src/commands/wizard.d.ts +57 -0
- package/dist/src/commands/wizard.js +58 -0
- package/dist/src/commands/wizard.js.map +1 -0
- package/dist/src/commands/write-commands.d.ts +7 -0
- package/dist/src/commands/write-commands.js +167 -0
- package/dist/src/commands/write-commands.js.map +1 -0
- package/dist/src/constants.d.ts +25 -0
- package/dist/src/constants.js +26 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/generators/agents.d.ts +3 -0
- package/dist/src/generators/agents.js +46 -0
- package/dist/src/generators/agents.js.map +1 -0
- package/dist/src/generators/hooks.d.ts +15 -0
- package/dist/src/generators/hooks.js +76 -0
- package/dist/src/generators/hooks.js.map +1 -0
- package/dist/src/generators/instructions.d.ts +13 -0
- package/dist/src/generators/instructions.js +66 -0
- package/dist/src/generators/instructions.js.map +1 -0
- package/dist/src/generators/local-plugin.d.ts +53 -0
- package/dist/src/generators/local-plugin.js +1268 -0
- package/dist/src/generators/local-plugin.js.map +1 -0
- package/dist/src/generators/permissions.d.ts +10 -0
- package/dist/src/generators/permissions.js +37 -0
- package/dist/src/generators/permissions.js.map +1 -0
- package/dist/src/generators/shared.d.ts +2 -0
- package/dist/src/generators/shared.js +15 -0
- package/dist/src/generators/shared.js.map +1 -0
- package/dist/src/index.d.ts +35 -0
- package/dist/src/index.js +2344 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/output/command-receipt.d.ts +90 -0
- package/dist/src/output/command-receipt.js +129 -0
- package/dist/src/output/command-receipt.js.map +1 -0
- package/dist/src/output/debug-log.d.ts +4 -0
- package/dist/src/output/debug-log.js +97 -0
- package/dist/src/output/debug-log.js.map +1 -0
- package/dist/src/output/equivalent-command.d.ts +9 -0
- package/dist/src/output/equivalent-command.js +39 -0
- package/dist/src/output/equivalent-command.js.map +1 -0
- package/dist/src/output/model.d.ts +117 -0
- package/dist/src/output/model.js +145 -0
- package/dist/src/output/model.js.map +1 -0
- package/dist/src/output/rebuild-progress.d.ts +21 -0
- package/dist/src/output/rebuild-progress.js +138 -0
- package/dist/src/output/rebuild-progress.js.map +1 -0
- package/dist/src/output/redact.d.ts +3 -0
- package/dist/src/output/redact.js +39 -0
- package/dist/src/output/redact.js.map +1 -0
- package/dist/src/output/reporter.d.ts +9 -0
- package/dist/src/output/reporter.js +133 -0
- package/dist/src/output/reporter.js.map +1 -0
- package/dist/src/portable/commands.d.ts +120 -0
- package/dist/src/portable/commands.js +506 -0
- package/dist/src/portable/commands.js.map +1 -0
- package/dist/src/portable/materializer.d.ts +50 -0
- package/dist/src/portable/materializer.js +408 -0
- package/dist/src/portable/materializer.js.map +1 -0
- package/dist/src/portable/skills-cli.d.ts +43 -0
- package/dist/src/portable/skills-cli.js +148 -0
- package/dist/src/portable/skills-cli.js.map +1 -0
- package/dist/src/tui/components.d.ts +32 -0
- package/dist/src/tui/components.js +42 -0
- package/dist/src/tui/components.js.map +1 -0
- package/dist/src/tui/console-app-v4.d.ts +20 -0
- package/dist/src/tui/console-app-v4.js +2613 -0
- package/dist/src/tui/console-app-v4.js.map +1 -0
- package/dist/src/tui/controller-runtime.d.ts +11 -0
- package/dist/src/tui/controller-runtime.js +902 -0
- package/dist/src/tui/controller-runtime.js.map +1 -0
- package/dist/src/tui/controller.d.ts +367 -0
- package/dist/src/tui/controller.js +1724 -0
- package/dist/src/tui/controller.js.map +1 -0
- package/dist/src/tui/index.d.ts +13 -0
- package/dist/src/tui/index.js +14 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/keys.d.ts +12 -0
- package/dist/src/tui/keys.js +22 -0
- package/dist/src/tui/keys.js.map +1 -0
- package/dist/src/tui/layout.d.ts +12 -0
- package/dist/src/tui/layout.js +19 -0
- package/dist/src/tui/layout.js.map +1 -0
- package/dist/src/tui/model.d.ts +279 -0
- package/dist/src/tui/model.js +652 -0
- package/dist/src/tui/model.js.map +1 -0
- package/dist/src/tui/prompt.d.ts +8 -0
- package/dist/src/tui/prompt.js +242 -0
- package/dist/src/tui/prompt.js.map +1 -0
- package/dist/src/tui/router.d.ts +153 -0
- package/dist/src/tui/router.js +102 -0
- package/dist/src/tui/router.js.map +1 -0
- package/dist/src/tui/runner.d.ts +11 -0
- package/dist/src/tui/runner.js +71 -0
- package/dist/src/tui/runner.js.map +1 -0
- package/dist/src/tui/theme.d.ts +18 -0
- package/dist/src/tui/theme.js +20 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/views.d.ts +57 -0
- package/dist/src/tui/views.js +173 -0
- package/dist/src/tui/views.js.map +1 -0
- package/dist/src/tui/wizard.d.ts +11 -0
- package/dist/src/tui/wizard.js +321 -0
- package/dist/src/tui/wizard.js.map +1 -0
- package/dist/src/types.d.ts +313 -0
- package/dist/src/types.js +33 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/active-marketplace-runtime-lock.d.ts +12 -0
- package/dist/src/utils/active-marketplace-runtime-lock.js +133 -0
- package/dist/src/utils/active-marketplace-runtime-lock.js.map +1 -0
- package/dist/src/utils/agent-version.d.ts +13 -0
- package/dist/src/utils/agent-version.js +172 -0
- package/dist/src/utils/agent-version.js.map +1 -0
- package/dist/src/utils/artifact-plan.d.ts +26 -0
- package/dist/src/utils/artifact-plan.js +444 -0
- package/dist/src/utils/artifact-plan.js.map +1 -0
- package/dist/src/utils/artifact-renderer.d.ts +124 -0
- package/dist/src/utils/artifact-renderer.js +442 -0
- package/dist/src/utils/artifact-renderer.js.map +1 -0
- package/dist/src/utils/artifact-sources.d.ts +8 -0
- package/dist/src/utils/artifact-sources.js +10 -0
- package/dist/src/utils/artifact-sources.js.map +1 -0
- package/dist/src/utils/aw-home-mutation-lock.d.ts +10 -0
- package/dist/src/utils/aw-home-mutation-lock.js +55 -0
- package/dist/src/utils/aw-home-mutation-lock.js.map +1 -0
- package/dist/src/utils/bundle-integrity.d.ts +3 -0
- package/dist/src/utils/bundle-integrity.js +88 -0
- package/dist/src/utils/bundle-integrity.js.map +1 -0
- package/dist/src/utils/bundle-layout.d.ts +4 -0
- package/dist/src/utils/bundle-layout.js +546 -0
- package/dist/src/utils/bundle-layout.js.map +1 -0
- package/dist/src/utils/catalog-digests.d.ts +8 -0
- package/dist/src/utils/catalog-digests.js +108 -0
- package/dist/src/utils/catalog-digests.js.map +1 -0
- package/dist/src/utils/catalog-manifest-v3.d.ts +2 -0
- package/dist/src/utils/catalog-manifest-v3.js +3 -0
- package/dist/src/utils/catalog-manifest-v3.js.map +1 -0
- package/dist/src/utils/catalog-manifest-v4.d.ts +5 -0
- package/dist/src/utils/catalog-manifest-v4.js +106 -0
- package/dist/src/utils/catalog-manifest-v4.js.map +1 -0
- package/dist/src/utils/catalog-public-error.d.ts +15 -0
- package/dist/src/utils/catalog-public-error.js +84 -0
- package/dist/src/utils/catalog-public-error.js.map +1 -0
- package/dist/src/utils/catalog-runtime-projection.d.ts +36 -0
- package/dist/src/utils/catalog-runtime-projection.js +172 -0
- package/dist/src/utils/catalog-runtime-projection.js.map +1 -0
- package/dist/src/utils/catalog-snapshot.d.ts +8 -0
- package/dist/src/utils/catalog-snapshot.js +12 -0
- package/dist/src/utils/catalog-snapshot.js.map +1 -0
- package/dist/src/utils/catalog-source-cache.d.ts +61 -0
- package/dist/src/utils/catalog-source-cache.js +276 -0
- package/dist/src/utils/catalog-source-cache.js.map +1 -0
- package/dist/src/utils/catalog-source-identity.d.ts +4 -0
- package/dist/src/utils/catalog-source-identity.js +118 -0
- package/dist/src/utils/catalog-source-identity.js.map +1 -0
- package/dist/src/utils/catalog-source-presentation.d.ts +1 -0
- package/dist/src/utils/catalog-source-presentation.js +32 -0
- package/dist/src/utils/catalog-source-presentation.js.map +1 -0
- package/dist/src/utils/catalog-source-references.d.ts +65 -0
- package/dist/src/utils/catalog-source-references.js +1418 -0
- package/dist/src/utils/catalog-source-references.js.map +1 -0
- package/dist/src/utils/catalog-sources.d.ts +39 -0
- package/dist/src/utils/catalog-sources.js +293 -0
- package/dist/src/utils/catalog-sources.js.map +1 -0
- package/dist/src/utils/codex-config.d.ts +124 -0
- package/dist/src/utils/codex-config.js +1011 -0
- package/dist/src/utils/codex-config.js.map +1 -0
- package/dist/src/utils/codex-project-surface.d.ts +3 -0
- package/dist/src/utils/codex-project-surface.js +49 -0
- package/dist/src/utils/codex-project-surface.js.map +1 -0
- package/dist/src/utils/codex-roles.d.ts +71 -0
- package/dist/src/utils/codex-roles.js +257 -0
- package/dist/src/utils/codex-roles.js.map +1 -0
- package/dist/src/utils/codex-skill-staging.d.ts +9 -0
- package/dist/src/utils/codex-skill-staging.js +8 -0
- package/dist/src/utils/codex-skill-staging.js.map +1 -0
- package/dist/src/utils/config-value.d.ts +3 -0
- package/dist/src/utils/config-value.js +23 -0
- package/dist/src/utils/config-value.js.map +1 -0
- package/dist/src/utils/dynamic-skill-tree.d.ts +32 -0
- package/dist/src/utils/dynamic-skill-tree.js +436 -0
- package/dist/src/utils/dynamic-skill-tree.js.map +1 -0
- package/dist/src/utils/file-rules.d.ts +1 -0
- package/dist/src/utils/file-rules.js +2 -0
- package/dist/src/utils/file-rules.js.map +1 -0
- package/dist/src/utils/git-catalog-provider.d.ts +7 -0
- package/dist/src/utils/git-catalog-provider.js +510 -0
- package/dist/src/utils/git-catalog-provider.js.map +1 -0
- package/dist/src/utils/hooks-contract.d.ts +1 -0
- package/dist/src/utils/hooks-contract.js +2 -0
- package/dist/src/utils/hooks-contract.js.map +1 -0
- package/dist/src/utils/json.d.ts +4 -0
- package/dist/src/utils/json.js +29 -0
- package/dist/src/utils/json.js.map +1 -0
- package/dist/src/utils/lifecycle-active-store.d.ts +175 -0
- package/dist/src/utils/lifecycle-active-store.js +1276 -0
- package/dist/src/utils/lifecycle-active-store.js.map +1 -0
- package/dist/src/utils/local-marketplace.d.ts +41 -0
- package/dist/src/utils/local-marketplace.js +317 -0
- package/dist/src/utils/local-marketplace.js.map +1 -0
- package/dist/src/utils/manifest.d.ts +14 -0
- package/dist/src/utils/manifest.js +36 -0
- package/dist/src/utils/manifest.js.map +1 -0
- package/dist/src/utils/marketplace.d.ts +3 -0
- package/dist/src/utils/marketplace.js +76 -0
- package/dist/src/utils/marketplace.js.map +1 -0
- package/dist/src/utils/multi-source-catalog.d.ts +72 -0
- package/dist/src/utils/multi-source-catalog.js +402 -0
- package/dist/src/utils/multi-source-catalog.js.map +1 -0
- package/dist/src/utils/native-cli.d.ts +75 -0
- package/dist/src/utils/native-cli.js +435 -0
- package/dist/src/utils/native-cli.js.map +1 -0
- package/dist/src/utils/orphan-marketplace-cleanup.d.ts +18 -0
- package/dist/src/utils/orphan-marketplace-cleanup.js +202 -0
- package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -0
- package/dist/src/utils/ownership.d.ts +130 -0
- package/dist/src/utils/ownership.js +766 -0
- package/dist/src/utils/ownership.js.map +1 -0
- package/dist/src/utils/path-catalog-provider.d.ts +7 -0
- package/dist/src/utils/path-catalog-provider.js +87 -0
- package/dist/src/utils/path-catalog-provider.js.map +1 -0
- package/dist/src/utils/paths.d.ts +41 -0
- package/dist/src/utils/paths.js +138 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/platform-entries.d.ts +1 -0
- package/dist/src/utils/platform-entries.js +2 -0
- package/dist/src/utils/platform-entries.js.map +1 -0
- package/dist/src/utils/platform-support.d.ts +1 -0
- package/dist/src/utils/platform-support.js +2 -0
- package/dist/src/utils/platform-support.js.map +1 -0
- package/dist/src/utils/plugin-authoring-capabilities.d.ts +23 -0
- package/dist/src/utils/plugin-authoring-capabilities.js +37 -0
- package/dist/src/utils/plugin-authoring-capabilities.js.map +1 -0
- package/dist/src/utils/plugin-authoring-capabilities.json +92 -0
- package/dist/src/utils/plugin-config-write.d.ts +107 -0
- package/dist/src/utils/plugin-config-write.js +565 -0
- package/dist/src/utils/plugin-config-write.js.map +1 -0
- package/dist/src/utils/plugin-config.d.ts +396 -0
- package/dist/src/utils/plugin-config.js +1898 -0
- package/dist/src/utils/plugin-config.js.map +1 -0
- package/dist/src/utils/plugin-dependencies.d.ts +12 -0
- package/dist/src/utils/plugin-dependencies.js +162 -0
- package/dist/src/utils/plugin-dependencies.js.map +1 -0
- package/dist/src/utils/plugin-release.d.ts +2 -0
- package/dist/src/utils/plugin-release.js +2 -0
- package/dist/src/utils/plugin-release.js.map +1 -0
- package/dist/src/utils/plugin-script-contract.d.ts +1 -0
- package/dist/src/utils/plugin-script-contract.js +2 -0
- package/dist/src/utils/plugin-script-contract.js.map +1 -0
- package/dist/src/utils/plugin-scripts.d.ts +172 -0
- package/dist/src/utils/plugin-scripts.js +585 -0
- package/dist/src/utils/plugin-scripts.js.map +1 -0
- package/dist/src/utils/process-lock.d.ts +47 -0
- package/dist/src/utils/process-lock.js +532 -0
- package/dist/src/utils/process-lock.js.map +1 -0
- package/dist/src/utils/process-tree.d.ts +2 -0
- package/dist/src/utils/process-tree.js +2 -0
- package/dist/src/utils/process-tree.js.map +1 -0
- package/dist/src/utils/project-boundary.d.ts +21 -0
- package/dist/src/utils/project-boundary.js +95 -0
- package/dist/src/utils/project-boundary.js.map +1 -0
- package/dist/src/utils/rendered-contract.d.ts +8 -0
- package/dist/src/utils/rendered-contract.js +134 -0
- package/dist/src/utils/rendered-contract.js.map +1 -0
- package/dist/src/utils/runtime-skill-closure.d.ts +13 -0
- package/dist/src/utils/runtime-skill-closure.js +863 -0
- package/dist/src/utils/runtime-skill-closure.js.map +1 -0
- package/dist/src/utils/skill-authoring.d.ts +1 -0
- package/dist/src/utils/skill-authoring.js +2 -0
- package/dist/src/utils/skill-authoring.js.map +1 -0
- package/dist/src/utils/skill-frontmatter-capabilities.d.ts +201 -0
- package/dist/src/utils/skill-frontmatter-capabilities.js +5 -0
- package/dist/src/utils/skill-frontmatter-capabilities.js.map +1 -0
- package/dist/src/utils/skill-frontmatter-capabilities.json +200 -0
- package/dist/src/utils/skill-validation.d.ts +37 -0
- package/dist/src/utils/skill-validation.js +326 -0
- package/dist/src/utils/skill-validation.js.map +1 -0
- package/dist/src/utils/slash-commands.d.ts +1 -0
- package/dist/src/utils/slash-commands.js +2 -0
- package/dist/src/utils/slash-commands.js.map +1 -0
- package/dist/src/utils/state-paths.d.ts +13 -0
- package/dist/src/utils/state-paths.js +129 -0
- package/dist/src/utils/state-paths.js.map +1 -0
- package/dist/src/utils/target-eligibility.d.ts +7 -0
- package/dist/src/utils/target-eligibility.js +26 -0
- package/dist/src/utils/target-eligibility.js.map +1 -0
- package/dist/src/utils/target-order.d.ts +7 -0
- package/dist/src/utils/target-order.js +10 -0
- package/dist/src/utils/target-order.js.map +1 -0
- package/dist/src/utils/template-engine.d.ts +1 -0
- package/dist/src/utils/template-engine.js +2 -0
- package/dist/src/utils/template-engine.js.map +1 -0
- package/dist/src/utils/test-path-fence.d.ts +12 -0
- package/dist/src/utils/test-path-fence.js +31 -0
- package/dist/src/utils/test-path-fence.js.map +1 -0
- package/dist/vitest.config.d.ts +2 -0
- package/dist/vitest.config.js +16 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,791 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { acquireLifecycleOperationLock, discardLifecycleActiveSnapshot, leaseLifecycleActiveSnapshot, prepareLifecycleActiveSnapshot, promoteLifecycleActiveSnapshot, readLifecycleActiveSnapshot, releaseLifecycleActiveSnapshot, removeLifecycleActiveSnapshot, restoreLifecycleActiveScriptInputs, } from '../utils/lifecycle-active-store.js';
|
|
3
|
+
import { cleanupOwnedComponents, inspectOwnedComponents, validateOwnerIdentity, } from '../utils/ownership.js';
|
|
4
|
+
async function withOwnershipLease(target, driver, operation) {
|
|
5
|
+
return driver.withOwnershipLease
|
|
6
|
+
? driver.withOwnershipLease(target, operation)
|
|
7
|
+
: operation();
|
|
8
|
+
}
|
|
9
|
+
function artifactIdentity(artifact) {
|
|
10
|
+
return [
|
|
11
|
+
artifact.platform,
|
|
12
|
+
artifact.kind,
|
|
13
|
+
path.resolve(artifact.path),
|
|
14
|
+
artifact.artifactKey ?? '',
|
|
15
|
+
artifact.id ?? '',
|
|
16
|
+
artifact.target ?? '',
|
|
17
|
+
artifact.state ?? '',
|
|
18
|
+
].join('\0');
|
|
19
|
+
}
|
|
20
|
+
function bindWrittenArtifacts(target, written) {
|
|
21
|
+
if (written === undefined)
|
|
22
|
+
return;
|
|
23
|
+
const expected = target.artifacts.map(artifactIdentity).sort();
|
|
24
|
+
const actual = written.map(artifactIdentity).sort();
|
|
25
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
26
|
+
throw new Error('Artifact writer result does not match the precomputed desired artifact plan.');
|
|
27
|
+
}
|
|
28
|
+
target.artifacts = [...written];
|
|
29
|
+
}
|
|
30
|
+
export function createRebuildActiveStore(options) {
|
|
31
|
+
return {
|
|
32
|
+
prepare: (target) => prepareLifecycleActiveSnapshot({
|
|
33
|
+
...(target.identity.sourceId ? {
|
|
34
|
+
sourceId: target.identity.sourceId,
|
|
35
|
+
sourceIdentity: target.identity.sourceIdentity,
|
|
36
|
+
} : {}),
|
|
37
|
+
plugin: target.lifecycleSource,
|
|
38
|
+
platform: target.identity.platform,
|
|
39
|
+
scope: target.identity.scope,
|
|
40
|
+
cwd: target.identity.cwd,
|
|
41
|
+
artifacts: target.artifacts,
|
|
42
|
+
loadPlugin: options.loadPlugin,
|
|
43
|
+
env: options.env,
|
|
44
|
+
lifecycleLeaseHeld: options.isLifecycleLeaseHeld?.() === true,
|
|
45
|
+
}),
|
|
46
|
+
discard: discardLifecycleActiveSnapshot,
|
|
47
|
+
promote: promoteLifecycleActiveSnapshot,
|
|
48
|
+
read: (target) => readLifecycleActiveSnapshot({
|
|
49
|
+
...(target.identity.sourceId ? {
|
|
50
|
+
sourceId: target.identity.sourceId,
|
|
51
|
+
sourceIdentity: target.identity.sourceIdentity,
|
|
52
|
+
} : {}),
|
|
53
|
+
pluginName: target.identity.pluginName,
|
|
54
|
+
platform: target.identity.platform,
|
|
55
|
+
scope: target.identity.scope,
|
|
56
|
+
cwd: target.identity.cwd,
|
|
57
|
+
loadPlugin: options.loadPlugin,
|
|
58
|
+
env: options.env,
|
|
59
|
+
}),
|
|
60
|
+
readStable: (target) => leaseLifecycleActiveSnapshot({
|
|
61
|
+
...(target.identity.sourceId ? {
|
|
62
|
+
sourceId: target.identity.sourceId,
|
|
63
|
+
sourceIdentity: target.identity.sourceIdentity,
|
|
64
|
+
} : {}),
|
|
65
|
+
pluginName: target.identity.pluginName,
|
|
66
|
+
platform: target.identity.platform,
|
|
67
|
+
scope: target.identity.scope,
|
|
68
|
+
cwd: target.identity.cwd,
|
|
69
|
+
loadPlugin: options.loadPlugin,
|
|
70
|
+
env: options.env,
|
|
71
|
+
lifecycleLeaseHeld: options.isLifecycleLeaseHeld?.() === true,
|
|
72
|
+
}),
|
|
73
|
+
remove: (target) => removeLifecycleActiveSnapshot({
|
|
74
|
+
...(target.identity.sourceId ? {
|
|
75
|
+
sourceId: target.identity.sourceId,
|
|
76
|
+
sourceIdentity: target.identity.sourceIdentity,
|
|
77
|
+
} : {}),
|
|
78
|
+
pluginName: target.identity.pluginName,
|
|
79
|
+
platform: target.identity.platform,
|
|
80
|
+
scope: target.identity.scope,
|
|
81
|
+
cwd: target.identity.cwd,
|
|
82
|
+
env: options.env,
|
|
83
|
+
lifecycleLeaseHeld: options.isLifecycleLeaseHeld?.() === true,
|
|
84
|
+
}),
|
|
85
|
+
acquireOperation: (identity) => acquireLifecycleOperationLock({
|
|
86
|
+
...(identity.sourceId ? {
|
|
87
|
+
sourceId: identity.sourceId,
|
|
88
|
+
sourceIdentity: identity.sourceIdentity,
|
|
89
|
+
} : {}),
|
|
90
|
+
pluginName: identity.pluginName,
|
|
91
|
+
platform: identity.platform,
|
|
92
|
+
scope: identity.scope,
|
|
93
|
+
cwd: identity.cwd,
|
|
94
|
+
env: options.env,
|
|
95
|
+
}),
|
|
96
|
+
releaseRead: releaseLifecycleActiveSnapshot,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function createAccumulator() {
|
|
100
|
+
return {
|
|
101
|
+
actions: [],
|
|
102
|
+
cleanupAttempted: false,
|
|
103
|
+
removed: [],
|
|
104
|
+
absent: [],
|
|
105
|
+
residual: [],
|
|
106
|
+
quarantined: [],
|
|
107
|
+
failures: [],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function errorMessage(error) {
|
|
111
|
+
return error instanceof Error ? error.message : String(error);
|
|
112
|
+
}
|
|
113
|
+
const REBUILD_ACTION_FAILURE_MESSAGES = {
|
|
114
|
+
'operation.lock': '获取操作锁失败。',
|
|
115
|
+
'preflight.inspect': '检查当前组件失败。',
|
|
116
|
+
'stale.cleanup': '清理过期组件失败。',
|
|
117
|
+
'native.write': '写入平台插件失败。',
|
|
118
|
+
'artifacts.write': '写入插件文件失败。',
|
|
119
|
+
'active.prepare': '准备生命周期快照失败。',
|
|
120
|
+
'active.discard': '丢弃生命周期快照失败。',
|
|
121
|
+
'lifecycle.install': '运行安装生命周期失败。',
|
|
122
|
+
'lifecycle.upgrade': '运行升级生命周期失败。',
|
|
123
|
+
'lifecycle.uninstall': '运行卸载生命周期失败。',
|
|
124
|
+
'active.promote': '启用生命周期快照失败。',
|
|
125
|
+
'postcheck.inspect': '检查写入结果失败。',
|
|
126
|
+
'marketplace.commit': '提交 marketplace generation 失败。',
|
|
127
|
+
'marketplace.rollback': '回滚 marketplace generation 失败。',
|
|
128
|
+
'recovery.cleanup': '清理失败写入失败。',
|
|
129
|
+
'cleanup.owned': '清理 AW 组件失败。',
|
|
130
|
+
'active.read': '读取生命周期快照失败。',
|
|
131
|
+
'active.remove': '删除生命周期快照失败。',
|
|
132
|
+
'active.release': '释放生命周期快照失败。',
|
|
133
|
+
'operation.release': '释放操作锁失败。',
|
|
134
|
+
};
|
|
135
|
+
function rebuildActionFailureMessage(name) {
|
|
136
|
+
return REBUILD_ACTION_FAILURE_MESSAGES[name];
|
|
137
|
+
}
|
|
138
|
+
async function emitRebuildAction(events, event) {
|
|
139
|
+
try {
|
|
140
|
+
await events.emit?.(event);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// Progress diagnostics must not change the rebuild result.
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
export async function releaseRebuildOperationLease(lock) {
|
|
147
|
+
let lastError;
|
|
148
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
149
|
+
try {
|
|
150
|
+
await lock.release();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
lastError = error;
|
|
155
|
+
if (!new Set(['EACCES', 'EBUSY', 'EINTR', 'EIO', 'ENOTEMPTY', 'EPERM']).has(error.code ?? '')) {
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
throw lastError;
|
|
161
|
+
}
|
|
162
|
+
function pushUnique(target, values) {
|
|
163
|
+
for (const value of values) {
|
|
164
|
+
if (!target.includes(value))
|
|
165
|
+
target.push(value);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function mergeCleanup(accumulator, cleanup, phase) {
|
|
169
|
+
pushUnique(accumulator.removed, cleanup.removed);
|
|
170
|
+
pushUnique(accumulator.absent, cleanup.absent);
|
|
171
|
+
pushUnique(accumulator.residual, cleanup.residual);
|
|
172
|
+
pushUnique(accumulator.quarantined, cleanup.quarantined);
|
|
173
|
+
accumulator.failures.push(...cleanup.failures.map((failure) => ({
|
|
174
|
+
phase,
|
|
175
|
+
label: failure.label,
|
|
176
|
+
message: failure.message,
|
|
177
|
+
})));
|
|
178
|
+
}
|
|
179
|
+
function succeeded(command, target, accumulator) {
|
|
180
|
+
return { status: 'succeeded', command, target: target.identity, ...accumulator };
|
|
181
|
+
}
|
|
182
|
+
function failed(command, target, accumulator, phase, message) {
|
|
183
|
+
if (!accumulator.failures.some((failure) => failure.phase === phase && failure.message === message)) {
|
|
184
|
+
accumulator.failures.unshift({ phase, message });
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
status: 'failed',
|
|
188
|
+
command,
|
|
189
|
+
target: target.identity,
|
|
190
|
+
...accumulator,
|
|
191
|
+
error: { phase, message },
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
async function action(accumulator, name, operation, events, failureMessage) {
|
|
195
|
+
const startedAt = events.now();
|
|
196
|
+
await emitRebuildAction(events, {
|
|
197
|
+
type: 'rebuild:action',
|
|
198
|
+
source: {
|
|
199
|
+
plugin: events.target.pluginName,
|
|
200
|
+
platform: events.target.platform,
|
|
201
|
+
scope: events.target.scope,
|
|
202
|
+
action: events.command,
|
|
203
|
+
},
|
|
204
|
+
data: { name, phase: 'start' },
|
|
205
|
+
});
|
|
206
|
+
let value;
|
|
207
|
+
let message;
|
|
208
|
+
try {
|
|
209
|
+
value = await operation();
|
|
210
|
+
message = failureMessage?.(value);
|
|
211
|
+
accumulator.actions.push({ name, status: message ? 'failed' : 'succeeded' });
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
accumulator.actions.push({ name, status: 'failed' });
|
|
215
|
+
await emitRebuildAction(events, {
|
|
216
|
+
type: 'rebuild:action',
|
|
217
|
+
source: {
|
|
218
|
+
plugin: events.target.pluginName,
|
|
219
|
+
platform: events.target.platform,
|
|
220
|
+
scope: events.target.scope,
|
|
221
|
+
action: events.command,
|
|
222
|
+
},
|
|
223
|
+
data: {
|
|
224
|
+
name,
|
|
225
|
+
phase: 'failure',
|
|
226
|
+
durationMs: Math.max(0, events.now() - startedAt),
|
|
227
|
+
message: rebuildActionFailureMessage(name),
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
await emitRebuildAction(events, {
|
|
233
|
+
type: 'rebuild:action',
|
|
234
|
+
source: {
|
|
235
|
+
plugin: events.target.pluginName,
|
|
236
|
+
platform: events.target.platform,
|
|
237
|
+
scope: events.target.scope,
|
|
238
|
+
action: events.command,
|
|
239
|
+
},
|
|
240
|
+
data: message
|
|
241
|
+
? {
|
|
242
|
+
name,
|
|
243
|
+
phase: 'failure',
|
|
244
|
+
durationMs: Math.max(0, events.now() - startedAt),
|
|
245
|
+
message: rebuildActionFailureMessage(name),
|
|
246
|
+
}
|
|
247
|
+
: {
|
|
248
|
+
name,
|
|
249
|
+
phase: 'success',
|
|
250
|
+
durationMs: Math.max(0, events.now() - startedAt),
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
return value;
|
|
254
|
+
}
|
|
255
|
+
function validateDesiredTarget(target) {
|
|
256
|
+
const { sourceId, sourceIdentity, pluginId, pluginName, pluginVersion, platform, scope } = target.identity;
|
|
257
|
+
if (sourceId !== undefined && (!sourceIdentity
|
|
258
|
+
|| pluginId !== `${sourceId}/${pluginName}`)) {
|
|
259
|
+
throw new Error('Desired target has an invalid namespaced source identity.');
|
|
260
|
+
}
|
|
261
|
+
if (target.plugin.manifest.name !== pluginName
|
|
262
|
+
|| target.lifecycleSource.manifest.name !== pluginName
|
|
263
|
+
|| target.plugin.manifest.version !== pluginVersion
|
|
264
|
+
|| target.lifecycleSource.manifest.version !== pluginVersion) {
|
|
265
|
+
throw new Error('Desired target plugin name/version does not match its lifecycle source and identity.');
|
|
266
|
+
}
|
|
267
|
+
if (platform !== 'codex' && platform !== 'claude') {
|
|
268
|
+
throw new Error(`Desired target platform is invalid: ${String(platform)}`);
|
|
269
|
+
}
|
|
270
|
+
if (scope !== 'user' && scope !== 'project') {
|
|
271
|
+
throw new Error(`Desired target scope is invalid: ${String(scope)}`);
|
|
272
|
+
}
|
|
273
|
+
const identityKeys = new Set();
|
|
274
|
+
const componentPaths = new Set();
|
|
275
|
+
let nativeCount = 0;
|
|
276
|
+
for (const component of target.ownedComponents) {
|
|
277
|
+
validateOwnerIdentity(component.identity);
|
|
278
|
+
if (component.identity.plugin !== pluginName
|
|
279
|
+
|| component.identity.sourceId !== sourceId
|
|
280
|
+
|| component.identity.sourceIdentity !== sourceIdentity
|
|
281
|
+
|| component.identity.pluginId !== pluginId
|
|
282
|
+
|| component.identity.platform !== platform
|
|
283
|
+
|| component.identity.scope !== scope) {
|
|
284
|
+
throw new Error('Owned component identity does not match the desired target.');
|
|
285
|
+
}
|
|
286
|
+
const identityKey = [
|
|
287
|
+
component.identity.owner,
|
|
288
|
+
component.identity.plugin,
|
|
289
|
+
component.identity.artifactKey,
|
|
290
|
+
component.identity.platform,
|
|
291
|
+
component.identity.scope,
|
|
292
|
+
].join('\0');
|
|
293
|
+
if (identityKeys.has(identityKey)) {
|
|
294
|
+
throw new Error(`Desired target has a duplicate owned component identity: ${component.identity.artifactKey}`);
|
|
295
|
+
}
|
|
296
|
+
identityKeys.add(identityKey);
|
|
297
|
+
if ('path' in component) {
|
|
298
|
+
const componentPath = path.resolve(component.path);
|
|
299
|
+
if (componentPaths.has(componentPath)) {
|
|
300
|
+
throw new Error(`Desired target has a duplicate owned component path: ${component.path}`);
|
|
301
|
+
}
|
|
302
|
+
componentPaths.add(componentPath);
|
|
303
|
+
}
|
|
304
|
+
if (component.kind === 'native-plugin') {
|
|
305
|
+
const expectedNativePluginId = `${pluginName}@${target.identity.marketplaceName ?? 'aw'}`;
|
|
306
|
+
if (component.pluginId !== expectedNativePluginId) {
|
|
307
|
+
throw new Error(`Native plugin identity must be ${expectedNativePluginId}.`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
const desiredComponents = target.desiredOwnedComponents ?? target.ownedComponents;
|
|
312
|
+
nativeCount = desiredComponents.filter((component) => component.kind === 'native-plugin').length;
|
|
313
|
+
if (target.requiresNative ? nativeCount !== 1 : nativeCount !== 0) {
|
|
314
|
+
throw new Error(target.requiresNative
|
|
315
|
+
? 'A native desired target must have exactly one matching native component.'
|
|
316
|
+
: 'A non-native desired target must not have a native component.');
|
|
317
|
+
}
|
|
318
|
+
if (target.artifacts.some((artifact) => artifact.platform !== platform)) {
|
|
319
|
+
throw new Error('Artifact platform does not match the desired target.');
|
|
320
|
+
}
|
|
321
|
+
const owned = new Set(target.ownedComponents);
|
|
322
|
+
if ((target.desiredOwnedComponents ?? target.ownedComponents).some((component) => !owned.has(component))) {
|
|
323
|
+
throw new Error('Desired owned components must be a subset of all owned components.');
|
|
324
|
+
}
|
|
325
|
+
const desired = new Set(target.desiredOwnedComponents ?? target.ownedComponents);
|
|
326
|
+
if ((target.optionalOwnedComponents ?? []).some((component) => !owned.has(component))) {
|
|
327
|
+
throw new Error('Optional owned components must be a subset of all owned components.');
|
|
328
|
+
}
|
|
329
|
+
if ((target.optionalOwnedComponents ?? []).some((component) => desired.has(component))) {
|
|
330
|
+
throw new Error('Optional owned components must not also be required desired components.');
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function collisionMessage(inspection) {
|
|
334
|
+
if (inspection.errors.length > 0) {
|
|
335
|
+
return inspection.errors.map((error) => `${error.label}: ${error.message}`).join('; ');
|
|
336
|
+
}
|
|
337
|
+
const collision = inspection.components.find((component) => (component.state === 'partial' || component.state === 'error'));
|
|
338
|
+
if (collision) {
|
|
339
|
+
return collision.diagnostic ?? 'Owned component preflight failed.';
|
|
340
|
+
}
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
function ownedComponentLabel(component) {
|
|
344
|
+
if ('path' in component)
|
|
345
|
+
return component.path;
|
|
346
|
+
if (component.kind === 'native-plugin')
|
|
347
|
+
return component.pluginId;
|
|
348
|
+
return component.label;
|
|
349
|
+
}
|
|
350
|
+
function isUninstallLiveOwnershipComponent(component) {
|
|
351
|
+
return component.kind !== 'shared-config'
|
|
352
|
+
|| !component.identity.artifactKey.startsWith('marketplace-');
|
|
353
|
+
}
|
|
354
|
+
function recordInspectionResiduals(accumulator, inspection) {
|
|
355
|
+
pushUnique(accumulator.residual, inspection.components
|
|
356
|
+
.filter((component) => component.state === 'partial' || component.state === 'error')
|
|
357
|
+
.map((component) => ownedComponentLabel(component.component)));
|
|
358
|
+
}
|
|
359
|
+
function postcheckMessage(accumulator, inspection) {
|
|
360
|
+
if (inspection.components.length === 0)
|
|
361
|
+
return null;
|
|
362
|
+
const invalid = inspection.components.filter((component) => component.state !== 'present');
|
|
363
|
+
if (invalid.length === 0)
|
|
364
|
+
return null;
|
|
365
|
+
pushUnique(accumulator.residual, invalid.map((component) => ownedComponentLabel(component.component)));
|
|
366
|
+
if (inspection.errors.length > 0) {
|
|
367
|
+
accumulator.failures.push(...inspection.errors.map((error) => ({
|
|
368
|
+
phase: 'postcheck.inspect',
|
|
369
|
+
label: error.label,
|
|
370
|
+
message: error.message,
|
|
371
|
+
})));
|
|
372
|
+
return inspection.errors.map((error) => `${error.label}: ${error.message}`).join('; ');
|
|
373
|
+
}
|
|
374
|
+
const diagnostics = invalid
|
|
375
|
+
.map((component) => component.diagnostic)
|
|
376
|
+
.filter((diagnostic) => diagnostic !== undefined);
|
|
377
|
+
if (diagnostics.length > 0)
|
|
378
|
+
return diagnostics.join('; ');
|
|
379
|
+
return `Post-install ownership inspection failed for ${invalid.length} component(s).`;
|
|
380
|
+
}
|
|
381
|
+
async function cleanupOwned(target, driver, components = target.ownedComponents) {
|
|
382
|
+
return withOwnershipLease(target, driver, () => cleanupOwnedComponents({
|
|
383
|
+
components,
|
|
384
|
+
nativeProbe: driver.probeNative,
|
|
385
|
+
nativeRemove: driver.removeNative,
|
|
386
|
+
}));
|
|
387
|
+
}
|
|
388
|
+
async function cleanupTarget(target, driver, store, accumulator, ownedAction, events) {
|
|
389
|
+
accumulator.cleanupAttempted = true;
|
|
390
|
+
try {
|
|
391
|
+
const cleanup = await action(accumulator, ownedAction, () => cleanupOwned(target, driver), events, (value) => value.failures[0]?.message
|
|
392
|
+
?? (value.residual.length > 0
|
|
393
|
+
? `Ownership cleanup left residual components: ${value.residual.join(', ')}`
|
|
394
|
+
: value.quarantined.length > 0
|
|
395
|
+
? `Ownership cleanup left quarantined components: ${value.quarantined.join(', ')}`
|
|
396
|
+
: undefined));
|
|
397
|
+
mergeCleanup(accumulator, cleanup, ownedAction);
|
|
398
|
+
if (cleanup.failures.length > 0
|
|
399
|
+
|| cleanup.residual.length > 0
|
|
400
|
+
|| cleanup.quarantined.length > 0) {
|
|
401
|
+
return {
|
|
402
|
+
phase: ownedAction,
|
|
403
|
+
message: cleanup.failures[0]?.message
|
|
404
|
+
?? (cleanup.residual.length > 0
|
|
405
|
+
? `Ownership cleanup left residual components: ${cleanup.residual.join(', ')}`
|
|
406
|
+
: `Ownership cleanup left quarantined components: ${cleanup.quarantined.join(', ')}`),
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
const message = errorMessage(error);
|
|
412
|
+
accumulator.failures.push({ phase: ownedAction, message });
|
|
413
|
+
return { phase: ownedAction, message };
|
|
414
|
+
}
|
|
415
|
+
try {
|
|
416
|
+
await action(accumulator, 'active.remove', () => store.remove(target), events);
|
|
417
|
+
}
|
|
418
|
+
catch (error) {
|
|
419
|
+
const message = errorMessage(error);
|
|
420
|
+
accumulator.failures.push({ phase: 'active.remove', message });
|
|
421
|
+
return { phase: 'active.remove', message };
|
|
422
|
+
}
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
async function materializeTarget(options) {
|
|
426
|
+
const { command, lifecycleEvent, target, driver, store, accumulator, events } = options;
|
|
427
|
+
let inspection;
|
|
428
|
+
try {
|
|
429
|
+
inspection = await action(accumulator, 'preflight.inspect', () => withOwnershipLease(target, driver, async () => {
|
|
430
|
+
await driver.preflightMaterialize?.(target);
|
|
431
|
+
return inspectOwnedComponents({
|
|
432
|
+
components: target.ownedComponents,
|
|
433
|
+
nativeProbe: driver.probeNative,
|
|
434
|
+
});
|
|
435
|
+
}), events, collisionMessage);
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
return failed(command, target, accumulator, 'preflight.inspect', errorMessage(error));
|
|
439
|
+
}
|
|
440
|
+
const collision = collisionMessage(inspection);
|
|
441
|
+
if (collision) {
|
|
442
|
+
recordInspectionResiduals(accumulator, inspection);
|
|
443
|
+
return failed(command, target, accumulator, 'preflight.inspect', collision);
|
|
444
|
+
}
|
|
445
|
+
const desiredComponents = new Set(target.desiredOwnedComponents ?? target.ownedComponents);
|
|
446
|
+
const optionalComponents = new Set(target.optionalOwnedComponents ?? []);
|
|
447
|
+
const staleComponents = target.ownedComponents.filter((component) => !desiredComponents.has(component) && !optionalComponents.has(component));
|
|
448
|
+
const staleInspection = inspection.components.filter((entry) => staleComponents.includes(entry.component));
|
|
449
|
+
if (staleInspection.some((component) => component.state === 'present')) {
|
|
450
|
+
accumulator.cleanupAttempted = true;
|
|
451
|
+
let stale;
|
|
452
|
+
try {
|
|
453
|
+
stale = await action(accumulator, 'stale.cleanup', () => cleanupOwned(target, driver, staleComponents), events, (value) => value.failures[0]?.message
|
|
454
|
+
?? (value.residual.length > 0
|
|
455
|
+
? `Stale cleanup left residual components: ${value.residual.join(', ')}`
|
|
456
|
+
: undefined));
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
return failed(command, target, accumulator, 'stale.cleanup', errorMessage(error));
|
|
460
|
+
}
|
|
461
|
+
mergeCleanup(accumulator, stale, 'stale.cleanup');
|
|
462
|
+
if (stale.failures.length > 0 || stale.residual.length > 0) {
|
|
463
|
+
const message = stale.failures[0]?.message
|
|
464
|
+
?? `Stale cleanup left residual components: ${stale.residual.join(', ')}`;
|
|
465
|
+
return failed(command, target, accumulator, 'stale.cleanup', message);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
let failurePhase = 'native.write';
|
|
469
|
+
let prepared;
|
|
470
|
+
try {
|
|
471
|
+
if (target.requiresNative) {
|
|
472
|
+
failurePhase = 'native.write';
|
|
473
|
+
await action(accumulator, failurePhase, () => driver.writeNative(target), events);
|
|
474
|
+
}
|
|
475
|
+
failurePhase = 'artifacts.write';
|
|
476
|
+
await action(accumulator, failurePhase, async () => {
|
|
477
|
+
const writtenArtifacts = await driver.writeArtifacts(target);
|
|
478
|
+
bindWrittenArtifacts(target, writtenArtifacts);
|
|
479
|
+
}, events);
|
|
480
|
+
failurePhase = 'active.prepare';
|
|
481
|
+
prepared = await action(accumulator, failurePhase, () => store.prepare(target), events);
|
|
482
|
+
failurePhase = `lifecycle.${lifecycleEvent}`;
|
|
483
|
+
await action(accumulator, failurePhase, () => driver.runLifecycle({
|
|
484
|
+
event: lifecycleEvent,
|
|
485
|
+
target,
|
|
486
|
+
plugin: target.lifecycleSource,
|
|
487
|
+
artifacts: target.artifacts,
|
|
488
|
+
}), events);
|
|
489
|
+
failurePhase = 'active.promote';
|
|
490
|
+
await action(accumulator, failurePhase, () => store.promote(prepared), events);
|
|
491
|
+
failurePhase = 'postcheck.inspect';
|
|
492
|
+
await action(accumulator, failurePhase, async () => {
|
|
493
|
+
const optional = new Set(target.optionalOwnedComponents ?? []);
|
|
494
|
+
const postcheck = await withOwnershipLease(target, driver, () => inspectOwnedComponents({
|
|
495
|
+
components: (target.desiredOwnedComponents ?? target.ownedComponents)
|
|
496
|
+
.filter((component) => !optional.has(component)),
|
|
497
|
+
nativeProbe: driver.probeNativeHealth ?? driver.probeNative,
|
|
498
|
+
verifyHealth: true,
|
|
499
|
+
}));
|
|
500
|
+
const postcheckFailure = postcheckMessage(accumulator, postcheck);
|
|
501
|
+
if (postcheckFailure)
|
|
502
|
+
throw new Error(postcheckFailure);
|
|
503
|
+
}, events);
|
|
504
|
+
if (driver.commitMaterialize) {
|
|
505
|
+
failurePhase = 'marketplace.commit';
|
|
506
|
+
await action(accumulator, failurePhase, () => driver.commitMaterialize(target), events);
|
|
507
|
+
}
|
|
508
|
+
return succeeded(command, target, accumulator);
|
|
509
|
+
}
|
|
510
|
+
catch (error) {
|
|
511
|
+
const primary = errorMessage(error);
|
|
512
|
+
if (error.durableMaterializeCommit === true) {
|
|
513
|
+
return failed(command, target, accumulator, failurePhase, primary);
|
|
514
|
+
}
|
|
515
|
+
if (prepared) {
|
|
516
|
+
try {
|
|
517
|
+
await action(accumulator, 'active.discard', () => store.discard(prepared), events);
|
|
518
|
+
}
|
|
519
|
+
catch (discardError) {
|
|
520
|
+
accumulator.failures.push({
|
|
521
|
+
phase: 'active.discard',
|
|
522
|
+
message: errorMessage(discardError),
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
await cleanupTarget(target, driver, store, accumulator, 'recovery.cleanup', events);
|
|
527
|
+
if (driver.rollbackMaterialize) {
|
|
528
|
+
try {
|
|
529
|
+
await action(accumulator, 'marketplace.rollback', () => driver.rollbackMaterialize(target), events);
|
|
530
|
+
}
|
|
531
|
+
catch (rollbackError) {
|
|
532
|
+
accumulator.failures.push({
|
|
533
|
+
phase: 'marketplace.rollback',
|
|
534
|
+
message: errorMessage(rollbackError),
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return failed(command, target, accumulator, failurePhase, primary);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
async function executeCleanup(options) {
|
|
542
|
+
const cleanupError = await cleanupTarget(options.target, options.driver, options.store, options.accumulator, 'cleanup.owned', options.events);
|
|
543
|
+
if (cleanupError) {
|
|
544
|
+
return failed(options.command, options.target, options.accumulator, cleanupError.phase, cleanupError.message);
|
|
545
|
+
}
|
|
546
|
+
if (options.command === 'cleanup' && options.driver.finalizeCleanup) {
|
|
547
|
+
try {
|
|
548
|
+
await options.driver.finalizeCleanup(options.target);
|
|
549
|
+
}
|
|
550
|
+
catch (error) {
|
|
551
|
+
return failed(options.command, options.target, options.accumulator, 'cleanup.owned', errorMessage(error));
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
return succeeded(options.command, options.target, options.accumulator);
|
|
555
|
+
}
|
|
556
|
+
async function executeUninstall(options) {
|
|
557
|
+
const { target, driver, store, accumulator, events } = options;
|
|
558
|
+
let inspection;
|
|
559
|
+
try {
|
|
560
|
+
inspection = await action(accumulator, 'preflight.inspect', () => withOwnershipLease(target, driver, () => inspectOwnedComponents({
|
|
561
|
+
components: target.ownedComponents,
|
|
562
|
+
nativeProbe: driver.probeNative,
|
|
563
|
+
})), events, collisionMessage);
|
|
564
|
+
}
|
|
565
|
+
catch (error) {
|
|
566
|
+
return failed('uninstall', target, accumulator, 'preflight.inspect', errorMessage(error));
|
|
567
|
+
}
|
|
568
|
+
const preflightCollision = collisionMessage(inspection);
|
|
569
|
+
if (preflightCollision) {
|
|
570
|
+
recordInspectionResiduals(accumulator, inspection);
|
|
571
|
+
return failed('uninstall', target, accumulator, 'preflight.inspect', preflightCollision);
|
|
572
|
+
}
|
|
573
|
+
let snapshot;
|
|
574
|
+
const stableRead = store.readStable !== undefined;
|
|
575
|
+
try {
|
|
576
|
+
snapshot = await action(accumulator, 'active.read', () => (store.readStable ?? store.read)(target), events);
|
|
577
|
+
}
|
|
578
|
+
catch (error) {
|
|
579
|
+
const message = `Active lifecycle snapshot is corrupt. Run cleanup to remove live outputs without lifecycle: ${errorMessage(error)}`;
|
|
580
|
+
return failed('uninstall', target, accumulator, 'active.read', message);
|
|
581
|
+
}
|
|
582
|
+
if (!snapshot) {
|
|
583
|
+
const live = inspection.components.filter((component) => component.state !== 'absent'
|
|
584
|
+
&& isUninstallLiveOwnershipComponent(component.component));
|
|
585
|
+
if (live.length === 0)
|
|
586
|
+
return succeeded('uninstall', target, accumulator);
|
|
587
|
+
if (!target.plugin.manifest.scripts?.lifecycle?.uninstall) {
|
|
588
|
+
const cleanupError = await cleanupTarget(target, driver, store, accumulator, 'cleanup.owned', events);
|
|
589
|
+
if (cleanupError) {
|
|
590
|
+
return failed('uninstall', target, accumulator, cleanupError.phase, cleanupError.message);
|
|
591
|
+
}
|
|
592
|
+
if (driver.finalizeCleanup) {
|
|
593
|
+
try {
|
|
594
|
+
await driver.finalizeCleanup(target);
|
|
595
|
+
}
|
|
596
|
+
catch (error) {
|
|
597
|
+
return failed('uninstall', target, accumulator, 'cleanup.owned', errorMessage(error));
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
return succeeded('uninstall', target, accumulator);
|
|
601
|
+
}
|
|
602
|
+
pushUnique(accumulator.residual, live.map((component) => ownedComponentLabel(component.component)));
|
|
603
|
+
return failed('uninstall', target, accumulator, 'active.read', 'Active lifecycle snapshot is missing while live owned components exist. Run cleanup to remove them without lifecycle.');
|
|
604
|
+
}
|
|
605
|
+
const live = inspection.components.filter((component) => component.state === 'present'
|
|
606
|
+
&& isUninstallLiveOwnershipComponent(component.component));
|
|
607
|
+
if (live.length === 0) {
|
|
608
|
+
if (stableRead && store.releaseRead) {
|
|
609
|
+
try {
|
|
610
|
+
await action(accumulator, 'active.release', () => store.releaseRead(snapshot), events);
|
|
611
|
+
}
|
|
612
|
+
catch (error) {
|
|
613
|
+
return failed('uninstall', target, accumulator, 'active.release', errorMessage(error));
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
return failed('uninstall', target, accumulator, 'preflight.inspect', 'liveOwnershipRequired: uninstall requires at least one live owned or native component. Run cleanup to remove orphan lifecycle metadata.');
|
|
617
|
+
}
|
|
618
|
+
const historical = restoreLifecycleActiveScriptInputs(snapshot);
|
|
619
|
+
let lifecycleError;
|
|
620
|
+
try {
|
|
621
|
+
await action(accumulator, 'lifecycle.uninstall', () => driver.runLifecycle({
|
|
622
|
+
event: 'uninstall',
|
|
623
|
+
target,
|
|
624
|
+
plugin: historical.currentPlugin,
|
|
625
|
+
artifacts: historical.artifacts,
|
|
626
|
+
}), events);
|
|
627
|
+
}
|
|
628
|
+
catch (error) {
|
|
629
|
+
lifecycleError = error;
|
|
630
|
+
}
|
|
631
|
+
if (stableRead && store.releaseRead) {
|
|
632
|
+
try {
|
|
633
|
+
await action(accumulator, 'active.release', () => store.releaseRead(snapshot), events);
|
|
634
|
+
}
|
|
635
|
+
catch (error) {
|
|
636
|
+
const message = errorMessage(error);
|
|
637
|
+
accumulator.failures.push({ phase: 'active.release', message });
|
|
638
|
+
if (lifecycleError === undefined) {
|
|
639
|
+
return failed('uninstall', target, accumulator, 'active.release', message);
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
if (lifecycleError !== undefined) {
|
|
644
|
+
return failed('uninstall', target, accumulator, 'lifecycle.uninstall', errorMessage(lifecycleError));
|
|
645
|
+
}
|
|
646
|
+
const cleanupError = await cleanupTarget(target, driver, store, accumulator, 'cleanup.owned', events);
|
|
647
|
+
if (cleanupError) {
|
|
648
|
+
return failed('uninstall', target, accumulator, cleanupError.phase, cleanupError.message);
|
|
649
|
+
}
|
|
650
|
+
if (driver.finalizeCleanup) {
|
|
651
|
+
try {
|
|
652
|
+
await driver.finalizeCleanup(target);
|
|
653
|
+
}
|
|
654
|
+
catch (error) {
|
|
655
|
+
return failed('uninstall', target, accumulator, 'cleanup.owned', errorMessage(error));
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return succeeded('uninstall', target, accumulator);
|
|
659
|
+
}
|
|
660
|
+
export async function executeRebuildOperation(options) {
|
|
661
|
+
const accumulator = createAccumulator();
|
|
662
|
+
const store = options.activeStore;
|
|
663
|
+
const events = {
|
|
664
|
+
command: options.command,
|
|
665
|
+
target: options.target.identity,
|
|
666
|
+
emit: options.onActionEvent,
|
|
667
|
+
now: options.now ?? Date.now,
|
|
668
|
+
};
|
|
669
|
+
try {
|
|
670
|
+
validateDesiredTarget(options.target);
|
|
671
|
+
}
|
|
672
|
+
catch (error) {
|
|
673
|
+
return failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
|
|
674
|
+
}
|
|
675
|
+
let operationLock;
|
|
676
|
+
if (store.acquireOperation) {
|
|
677
|
+
try {
|
|
678
|
+
operationLock = await action(accumulator, 'operation.lock', () => store.acquireOperation(options.target.identity), events);
|
|
679
|
+
}
|
|
680
|
+
catch (error) {
|
|
681
|
+
return failed(options.command, options.target, accumulator, 'operation.lock', errorMessage(error));
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
let result;
|
|
685
|
+
try {
|
|
686
|
+
const execute = () => executeRebuildOperationLocked(options, accumulator, store, events);
|
|
687
|
+
result = options.target.identity.sourceId !== undefined
|
|
688
|
+
? await (options.driver.withMaterializeLease?.(options.target, execute) ?? execute())
|
|
689
|
+
: await execute();
|
|
690
|
+
}
|
|
691
|
+
catch (error) {
|
|
692
|
+
result = failed(options.command, options.target, accumulator, 'preflight', errorMessage(error));
|
|
693
|
+
}
|
|
694
|
+
if (operationLock) {
|
|
695
|
+
try {
|
|
696
|
+
await action(accumulator, 'operation.release', () => releaseRebuildOperationLease(operationLock), events);
|
|
697
|
+
}
|
|
698
|
+
catch (error) {
|
|
699
|
+
const message = errorMessage(error);
|
|
700
|
+
accumulator.failures.push({ phase: 'operation.release', message });
|
|
701
|
+
if (result.status === 'succeeded') {
|
|
702
|
+
return failed(options.command, options.target, accumulator, 'operation.release', message);
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
return result;
|
|
707
|
+
}
|
|
708
|
+
async function executeRebuildOperationLocked(options, accumulator, store, events) {
|
|
709
|
+
if (options.command === 'install' || options.command === 'upgrade') {
|
|
710
|
+
return materializeTarget({
|
|
711
|
+
command: options.command,
|
|
712
|
+
lifecycleEvent: options.command,
|
|
713
|
+
target: options.target,
|
|
714
|
+
driver: options.driver,
|
|
715
|
+
store,
|
|
716
|
+
accumulator,
|
|
717
|
+
events,
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
if (options.command === 'cleanup') {
|
|
721
|
+
return executeCleanup({
|
|
722
|
+
command: 'cleanup',
|
|
723
|
+
target: options.target,
|
|
724
|
+
driver: options.driver,
|
|
725
|
+
store,
|
|
726
|
+
accumulator,
|
|
727
|
+
events,
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
if (options.command === 'uninstall') {
|
|
731
|
+
return executeUninstall({
|
|
732
|
+
target: options.target,
|
|
733
|
+
driver: options.driver,
|
|
734
|
+
store,
|
|
735
|
+
accumulator,
|
|
736
|
+
events,
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
let inspection;
|
|
740
|
+
try {
|
|
741
|
+
inspection = await action(accumulator, 'preflight.inspect', () => withOwnershipLease(options.target, options.driver, async () => {
|
|
742
|
+
await options.driver.preflightMaterialize?.(options.target);
|
|
743
|
+
return inspectOwnedComponents({
|
|
744
|
+
components: options.target.ownedComponents,
|
|
745
|
+
nativeProbe: options.driver.probeNative,
|
|
746
|
+
});
|
|
747
|
+
}), events, collisionMessage);
|
|
748
|
+
}
|
|
749
|
+
catch (error) {
|
|
750
|
+
return failed('reinstall', options.target, accumulator, 'preflight.inspect', errorMessage(error));
|
|
751
|
+
}
|
|
752
|
+
const collision = collisionMessage(inspection);
|
|
753
|
+
if (collision) {
|
|
754
|
+
recordInspectionResiduals(accumulator, inspection);
|
|
755
|
+
return failed('reinstall', options.target, accumulator, 'preflight.inspect', collision);
|
|
756
|
+
}
|
|
757
|
+
const cleanupResult = await executeCleanup({
|
|
758
|
+
command: 'reinstall',
|
|
759
|
+
target: options.target,
|
|
760
|
+
driver: options.driver,
|
|
761
|
+
store,
|
|
762
|
+
accumulator,
|
|
763
|
+
events,
|
|
764
|
+
});
|
|
765
|
+
if (cleanupResult.status === 'failed')
|
|
766
|
+
return cleanupResult;
|
|
767
|
+
return materializeTarget({
|
|
768
|
+
command: 'reinstall',
|
|
769
|
+
lifecycleEvent: 'install',
|
|
770
|
+
target: options.target,
|
|
771
|
+
driver: options.driver,
|
|
772
|
+
store,
|
|
773
|
+
accumulator,
|
|
774
|
+
events,
|
|
775
|
+
});
|
|
776
|
+
}
|
|
777
|
+
export async function executeRebuildTargets(options) {
|
|
778
|
+
const results = [];
|
|
779
|
+
for (const target of options.targets) {
|
|
780
|
+
results.push(await executeRebuildOperation({
|
|
781
|
+
command: options.command,
|
|
782
|
+
target,
|
|
783
|
+
driver: options.driver,
|
|
784
|
+
activeStore: options.activeStore,
|
|
785
|
+
...(options.onActionEvent ? { onActionEvent: options.onActionEvent } : {}),
|
|
786
|
+
...(options.now ? { now: options.now } : {}),
|
|
787
|
+
}));
|
|
788
|
+
}
|
|
789
|
+
return results;
|
|
790
|
+
}
|
|
791
|
+
//# sourceMappingURL=rebuild-operations.js.map
|