@lesliechan721/aw 0.1.0-beta.6 → 0.1.0-beta.60
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 -92
- package/dist/authoring/scripts/lib/skill-scaffold.mjs +99 -124
- 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 +552 -1142
- package/dist/authoring/scripts/validate-plugin.mjs.map +1 -1
- package/dist/native-runtime/reader-runtime.mjs +34 -0
- package/dist/native-runtime/reader.d.mts +6 -0
- package/dist/native-runtime/reader.mjs +11 -0
- 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 +19 -8
- 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/plugin-test-reporter.d.mts +2 -0
- package/dist/scripts/plugin-test-reporter.mjs +21 -0
- package/dist/scripts/plugin-test-reporter.mjs.map +1 -0
- package/dist/scripts/test-plugin-scripts.d.ts +5 -0
- package/dist/scripts/test-plugin-scripts.js +208 -89
- 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.d.ts +7 -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 +19 -1
- package/dist/src/authoring/workspace-commands.js +24 -5
- 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 +266 -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/managed-commands.d.ts +28 -0
- package/dist/src/commands/managed-commands.js +315 -0
- package/dist/src/commands/managed-commands.js.map +1 -0
- 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 +182 -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 +47 -0
- package/dist/src/commands/operation-planner.js +142 -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 +65 -4
- package/dist/src/commands/plugin-capabilities.js.map +1 -1
- package/dist/src/commands/rebuild-command.d.ts +78 -31
- package/dist/src/commands/rebuild-command.js +5229 -942
- package/dist/src/commands/rebuild-command.js.map +1 -1
- package/dist/src/commands/rebuild-integration.d.ts +143 -21
- package/dist/src/commands/rebuild-integration.js +3384 -1342
- package/dist/src/commands/rebuild-integration.js.map +1 -1
- package/dist/src/commands/rebuild-operations.d.ts +60 -30
- package/dist/src/commands/rebuild-operations.js +267 -320
- 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 +60 -0
- package/dist/src/commands/review-inspection.js +422 -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 +27 -53
- 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 +2785 -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 +254 -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 +136 -31
- package/dist/src/commands/write-commands.js.map +1 -1
- package/dist/src/constants.d.ts +7 -2
- package/dist/src/constants.js +7 -2
- package/dist/src/constants.js.map +1 -1
- package/dist/src/eval/manifest-v1.d.ts +68 -0
- package/dist/src/eval/manifest-v1.js +353 -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 +261 -109
- package/dist/src/generators/local-plugin.js.map +1 -1
- package/dist/src/generators/permissions.d.ts +5 -2
- package/dist/src/generators/permissions.js +28 -15
- package/dist/src/generators/permissions.js.map +1 -1
- package/dist/src/index.d.ts +10 -4
- package/dist/src/index.js +1774 -609
- package/dist/src/index.js.map +1 -1
- package/dist/src/output/command-receipt.d.ts +47 -46
- package/dist/src/output/command-receipt.js +277 -79
- 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 +15 -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 +186 -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 +26 -0
- package/dist/src/review/skill-materialization.js +217 -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 +19 -0
- package/dist/src/tui/config-leaf-editor.js +212 -0
- package/dist/src/tui/config-leaf-editor.js.map +1 -0
- package/dist/src/tui/config-references.d.ts +34 -0
- package/dist/src/tui/config-references.js +70 -0
- package/dist/src/tui/config-references.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 +9205 -1951
- 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 +3289 -388
- package/dist/src/tui/controller-runtime.js.map +1 -1
- package/dist/src/tui/controller.d.ts +622 -45
- package/dist/src/tui/controller.js +3589 -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 +595 -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 +224 -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 +1392 -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 +264 -21
- 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 +36 -7
- package/dist/src/utils/agent-version.js.map +1 -1
- package/dist/src/utils/artifact-plan.d.ts +8 -6
- package/dist/src/utils/artifact-plan.js +67 -13
- package/dist/src/utils/artifact-plan.js.map +1 -1
- package/dist/src/utils/artifact-renderer.d.ts +24 -10
- package/dist/src/utils/artifact-renderer.js +230 -220
- package/dist/src/utils/artifact-renderer.js.map +1 -1
- package/dist/src/utils/artifact-request.d.ts +32 -0
- package/dist/src/utils/artifact-request.js +90 -0
- package/dist/src/utils/artifact-request.js.map +1 -0
- package/dist/src/utils/artifact-sources.d.ts +4 -0
- package/dist/src/utils/artifact-sources.js +17 -0
- package/dist/src/utils/artifact-sources.js.map +1 -1
- 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 +29 -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/claude-skills-root.d.ts +8 -0
- package/dist/src/utils/claude-skills-root.js +76 -0
- package/dist/src/utils/claude-skills-root.js.map +1 -0
- 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 +735 -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-skills-root.d.ts +4 -0
- package/dist/src/utils/codex-skills-root.js +25 -0
- package/dist/src/utils/codex-skills-root.js.map +1 -0
- 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 +5 -0
- package/dist/src/utils/dynamic-skill-tree.js +56 -7
- 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 +27 -1
- package/dist/src/utils/local-marketplace.js +434 -84
- package/dist/src/utils/local-marketplace.js.map +1 -1
- package/dist/src/utils/managed-command-closure.d.ts +3 -0
- package/dist/src/utils/managed-command-closure.js +35 -0
- package/dist/src/utils/managed-command-closure.js.map +1 -0
- package/dist/src/utils/managed-command-evidence.d.ts +7 -0
- package/dist/src/utils/managed-command-evidence.js +86 -0
- package/dist/src/utils/managed-command-evidence.js.map +1 -0
- package/dist/src/utils/managed-command-materialization.d.ts +115 -0
- package/dist/src/utils/managed-command-materialization.js +359 -0
- package/dist/src/utils/managed-command-materialization.js.map +1 -0
- package/dist/src/utils/managed-command-runtime.d.ts +33 -0
- package/dist/src/utils/managed-command-runtime.js +121 -0
- package/dist/src/utils/managed-command-runtime.js.map +1 -0
- package/dist/src/utils/managed-command-store.d.ts +128 -0
- package/dist/src/utils/managed-command-store.js +589 -0
- package/dist/src/utils/managed-command-store.js.map +1 -0
- 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 +61 -7
- package/dist/src/utils/native-cli.js +426 -58
- package/dist/src/utils/native-cli.js.map +1 -1
- package/dist/src/utils/native-tool-context.d.ts +14 -0
- package/dist/src/utils/native-tool-context.js +38 -0
- package/dist/src/utils/native-tool-context.js.map +1 -0
- package/dist/src/utils/native-tool-review.d.ts +21 -0
- package/dist/src/utils/native-tool-review.js +102 -0
- package/dist/src/utils/native-tool-review.js.map +1 -0
- 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 +88 -20
- package/dist/src/utils/ownership.js +185 -223
- 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 +40 -0
- package/dist/src/utils/plugin-config-impact.js +373 -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 +1112 -298
- 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 +66 -125
- package/dist/src/utils/plugin-scripts.js +518 -526
- package/dist/src/utils/plugin-scripts.js.map +1 -1
- package/dist/src/utils/process-lock.js +14 -5
- package/dist/src/utils/process-lock.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/rendered-contract.js +18 -1
- package/dist/src/utils/rendered-contract.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/runtime-skill-closure.js +47 -6
- package/dist/src/utils/runtime-skill-closure.js.map +1 -1
- 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 +100 -9
- package/dist/vitest.config.js.map +1 -1
- package/package.json +31 -21
- 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/review-publication.d.ts +0 -99
- package/dist/src/commands/review-publication.js +0 -904
- package/dist/src/commands/review-publication.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,13 @@ 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';
|
|
6
|
+
import { readSafeOperationError } from './safe-operation-diagnostic.js';
|
|
5
7
|
export const SKILL_OWNER_MARKER = '.agent-workflows-owner.json';
|
|
6
8
|
export const OWNED_TEXT_HEADER_PREFIX = '# agent-workflows-owner: ';
|
|
7
|
-
export const SHARED_OWNER_TOKEN_PREFIX = 'aw-owner-
|
|
9
|
+
export const SHARED_OWNER_TOKEN_PREFIX = 'aw-owner-v3:';
|
|
8
10
|
export function createSharedOwnerToken(identity) {
|
|
9
11
|
validateOwnerIdentity(identity);
|
|
10
|
-
if (!identity.sourceId)
|
|
11
|
-
return identity.plugin;
|
|
12
12
|
return `${SHARED_OWNER_TOKEN_PREFIX}${Buffer.from(createSkillOwnerMarkerContent(identity)).toString('base64url')}`;
|
|
13
13
|
}
|
|
14
14
|
export function parseSharedOwnerToken(value) {
|
|
@@ -22,17 +22,13 @@ export function parseSharedOwnerToken(value) {
|
|
|
22
22
|
throw new Error('Shared owner token is invalid.');
|
|
23
23
|
}
|
|
24
24
|
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)
|
|
25
|
-
|| parsed.schemaVersion !==
|
|
26
|
-
throw new Error('Shared owner token must contain schema
|
|
25
|
+
|| parsed.schemaVersion !== 3) {
|
|
26
|
+
throw new Error('Shared owner token must contain schema 3 identity.');
|
|
27
27
|
}
|
|
28
28
|
return parseOwnerIdentity(parsed, 'Shared owner token');
|
|
29
29
|
}
|
|
30
30
|
class OwnershipSymlinkError extends Error {
|
|
31
31
|
}
|
|
32
|
-
let atomicReplaceBeforeRenameHookForTests;
|
|
33
|
-
export function setAtomicReplaceBeforeRenameHookForTests(hook) {
|
|
34
|
-
atomicReplaceBeforeRenameHookForTests = hook;
|
|
35
|
-
}
|
|
36
32
|
function isMissing(error) {
|
|
37
33
|
const code = error.code;
|
|
38
34
|
return code === 'ENOENT' || code === 'ENOTDIR';
|
|
@@ -55,15 +51,12 @@ export function validateOwnerIdentity(identity) {
|
|
|
55
51
|
}
|
|
56
52
|
assertSafeOwnershipSegment(identity.plugin, 'Owner identity.plugin');
|
|
57
53
|
assertSafeOwnershipSegment(identity.artifactKey, 'Owner identity.artifactKey');
|
|
58
|
-
const sourceFields = [identity.sourceId, identity.
|
|
54
|
+
const sourceFields = [identity.sourceId, identity.pluginId];
|
|
59
55
|
if (sourceFields.some((value) => value !== undefined)) {
|
|
60
56
|
if (sourceFields.some((value) => typeof value !== 'string' || value.length === 0)) {
|
|
61
57
|
throw new Error('Owner identity source fields must be present together.');
|
|
62
58
|
}
|
|
63
59
|
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
60
|
if (identity.pluginId !== `${identity.sourceId}/${identity.plugin}`) {
|
|
68
61
|
throw new Error('Owner identity.pluginId must be the canonical sourceId/plugin name.');
|
|
69
62
|
}
|
|
@@ -78,7 +71,6 @@ export function validateOwnerIdentity(identity) {
|
|
|
78
71
|
function identitiesEqual(left, right) {
|
|
79
72
|
return left.owner === right.owner &&
|
|
80
73
|
left.sourceId === right.sourceId &&
|
|
81
|
-
left.sourceIdentity === right.sourceIdentity &&
|
|
82
74
|
left.pluginId === right.pluginId &&
|
|
83
75
|
left.plugin === right.plugin &&
|
|
84
76
|
left.artifactKey === right.artifactKey &&
|
|
@@ -87,15 +79,11 @@ function identitiesEqual(left, right) {
|
|
|
87
79
|
}
|
|
88
80
|
function markerFromIdentity(identity) {
|
|
89
81
|
validateOwnerIdentity(identity);
|
|
90
|
-
const namespaced = identity.sourceId !== undefined;
|
|
91
82
|
return {
|
|
92
|
-
schemaVersion:
|
|
83
|
+
schemaVersion: 3,
|
|
93
84
|
owner: identity.owner,
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
sourceIdentity: identity.sourceIdentity,
|
|
97
|
-
pluginId: identity.pluginId,
|
|
98
|
-
} : {}),
|
|
85
|
+
sourceId: identity.sourceId,
|
|
86
|
+
pluginId: identity.pluginId,
|
|
99
87
|
plugin: identity.plugin,
|
|
100
88
|
artifactKey: identity.artifactKey,
|
|
101
89
|
platform: identity.platform,
|
|
@@ -111,7 +99,6 @@ function parseOwnerIdentity(value, label) {
|
|
|
111
99
|
'schemaVersion',
|
|
112
100
|
'owner',
|
|
113
101
|
'sourceId',
|
|
114
|
-
'sourceIdentity',
|
|
115
102
|
'pluginId',
|
|
116
103
|
'plugin',
|
|
117
104
|
'artifactKey',
|
|
@@ -121,21 +108,14 @@ function parseOwnerIdentity(value, label) {
|
|
|
121
108
|
if (Object.keys(record).some((key) => !allowedKeys.has(key))) {
|
|
122
109
|
throw new Error(`${label} 包含未知字段。`);
|
|
123
110
|
}
|
|
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'
|
|
111
|
+
if (record.schemaVersion !== 3 || (typeof record.sourceId !== 'string'
|
|
129
112
|
|| typeof record.pluginId !== 'string')) {
|
|
130
|
-
throw new Error(`${label}
|
|
113
|
+
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
114
|
}
|
|
132
115
|
const identity = {
|
|
133
116
|
owner: record.owner,
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
sourceIdentity: record.sourceIdentity,
|
|
137
|
-
pluginId: record.pluginId,
|
|
138
|
-
} : {}),
|
|
117
|
+
sourceId: record.sourceId,
|
|
118
|
+
pluginId: record.pluginId,
|
|
139
119
|
plugin: record.plugin,
|
|
140
120
|
artifactKey: record.artifactKey,
|
|
141
121
|
platform: record.platform,
|
|
@@ -176,60 +156,15 @@ async function assertNoSymlinkInPath(allowedRoot, candidatePath) {
|
|
|
176
156
|
}
|
|
177
157
|
}
|
|
178
158
|
}
|
|
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
159
|
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
|
-
}
|
|
160
|
+
await atomicReplaceSafeFile({
|
|
161
|
+
filePath: options.path,
|
|
162
|
+
allowedRoot: options.allowedRoot,
|
|
163
|
+
content: options.content,
|
|
164
|
+
mode: 0o666,
|
|
165
|
+
label: 'Ownership path',
|
|
166
|
+
temporaryTag: 'owner',
|
|
167
|
+
});
|
|
233
168
|
}
|
|
234
169
|
export async function assertOwnedSkillPath(options) {
|
|
235
170
|
validateOwnerIdentity(options.identity);
|
|
@@ -296,14 +231,6 @@ export async function readSkillOwnerMarker(options) {
|
|
|
296
231
|
if (marker.artifactKey !== path.basename(options.skillRoot)) {
|
|
297
232
|
throw new Error('Skill owner marker artifactKey 与目录名不一致。');
|
|
298
233
|
}
|
|
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
234
|
if (options.expectedIdentity && !identitiesEqual(marker, options.expectedIdentity)) {
|
|
308
235
|
throw new Error('Skill owner marker identity 与目标 identity 不匹配。');
|
|
309
236
|
}
|
|
@@ -348,14 +275,6 @@ export function parseOwnedTextHeader(content, expectedIdentity) {
|
|
|
348
275
|
throw new Error('Owner header 不是有效 JSON。');
|
|
349
276
|
}
|
|
350
277
|
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
278
|
if (expectedIdentity && !identitiesEqual(identity, expectedIdentity)) {
|
|
360
279
|
throw new Error('Owner header identity 与目标 identity 不匹配。');
|
|
361
280
|
}
|
|
@@ -373,13 +292,13 @@ export async function writeOwnedTextFile(options) {
|
|
|
373
292
|
content: renderOwnedTextFile(options.content, options.identity),
|
|
374
293
|
});
|
|
375
294
|
}
|
|
376
|
-
async function inspectPathAt(component, actualPath, canonicalPath) {
|
|
295
|
+
async function inspectPathAt(component, actualPath, canonicalPath, executor) {
|
|
377
296
|
try {
|
|
378
297
|
await assertNoSymlinkInPath(component.allowedRoot, actualPath);
|
|
379
298
|
}
|
|
380
299
|
catch (error) {
|
|
381
300
|
if (error instanceof OwnershipSymlinkError)
|
|
382
|
-
return '
|
|
301
|
+
return foreignProbe(component, 'typeMismatch');
|
|
383
302
|
throw error;
|
|
384
303
|
}
|
|
385
304
|
const stats = await fs.lstat(actualPath).catch((error) => {
|
|
@@ -388,17 +307,17 @@ async function inspectPathAt(component, actualPath, canonicalPath) {
|
|
|
388
307
|
throw error;
|
|
389
308
|
});
|
|
390
309
|
if (!stats)
|
|
391
|
-
return 'absent';
|
|
310
|
+
return { state: 'absent' };
|
|
392
311
|
if (component.kind === 'skill-directory') {
|
|
393
312
|
if (!stats.isDirectory())
|
|
394
|
-
return '
|
|
313
|
+
return foreignProbe(component, 'typeMismatch');
|
|
395
314
|
const markerPath = path.join(actualPath, SKILL_OWNER_MARKER);
|
|
396
315
|
try {
|
|
397
316
|
await assertNoSymlinkInPath(component.allowedRoot, markerPath);
|
|
398
317
|
}
|
|
399
318
|
catch (error) {
|
|
400
319
|
if (error instanceof OwnershipSymlinkError)
|
|
401
|
-
return '
|
|
320
|
+
return foreignProbe(component, 'typeMismatch');
|
|
402
321
|
throw error;
|
|
403
322
|
}
|
|
404
323
|
let marker;
|
|
@@ -408,35 +327,143 @@ async function inspectPathAt(component, actualPath, canonicalPath) {
|
|
|
408
327
|
catch (error) {
|
|
409
328
|
if (error.code)
|
|
410
329
|
throw error;
|
|
411
|
-
return '
|
|
330
|
+
return foreignProbe(component, 'unownedContent');
|
|
412
331
|
}
|
|
413
332
|
if (!marker) {
|
|
414
|
-
|
|
333
|
+
const pristine = component.pristineTree && executor?.skillDirectoryMatchesPristineTree
|
|
334
|
+
? await executor.skillDirectoryMatchesPristineTree({
|
|
335
|
+
actualPath,
|
|
336
|
+
files: component.pristineTree,
|
|
337
|
+
})
|
|
338
|
+
: false;
|
|
339
|
+
return pristine
|
|
340
|
+
? { state: 'absent' }
|
|
341
|
+
: foreignProbe(component, 'unownedContent');
|
|
342
|
+
}
|
|
343
|
+
if (!identitiesEqual(marker, component.identity)) {
|
|
344
|
+
return foreignProbe(component, 'ownerMismatch', publicOwner(marker));
|
|
345
|
+
}
|
|
346
|
+
if (canonicalPath && path.basename(actualPath) !== component.identity.artifactKey) {
|
|
347
|
+
return foreignProbe(component, 'ownerMismatch', publicOwner(marker));
|
|
415
348
|
}
|
|
416
|
-
|
|
417
|
-
return 'foreign';
|
|
418
|
-
if (canonicalPath && path.basename(actualPath) !== component.identity.artifactKey)
|
|
419
|
-
return 'foreign';
|
|
420
|
-
return 'present';
|
|
349
|
+
return { state: 'present' };
|
|
421
350
|
}
|
|
422
351
|
if (!stats.isFile())
|
|
423
|
-
return '
|
|
352
|
+
return foreignProbe(component, 'typeMismatch');
|
|
424
353
|
let raw;
|
|
425
354
|
try {
|
|
426
355
|
raw = await fs.readFile(actualPath, 'utf8');
|
|
427
356
|
}
|
|
428
357
|
catch (error) {
|
|
429
358
|
if (isMissing(error))
|
|
430
|
-
return 'absent';
|
|
359
|
+
return { state: 'absent' };
|
|
431
360
|
throw error;
|
|
432
361
|
}
|
|
433
362
|
try {
|
|
434
|
-
|
|
363
|
+
const parsed = parseOwnedTextHeader(raw);
|
|
364
|
+
if (!parsed)
|
|
365
|
+
return foreignProbe(component, 'unownedContent');
|
|
366
|
+
return identitiesEqual(parsed.identity, component.identity)
|
|
367
|
+
? { state: 'present' }
|
|
368
|
+
: foreignProbe(component, 'ownerMismatch', publicOwner(parsed.identity));
|
|
435
369
|
}
|
|
436
370
|
catch {
|
|
437
|
-
return '
|
|
371
|
+
return foreignProbe(component, 'unownedContent');
|
|
438
372
|
}
|
|
439
373
|
}
|
|
374
|
+
function publicOwner(identity) {
|
|
375
|
+
return identity.pluginId ?? identity.plugin;
|
|
376
|
+
}
|
|
377
|
+
function forceArtifactBasenameMatches(component) {
|
|
378
|
+
const basename = path.basename(component.path);
|
|
379
|
+
if (component.kind === 'skill-directory')
|
|
380
|
+
return basename === component.identity.artifactKey;
|
|
381
|
+
const stem = basename.replace(/\.[^.]+$/u, '');
|
|
382
|
+
const slug = (value) => value.trim().toLowerCase()
|
|
383
|
+
.replace(/[^a-z0-9]+/gu, '-')
|
|
384
|
+
.replace(/^-+|-+$/gu, '');
|
|
385
|
+
return stem === component.identity.artifactKey
|
|
386
|
+
|| stem === `aw-${slug(component.identity.plugin)}-${slug(component.identity.artifactKey)}`;
|
|
387
|
+
}
|
|
388
|
+
async function inspectForceExclusivePathAt(component, actualPath, canonicalPath) {
|
|
389
|
+
validateOwnerIdentity(component.identity);
|
|
390
|
+
if (canonicalPath && !forceArtifactBasenameMatches(component)) {
|
|
391
|
+
return foreignProbe(component, 'ownerMismatch');
|
|
392
|
+
}
|
|
393
|
+
try {
|
|
394
|
+
await assertNoSymlinkInPath(component.allowedRoot, actualPath);
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
if (error instanceof OwnershipSymlinkError)
|
|
398
|
+
return foreignProbe(component, 'typeMismatch');
|
|
399
|
+
throw error;
|
|
400
|
+
}
|
|
401
|
+
const stats = await fs.lstat(actualPath).catch((error) => {
|
|
402
|
+
if (isMissing(error))
|
|
403
|
+
return null;
|
|
404
|
+
throw error;
|
|
405
|
+
});
|
|
406
|
+
if (!stats)
|
|
407
|
+
return { state: 'absent' };
|
|
408
|
+
if (component.kind === 'skill-directory') {
|
|
409
|
+
if (!stats.isDirectory())
|
|
410
|
+
return foreignProbe(component, 'typeMismatch');
|
|
411
|
+
const markerPath = path.join(actualPath, SKILL_OWNER_MARKER);
|
|
412
|
+
try {
|
|
413
|
+
await assertNoSymlinkInPath(component.allowedRoot, markerPath);
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
if (error instanceof OwnershipSymlinkError)
|
|
417
|
+
return foreignProbe(component, 'typeMismatch');
|
|
418
|
+
throw error;
|
|
419
|
+
}
|
|
420
|
+
try {
|
|
421
|
+
const marker = await readMarkerAt(markerPath);
|
|
422
|
+
if (!marker)
|
|
423
|
+
return { state: 'present' };
|
|
424
|
+
return identitiesEqual(marker, component.identity)
|
|
425
|
+
? { state: 'present' }
|
|
426
|
+
: foreignProbe(component, 'ownerMismatch', publicOwner(marker));
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
if (error.code)
|
|
430
|
+
throw error;
|
|
431
|
+
return { state: 'present' };
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
if (!stats.isFile())
|
|
435
|
+
return foreignProbe(component, 'typeMismatch');
|
|
436
|
+
const raw = await fs.readFile(actualPath, 'utf8').catch((error) => {
|
|
437
|
+
if (isMissing(error))
|
|
438
|
+
return null;
|
|
439
|
+
throw error;
|
|
440
|
+
});
|
|
441
|
+
if (raw === null)
|
|
442
|
+
return { state: 'absent' };
|
|
443
|
+
try {
|
|
444
|
+
const parsed = parseOwnedTextHeader(raw);
|
|
445
|
+
if (!parsed)
|
|
446
|
+
return { state: 'present' };
|
|
447
|
+
return identitiesEqual(parsed.identity, component.identity)
|
|
448
|
+
? { state: 'present' }
|
|
449
|
+
: foreignProbe(component, 'ownerMismatch', publicOwner(parsed.identity));
|
|
450
|
+
}
|
|
451
|
+
catch {
|
|
452
|
+
return { state: 'present' };
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
function foreignProbe(component, reason, actualOwner) {
|
|
456
|
+
return {
|
|
457
|
+
state: 'foreign',
|
|
458
|
+
collision: {
|
|
459
|
+
reason,
|
|
460
|
+
artifactKind: component.kind,
|
|
461
|
+
artifactKey: component.identity.artifactKey,
|
|
462
|
+
expectedOwner: publicOwner(component.identity),
|
|
463
|
+
...(actualOwner ? { actualOwner } : {}),
|
|
464
|
+
},
|
|
465
|
+
};
|
|
466
|
+
}
|
|
440
467
|
function componentLabel(component) {
|
|
441
468
|
if ('path' in component)
|
|
442
469
|
return component.path;
|
|
@@ -453,17 +480,21 @@ function validateNativePlugin(component) {
|
|
|
453
480
|
throw new Error(`Native plugin identity 必须使用 ${prefix} marketplace namespace。`);
|
|
454
481
|
}
|
|
455
482
|
}
|
|
456
|
-
async function inspectComponent(component, nativeProbe) {
|
|
483
|
+
async function inspectComponent(component, nativeProbe, executor) {
|
|
457
484
|
validateOwnerIdentity(component.identity);
|
|
458
485
|
if ('path' in component)
|
|
459
|
-
return inspectPathAt(component, component.path, true);
|
|
486
|
+
return inspectPathAt(component, component.path, true, executor);
|
|
460
487
|
if (component.kind === 'native-plugin') {
|
|
461
488
|
validateNativePlugin(component);
|
|
462
489
|
if (!nativeProbe)
|
|
463
490
|
throw new Error('Native ownership inspection 缺少 nativeProbe。');
|
|
464
|
-
|
|
491
|
+
const state = await nativeProbe(component);
|
|
492
|
+
return state === 'foreign' ? foreignProbe(component, 'ownerMismatch') : { state };
|
|
465
493
|
}
|
|
466
|
-
|
|
494
|
+
if (!executor)
|
|
495
|
+
throw new Error('Shared ownership inspection 缺少 executor。');
|
|
496
|
+
const state = await executor.inspectShared(component);
|
|
497
|
+
return state === 'foreign' ? foreignProbe(component, 'ownerMismatch') : { state };
|
|
467
498
|
}
|
|
468
499
|
export async function inspectOwnedComponents(options) {
|
|
469
500
|
const components = [];
|
|
@@ -471,14 +502,20 @@ export async function inspectOwnedComponents(options) {
|
|
|
471
502
|
for (const component of options.components) {
|
|
472
503
|
const label = componentLabel(component);
|
|
473
504
|
try {
|
|
474
|
-
|
|
505
|
+
const result = await (options.forceExclusive && 'path' in component
|
|
506
|
+
? inspectForceExclusivePathAt(component, component.path, true)
|
|
507
|
+
: inspectComponent(component, options.nativeProbe, options.executor));
|
|
508
|
+
let probe = result.state;
|
|
475
509
|
let healthDiagnostic;
|
|
476
510
|
if (options.verifyHealth
|
|
477
511
|
&& probe === 'present'
|
|
478
512
|
&& component.kind === 'skill-directory'
|
|
479
|
-
&& component.validateHealth) {
|
|
513
|
+
&& component.validateHealth === true) {
|
|
480
514
|
try {
|
|
481
|
-
|
|
515
|
+
if (!options.executor?.validateSkillDirectory) {
|
|
516
|
+
throw new Error('Skill health inspection 缺少 executor。');
|
|
517
|
+
}
|
|
518
|
+
await options.executor.validateSkillDirectory(component);
|
|
482
519
|
}
|
|
483
520
|
catch (error) {
|
|
484
521
|
probe = 'partial';
|
|
@@ -487,7 +524,8 @@ export async function inspectOwnedComponents(options) {
|
|
|
487
524
|
}
|
|
488
525
|
components.push({
|
|
489
526
|
component,
|
|
490
|
-
state: probe
|
|
527
|
+
state: probe,
|
|
528
|
+
...(result.collision ? { collision: result.collision } : {}),
|
|
491
529
|
...(probe === 'foreign'
|
|
492
530
|
? { diagnostic: `存在 foreign collision:${label}` }
|
|
493
531
|
: healthDiagnostic
|
|
@@ -505,7 +543,7 @@ export async function inspectOwnedComponents(options) {
|
|
|
505
543
|
}
|
|
506
544
|
const state = errors.length > 0
|
|
507
545
|
? 'error'
|
|
508
|
-
: components.length === 0 || components.every((entry) => entry.state === 'absent')
|
|
546
|
+
: components.length === 0 || components.every((entry) => (entry.state === 'absent' || entry.state === 'foreign'))
|
|
509
547
|
? 'absent'
|
|
510
548
|
: components.every((entry) => entry.state === 'present')
|
|
511
549
|
? 'present'
|
|
@@ -546,7 +584,9 @@ async function cleanupPathComponent(options) {
|
|
|
546
584
|
}
|
|
547
585
|
let verified;
|
|
548
586
|
try {
|
|
549
|
-
verified = await
|
|
587
|
+
verified = (await (options.forceExclusive
|
|
588
|
+
? inspectForceExclusivePathAt(component, quarantinePath, false)
|
|
589
|
+
: inspectPathAt(component, quarantinePath, false, options.executor))).state;
|
|
550
590
|
}
|
|
551
591
|
catch (error) {
|
|
552
592
|
result.failures.push({
|
|
@@ -589,8 +629,8 @@ async function cleanupPathComponent(options) {
|
|
|
589
629
|
return;
|
|
590
630
|
}
|
|
591
631
|
try {
|
|
592
|
-
const after = await inspectComponent(component);
|
|
593
|
-
if (after === 'absent')
|
|
632
|
+
const after = await inspectComponent(component, undefined, options.executor);
|
|
633
|
+
if (after.state === 'absent')
|
|
594
634
|
pushUnique(result.removed, label);
|
|
595
635
|
else
|
|
596
636
|
pushUnique(result.residual, label);
|
|
@@ -612,7 +652,9 @@ export async function cleanupOwnedComponents(options) {
|
|
|
612
652
|
for (const component of options.components) {
|
|
613
653
|
const label = componentLabel(component);
|
|
614
654
|
try {
|
|
615
|
-
const probe = await
|
|
655
|
+
const probe = (await (options.forceExclusive && 'path' in component
|
|
656
|
+
? inspectForceExclusivePathAt(component, component.path, true)
|
|
657
|
+
: inspectComponent(component, options.nativeProbe, options.executor))).state;
|
|
616
658
|
probes.set(component, probe);
|
|
617
659
|
if (probe === 'absent')
|
|
618
660
|
pushUnique(result.absent, label);
|
|
@@ -641,6 +683,8 @@ export async function cleanupOwnedComponents(options) {
|
|
|
641
683
|
component,
|
|
642
684
|
result,
|
|
643
685
|
afterQuarantine: options.afterQuarantine,
|
|
686
|
+
executor: options.executor,
|
|
687
|
+
forceExclusive: options.forceExclusive,
|
|
644
688
|
});
|
|
645
689
|
continue;
|
|
646
690
|
}
|
|
@@ -653,17 +697,23 @@ export async function cleanupOwnedComponents(options) {
|
|
|
653
697
|
await options.nativeRemove(component);
|
|
654
698
|
}
|
|
655
699
|
else {
|
|
656
|
-
|
|
700
|
+
if (!options.executor)
|
|
701
|
+
throw new Error('Shared ownership cleanup 缺少 executor。');
|
|
702
|
+
await options.executor.removeShared(component);
|
|
657
703
|
}
|
|
658
704
|
}
|
|
659
705
|
catch (error) {
|
|
660
|
-
|
|
706
|
+
const operationDiagnostic = readSafeOperationError(error);
|
|
707
|
+
result.failures.push({
|
|
708
|
+
label, phase: 'remove', message: errorMessage(error),
|
|
709
|
+
...(operationDiagnostic ? { operationDiagnostic } : {}),
|
|
710
|
+
});
|
|
661
711
|
pushUnique(result.residual, label);
|
|
662
712
|
continue;
|
|
663
713
|
}
|
|
664
714
|
try {
|
|
665
|
-
const after = await inspectComponent(component, options.nativeProbe);
|
|
666
|
-
if (after === 'absent')
|
|
715
|
+
const after = await inspectComponent(component, options.nativeProbe, options.executor);
|
|
716
|
+
if (after.state === 'absent')
|
|
667
717
|
pushUnique(result.removed, label);
|
|
668
718
|
else
|
|
669
719
|
pushUnique(result.residual, label);
|
|
@@ -675,92 +725,4 @@ export async function cleanupOwnedComponents(options) {
|
|
|
675
725
|
}
|
|
676
726
|
return result;
|
|
677
727
|
}
|
|
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
728
|
//# sourceMappingURL=ownership.js.map
|