@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39
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 +18 -0
- package/executors.json +5 -0
- package/generators.json +10 -0
- package/package.json +20 -3
- package/src/aws-authority/index.d.ts +1 -0
- package/src/aws-authority/index.js +1 -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 +11 -3
- package/src/aws-authority/stage-authority.js +615 -29
- 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 +6 -0
- package/src/cli/deploy-runtime.js +58 -0
- package/src/cli/dev-command.d.ts +16 -4
- package/src/cli/dev-command.js +63 -0
- package/src/cli/main.d.ts +7 -1
- package/src/cli/main.js +128 -20
- package/src/cli/output.d.ts +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +16 -2
- 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 +4 -2
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +179 -23
- 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 +20 -8
- package/src/developer-agent/workspace-inspection.js +37 -3
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +51 -4
- 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-remove-preflight/foundation-remove-preflight.js +28 -1
- package/src/executors/local-deploy/local-deploy.d.ts +8 -1
- package/src/executors/local-deploy/local-deploy.js +97 -24
- package/src/executors/local-deploy/schema.json +8 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
- package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +1 -0
- package/src/foundation/index.js +1 -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/preflight.js +37 -18
- package/src/foundation/private-smoke-access.js +10 -2
- package/src/foundation/private-smoke-admission.d.ts +3 -1
- package/src/foundation/private-smoke-admission.js +29 -8
- package/src/foundation/private-smoke-control-plane.js +17 -6
- 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 +13 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf.d.ts +1 -0
- package/src/foundation/router-waf.js +14 -1
- 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.js +24 -1
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +301 -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.js +40 -13
- package/src/generators/preset/workspace-files-performance-load.js +8 -0
- package/src/generators/preset/workspace-files-stage-authority.js +40 -1
- package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
- package/src/generators/preset/workspace-files-thin-docs.js +64 -18
- package/src/generators/preset/workspace-files.d.ts +4 -0
- package/src/generators/preset/workspace-files.js +159 -91
- package/src/generators/repository-policy/repository-policy.js +37 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +47 -389
- package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
- 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 +1 -1
- package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +61 -1164
- 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 +18 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
- package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
- 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 +120 -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 +140 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +89 -50
- package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
- package/src/generators/slice/built-in-plan-project-files.js +116 -67
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +64 -15
- package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
- 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 +257 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +184 -132
- 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 +178 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
- package/src/generators/slice/built-in-plan-verification-files.js +70 -0
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +206 -14
- 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 +113 -274
- package/src/generators/slice/built-in-plan.d.ts +9 -1
- package/src/generators/slice/built-in-plan.js +49 -21
- 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 +29 -24
- 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 +2 -0
- package/src/generators/upgrade/upgrade.js +136 -9
- package/src/generators/workload/workload.js +51 -2
- 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 +46 -18
- 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 +14 -2
- 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 +6 -0
- package/src/local-dev/private-state.js +126 -34
- 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 +3 -1
- 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/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/repository-policy/deployment-plan.d.ts +2 -2
- package/src/repository-policy/deployment-plan.js +2 -1
- package/src/repository-policy/policy.js +38 -3
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/operator.d.ts +3 -1
- package/src/secrets/operator.js +22 -3
- package/src/sst-environment-source-format.d.ts +3 -0
- package/src/sst-environment-source-format.js +20 -0
- package/src/supply-chain/blueprint-trust-git.js +13 -3
- package/src/supply-chain/build-output.js +15 -0
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- 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/standard-slice.js +2 -3
- 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/aws/child-environment.js.map +0 -1
- package/src/aws/identity.js.map +0 -1
- package/src/aws-authority/index.js.map +0 -1
- package/src/aws-authority/stage-authority.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-profile-preflight/production-database-safeguard.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/local-deploy/federated-credential-transport.js.map +0 -1
- package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
- package/src/executors/local-deploy/local-approval.js.map +0 -1
- package/src/executors/local-deploy/local-deploy.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/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
- package/src/executors/sst-lifecycle/governed-native-operation.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/sst-lifecycle/sst-environment-source.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/partial-state.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/private-smoke-access.js.map +0 -1
- package/src/foundation/private-smoke-admission.js.map +0 -1
- package/src/foundation/private-smoke-control-plane.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/router-waf-rate-rehearsal.js.map +0 -1
- package/src/foundation/router-waf.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/formatting.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/dependency-overrides.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-ci-acceptance.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-ecr-inspector.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-stage-authority.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-release.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/repository-policy/tree-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-background-work-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-native-runtime-authority-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-thin-release-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/local-capability.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 -167
- 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/capacity-migration.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/generated-aws-control-plane.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/sst-environment-source-format.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-bounds.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
- package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
- package/src/workspace-deployment/identity.js.map +0 -1
- package/src/workspace-deployment/index.js.map +0 -1
- package/src/workspace-deployment/migration-evidence.js.map +0 -1
- package/src/workspace-deployment/migration.js.map +0 -1
- package/src/workspace-deployment/ownership.js.map +0 -1
|
@@ -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;
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.EnvironmentDeficientError = exports.ENVIRONMENT_INSPECTOR_CHECKS = exports.AWS_ENVIRONMENT_PROBE_TIMEOUT_MS = void 0;
|
|
4
4
|
exports.evaluateEnvironmentExecutableVersion = evaluateEnvironmentExecutableVersion;
|
|
5
5
|
exports.evaluateDevelopmentFoundationAccount = evaluateDevelopmentFoundationAccount;
|
|
6
|
+
exports.evaluateDevelopmentFoundationReport = evaluateDevelopmentFoundationReport;
|
|
7
|
+
exports.resolveCurrentAwsAccountId = resolveCurrentAwsAccountId;
|
|
6
8
|
exports.inspectDevelopmentEnvironment = inspectDevelopmentEnvironment;
|
|
7
9
|
exports.assertEnvironmentReady = assertEnvironmentReady;
|
|
8
10
|
const node_child_process_1 = require("node:child_process");
|
|
@@ -22,6 +24,7 @@ const errors_js_1 = require("./errors.js");
|
|
|
22
24
|
const nx_workspace_js_1 = require("./nx-workspace.js");
|
|
23
25
|
const personal_stage_js_1 = require("./personal-stage.js");
|
|
24
26
|
const tls_js_1 = require("./tls.js");
|
|
27
|
+
const docker_credential_health_js_1 = require("./docker-credential-health.js");
|
|
25
28
|
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
26
29
|
exports.AWS_ENVIRONMENT_PROBE_TIMEOUT_MS = 15_000;
|
|
27
30
|
const MAX_AWS_ENVIRONMENT_PROBE_TIMEOUT_MS = 60_000;
|
|
@@ -100,6 +103,11 @@ exports.ENVIRONMENT_INSPECTOR_CHECKS = [
|
|
|
100
103
|
id: 'docker-compose-v2',
|
|
101
104
|
volatile: true,
|
|
102
105
|
},
|
|
106
|
+
{
|
|
107
|
+
capabilities: ['containers'],
|
|
108
|
+
id: 'docker-credential-helpers',
|
|
109
|
+
volatile: true,
|
|
110
|
+
},
|
|
103
111
|
{
|
|
104
112
|
capabilities: ['aws-foundation'],
|
|
105
113
|
id: 'aws-sdk-credentials',
|
|
@@ -257,11 +265,15 @@ function commandRequirements(command, adapters, force = false) {
|
|
|
257
265
|
checks['docker-cli'] = 'required';
|
|
258
266
|
checks['docker-engine'] = 'required';
|
|
259
267
|
checks['docker-compose-v2'] = 'required';
|
|
268
|
+
// Docker's required credential protocol is get/store/erase, not list.
|
|
269
|
+
// This secret-free liveness probe is diagnostic, never pull authority.
|
|
270
|
+
checks['docker-credential-helpers'] = 'advisory';
|
|
260
271
|
}
|
|
261
272
|
else {
|
|
262
273
|
checks['docker-cli'] = 'not-required';
|
|
263
274
|
checks['docker-engine'] = 'not-required';
|
|
264
275
|
checks['docker-compose-v2'] = 'not-required';
|
|
276
|
+
checks['docker-credential-helpers'] = 'not-required';
|
|
265
277
|
}
|
|
266
278
|
}
|
|
267
279
|
else if (command === 'doctor') {
|
|
@@ -288,12 +300,14 @@ async function commandVersion(executable, args, timeout = 5_000) {
|
|
|
288
300
|
});
|
|
289
301
|
return `${result.stdout}${result.stderr}`.trim().split(/\r?\n/, 1)[0] ?? '';
|
|
290
302
|
}
|
|
291
|
-
function commandProbe(executable, args, remediation, minimumVersion) {
|
|
303
|
+
function commandProbe(executable, args, remediation, minimumVersion, versionPattern) {
|
|
292
304
|
return async () => {
|
|
293
305
|
try {
|
|
294
306
|
const version = await commandVersion(executable, args);
|
|
295
307
|
return minimumVersion
|
|
296
|
-
? evaluateEnvironmentExecutableVersion(
|
|
308
|
+
? evaluateEnvironmentExecutableVersion(versionPattern
|
|
309
|
+
? (versionPattern.exec(version)?.[1] ?? version)
|
|
310
|
+
: version, minimumVersion, remediation)
|
|
297
311
|
: {
|
|
298
312
|
detectedVersion: (0, environment_state_js_1.sanitizeEnvironmentEvidence)(version).slice(0, 128),
|
|
299
313
|
status: 'ready',
|
|
@@ -335,6 +349,18 @@ function evaluateDevelopmentFoundationAccount(accountId, eventBusArn) {
|
|
|
335
349
|
status: 'ready',
|
|
336
350
|
};
|
|
337
351
|
}
|
|
352
|
+
function evaluateDevelopmentFoundationReport(report, accountId, context) {
|
|
353
|
+
if (!report.ok || !report.discovery) {
|
|
354
|
+
return {
|
|
355
|
+
evidence: report.issues.join('; '),
|
|
356
|
+
remediation: report.state === 'absent'
|
|
357
|
+
? `Development Foundation is absent in ${context.region}. Verify workspace ownership and run ebk deploy development --profile=${context.profile} --expectedRoleArn=<approved-development-role>; the governed stage lifecycle deploys Foundation first, then eligible Slices. Retry ebk dev doctor afterward. This is not an IAM denial.`
|
|
358
|
+
: 'Development Foundation discovery is incomplete or incompatible. Inspect the reported contract issues and reconcile Foundation through its governed upgrade/deploy workflow; do not expand IAM permissions to repair discovery data.',
|
|
359
|
+
status: 'unavailable',
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
return evaluateDevelopmentFoundationAccount(accountId, report.discovery.eventBusArn);
|
|
363
|
+
}
|
|
338
364
|
function createAbortableCredentialRequestHandler(context, abortSignal) {
|
|
339
365
|
const transportClient = new client_sts_1.STSClient({
|
|
340
366
|
region: context.region,
|
|
@@ -356,7 +382,8 @@ async function resolveProfileCredentials(context, abortSignal) {
|
|
|
356
382
|
try {
|
|
357
383
|
return await (0, credential_providers_1.fromIni)({
|
|
358
384
|
clientConfig: {
|
|
359
|
-
|
|
385
|
+
// Credential sources own their Region (notably the SSO session).
|
|
386
|
+
// Application STS/SSM clients still use the selected deployment Region.
|
|
360
387
|
requestHandler: transport.requestHandler,
|
|
361
388
|
},
|
|
362
389
|
profile: context.profile,
|
|
@@ -418,7 +445,7 @@ const defaultProbes = {
|
|
|
418
445
|
'personal-stage': async ({ identity }) => (0, personal_stage_js_1.isFrameworkPersonalStage)(identity.stage)
|
|
419
446
|
? { evidence: identity.stage, status: 'ready' }
|
|
420
447
|
: {
|
|
421
|
-
remediation: '
|
|
448
|
+
remediation: 'Inspect the persisted worktree task identity with ebk dev status; use explicit ebk dev attach only after verifying ownership.',
|
|
422
449
|
status: 'unavailable',
|
|
423
450
|
},
|
|
424
451
|
'private-state-location': async ({ appData }) => {
|
|
@@ -448,13 +475,14 @@ const defaultProbes = {
|
|
|
448
475
|
return required.every(node_fs_1.existsSync)
|
|
449
476
|
? { status: 'ready' }
|
|
450
477
|
: {
|
|
451
|
-
remediation: 'Run ebk dev setup
|
|
478
|
+
remediation: 'Run ebk dev setup. The generated verify-local-browser target uses browser-scoped trust; system trust is optional and must be explicitly reviewed.',
|
|
452
479
|
status: 'missing',
|
|
453
480
|
};
|
|
454
481
|
},
|
|
455
482
|
'docker-cli': commandProbe('docker', ['--version'], 'Install Docker with the Docker CLI.'),
|
|
456
483
|
'docker-engine': commandProbe('docker', ['info', '--format', '{{.ServerVersion}}'], 'Start the Docker engine and confirm current-user access.'),
|
|
457
484
|
'docker-compose-v2': commandProbe('docker', ['compose', 'version', '--short'], 'Install or enable Docker Compose v2.'),
|
|
485
|
+
'docker-credential-helpers': () => (0, docker_credential_health_js_1.inspectDockerCredentialHelpers)(),
|
|
458
486
|
'aws-sdk-credentials': async ({ context }, abortSignal) => {
|
|
459
487
|
try {
|
|
460
488
|
const credentials = await resolveProfileCredentials(context, abortSignal);
|
|
@@ -497,14 +525,7 @@ const defaultProbes = {
|
|
|
497
525
|
region: context.region,
|
|
498
526
|
requirement: discovery_js_1.STANDARD_FOUNDATION_REQUIREMENT,
|
|
499
527
|
});
|
|
500
|
-
|
|
501
|
-
return {
|
|
502
|
-
evidence: report.issues.join('; '),
|
|
503
|
-
remediation: `Grant profile ${context.profile} bounded ssm:GetParameters access to the development Foundation contract in ${context.region}.`,
|
|
504
|
-
status: 'unavailable',
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
return evaluateDevelopmentFoundationAccount(accountId, report.discovery.eventBusArn);
|
|
528
|
+
return evaluateDevelopmentFoundationReport(report, accountId, context);
|
|
508
529
|
}
|
|
509
530
|
finally {
|
|
510
531
|
reader.destroy();
|
|
@@ -513,12 +534,18 @@ const defaultProbes = {
|
|
|
513
534
|
catch (error) {
|
|
514
535
|
return {
|
|
515
536
|
evidence: error instanceof Error ? error.message : String(error),
|
|
516
|
-
remediation:
|
|
537
|
+
remediation: [
|
|
538
|
+
'AccessDenied',
|
|
539
|
+
'AccessDeniedException',
|
|
540
|
+
'UnauthorizedOperation',
|
|
541
|
+
].includes(error instanceof Error ? error.name : '')
|
|
542
|
+
? `Reconcile profile ${context.profile}'s bounded ssm:GetParameters authority for /ebk/development/foundation/* in ${context.region}; confirm the exact account and role before changing policy.`
|
|
543
|
+
: `Verify profile ${context.profile}'s temporary credentials and network access in ${context.region}, then retry ebk dev doctor. An unresolved read is not proof of missing IAM permissions.`,
|
|
517
544
|
status: 'unavailable',
|
|
518
545
|
};
|
|
519
546
|
}
|
|
520
547
|
},
|
|
521
|
-
'aws-cli-remediation': commandProbe('aws', ['--version'], 'Install AWS CLI v2 only when the selected SSO profile requires aws sso login remediation.', '2'),
|
|
548
|
+
'aws-cli-remediation': commandProbe('aws', ['--version'], 'Install AWS CLI v2 only when the selected SSO profile requires aws sso login remediation.', '2', /^aws-cli\/(\d+\.\d+\.\d+)(?:\s|$)/),
|
|
522
549
|
};
|
|
523
550
|
async function resolveCurrentAwsAccountId(context, abortSignal) {
|
|
524
551
|
const credentials = await resolveProfileCredentials(context, abortSignal);
|
|
@@ -392,7 +392,7 @@ function validateDevelopmentEnvironmentAssessment(value) {
|
|
|
392
392
|
value.catalogVersion !== exports.ENVIRONMENT_REQUIREMENT_CATALOG_VERSION ||
|
|
393
393
|
value.localContextSchemaVersion !== local_context_js_1.LOCAL_DEV_CONTEXT_SCHEMA_VERSION ||
|
|
394
394
|
value.personalStageResolverVersion !== personal_stage_js_1.PERSONAL_STAGE_RESOLVER_VERSION ||
|
|
395
|
-
value.identitySource !== '
|
|
395
|
+
value.identitySource !== 'worktree-task') {
|
|
396
396
|
return assessmentError('Development environment assessment has an unsupported schema, catalog, context, or identity version.');
|
|
397
397
|
}
|
|
398
398
|
if (!exports.ENVIRONMENT_ASSESSMENT_STATES.includes(value.state)) {
|
|
@@ -413,7 +413,7 @@ function validateDevelopmentEnvironmentAssessment(value) {
|
|
|
413
413
|
evaluatedProfiles: validateStringArray(value.evaluatedProfiles, 'Environment evaluatedProfiles'),
|
|
414
414
|
fingerprint: (0, contract_validation_js_1.requireBoundedString)(value.fingerprint, 'Environment fingerprint', { pattern: contract_validation_js_1.LOCAL_DEV_SHA256_PATTERN }),
|
|
415
415
|
frameworkVersion: (0, contract_validation_js_1.requireBoundedString)(value.frameworkVersion, 'Environment frameworkVersion', { maximumLength: 128 }),
|
|
416
|
-
identitySource: '
|
|
416
|
+
identitySource: 'worktree-task',
|
|
417
417
|
localContextDigest: (0, contract_validation_js_1.requireBoundedString)(value.localContextDigest, 'Environment localContextDigest', { pattern: contract_validation_js_1.LOCAL_DEV_SHA256_PATTERN }),
|
|
418
418
|
localContextSchemaVersion: local_context_js_1.LOCAL_DEV_CONTEXT_SCHEMA_VERSION,
|
|
419
419
|
personalStageResolverVersion: personal_stage_js_1.PERSONAL_STAGE_RESOLVER_VERSION,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const LOCAL_DEV_FAILURE_CLASSIFICATIONS: readonly ["invalid-input", "personal-identity-unavailable", "fleet-in-use", "fleet-ownership-ambiguous", "local-context-missing", "local-context-invalid", "local-context-conflict", "unknown-slice", "invalid-adapter", "slice-active-elsewhere", "slice-claim-ambiguous", "not-running", "invalid-state", "configuration-mismatch", "protocol-mismatch", "environment-deficient", "prerequisite-unavailable", "foundation-unavailable", "operation-conflict", "readiness-timeout", "cleanup-incomplete", "supervisor-unreachable", "stale-state", "stale-state-ambiguous", "log-query-invalid", "internal-error"];
|
|
1
|
+
export declare const LOCAL_DEV_FAILURE_CLASSIFICATIONS: readonly ["invalid-input", "personal-identity-unavailable", "fleet-in-use", "fleet-ownership-ambiguous", "local-context-missing", "local-context-invalid", "local-context-conflict", "unknown-slice", "invalid-adapter", "slice-active-elsewhere", "slice-claim-ambiguous", "not-running", "invalid-state", "configuration-mismatch", "protocol-mismatch", "environment-deficient", "prerequisite-unavailable", "foundation-unavailable", "operation-conflict", "readiness-timeout", "provisioning-timeout", "startup-interrupted", "cleanup-incomplete", "supervisor-unreachable", "stale-state", "stale-state-ambiguous", "log-query-invalid", "internal-error"];
|
|
2
2
|
export type LocalDevFailureClassification = (typeof LOCAL_DEV_FAILURE_CLASSIFICATIONS)[number];
|
|
3
3
|
export declare class LocalDevContractError extends Error {
|
|
4
4
|
readonly classification: LocalDevFailureClassification;
|
package/src/local-dev/errors.js
CHANGED
|
@@ -46,7 +46,7 @@ function validateOperation(value) {
|
|
|
46
46
|
? 'C:\\validation\\.git'
|
|
47
47
|
: '/validation/.git',
|
|
48
48
|
heartbeatAt: '1970-01-01T00:00:00.000Z',
|
|
49
|
-
identitySource: '
|
|
49
|
+
identitySource: 'worktree-task',
|
|
50
50
|
nxVersion: '23.1.0',
|
|
51
51
|
operations: [value],
|
|
52
52
|
origin: 'https://validation.ebk.localhost',
|
|
@@ -143,7 +143,7 @@ class FleetClient {
|
|
|
143
143
|
setTimeout(resolvePromise, pollMs);
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
|
-
throw new errors_js_1.LocalDevContractError('readiness-timeout', `Fleet operation ${operationId} did not finish within ${timeoutMs}ms.`);
|
|
146
|
+
throw new errors_js_1.LocalDevContractError('readiness-timeout', `Fleet operation ${operationId} did not finish within ${timeoutMs}ms. The supervised operation may still be running; check ebk dev status and ebk dev logs before retrying.`);
|
|
147
147
|
}
|
|
148
148
|
async shutdown(idempotencyKey = (0, node_crypto_1.randomUUID)()) {
|
|
149
149
|
await this.#request({
|
|
@@ -4,43 +4,75 @@ exports.fleetRouterSource = fleetRouterSource;
|
|
|
4
4
|
exports.fleetConfigurationFingerprint = fleetConfigurationFingerprint;
|
|
5
5
|
const contract_validation_js_1 = require("./contract-validation.js");
|
|
6
6
|
const deterministic_order_js_1 = require("../deterministic-order.js");
|
|
7
|
+
const create_task_graph_1 = require("nx/src/tasks-runner/create-task-graph");
|
|
8
|
+
const errors_js_1 = require("./errors.js");
|
|
7
9
|
function localTargetTopology(plan) {
|
|
10
|
+
if (plan.adapters.size === 0)
|
|
11
|
+
return [];
|
|
12
|
+
if (!plan.projectGraph) {
|
|
13
|
+
throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', 'Fleet topology requires the complete inferred Nx project graph. Reload the workspace graph before starting development.');
|
|
14
|
+
}
|
|
15
|
+
// Nx normalizes dependsOn objects in place. Never mutate the shared graph.
|
|
16
|
+
const graph = structuredClone(plan.projectGraph);
|
|
17
|
+
const topologyError = (message) => {
|
|
18
|
+
throw new errors_js_1.LocalDevContractError('invalid-adapter', `Fleet Nx target topology is invalid: ${message}`);
|
|
19
|
+
};
|
|
8
20
|
return [...plan.adapters]
|
|
9
21
|
.sort(([left], [right]) => (0, deterministic_order_js_1.compareUtf16)(left, right))
|
|
10
22
|
.map(([name, adapter]) => {
|
|
11
|
-
const project =
|
|
12
|
-
|
|
23
|
+
const project = graph.nodes[name];
|
|
24
|
+
if (!project)
|
|
25
|
+
return topologyError(`Project ${name} is missing.`);
|
|
13
26
|
const selected = new Set([adapter.target]);
|
|
14
|
-
if (adapter.adapterVersion
|
|
27
|
+
if (adapter.adapterVersion !== 1 && adapter.lifecycle) {
|
|
15
28
|
selected.add(adapter.lifecycle.cleanupTarget);
|
|
16
29
|
}
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const target = targets[targetName];
|
|
21
|
-
for (const dependency of target?.dependsOn ?? []) {
|
|
22
|
-
const dependencyName = typeof dependency === 'string'
|
|
23
|
-
? dependency
|
|
24
|
-
: dependency &&
|
|
25
|
-
typeof dependency === 'object' &&
|
|
26
|
-
!Array.isArray(dependency) &&
|
|
27
|
-
typeof dependency.target ===
|
|
28
|
-
'string'
|
|
29
|
-
? (dependency.target ?? '')
|
|
30
|
-
: '';
|
|
31
|
-
if (dependencyName && !selected.has(dependencyName)) {
|
|
32
|
-
selected.add(dependencyName);
|
|
33
|
-
pending.push(dependencyName);
|
|
34
|
-
}
|
|
30
|
+
for (const target of selected) {
|
|
31
|
+
if (!project.data.targets?.[target]) {
|
|
32
|
+
return topologyError(`Selected target ${name}:${target} is missing.`);
|
|
35
33
|
}
|
|
36
34
|
}
|
|
35
|
+
let tasks;
|
|
36
|
+
try {
|
|
37
|
+
tasks = (0, create_task_graph_1.createTaskGraph)(graph, {}, [name], [...selected].sort(deterministic_order_js_1.compareUtf16), undefined, {});
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return topologyError(error instanceof Error ? error.message : String(error));
|
|
41
|
+
}
|
|
37
42
|
return {
|
|
38
43
|
adapter,
|
|
39
44
|
name,
|
|
40
|
-
projectRoot: project
|
|
41
|
-
targets:
|
|
42
|
-
.sort()
|
|
43
|
-
.map((
|
|
45
|
+
projectRoot: project.data.root,
|
|
46
|
+
targets: Object.keys(tasks.tasks)
|
|
47
|
+
.sort(deterministic_order_js_1.compareUtf16)
|
|
48
|
+
.map((id) => {
|
|
49
|
+
const task = tasks.tasks[id];
|
|
50
|
+
const owner = graph.nodes[task.target.project];
|
|
51
|
+
const definition = plan.projectGraph?.nodes[task.target.project]?.data.targets?.[task.target.target];
|
|
52
|
+
if (!definition)
|
|
53
|
+
return topologyError(`Task ${id} is missing.`);
|
|
54
|
+
for (const edge of graph.dependencies[task.target.project] ?? []) {
|
|
55
|
+
if (!graph.nodes[edge.target] &&
|
|
56
|
+
!graph.externalNodes?.[edge.target]) {
|
|
57
|
+
return topologyError(`Project dependency ${edge.target} of ${id} is missing.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Only stable task coordinates and declarations belong in identity;
|
|
61
|
+
// native task objects also contain execution-time data and undefined
|
|
62
|
+
// configuration values. Optional coordinates have an explicit null.
|
|
63
|
+
return {
|
|
64
|
+
configuration: task.target.configuration ?? null,
|
|
65
|
+
continuousDependencies: [
|
|
66
|
+
...(tasks.continuousDependencies?.[id] ?? []),
|
|
67
|
+
].sort(deterministic_order_js_1.compareUtf16),
|
|
68
|
+
definition,
|
|
69
|
+
dependencies: [...(tasks.dependencies[id] ?? [])].sort(deterministic_order_js_1.compareUtf16),
|
|
70
|
+
id,
|
|
71
|
+
project: task.target.project,
|
|
72
|
+
projectRoot: owner.data.root,
|
|
73
|
+
target: task.target.target,
|
|
74
|
+
};
|
|
75
|
+
}),
|
|
44
76
|
};
|
|
45
77
|
});
|
|
46
78
|
}
|
|
@@ -129,14 +129,14 @@ async function inspectFleet(fleetId, options, effects, recoverRunnerCleanup = fa
|
|
|
129
129
|
state,
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
-
for (const
|
|
132
|
+
for (const name of (0, fleet_state_js_1.fleetOwnedSliceNames)(state)) {
|
|
133
133
|
let claim;
|
|
134
134
|
try {
|
|
135
|
-
claim = (0, slice_claim_js_1.inspectSliceClaim)(paths.sliceClaimsDirectory,
|
|
135
|
+
claim = (0, slice_claim_js_1.inspectSliceClaim)(paths.sliceClaimsDirectory, name, security);
|
|
136
136
|
}
|
|
137
137
|
catch {
|
|
138
138
|
return {
|
|
139
|
-
inventory: record(fleetId, 'ambiguous', `Slice claim ${
|
|
139
|
+
inventory: record(fleetId, 'ambiguous', `Slice claim ${name} is malformed; do not prune.`, state),
|
|
140
140
|
state,
|
|
141
141
|
};
|
|
142
142
|
}
|
|
@@ -145,9 +145,11 @@ async function inspectFleet(fleetId, options, effects, recoverRunnerCleanup = fa
|
|
|
145
145
|
claim.sessionGeneration !== state.sessionGeneration ||
|
|
146
146
|
claim.owner.pid !== state.supervisor.pid ||
|
|
147
147
|
claim.owner.processIdentity !== state.supervisor.processIdentity ||
|
|
148
|
-
claim.owner.startedAt !== state.supervisor.startedAt
|
|
148
|
+
claim.owner.startedAt !== state.supervisor.startedAt ||
|
|
149
|
+
(!state.slices.some((slice) => slice.name === name && slice.selected) &&
|
|
150
|
+
!(0, fleet_state_js_1.fleetOwnsStartingSlice)(state, name, claim.acquiredAt))) {
|
|
149
151
|
return {
|
|
150
|
-
inventory: record(fleetId, 'ambiguous', `Slice claim ${
|
|
152
|
+
inventory: record(fleetId, 'ambiguous', `Slice claim ${name} does not prove exact generation ownership.`, state),
|
|
151
153
|
state,
|
|
152
154
|
};
|
|
153
155
|
}
|
|
@@ -217,9 +219,10 @@ function claimInventoryRecord(claim, classification, nextAction) {
|
|
|
217
219
|
slice: claim.slice,
|
|
218
220
|
};
|
|
219
221
|
}
|
|
220
|
-
function ambiguousClaimEntry(slice, message) {
|
|
222
|
+
function ambiguousClaimEntry(slice, message, fleetId) {
|
|
221
223
|
return {
|
|
222
224
|
classification: 'ambiguous',
|
|
225
|
+
...(fleetId ? { fleetId } : {}),
|
|
223
226
|
nextAction: message,
|
|
224
227
|
slice: slice.slice(0, 128),
|
|
225
228
|
};
|
|
@@ -278,28 +281,54 @@ async function inventorySliceClaims(options, effects = {}) {
|
|
|
278
281
|
return inspected;
|
|
279
282
|
};
|
|
280
283
|
const results = [];
|
|
281
|
-
|
|
284
|
+
const claims = [];
|
|
285
|
+
for (const namespace of entries) {
|
|
286
|
+
if (!/^[a-z0-9][a-z0-9-]{0,62}$/.test(namespace.name) ||
|
|
287
|
+
!namespace.isDirectory() ||
|
|
288
|
+
namespace.isSymbolicLink()) {
|
|
289
|
+
results.push(ambiguousClaimEntry(namespace.name, 'Unsupported Slice-claim namespace; inspect manually and do not prune.', /^[a-z0-9][a-z0-9-]{0,62}$/.test(namespace.name)
|
|
290
|
+
? namespace.name
|
|
291
|
+
: undefined));
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
const claimDirectory = (0, runtime_paths_js_1.fleetRuntimePaths)(namespace.name, options.appData).sliceClaimsDirectory;
|
|
295
|
+
try {
|
|
296
|
+
(0, private_state_js_1.assertPrivatePath)(claimDirectory, 'directory', security);
|
|
297
|
+
for (const entry of (0, node_fs_1.readdirSync)(claimDirectory, {
|
|
298
|
+
withFileTypes: true,
|
|
299
|
+
}).sort((left, right) => (0, deterministic_order_js_1.compareUtf16)(left.name, right.name)))
|
|
300
|
+
claims.push({
|
|
301
|
+
entry,
|
|
302
|
+
directory: claimDirectory,
|
|
303
|
+
fleetId: namespace.name,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
results.push(ambiguousClaimEntry(namespace.name, 'Slice-claim namespace cannot be read safely; inspect manually and do not prune.', namespace.name));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
for (const { entry, directory: claimDirectory, fleetId } of claims) {
|
|
282
311
|
const match = SLICE_CLAIM_FILE_PATTERN.exec(entry.name);
|
|
283
312
|
if (!match || !entry.isFile() || entry.isSymbolicLink()) {
|
|
284
|
-
results.push(ambiguousClaimEntry(entry.name, 'Unsupported Slice-claim entry; inspect manually and do not prune.'));
|
|
313
|
+
results.push(ambiguousClaimEntry(entry.name, 'Unsupported Slice-claim entry; inspect manually and do not prune.', fleetId));
|
|
285
314
|
continue;
|
|
286
315
|
}
|
|
287
316
|
const slice = match[1];
|
|
288
317
|
let claim;
|
|
289
318
|
try {
|
|
290
|
-
const inspected = (0, slice_claim_js_1.inspectSliceClaim)(
|
|
319
|
+
const inspected = (0, slice_claim_js_1.inspectSliceClaim)(claimDirectory, slice, security);
|
|
291
320
|
if (!inspected) {
|
|
292
|
-
results.push(ambiguousClaimEntry(slice, 'Slice claim changed during inventory; inspect manually and do not prune.'));
|
|
321
|
+
results.push(ambiguousClaimEntry(slice, 'Slice claim changed during inventory; inspect manually and do not prune.', fleetId));
|
|
293
322
|
continue;
|
|
294
323
|
}
|
|
295
|
-
if (inspected.slice !== slice) {
|
|
296
|
-
results.push(ambiguousClaimEntry(slice, 'Slice-claim filename and record identity disagree; inspect manually and do not prune.'));
|
|
324
|
+
if (inspected.slice !== slice || inspected.fleetId !== fleetId) {
|
|
325
|
+
results.push(ambiguousClaimEntry(slice, 'Slice-claim namespace, filename and record identity disagree; inspect manually and do not prune.', fleetId));
|
|
297
326
|
continue;
|
|
298
327
|
}
|
|
299
328
|
claim = inspected;
|
|
300
329
|
}
|
|
301
330
|
catch {
|
|
302
|
-
results.push(ambiguousClaimEntry(slice, 'Slice claim is malformed or not current-user private; inspect manually and do not prune.'));
|
|
331
|
+
results.push(ambiguousClaimEntry(slice, 'Slice claim is malformed or not current-user private; inspect manually and do not prune.', fleetId));
|
|
303
332
|
continue;
|
|
304
333
|
}
|
|
305
334
|
const ownerPaths = (0, runtime_paths_js_1.fleetRuntimePaths)(claim.fleetId, options.appData);
|
|
@@ -326,8 +355,9 @@ async function inventorySliceClaims(options, effects = {}) {
|
|
|
326
355
|
claim.owner.pid !== state.supervisor.pid ||
|
|
327
356
|
claim.owner.processIdentity !== state.supervisor.processIdentity ||
|
|
328
357
|
claim.owner.startedAt !== state.supervisor.startedAt ||
|
|
329
|
-
!state.slices.some((candidate) => candidate.name === claim.slice && candidate.selected)
|
|
330
|
-
|
|
358
|
+
(!state.slices.some((candidate) => candidate.name === claim.slice && candidate.selected) &&
|
|
359
|
+
!(0, fleet_state_js_1.fleetOwnsStartingSlice)(state, claim.slice, claim.acquiredAt))) {
|
|
360
|
+
results.push(claimInventoryRecord(claim, 'ambiguous', 'Slice claim does not match selected or starting state owned by the exact Fleet generation; do not prune.'));
|
|
331
361
|
continue;
|
|
332
362
|
}
|
|
333
363
|
const processProof = inspected.inventory.classification === 'stale'
|
|
@@ -424,9 +454,7 @@ async function pruneStaleFleets(options, effects = {}) {
|
|
|
424
454
|
if (!lock || lock.sessionGeneration !== state.sessionGeneration) {
|
|
425
455
|
return inventoryError(`Fleet ${fleetId} changed during prune revalidation.`);
|
|
426
456
|
}
|
|
427
|
-
const selected = state
|
|
428
|
-
.filter(({ selected }) => selected)
|
|
429
|
-
.map(({ name }) => name);
|
|
457
|
+
const selected = (0, fleet_state_js_1.fleetOwnedSliceNames)(state);
|
|
430
458
|
const exactClaims = (await inventorySliceClaims(options, effects)).filter(({ fleetId: ownerFleetId }) => ownerFleetId === fleetId);
|
|
431
459
|
if (exactClaims.some(({ classification }) => classification !== 'stale') ||
|
|
432
460
|
selected.some((slice) => !exactClaims.some((claim) => claim.classification === 'stale' && claim.slice === slice))) {
|
|
@@ -25,4 +25,11 @@ export declare class FleetControlServer {
|
|
|
25
25
|
listen(): Promise<void>;
|
|
26
26
|
close(): Promise<void>;
|
|
27
27
|
}
|
|
28
|
+
/** Control request budget: the supervisor answers between synchronous
|
|
29
|
+
* identity captures, which are PowerShell queries on Windows (qualification
|
|
30
|
+
* run 34754338371 timed out at 5 s while the supervisor handled up). */
|
|
31
|
+
export declare const FLEET_CONTROL_REQUEST_TIMEOUT_MS: Readonly<{
|
|
32
|
+
default: 5000;
|
|
33
|
+
win32: 30000;
|
|
34
|
+
}>;
|
|
28
35
|
export declare function sendFleetControlRequest(path: string, request: FleetControlRequest, timeoutMs?: number): Promise<FleetControlResponse>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FleetControlServer = exports.FLEET_CONTROL_RESPONSE_MAX_BYTES = void 0;
|
|
3
|
+
exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS = exports.FleetControlServer = exports.FLEET_CONTROL_RESPONSE_MAX_BYTES = void 0;
|
|
4
4
|
exports.validateFleetControlResponse = validateFleetControlResponse;
|
|
5
5
|
exports.sendFleetControlRequest = sendFleetControlRequest;
|
|
6
6
|
const node_fs_1 = require("node:fs");
|
|
@@ -219,7 +219,19 @@ class FleetControlServer {
|
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
exports.FleetControlServer = FleetControlServer;
|
|
222
|
-
|
|
222
|
+
/** Control request budget: the supervisor answers between synchronous
|
|
223
|
+
* identity captures, which are PowerShell queries on Windows (qualification
|
|
224
|
+
* run 34754338371 timed out at 5 s while the supervisor handled up). */
|
|
225
|
+
exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS = Object.freeze({
|
|
226
|
+
default: 5_000,
|
|
227
|
+
win32: 30_000,
|
|
228
|
+
});
|
|
229
|
+
function controlRequestTimeout() {
|
|
230
|
+
return process.platform === 'win32'
|
|
231
|
+
? exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS.win32
|
|
232
|
+
: exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS.default;
|
|
233
|
+
}
|
|
234
|
+
async function sendFleetControlRequest(path, request, timeoutMs = controlRequestTimeout()) {
|
|
223
235
|
const payload = `${(0, contract_validation_js_1.canonicalJson)(request)}\n`;
|
|
224
236
|
if (Buffer.byteLength(payload) > control_contract_js_1.FLEET_CONTROL_REQUEST_MAX_BYTES) {
|
|
225
237
|
throw new errors_js_1.LocalDevContractError('invalid-input', 'Fleet control request exceeds its bounded size.');
|
|
@@ -50,4 +50,10 @@ export interface FleetLauncherDependencies {
|
|
|
50
50
|
export declare function resolveGitCommonDirectory(workspaceRoot: string): string;
|
|
51
51
|
export declare function prepareFleetLaunch(input: FleetLaunchInput, dependencies?: FleetLauncherDependencies): Promise<PreparedFleetLaunch>;
|
|
52
52
|
export declare function verifyAttachedState(prepared: PreparedFleetLaunch, client: Pick<FleetClient, 'status'>): Promise<void>;
|
|
53
|
+
/** Supervisor readiness budget: startup captures identities through
|
|
54
|
+
* PowerShell on Windows, several seconds each. */
|
|
55
|
+
export declare const SUPERVISOR_READINESS_TIMEOUT_MS: Readonly<{
|
|
56
|
+
default: 15000;
|
|
57
|
+
win32: 60000;
|
|
58
|
+
}>;
|
|
53
59
|
export declare function launchOrAttachFleet(input: FleetLaunchInput, dependencies?: FleetLauncherDependencies): Promise<FleetLaunchResult>;
|