@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.41
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/README.md +44 -10
- package/executors.json +21 -1
- package/generators.json +10 -0
- package/package.json +31 -7
- package/src/aws/child-environment.d.ts +10 -0
- package/src/aws/child-environment.js +77 -0
- package/src/aws/identity.d.ts +13 -0
- package/src/aws/identity.js +41 -0
- package/src/aws-authority/index.d.ts +2 -0
- package/src/aws-authority/index.js +6 -0
- package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
- package/src/aws-authority/lambda-policy-ordering.js +56 -0
- package/src/aws-authority/stage-authority.d.ts +248 -0
- package/src/aws-authority/stage-authority.js +3558 -0
- package/src/blueprints/external-sandbox.d.ts +1 -1
- package/src/blueprints/external-sandbox.js +21 -9
- package/src/blueprints/manifest.d.ts +1 -1
- package/src/blueprints/resolver.js +28 -15
- package/src/cli/bootstrap.d.ts +1 -1
- package/src/cli/deploy-runtime.d.ts +30 -0
- package/src/cli/deploy-runtime.js +174 -0
- package/src/cli/dev-command.d.ts +18 -4
- package/src/cli/dev-command.js +71 -0
- package/src/cli/main.d.ts +9 -1
- package/src/cli/main.js +157 -24
- package/src/cli/output.d.ts +1 -1
- package/src/cli/output.js +1 -1
- package/src/cli/personal-secret-runtime.d.ts +12 -0
- package/src/cli/personal-secret-runtime.js +18 -3
- package/src/cli/secret-terminal.js +1 -1
- package/src/container-images.d.ts +1 -1
- package/src/container-images.js +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +20 -6
- package/src/developer-agent/git-inspection.d.ts +6 -2
- package/src/developer-agent/git-inspection.js +78 -6
- package/src/developer-agent/model.d.ts +5 -3
- package/src/developer-agent/model.js +4 -4
- package/src/developer-agent/operation-registry.d.ts +15 -0
- package/src/developer-agent/operation-registry.js +342 -49
- package/src/developer-agent/planning.d.ts +8 -1
- package/src/developer-agent/planning.js +39 -16
- package/src/developer-agent/preview-changes.d.ts +2 -0
- package/src/developer-agent/preview-changes.js +14 -2
- package/src/developer-agent/preview-source.js +3 -0
- package/src/developer-agent/validation.js +25 -9
- package/src/developer-agent/workspace-inspection.js +60 -5
- package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +57 -2
- package/src/executors/dev-doctor/dev-doctor.js +13 -6
- package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
- package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
- package/src/executors/dev-task-cleanup/schema.json +9 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
- package/src/executors/fleet/fleet.js +1 -1
- package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
- package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
- package/src/executors/foundation-preflight/schema.json +5 -0
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
- package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
- package/src/executors/foundation-profile-preflight/schema.json +15 -4
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
- package/src/executors/foundation-remove-preflight/schema.json +6 -1
- package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
- package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
- package/src/executors/github-bootstrap/schema.json +7 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
- package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
- package/src/executors/infrastructure-plan/schema.json +12 -52
- package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
- package/src/executors/local-deploy/federated-credential-transport.js +252 -0
- package/src/executors/local-deploy/local-approval.d.ts +18 -0
- package/src/executors/local-deploy/local-approval.js +39 -0
- package/src/executors/local-deploy/local-deploy.d.ts +112 -0
- package/src/executors/local-deploy/local-deploy.js +1404 -0
- package/src/executors/local-deploy/schema.json +70 -0
- package/src/executors/refresh/refresh.js +2 -2
- package/src/executors/remove/remove.js +2 -2
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
- package/src/executors/router-waf-rehearsal/schema.json +29 -0
- package/src/executors/secret-initialize/schema.json +42 -0
- package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
- package/src/executors/secret-initialize/secret-initialize.js +297 -0
- package/src/executors/secret-metadata/schema.json +5 -0
- package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
- package/src/executors/secret-metadata/secret-metadata.js +129 -30
- package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
- package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +163 -0
- package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
- package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +46 -6
- package/src/executors/sst-lifecycle/run-sst-command.js +750 -71
- package/src/executors/sst-lifecycle/schema.json +8 -1
- package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
- package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/executors/unlock/unlock.js +2 -2
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/cost-estimate.d.ts +170 -0
- package/src/foundation/cost-estimate.js +683 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +4 -0
- package/src/foundation/index.js +11 -0
- package/src/foundation/local-database-contract.d.ts +20 -0
- package/src/foundation/local-database-contract.js +262 -13
- package/src/foundation/local-private-smoke-access.d.ts +20 -0
- package/src/foundation/local-private-smoke-access.js +197 -0
- package/src/foundation/logging-preflight.js +1 -1
- package/src/foundation/logging.d.ts +3 -1
- package/src/foundation/logging.js +1 -1
- package/src/foundation/partial-state.d.ts +10 -0
- package/src/foundation/partial-state.js +21 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.d.ts +25 -0
- package/src/foundation/private-smoke-access.js +135 -0
- package/src/foundation/private-smoke-admission.d.ts +45 -0
- package/src/foundation/private-smoke-admission.js +180 -0
- package/src/foundation/private-smoke-control-plane.d.ts +18 -0
- package/src/foundation/private-smoke-control-plane.js +184 -0
- package/src/foundation/provision-database-bindings.d.ts +5 -0
- package/src/foundation/provision-database-bindings.js +41 -8
- package/src/foundation/provision-logical-database.js +15 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
- package/src/foundation/router-waf-rate-rehearsal.js +210 -0
- package/src/foundation/router-waf.d.ts +149 -0
- package/src/foundation/router-waf.js +809 -0
- package/src/foundation/stages.d.ts +1 -0
- package/src/foundation/stages.js +11 -0
- package/src/generators/blueprint/blueprint.d.ts +5 -0
- package/src/generators/blueprint/blueprint.js +102 -0
- package/src/generators/blueprint/files.d.ts +6 -0
- package/src/generators/blueprint/files.js +217 -0
- package/src/generators/blueprint/schema.d.ts +4 -0
- package/src/generators/blueprint/schema.json +18 -0
- package/src/generators/formatting.d.ts +8 -0
- package/src/generators/formatting.js +141 -0
- package/src/generators/function/function.js +38 -17
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/post-generation-install.js +2 -2
- package/src/generators/preset/dependency-overrides.d.ts +8 -0
- package/src/generators/preset/dependency-overrides.js +55 -0
- package/src/generators/preset/generator.js +43 -3
- package/src/generators/preset/schema.d.ts +10 -0
- package/src/generators/preset/schema.json +47 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +324 -0
- package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
- package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
- package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
- package/src/generators/preset/workspace-files-ci-install.js +196 -0
- package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
- package/src/generators/preset/workspace-files-developer-agent.js +162 -44
- package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
- package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
- package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
- package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
- package/src/generators/preset/workspace-files-performance-cost.js +8 -8
- package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
- package/src/generators/preset/workspace-files-performance-load.js +39 -25
- package/src/generators/preset/workspace-files-shared-operation-claims.d.ts +10 -0
- package/src/generators/preset/workspace-files-shared-operation-claims.js +59 -0
- package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +529 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +65 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +2507 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
- package/src/generators/preset/workspace-files-thin-docs.js +370 -0
- package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
- package/src/generators/preset/workspace-files-thin-release.js +26 -0
- package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
- package/src/generators/preset/workspace-files.d.ts +18 -2
- package/src/generators/preset/workspace-files.js +1525 -609
- package/src/generators/repository-policy/repository-policy.js +235 -5
- package/src/generators/repository-policy/schema.d.ts +10 -0
- package/src/generators/repository-policy/schema.json +80 -4
- package/src/generators/repository-policy/tree-policy.d.ts +3 -0
- package/src/generators/repository-policy/tree-policy.js +25 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +49 -11
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +130 -414
- package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
- package/src/generators/slice/built-in-plan-authorization-files.js +102 -334
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +975 -233
- package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
- package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
- package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +176 -1200
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +25 -2
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
- package/src/generators/slice/built-in-plan-frontend-files.js +14 -3
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -730
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +75 -14
- package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
- package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
- package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
- package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
- package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
- package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
- package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
- package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
- package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
- package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
- package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +159 -29
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +585 -97
- package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
- package/src/generators/slice/built-in-plan-project-files.js +141 -135
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +310 -70
- package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-reliability-files.js +283 -44
- package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
- package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
- package/src/generators/slice/built-in-plan-shared.js +41 -19
- package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
- package/src/generators/slice/built-in-plan-sql-events.js +276 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +304 -172
- package/src/generators/slice/built-in-plan-testing-persistence-event-files.d.ts +7 -0
- package/src/generators/slice/built-in-plan-testing-persistence-event-files.js +487 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +180 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
- package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
- package/src/generators/slice/built-in-plan-verification-files.js +76 -2
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +223 -16
- package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
- package/src/generators/slice/built-in-plan.d.ts +11 -1
- package/src/generators/slice/built-in-plan.js +83 -30
- package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
- package/src/generators/slice/data-policy-review-seed.js +22 -0
- package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
- package/src/generators/slice/deployed-smoke-readiness.js +214 -0
- package/src/generators/slice/local-source-identity.d.ts +2 -0
- package/src/generators/slice/local-source-identity.js +31 -0
- package/src/generators/slice/persistence-contract.d.ts +14 -0
- package/src/generators/slice/persistence-contract.js +32 -0
- package/src/generators/slice/slice.js +61 -50
- package/src/generators/sql/schema.d.ts +7 -0
- package/src/generators/sql/schema.json +38 -0
- package/src/generators/sql/sql.d.ts +6 -0
- package/src/generators/sql/sql.js +53 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
- package/src/generators/upgrade/upgrade.d.ts +15 -1
- package/src/generators/upgrade/upgrade.js +435 -44
- package/src/generators/workload/frozen-container.d.ts +1 -1
- package/src/generators/workload/performance-registration.d.ts +1 -0
- package/src/generators/workload/performance-registration.js +9 -11
- package/src/generators/workload/service-performance-files.d.ts +1 -0
- package/src/generators/workload/service-performance-files.js +27 -7
- package/src/generators/workload/workload.d.ts +1 -1
- package/src/generators/workload/workload.js +105 -29
- package/src/git-policy/action-pins.d.ts +5 -0
- package/src/git-policy/action-pins.js +5 -0
- package/src/git-policy/github-bootstrap.d.ts +48 -8
- package/src/git-policy/github-bootstrap.js +344 -176
- package/src/git-policy/routing.d.ts +7 -1
- package/src/git-policy/routing.js +62 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/infrastructure-change/local-capability.d.ts +73 -0
- package/src/infrastructure-change/local-capability.js +114 -0
- package/src/infrastructure-change/model.d.ts +25 -4
- package/src/infrastructure-change/model.js +1 -0
- package/src/infrastructure-change/normalize.d.ts +4 -0
- package/src/infrastructure-change/normalize.js +47 -7
- package/src/infrastructure-change/plan.d.ts +30 -3
- package/src/infrastructure-change/plan.js +323 -13
- package/src/infrastructure-change/risk.d.ts +3 -1
- package/src/infrastructure-change/risk.js +96 -16
- package/src/local-dev/browser-verification.d.ts +37 -0
- package/src/local-dev/browser-verification.js +281 -0
- package/src/local-dev/contracts.d.ts +10 -1
- package/src/local-dev/contracts.js +114 -13
- package/src/local-dev/dev-command-core.js +24 -5
- package/src/local-dev/docker-credential-health.d.ts +14 -0
- package/src/local-dev/docker-credential-health.js +94 -0
- package/src/local-dev/environment-inspector.d.ts +7 -0
- package/src/local-dev/environment-inspector.js +42 -15
- package/src/local-dev/environment-state.js +2 -2
- package/src/local-dev/errors.d.ts +1 -1
- package/src/local-dev/errors.js +2 -0
- package/src/local-dev/fleet-client.js +2 -2
- package/src/local-dev/fleet-configuration.js +57 -25
- package/src/local-dev/fleet-inventory.js +58 -22
- package/src/local-dev/fleet-ipc.d.ts +7 -0
- package/src/local-dev/fleet-ipc.js +14 -2
- package/src/local-dev/fleet-launcher.d.ts +6 -0
- package/src/local-dev/fleet-launcher.js +16 -4
- package/src/local-dev/fleet-logs.js +50 -22
- package/src/local-dev/fleet-process.d.ts +20 -1
- package/src/local-dev/fleet-process.js +197 -41
- package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
- package/src/local-dev/fleet-runner-evidence.js +56 -0
- package/src/local-dev/fleet-runtime.js +268 -229
- package/src/local-dev/fleet-session.d.ts +2 -0
- package/src/local-dev/fleet-session.js +28 -11
- package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
- package/src/local-dev/fleet-state.d.ts +5 -2
- package/src/local-dev/fleet-state.js +25 -4
- package/src/local-dev/fleet-supervisor.d.ts +3 -0
- package/src/local-dev/fleet-supervisor.js +66 -11
- package/src/local-dev/fleet-web-start.d.ts +12 -0
- package/src/local-dev/fleet-web-start.js +48 -0
- package/src/local-dev/identity.js +3 -14
- package/src/local-dev/index.d.ts +1 -0
- package/src/local-dev/index.js +1 -0
- package/src/local-dev/native-completion.d.ts +9 -0
- package/src/local-dev/native-completion.js +130 -0
- package/src/local-dev/nx-workspace.d.ts +4 -2
- package/src/local-dev/nx-workspace.js +11 -6
- package/src/local-dev/personal-stage.d.ts +4 -5
- package/src/local-dev/personal-stage.js +6 -54
- package/src/local-dev/port-claims.d.ts +13 -0
- package/src/local-dev/port-claims.js +46 -0
- package/src/local-dev/ports.d.ts +14 -2
- package/src/local-dev/ports.js +78 -3
- package/src/local-dev/private-state.d.ts +11 -0
- package/src/local-dev/private-state.js +146 -40
- package/src/local-dev/process-group.d.ts +4 -0
- package/src/local-dev/process-group.js +29 -0
- package/src/local-dev/process-identity.d.ts +8 -0
- package/src/local-dev/process-identity.js +31 -1
- package/src/local-dev/proxy.js +11 -12
- package/src/local-dev/runtime-paths.js +1 -1
- package/src/local-dev/slice-claim.js +1 -1
- package/src/local-dev/slice-runner.d.ts +15 -6
- package/src/local-dev/slice-runner.js +189 -54
- package/src/local-dev/task-attachment.d.ts +17 -0
- package/src/local-dev/task-attachment.js +73 -0
- package/src/local-dev/task-authority.d.ts +10 -0
- package/src/local-dev/task-authority.js +27 -0
- package/src/local-dev/task-identity.d.ts +33 -0
- package/src/local-dev/task-identity.js +418 -0
- package/src/local-dev/task-native-writer.d.ts +18 -0
- package/src/local-dev/task-native-writer.js +329 -0
- package/src/local-dev/tls.js +8 -2
- package/src/local-dev/web-launch.d.ts +9 -0
- package/src/local-dev/web-launch.js +130 -0
- package/src/ownership/composition.d.ts +2 -1
- package/src/ownership/composition.js +1 -0
- package/src/performance/cost-collection.d.ts +1 -1
- package/src/performance/cost-collection.js +4 -2
- package/src/performance/cost-controls.d.ts +8 -4
- package/src/performance/cost-controls.js +39 -28
- package/src/performance/evidence.d.ts +1 -1
- package/src/performance/evidence.js +5 -3
- package/src/performance/load-safety.js +5 -3
- package/src/performance/model.d.ts +4 -4
- package/src/performance/model.js +4 -5
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/release/index.d.ts +0 -2
- package/src/release/index.js +0 -2
- package/src/release/source-authority.d.ts +5 -5
- package/src/release/source-authority.js +141 -124
- package/src/repository-policy/aurora-preflight.d.ts +1 -1
- package/src/repository-policy/aurora-preflight.js +4 -1
- package/src/repository-policy/capacity-migration.d.ts +3 -0
- package/src/repository-policy/capacity-migration.js +21 -0
- package/src/repository-policy/deployment-plan.d.ts +4 -1
- package/src/repository-policy/deployment-plan.js +9 -0
- package/src/repository-policy/foundation-profile.js +10 -1
- package/src/repository-policy/policy.d.ts +57 -3
- package/src/repository-policy/policy.js +497 -11
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/performance-policy-v1.json +3 -3
- package/src/schemas/repository-policy-v1.json +130 -6
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/adapters.d.ts +7 -2
- package/src/secrets/adapters.js +34 -3
- package/src/secrets/aws-control-plane.d.ts +10 -1
- package/src/secrets/aws-control-plane.js +67 -0
- package/src/secrets/generated-aws-control-plane.d.ts +23 -0
- package/src/secrets/generated-aws-control-plane.js +259 -0
- package/src/secrets/metadata.js +38 -10
- package/src/secrets/model.d.ts +8 -1
- package/src/secrets/model.js +24 -3
- package/src/secrets/operator.d.ts +91 -3
- package/src/secrets/operator.js +463 -13
- package/src/secrets/personal-command.d.ts +18 -2
- package/src/secrets/personal-command.js +66 -12
- package/src/secrets/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/verification.js +15 -2
- package/src/secrets/workload-access.js +10 -2
- package/src/sst-environment-source-format.d.ts +6 -0
- package/src/sst-environment-source-format.js +199 -0
- package/src/supply-chain/action-pins.js +61 -7
- package/src/supply-chain/blueprint-trust-git.js +85 -24
- package/src/supply-chain/blueprint-verification-authority.js +55 -3
- package/src/supply-chain/build-output-bounds.d.ts +2 -0
- package/src/supply-chain/build-output-bounds.js +12 -0
- package/src/supply-chain/build-output.d.ts +7 -1
- package/src/supply-chain/build-output.js +177 -24
- package/src/supply-chain/ecr-scanning.d.ts +5 -3
- package/src/supply-chain/ecr-scanning.js +11 -7
- package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
- package/src/supply-chain/ecs-deployed-image.js +6 -4
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/supply-chain/generated-command.js +1 -0
- package/src/supply-chain/generated-container-release-command.js +1285 -124
- package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js +200 -93
- package/src/supply-chain/generated-files.js +25 -14
- package/src/supply-chain/generated-scanner-command.js +2 -1
- package/src/supply-chain/index.d.ts +1 -1
- package/src/supply-chain/index.js +2 -1
- package/src/supply-chain/sbom.d.ts +1 -1
- package/src/supply-chain/sbom.js +30 -5
- package/src/supply-chain/scanner.js +3 -0
- package/src/testing-evidence/fixture-scope.d.ts +2 -1
- package/src/testing-evidence/fixture-scope.js +4 -2
- package/src/testing-evidence/result.d.ts +2 -1
- package/src/testing-evidence/result.js +18 -4
- package/src/workload-roles/account-baseline.d.ts +11 -0
- package/src/workload-roles/account-baseline.js +253 -16
- package/src/workload-roles/authority.d.ts +3 -1
- package/src/workload-roles/authority.js +48 -2
- package/src/workload-roles/aws-s3-state.js +27 -0
- package/src/workload-roles/boundary.d.ts +2 -1
- package/src/workload-roles/boundary.js +9 -2
- package/src/workload-roles/handler.js +52 -24
- package/src/workload-roles/index.d.ts +10 -17
- package/src/workload-roles/index.js +5 -18
- package/src/workload-roles/injection.js +1 -1
- package/src/workload-roles/provisioner.js +12 -4
- package/src/workload-roles/registration.d.ts +1 -0
- package/src/workload-roles/registration.js +5 -0
- package/src/workload-roles/stage-boundary.js +1 -1
- package/src/workload-roles/standard-slice.js +3 -3
- package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
- package/src/workspace-deployment/affected-lifecycle.js +84 -0
- package/src/workspace-deployment/identity.d.ts +3 -0
- package/src/workspace-deployment/identity.js +22 -0
- package/src/workspace-deployment/index.d.ts +4 -0
- package/src/workspace-deployment/index.js +8 -0
- package/src/workspace-deployment/migration-evidence.d.ts +29 -0
- package/src/workspace-deployment/migration-evidence.js +83 -0
- package/src/workspace-deployment/migration.d.ts +27 -0
- package/src/workspace-deployment/migration.js +109 -0
- package/src/workspace-deployment/ownership.d.ts +81 -0
- package/src/workspace-deployment/ownership.js +381 -0
- package/src/api-contract/baseline-update.js.map +0 -1
- package/src/api-contract/compatibility.js.map +0 -1
- package/src/api-contract/contract-graph.js.map +0 -1
- package/src/api-contract/evidence.js.map +0 -1
- package/src/api-contract/index.js.map +0 -1
- package/src/api-contract/model.fixtures.d.ts +0 -2
- package/src/api-contract/model.fixtures.js +0 -81
- package/src/api-contract/model.fixtures.js.map +0 -1
- package/src/api-contract/model.js.map +0 -1
- package/src/api-contract/rollout.js.map +0 -1
- package/src/authorization/compatibility.js.map +0 -1
- package/src/authorization/index.js.map +0 -1
- package/src/blueprints/execution.js.map +0 -1
- package/src/blueprints/external-sandbox.js.map +0 -1
- package/src/blueprints/index.js.map +0 -1
- package/src/blueprints/inputs.js.map +0 -1
- package/src/blueprints/manifest.js.map +0 -1
- package/src/blueprints/resolver.js.map +0 -1
- package/src/blueprints/transitions.js.map +0 -1
- package/src/cli/agent-command.js.map +0 -1
- package/src/cli/agent-runtime.js.map +0 -1
- package/src/cli/blueprint-authority.js.map +0 -1
- package/src/cli/blueprint-command.js.map +0 -1
- package/src/cli/bootstrap.js.map +0 -1
- package/src/cli/dev-command.js.map +0 -1
- package/src/cli/main.js.map +0 -1
- package/src/cli/output.js.map +0 -1
- package/src/cli/personal-secret-runtime.js.map +0 -1
- package/src/cli/secret-terminal.js.map +0 -1
- package/src/container-images.js.map +0 -1
- package/src/data-lifecycle/index.js.map +0 -1
- package/src/data-lifecycle/model.fixtures.d.ts +0 -2
- package/src/data-lifecycle/model.fixtures.js +0 -244
- package/src/data-lifecycle/model.fixtures.js.map +0 -1
- package/src/data-lifecycle/model.js.map +0 -1
- package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
- package/src/data-lifecycle/validation.js.map +0 -1
- package/src/database-retirement/contract.js.map +0 -1
- package/src/database-retirement/index.js.map +0 -1
- package/src/deterministic-order.js.map +0 -1
- package/src/developer-agent/context.js.map +0 -1
- package/src/developer-agent/generator-planning.js.map +0 -1
- package/src/developer-agent/generator-preview.js.map +0 -1
- package/src/developer-agent/git-inspection.js.map +0 -1
- package/src/developer-agent/handoff.js.map +0 -1
- package/src/developer-agent/index.js.map +0 -1
- package/src/developer-agent/model.js.map +0 -1
- package/src/developer-agent/operation-registry.js.map +0 -1
- package/src/developer-agent/ordering.js.map +0 -1
- package/src/developer-agent/planning.js.map +0 -1
- package/src/developer-agent/preview-changes.js.map +0 -1
- package/src/developer-agent/preview-source.js.map +0 -1
- package/src/developer-agent/validation.js.map +0 -1
- package/src/developer-agent/workspace-inspection.js.map +0 -1
- package/src/developer-agent/workspace-path.js.map +0 -1
- package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
- package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
- package/src/executors/deploy/deploy.js.map +0 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
- package/src/executors/dev/dev.js.map +0 -1
- package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
- package/src/executors/dev-setup/dev-setup.js.map +0 -1
- package/src/executors/developer-context/developer-context.js.map +0 -1
- package/src/executors/fleet/fleet.js.map +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
- package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
- package/src/executors/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
- package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
- package/src/executors/unlock/unlock.js.map +0 -1
- package/src/executors/work-markers/work-markers.js.map +0 -1
- package/src/foundation/discovery.js.map +0 -1
- package/src/foundation/index.js.map +0 -1
- package/src/foundation/local-database-contract.js.map +0 -1
- package/src/foundation/logging-preflight.js.map +0 -1
- package/src/foundation/logging.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/provision-database-bindings.js.map +0 -1
- package/src/foundation/provision-logical-database.js.map +0 -1
- package/src/foundation/requirements.js.map +0 -1
- package/src/foundation/router-origin-proof.js.map +0 -1
- package/src/foundation/stages.js.map +0 -1
- package/src/frontend-security/index.js.map +0 -1
- package/src/frontend-security/security-headers.js.map +0 -1
- package/src/generators/feature-registry.js.map +0 -1
- package/src/generators/function/function.js.map +0 -1
- package/src/generators/job/job.js.map +0 -1
- package/src/generators/logging-registry.js.map +0 -1
- package/src/generators/post-generation-install.js.map +0 -1
- package/src/generators/preset/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
- package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
- package/src/generators/preset/workspace-files.js.map +0 -1
- package/src/generators/repository-policy/repository-policy.js.map +0 -1
- package/src/generators/service/service.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-shared.js.map +0 -1
- package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
- package/src/generators/slice/built-in-plan.js.map +0 -1
- package/src/generators/slice/slice.js.map +0 -1
- package/src/generators/upgrade/upgrade.js.map +0 -1
- package/src/generators/workload/frozen-container.js.map +0 -1
- package/src/generators/workload/performance-registration.js.map +0 -1
- package/src/generators/workload/reliability-registration.js.map +0 -1
- package/src/generators/workload/service-performance-files.js.map +0 -1
- package/src/generators/workload/workload.js.map +0 -1
- package/src/git-policy/action-pins.js.map +0 -1
- package/src/git-policy/github-bootstrap.js.map +0 -1
- package/src/git-policy/index.js.map +0 -1
- package/src/git-policy/routing.js.map +0 -1
- package/src/index.js.map +0 -1
- package/src/infrastructure-change/convergence.js.map +0 -1
- package/src/infrastructure-change/drift.js.map +0 -1
- package/src/infrastructure-change/index.js.map +0 -1
- package/src/infrastructure-change/model.js.map +0 -1
- package/src/infrastructure-change/normalize.js.map +0 -1
- package/src/infrastructure-change/plan.js.map +0 -1
- package/src/infrastructure-change/risk.js.map +0 -1
- package/src/infrastructure-change/summary.js.map +0 -1
- package/src/local-dev/context-discovery.js.map +0 -1
- package/src/local-dev/contract-validation.js.map +0 -1
- package/src/local-dev/contracts.js.map +0 -1
- package/src/local-dev/control-contract.js.map +0 -1
- package/src/local-dev/dev-command-core.js.map +0 -1
- package/src/local-dev/effects.js.map +0 -1
- package/src/local-dev/environment-inspector.js.map +0 -1
- package/src/local-dev/environment-state.js.map +0 -1
- package/src/local-dev/errors.js.map +0 -1
- package/src/local-dev/fleet-client.js.map +0 -1
- package/src/local-dev/fleet-configuration.js.map +0 -1
- package/src/local-dev/fleet-inventory.js.map +0 -1
- package/src/local-dev/fleet-ipc.js.map +0 -1
- package/src/local-dev/fleet-launcher.js.map +0 -1
- package/src/local-dev/fleet-lock.js.map +0 -1
- package/src/local-dev/fleet-logs.js.map +0 -1
- package/src/local-dev/fleet-process.js.map +0 -1
- package/src/local-dev/fleet-runtime.js.map +0 -1
- package/src/local-dev/fleet-session.js.map +0 -1
- package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
- package/src/local-dev/fleet-startup.js.map +0 -1
- package/src/local-dev/fleet-state.js.map +0 -1
- package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
- package/src/local-dev/fleet-supervisor.js.map +0 -1
- package/src/local-dev/gateway-daemon.js.map +0 -1
- package/src/local-dev/gateway.js.map +0 -1
- package/src/local-dev/identity.js.map +0 -1
- package/src/local-dev/index.js.map +0 -1
- package/src/local-dev/local-context.js.map +0 -1
- package/src/local-dev/nx-workspace.js.map +0 -1
- package/src/local-dev/personal-secret-ledger.js.map +0 -1
- package/src/local-dev/personal-stage.js.map +0 -1
- package/src/local-dev/portless.js.map +0 -1
- package/src/local-dev/ports.js.map +0 -1
- package/src/local-dev/private-state.js.map +0 -1
- package/src/local-dev/process-identity.js.map +0 -1
- package/src/local-dev/proxy.js.map +0 -1
- package/src/local-dev/runtime-paths.js.map +0 -1
- package/src/local-dev/secret-slice-claim.js.map +0 -1
- package/src/local-dev/slice-claim.js.map +0 -1
- package/src/local-dev/slice-runner.js.map +0 -1
- package/src/local-dev/tls.js.map +0 -1
- package/src/ownership/composition.js.map +0 -1
- package/src/ownership/foundation-record.js.map +0 -1
- package/src/ownership/hash.js.map +0 -1
- package/src/ownership/index.js.map +0 -1
- package/src/ownership/json-ownership.js.map +0 -1
- package/src/ownership/record.js.map +0 -1
- package/src/ownership/workspace-record.js.map +0 -1
- package/src/performance/cost-collection.js.map +0 -1
- package/src/performance/cost-controls.js.map +0 -1
- package/src/performance/evidence.js.map +0 -1
- package/src/performance/index.js.map +0 -1
- package/src/performance/load-safety.js.map +0 -1
- package/src/performance/model.js.map +0 -1
- package/src/performance/pr-artifact-budget.js.map +0 -1
- package/src/performance/runner.js.map +0 -1
- package/src/performance/scenario-endpoint.js.map +0 -1
- package/src/performance/scenario.js.map +0 -1
- package/src/performance/test-fixtures.d.ts +0 -7
- package/src/performance/test-fixtures.js +0 -169
- package/src/performance/test-fixtures.js.map +0 -1
- package/src/performance/unit-cost.js.map +0 -1
- package/src/release/index.js.map +0 -1
- package/src/release/lifecycle.js.map +0 -1
- package/src/release/manifest.js.map +0 -1
- package/src/release/rollout.js.map +0 -1
- package/src/release/source-authority.js.map +0 -1
- package/src/repository-policy/aurora-preflight.js.map +0 -1
- package/src/repository-policy/deployment-plan.js.map +0 -1
- package/src/repository-policy/foundation-profile.js.map +0 -1
- package/src/repository-policy/index.js.map +0 -1
- package/src/repository-policy/policy.js.map +0 -1
- package/src/secrets/adapters.js.map +0 -1
- package/src/secrets/aws-control-plane.js.map +0 -1
- package/src/secrets/declaration-verification.js.map +0 -1
- package/src/secrets/guardrails.js.map +0 -1
- package/src/secrets/index.js.map +0 -1
- package/src/secrets/metadata.js.map +0 -1
- package/src/secrets/model.js.map +0 -1
- package/src/secrets/operator.js.map +0 -1
- package/src/secrets/permissions.js.map +0 -1
- package/src/secrets/personal-command.js.map +0 -1
- package/src/secrets/personal-ledger.js.map +0 -1
- package/src/secrets/registry.js.map +0 -1
- package/src/secrets/verification.js.map +0 -1
- package/src/secrets/workload-access.js.map +0 -1
- package/src/supply-chain/action-pins.js.map +0 -1
- package/src/supply-chain/blueprint-trust-git.js.map +0 -1
- package/src/supply-chain/blueprint-trust-process.js.map +0 -1
- package/src/supply-chain/blueprint-trust.js.map +0 -1
- package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
- package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
- package/src/supply-chain/build-output.js.map +0 -1
- package/src/supply-chain/common.js.map +0 -1
- package/src/supply-chain/container-artifact-contract.js.map +0 -1
- package/src/supply-chain/container-release.js.map +0 -1
- package/src/supply-chain/ecr-applicability.js.map +0 -1
- package/src/supply-chain/ecr-scanning.js.map +0 -1
- package/src/supply-chain/ecs-deployed-image.js.map +0 -1
- package/src/supply-chain/errors.js.map +0 -1
- package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
- package/src/supply-chain/generated-command.js.map +0 -1
- package/src/supply-chain/generated-container-release-command.js.map +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
- package/src/supply-chain/generated-files.js.map +0 -1
- package/src/supply-chain/generated-scanner-command.js.map +0 -1
- package/src/supply-chain/index.js.map +0 -1
- package/src/supply-chain/inventory.js.map +0 -1
- package/src/supply-chain/license-expression.js.map +0 -1
- package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
- package/src/supply-chain/policy.js.map +0 -1
- package/src/supply-chain/publication.js.map +0 -1
- package/src/supply-chain/sbom.js.map +0 -1
- package/src/supply-chain/scanner.js.map +0 -1
- package/src/supply-chain/vendored-source.js.map +0 -1
- package/src/testing-evidence/fixture-scope.js.map +0 -1
- package/src/testing-evidence/index.js.map +0 -1
- package/src/testing-evidence/quarantine.js.map +0 -1
- package/src/testing-evidence/result.js.map +0 -1
- package/src/testing-evidence/runner-adapter.js.map +0 -1
- package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
- package/src/validation.js.map +0 -1
- package/src/work-markers/index.js.map +0 -1
- package/src/work-markers/work-markers.js.map +0 -1
- package/src/workload-roles/account-baseline.js.map +0 -1
- package/src/workload-roles/authority.js.map +0 -1
- package/src/workload-roles/aws-adapter.js.map +0 -1
- package/src/workload-roles/aws-internal-handler.js.map +0 -1
- package/src/workload-roles/aws-s3-state.js.map +0 -1
- package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
- package/src/workload-roles/boundary.js.map +0 -1
- package/src/workload-roles/convergence.js.map +0 -1
- package/src/workload-roles/effective-policy.js.map +0 -1
- package/src/workload-roles/handler.js.map +0 -1
- package/src/workload-roles/history.js.map +0 -1
- package/src/workload-roles/index.js.map +0 -1
- package/src/workload-roles/injection.js.map +0 -1
- package/src/workload-roles/manifest.js.map +0 -1
- package/src/workload-roles/provisioner.js.map +0 -1
- package/src/workload-roles/registration.js.map +0 -1
- package/src/workload-roles/stage-boundary.js.map +0 -1
- package/src/workload-roles/standard-slice.js.map +0 -1
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateLocalBrowserTarget = validateLocalBrowserTarget;
|
|
4
|
+
exports.resolveLocalBrowserTarget = resolveLocalBrowserTarget;
|
|
5
|
+
exports.localBrowserLaunchArguments = localBrowserLaunchArguments;
|
|
6
|
+
exports.localBrowserRequestAllowed = localBrowserRequestAllowed;
|
|
7
|
+
exports.validateLocalBrowserReport = validateLocalBrowserReport;
|
|
8
|
+
exports.runLocalBrowserVerification = runLocalBrowserVerification;
|
|
9
|
+
exports.localBrowserFailureGuidance = localBrowserFailureGuidance;
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
const node_child_process_1 = require("node:child_process");
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
const node_module_1 = require("node:module");
|
|
14
|
+
const node_path_1 = require("node:path");
|
|
15
|
+
const errors_js_1 = require("./errors.js");
|
|
16
|
+
const fleet_client_js_1 = require("./fleet-client.js");
|
|
17
|
+
const fleet_lock_js_1 = require("./fleet-lock.js");
|
|
18
|
+
const fleet_state_js_1 = require("./fleet-state.js");
|
|
19
|
+
const identity_js_1 = require("./identity.js");
|
|
20
|
+
const nx_workspace_js_1 = require("./nx-workspace.js");
|
|
21
|
+
const process_identity_js_1 = require("./process-identity.js");
|
|
22
|
+
const runtime_paths_js_1 = require("./runtime-paths.js");
|
|
23
|
+
const task_identity_js_1 = require("./task-identity.js");
|
|
24
|
+
const tls_js_1 = require("./tls.js");
|
|
25
|
+
function refuse(message) {
|
|
26
|
+
throw new errors_js_1.LocalDevContractError('invalid-state', `Local browser verification: ${message}`);
|
|
27
|
+
}
|
|
28
|
+
/** Validate authenticated IPC state against independently resolved worktree coordinates. */
|
|
29
|
+
function validateLocalBrowserTarget(input) {
|
|
30
|
+
const state = (0, fleet_state_js_1.validateFleetStateRecord)(input.state);
|
|
31
|
+
if (state.fleetId !== input.fleetId ||
|
|
32
|
+
state.workspaceRealpath !== input.workspaceRealpath ||
|
|
33
|
+
state.resolvedStage !== input.stage ||
|
|
34
|
+
!/^personal-[a-f0-9]{24}$/.test(input.stage) ||
|
|
35
|
+
state.identitySource !== 'worktree-task' ||
|
|
36
|
+
state.sessionGeneration !== input.sessionGeneration) {
|
|
37
|
+
return refuse('authenticated fleet does not match the current task, checkout, or session.');
|
|
38
|
+
}
|
|
39
|
+
const slice = state.slices.find((entry) => entry.name === input.slice);
|
|
40
|
+
if (!slice?.selected || slice.routeState !== 'ready')
|
|
41
|
+
return refuse(`Slice ${input.slice} must be selected and ready.`);
|
|
42
|
+
const origin = new URL(state.origin);
|
|
43
|
+
if (origin.protocol !== 'https:' ||
|
|
44
|
+
origin.origin !== state.origin ||
|
|
45
|
+
origin.username ||
|
|
46
|
+
origin.password ||
|
|
47
|
+
!origin.hostname.startsWith(`${input.fleetId}.`))
|
|
48
|
+
return refuse('fleet origin must be its exact credential-free task HTTPS origin.');
|
|
49
|
+
const suffix = (0, identity_js_1.normalizeFleetHostSuffix)(origin.hostname.slice(input.fleetId.length + 1));
|
|
50
|
+
if ((0, identity_js_1.createFleetHostname)(input.fleetId, suffix) !== origin.hostname)
|
|
51
|
+
return refuse('origin hostname differs from the task.');
|
|
52
|
+
for (const path of [input.routePrefix, input.healthPath]) {
|
|
53
|
+
const target = new URL(path, origin);
|
|
54
|
+
if (!path.startsWith('/') ||
|
|
55
|
+
target.origin !== origin.origin ||
|
|
56
|
+
target.pathname !== path ||
|
|
57
|
+
target.search ||
|
|
58
|
+
target.hash)
|
|
59
|
+
return refuse('adapter browser paths must be normalized same-origin paths.');
|
|
60
|
+
}
|
|
61
|
+
const certificate = new node_crypto_1.X509Certificate(input.certificatePem);
|
|
62
|
+
const now = input.now ?? Date.now();
|
|
63
|
+
if (!certificate.checkHost(origin.hostname) ||
|
|
64
|
+
now < Date.parse(certificate.validFrom) ||
|
|
65
|
+
now >= Date.parse(certificate.validTo))
|
|
66
|
+
return refuse('private fleet certificate does not cover the current origin and time.');
|
|
67
|
+
return {
|
|
68
|
+
fleetId: input.fleetId,
|
|
69
|
+
origin: origin.origin,
|
|
70
|
+
routePrefix: input.routePrefix,
|
|
71
|
+
healthPath: input.healthPath,
|
|
72
|
+
sessionGeneration: state.sessionGeneration,
|
|
73
|
+
slice: input.slice,
|
|
74
|
+
stage: input.stage,
|
|
75
|
+
spkiSha256: (0, node_crypto_1.createHash)('sha256')
|
|
76
|
+
.update(certificate.publicKey.export({ type: 'spki', format: 'der' }))
|
|
77
|
+
.digest('base64'),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function resolveLocalBrowserTarget(input) {
|
|
81
|
+
const workspaceRealpath = (0, node_fs_1.realpathSync)(input.workspaceRoot);
|
|
82
|
+
const task = (0, task_identity_js_1.resolveTaskIdentity)(workspaceRealpath);
|
|
83
|
+
const stage = (0, task_identity_js_1.taskStage)(task.taskId);
|
|
84
|
+
const plan = await (0, nx_workspace_js_1.loadWorkspaceFleetPlan)();
|
|
85
|
+
const workspaceNames = Object.entries(plan.projects)
|
|
86
|
+
.filter(([, project]) => project.tags?.includes('scope:workspace'))
|
|
87
|
+
.map(([name]) => name);
|
|
88
|
+
if (workspaceNames.length !== 1)
|
|
89
|
+
return refuse('exactly one workspace project is required.');
|
|
90
|
+
const adapter = plan.adapters.get(input.slice);
|
|
91
|
+
if (!adapter)
|
|
92
|
+
return refuse(`Slice ${input.slice} has no valid local-dev adapter.`);
|
|
93
|
+
const fleetId = (0, identity_js_1.createFleetId)({
|
|
94
|
+
checkoutPath: workspaceRealpath,
|
|
95
|
+
stage,
|
|
96
|
+
workspaceName: workspaceNames[0],
|
|
97
|
+
});
|
|
98
|
+
const appData = (0, tls_js_1.defaultLocalDevAppData)();
|
|
99
|
+
const paths = (0, runtime_paths_js_1.fleetRuntimePaths)(fleetId, appData);
|
|
100
|
+
const lock = (0, fleet_lock_js_1.inspectFleetLock)(paths.lock);
|
|
101
|
+
if (!lock ||
|
|
102
|
+
lock.fleetId !== fleetId ||
|
|
103
|
+
(0, process_identity_js_1.probeProcessIdentity)(lock.owner) !== 'matching')
|
|
104
|
+
return refuse('an active, ownership-proved fleet is required. Run ebk dev up first.');
|
|
105
|
+
const state = await new fleet_client_js_1.FleetClient(paths).status();
|
|
106
|
+
if (JSON.stringify(state.supervisor) !== JSON.stringify(lock.owner))
|
|
107
|
+
return refuse('authenticated supervisor differs from its private process lease.');
|
|
108
|
+
return validateLocalBrowserTarget({
|
|
109
|
+
certificatePem: (0, node_fs_1.readFileSync)((0, tls_js_1.localTlsPaths)(appData).leafCertificate, 'utf8'),
|
|
110
|
+
fleetId,
|
|
111
|
+
healthPath: adapter.healthPath,
|
|
112
|
+
routePrefix: adapter.routePrefix,
|
|
113
|
+
sessionGeneration: lock.sessionGeneration,
|
|
114
|
+
slice: input.slice,
|
|
115
|
+
stage,
|
|
116
|
+
state,
|
|
117
|
+
workspaceRealpath,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/** Trust only the private leaf key in this disposable Chromium process, never the host. */
|
|
121
|
+
function localBrowserLaunchArguments(target) {
|
|
122
|
+
const origin = new URL(target.origin);
|
|
123
|
+
if (origin.protocol !== 'https:' ||
|
|
124
|
+
origin.origin !== target.origin ||
|
|
125
|
+
!origin.hostname.startsWith(`${target.fleetId}.`) ||
|
|
126
|
+
!/^[A-Za-z0-9+/]{43}=$/.test(target.spkiSha256))
|
|
127
|
+
return refuse('invalid browser launch coordinates.');
|
|
128
|
+
return [
|
|
129
|
+
`--ignore-certificate-errors-spki-list=${target.spkiSha256}`,
|
|
130
|
+
`--host-resolver-rules=MAP ${origin.hostname} 127.0.0.1`,
|
|
131
|
+
'--no-proxy-server',
|
|
132
|
+
];
|
|
133
|
+
}
|
|
134
|
+
function localBrowserRequestAllowed(origin, requested, websocket = false) {
|
|
135
|
+
try {
|
|
136
|
+
const url = new URL(requested);
|
|
137
|
+
if (websocket) {
|
|
138
|
+
if (url.protocol !== 'wss:')
|
|
139
|
+
return false;
|
|
140
|
+
url.protocol = 'https:';
|
|
141
|
+
}
|
|
142
|
+
return (url.protocol === 'https:' &&
|
|
143
|
+
!url.username &&
|
|
144
|
+
!url.password &&
|
|
145
|
+
url.origin === origin);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function validateLocalBrowserReport(value) {
|
|
152
|
+
const report = value;
|
|
153
|
+
if (!report ||
|
|
154
|
+
typeof report !== 'object' ||
|
|
155
|
+
!Array.isArray(report.suites) ||
|
|
156
|
+
!Array.isArray(report.errors) ||
|
|
157
|
+
report.errors.length !== 0 ||
|
|
158
|
+
!report.stats ||
|
|
159
|
+
report.stats.unexpected !== 0 ||
|
|
160
|
+
report.stats.skipped !== 0 ||
|
|
161
|
+
report.stats.flaky !== 0)
|
|
162
|
+
return refuse('browser report must have no failures, errors, skips, or retries.');
|
|
163
|
+
let passed = 0;
|
|
164
|
+
const visit = (suites, depth) => {
|
|
165
|
+
if (depth > 16)
|
|
166
|
+
return refuse('browser report nesting exceeds its bound.');
|
|
167
|
+
for (const raw of suites) {
|
|
168
|
+
const suite = raw;
|
|
169
|
+
if (!suite ||
|
|
170
|
+
!Array.isArray(suite.specs) ||
|
|
171
|
+
(suite.suites !== undefined && !Array.isArray(suite.suites)))
|
|
172
|
+
return refuse('browser report suite is malformed.');
|
|
173
|
+
for (const spec of suite.specs) {
|
|
174
|
+
if (!Array.isArray(spec.tests) || spec.tests.length === 0)
|
|
175
|
+
return refuse('browser report spec has no executed test.');
|
|
176
|
+
for (const test of spec.tests) {
|
|
177
|
+
if (test.expectedStatus !== 'passed' ||
|
|
178
|
+
test.results?.length !== 1 ||
|
|
179
|
+
test.results[0].status !== 'passed' ||
|
|
180
|
+
test.results[0].retry !== 0 ||
|
|
181
|
+
++passed > 512)
|
|
182
|
+
return refuse('browser report contains an expected failure, nonpassing result, retry, or excess test.');
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
visit(suite.suites ?? [], depth + 1);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
visit(report.suites, 0);
|
|
189
|
+
if (passed < 2 || passed !== report.stats.expected)
|
|
190
|
+
return refuse('browser report must account for at least two passing checks.');
|
|
191
|
+
return passed;
|
|
192
|
+
}
|
|
193
|
+
async function runLocalBrowserVerification(input) {
|
|
194
|
+
const target = await resolveLocalBrowserTarget(input);
|
|
195
|
+
const workspaceRoot = (0, node_fs_1.realpathSync)(input.workspaceRoot);
|
|
196
|
+
const plan = await (0, nx_workspace_js_1.loadWorkspaceFleetPlan)();
|
|
197
|
+
const projectRoot = (0, node_fs_1.realpathSync)((0, node_path_1.resolve)(workspaceRoot, plan.projects[input.slice].root));
|
|
198
|
+
const within = (0, node_path_1.relative)(workspaceRoot, projectRoot);
|
|
199
|
+
if (!within || within.startsWith('..') || within.includes(':'))
|
|
200
|
+
return refuse('Slice root must be inside the current workspace.');
|
|
201
|
+
const require = (0, node_module_1.createRequire)((0, node_path_1.join)(projectRoot, 'package.json'));
|
|
202
|
+
const manifest = require.resolve('@playwright/test/package.json');
|
|
203
|
+
const packageDirectory = (0, node_fs_1.realpathSync)((0, node_path_1.resolve)(manifest, '..'));
|
|
204
|
+
const cli = (0, node_fs_1.realpathSync)((0, node_path_1.join)(packageDirectory, 'cli.js'));
|
|
205
|
+
if ((0, node_path_1.relative)(packageDirectory, cli).startsWith('..'))
|
|
206
|
+
return refuse('Playwright CLI escapes its installed package.');
|
|
207
|
+
const environment = Object.fromEntries(Object.entries(process.env).filter(([key]) => !key.startsWith('EBK_SMOKE_') &&
|
|
208
|
+
![
|
|
209
|
+
'NODE_OPTIONS',
|
|
210
|
+
'NODE_PATH',
|
|
211
|
+
'NODE_TLS_REJECT_UNAUTHORIZED',
|
|
212
|
+
'NODE_EXTRA_CA_CERTS',
|
|
213
|
+
'PW_TEST_CONNECT_WS_ENDPOINT',
|
|
214
|
+
'PW_TEST_REUSE_CONTEXT',
|
|
215
|
+
].includes(key)));
|
|
216
|
+
let report;
|
|
217
|
+
let status = 'failed';
|
|
218
|
+
try {
|
|
219
|
+
const stdout = (0, node_child_process_1.execFileSync)(process.execPath, [cli, 'test', '--config=playwright.local.config.ts', '--reporter=json'], {
|
|
220
|
+
cwd: projectRoot,
|
|
221
|
+
env: environment,
|
|
222
|
+
encoding: 'utf8',
|
|
223
|
+
maxBuffer: 2 * 1024 * 1024,
|
|
224
|
+
timeout: 120_000,
|
|
225
|
+
windowsHide: true,
|
|
226
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
227
|
+
});
|
|
228
|
+
report = JSON.parse(stdout);
|
|
229
|
+
validateLocalBrowserReport(report);
|
|
230
|
+
status = 'passed';
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
return refuse(localBrowserFailureGuidance(error));
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
const evidence = (0, node_path_1.join)(projectRoot, '.ebk/evidence');
|
|
237
|
+
(0, node_fs_1.mkdirSync)(evidence, { recursive: true });
|
|
238
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(evidence, 'local-browser.json'), JSON.stringify({
|
|
239
|
+
schemaVersion: 1,
|
|
240
|
+
proofLayer: 'local-browser',
|
|
241
|
+
browser: 'chromium',
|
|
242
|
+
origin: target.origin,
|
|
243
|
+
stage: target.stage,
|
|
244
|
+
slice: target.slice,
|
|
245
|
+
sessionGeneration: target.sessionGeneration,
|
|
246
|
+
status,
|
|
247
|
+
passedTests: status === 'passed' ? report?.stats?.expected : 0,
|
|
248
|
+
}) + '\n', { mode: 0o600 });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/** @internal Only classify a known prerequisite; never echo test output or local paths. */
|
|
252
|
+
function localBrowserFailureGuidance(error) {
|
|
253
|
+
const stdout = error !== null && typeof error === 'object' && 'stdout' in error
|
|
254
|
+
? error.stdout
|
|
255
|
+
: undefined;
|
|
256
|
+
const text = typeof stdout === 'string'
|
|
257
|
+
? stdout
|
|
258
|
+
: Buffer.isBuffer(stdout)
|
|
259
|
+
? stdout.toString('utf8')
|
|
260
|
+
: '';
|
|
261
|
+
let missingBrowser = false;
|
|
262
|
+
if (Buffer.byteLength(text) <= 2 * 1024 * 1024) {
|
|
263
|
+
try {
|
|
264
|
+
JSON.parse(text, (key, value) => {
|
|
265
|
+
if (key === 'message' &&
|
|
266
|
+
typeof value === 'string' &&
|
|
267
|
+
value.startsWith("browserType.launch: Executable doesn't exist at "))
|
|
268
|
+
missingBrowser = true;
|
|
269
|
+
return value;
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
missingBrowser = false;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (missingBrowser) {
|
|
277
|
+
return 'the pinned Chromium browser is missing. From the Slice project directory, run pnpm exec playwright install chromium, then rerun its verify-local-browser target. No browser download or host-trust change was performed by this check.';
|
|
278
|
+
}
|
|
279
|
+
return 'local Chromium checks failed. Inspect .ebk/evidence/local-browser-artifacts in the Slice project directory, then rerun its verify-local-browser target. No deployed smoke or host-trust action was attempted.';
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=browser-verification.js.map
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export declare const LOCAL_DEV_ADAPTER_VERSION: 1;
|
|
2
2
|
export declare const LOCAL_DEV_ADAPTER_VERSION_V2: 2;
|
|
3
|
+
export declare const LOCAL_DEV_ADAPTER_VERSION_V3: 3;
|
|
4
|
+
export declare const MAX_LOCAL_DEV_DEPENDENCY_SLICES: 64;
|
|
3
5
|
export declare const GATEWAY_PROTOCOL_VERSION: 1;
|
|
4
6
|
export declare const SESSION_MANIFEST_VERSION: 1;
|
|
5
7
|
export type LocalDatabaseMode = 'deployed' | 'local' | 'none';
|
|
@@ -25,7 +27,11 @@ export interface WebLocalDevAdapterV2 extends Omit<WebLocalDevAdapterV1, 'adapte
|
|
|
25
27
|
adapterVersion: typeof LOCAL_DEV_ADAPTER_VERSION_V2;
|
|
26
28
|
lifecycle?: LocalDevLifecycleV2;
|
|
27
29
|
}
|
|
28
|
-
export
|
|
30
|
+
export interface WebLocalDevAdapterV3 extends Omit<WebLocalDevAdapterV2, 'adapterVersion'> {
|
|
31
|
+
adapterVersion: typeof LOCAL_DEV_ADAPTER_VERSION_V3;
|
|
32
|
+
dependencySlices: string[];
|
|
33
|
+
}
|
|
34
|
+
export type LocalDevAdapter = WebLocalDevAdapterV1 | WebLocalDevAdapterV2 | WebLocalDevAdapterV3;
|
|
29
35
|
export interface FleetRoute {
|
|
30
36
|
adapter?: LocalDevAdapter;
|
|
31
37
|
name: string;
|
|
@@ -34,6 +40,9 @@ export interface FleetRoute {
|
|
|
34
40
|
upstream?: URL;
|
|
35
41
|
}
|
|
36
42
|
export declare function validateLocalDevAdapter(value: unknown): LocalDevAdapter;
|
|
43
|
+
/** Resolve metadata, not Nx build dependencies or caller-supplied ordering. */
|
|
44
|
+
export declare function resolveFleetSliceDependencies(adapters: ReadonlyMap<string, LocalDevAdapter>, roots: readonly string[]): string[];
|
|
45
|
+
export declare function resolveFleetSliceOperation(adapters: ReadonlyMap<string, LocalDevAdapter>, command: 'up' | 'restart' | 'down', roots: readonly string[], selected: readonly string[]): string[];
|
|
37
46
|
export declare function validateFleetAdapters(entries: readonly {
|
|
38
47
|
adapter: unknown;
|
|
39
48
|
name: string;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SESSION_MANIFEST_VERSION = exports.GATEWAY_PROTOCOL_VERSION = exports.LOCAL_DEV_ADAPTER_VERSION_V2 = exports.LOCAL_DEV_ADAPTER_VERSION = void 0;
|
|
3
|
+
exports.SESSION_MANIFEST_VERSION = exports.GATEWAY_PROTOCOL_VERSION = exports.MAX_LOCAL_DEV_DEPENDENCY_SLICES = exports.LOCAL_DEV_ADAPTER_VERSION_V3 = exports.LOCAL_DEV_ADAPTER_VERSION_V2 = exports.LOCAL_DEV_ADAPTER_VERSION = void 0;
|
|
4
4
|
exports.validateLocalDevAdapter = validateLocalDevAdapter;
|
|
5
|
+
exports.resolveFleetSliceDependencies = resolveFleetSliceDependencies;
|
|
6
|
+
exports.resolveFleetSliceOperation = resolveFleetSliceOperation;
|
|
5
7
|
exports.validateFleetAdapters = validateFleetAdapters;
|
|
8
|
+
const errors_js_1 = require("./errors.js");
|
|
6
9
|
exports.LOCAL_DEV_ADAPTER_VERSION = 1;
|
|
7
10
|
exports.LOCAL_DEV_ADAPTER_VERSION_V2 = 2;
|
|
11
|
+
exports.LOCAL_DEV_ADAPTER_VERSION_V3 = 3;
|
|
12
|
+
exports.MAX_LOCAL_DEV_DEPENDENCY_SLICES = 64;
|
|
8
13
|
exports.GATEWAY_PROTOCOL_VERSION = 1;
|
|
9
14
|
exports.SESSION_MANIFEST_VERSION = 1;
|
|
10
15
|
const namePattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
@@ -44,6 +49,7 @@ function validateLocalDevAdapter(value) {
|
|
|
44
49
|
'adapterVersion',
|
|
45
50
|
'auth',
|
|
46
51
|
'databaseMode',
|
|
52
|
+
'dependencySlices',
|
|
47
53
|
'healthPath',
|
|
48
54
|
'kind',
|
|
49
55
|
'lifecycle',
|
|
@@ -57,8 +63,25 @@ function validateLocalDevAdapter(value) {
|
|
|
57
63
|
throw new Error(`Local-dev adapter has unknown member ${unknown[0]}.`);
|
|
58
64
|
}
|
|
59
65
|
if (candidate.adapterVersion !== exports.LOCAL_DEV_ADAPTER_VERSION &&
|
|
60
|
-
candidate.adapterVersion !== exports.LOCAL_DEV_ADAPTER_VERSION_V2
|
|
61
|
-
|
|
66
|
+
candidate.adapterVersion !== exports.LOCAL_DEV_ADAPTER_VERSION_V2 &&
|
|
67
|
+
candidate.adapterVersion !== exports.LOCAL_DEV_ADAPTER_VERSION_V3) {
|
|
68
|
+
throw new Error('Local-dev adapter version must be 1, 2, or 3.');
|
|
69
|
+
}
|
|
70
|
+
let dependencySlices = [];
|
|
71
|
+
if (candidate.adapterVersion === exports.LOCAL_DEV_ADAPTER_VERSION_V3) {
|
|
72
|
+
if (!Array.isArray(candidate.dependencySlices) ||
|
|
73
|
+
candidate.dependencySlices.length > exports.MAX_LOCAL_DEV_DEPENDENCY_SLICES ||
|
|
74
|
+
candidate.dependencySlices.some((name) => typeof name !== 'string' ||
|
|
75
|
+
name.length > 63 ||
|
|
76
|
+
!namePattern.test(name)) ||
|
|
77
|
+
new Set(candidate.dependencySlices).size !==
|
|
78
|
+
candidate.dependencySlices.length) {
|
|
79
|
+
throw new Error('Local-dev adapter v3 dependencySlices must contain at most 64 unique DNS-safe Slice names.');
|
|
80
|
+
}
|
|
81
|
+
dependencySlices = [...candidate.dependencySlices].sort();
|
|
82
|
+
}
|
|
83
|
+
else if (candidate.dependencySlices !== undefined) {
|
|
84
|
+
throw new Error('Local-dev dependencySlices requires adapter v3.');
|
|
62
85
|
}
|
|
63
86
|
if (candidate.adapterVersion === exports.LOCAL_DEV_ADAPTER_VERSION &&
|
|
64
87
|
candidate.lifecycle !== undefined) {
|
|
@@ -103,7 +126,8 @@ function validateLocalDevAdapter(value) {
|
|
|
103
126
|
throw new Error('Local-dev adapter routePrefix must identify a slice path.');
|
|
104
127
|
}
|
|
105
128
|
let lifecycle;
|
|
106
|
-
if (candidate.adapterVersion === exports.LOCAL_DEV_ADAPTER_VERSION_V2
|
|
129
|
+
if (candidate.adapterVersion === exports.LOCAL_DEV_ADAPTER_VERSION_V2 ||
|
|
130
|
+
candidate.adapterVersion === exports.LOCAL_DEV_ADAPTER_VERSION_V3) {
|
|
107
131
|
if (candidate.lifecycle !== undefined) {
|
|
108
132
|
if (!candidate.lifecycle ||
|
|
109
133
|
typeof candidate.lifecycle !== 'object' ||
|
|
@@ -131,10 +155,12 @@ function validateLocalDevAdapter(value) {
|
|
|
131
155
|
};
|
|
132
156
|
}
|
|
133
157
|
if (candidate.databaseMode === 'local' && !lifecycle) {
|
|
134
|
-
throw new Error('Local-dev adapter v2 with databaseMode local requires lifecycle cleanup.');
|
|
158
|
+
throw new Error('Local-dev adapter v2/v3 with databaseMode local requires lifecycle cleanup.');
|
|
135
159
|
}
|
|
136
|
-
if (
|
|
137
|
-
|
|
160
|
+
if (lifecycle &&
|
|
161
|
+
candidate.databaseMode !== 'local' &&
|
|
162
|
+
!(candidate.adapterVersion === 3 && candidate.databaseMode === 'none')) {
|
|
163
|
+
throw new Error('Local-dev adapter lifecycle cleanup requires local database resources or v3 task-owned resources without a local database.');
|
|
138
164
|
}
|
|
139
165
|
}
|
|
140
166
|
const common = {
|
|
@@ -152,17 +178,92 @@ function validateLocalDevAdapter(value) {
|
|
|
152
178
|
adapterVersion: exports.LOCAL_DEV_ADAPTER_VERSION,
|
|
153
179
|
...common,
|
|
154
180
|
}
|
|
155
|
-
:
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
181
|
+
: candidate.adapterVersion === exports.LOCAL_DEV_ADAPTER_VERSION_V2
|
|
182
|
+
? {
|
|
183
|
+
adapterVersion: exports.LOCAL_DEV_ADAPTER_VERSION_V2,
|
|
184
|
+
...(lifecycle ? { lifecycle } : {}),
|
|
185
|
+
...common,
|
|
186
|
+
}
|
|
187
|
+
: {
|
|
188
|
+
adapterVersion: exports.LOCAL_DEV_ADAPTER_VERSION_V3,
|
|
189
|
+
dependencySlices,
|
|
190
|
+
...(lifecycle ? { lifecycle } : {}),
|
|
191
|
+
...common,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/** Resolve metadata, not Nx build dependencies or caller-supplied ordering. */
|
|
195
|
+
function resolveFleetSliceDependencies(adapters, roots) {
|
|
196
|
+
const ordered = [];
|
|
197
|
+
const visited = new Set();
|
|
198
|
+
const active = new Set();
|
|
199
|
+
const visit = (name, owner = name) => {
|
|
200
|
+
if (active.has(name)) {
|
|
201
|
+
throw new errors_js_1.LocalDevContractError('invalid-adapter', `Product Slice ${owner} has a dependency cycle through ${name}.`);
|
|
202
|
+
}
|
|
203
|
+
if (visited.has(name))
|
|
204
|
+
return;
|
|
205
|
+
if (visited.size + active.size >= exports.MAX_LOCAL_DEV_DEPENDENCY_SLICES) {
|
|
206
|
+
throw new errors_js_1.LocalDevContractError('invalid-adapter', `Product Slice ${owner} exceeds the 64-Slice dependency closure limit.`);
|
|
207
|
+
}
|
|
208
|
+
const raw = adapters.get(name);
|
|
209
|
+
if (!raw) {
|
|
210
|
+
throw new errors_js_1.LocalDevContractError('invalid-adapter', `Product Slice ${owner} requires ${name}, which has no valid local-dev adapter.`);
|
|
211
|
+
}
|
|
212
|
+
let adapter;
|
|
213
|
+
try {
|
|
214
|
+
adapter = validateLocalDevAdapter(raw);
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
throw new errors_js_1.LocalDevContractError('invalid-adapter', `Product Slice ${name} has invalid local-dev metadata: ${error instanceof Error ? error.message : String(error)}`);
|
|
218
|
+
}
|
|
219
|
+
active.add(name);
|
|
220
|
+
for (const dependency of adapter.adapterVersion === 3
|
|
221
|
+
? adapter.dependencySlices
|
|
222
|
+
: []) {
|
|
223
|
+
if (dependency === name) {
|
|
224
|
+
throw new errors_js_1.LocalDevContractError('invalid-adapter', `Product Slice ${name} must not depend on itself.`);
|
|
225
|
+
}
|
|
226
|
+
visit(dependency, name);
|
|
227
|
+
}
|
|
228
|
+
active.delete(name);
|
|
229
|
+
visited.add(name);
|
|
230
|
+
ordered.push(name);
|
|
231
|
+
};
|
|
232
|
+
for (const name of [...roots].sort())
|
|
233
|
+
visit(name);
|
|
234
|
+
return ordered;
|
|
235
|
+
}
|
|
236
|
+
function resolveFleetSliceOperation(adapters, command, roots, selected) {
|
|
237
|
+
if (roots.length === 0 || new Set(roots).size !== roots.length) {
|
|
238
|
+
throw new errors_js_1.LocalDevContractError('invalid-input', `Fleet ${command} requires unique non-empty Slice names.`);
|
|
239
|
+
}
|
|
240
|
+
const closure = resolveFleetSliceDependencies(adapters, roots);
|
|
241
|
+
if (command === 'up')
|
|
242
|
+
return closure;
|
|
243
|
+
const requested = new Set(roots);
|
|
244
|
+
if (command === 'down') {
|
|
245
|
+
for (const dependent of selected) {
|
|
246
|
+
if (requested.has(dependent))
|
|
247
|
+
continue;
|
|
248
|
+
const removed = resolveFleetSliceDependencies(adapters, [dependent]).find((name) => requested.has(name));
|
|
249
|
+
if (removed) {
|
|
250
|
+
throw new errors_js_1.LocalDevContractError('invalid-input', `Cannot remove dependency ${removed} while Product Slice ${dependent} remains selected.`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return closure.filter((name) => requested.has(name)).reverse();
|
|
254
|
+
}
|
|
255
|
+
for (const name of closure) {
|
|
256
|
+
if (!selected.includes(name)) {
|
|
257
|
+
throw new errors_js_1.LocalDevContractError('not-running', `Product Slice ${name} is not selected; start the dependency closure before restart.`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return closure.filter((name) => requested.has(name));
|
|
160
261
|
}
|
|
161
262
|
function validateFleetAdapters(entries) {
|
|
162
263
|
const adapters = new Map();
|
|
163
264
|
const prefixes = new Map();
|
|
164
265
|
for (const { adapter: raw, name } of entries) {
|
|
165
|
-
if (!namePattern.test(name)) {
|
|
266
|
+
if (name.length > 63 || !namePattern.test(name)) {
|
|
166
267
|
throw new Error(`Product Slice name ${name} is not DNS-safe.`);
|
|
167
268
|
}
|
|
168
269
|
const adapter = validateLocalDevAdapter(raw);
|
|
@@ -11,10 +11,26 @@ function foregroundWait(launch, command, signal, idempotencyKey, reportCleanupFa
|
|
|
11
11
|
return undefined;
|
|
12
12
|
const stop = async () => {
|
|
13
13
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
14
|
+
let down;
|
|
15
|
+
try {
|
|
16
|
+
down = await launch.client.submit('down', { all: true, slices: [] }, idempotencyKey());
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// A failed up can leave a live foreground supervisor with no Slices.
|
|
20
|
+
// Its authenticated shutdown still independently refuses active owners.
|
|
21
|
+
if (!(error instanceof errors_js_1.LocalDevContractError) ||
|
|
22
|
+
error.classification !== 'not-running') {
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (down) {
|
|
27
|
+
const operation = await launch.client.waitForOperation(down.operationId, {
|
|
28
|
+
timeoutMs: command.timeoutMs ?? 120_000,
|
|
29
|
+
});
|
|
30
|
+
if (operation.state !== 'succeeded') {
|
|
31
|
+
throw new errors_js_1.LocalDevContractError(operation.failureClassification ?? 'operation-conflict', 'Foreground Fleet down did not complete successfully; ownership was retained.');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
18
34
|
await launch.client.shutdown(idempotencyKey());
|
|
19
35
|
}
|
|
20
36
|
catch (error) {
|
|
@@ -22,7 +38,10 @@ function foregroundWait(launch, command, signal, idempotencyKey, reportCleanupFa
|
|
|
22
38
|
}
|
|
23
39
|
};
|
|
24
40
|
const onAbort = () => void stop();
|
|
25
|
-
signal.
|
|
41
|
+
if (signal.aborted)
|
|
42
|
+
onAbort();
|
|
43
|
+
else
|
|
44
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
26
45
|
return launch.runtime.supervisor.waitUntilStopped().finally(() => {
|
|
27
46
|
signal.removeEventListener('abort', onAbort);
|
|
28
47
|
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS = 5000;
|
|
2
|
+
/** Check helper liveness through the optional metadata-only list operation. Never
|
|
3
|
+
* request a password, retain helper output, or modify Docker configuration. */
|
|
4
|
+
export declare function inspectDockerCredentialHelpers(options?: {
|
|
5
|
+
configDirectory?: string;
|
|
6
|
+
/** Docker registry keys for the images being used, not every host login. */
|
|
7
|
+
registries?: readonly string[];
|
|
8
|
+
probe?: (executable: string) => Promise<void>;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
status: 'ready' | 'unavailable';
|
|
11
|
+
evidence: string;
|
|
12
|
+
remediation?: string;
|
|
13
|
+
}>;
|
|
14
|
+
export declare function probeDockerCredentialHelper(executable: string): Promise<void>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS = void 0;
|
|
4
|
+
exports.inspectDockerCredentialHelpers = inspectDockerCredentialHelpers;
|
|
5
|
+
exports.probeDockerCredentialHelper = probeDockerCredentialHelper;
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_os_1 = require("node:os");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
exports.DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS = 5_000;
|
|
11
|
+
const remediation = 'If a required image pull fails, repair or unlock its selected Docker credential helper, then run ebk dev doctor --refresh. The optional list probe is advisory; do not delete host credentials, remove helpers, or prune shared builders.';
|
|
12
|
+
/** Check helper liveness through the optional metadata-only list operation. Never
|
|
13
|
+
* request a password, retain helper output, or modify Docker configuration. */
|
|
14
|
+
async function inspectDockerCredentialHelpers(options = {}) {
|
|
15
|
+
try {
|
|
16
|
+
const directory = options.configDirectory ??
|
|
17
|
+
process.env.DOCKER_CONFIG ??
|
|
18
|
+
(0, node_path_1.join)((0, node_os_1.homedir)(), '.docker');
|
|
19
|
+
if (!(0, node_path_1.isAbsolute)(directory))
|
|
20
|
+
throw new Error('invalid configuration');
|
|
21
|
+
let file;
|
|
22
|
+
try {
|
|
23
|
+
file = (0, node_fs_1.openSync)((0, node_path_1.join)(directory, 'config.json'), 'r');
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === 'ENOENT')
|
|
27
|
+
return {
|
|
28
|
+
status: 'ready',
|
|
29
|
+
evidence: 'No explicit Docker credential helper is configured.',
|
|
30
|
+
};
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
let config;
|
|
34
|
+
try {
|
|
35
|
+
const stat = (0, node_fs_1.fstatSync)(file);
|
|
36
|
+
if (!stat.isFile() || stat.size > 64 * 1024)
|
|
37
|
+
throw new Error('invalid configuration');
|
|
38
|
+
config = JSON.parse((0, node_fs_1.readFileSync)(file, 'utf8'));
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
(0, node_fs_1.closeSync)(file);
|
|
42
|
+
}
|
|
43
|
+
if (!config || typeof config !== 'object' || Array.isArray(config))
|
|
44
|
+
throw new Error('invalid configuration');
|
|
45
|
+
let registryHelpers = {};
|
|
46
|
+
if (config.credHelpers !== undefined) {
|
|
47
|
+
if (!config.credHelpers ||
|
|
48
|
+
typeof config.credHelpers !== 'object' ||
|
|
49
|
+
Array.isArray(config.credHelpers))
|
|
50
|
+
throw new Error('invalid configuration');
|
|
51
|
+
registryHelpers = config.credHelpers;
|
|
52
|
+
}
|
|
53
|
+
// Fleet dependency images currently use Docker Hub. Exact registry helpers
|
|
54
|
+
// override the global store, as Docker does; unrelated logins are untouched.
|
|
55
|
+
const helpers = (options.registries ?? ['https://index.docker.io/v1/'])
|
|
56
|
+
.map((registry) => registryHelpers[registry] ?? config.credsStore)
|
|
57
|
+
.filter((helper) => helper !== undefined && helper !== '');
|
|
58
|
+
const unique = [...new Set(helpers)];
|
|
59
|
+
if (unique.length > 16 ||
|
|
60
|
+
unique.some((helper) => typeof helper !== 'string' ||
|
|
61
|
+
!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(helper)))
|
|
62
|
+
throw new Error('invalid configuration');
|
|
63
|
+
const probe = options.probe ?? probeDockerCredentialHelper;
|
|
64
|
+
await Promise.all(unique.map((helper) => probe(`docker-credential-${helper}`)));
|
|
65
|
+
return {
|
|
66
|
+
status: 'ready',
|
|
67
|
+
evidence: `${unique.length} selected Docker credential helper(s) responded to the optional list probe; output discarded. Image authentication is checked by Docker when pulling.`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return {
|
|
72
|
+
status: 'unavailable',
|
|
73
|
+
evidence: 'Docker credential configuration or optional list liveness is unverified. This does not prove required image pulls will fail.',
|
|
74
|
+
remediation,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function probeDockerCredentialHelper(executable) {
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
// list returns registry/username metadata, not passwords. Even that metadata
|
|
81
|
+
// is discarded. Never serialize execFile's error (it carries stdout/stderr).
|
|
82
|
+
const child = (0, node_child_process_1.execFile)(executable, ['list'], {
|
|
83
|
+
timeout: exports.DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS,
|
|
84
|
+
killSignal: 'SIGKILL',
|
|
85
|
+
maxBuffer: 64 * 1024,
|
|
86
|
+
windowsHide: true,
|
|
87
|
+
shell: false,
|
|
88
|
+
}, (error) => error
|
|
89
|
+
? reject(new Error('Docker credential helper unavailable.'))
|
|
90
|
+
: resolve());
|
|
91
|
+
child.stdin?.end();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=docker-credential-health.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type FoundationPreflightReport } from '../foundation/preflight.js';
|
|
1
2
|
import type { LocalDevAdapter } from './contracts.js';
|
|
2
3
|
import { type DevelopmentEnvironmentAssessment, type EnvironmentCheckResult } from './environment-state.js';
|
|
3
4
|
import { LocalDevContractError } from './errors.js';
|
|
@@ -61,6 +62,10 @@ export declare const ENVIRONMENT_INSPECTOR_CHECKS: readonly [{
|
|
|
61
62
|
readonly capabilities: readonly ["containers"];
|
|
62
63
|
readonly id: "docker-compose-v2";
|
|
63
64
|
readonly volatile: true;
|
|
65
|
+
}, {
|
|
66
|
+
readonly capabilities: readonly ["containers"];
|
|
67
|
+
readonly id: "docker-credential-helpers";
|
|
68
|
+
readonly volatile: true;
|
|
64
69
|
}, {
|
|
65
70
|
readonly capabilities: readonly ["aws-foundation"];
|
|
66
71
|
readonly id: "aws-sdk-credentials";
|
|
@@ -122,5 +127,7 @@ export declare class EnvironmentDeficientError extends LocalDevContractError {
|
|
|
122
127
|
}
|
|
123
128
|
export declare function evaluateEnvironmentExecutableVersion(detectedVersion: string, minimumVersion: string, remediation: string): EnvironmentProbeObservation;
|
|
124
129
|
export declare function evaluateDevelopmentFoundationAccount(accountId: string, eventBusArn: string): EnvironmentProbeObservation;
|
|
130
|
+
export declare function evaluateDevelopmentFoundationReport(report: FoundationPreflightReport, accountId: string, context: LocalDevContext): EnvironmentProbeObservation;
|
|
131
|
+
export declare function resolveCurrentAwsAccountId(context: LocalDevContext, abortSignal: AbortSignal): Promise<string>;
|
|
125
132
|
export declare function inspectDevelopmentEnvironment(input: InspectEnvironmentInput, dependencies?: EnvironmentInspectorDependencies): Promise<DevelopmentEnvironmentAssessment>;
|
|
126
133
|
export declare function assertEnvironmentReady(assessment: DevelopmentEnvironmentAssessment): void;
|