@lesliechan721/aw 0.1.0-beta.5 → 0.1.0-beta.50
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.mjs +100 -501
- package/dist/authoring/assets/aw-config.mjs.map +1 -1
- package/dist/authoring/assets/aw-runtime-config.d.mts +13 -0
- package/dist/authoring/assets/aw-runtime-config.mjs +199 -0
- package/dist/authoring/assets/aw-runtime-config.mjs.map +1 -0
- package/dist/authoring/scripts/add-skill.mjs +4 -4
- package/dist/authoring/scripts/add-skill.mjs.map +1 -1
- package/dist/authoring/scripts/init-plugin.mjs +67 -97
- package/dist/authoring/scripts/init-plugin.mjs.map +1 -1
- package/dist/authoring/scripts/lib/plugin-root.mjs +4 -4
- package/dist/authoring/scripts/lib/plugin-root.mjs.map +1 -1
- package/dist/authoring/scripts/lib/plugin-version-check.d.mts +1 -0
- package/dist/authoring/scripts/lib/plugin-version-check.mjs +229 -8
- package/dist/authoring/scripts/lib/plugin-version-check.mjs.map +1 -1
- package/dist/authoring/scripts/lib/skill-scaffold.d.mts +77 -90
- package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -120
- package/dist/authoring/scripts/lib/skill-scaffold.mjs.map +1 -1
- package/dist/authoring/scripts/plugin-status.mjs +8 -11
- package/dist/authoring/scripts/plugin-status.mjs.map +1 -1
- package/dist/authoring/scripts/remove-plugin.mjs +3 -2
- package/dist/authoring/scripts/remove-plugin.mjs.map +1 -1
- package/dist/authoring/scripts/validate-plugin.mjs +346 -1131
- package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
- package/dist/scripts/aw-skill-eval-materializer.d.ts +26 -0
- package/dist/scripts/aw-skill-eval-materializer.js +306 -0
- package/dist/scripts/aw-skill-eval-materializer.js.map +1 -0
- package/dist/scripts/bundle-plugins.d.ts +1 -0
- package/dist/scripts/bundle-plugins.js +20 -5
- package/dist/scripts/bundle-plugins.js.map +1 -1
- package/dist/scripts/plugin-staging.d.ts +7 -9
- package/dist/scripts/plugin-staging.js +18 -29
- package/dist/scripts/plugin-staging.js.map +1 -1
- package/dist/scripts/test-plugin-scripts.d.ts +2 -0
- package/dist/scripts/test-plugin-scripts.js +47 -76
- package/dist/scripts/test-plugin-scripts.js.map +1 -1
- package/dist/scripts/test-workers.d.mts +24 -0
- package/dist/scripts/test-workers.mjs +59 -0
- package/dist/scripts/test-workers.mjs.map +1 -0
- package/dist/src/adapters/helpers.js +2 -2
- package/dist/src/adapters/helpers.js.map +1 -1
- package/dist/src/authoring/workspace-commands.d.ts +17 -1
- package/dist/src/authoring/workspace-commands.js +21 -4
- package/dist/src/authoring/workspace-commands.js.map +1 -1
- package/dist/src/commands/aw-capabilities.d.ts +78 -0
- package/dist/src/commands/aw-capabilities.js +264 -0
- package/dist/src/commands/aw-capabilities.js.map +1 -0
- package/dist/src/commands/catalog-dev-source.d.ts +154 -0
- package/dist/src/commands/catalog-dev-source.js +655 -0
- package/dist/src/commands/catalog-dev-source.js.map +1 -0
- package/dist/src/commands/catalog-generation.d.ts +21 -0
- package/dist/src/commands/catalog-generation.js +9 -0
- package/dist/src/commands/catalog-generation.js.map +1 -0
- package/dist/src/commands/catalog-publication-inspection.d.ts +71 -30
- package/dist/src/commands/catalog-publication-inspection.js +475 -63
- package/dist/src/commands/catalog-publication-inspection.js.map +1 -1
- package/dist/src/commands/catalog-publication-journal.d.ts +68 -0
- package/dist/src/commands/catalog-publication-journal.js +292 -0
- package/dist/src/commands/catalog-publication-journal.js.map +1 -0
- package/dist/src/commands/catalog-publication-target.d.ts +18 -0
- package/dist/src/commands/catalog-publication-target.js +95 -0
- package/dist/src/commands/catalog-publication-target.js.map +1 -0
- package/dist/src/commands/catalog-publish.d.ts +73 -15
- package/dist/src/commands/catalog-publish.js +701 -212
- package/dist/src/commands/catalog-publish.js.map +1 -1
- package/dist/src/commands/catalog-source.d.ts +60 -22
- package/dist/src/commands/catalog-source.js +311 -91
- package/dist/src/commands/catalog-source.js.map +1 -1
- package/dist/src/commands/catalog-status.d.ts +18 -22
- package/dist/src/commands/catalog-status.js +81 -115
- package/dist/src/commands/catalog-status.js.map +1 -1
- package/dist/src/commands/catalog-store.d.ts +104 -0
- package/dist/src/commands/catalog-store.js +685 -0
- package/dist/src/commands/catalog-store.js.map +1 -0
- package/dist/src/commands/catalog-workspace-resolution.d.ts +13 -0
- package/dist/src/commands/catalog-workspace-resolution.js +42 -0
- package/dist/src/commands/catalog-workspace-resolution.js.map +1 -0
- package/dist/src/commands/console.js +28 -17
- package/dist/src/commands/console.js.map +1 -1
- package/dist/src/commands/dependency-operation-plan.d.ts +52 -15
- package/dist/src/commands/dependency-operation-plan.js +289 -7
- package/dist/src/commands/dependency-operation-plan.js.map +1 -1
- package/dist/src/commands/init.d.ts +5 -11
- package/dist/src/commands/init.js +30 -51
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/offline-cleanup-evidence.d.ts +67 -0
- package/dist/src/commands/offline-cleanup-evidence.js +181 -0
- package/dist/src/commands/offline-cleanup-evidence.js.map +1 -0
- package/dist/src/commands/operation-plan.d.ts +146 -0
- package/dist/src/commands/operation-plan.js +71 -0
- package/dist/src/commands/operation-plan.js.map +1 -0
- package/dist/src/commands/operation-planner.d.ts +46 -0
- package/dist/src/commands/operation-planner.js +141 -0
- package/dist/src/commands/operation-planner.js.map +1 -0
- package/dist/src/commands/options.d.ts +9 -7
- package/dist/src/commands/options.js +83 -21
- package/dist/src/commands/options.js.map +1 -1
- package/dist/src/commands/plugin-capabilities.js +23 -3
- package/dist/src/commands/plugin-capabilities.js.map +1 -1
- package/dist/src/commands/rebuild-command.d.ts +77 -31
- package/dist/src/commands/rebuild-command.js +4862 -729
- package/dist/src/commands/rebuild-command.js.map +1 -1
- package/dist/src/commands/rebuild-integration.d.ts +131 -21
- package/dist/src/commands/rebuild-integration.js +2866 -1339
- package/dist/src/commands/rebuild-integration.js.map +1 -1
- package/dist/src/commands/rebuild-operations.d.ts +58 -30
- package/dist/src/commands/rebuild-operations.js +260 -319
- package/dist/src/commands/rebuild-operations.js.map +1 -1
- package/dist/src/commands/reconcile-operation-plan.d.ts +28 -0
- package/dist/src/commands/reconcile-operation-plan.js +47 -0
- package/dist/src/commands/reconcile-operation-plan.js.map +1 -0
- package/dist/src/commands/review-inspection.d.ts +228 -0
- package/dist/src/commands/review-inspection.js +1341 -0
- package/dist/src/commands/review-inspection.js.map +1 -0
- package/dist/src/commands/review-preparation.d.ts +49 -0
- package/dist/src/commands/review-preparation.js +427 -0
- package/dist/src/commands/review-preparation.js.map +1 -0
- package/dist/src/commands/runtime.d.ts +1 -5
- package/dist/src/commands/runtime.js +24 -50
- package/dist/src/commands/runtime.js.map +1 -1
- package/dist/src/commands/skill-eval.d.ts +39 -0
- package/dist/src/commands/skill-eval.js +400 -0
- package/dist/src/commands/skill-eval.js.map +1 -0
- package/dist/src/commands/status-v6.d.ts +279 -0
- package/dist/src/commands/status-v6.js +2787 -0
- package/dist/src/commands/status-v6.js.map +1 -0
- package/dist/src/commands/sync-command.d.ts +40 -0
- package/dist/src/commands/sync-command.js +250 -0
- package/dist/src/commands/sync-command.js.map +1 -0
- package/dist/src/commands/wizard.d.ts +8 -5
- package/dist/src/commands/wizard.js +6 -4
- package/dist/src/commands/wizard.js.map +1 -1
- package/dist/src/commands/write-commands.d.ts +9 -3
- package/dist/src/commands/write-commands.js +127 -31
- package/dist/src/commands/write-commands.js.map +1 -1
- package/dist/src/constants.d.ts +7 -1
- package/dist/src/constants.js +7 -1
- package/dist/src/constants.js.map +1 -1
- package/dist/src/eval/manifest-v1.d.ts +71 -0
- package/dist/src/eval/manifest-v1.js +370 -0
- package/dist/src/eval/manifest-v1.js.map +1 -0
- package/dist/src/generators/local-plugin.d.ts +5 -1
- package/dist/src/generators/local-plugin.js +236 -109
- package/dist/src/generators/local-plugin.js.map +1 -1
- package/dist/src/index.d.ts +10 -4
- package/dist/src/index.js +1793 -486
- package/dist/src/index.js.map +1 -1
- package/dist/src/output/command-receipt.d.ts +43 -46
- package/dist/src/output/command-receipt.js +256 -80
- package/dist/src/output/command-receipt.js.map +1 -1
- package/dist/src/output/model.d.ts +3 -44
- package/dist/src/output/model.js +1 -144
- package/dist/src/output/model.js.map +1 -1
- package/dist/src/output/rebuild-progress.js +1 -13
- package/dist/src/output/rebuild-progress.js.map +1 -1
- package/dist/src/portable/commands.d.ts +46 -7
- package/dist/src/portable/commands.js +349 -37
- package/dist/src/portable/commands.js.map +1 -1
- package/dist/src/portable/materializer.d.ts +17 -4
- package/dist/src/portable/materializer.js +179 -41
- package/dist/src/portable/materializer.js.map +1 -1
- package/dist/src/portable/skills-cli.d.ts +15 -7
- package/dist/src/portable/skills-cli.js +74 -20
- package/dist/src/portable/skills-cli.js.map +1 -1
- package/dist/src/review/eval-source-input.d.ts +43 -0
- package/dist/src/review/eval-source-input.js +207 -0
- package/dist/src/review/eval-source-input.js.map +1 -0
- package/dist/src/review/review-profile.d.ts +17 -0
- package/dist/src/review/review-profile.js +234 -0
- package/dist/src/review/review-profile.js.map +1 -0
- package/dist/src/review/review-selection.d.ts +30 -0
- package/dist/src/review/review-selection.js +527 -0
- package/dist/src/review/review-selection.js.map +1 -0
- package/dist/src/review/review-types.d.ts +68 -0
- package/dist/src/review/review-types.js +16 -0
- package/dist/src/review/review-types.js.map +1 -0
- package/dist/src/review/skill-materialization.d.ts +13 -0
- package/dist/src/review/skill-materialization.js +75 -0
- package/dist/src/review/skill-materialization.js.map +1 -0
- package/dist/src/review/source-binding.d.ts +183 -0
- package/dist/src/review/source-binding.js +708 -0
- package/dist/src/review/source-binding.js.map +1 -0
- package/dist/src/tui/catalog-freshness.d.ts +1 -0
- package/dist/src/tui/catalog-freshness.js +2 -0
- package/dist/src/tui/catalog-freshness.js.map +1 -0
- package/dist/src/tui/catalog-generation.d.ts +21 -0
- package/dist/src/tui/catalog-generation.js +156 -0
- package/dist/src/tui/catalog-generation.js.map +1 -0
- package/dist/src/tui/catalog-sources/projection.d.ts +4 -0
- package/dist/src/tui/catalog-sources/projection.js +17 -0
- package/dist/src/tui/catalog-sources/projection.js.map +1 -0
- package/dist/src/tui/catalog-sources/review.d.ts +3 -0
- package/dist/src/tui/catalog-sources/review.js +13 -0
- package/dist/src/tui/catalog-sources/review.js.map +1 -0
- package/dist/src/tui/catalog-sources/screens.d.ts +12 -0
- package/dist/src/tui/catalog-sources/screens.js +40 -0
- package/dist/src/tui/catalog-sources/screens.js.map +1 -0
- package/dist/src/tui/catalog-sources/session.d.ts +32 -0
- package/dist/src/tui/catalog-sources/session.js +300 -0
- package/dist/src/tui/catalog-sources/session.js.map +1 -0
- package/dist/src/tui/catalog-sources/types.d.ts +54 -0
- package/dist/src/tui/catalog-sources/types.js +2 -0
- package/dist/src/tui/catalog-sources/types.js.map +1 -0
- package/dist/src/tui/catalog-store-task.d.ts +16 -0
- package/dist/src/tui/catalog-store-task.js +19 -0
- package/dist/src/tui/catalog-store-task.js.map +1 -0
- package/dist/src/tui/clipboard.d.ts +13 -0
- package/dist/src/tui/clipboard.js +95 -0
- package/dist/src/tui/clipboard.js.map +1 -0
- package/dist/src/tui/components.d.ts +110 -3
- package/dist/src/tui/components.js +183 -36
- package/dist/src/tui/components.js.map +1 -1
- package/dist/src/tui/config-array-draft.d.ts +29 -0
- package/dist/src/tui/config-array-draft.js +48 -0
- package/dist/src/tui/config-array-draft.js.map +1 -0
- package/dist/src/tui/config-leaf-editor.d.ts +16 -0
- package/dist/src/tui/config-leaf-editor.js +206 -0
- package/dist/src/tui/config-leaf-editor.js.map +1 -0
- package/dist/src/tui/config-value-presentation.d.ts +20 -0
- package/dist/src/tui/config-value-presentation.js +104 -0
- package/dist/src/tui/config-value-presentation.js.map +1 -0
- package/dist/src/tui/console-app-v4.d.ts +14 -4
- package/dist/src/tui/console-app-v4.js +8941 -1872
- package/dist/src/tui/console-app-v4.js.map +1 -1
- package/dist/src/tui/content-item-card.d.ts +13 -0
- package/dist/src/tui/content-item-card.js +51 -0
- package/dist/src/tui/content-item-card.js.map +1 -0
- package/dist/src/tui/controller-runtime.d.ts +10 -2
- package/dist/src/tui/controller-runtime.js +3211 -388
- package/dist/src/tui/controller-runtime.js.map +1 -1
- package/dist/src/tui/controller.d.ts +615 -45
- package/dist/src/tui/controller.js +3558 -768
- package/dist/src/tui/controller.js.map +1 -1
- package/dist/src/tui/dependency-graph-view.d.ts +39 -0
- package/dist/src/tui/dependency-graph-view.js +121 -0
- package/dist/src/tui/dependency-graph-view.js.map +1 -0
- package/dist/src/tui/dependency-graph.d.ts +81 -0
- package/dist/src/tui/dependency-graph.js +452 -0
- package/dist/src/tui/dependency-graph.js.map +1 -0
- package/dist/src/tui/diagnostic-projection.d.ts +23 -0
- package/dist/src/tui/diagnostic-projection.js +567 -0
- package/dist/src/tui/diagnostic-projection.js.map +1 -0
- package/dist/src/tui/diagnostics.d.ts +3 -3
- package/dist/src/tui/diagnostics.js +14 -2
- package/dist/src/tui/diagnostics.js.map +1 -1
- package/dist/src/tui/entity-cards.d.ts +55 -0
- package/dist/src/tui/entity-cards.js +220 -0
- package/dist/src/tui/entity-cards.js.map +1 -0
- package/dist/src/tui/glossary.d.ts +23 -0
- package/dist/src/tui/glossary.js +42 -0
- package/dist/src/tui/glossary.js.map +1 -0
- package/dist/src/tui/index.d.ts +6 -1
- package/dist/src/tui/index.js +5 -1
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/tui/input-display.d.ts +9 -0
- package/dist/src/tui/input-display.js +58 -0
- package/dist/src/tui/input-display.js.map +1 -0
- package/dist/src/tui/keys.d.ts +44 -0
- package/dist/src/tui/keys.js +43 -15
- package/dist/src/tui/keys.js.map +1 -1
- package/dist/src/tui/lifecycle-action-view.d.ts +6 -0
- package/dist/src/tui/lifecycle-action-view.js +36 -0
- package/dist/src/tui/lifecycle-action-view.js.map +1 -0
- package/dist/src/tui/model.d.ts +223 -31
- package/dist/src/tui/model.js +1510 -397
- package/dist/src/tui/model.js.map +1 -1
- package/dist/src/tui/operation-diagnostic-screens.d.ts +8 -0
- package/dist/src/tui/operation-diagnostic-screens.js +71 -0
- package/dist/src/tui/operation-diagnostic-screens.js.map +1 -0
- package/dist/src/tui/operation-history.d.ts +81 -0
- package/dist/src/tui/operation-history.js +136 -0
- package/dist/src/tui/operation-history.js.map +1 -0
- package/dist/src/tui/operation-review-planner.d.ts +21 -0
- package/dist/src/tui/operation-review-planner.js +1295 -0
- package/dist/src/tui/operation-review-planner.js.map +1 -0
- package/dist/src/tui/plugin-content.d.ts +31 -0
- package/dist/src/tui/plugin-content.js +680 -0
- package/dist/src/tui/plugin-content.js.map +1 -0
- package/dist/src/tui/plugin-detail.d.ts +52 -0
- package/dist/src/tui/plugin-detail.js +165 -0
- package/dist/src/tui/plugin-detail.js.map +1 -0
- package/dist/src/tui/plugin-write-task.d.ts +69 -0
- package/dist/src/tui/plugin-write-task.js +286 -0
- package/dist/src/tui/plugin-write-task.js.map +1 -0
- package/dist/src/tui/project-inventory.d.ts +68 -0
- package/dist/src/tui/project-inventory.js +203 -0
- package/dist/src/tui/project-inventory.js.map +1 -0
- package/dist/src/tui/prompt.js +4 -15
- package/dist/src/tui/prompt.js.map +1 -1
- package/dist/src/tui/query-header.d.ts +30 -0
- package/dist/src/tui/query-header.js +40 -0
- package/dist/src/tui/query-header.js.map +1 -0
- package/dist/src/tui/reader.d.ts +37 -0
- package/dist/src/tui/reader.js +47 -0
- package/dist/src/tui/reader.js.map +1 -0
- package/dist/src/tui/router.d.ts +197 -10
- package/dist/src/tui/router.js +338 -50
- package/dist/src/tui/router.js.map +1 -1
- package/dist/src/tui/screen-registry.d.ts +701 -0
- package/dist/src/tui/screen-registry.js +230 -0
- package/dist/src/tui/screen-registry.js.map +1 -0
- package/dist/src/tui/session-console-app.d.ts +6 -0
- package/dist/src/tui/session-console-app.js +13 -0
- package/dist/src/tui/session-console-app.js.map +1 -0
- package/dist/src/tui/session-host.d.ts +45 -0
- package/dist/src/tui/session-host.js +209 -0
- package/dist/src/tui/session-host.js.map +1 -0
- package/dist/src/tui/source-detail-card.d.ts +29 -0
- package/dist/src/tui/source-detail-card.js +45 -0
- package/dist/src/tui/source-detail-card.js.map +1 -0
- package/dist/src/tui/source-ref-presets.d.ts +3 -0
- package/dist/src/tui/source-ref-presets.js +11 -0
- package/dist/src/tui/source-ref-presets.js.map +1 -0
- package/dist/src/tui/theme.d.ts +12 -0
- package/dist/src/tui/theme.js +12 -0
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/viewport.d.ts +1 -0
- package/dist/src/tui/viewport.js +23 -0
- package/dist/src/tui/viewport.js.map +1 -1
- package/dist/src/tui/views.js +31 -3
- package/dist/src/tui/views.js.map +1 -1
- package/dist/src/tui/wizard.js +37 -13
- package/dist/src/tui/wizard.js.map +1 -1
- package/dist/src/types.d.ts +244 -20
- package/dist/src/types.js +1 -0
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/agent-version.d.ts +7 -1
- package/dist/src/utils/agent-version.js +41 -8
- package/dist/src/utils/agent-version.js.map +1 -1
- package/dist/src/utils/artifact-plan.d.ts +5 -4
- package/dist/src/utils/artifact-plan.js +18 -7
- package/dist/src/utils/artifact-plan.js.map +1 -1
- package/dist/src/utils/artifact-renderer.d.ts +17 -7
- package/dist/src/utils/artifact-renderer.js +214 -216
- package/dist/src/utils/artifact-renderer.js.map +1 -1
- package/dist/src/utils/artifact-request.d.ts +21 -0
- package/dist/src/utils/artifact-request.js +78 -0
- package/dist/src/utils/artifact-request.js.map +1 -0
- package/dist/src/utils/aw-home-mutation-lock.d.ts +1 -0
- package/dist/src/utils/aw-home-mutation-lock.js +32 -4
- package/dist/src/utils/aw-home-mutation-lock.js.map +1 -1
- package/dist/src/utils/bundle-integrity.d.ts +0 -1
- package/dist/src/utils/bundle-integrity.js +0 -25
- package/dist/src/utils/bundle-integrity.js.map +1 -1
- package/dist/src/utils/bundle-layout.js +22 -29
- package/dist/src/utils/bundle-layout.js.map +1 -1
- package/dist/src/utils/catalog-capability-projection.d.ts +8 -0
- package/dist/src/utils/catalog-capability-projection.js +14 -0
- package/dist/src/utils/catalog-capability-projection.js.map +1 -0
- package/dist/src/utils/catalog-digests.d.ts +10 -0
- package/dist/src/utils/catalog-digests.js +57 -20
- package/dist/src/utils/catalog-digests.js.map +1 -1
- package/dist/src/utils/catalog-generation-control-snapshot.d.ts +11 -0
- package/dist/src/utils/catalog-generation-control-snapshot.js +45 -0
- package/dist/src/utils/catalog-generation-control-snapshot.js.map +1 -0
- package/dist/src/utils/catalog-generation-error.d.ts +16 -0
- package/dist/src/utils/catalog-generation-error.js +30 -0
- package/dist/src/utils/catalog-generation-error.js.map +1 -0
- package/dist/src/utils/catalog-generation-resolver.d.ts +44 -0
- package/dist/src/utils/catalog-generation-resolver.js +273 -0
- package/dist/src/utils/catalog-generation-resolver.js.map +1 -0
- package/dist/src/utils/catalog-generation-service.d.ts +172 -0
- package/dist/src/utils/catalog-generation-service.js +1271 -0
- package/dist/src/utils/catalog-generation-service.js.map +1 -0
- package/dist/src/utils/catalog-generation-state.d.ts +22 -0
- package/dist/src/utils/catalog-generation-state.js +192 -0
- package/dist/src/utils/catalog-generation-state.js.map +1 -0
- package/dist/src/utils/catalog-generation-store.d.ts +58 -0
- package/dist/src/utils/catalog-generation-store.js +452 -0
- package/dist/src/utils/catalog-generation-store.js.map +1 -0
- package/dist/src/utils/catalog-manifest-v7.d.ts +5 -0
- package/dist/src/utils/{catalog-manifest-v4.js → catalog-manifest-v7.js} +35 -43
- package/dist/src/utils/catalog-manifest-v7.js.map +1 -0
- package/dist/src/utils/catalog-operation-context.d.ts +20 -0
- package/dist/src/utils/catalog-operation-context.js +142 -0
- package/dist/src/utils/catalog-operation-context.js.map +1 -0
- package/dist/src/utils/catalog-public-error.d.ts +7 -3
- package/dist/src/utils/catalog-public-error.js +28 -8
- package/dist/src/utils/catalog-public-error.js.map +1 -1
- package/dist/src/utils/catalog-runtime-projection.d.ts +3 -0
- package/dist/src/utils/catalog-runtime-projection.js +5 -40
- package/dist/src/utils/catalog-runtime-projection.js.map +1 -1
- package/dist/src/utils/catalog-snapshot.d.ts +5 -3
- package/dist/src/utils/catalog-snapshot.js +11 -3
- package/dist/src/utils/catalog-snapshot.js.map +1 -1
- package/dist/src/utils/catalog-source-identity.d.ts +1 -0
- package/dist/src/utils/catalog-source-identity.js +21 -2
- package/dist/src/utils/catalog-source-identity.js.map +1 -1
- package/dist/src/utils/catalog-source-impact.d.ts +21 -0
- package/dist/src/utils/catalog-source-impact.js +344 -0
- package/dist/src/utils/catalog-source-impact.js.map +1 -0
- package/dist/src/utils/catalog-source-references.d.ts +3 -2
- package/dist/src/utils/catalog-source-references.js +195 -347
- package/dist/src/utils/catalog-source-references.js.map +1 -1
- package/dist/src/utils/catalog-sources.d.ts +15 -1
- package/dist/src/utils/catalog-sources.js +206 -27
- package/dist/src/utils/catalog-sources.js.map +1 -1
- package/dist/src/utils/codex-config.d.ts +2 -0
- package/dist/src/utils/codex-config.js +26 -5
- package/dist/src/utils/codex-config.js.map +1 -1
- package/dist/src/utils/codex-manager.d.ts +79 -0
- package/dist/src/utils/codex-manager.js +747 -0
- package/dist/src/utils/codex-manager.js.map +1 -0
- package/dist/src/utils/codex-marketplace-path.d.ts +5 -0
- package/dist/src/utils/codex-marketplace-path.js +45 -0
- package/dist/src/utils/codex-marketplace-path.js.map +1 -0
- package/dist/src/utils/codex-native-observation.d.ts +49 -0
- package/dist/src/utils/codex-native-observation.js +154 -0
- package/dist/src/utils/codex-native-observation.js.map +1 -0
- package/dist/src/utils/codex-native-render-receipt.d.ts +40 -0
- package/dist/src/utils/codex-native-render-receipt.js +205 -0
- package/dist/src/utils/codex-native-render-receipt.js.map +1 -0
- package/dist/src/utils/codex-reconciler.d.ts +126 -0
- package/dist/src/utils/codex-reconciler.js +298 -0
- package/dist/src/utils/codex-reconciler.js.map +1 -0
- package/dist/src/utils/codex-shared-native.d.ts +43 -0
- package/dist/src/utils/codex-shared-native.js +81 -0
- package/dist/src/utils/codex-shared-native.js.map +1 -0
- package/dist/src/utils/codex-skill-staging.d.ts +2 -0
- package/dist/src/utils/codex-skill-staging.js.map +1 -1
- package/dist/src/utils/codex-surface-analysis.d.ts +46 -0
- package/dist/src/utils/codex-surface-analysis.js +247 -0
- package/dist/src/utils/codex-surface-analysis.js.map +1 -0
- package/dist/src/utils/dynamic-skill-tree.d.ts +4 -0
- package/dist/src/utils/dynamic-skill-tree.js +35 -5
- package/dist/src/utils/dynamic-skill-tree.js.map +1 -1
- package/dist/src/utils/git-catalog-provider.d.ts +16 -0
- package/dist/src/utils/git-catalog-provider.js +177 -145
- package/dist/src/utils/git-catalog-provider.js.map +1 -1
- package/dist/src/utils/local-marketplace.d.ts +18 -1
- package/dist/src/utils/local-marketplace.js +354 -84
- package/dist/src/utils/local-marketplace.js.map +1 -1
- package/dist/src/utils/manifest.d.ts +1 -3
- package/dist/src/utils/manifest.js +1 -3
- package/dist/src/utils/manifest.js.map +1 -1
- package/dist/src/utils/multi-source-catalog.d.ts +3 -9
- package/dist/src/utils/multi-source-catalog.js +54 -110
- package/dist/src/utils/multi-source-catalog.js.map +1 -1
- package/dist/src/utils/native-cli.d.ts +55 -7
- package/dist/src/utils/native-cli.js +400 -58
- package/dist/src/utils/native-cli.js.map +1 -1
- package/dist/src/utils/orphan-marketplace-cleanup.js +0 -4
- package/dist/src/utils/orphan-marketplace-cleanup.js.map +1 -1
- package/dist/src/utils/ownership.d.ts +84 -20
- package/dist/src/utils/ownership.js +179 -222
- package/dist/src/utils/ownership.js.map +1 -1
- package/dist/src/utils/path-catalog-provider.d.ts +1 -1
- package/dist/src/utils/path-catalog-provider.js +54 -65
- package/dist/src/utils/path-catalog-provider.js.map +1 -1
- package/dist/src/utils/paths.d.ts +0 -1
- package/dist/src/utils/paths.js +0 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/plugin-config-impact.d.ts +33 -0
- package/dist/src/utils/plugin-config-impact.js +298 -0
- package/dist/src/utils/plugin-config-impact.js.map +1 -0
- package/dist/src/utils/plugin-config-write.d.ts +52 -27
- package/dist/src/utils/plugin-config-write.js +1000 -296
- package/dist/src/utils/plugin-config-write.js.map +1 -1
- package/dist/src/utils/plugin-config.d.ts +153 -93
- package/dist/src/utils/plugin-config.js +1116 -968
- package/dist/src/utils/plugin-config.js.map +1 -1
- package/dist/src/utils/plugin-intent-state.d.ts +49 -0
- package/dist/src/utils/plugin-intent-state.js +320 -0
- package/dist/src/utils/plugin-intent-state.js.map +1 -0
- package/dist/src/utils/plugin-scripts.d.ts +65 -125
- package/dist/src/utils/plugin-scripts.js +484 -524
- package/dist/src/utils/plugin-scripts.js.map +1 -1
- package/dist/src/utils/process-tree.d.ts +2 -2
- package/dist/src/utils/process-tree.js +1 -1
- package/dist/src/utils/process-tree.js.map +1 -1
- package/dist/src/utils/project-boundary.d.ts +11 -13
- package/dist/src/utils/project-boundary.js +28 -34
- package/dist/src/utils/project-boundary.js.map +1 -1
- package/dist/src/utils/runtime-config.d.ts +20 -0
- package/dist/src/utils/runtime-config.js +75 -0
- package/dist/src/utils/runtime-config.js.map +1 -0
- package/dist/src/utils/safe-fs.d.ts +21 -0
- package/dist/src/utils/safe-fs.js +111 -0
- package/dist/src/utils/safe-fs.js.map +1 -0
- package/dist/src/utils/safe-operation-diagnostic.d.ts +15 -0
- package/dist/src/utils/safe-operation-diagnostic.js +33 -0
- package/dist/src/utils/safe-operation-diagnostic.js.map +1 -0
- package/dist/src/utils/sensitive-content.d.ts +4 -0
- package/dist/src/utils/sensitive-content.js +36 -0
- package/dist/src/utils/sensitive-content.js.map +1 -0
- package/dist/src/utils/state-paths.js +7 -2
- package/dist/src/utils/state-paths.js.map +1 -1
- package/dist/src/utils/target-eligibility.d.ts +8 -2
- package/dist/src/utils/target-eligibility.js +17 -8
- package/dist/src/utils/target-eligibility.js.map +1 -1
- package/dist/src/utils/windows-claude-shim.d.ts +7 -0
- package/dist/src/utils/windows-claude-shim.js +10 -0
- package/dist/src/utils/windows-claude-shim.js.map +1 -0
- package/dist/src/utils/windows-npm-shim.d.ts +14 -0
- package/dist/src/utils/windows-npm-shim.js +140 -0
- package/dist/src/utils/windows-npm-shim.js.map +1 -0
- package/dist/vitest.config.js +92 -10
- package/dist/vitest.config.js.map +1 -1
- package/package.json +27 -18
- package/dist/authoring/scripts/check-plugin-versions.d.mts +0 -2
- package/dist/authoring/scripts/check-plugin-versions.mjs +0 -5
- package/dist/authoring/scripts/check-plugin-versions.mjs.map +0 -1
- package/dist/scripts/aw-skill-eval-engine.d.ts +0 -13
- package/dist/scripts/aw-skill-eval-engine.js +0 -31
- package/dist/scripts/aw-skill-eval-engine.js.map +0 -1
- package/dist/scripts/codex-eval-app-server.d.ts +0 -89
- package/dist/scripts/codex-eval-app-server.js +0 -1228
- package/dist/scripts/codex-eval-app-server.js.map +0 -1
- package/dist/scripts/codex-eval-isolation.d.ts +0 -61
- package/dist/scripts/codex-eval-isolation.js +0 -318
- package/dist/scripts/codex-eval-isolation.js.map +0 -1
- package/dist/scripts/codex-eval-process-management.d.ts +0 -8
- package/dist/scripts/codex-eval-process-management.js +0 -69
- package/dist/scripts/codex-eval-process-management.js.map +0 -1
- package/dist/scripts/codex-eval-process-tree.d.ts +0 -38
- package/dist/scripts/codex-eval-process-tree.js +0 -803
- package/dist/scripts/codex-eval-process-tree.js.map +0 -1
- package/dist/scripts/codex-eval-runtime-config.d.ts +0 -62
- package/dist/scripts/codex-eval-runtime-config.js +0 -843
- package/dist/scripts/codex-eval-runtime-config.js.map +0 -1
- package/dist/scripts/codex-trigger-eval.d.ts +0 -84
- package/dist/scripts/codex-trigger-eval.js +0 -968
- package/dist/scripts/codex-trigger-eval.js.map +0 -1
- package/dist/scripts/eval-plugin-skills-audited.d.ts +0 -6
- package/dist/scripts/eval-plugin-skills-audited.js +0 -261
- package/dist/scripts/eval-plugin-skills-audited.js.map +0 -1
- package/dist/scripts/eval-plugin-skills.d.ts +0 -45
- package/dist/scripts/eval-plugin-skills.js +0 -1586
- package/dist/scripts/eval-plugin-skills.js.map +0 -1
- package/dist/scripts/eval-run-layout.d.ts +0 -17
- package/dist/scripts/eval-run-layout.js +0 -26
- package/dist/scripts/eval-run-layout.js.map +0 -1
- package/dist/scripts/plugin-eval-contract.d.ts +0 -185
- package/dist/scripts/plugin-eval-contract.js +0 -695
- package/dist/scripts/plugin-eval-contract.js.map +0 -1
- package/dist/scripts/plugin-eval-materializer.d.ts +0 -13
- package/dist/scripts/plugin-eval-materializer.js +0 -421
- package/dist/scripts/plugin-eval-materializer.js.map +0 -1
- package/dist/scripts/skill-reporting.d.ts +0 -212
- package/dist/scripts/skill-reporting.js +0 -922
- package/dist/scripts/skill-reporting.js.map +0 -1
- package/dist/src/commands/status-v4.d.ts +0 -123
- package/dist/src/commands/status-v4.js +0 -905
- package/dist/src/commands/status-v4.js.map +0 -1
- package/dist/src/commands/status.d.ts +0 -93
- package/dist/src/commands/status.js +0 -442
- package/dist/src/commands/status.js.map +0 -1
- package/dist/src/utils/active-marketplace-runtime-lock.d.ts +0 -12
- package/dist/src/utils/active-marketplace-runtime-lock.js +0 -133
- package/dist/src/utils/active-marketplace-runtime-lock.js.map +0 -1
- package/dist/src/utils/catalog-manifest-v3.d.ts +0 -2
- package/dist/src/utils/catalog-manifest-v3.js +0 -3
- package/dist/src/utils/catalog-manifest-v3.js.map +0 -1
- package/dist/src/utils/catalog-manifest-v4.d.ts +0 -5
- package/dist/src/utils/catalog-manifest-v4.js.map +0 -1
- package/dist/src/utils/catalog-source-cache.d.ts +0 -62
- package/dist/src/utils/catalog-source-cache.js +0 -296
- package/dist/src/utils/catalog-source-cache.js.map +0 -1
- package/dist/src/utils/codex-project-surface.d.ts +0 -3
- package/dist/src/utils/codex-project-surface.js +0 -49
- package/dist/src/utils/codex-project-surface.js.map +0 -1
- package/dist/src/utils/lifecycle-active-store.d.ts +0 -175
- package/dist/src/utils/lifecycle-active-store.js +0 -1276
- package/dist/src/utils/lifecycle-active-store.js.map +0 -1
- package/dist/src/utils/plugin-release.d.ts +0 -2
- package/dist/src/utils/plugin-release.js +0 -2
- package/dist/src/utils/plugin-release.js.map +0 -1
|
@@ -2,13 +2,12 @@ import crypto from 'node:crypto';
|
|
|
2
2
|
import { promises as nodeFs } from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import fs from 'fs-extra';
|
|
5
|
+
import { atomicReplaceSafeFile } from './safe-fs.js';
|
|
5
6
|
export const SKILL_OWNER_MARKER = '.agent-workflows-owner.json';
|
|
6
7
|
export const OWNED_TEXT_HEADER_PREFIX = '# agent-workflows-owner: ';
|
|
7
|
-
export const SHARED_OWNER_TOKEN_PREFIX = 'aw-owner-
|
|
8
|
+
export const SHARED_OWNER_TOKEN_PREFIX = 'aw-owner-v3:';
|
|
8
9
|
export function createSharedOwnerToken(identity) {
|
|
9
10
|
validateOwnerIdentity(identity);
|
|
10
|
-
if (!identity.sourceId)
|
|
11
|
-
return identity.plugin;
|
|
12
11
|
return `${SHARED_OWNER_TOKEN_PREFIX}${Buffer.from(createSkillOwnerMarkerContent(identity)).toString('base64url')}`;
|
|
13
12
|
}
|
|
14
13
|
export function parseSharedOwnerToken(value) {
|
|
@@ -22,17 +21,13 @@ export function parseSharedOwnerToken(value) {
|
|
|
22
21
|
throw new Error('Shared owner token is invalid.');
|
|
23
22
|
}
|
|
24
23
|
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)
|
|
25
|
-
|| parsed.schemaVersion !==
|
|
26
|
-
throw new Error('Shared owner token must contain schema
|
|
24
|
+
|| parsed.schemaVersion !== 3) {
|
|
25
|
+
throw new Error('Shared owner token must contain schema 3 identity.');
|
|
27
26
|
}
|
|
28
27
|
return parseOwnerIdentity(parsed, 'Shared owner token');
|
|
29
28
|
}
|
|
30
29
|
class OwnershipSymlinkError extends Error {
|
|
31
30
|
}
|
|
32
|
-
let atomicReplaceBeforeRenameHookForTests;
|
|
33
|
-
export function setAtomicReplaceBeforeRenameHookForTests(hook) {
|
|
34
|
-
atomicReplaceBeforeRenameHookForTests = hook;
|
|
35
|
-
}
|
|
36
31
|
function isMissing(error) {
|
|
37
32
|
const code = error.code;
|
|
38
33
|
return code === 'ENOENT' || code === 'ENOTDIR';
|
|
@@ -55,15 +50,12 @@ export function validateOwnerIdentity(identity) {
|
|
|
55
50
|
}
|
|
56
51
|
assertSafeOwnershipSegment(identity.plugin, 'Owner identity.plugin');
|
|
57
52
|
assertSafeOwnershipSegment(identity.artifactKey, 'Owner identity.artifactKey');
|
|
58
|
-
const sourceFields = [identity.sourceId, identity.
|
|
53
|
+
const sourceFields = [identity.sourceId, identity.pluginId];
|
|
59
54
|
if (sourceFields.some((value) => value !== undefined)) {
|
|
60
55
|
if (sourceFields.some((value) => typeof value !== 'string' || value.length === 0)) {
|
|
61
56
|
throw new Error('Owner identity source fields must be present together.');
|
|
62
57
|
}
|
|
63
58
|
assertSafeOwnershipSegment(identity.sourceId, 'Owner identity.sourceId');
|
|
64
|
-
if (!/^sha256:[0-9a-f]{64}$/u.test(identity.sourceIdentity)) {
|
|
65
|
-
throw new Error('Owner identity.sourceIdentity must be a SHA-256 digest.');
|
|
66
|
-
}
|
|
67
59
|
if (identity.pluginId !== `${identity.sourceId}/${identity.plugin}`) {
|
|
68
60
|
throw new Error('Owner identity.pluginId must be the canonical sourceId/plugin name.');
|
|
69
61
|
}
|
|
@@ -78,7 +70,6 @@ export function validateOwnerIdentity(identity) {
|
|
|
78
70
|
function identitiesEqual(left, right) {
|
|
79
71
|
return left.owner === right.owner &&
|
|
80
72
|
left.sourceId === right.sourceId &&
|
|
81
|
-
left.sourceIdentity === right.sourceIdentity &&
|
|
82
73
|
left.pluginId === right.pluginId &&
|
|
83
74
|
left.plugin === right.plugin &&
|
|
84
75
|
left.artifactKey === right.artifactKey &&
|
|
@@ -87,15 +78,11 @@ function identitiesEqual(left, right) {
|
|
|
87
78
|
}
|
|
88
79
|
function markerFromIdentity(identity) {
|
|
89
80
|
validateOwnerIdentity(identity);
|
|
90
|
-
const namespaced = identity.sourceId !== undefined;
|
|
91
81
|
return {
|
|
92
|
-
schemaVersion:
|
|
82
|
+
schemaVersion: 3,
|
|
93
83
|
owner: identity.owner,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
sourceIdentity: identity.sourceIdentity,
|
|
97
|
-
pluginId: identity.pluginId,
|
|
98
|
-
} : {}),
|
|
84
|
+
sourceId: identity.sourceId,
|
|
85
|
+
pluginId: identity.pluginId,
|
|
99
86
|
plugin: identity.plugin,
|
|
100
87
|
artifactKey: identity.artifactKey,
|
|
101
88
|
platform: identity.platform,
|
|
@@ -111,7 +98,6 @@ function parseOwnerIdentity(value, label) {
|
|
|
111
98
|
'schemaVersion',
|
|
112
99
|
'owner',
|
|
113
100
|
'sourceId',
|
|
114
|
-
'sourceIdentity',
|
|
115
101
|
'pluginId',
|
|
116
102
|
'plugin',
|
|
117
103
|
'artifactKey',
|
|
@@ -121,21 +107,14 @@ function parseOwnerIdentity(value, label) {
|
|
|
121
107
|
if (Object.keys(record).some((key) => !allowedKeys.has(key))) {
|
|
122
108
|
throw new Error(`${label} 包含未知字段。`);
|
|
123
109
|
}
|
|
124
|
-
if (record.schemaVersion !==
|
|
125
|
-
throw new Error(`${label}.schemaVersion 不受支持。`);
|
|
126
|
-
}
|
|
127
|
-
if (record.schemaVersion === 2 && (typeof record.sourceId !== 'string'
|
|
128
|
-
|| typeof record.sourceIdentity !== 'string'
|
|
110
|
+
if (record.schemaVersion !== 3 || (typeof record.sourceId !== 'string'
|
|
129
111
|
|| typeof record.pluginId !== 'string')) {
|
|
130
|
-
throw new Error(`${label}
|
|
112
|
+
throw new Error(`${label} must use schema 3 stable plugin identity. This beta hard cut requires a new AW_HOME, or cleanup with the old CLI first.`);
|
|
131
113
|
}
|
|
132
114
|
const identity = {
|
|
133
115
|
owner: record.owner,
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
sourceIdentity: record.sourceIdentity,
|
|
137
|
-
pluginId: record.pluginId,
|
|
138
|
-
} : {}),
|
|
116
|
+
sourceId: record.sourceId,
|
|
117
|
+
pluginId: record.pluginId,
|
|
139
118
|
plugin: record.plugin,
|
|
140
119
|
artifactKey: record.artifactKey,
|
|
141
120
|
platform: record.platform,
|
|
@@ -176,60 +155,15 @@ async function assertNoSymlinkInPath(allowedRoot, candidatePath) {
|
|
|
176
155
|
}
|
|
177
156
|
}
|
|
178
157
|
}
|
|
179
|
-
async function readDirectoryIdentity(directoryPath) {
|
|
180
|
-
const stats = await fs.lstat(directoryPath);
|
|
181
|
-
if (stats.isSymbolicLink() || !stats.isDirectory()) {
|
|
182
|
-
throw new OwnershipSymlinkError(`Ownership 稳定目录必须是真实目录:${directoryPath}`);
|
|
183
|
-
}
|
|
184
|
-
return {
|
|
185
|
-
dev: stats.dev,
|
|
186
|
-
ino: stats.ino,
|
|
187
|
-
realPath: await fs.realpath(directoryPath),
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
function assertStableDirectory(label, before, after) {
|
|
191
|
-
if (before.dev !== after.dev || before.ino !== after.ino || before.realPath !== after.realPath) {
|
|
192
|
-
throw new Error(`${label} identity 在 atomic rename 前发生变化。`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
function assertRealDirectoryBoundary(root, parent) {
|
|
196
|
-
const relative = path.relative(root.realPath, parent.realPath);
|
|
197
|
-
if (relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
198
|
-
throw new Error('Ownership parent realpath 不在 allowedRoot realpath 内。');
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
158
|
async function atomicReplaceFile(options) {
|
|
202
|
-
await
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
let handle;
|
|
211
|
-
try {
|
|
212
|
-
handle = await nodeFs.open(temporaryPath, 'wx', 0o666);
|
|
213
|
-
await handle.writeFile(options.content, 'utf8');
|
|
214
|
-
await handle.close();
|
|
215
|
-
handle = undefined;
|
|
216
|
-
await atomicReplaceBeforeRenameHookForTests?.();
|
|
217
|
-
// Threat model: this blocks pre-existing symlinks/hardlinks, traversal, and callers that use
|
|
218
|
-
// this API concurrently. Node has no portable dirfd/openat/renameat2 sequence, so this does not
|
|
219
|
-
// claim to stop a process with the same file permissions from swapping a directory after this
|
|
220
|
-
// final check and before rename; that process can already edit or delete the user's files.
|
|
221
|
-
await assertNoSymlinkInPath(options.allowedRoot, options.path);
|
|
222
|
-
const currentRootIdentity = await readDirectoryIdentity(path.resolve(options.allowedRoot));
|
|
223
|
-
const currentParentIdentity = await readDirectoryIdentity(path.dirname(path.resolve(options.path)));
|
|
224
|
-
assertRealDirectoryBoundary(currentRootIdentity, currentParentIdentity);
|
|
225
|
-
assertStableDirectory('allowedRoot', rootIdentity, currentRootIdentity);
|
|
226
|
-
assertStableDirectory('parent', parentIdentity, currentParentIdentity);
|
|
227
|
-
await nodeFs.rename(temporaryPath, options.path);
|
|
228
|
-
}
|
|
229
|
-
finally {
|
|
230
|
-
await handle?.close().catch(() => undefined);
|
|
231
|
-
await nodeFs.rm(temporaryPath, { force: true }).catch(() => undefined);
|
|
232
|
-
}
|
|
159
|
+
await atomicReplaceSafeFile({
|
|
160
|
+
filePath: options.path,
|
|
161
|
+
allowedRoot: options.allowedRoot,
|
|
162
|
+
content: options.content,
|
|
163
|
+
mode: 0o666,
|
|
164
|
+
label: 'Ownership path',
|
|
165
|
+
temporaryTag: 'owner',
|
|
166
|
+
});
|
|
233
167
|
}
|
|
234
168
|
export async function assertOwnedSkillPath(options) {
|
|
235
169
|
validateOwnerIdentity(options.identity);
|
|
@@ -296,14 +230,6 @@ export async function readSkillOwnerMarker(options) {
|
|
|
296
230
|
if (marker.artifactKey !== path.basename(options.skillRoot)) {
|
|
297
231
|
throw new Error('Skill owner marker artifactKey 与目录名不一致。');
|
|
298
232
|
}
|
|
299
|
-
if (options.expectedIdentity?.sourceId !== undefined && marker.schemaVersion === 1) {
|
|
300
|
-
throw new Error('legacyStateUnsupported: schema 1 owner marker is not supported.');
|
|
301
|
-
}
|
|
302
|
-
if (options.expectedIdentity?.sourceId !== undefined
|
|
303
|
-
&& marker.sourceId === options.expectedIdentity.sourceId
|
|
304
|
-
&& marker.sourceIdentity !== options.expectedIdentity.sourceIdentity) {
|
|
305
|
-
throw new Error('sourceChanged: owner source identity does not match the configured source.');
|
|
306
|
-
}
|
|
307
233
|
if (options.expectedIdentity && !identitiesEqual(marker, options.expectedIdentity)) {
|
|
308
234
|
throw new Error('Skill owner marker identity 与目标 identity 不匹配。');
|
|
309
235
|
}
|
|
@@ -348,14 +274,6 @@ export function parseOwnedTextHeader(content, expectedIdentity) {
|
|
|
348
274
|
throw new Error('Owner header 不是有效 JSON。');
|
|
349
275
|
}
|
|
350
276
|
const identity = parseOwnerIdentity(parsed, 'Owner header');
|
|
351
|
-
if (expectedIdentity?.sourceId !== undefined && identity.sourceId === undefined) {
|
|
352
|
-
throw new Error('legacyStateUnsupported: schema 1 owner header is not supported.');
|
|
353
|
-
}
|
|
354
|
-
if (expectedIdentity?.sourceId !== undefined
|
|
355
|
-
&& identity.sourceId === expectedIdentity.sourceId
|
|
356
|
-
&& identity.sourceIdentity !== expectedIdentity.sourceIdentity) {
|
|
357
|
-
throw new Error('sourceChanged: owner source identity does not match the configured source.');
|
|
358
|
-
}
|
|
359
277
|
if (expectedIdentity && !identitiesEqual(identity, expectedIdentity)) {
|
|
360
278
|
throw new Error('Owner header identity 与目标 identity 不匹配。');
|
|
361
279
|
}
|
|
@@ -373,13 +291,13 @@ export async function writeOwnedTextFile(options) {
|
|
|
373
291
|
content: renderOwnedTextFile(options.content, options.identity),
|
|
374
292
|
});
|
|
375
293
|
}
|
|
376
|
-
async function inspectPathAt(component, actualPath, canonicalPath) {
|
|
294
|
+
async function inspectPathAt(component, actualPath, canonicalPath, executor) {
|
|
377
295
|
try {
|
|
378
296
|
await assertNoSymlinkInPath(component.allowedRoot, actualPath);
|
|
379
297
|
}
|
|
380
298
|
catch (error) {
|
|
381
299
|
if (error instanceof OwnershipSymlinkError)
|
|
382
|
-
return '
|
|
300
|
+
return foreignProbe(component, 'typeMismatch');
|
|
383
301
|
throw error;
|
|
384
302
|
}
|
|
385
303
|
const stats = await fs.lstat(actualPath).catch((error) => {
|
|
@@ -388,17 +306,17 @@ async function inspectPathAt(component, actualPath, canonicalPath) {
|
|
|
388
306
|
throw error;
|
|
389
307
|
});
|
|
390
308
|
if (!stats)
|
|
391
|
-
return 'absent';
|
|
309
|
+
return { state: 'absent' };
|
|
392
310
|
if (component.kind === 'skill-directory') {
|
|
393
311
|
if (!stats.isDirectory())
|
|
394
|
-
return '
|
|
312
|
+
return foreignProbe(component, 'typeMismatch');
|
|
395
313
|
const markerPath = path.join(actualPath, SKILL_OWNER_MARKER);
|
|
396
314
|
try {
|
|
397
315
|
await assertNoSymlinkInPath(component.allowedRoot, markerPath);
|
|
398
316
|
}
|
|
399
317
|
catch (error) {
|
|
400
318
|
if (error instanceof OwnershipSymlinkError)
|
|
401
|
-
return '
|
|
319
|
+
return foreignProbe(component, 'typeMismatch');
|
|
402
320
|
throw error;
|
|
403
321
|
}
|
|
404
322
|
let marker;
|
|
@@ -408,35 +326,143 @@ async function inspectPathAt(component, actualPath, canonicalPath) {
|
|
|
408
326
|
catch (error) {
|
|
409
327
|
if (error.code)
|
|
410
328
|
throw error;
|
|
411
|
-
return '
|
|
329
|
+
return foreignProbe(component, 'unownedContent');
|
|
412
330
|
}
|
|
413
331
|
if (!marker) {
|
|
414
|
-
|
|
332
|
+
const pristine = component.pristineTree && executor?.skillDirectoryMatchesPristineTree
|
|
333
|
+
? await executor.skillDirectoryMatchesPristineTree({
|
|
334
|
+
actualPath,
|
|
335
|
+
files: component.pristineTree,
|
|
336
|
+
})
|
|
337
|
+
: false;
|
|
338
|
+
return pristine
|
|
339
|
+
? { state: 'absent' }
|
|
340
|
+
: foreignProbe(component, 'unownedContent');
|
|
341
|
+
}
|
|
342
|
+
if (!identitiesEqual(marker, component.identity)) {
|
|
343
|
+
return foreignProbe(component, 'ownerMismatch', publicOwner(marker));
|
|
415
344
|
}
|
|
416
|
-
if (
|
|
417
|
-
return '
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
return 'present';
|
|
345
|
+
if (canonicalPath && path.basename(actualPath) !== component.identity.artifactKey) {
|
|
346
|
+
return foreignProbe(component, 'ownerMismatch', publicOwner(marker));
|
|
347
|
+
}
|
|
348
|
+
return { state: 'present' };
|
|
421
349
|
}
|
|
422
350
|
if (!stats.isFile())
|
|
423
|
-
return '
|
|
351
|
+
return foreignProbe(component, 'typeMismatch');
|
|
424
352
|
let raw;
|
|
425
353
|
try {
|
|
426
354
|
raw = await fs.readFile(actualPath, 'utf8');
|
|
427
355
|
}
|
|
428
356
|
catch (error) {
|
|
429
357
|
if (isMissing(error))
|
|
430
|
-
return 'absent';
|
|
358
|
+
return { state: 'absent' };
|
|
359
|
+
throw error;
|
|
360
|
+
}
|
|
361
|
+
try {
|
|
362
|
+
const parsed = parseOwnedTextHeader(raw);
|
|
363
|
+
if (!parsed)
|
|
364
|
+
return foreignProbe(component, 'unownedContent');
|
|
365
|
+
return identitiesEqual(parsed.identity, component.identity)
|
|
366
|
+
? { state: 'present' }
|
|
367
|
+
: foreignProbe(component, 'ownerMismatch', publicOwner(parsed.identity));
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
return foreignProbe(component, 'unownedContent');
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
function publicOwner(identity) {
|
|
374
|
+
return identity.pluginId ?? identity.plugin;
|
|
375
|
+
}
|
|
376
|
+
function forceArtifactBasenameMatches(component) {
|
|
377
|
+
const basename = path.basename(component.path);
|
|
378
|
+
if (component.kind === 'skill-directory')
|
|
379
|
+
return basename === component.identity.artifactKey;
|
|
380
|
+
const stem = basename.replace(/\.[^.]+$/u, '');
|
|
381
|
+
const slug = (value) => value.trim().toLowerCase()
|
|
382
|
+
.replace(/[^a-z0-9]+/gu, '-')
|
|
383
|
+
.replace(/^-+|-+$/gu, '');
|
|
384
|
+
return stem === component.identity.artifactKey
|
|
385
|
+
|| stem === `aw-${slug(component.identity.plugin)}-${slug(component.identity.artifactKey)}`;
|
|
386
|
+
}
|
|
387
|
+
async function inspectForceExclusivePathAt(component, actualPath, canonicalPath) {
|
|
388
|
+
validateOwnerIdentity(component.identity);
|
|
389
|
+
if (canonicalPath && !forceArtifactBasenameMatches(component)) {
|
|
390
|
+
return foreignProbe(component, 'ownerMismatch');
|
|
391
|
+
}
|
|
392
|
+
try {
|
|
393
|
+
await assertNoSymlinkInPath(component.allowedRoot, actualPath);
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
if (error instanceof OwnershipSymlinkError)
|
|
397
|
+
return foreignProbe(component, 'typeMismatch');
|
|
398
|
+
throw error;
|
|
399
|
+
}
|
|
400
|
+
const stats = await fs.lstat(actualPath).catch((error) => {
|
|
401
|
+
if (isMissing(error))
|
|
402
|
+
return null;
|
|
431
403
|
throw error;
|
|
404
|
+
});
|
|
405
|
+
if (!stats)
|
|
406
|
+
return { state: 'absent' };
|
|
407
|
+
if (component.kind === 'skill-directory') {
|
|
408
|
+
if (!stats.isDirectory())
|
|
409
|
+
return foreignProbe(component, 'typeMismatch');
|
|
410
|
+
const markerPath = path.join(actualPath, SKILL_OWNER_MARKER);
|
|
411
|
+
try {
|
|
412
|
+
await assertNoSymlinkInPath(component.allowedRoot, markerPath);
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
if (error instanceof OwnershipSymlinkError)
|
|
416
|
+
return foreignProbe(component, 'typeMismatch');
|
|
417
|
+
throw error;
|
|
418
|
+
}
|
|
419
|
+
try {
|
|
420
|
+
const marker = await readMarkerAt(markerPath);
|
|
421
|
+
if (!marker)
|
|
422
|
+
return { state: 'present' };
|
|
423
|
+
return identitiesEqual(marker, component.identity)
|
|
424
|
+
? { state: 'present' }
|
|
425
|
+
: foreignProbe(component, 'ownerMismatch', publicOwner(marker));
|
|
426
|
+
}
|
|
427
|
+
catch (error) {
|
|
428
|
+
if (error.code)
|
|
429
|
+
throw error;
|
|
430
|
+
return { state: 'present' };
|
|
431
|
+
}
|
|
432
432
|
}
|
|
433
|
+
if (!stats.isFile())
|
|
434
|
+
return foreignProbe(component, 'typeMismatch');
|
|
435
|
+
const raw = await fs.readFile(actualPath, 'utf8').catch((error) => {
|
|
436
|
+
if (isMissing(error))
|
|
437
|
+
return null;
|
|
438
|
+
throw error;
|
|
439
|
+
});
|
|
440
|
+
if (raw === null)
|
|
441
|
+
return { state: 'absent' };
|
|
433
442
|
try {
|
|
434
|
-
|
|
443
|
+
const parsed = parseOwnedTextHeader(raw);
|
|
444
|
+
if (!parsed)
|
|
445
|
+
return { state: 'present' };
|
|
446
|
+
return identitiesEqual(parsed.identity, component.identity)
|
|
447
|
+
? { state: 'present' }
|
|
448
|
+
: foreignProbe(component, 'ownerMismatch', publicOwner(parsed.identity));
|
|
435
449
|
}
|
|
436
450
|
catch {
|
|
437
|
-
return '
|
|
451
|
+
return { state: 'present' };
|
|
438
452
|
}
|
|
439
453
|
}
|
|
454
|
+
function foreignProbe(component, reason, actualOwner) {
|
|
455
|
+
return {
|
|
456
|
+
state: 'foreign',
|
|
457
|
+
collision: {
|
|
458
|
+
reason,
|
|
459
|
+
artifactKind: component.kind,
|
|
460
|
+
artifactKey: component.identity.artifactKey,
|
|
461
|
+
expectedOwner: publicOwner(component.identity),
|
|
462
|
+
...(actualOwner ? { actualOwner } : {}),
|
|
463
|
+
},
|
|
464
|
+
};
|
|
465
|
+
}
|
|
440
466
|
function componentLabel(component) {
|
|
441
467
|
if ('path' in component)
|
|
442
468
|
return component.path;
|
|
@@ -453,17 +479,21 @@ function validateNativePlugin(component) {
|
|
|
453
479
|
throw new Error(`Native plugin identity 必须使用 ${prefix} marketplace namespace。`);
|
|
454
480
|
}
|
|
455
481
|
}
|
|
456
|
-
async function inspectComponent(component, nativeProbe) {
|
|
482
|
+
async function inspectComponent(component, nativeProbe, executor) {
|
|
457
483
|
validateOwnerIdentity(component.identity);
|
|
458
484
|
if ('path' in component)
|
|
459
|
-
return inspectPathAt(component, component.path, true);
|
|
485
|
+
return inspectPathAt(component, component.path, true, executor);
|
|
460
486
|
if (component.kind === 'native-plugin') {
|
|
461
487
|
validateNativePlugin(component);
|
|
462
488
|
if (!nativeProbe)
|
|
463
489
|
throw new Error('Native ownership inspection 缺少 nativeProbe。');
|
|
464
|
-
|
|
490
|
+
const state = await nativeProbe(component);
|
|
491
|
+
return state === 'foreign' ? foreignProbe(component, 'ownerMismatch') : { state };
|
|
465
492
|
}
|
|
466
|
-
|
|
493
|
+
if (!executor)
|
|
494
|
+
throw new Error('Shared ownership inspection 缺少 executor。');
|
|
495
|
+
const state = await executor.inspectShared(component);
|
|
496
|
+
return state === 'foreign' ? foreignProbe(component, 'ownerMismatch') : { state };
|
|
467
497
|
}
|
|
468
498
|
export async function inspectOwnedComponents(options) {
|
|
469
499
|
const components = [];
|
|
@@ -471,14 +501,20 @@ export async function inspectOwnedComponents(options) {
|
|
|
471
501
|
for (const component of options.components) {
|
|
472
502
|
const label = componentLabel(component);
|
|
473
503
|
try {
|
|
474
|
-
|
|
504
|
+
const result = await (options.forceExclusive && 'path' in component
|
|
505
|
+
? inspectForceExclusivePathAt(component, component.path, true)
|
|
506
|
+
: inspectComponent(component, options.nativeProbe, options.executor));
|
|
507
|
+
let probe = result.state;
|
|
475
508
|
let healthDiagnostic;
|
|
476
509
|
if (options.verifyHealth
|
|
477
510
|
&& probe === 'present'
|
|
478
511
|
&& component.kind === 'skill-directory'
|
|
479
|
-
&& component.validateHealth) {
|
|
512
|
+
&& component.validateHealth === true) {
|
|
480
513
|
try {
|
|
481
|
-
|
|
514
|
+
if (!options.executor?.validateSkillDirectory) {
|
|
515
|
+
throw new Error('Skill health inspection 缺少 executor。');
|
|
516
|
+
}
|
|
517
|
+
await options.executor.validateSkillDirectory(component);
|
|
482
518
|
}
|
|
483
519
|
catch (error) {
|
|
484
520
|
probe = 'partial';
|
|
@@ -487,7 +523,8 @@ export async function inspectOwnedComponents(options) {
|
|
|
487
523
|
}
|
|
488
524
|
components.push({
|
|
489
525
|
component,
|
|
490
|
-
state: probe
|
|
526
|
+
state: probe,
|
|
527
|
+
...(result.collision ? { collision: result.collision } : {}),
|
|
491
528
|
...(probe === 'foreign'
|
|
492
529
|
? { diagnostic: `存在 foreign collision:${label}` }
|
|
493
530
|
: healthDiagnostic
|
|
@@ -505,7 +542,7 @@ export async function inspectOwnedComponents(options) {
|
|
|
505
542
|
}
|
|
506
543
|
const state = errors.length > 0
|
|
507
544
|
? 'error'
|
|
508
|
-
: components.length === 0 || components.every((entry) => entry.state === 'absent')
|
|
545
|
+
: components.length === 0 || components.every((entry) => (entry.state === 'absent' || entry.state === 'foreign'))
|
|
509
546
|
? 'absent'
|
|
510
547
|
: components.every((entry) => entry.state === 'present')
|
|
511
548
|
? 'present'
|
|
@@ -546,7 +583,9 @@ async function cleanupPathComponent(options) {
|
|
|
546
583
|
}
|
|
547
584
|
let verified;
|
|
548
585
|
try {
|
|
549
|
-
verified = await
|
|
586
|
+
verified = (await (options.forceExclusive
|
|
587
|
+
? inspectForceExclusivePathAt(component, quarantinePath, false)
|
|
588
|
+
: inspectPathAt(component, quarantinePath, false, options.executor))).state;
|
|
550
589
|
}
|
|
551
590
|
catch (error) {
|
|
552
591
|
result.failures.push({
|
|
@@ -589,8 +628,8 @@ async function cleanupPathComponent(options) {
|
|
|
589
628
|
return;
|
|
590
629
|
}
|
|
591
630
|
try {
|
|
592
|
-
const after = await inspectComponent(component);
|
|
593
|
-
if (after === 'absent')
|
|
631
|
+
const after = await inspectComponent(component, undefined, options.executor);
|
|
632
|
+
if (after.state === 'absent')
|
|
594
633
|
pushUnique(result.removed, label);
|
|
595
634
|
else
|
|
596
635
|
pushUnique(result.residual, label);
|
|
@@ -612,7 +651,9 @@ export async function cleanupOwnedComponents(options) {
|
|
|
612
651
|
for (const component of options.components) {
|
|
613
652
|
const label = componentLabel(component);
|
|
614
653
|
try {
|
|
615
|
-
const probe = await
|
|
654
|
+
const probe = (await (options.forceExclusive && 'path' in component
|
|
655
|
+
? inspectForceExclusivePathAt(component, component.path, true)
|
|
656
|
+
: inspectComponent(component, options.nativeProbe, options.executor))).state;
|
|
616
657
|
probes.set(component, probe);
|
|
617
658
|
if (probe === 'absent')
|
|
618
659
|
pushUnique(result.absent, label);
|
|
@@ -641,6 +682,8 @@ export async function cleanupOwnedComponents(options) {
|
|
|
641
682
|
component,
|
|
642
683
|
result,
|
|
643
684
|
afterQuarantine: options.afterQuarantine,
|
|
685
|
+
executor: options.executor,
|
|
686
|
+
forceExclusive: options.forceExclusive,
|
|
644
687
|
});
|
|
645
688
|
continue;
|
|
646
689
|
}
|
|
@@ -653,7 +696,9 @@ export async function cleanupOwnedComponents(options) {
|
|
|
653
696
|
await options.nativeRemove(component);
|
|
654
697
|
}
|
|
655
698
|
else {
|
|
656
|
-
|
|
699
|
+
if (!options.executor)
|
|
700
|
+
throw new Error('Shared ownership cleanup 缺少 executor。');
|
|
701
|
+
await options.executor.removeShared(component);
|
|
657
702
|
}
|
|
658
703
|
}
|
|
659
704
|
catch (error) {
|
|
@@ -662,8 +707,8 @@ export async function cleanupOwnedComponents(options) {
|
|
|
662
707
|
continue;
|
|
663
708
|
}
|
|
664
709
|
try {
|
|
665
|
-
const after = await inspectComponent(component, options.nativeProbe);
|
|
666
|
-
if (after === 'absent')
|
|
710
|
+
const after = await inspectComponent(component, options.nativeProbe, options.executor);
|
|
711
|
+
if (after.state === 'absent')
|
|
667
712
|
pushUnique(result.removed, label);
|
|
668
713
|
else
|
|
669
714
|
pushUnique(result.residual, label);
|
|
@@ -675,92 +720,4 @@ export async function cleanupOwnedComponents(options) {
|
|
|
675
720
|
}
|
|
676
721
|
return result;
|
|
677
722
|
}
|
|
678
|
-
export async function cleanupCorruptExclusivePluginDirectory(options) {
|
|
679
|
-
const markerPath = path.join(options.directory, SKILL_OWNER_MARKER);
|
|
680
|
-
let raw = null;
|
|
681
|
-
try {
|
|
682
|
-
const [directoryStats, markerStats] = await Promise.all([
|
|
683
|
-
nodeFs.lstat(options.directory),
|
|
684
|
-
nodeFs.lstat(markerPath),
|
|
685
|
-
]);
|
|
686
|
-
if (!directoryStats.isDirectory() || directoryStats.isSymbolicLink()
|
|
687
|
-
|| !markerStats.isFile() || markerStats.isSymbolicLink())
|
|
688
|
-
return null;
|
|
689
|
-
await assertNoSymlinkInPath(options.allowedRoot, markerPath);
|
|
690
|
-
raw = await fs.readJson(markerPath);
|
|
691
|
-
}
|
|
692
|
-
catch {
|
|
693
|
-
return null;
|
|
694
|
-
}
|
|
695
|
-
if (!raw
|
|
696
|
-
|| raw.schemaVersion !== 2
|
|
697
|
-
|| raw.owner !== 'agent-workflows'
|
|
698
|
-
|| raw.sourceId !== options.sourceId
|
|
699
|
-
|| raw.plugin !== options.pluginName
|
|
700
|
-
|| raw.pluginId !== `${options.sourceId}/${options.pluginName}`
|
|
701
|
-
|| raw.platform !== options.platform
|
|
702
|
-
|| raw.scope !== options.scope)
|
|
703
|
-
return null;
|
|
704
|
-
assertSafeOwnershipSegment(path.basename(options.directory), 'Exclusive plugin directory');
|
|
705
|
-
const quarantinePath = path.join(path.resolve(options.allowedRoot), `.agent-workflows-quarantine-${process.pid}-${crypto.randomUUID()}`);
|
|
706
|
-
assertPathBoundary(options.allowedRoot, quarantinePath);
|
|
707
|
-
try {
|
|
708
|
-
await (options.rename ?? nodeFs.rename)(options.directory, quarantinePath);
|
|
709
|
-
}
|
|
710
|
-
catch (error) {
|
|
711
|
-
const [canonicalExists, quarantineExists] = await Promise.all([
|
|
712
|
-
fs.pathExists(options.directory),
|
|
713
|
-
fs.pathExists(quarantinePath),
|
|
714
|
-
]);
|
|
715
|
-
if (!canonicalExists && !quarantineExists) {
|
|
716
|
-
return {
|
|
717
|
-
removed: [options.directory], absent: [], residual: [], quarantined: [], failures: [],
|
|
718
|
-
};
|
|
719
|
-
}
|
|
720
|
-
return {
|
|
721
|
-
removed: [], absent: [],
|
|
722
|
-
residual: [quarantineExists ? quarantinePath : options.directory],
|
|
723
|
-
quarantined: quarantineExists ? [quarantinePath] : [],
|
|
724
|
-
failures: [{
|
|
725
|
-
label: options.directory,
|
|
726
|
-
phase: 'mutation',
|
|
727
|
-
message: errorMessage(error),
|
|
728
|
-
...(quarantineExists ? { quarantinePath } : {}),
|
|
729
|
-
}],
|
|
730
|
-
};
|
|
731
|
-
}
|
|
732
|
-
try {
|
|
733
|
-
await (options.remove ?? fs.remove)(quarantinePath);
|
|
734
|
-
}
|
|
735
|
-
catch (error) {
|
|
736
|
-
if (!await fs.pathExists(quarantinePath)) {
|
|
737
|
-
return {
|
|
738
|
-
removed: [options.directory], absent: [], residual: [], quarantined: [], failures: [],
|
|
739
|
-
};
|
|
740
|
-
}
|
|
741
|
-
return {
|
|
742
|
-
removed: [], absent: [], residual: [quarantinePath], quarantined: [quarantinePath],
|
|
743
|
-
failures: [{
|
|
744
|
-
label: options.directory,
|
|
745
|
-
phase: 'remove',
|
|
746
|
-
message: errorMessage(error),
|
|
747
|
-
quarantinePath,
|
|
748
|
-
}],
|
|
749
|
-
};
|
|
750
|
-
}
|
|
751
|
-
if (await fs.pathExists(quarantinePath)) {
|
|
752
|
-
return {
|
|
753
|
-
removed: [], absent: [], residual: [quarantinePath], quarantined: [quarantinePath],
|
|
754
|
-
failures: [{
|
|
755
|
-
label: options.directory,
|
|
756
|
-
phase: 'verify',
|
|
757
|
-
message: 'Exclusive plugin quarantine remained after removal.',
|
|
758
|
-
quarantinePath,
|
|
759
|
-
}],
|
|
760
|
-
};
|
|
761
|
-
}
|
|
762
|
-
return {
|
|
763
|
-
removed: [options.directory], absent: [], residual: [], quarantined: [], failures: [],
|
|
764
|
-
};
|
|
765
|
-
}
|
|
766
723
|
//# sourceMappingURL=ownership.js.map
|