@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
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import { execFile } from 'node:child_process';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { createWindowsJobInvocation, observeProcessTree, prepareWindowsJobHelper, terminateProcessTree, } from './process-tree.js';
|
|
5
|
+
import { getCodexHome } from './state-paths.js';
|
|
6
|
+
import { resolveWindowsClaudeCommand } from './windows-claude-shim.js';
|
|
7
|
+
import { resolveWindowsNpmCommand } from './windows-npm-shim.js';
|
|
4
8
|
const NATIVE_CLI_TIMEOUT_ENV = 'AW_NATIVE_CLI_TIMEOUT_MS';
|
|
5
9
|
const DEFAULT_NATIVE_CLI_TIMEOUT_MS = 60_000;
|
|
6
10
|
const MIN_NATIVE_CLI_TIMEOUT_MS = 1_000;
|
|
7
11
|
const MAX_NATIVE_CLI_TIMEOUT_MS = 600_000;
|
|
8
12
|
const NATIVE_CLI_CLEANUP_TIMEOUT_MS = 4_500;
|
|
13
|
+
const NATIVE_CLI_PROCESS_GROUP_TERM_GRACE_MS = 100;
|
|
14
|
+
const NATIVE_CLI_PROCESS_GROUP_POLL_MS = 25;
|
|
15
|
+
const NATIVE_CLI_PROCESS_GROUP_VERIFY_MS = 4_000;
|
|
9
16
|
const NATIVE_CLI_PROCESS_MARKER_ENV = 'AW_NATIVE_CLI_PROCESS_MARKER';
|
|
17
|
+
export const SYSTEM_CODEX_MANAGER = {
|
|
18
|
+
kind: 'system',
|
|
19
|
+
version: 'unknown',
|
|
20
|
+
command: 'codex',
|
|
21
|
+
argsPrefix: [],
|
|
22
|
+
};
|
|
23
|
+
export class CodexProjectConfigNotEffectiveError extends Error {
|
|
24
|
+
code = 'codexProjectConfigNotEffective';
|
|
25
|
+
constructor(pluginId) {
|
|
26
|
+
super(`codexProjectConfigNotEffective: Codex did not apply the expected project activation for ${pluginId}.`);
|
|
27
|
+
this.name = 'CodexProjectConfigNotEffectiveError';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
10
30
|
function renderNativeCliCleanupError(error) {
|
|
11
31
|
return error.message
|
|
12
32
|
.replace(/^Native CLI cleanup unconfirmed:\s*/u, '')
|
|
@@ -19,6 +39,7 @@ export class NativeCliError extends Error {
|
|
|
19
39
|
stderr;
|
|
20
40
|
reason;
|
|
21
41
|
cleanupError;
|
|
42
|
+
operationDiagnostic;
|
|
22
43
|
constructor(options) {
|
|
23
44
|
const renderedArgs = options.invocation.args.join(' ');
|
|
24
45
|
const detail = options.stderr.trim() ||
|
|
@@ -36,15 +57,49 @@ export class NativeCliError extends Error {
|
|
|
36
57
|
this.reason = options.reason ?? 'exit';
|
|
37
58
|
this.cleanupError = options.cleanupError;
|
|
38
59
|
this.cause = options.cause;
|
|
60
|
+
const causeCode = readNativeCliErrorCode(options.cause);
|
|
61
|
+
const safeCauseCode = causeCode === 'ENOENT' || causeCode === 'EACCES' || causeCode === 'EPERM'
|
|
62
|
+
? causeCode : undefined;
|
|
63
|
+
this.operationDiagnostic = {
|
|
64
|
+
code: safeCauseCode === 'ENOENT' ? 'nativeCliExecutableMissing'
|
|
65
|
+
: this.reason === 'timeout' ? 'nativeCliTimedOut' : 'nativeCliFailed',
|
|
66
|
+
safeMessage: causeCode === 'ENOENT' ? 'The required platform CLI is not installed or cannot be found.'
|
|
67
|
+
: this.reason === 'timeout' ? 'The platform CLI timed out.'
|
|
68
|
+
: 'The platform CLI exited unsuccessfully.',
|
|
69
|
+
exitCode: options.exitCode,
|
|
70
|
+
...(safeCauseCode === undefined ? {} : {
|
|
71
|
+
cause: { code: safeCauseCode, safeMessage: `The platform CLI reported ${safeCauseCode}.` },
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
39
74
|
}
|
|
40
75
|
}
|
|
41
76
|
let nativeCliRunnerOverrideForTests = null;
|
|
77
|
+
const nativeCliRunnerBases = new WeakMap();
|
|
78
|
+
export function retainNativeCliRunnerBackend(wrapper, base) {
|
|
79
|
+
nativeCliRunnerBases.set(wrapper, base);
|
|
80
|
+
return wrapper;
|
|
81
|
+
}
|
|
82
|
+
function usesDefaultNativeCliBackend(runner) {
|
|
83
|
+
const seen = new Set();
|
|
84
|
+
while (nativeCliRunnerBases.has(runner) && !seen.has(runner)) {
|
|
85
|
+
seen.add(runner);
|
|
86
|
+
runner = nativeCliRunnerBases.get(runner);
|
|
87
|
+
}
|
|
88
|
+
return runner === execFileNativeCliRunner;
|
|
89
|
+
}
|
|
42
90
|
export function setNativeCliRunnerOverrideForTests(runner) {
|
|
43
91
|
nativeCliRunnerOverrideForTests = runner;
|
|
44
92
|
}
|
|
45
93
|
export function getDefaultNativeCliRunner() {
|
|
46
94
|
return nativeCliRunnerOverrideForTests ?? execFileNativeCliRunner;
|
|
47
95
|
}
|
|
96
|
+
/** Prepare outside the AW_HOME write lock. Injected runners own their admission. */
|
|
97
|
+
export async function prepareNativeCliExecution(options = {}) {
|
|
98
|
+
if (process.platform !== 'win32'
|
|
99
|
+
|| !usesDefaultNativeCliBackend(options.runner ?? getDefaultNativeCliRunner()))
|
|
100
|
+
return;
|
|
101
|
+
await prepareWindowsJobHelper();
|
|
102
|
+
}
|
|
48
103
|
function readNativeCliErrorCode(error) {
|
|
49
104
|
if (!error || typeof error !== 'object') {
|
|
50
105
|
return undefined;
|
|
@@ -105,7 +160,57 @@ function isTimeoutLikeError(error, timeoutMs) {
|
|
|
105
160
|
const defaultNativeCliExecFile = (command, args, options, callback) => execFile(command, args, options, (error, stdout, stderr) => {
|
|
106
161
|
callback(error, stdout, stderr);
|
|
107
162
|
});
|
|
108
|
-
function
|
|
163
|
+
function delayNativeCliCleanup(delayMs) {
|
|
164
|
+
return new Promise((resolve) => {
|
|
165
|
+
setTimeout(resolve, delayMs);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function isProcessGroupMissing(error) {
|
|
169
|
+
return Boolean(error &&
|
|
170
|
+
typeof error === 'object' &&
|
|
171
|
+
'code' in error &&
|
|
172
|
+
error.code === 'ESRCH');
|
|
173
|
+
}
|
|
174
|
+
function isPosixProcessInspectionUnavailableError(error) {
|
|
175
|
+
return /POSIX (?:process (?:identity|marker) lookup|termination (?:audit|verification)) failed/u
|
|
176
|
+
.test(error.message);
|
|
177
|
+
}
|
|
178
|
+
async function terminateNativeCliProcessGroup(pid, killProcess) {
|
|
179
|
+
const groupPid = -pid;
|
|
180
|
+
const signalGroup = (signal) => {
|
|
181
|
+
try {
|
|
182
|
+
killProcess(groupPid, signal);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
if (isProcessGroupMissing(error)) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
throw new Error(`Native CLI cleanup unconfirmed: could not signal process group ${signal}.`, { cause: error });
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
const groupExists = () => {
|
|
192
|
+
try {
|
|
193
|
+
killProcess(groupPid, 0);
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
if (isProcessGroupMissing(error)) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
throw new Error('Native CLI cleanup unconfirmed: could not verify process group exit.', { cause: error });
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
signalGroup('SIGTERM');
|
|
204
|
+
await delayNativeCliCleanup(NATIVE_CLI_PROCESS_GROUP_TERM_GRACE_MS);
|
|
205
|
+
signalGroup('SIGKILL');
|
|
206
|
+
for (let elapsedMs = 0; groupExists(); elapsedMs += NATIVE_CLI_PROCESS_GROUP_POLL_MS) {
|
|
207
|
+
if (elapsedMs >= NATIVE_CLI_PROCESS_GROUP_VERIFY_MS) {
|
|
208
|
+
throw new Error('Native CLI cleanup unconfirmed: process group is still running.');
|
|
209
|
+
}
|
|
210
|
+
await delayNativeCliCleanup(NATIVE_CLI_PROCESS_GROUP_POLL_MS);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, observation, requireConfirmedCleanup, allowUnobservedWindowsProcessOnNormalCompletion, processGroup, allowUnavailablePosixAudit, processTreeAuditPreparationError, killProcess) {
|
|
109
214
|
let directKillAttempted = false;
|
|
110
215
|
const killDirectChild = () => {
|
|
111
216
|
if (directKillAttempted) {
|
|
@@ -148,7 +253,42 @@ function settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, obse
|
|
|
148
253
|
timeout.unref();
|
|
149
254
|
let cleanup;
|
|
150
255
|
try {
|
|
151
|
-
cleanup =
|
|
256
|
+
cleanup = processGroup
|
|
257
|
+
? (async () => {
|
|
258
|
+
let processGroupError;
|
|
259
|
+
try {
|
|
260
|
+
await terminateNativeCliProcessGroup(childPid, killProcess);
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
processGroupError = error instanceof Error
|
|
264
|
+
? error
|
|
265
|
+
: new Error('Native CLI cleanup unconfirmed: process-group cleanup rejected.');
|
|
266
|
+
}
|
|
267
|
+
let auditError = processTreeAuditPreparationError;
|
|
268
|
+
if (observation) {
|
|
269
|
+
try {
|
|
270
|
+
await terminateProcessTreeImpl(childPid, () => killDirectChild(), {}, { observation, requireConfirmedCleanup: true });
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
auditError = error instanceof Error
|
|
274
|
+
? error
|
|
275
|
+
: new Error('Native CLI cleanup unconfirmed: cleanup audit rejected.');
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (processGroupError)
|
|
279
|
+
throw processGroupError;
|
|
280
|
+
if (auditError &&
|
|
281
|
+
!(allowUnavailablePosixAudit && isPosixProcessInspectionUnavailableError(auditError))) {
|
|
282
|
+
throw auditError;
|
|
283
|
+
}
|
|
284
|
+
})()
|
|
285
|
+
: terminateProcessTreeImpl(childPid, () => killDirectChild(), {}, {
|
|
286
|
+
observation,
|
|
287
|
+
requireConfirmedCleanup,
|
|
288
|
+
...(allowUnobservedWindowsProcessOnNormalCompletion
|
|
289
|
+
? { allowUnobservedWindowsProcessOnNormalCompletion: true }
|
|
290
|
+
: {}),
|
|
291
|
+
});
|
|
152
292
|
}
|
|
153
293
|
catch (error) {
|
|
154
294
|
finish(error instanceof Error
|
|
@@ -180,10 +320,50 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
|
|
|
180
320
|
const observeProcessTreeImpl = dependencies.observeProcessTree ??
|
|
181
321
|
(dependencies.terminateProcessTree ? undefined : observeProcessTree);
|
|
182
322
|
const terminateProcessTreeImpl = dependencies.terminateProcessTree ?? terminateProcessTree;
|
|
323
|
+
const platform = dependencies.platform ?? process.platform;
|
|
324
|
+
const killProcess = dependencies.killProcess ?? process.kill;
|
|
325
|
+
const createWindowsJobInvocationImpl = dependencies.createWindowsJobInvocation;
|
|
326
|
+
const usesDefaultWindowsJob = !dependencies.execFile && !createWindowsJobInvocationImpl;
|
|
183
327
|
return async (invocation) => {
|
|
184
328
|
if (invocation.signal?.aborted) {
|
|
185
329
|
throw createAbortedNativeCliError(invocation);
|
|
186
330
|
}
|
|
331
|
+
let executableCommand = invocation.command;
|
|
332
|
+
let executableArgs = invocation.args;
|
|
333
|
+
const commandName = normalizeNativeCliCommandName(invocation.command);
|
|
334
|
+
if (platform === 'win32'
|
|
335
|
+
&& (createWindowsJobInvocationImpl || usesDefaultWindowsJob)
|
|
336
|
+
&& (commandName === 'claude' || commandName === 'codex')) {
|
|
337
|
+
const commandOptions = {
|
|
338
|
+
command: invocation.command,
|
|
339
|
+
cwd: invocation.cwd,
|
|
340
|
+
env: invocation.env,
|
|
341
|
+
};
|
|
342
|
+
const resolved = commandName === 'claude'
|
|
343
|
+
? await resolveWindowsClaudeCommand(commandOptions)
|
|
344
|
+
: await resolveWindowsNpmCommand({
|
|
345
|
+
...commandOptions,
|
|
346
|
+
packageName: '@openai/codex',
|
|
347
|
+
binName: 'codex',
|
|
348
|
+
displayName: 'Codex',
|
|
349
|
+
});
|
|
350
|
+
executableCommand = resolved.command;
|
|
351
|
+
executableArgs = [...resolved.argsPrefix, ...invocation.args];
|
|
352
|
+
}
|
|
353
|
+
const windowsJobInvocation = platform === 'win32'
|
|
354
|
+
? createWindowsJobInvocationImpl
|
|
355
|
+
? createWindowsJobInvocationImpl(executableCommand, executableArgs)
|
|
356
|
+
: usesDefaultWindowsJob
|
|
357
|
+
? createWindowsJobInvocation(executableCommand, executableArgs, {
|
|
358
|
+
helperPath: await prepareWindowsJobHelper(),
|
|
359
|
+
})
|
|
360
|
+
: undefined
|
|
361
|
+
: undefined;
|
|
362
|
+
const cleanupStrategy = windowsJobInvocation
|
|
363
|
+
? 'windows-job'
|
|
364
|
+
: platform !== 'win32'
|
|
365
|
+
? 'process-group'
|
|
366
|
+
: isAgentNativeCliInvocation(invocation) ? 'on-demand-tree' : 'observed-tree';
|
|
187
367
|
return new Promise((resolve, reject) => {
|
|
188
368
|
let settled = false;
|
|
189
369
|
let terminationReason;
|
|
@@ -194,15 +374,38 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
|
|
|
194
374
|
let streamedStderr = '';
|
|
195
375
|
let timeout;
|
|
196
376
|
let processTreeObservation;
|
|
377
|
+
let processTreeCleanup;
|
|
378
|
+
let processTreeAuditPreparationError;
|
|
379
|
+
let completionStarted = false;
|
|
380
|
+
let windowsJobCloseTimer;
|
|
197
381
|
let detachOutputListeners = () => { };
|
|
198
382
|
const abortListener = () => {
|
|
199
383
|
startTermination('aborted', invocation.signal?.reason);
|
|
200
384
|
};
|
|
385
|
+
const cleanupProcessTree = (requireConfirmedCleanup, allowUnobservedWindowsProcessOnNormalCompletion = false, allowUnavailablePosixAudit = false, auditTrustedPosixFailure = false) => {
|
|
386
|
+
if (cleanupStrategy === 'process-group' &&
|
|
387
|
+
(!trustedAgentCli || auditTrustedPosixFailure) &&
|
|
388
|
+
processTreeObservation === undefined &&
|
|
389
|
+
child.pid !== undefined) {
|
|
390
|
+
try {
|
|
391
|
+
processTreeObservation = observeProcessTreeImpl?.(child.pid, processMarker);
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
processTreeAuditPreparationError = new Error('Native CLI cleanup unconfirmed: POSIX process marker lookup failed.', { cause: error });
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
processTreeCleanup ??= settleNativeCliTerminationCleanup(child, terminateProcessTreeImpl, processTreeObservation, requireConfirmedCleanup, allowUnobservedWindowsProcessOnNormalCompletion, cleanupStrategy === 'process-group', allowUnavailablePosixAudit, processTreeAuditPreparationError, killProcess);
|
|
398
|
+
return processTreeCleanup;
|
|
399
|
+
};
|
|
201
400
|
const clearLifecycle = () => {
|
|
202
401
|
if (timeout) {
|
|
203
402
|
clearTimeout(timeout);
|
|
204
403
|
timeout = undefined;
|
|
205
404
|
}
|
|
405
|
+
if (windowsJobCloseTimer) {
|
|
406
|
+
clearTimeout(windowsJobCloseTimer);
|
|
407
|
+
windowsJobCloseTimer = undefined;
|
|
408
|
+
}
|
|
206
409
|
invocation.signal?.removeEventListener('abort', abortListener);
|
|
207
410
|
detachOutputListeners();
|
|
208
411
|
processTreeObservation?.dispose();
|
|
@@ -255,17 +458,113 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
|
|
|
255
458
|
clearTimeout(timeout);
|
|
256
459
|
timeout = undefined;
|
|
257
460
|
}
|
|
461
|
+
if (cleanupStrategy === 'windows-job') {
|
|
462
|
+
try {
|
|
463
|
+
if (child.exitCode == null &&
|
|
464
|
+
child.signalCode == null &&
|
|
465
|
+
child.kill('SIGKILL') === false) {
|
|
466
|
+
throw new Error('Windows Job helper did not accept termination.');
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
catch (error) {
|
|
470
|
+
finishTermination(error instanceof Error
|
|
471
|
+
? error
|
|
472
|
+
: new Error('Windows Job helper termination failed.'));
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
windowsJobCloseTimer = setTimeout(() => finishTermination(new Error('Windows Job helper exit could not be confirmed.')), NATIVE_CLI_CLEANUP_TIMEOUT_MS);
|
|
476
|
+
windowsJobCloseTimer.unref();
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
if (cleanupStrategy === 'on-demand-tree' && child.pid !== undefined) {
|
|
480
|
+
try {
|
|
481
|
+
processTreeObservation = (observeProcessTreeImpl ?? observeProcessTree)(child.pid, processMarker);
|
|
482
|
+
}
|
|
483
|
+
catch (error) {
|
|
484
|
+
child.stdout?.destroy?.();
|
|
485
|
+
child.stderr?.destroy?.();
|
|
486
|
+
try {
|
|
487
|
+
child.kill('SIGKILL');
|
|
488
|
+
}
|
|
489
|
+
catch {
|
|
490
|
+
// The direct child can exit before fallback termination runs.
|
|
491
|
+
}
|
|
492
|
+
finishTermination(error instanceof Error
|
|
493
|
+
? error
|
|
494
|
+
: new Error('Native CLI cleanup unconfirmed: process observation threw.'));
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
258
498
|
Promise.resolve()
|
|
259
|
-
.then(() =>
|
|
499
|
+
.then(() => cleanupProcessTree(cleanupStrategy === 'observed-tree'
|
|
500
|
+
? (child.exitCode != null || child.signalCode != null) && callbackOutput === undefined
|
|
501
|
+
: true, false, false, true))
|
|
260
502
|
.then(finishTermination);
|
|
261
503
|
}
|
|
504
|
+
const finishCallback = (cleanupError) => {
|
|
505
|
+
if (terminationReason)
|
|
506
|
+
return;
|
|
507
|
+
const output = callbackOutput ?? { stdout: streamedStdout, stderr: streamedStderr };
|
|
508
|
+
const childFailed = child.exitCode != null && child.exitCode !== 0 || child.signalCode != null;
|
|
509
|
+
if (callbackError || childFailed) {
|
|
510
|
+
const callbackExitCode = callbackError && typeof callbackError === 'object' &&
|
|
511
|
+
typeof callbackError.code === 'number'
|
|
512
|
+
? callbackError.code
|
|
513
|
+
: undefined;
|
|
514
|
+
const exitCode = callbackExitCode !== undefined
|
|
515
|
+
? callbackExitCode
|
|
516
|
+
: child.exitCode != null
|
|
517
|
+
? child.exitCode
|
|
518
|
+
: isAbortLikeError(callbackError) ||
|
|
519
|
+
isTimeoutLikeError(callbackError, invocation.timeoutMs)
|
|
520
|
+
? 124
|
|
521
|
+
: 1;
|
|
522
|
+
rejectOnce(new NativeCliError({
|
|
523
|
+
invocation,
|
|
524
|
+
exitCode,
|
|
525
|
+
...output,
|
|
526
|
+
cause: callbackError ?? new Error(`Command exited with ${child.signalCode ?? `code ${exitCode}`}.`),
|
|
527
|
+
cleanupError,
|
|
528
|
+
}));
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
if (cleanupError) {
|
|
532
|
+
rejectOnce(new NativeCliError({
|
|
533
|
+
invocation,
|
|
534
|
+
exitCode: 1,
|
|
535
|
+
...output,
|
|
536
|
+
cause: cleanupError,
|
|
537
|
+
cleanupError,
|
|
538
|
+
reason: 'exit',
|
|
539
|
+
}));
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
resolveOnce({ exitCode: 0, ...output });
|
|
543
|
+
};
|
|
544
|
+
const startCompletion = (allowUnobservedWindowsProcessOnNormalCompletion = false) => {
|
|
545
|
+
if (settled || terminationReason || completionStarted)
|
|
546
|
+
return;
|
|
547
|
+
completionStarted = true;
|
|
548
|
+
if (timeout) {
|
|
549
|
+
clearTimeout(timeout);
|
|
550
|
+
timeout = undefined;
|
|
551
|
+
}
|
|
552
|
+
void cleanupProcessTree(true, allowUnobservedWindowsProcessOnNormalCompletion, platform !== 'win32' && callbackError == null &&
|
|
553
|
+
(child.exitCode == null || child.exitCode === 0) && child.signalCode == null, platform !== 'win32' && trustedAgentCli && Boolean(callbackError
|
|
554
|
+
|| child.exitCode != null && child.exitCode !== 0
|
|
555
|
+
|| child.signalCode != null)).then(finishCallback);
|
|
556
|
+
};
|
|
262
557
|
const processMarker = randomUUID();
|
|
263
|
-
|
|
264
|
-
|
|
558
|
+
const trustedAgentCli = isAgentNativeCliInvocation(invocation);
|
|
559
|
+
child = execFileImpl(windowsJobInvocation?.command ?? executableCommand, windowsJobInvocation?.args ?? executableArgs, {
|
|
560
|
+
cwd: platform === 'win32' && invocation.cwd !== undefined
|
|
561
|
+
? path.win32.toNamespacedPath(invocation.cwd)
|
|
562
|
+
: invocation.cwd,
|
|
265
563
|
env: {
|
|
266
564
|
...(invocation.env ?? process.env),
|
|
267
565
|
[NATIVE_CLI_PROCESS_MARKER_ENV]: processMarker,
|
|
268
566
|
},
|
|
567
|
+
detached: platform !== 'win32',
|
|
269
568
|
windowsHide: true,
|
|
270
569
|
}, (error, stdout, stderr) => {
|
|
271
570
|
if (settled) {
|
|
@@ -274,30 +573,29 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
|
|
|
274
573
|
callbackError = error;
|
|
275
574
|
callbackOutput = { stdout, stderr };
|
|
276
575
|
if (terminationReason) {
|
|
576
|
+
if (cleanupStrategy === 'windows-job') {
|
|
577
|
+
if (windowsJobCloseTimer) {
|
|
578
|
+
clearTimeout(windowsJobCloseTimer);
|
|
579
|
+
windowsJobCloseTimer = undefined;
|
|
580
|
+
}
|
|
581
|
+
finishTermination();
|
|
582
|
+
}
|
|
277
583
|
return;
|
|
278
584
|
}
|
|
279
|
-
if (
|
|
280
|
-
|
|
281
|
-
exitCode: 0,
|
|
282
|
-
stdout,
|
|
283
|
-
stderr,
|
|
284
|
-
});
|
|
585
|
+
if (cleanupStrategy === 'windows-job') {
|
|
586
|
+
queueMicrotask(() => finishCallback());
|
|
285
587
|
return;
|
|
286
588
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
stdout,
|
|
296
|
-
stderr,
|
|
297
|
-
cause: error,
|
|
298
|
-
}));
|
|
589
|
+
if (cleanupStrategy === 'on-demand-tree') {
|
|
590
|
+
queueMicrotask(() => finishCallback());
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
queueMicrotask(() => startCompletion(platform === 'win32' &&
|
|
594
|
+
error === null &&
|
|
595
|
+
(child.exitCode == null || child.exitCode === 0) &&
|
|
596
|
+
child.signalCode == null));
|
|
299
597
|
});
|
|
300
|
-
if (child.pid !== undefined) {
|
|
598
|
+
if (cleanupStrategy === 'observed-tree' && child.pid !== undefined) {
|
|
301
599
|
processTreeObservation = observeProcessTreeImpl?.(child.pid, processMarker);
|
|
302
600
|
}
|
|
303
601
|
const stdoutListener = (chunk) => {
|
|
@@ -312,6 +610,13 @@ export function createExecFileNativeCliRunner(dependencies = {}) {
|
|
|
312
610
|
child.stdout?.removeListener?.('data', stdoutListener);
|
|
313
611
|
child.stderr?.removeListener?.('data', stderrListener);
|
|
314
612
|
};
|
|
613
|
+
if (cleanupStrategy !== 'on-demand-tree' && cleanupStrategy !== 'windows-job') {
|
|
614
|
+
child.once('exit', () => {
|
|
615
|
+
if (!terminationReason) {
|
|
616
|
+
startCompletion(platform === 'win32' && child.exitCode === 0 && child.signalCode == null);
|
|
617
|
+
}
|
|
618
|
+
});
|
|
619
|
+
}
|
|
315
620
|
if (invocation.timeoutMs && invocation.timeoutMs > 0) {
|
|
316
621
|
child.once('spawn', () => {
|
|
317
622
|
if (settled || terminationReason) {
|
|
@@ -337,6 +642,9 @@ function normalizeNativeCliCommandName(command) {
|
|
|
337
642
|
return baseName.replace(/\.(?:bat|cmd|com|exe)$/u, '');
|
|
338
643
|
}
|
|
339
644
|
function isAgentNativeCliInvocation(invocation) {
|
|
645
|
+
if (invocation.agentKind !== undefined) {
|
|
646
|
+
return true;
|
|
647
|
+
}
|
|
340
648
|
const commandName = normalizeNativeCliCommandName(invocation.command);
|
|
341
649
|
return commandName === 'codex' || commandName === 'claude';
|
|
342
650
|
}
|
|
@@ -372,54 +680,114 @@ export async function runNativeCli(invocation, runner) {
|
|
|
372
680
|
const resolvedInvocation = applyAgentNativeCliDefaultTimeout(invocation);
|
|
373
681
|
return (runner ?? getDefaultNativeCliRunner())(resolvedInvocation);
|
|
374
682
|
}
|
|
375
|
-
|
|
683
|
+
function buildCodexInvocation(manager, args, cwd, env) {
|
|
376
684
|
return {
|
|
377
|
-
command:
|
|
378
|
-
args: [
|
|
685
|
+
command: manager.command,
|
|
686
|
+
args: [...manager.argsPrefix, ...args],
|
|
687
|
+
agentKind: 'codex',
|
|
379
688
|
cwd,
|
|
380
|
-
env
|
|
689
|
+
env: {
|
|
690
|
+
...env,
|
|
691
|
+
CODEX_HOME: getCodexHome(env),
|
|
692
|
+
},
|
|
381
693
|
};
|
|
382
694
|
}
|
|
383
|
-
export function
|
|
384
|
-
return
|
|
385
|
-
command: 'codex',
|
|
386
|
-
args: ['plugin', 'list'],
|
|
387
|
-
cwd,
|
|
388
|
-
env,
|
|
389
|
-
};
|
|
695
|
+
export function buildCodexPluginAddInvocation(manager, pluginId, cwd, env) {
|
|
696
|
+
return buildCodexInvocation(manager, ['plugin', 'add', pluginId], cwd, env);
|
|
390
697
|
}
|
|
391
|
-
export function
|
|
392
|
-
return
|
|
393
|
-
command: 'codex',
|
|
394
|
-
args: ['plugin', 'remove', pluginId],
|
|
395
|
-
cwd,
|
|
396
|
-
env,
|
|
397
|
-
};
|
|
698
|
+
export function buildCodexPluginListJsonInvocation(manager, marketplaceName, cwd, env) {
|
|
699
|
+
return buildCodexInvocation(manager, ['plugin', 'list', '--marketplace', marketplaceName, '--json'], cwd, env);
|
|
398
700
|
}
|
|
399
|
-
export function
|
|
701
|
+
export function buildCodexProjectPluginListInvocations(manager, options) {
|
|
400
702
|
return {
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
cwd,
|
|
404
|
-
env,
|
|
703
|
+
exact: buildCodexPluginListJsonInvocation(manager, options.marketplaceName, options.exactCwd, options.env),
|
|
704
|
+
neutral: buildCodexPluginListJsonInvocation(manager, options.marketplaceName, options.neutralCwd, options.env),
|
|
405
705
|
};
|
|
406
706
|
}
|
|
407
|
-
|
|
707
|
+
function readCodexPluginListEntry(value, index) {
|
|
708
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
709
|
+
throw new Error(`codexPluginListInvalid: installed[${index}] must be an object.`);
|
|
710
|
+
}
|
|
711
|
+
const record = value;
|
|
712
|
+
const pluginId = record.pluginId;
|
|
713
|
+
if (typeof pluginId !== 'string'
|
|
714
|
+
|| pluginId !== pluginId.trim()
|
|
715
|
+
|| !/^[^@\s]+@[^@\s]+$/u.test(pluginId)) {
|
|
716
|
+
throw new Error(`codexPluginListInvalid: installed[${index}].pluginId must be an exact namespaced ID.`);
|
|
717
|
+
}
|
|
718
|
+
if (record.installed !== true) {
|
|
719
|
+
throw new Error(`codexPluginListInvalid: installed[${index}].installed must be true.`);
|
|
720
|
+
}
|
|
721
|
+
if (typeof record.enabled !== 'boolean') {
|
|
722
|
+
throw new Error(`codexPluginListInvalid: installed[${index}].enabled must be boolean.`);
|
|
723
|
+
}
|
|
724
|
+
if (record.version !== undefined && typeof record.version !== 'string') {
|
|
725
|
+
throw new Error(`codexPluginListInvalid: installed[${index}].version must be string.`);
|
|
726
|
+
}
|
|
727
|
+
const source = record.source;
|
|
728
|
+
if (source !== undefined && (!source || typeof source !== 'object' || Array.isArray(source))) {
|
|
729
|
+
throw new Error(`codexPluginListInvalid: installed[${index}].source must be an object.`);
|
|
730
|
+
}
|
|
731
|
+
const pluginPath = source && typeof source === 'object'
|
|
732
|
+
? source.path
|
|
733
|
+
: undefined;
|
|
734
|
+
if (pluginPath !== undefined && typeof pluginPath !== 'string') {
|
|
735
|
+
throw new Error(`codexPluginListInvalid: installed[${index}].source.path must be string.`);
|
|
736
|
+
}
|
|
408
737
|
return {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
738
|
+
pluginId,
|
|
739
|
+
enabled: record.enabled,
|
|
740
|
+
...(typeof record.version === 'string' ? { version: record.version } : {}),
|
|
741
|
+
...(typeof pluginPath === 'string' ? { path: pluginPath } : {}),
|
|
413
742
|
};
|
|
414
743
|
}
|
|
415
|
-
export function
|
|
744
|
+
export function parseCodexPluginListJson(stdout) {
|
|
745
|
+
let value;
|
|
746
|
+
try {
|
|
747
|
+
value = JSON.parse(stdout);
|
|
748
|
+
}
|
|
749
|
+
catch {
|
|
750
|
+
throw new Error('codexPluginListInvalid: Codex plugin list did not return JSON.');
|
|
751
|
+
}
|
|
752
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
753
|
+
throw new Error('codexPluginListInvalid: expected a Codex 0.151 plugin list object.');
|
|
754
|
+
}
|
|
755
|
+
const record = value;
|
|
756
|
+
if (!Array.isArray(record.installed) || !Array.isArray(record.available)) {
|
|
757
|
+
throw new Error('codexPluginListInvalid: expected installed[] and available[].');
|
|
758
|
+
}
|
|
759
|
+
return record.installed.map(readCodexPluginListEntry);
|
|
760
|
+
}
|
|
761
|
+
function isCodexPluginActive(entries, pluginId) {
|
|
762
|
+
const matches = entries.filter((entry) => entry.pluginId === pluginId);
|
|
763
|
+
if (matches.length > 1) {
|
|
764
|
+
throw new Error(`codexPluginListInvalid: duplicate plugin ID ${pluginId}.`);
|
|
765
|
+
}
|
|
766
|
+
return matches.length === 1 && matches[0].enabled;
|
|
767
|
+
}
|
|
768
|
+
export function postcheckCodexProjectPluginActivation(options) {
|
|
769
|
+
const exactActive = isCodexPluginActive(parseCodexPluginListJson(options.exactResult.stdout), options.pluginId);
|
|
770
|
+
const neutralActive = isCodexPluginActive(parseCodexPluginListJson(options.neutralResult.stdout), options.pluginId);
|
|
771
|
+
if (exactActive !== (options.userEnabled || options.projectEnabled)
|
|
772
|
+
|| neutralActive !== options.userEnabled) {
|
|
773
|
+
throw new CodexProjectConfigNotEffectiveError(options.pluginId);
|
|
774
|
+
}
|
|
416
775
|
return {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
776
|
+
effective: true,
|
|
777
|
+
pluginId: options.pluginId,
|
|
778
|
+
exactActive,
|
|
779
|
+
neutralActive,
|
|
421
780
|
};
|
|
422
781
|
}
|
|
782
|
+
export function buildCodexPluginRemoveInvocation(manager, pluginId, cwd, env) {
|
|
783
|
+
return buildCodexInvocation(manager, ['plugin', 'remove', pluginId], cwd, env);
|
|
784
|
+
}
|
|
785
|
+
export function buildCodexMarketplaceAddInvocation(manager, awHome, cwd, env) {
|
|
786
|
+
return buildCodexInvocation(manager, ['plugin', 'marketplace', 'add', awHome], cwd, env);
|
|
787
|
+
}
|
|
788
|
+
export function buildCodexMarketplaceRemoveInvocation(manager, marketplaceName, cwd, env) {
|
|
789
|
+
return buildCodexInvocation(manager, ['plugin', 'marketplace', 'remove', marketplaceName], cwd, env);
|
|
790
|
+
}
|
|
423
791
|
export async function runNativeCliChecked(invocation, runner) {
|
|
424
792
|
const result = await runNativeCli(invocation, runner);
|
|
425
793
|
if (result.exitCode !== 0) {
|