@empire-builder-kit/nx 1.0.0-rc.38 → 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 +3 -1
- package/src/generators/slice/built-in-plan-shared.js +40 -18
- 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 +191 -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
package/src/cli/main.js
CHANGED
|
@@ -34,7 +34,10 @@ const secret_slice_claim_js_1 = require("../local-dev/secret-slice-claim.js");
|
|
|
34
34
|
const tls_js_1 = require("../local-dev/tls.js");
|
|
35
35
|
const personal_command_js_1 = require("../secrets/personal-command.js");
|
|
36
36
|
const index_js_1 = require("../workspace-deployment/index.js");
|
|
37
|
+
const task_attachment_js_1 = require("../local-dev/task-attachment.js");
|
|
38
|
+
const task_identity_js_1 = require("../local-dev/task-identity.js");
|
|
37
39
|
const dev_command_js_1 = require("./dev-command.js");
|
|
40
|
+
const deploy_runtime_js_1 = require("./deploy-runtime.js");
|
|
38
41
|
const agent_runtime_js_1 = require("./agent-runtime.js");
|
|
39
42
|
const output_js_1 = require("./output.js");
|
|
40
43
|
const personal_secret_runtime_js_1 = require("./personal-secret-runtime.js");
|
|
@@ -44,11 +47,32 @@ const ROOT_HELP = `Empire Builder Kit
|
|
|
44
47
|
Usage:
|
|
45
48
|
ebk agent <command> [options]
|
|
46
49
|
ebk blueprint verification-review
|
|
50
|
+
ebk deploy [stage] [slice...] [options]
|
|
47
51
|
ebk dev <command> [options]
|
|
48
52
|
ebk secret <command> <slice> <logical-name>
|
|
49
53
|
|
|
50
|
-
Run "ebk agent --help", "ebk blueprint --help", "ebk dev --help", or
|
|
54
|
+
Run "ebk agent --help", "ebk blueprint --help", "ebk deploy --help", "ebk dev --help", or
|
|
51
55
|
"ebk secret --help" for namespace help.`;
|
|
56
|
+
const DEPLOY_HELP = `Empire Builder Kit local deployment
|
|
57
|
+
|
|
58
|
+
Usage:
|
|
59
|
+
ebk deploy [development|staging|production] [slice...] --expectedRoleArn=<role-arn> [--profile=<aws-profile>]
|
|
60
|
+
|
|
61
|
+
The stage defaults to development; --stage=<stage> is also supported instead
|
|
62
|
+
of a positional stage. Account and Region come from committed repository policy.
|
|
63
|
+
Uses the workspace-pinned Nx deploy-local target: Foundation, then eligible
|
|
64
|
+
Slices, declared migrations and deployed smoke. Supply billing to deploy only
|
|
65
|
+
that Slice after Foundation; omit Slice names for the complete stage. Other
|
|
66
|
+
Slices are not redeployed and must already exist if the feature needs them.
|
|
67
|
+
Native output and terminal
|
|
68
|
+
interaction are inherited; --json and arbitrary Nx/SST options are not accepted.
|
|
69
|
+
The existing deployment receipt is the structured result, not a CLI success seal.
|
|
70
|
+
|
|
71
|
+
Development allows dirty source without a prompt. Local staging requires a
|
|
72
|
+
clean commit and its TTY acknowledgement. Starter production requires a clean
|
|
73
|
+
commit and the exact deploy:production:<account>:<region>:<source-commit> TTY
|
|
74
|
+
confirmation. Isolated protected stages remain GitHub-only. No authority or
|
|
75
|
+
confirmation is inferred from a hot task; ebk dev up remains the hot edit loop.`;
|
|
52
76
|
const AGENT_HELP = `Empire Builder Kit Developer-Agent contract
|
|
53
77
|
|
|
54
78
|
Usage:
|
|
@@ -76,6 +100,7 @@ Usage:
|
|
|
76
100
|
ebk dev configure [<context options>] [--clear-development-router-url] [--json]
|
|
77
101
|
ebk dev setup [--trust] [--portless] [--upgrade] [--remove] [--json]
|
|
78
102
|
ebk dev up <slice...>|--all [--foreground] [--sst-mode=mono|multiplexer]
|
|
103
|
+
ebk dev attach <task-id> [--json]
|
|
79
104
|
[--no-wait] [--timeout=<duration>] [<context options>] [--json]
|
|
80
105
|
ebk dev status [--json]
|
|
81
106
|
ebk dev restart <slice...>|--all [--no-wait] [--timeout=<duration>] [--json]
|
|
@@ -99,7 +124,8 @@ Configure mutation requires at least one context option or
|
|
|
99
124
|
non-router context changes.
|
|
100
125
|
|
|
101
126
|
Use "ebk dev <command> --help" to return this bounded command reference.
|
|
102
|
-
Fleet stage
|
|
127
|
+
Fleet stage uses a persisted random task ID per worktree. Use attach explicitly
|
|
128
|
+
to resume a verified inactive task; --stage overrides are not supported.`;
|
|
103
129
|
const SECRET_HELP = `Empire Builder Kit personal secrets
|
|
104
130
|
|
|
105
131
|
Usage:
|
|
@@ -143,13 +169,12 @@ function packageVersion() {
|
|
|
143
169
|
}
|
|
144
170
|
function workspaceRoot(cwd) {
|
|
145
171
|
try {
|
|
146
|
-
const
|
|
172
|
+
const git = (args) => (0, node_child_process_1.execFileSync)('git', [
|
|
147
173
|
'--no-optional-locks',
|
|
148
174
|
'-c',
|
|
149
175
|
'core.fsmonitor=false',
|
|
150
176
|
'rev-parse',
|
|
151
|
-
|
|
152
|
-
'--show-toplevel',
|
|
177
|
+
...args,
|
|
153
178
|
], {
|
|
154
179
|
cwd,
|
|
155
180
|
encoding: 'utf8',
|
|
@@ -158,9 +183,22 @@ function workspaceRoot(cwd) {
|
|
|
158
183
|
timeout: 5_000,
|
|
159
184
|
windowsHide: true,
|
|
160
185
|
}).trim();
|
|
161
|
-
|
|
186
|
+
const toplevel = git(['--path-format=absolute', '--show-toplevel']);
|
|
187
|
+
if (!(0, node_path_1.isAbsolute)(toplevel))
|
|
162
188
|
throw new Error('Git returned a relative path.');
|
|
163
|
-
|
|
189
|
+
// Spell the root the way this process's working directory spells it. Git
|
|
190
|
+
// canonicalizes Windows 8.3 aliases to long names while every in-process
|
|
191
|
+
// resolver, the fleet runtime and the retained task pointer use realpathSync,
|
|
192
|
+
// so a checkout under an aliased directory (a hosted runner's TEMP) would
|
|
193
|
+
// otherwise be seen under two spellings and refused as another checkout.
|
|
194
|
+
let root = (0, node_fs_1.realpathSync)(cwd);
|
|
195
|
+
for (const segment of git(['--show-prefix']).split('/')) {
|
|
196
|
+
if (segment)
|
|
197
|
+
root = (0, node_path_1.dirname)(root);
|
|
198
|
+
}
|
|
199
|
+
if (node_fs_1.realpathSync.native(root) !== node_fs_1.realpathSync.native(toplevel))
|
|
200
|
+
throw new Error('Git toplevel does not match the working directory.');
|
|
201
|
+
return root;
|
|
164
202
|
}
|
|
165
203
|
catch {
|
|
166
204
|
throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', 'Run ebk from a Git workspace with a readable repository root.');
|
|
@@ -168,6 +206,8 @@ function workspaceRoot(cwd) {
|
|
|
168
206
|
}
|
|
169
207
|
function defaultDependencies(overrides) {
|
|
170
208
|
return {
|
|
209
|
+
attachTask: task_attachment_js_1.attachStoppedTask,
|
|
210
|
+
bindTask: task_identity_js_1.bindTaskEnvironment,
|
|
171
211
|
acquireSecretLedgerLock: personal_secret_ledger_js_1.acquirePersonalSecretLedgerLock,
|
|
172
212
|
appData: tls_js_1.defaultLocalDevAppData,
|
|
173
213
|
assertSecretSliceClaim: secret_slice_claim_js_1.assertSecretSliceClaimAuthority,
|
|
@@ -176,6 +216,7 @@ function defaultDependencies(overrides) {
|
|
|
176
216
|
client: (paths) => new fleet_client_js_1.FleetClient(paths),
|
|
177
217
|
discoverContext: context_discovery_js_1.discoverLocalDevContext,
|
|
178
218
|
executeAgent: agent_runtime_js_1.executeDeveloperAgentCommand,
|
|
219
|
+
executeDeploy: deploy_runtime_js_1.executeDeployCommand,
|
|
179
220
|
followLogs: fleet_logs_js_1.followFleetLogs,
|
|
180
221
|
frameworkVersion: packageVersion,
|
|
181
222
|
gitCommonDirectory: fleet_launcher_js_1.resolveGitCommonDirectory,
|
|
@@ -226,7 +267,7 @@ function planWorkspaceName(plan) {
|
|
|
226
267
|
}
|
|
227
268
|
async function resolveCurrentFleetCoordinates(workspaceRoot, appData, dependencies) {
|
|
228
269
|
const plan = await dependencies.loadPlan();
|
|
229
|
-
const identity = dependencies.personalStageResolver.resolve();
|
|
270
|
+
const identity = dependencies.personalStageResolver.resolve(workspaceRoot);
|
|
230
271
|
const workspaceName = planWorkspaceName(plan);
|
|
231
272
|
const fleetId = (0, identity_js_1.createFleetId)({
|
|
232
273
|
checkoutPath: workspaceRoot,
|
|
@@ -242,7 +283,7 @@ async function resolveCurrentFleetCoordinates(workspaceRoot, appData, dependenci
|
|
|
242
283
|
};
|
|
243
284
|
}
|
|
244
285
|
async function resolveRecoveryFleetCoordinates(workspaceRoot, appData, dependencies, currentPlatform = process.platform) {
|
|
245
|
-
const identity = dependencies.personalStageResolver.resolve();
|
|
286
|
+
const identity = dependencies.personalStageResolver.resolve(workspaceRoot);
|
|
246
287
|
const inventory = await dependencies.inventory({ appData });
|
|
247
288
|
const matches = inventory.filter(({ checkout, stage }) => checkout !== undefined &&
|
|
248
289
|
sameWorkspaceRealpath(checkout, workspaceRoot, currentPlatform) &&
|
|
@@ -420,7 +461,7 @@ async function executeSecretCommand(command, dispatch) {
|
|
|
420
461
|
: 'Personal secret commands require saved local-development profile and Region context. Run ebk dev configure first.');
|
|
421
462
|
}
|
|
422
463
|
const context = saved.resolution.context;
|
|
423
|
-
const identity = dispatch.dependencies.personalStageResolver.resolve();
|
|
464
|
+
const identity = dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot);
|
|
424
465
|
const environmentAssessment = await dispatch.dependencies.inspectEnvironment({
|
|
425
466
|
appData: dispatch.appData,
|
|
426
467
|
command: 'secret',
|
|
@@ -466,6 +507,11 @@ async function executeSecretCommand(command, dispatch) {
|
|
|
466
507
|
if (ownership.region !== context.region) {
|
|
467
508
|
throw new Error('Personal secret Region differs from workspace owner.');
|
|
468
509
|
}
|
|
510
|
+
dispatch.dependencies.bindTask(dispatch.workspaceRoot, {
|
|
511
|
+
accountId,
|
|
512
|
+
region: ownership.region,
|
|
513
|
+
workspaceDeploymentId: ownership.expectedOwner.workspaceDeploymentId,
|
|
514
|
+
});
|
|
469
515
|
}
|
|
470
516
|
catch {
|
|
471
517
|
throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', 'The development AWS tuple is not owned by this workspace. Run the generated workspace ownership doctor before personal secret mutation.');
|
|
@@ -574,7 +620,7 @@ async function recordDiagnosticAssessment(command, dispatch) {
|
|
|
574
620
|
command,
|
|
575
621
|
context,
|
|
576
622
|
frameworkVersion: dispatch.dependencies.frameworkVersion(),
|
|
577
|
-
identity: dispatch.dependencies.personalStageResolver.resolve(),
|
|
623
|
+
identity: dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot),
|
|
578
624
|
workspaceRoot: dispatch.workspaceRoot,
|
|
579
625
|
});
|
|
580
626
|
}
|
|
@@ -760,7 +806,26 @@ async function executeDown(command, coordinates, dispatch) {
|
|
|
760
806
|
throw new errors_js_1.LocalDevContractError('unknown-slice', `Product Slice ${unknown} is absent from the live Fleet state.`);
|
|
761
807
|
}
|
|
762
808
|
}
|
|
763
|
-
|
|
809
|
+
let submission;
|
|
810
|
+
try {
|
|
811
|
+
submission = await client.submit('down', command.selector, dispatch.dependencies.idempotencyKey());
|
|
812
|
+
}
|
|
813
|
+
catch (error) {
|
|
814
|
+
if (!command.selector.all ||
|
|
815
|
+
!(error instanceof errors_js_1.LocalDevContractError) ||
|
|
816
|
+
error.classification !== 'not-running')
|
|
817
|
+
throw error;
|
|
818
|
+
// This remains an authenticated shutdown request. The supervisor checks
|
|
819
|
+
// in-flight work, active selections, and owned cleanup independently.
|
|
820
|
+
await client.shutdown(dispatch.dependencies.idempotencyKey());
|
|
821
|
+
return {
|
|
822
|
+
result: success(command.command, {
|
|
823
|
+
fleetId: coordinates.fleetId,
|
|
824
|
+
alreadyEmpty: true,
|
|
825
|
+
shutdown: 'accepted',
|
|
826
|
+
}),
|
|
827
|
+
};
|
|
828
|
+
}
|
|
764
829
|
if (command.noWait) {
|
|
765
830
|
return {
|
|
766
831
|
result: success(command.command, { fleetId: coordinates.fleetId, operation: submission }, submission.operationId),
|
|
@@ -885,12 +950,27 @@ async function executeDoctor(command, identity, dispatch) {
|
|
|
885
950
|
dispatch.dependencies.inventoryClaims({ appData: dispatch.appData }),
|
|
886
951
|
]);
|
|
887
952
|
const outcome = doctorOutcome(environment, local);
|
|
953
|
+
const diagnostics = [
|
|
954
|
+
...environment.checks
|
|
955
|
+
.filter(({ status }) => !['ready', 'unverified', 'not-required'].includes(status))
|
|
956
|
+
.map(({ id, status, remediation }) => `${id}=${status}${remediation ? `: ${remediation}` : ''}`),
|
|
957
|
+
...(local?.issues ?? []),
|
|
958
|
+
]
|
|
959
|
+
.slice(0, 8)
|
|
960
|
+
.map((message) => message.slice(0, 512));
|
|
888
961
|
const payload = {
|
|
889
962
|
context: contextPayload(saved),
|
|
890
963
|
environmentAssessment: environment,
|
|
891
964
|
fleetInventory,
|
|
892
965
|
...(local ? { localDevelopment: local } : {}),
|
|
893
966
|
sliceClaims,
|
|
967
|
+
...(outcome.outcome === 'failed'
|
|
968
|
+
? {
|
|
969
|
+
message: diagnostics.length > 0
|
|
970
|
+
? diagnostics.join(' ')
|
|
971
|
+
: 'Development readiness is incomplete. Run ebk dev doctor --refresh --json to inspect the exact prerequisite.',
|
|
972
|
+
}
|
|
973
|
+
: {}),
|
|
894
974
|
};
|
|
895
975
|
return {
|
|
896
976
|
result: outcome.outcome === 'succeeded'
|
|
@@ -996,6 +1076,26 @@ async function executeSetup(command, identity, dispatch) {
|
|
|
996
1076
|
};
|
|
997
1077
|
}
|
|
998
1078
|
async function dispatchDevCommand(command, dispatch) {
|
|
1079
|
+
if (command.command === 'attach') {
|
|
1080
|
+
const saved = dispatch.dependencies.readContext(dispatch.dependencies.gitCommonDirectory(dispatch.workspaceRoot));
|
|
1081
|
+
if (saved.kind !== 'ready')
|
|
1082
|
+
throw new errors_js_1.LocalDevContractError('local-context-missing', 'Task attachment requires saved AWS context. Run ebk dev configure first.');
|
|
1083
|
+
const plan = await dispatch.dependencies.loadPlan();
|
|
1084
|
+
const task = await dispatch.dependencies.attachTask({
|
|
1085
|
+
appData: dispatch.appData,
|
|
1086
|
+
context: saved.resolution.context,
|
|
1087
|
+
taskId: command.taskId,
|
|
1088
|
+
workspaceName: planWorkspaceName(plan),
|
|
1089
|
+
workspaceRoot: dispatch.workspaceRoot,
|
|
1090
|
+
});
|
|
1091
|
+
return {
|
|
1092
|
+
result: success('attach', {
|
|
1093
|
+
taskId: task.taskId,
|
|
1094
|
+
stage: `personal-${task.taskId}`,
|
|
1095
|
+
nextAction: 'ebk dev up <slice...>',
|
|
1096
|
+
}),
|
|
1097
|
+
};
|
|
1098
|
+
}
|
|
999
1099
|
if (command.command === 'ps') {
|
|
1000
1100
|
await recordDiagnosticAssessment('ps', dispatch);
|
|
1001
1101
|
const [fleets, sliceClaims] = await Promise.all([
|
|
@@ -1019,13 +1119,13 @@ async function dispatchDevCommand(command, dispatch) {
|
|
|
1019
1119
|
await recordDiagnosticAssessment(command.command, dispatch);
|
|
1020
1120
|
}
|
|
1021
1121
|
if (command.command === 'configure') {
|
|
1022
|
-
return executeConfigure(command, dispatch.dependencies.personalStageResolver.resolve(), dispatch);
|
|
1122
|
+
return executeConfigure(command, dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot), dispatch);
|
|
1023
1123
|
}
|
|
1024
1124
|
if (command.command === 'setup') {
|
|
1025
|
-
return executeSetup(command, dispatch.dependencies.personalStageResolver.resolve(), dispatch);
|
|
1125
|
+
return executeSetup(command, dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot), dispatch);
|
|
1026
1126
|
}
|
|
1027
1127
|
if (command.command === 'doctor') {
|
|
1028
|
-
return executeDoctor(command, dispatch.dependencies.personalStageResolver.resolve(), dispatch);
|
|
1128
|
+
return executeDoctor(command, dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot), dispatch);
|
|
1029
1129
|
}
|
|
1030
1130
|
if (command.command === 'up' || command.command === 'restart') {
|
|
1031
1131
|
const coordinates = await resolveCurrentFleetCoordinates(dispatch.workspaceRoot, dispatch.appData, dispatch.dependencies);
|
|
@@ -1063,12 +1163,15 @@ function commandJson(command) {
|
|
|
1063
1163
|
}
|
|
1064
1164
|
function commandName(command) {
|
|
1065
1165
|
return command?.kind === 'agent' ||
|
|
1166
|
+
command?.kind === 'deploy' ||
|
|
1066
1167
|
command?.kind === 'dev' ||
|
|
1067
1168
|
command?.kind === 'secret'
|
|
1068
1169
|
? command.command
|
|
1069
1170
|
: 'parse';
|
|
1070
1171
|
}
|
|
1071
1172
|
function commandNamespace(command, arguments_) {
|
|
1173
|
+
if (command?.kind === 'deploy' || arguments_[0] === 'deploy')
|
|
1174
|
+
return 'deploy';
|
|
1072
1175
|
if (command?.kind === 'agent' || arguments_[0] === 'agent')
|
|
1073
1176
|
return 'agent';
|
|
1074
1177
|
return command?.kind === 'secret' || arguments_[0] === 'secret'
|
|
@@ -1155,11 +1258,13 @@ async function runEbkCli(arguments_, io = {}, overrides = {}) {
|
|
|
1155
1258
|
if (parsed.kind === 'help') {
|
|
1156
1259
|
output.stdout(`${parsed.namespace === 'agent'
|
|
1157
1260
|
? AGENT_HELP
|
|
1158
|
-
: parsed.namespace === '
|
|
1159
|
-
?
|
|
1160
|
-
: parsed.namespace === '
|
|
1161
|
-
?
|
|
1162
|
-
:
|
|
1261
|
+
: parsed.namespace === 'deploy'
|
|
1262
|
+
? DEPLOY_HELP
|
|
1263
|
+
: parsed.namespace === 'dev'
|
|
1264
|
+
? DEV_HELP
|
|
1265
|
+
: parsed.namespace === 'secret'
|
|
1266
|
+
? SECRET_HELP
|
|
1267
|
+
: ROOT_HELP}\n`);
|
|
1163
1268
|
return 0;
|
|
1164
1269
|
}
|
|
1165
1270
|
if (parsed.kind === 'version') {
|
|
@@ -1174,6 +1279,9 @@ async function runEbkCli(arguments_, io = {}, overrides = {}) {
|
|
|
1174
1279
|
}
|
|
1175
1280
|
const dependencies = defaultDependencies(overrides);
|
|
1176
1281
|
const root = dependencies.resolveWorkspaceRoot(io.cwd ?? process.cwd());
|
|
1282
|
+
if (parsed.kind === 'deploy') {
|
|
1283
|
+
return await dependencies.executeDeploy(parsed, root, io.environment ?? process.env);
|
|
1284
|
+
}
|
|
1177
1285
|
dependencies.changeDirectory(root);
|
|
1178
1286
|
if (!io.abortSignal)
|
|
1179
1287
|
ownedSignal = processAbortSignal();
|
package/src/cli/output.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export type CliFailureClassification = DeveloperAgentFailureClassification | Loc
|
|
|
9
9
|
export interface CliResultEnvelope<TPayload = unknown> {
|
|
10
10
|
command: string;
|
|
11
11
|
failureClassification?: CliFailureClassification;
|
|
12
|
-
namespace: 'agent' | 'dev' | 'secret';
|
|
12
|
+
namespace: 'agent' | 'deploy' | 'dev' | 'secret';
|
|
13
13
|
operationId?: string;
|
|
14
14
|
outcome: CliResultOutcome;
|
|
15
15
|
payload?: TPayload;
|
|
@@ -213,6 +213,13 @@ function gitContext(inspection) {
|
|
|
213
213
|
}
|
|
214
214
|
function gitWarnings(inspection) {
|
|
215
215
|
const warnings = [];
|
|
216
|
+
if (inspection.worktree.commit === null ||
|
|
217
|
+
inspection.defaultBase?.commit === null) {
|
|
218
|
+
warnings.push({
|
|
219
|
+
classification: 'stale-base',
|
|
220
|
+
sanitizedSummary: 'Local source is available, but commit-bound planning, handoff, and protected authority require real Git commits and protected refs. No commit or remote ref was created by orientation.',
|
|
221
|
+
});
|
|
222
|
+
}
|
|
216
223
|
if (inspection.worktree.dirtyPaths.length > 0) {
|
|
217
224
|
warnings.push({
|
|
218
225
|
classification: 'dirty-worktree',
|
|
@@ -335,6 +342,8 @@ async function inspectDeveloperAgentContext(cwd, query = {}, dependencyOverrides
|
|
|
335
342
|
const workspaceRoot = (0, node_fs_1.realpathSync)(cwd);
|
|
336
343
|
const nxConfiguration = workspaceNxExecutionConfiguration(workspaceRoot);
|
|
337
344
|
const gitOptions = {
|
|
345
|
+
allowMissingDefaultBase: true,
|
|
346
|
+
allowUnborn: true,
|
|
338
347
|
...(query.base ? { base: query.base } : {}),
|
|
339
348
|
cwd: workspaceRoot,
|
|
340
349
|
defaultBase: nxConfiguration.defaultBaseRef,
|
|
@@ -355,11 +364,21 @@ async function inspectDeveloperAgentContext(cwd, query = {}, dependencyOverrides
|
|
|
355
364
|
try {
|
|
356
365
|
const currentExternalRoots = (0, blueprint_verification_authority_js_1.externalBlueprintOwnershipRoots)(workspaceRoot);
|
|
357
366
|
(0, blueprint_verification_authority_js_1.assertDeveloperAgentNxProjectConfinement)(workspaceRoot);
|
|
367
|
+
// Orientation can describe an unborn worktree, but it cannot establish
|
|
368
|
+
// protected history. Keep package target authority strict; this is not an
|
|
369
|
+
// alternate path to a protected review or execution receipt.
|
|
358
370
|
externalOwnershipHistory =
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
371
|
+
gitInspection.worktree.commit === null
|
|
372
|
+
? {
|
|
373
|
+
complete: false,
|
|
374
|
+
externalProjectNames: [],
|
|
375
|
+
externalSliceRoots: [],
|
|
376
|
+
requiresStrictNxAuthority: true,
|
|
377
|
+
}
|
|
378
|
+
: (0, blueprint_trust_git_js_1.inspectProtectedWorkspaceExternalBlueprintHistory)({
|
|
379
|
+
builtInName: resolver_js_1.BUILTIN_BLUEPRINT_NAME,
|
|
380
|
+
workspaceRoot,
|
|
381
|
+
});
|
|
363
382
|
if (currentExternalRoots.length > 0 ||
|
|
364
383
|
externalOwnershipHistory.requiresStrictNxAuthority) {
|
|
365
384
|
(0, blueprint_verification_authority_js_1.assertNoMutableBlueprintVerificationConfiguration)(workspaceRoot);
|
|
@@ -443,7 +462,7 @@ function formatDeveloperAgentContext(context) {
|
|
|
443
462
|
].sort(ordering_js_1.compareDeveloperAgentStrings);
|
|
444
463
|
const lines = [
|
|
445
464
|
`Workspace: ${context.workspace.identity} (${context.workspace.frameworkVersion})`,
|
|
446
|
-
`Git: ${branch} @ ${context.git.commit
|
|
465
|
+
`Git: ${branch} @ ${context.git.commit?.slice(0, 12) ?? '(uncommitted)'}${context.git.dirty ? ' (dirty)' : ''}`,
|
|
447
466
|
`Selection: ${selection}`,
|
|
448
467
|
`Nx graph projects: ${context.projectNames.length}`,
|
|
449
468
|
`Policy stage: ${context.policy.canonicalStage}`,
|
|
@@ -458,6 +477,15 @@ function formatDeveloperAgentContext(context) {
|
|
|
458
477
|
: ''}`,
|
|
459
478
|
];
|
|
460
479
|
const details = [
|
|
480
|
+
...context.supportedOperations
|
|
481
|
+
.filter((operation) => operation.command &&
|
|
482
|
+
(operation.id.startsWith('ebk-dev:') ||
|
|
483
|
+
operation.id.endsWith(':verify-local-browser') ||
|
|
484
|
+
operation.id.endsWith(':dev')))
|
|
485
|
+
.map((operation) => ({
|
|
486
|
+
kind: 'operation',
|
|
487
|
+
line: `- [operation] ${operation.id}: ${operation.command.executable} ${operation.command.args.map((argument) => (/^[A-Za-z0-9_./:@=-]+$/.test(argument) ? argument : JSON.stringify(argument))).join(' ')}`,
|
|
488
|
+
})),
|
|
461
489
|
...context.warnings.map((finding) => ({
|
|
462
490
|
kind: 'warning',
|
|
463
491
|
line: `- [${finding.classification}] ${finding.sanitizedSummary}`,
|
|
@@ -469,8 +497,9 @@ function formatDeveloperAgentContext(context) {
|
|
|
469
497
|
];
|
|
470
498
|
let omittedWarnings = 0;
|
|
471
499
|
let omittedNonPlannable = 0;
|
|
500
|
+
let omittedOperations = 0;
|
|
472
501
|
const route = 'Full structured context: ebk agent context --json';
|
|
473
|
-
const maximumOmission = `Omitted detail: ${context.warnings.length} warning(s), ${context.nonPlannableTargets.length} non-plannable target(s).`;
|
|
502
|
+
const maximumOmission = `Omitted detail: ${context.warnings.length} warning(s), ${context.nonPlannableTargets.length} non-plannable target(s), ${context.supportedOperations.length} operation(s).`;
|
|
474
503
|
for (const detail of details) {
|
|
475
504
|
const candidate = [...lines, detail.line, maximumOmission, route].join('\n');
|
|
476
505
|
if (Buffer.byteLength(candidate, 'utf8') <=
|
|
@@ -480,12 +509,15 @@ function formatDeveloperAgentContext(context) {
|
|
|
480
509
|
else if (detail.kind === 'warning') {
|
|
481
510
|
omittedWarnings += 1;
|
|
482
511
|
}
|
|
483
|
-
else {
|
|
512
|
+
else if (detail.kind === 'non-plannable') {
|
|
484
513
|
omittedNonPlannable += 1;
|
|
485
514
|
}
|
|
515
|
+
else {
|
|
516
|
+
omittedOperations += 1;
|
|
517
|
+
}
|
|
486
518
|
}
|
|
487
|
-
if (omittedWarnings > 0 || omittedNonPlannable > 0) {
|
|
488
|
-
lines.push(`Omitted detail: ${omittedWarnings} warning(s), ${omittedNonPlannable} non-plannable target(s).`);
|
|
519
|
+
if (omittedWarnings > 0 || omittedNonPlannable > 0 || omittedOperations > 0) {
|
|
520
|
+
lines.push(`Omitted detail: ${omittedWarnings} warning(s), ${omittedNonPlannable} non-plannable target(s), ${omittedOperations} operation(s).`);
|
|
489
521
|
}
|
|
490
522
|
lines.push(route);
|
|
491
523
|
const output = lines.join('\n');
|
|
@@ -185,7 +185,9 @@ function generatorContextSelection(input) {
|
|
|
185
185
|
input.generator === 'job') {
|
|
186
186
|
return {
|
|
187
187
|
selectedFeature: input.feature,
|
|
188
|
-
selectedProjects:
|
|
188
|
+
selectedProjects: input.generator === 'function'
|
|
189
|
+
? [input.slice]
|
|
190
|
+
: [input.slice, 'foundation'].sort(),
|
|
189
191
|
selectedSlice: input.slice,
|
|
190
192
|
};
|
|
191
193
|
}
|
|
@@ -425,6 +427,7 @@ function workloadPlan(context, input, mode, rebindCompleted = false) {
|
|
|
425
427
|
const generatedSurfaces = sortedSurfaces([
|
|
426
428
|
...prefixedSurfaces(input.slice, plan.paths),
|
|
427
429
|
...prefixedSurfaces(input.slice, [
|
|
430
|
+
{ path: 'infra/foundation.ts' },
|
|
428
431
|
{ path: 'infra/product.ts' },
|
|
429
432
|
{ path: 'infra/native-runtime-authority/effective-intent.ts' },
|
|
430
433
|
{ path: 'infra/native-runtime-authority/topology.ts' },
|
|
@@ -447,6 +450,16 @@ function workloadPlan(context, input, mode, rebindCompleted = false) {
|
|
|
447
450
|
{ mode: 'seeded', path: RELEASE_REGISTRY_PATH },
|
|
448
451
|
{ path: PRODUCT_OWNERSHIP_PATH },
|
|
449
452
|
]),
|
|
453
|
+
// The workload generator grows network/container-compute capabilities in
|
|
454
|
+
// the same source operation. These are its paired Foundation surfaces,
|
|
455
|
+
// even when an existing container makes the capability update a no-op.
|
|
456
|
+
...prefixedSurfaces('foundation', [
|
|
457
|
+
{ path: PRODUCT_OWNERSHIP_PATH },
|
|
458
|
+
{ path: 'contracts/costs.json' },
|
|
459
|
+
{ path: 'contracts/foundation.json' },
|
|
460
|
+
{ path: 'infra/foundation.ts' },
|
|
461
|
+
{ path: 'scripts/verify-foundation.mjs' },
|
|
462
|
+
]),
|
|
450
463
|
surface('pnpm-lock.yaml', 'adopter-owned'),
|
|
451
464
|
]);
|
|
452
465
|
const prospectiveVerification = mode === 'apply' ? [`${plan.project}:verify`] : [];
|
|
@@ -469,11 +482,12 @@ function workloadPlan(context, input, mode, rebindCompleted = false) {
|
|
|
469
482
|
'supply-chain',
|
|
470
483
|
], context.selection.contracts),
|
|
471
484
|
generatedSurfaces,
|
|
472
|
-
projects: [input.slice, plan.project].sort(),
|
|
485
|
+
projects: [input.slice, plan.project, 'foundation'].sort(),
|
|
473
486
|
prospectiveVerification,
|
|
474
487
|
verification: [
|
|
475
488
|
...new Set([
|
|
476
489
|
`${input.slice}:verify`,
|
|
490
|
+
'foundation:verify',
|
|
477
491
|
...prospectiveVerification,
|
|
478
492
|
developerAgentWorkspaceVerificationTarget(context),
|
|
479
493
|
]),
|
|
@@ -26,6 +26,10 @@ export interface GitInspectionCommandResult {
|
|
|
26
26
|
}
|
|
27
27
|
export type GitInspectionExecFile = (executable: string, args: readonly string[], options: GitInspectionExecFileOptions) => GitInspectionCommandResult | Promise<GitInspectionCommandResult>;
|
|
28
28
|
export interface InspectDeveloperAgentGitOptions {
|
|
29
|
+
/** Orientation only; strict commit-bound callers leave this disabled. */
|
|
30
|
+
allowUnborn?: boolean;
|
|
31
|
+
/** Only an absent fully qualified implicit ref may have a null binding. */
|
|
32
|
+
allowMissingDefaultBase?: boolean;
|
|
29
33
|
/**
|
|
30
34
|
* Base and head are accepted only as a pair. They must be literal safe refs
|
|
31
35
|
* or full object IDs, never arbitrary revision expressions.
|
|
@@ -44,7 +48,7 @@ export interface DeveloperAgentGitUpstream {
|
|
|
44
48
|
}
|
|
45
49
|
export interface DeveloperAgentLinkedWorktree {
|
|
46
50
|
branch: string | null;
|
|
47
|
-
commit: string;
|
|
51
|
+
commit: string | null;
|
|
48
52
|
detached: boolean;
|
|
49
53
|
dirtyPaths: readonly string[];
|
|
50
54
|
locked: boolean;
|
|
@@ -84,7 +88,7 @@ export interface DeveloperAgentGitInspection {
|
|
|
84
88
|
concurrentChangeInspectionComplete: boolean;
|
|
85
89
|
concurrentChanges: readonly DeveloperAgentConcurrentPathChange[];
|
|
86
90
|
defaultBase?: {
|
|
87
|
-
commit: string;
|
|
91
|
+
commit: string | null;
|
|
88
92
|
ref: string;
|
|
89
93
|
};
|
|
90
94
|
kind: 'developer-agent-git-inspection';
|
|
@@ -126,6 +126,18 @@ function assertDeveloperAgentReadOnlyGitInvocation(args) {
|
|
|
126
126
|
'--short',
|
|
127
127
|
'HEAD',
|
|
128
128
|
]) ||
|
|
129
|
+
(args.length === 5 &&
|
|
130
|
+
args[1] === 'symbolic-ref' &&
|
|
131
|
+
args[2] === '--quiet' &&
|
|
132
|
+
args[3] === '--no-recurse' &&
|
|
133
|
+
(args[4] === 'HEAD' ||
|
|
134
|
+
(args[4]?.startsWith('refs/') === true && safeRef(args[4])))) ||
|
|
135
|
+
(args.length === 5 &&
|
|
136
|
+
args[1] === 'show-ref' &&
|
|
137
|
+
args[2] === '--verify' &&
|
|
138
|
+
args[3] === '--quiet' &&
|
|
139
|
+
args[4]?.startsWith('refs/') === true &&
|
|
140
|
+
safeRef(args[4])) ||
|
|
129
141
|
sameArgs(args, [
|
|
130
142
|
NO_OPTIONAL_LOCKS,
|
|
131
143
|
...DISABLE_FS_MONITOR,
|
|
@@ -499,6 +511,41 @@ async function resolveCommit(git, ref, cwd) {
|
|
|
499
511
|
], { cwd });
|
|
500
512
|
return requireCommit(result.stdout, `Git ref ${ref}`);
|
|
501
513
|
}
|
|
514
|
+
async function exactRefExists(git, ref, cwd) {
|
|
515
|
+
const result = await git.run([NO_OPTIONAL_LOCKS, 'show-ref', '--verify', '--quiet', ref], {
|
|
516
|
+
allowedExitCodes: [0, 1],
|
|
517
|
+
cwd,
|
|
518
|
+
});
|
|
519
|
+
if (result.stdout !== '' || result.stderr !== '') {
|
|
520
|
+
return fail('git-output-invalid', 'Git ref existence returned unexpected output.');
|
|
521
|
+
}
|
|
522
|
+
if (result.exitCode === 0)
|
|
523
|
+
return true;
|
|
524
|
+
// show-ref also reports a dangling symbolic ref as absent. Check the ref
|
|
525
|
+
// itself without following it before admitting absence. Corrupt object refs
|
|
526
|
+
// fail show-ref above; symbolic refs remain present and must resolve normally.
|
|
527
|
+
const symbolic = await git.run([NO_OPTIONAL_LOCKS, 'symbolic-ref', '--quiet', '--no-recurse', ref], { allowedExitCodes: [0, 1], cwd });
|
|
528
|
+
if (symbolic.stderr !== '' ||
|
|
529
|
+
(symbolic.exitCode === 1 && symbolic.stdout !== '')) {
|
|
530
|
+
return fail('git-output-invalid', 'Git symbolic ref existence returned unexpected output.');
|
|
531
|
+
}
|
|
532
|
+
if (symbolic.exitCode === 0) {
|
|
533
|
+
const target = singleSafeLine(symbolic.stdout, 'Git symbolic ref target');
|
|
534
|
+
if (!target.startsWith('refs/') || !safeRef(target)) {
|
|
535
|
+
return fail('git-output-invalid', 'Git symbolic ref target is invalid.');
|
|
536
|
+
}
|
|
537
|
+
return true;
|
|
538
|
+
}
|
|
539
|
+
return false;
|
|
540
|
+
}
|
|
541
|
+
async function resolveDefaultBase(git, ref, cwd, allowMissing) {
|
|
542
|
+
if (allowMissing &&
|
|
543
|
+
ref.startsWith('refs/') &&
|
|
544
|
+
!(await exactRefExists(git, ref, cwd))) {
|
|
545
|
+
return null;
|
|
546
|
+
}
|
|
547
|
+
return resolveCommit(git, ref, cwd);
|
|
548
|
+
}
|
|
502
549
|
async function resolveDirectory(git, kind, cwd) {
|
|
503
550
|
const result = await git.run([NO_OPTIONAL_LOCKS, 'rev-parse', '--path-format=absolute', kind], { cwd });
|
|
504
551
|
return requireAbsoluteDirectoryOutput(result.stdout, kind === '--show-toplevel' ? 'Git worktree root' : 'Git common directory', kind === '--show-toplevel'
|
|
@@ -521,16 +568,32 @@ async function resolveBranch(git, cwd) {
|
|
|
521
568
|
}
|
|
522
569
|
return { branch, detached: false };
|
|
523
570
|
}
|
|
524
|
-
async function verifyWorktree(git, commonDirectory, worktree, budget) {
|
|
571
|
+
async function verifyWorktree(git, commonDirectory, worktree, budget, allowUnborn) {
|
|
525
572
|
const discoveredRoot = await resolveDirectory(git, '--show-toplevel', worktree.realRoot);
|
|
526
573
|
const discoveredCommon = await resolveDirectory(git, '--git-common-dir', worktree.realRoot);
|
|
527
574
|
if (discoveredRoot !== worktree.realRoot ||
|
|
528
575
|
discoveredCommon !== commonDirectory) {
|
|
529
576
|
return fail('git-worktree-ambiguous', 'Linked worktree identity does not match the inspected repository.');
|
|
530
577
|
}
|
|
531
|
-
|
|
578
|
+
let commit;
|
|
579
|
+
if (allowUnborn && /^0{40}(?:0{24})?$/.test(worktree.head)) {
|
|
580
|
+
if (!worktree.branchRef || worktree.detached) {
|
|
581
|
+
return fail('git-output-invalid', 'Unborn worktree must have one symbolic local branch.');
|
|
582
|
+
}
|
|
583
|
+
const symbolic = await git.run([NO_OPTIONAL_LOCKS, 'symbolic-ref', '--quiet', '--no-recurse', 'HEAD'], { cwd: worktree.realRoot });
|
|
584
|
+
if (symbolic.stderr !== '' ||
|
|
585
|
+
singleSafeLine(symbolic.stdout, 'Unborn HEAD branch') !==
|
|
586
|
+
worktree.branchRef ||
|
|
587
|
+
(await exactRefExists(git, worktree.branchRef, worktree.realRoot))) {
|
|
588
|
+
return fail('git-worktree-ambiguous', 'Unborn HEAD does not match an absent exact local branch.');
|
|
589
|
+
}
|
|
590
|
+
commit = null;
|
|
591
|
+
}
|
|
592
|
+
else {
|
|
593
|
+
commit = await resolveCommit(git, 'HEAD', worktree.realRoot);
|
|
594
|
+
}
|
|
532
595
|
const branchState = await resolveBranch(git, worktree.realRoot);
|
|
533
|
-
if (commit !== worktree.head ||
|
|
596
|
+
if ((commit !== null && commit !== worktree.head) ||
|
|
534
597
|
branchState.branch !== worktree.branch ||
|
|
535
598
|
branchState.detached !== worktree.detached) {
|
|
536
599
|
return fail('git-worktree-ambiguous', 'Linked worktree state changed during inspection.');
|
|
@@ -555,7 +618,7 @@ async function verifyWorktree(git, commonDirectory, worktree, budget) {
|
|
|
555
618
|
};
|
|
556
619
|
}
|
|
557
620
|
async function inspectUpstream(git, current) {
|
|
558
|
-
if (!current.branch)
|
|
621
|
+
if (!current.branch || current.commit === null)
|
|
559
622
|
return undefined;
|
|
560
623
|
const upstreamResult = await git.run([
|
|
561
624
|
NO_OPTIONAL_LOCKS,
|
|
@@ -662,6 +725,10 @@ async function inspectConcurrentChanges(git, current, worktrees, budget) {
|
|
|
662
725
|
continue;
|
|
663
726
|
for (const path of worktree.dirtyPaths)
|
|
664
727
|
record(path, worktree.root, 'dirty');
|
|
728
|
+
if (worktree.commit === null || current.commit === null) {
|
|
729
|
+
complete = false;
|
|
730
|
+
continue;
|
|
731
|
+
}
|
|
665
732
|
if (worktree.commit === current.commit)
|
|
666
733
|
continue;
|
|
667
734
|
const mergeBase = await git.run([
|
|
@@ -723,6 +790,11 @@ function validateInput(options) {
|
|
|
723
790
|
if ((options.base === undefined) !== (options.head === undefined)) {
|
|
724
791
|
return fail('invalid-input', 'Git comparison requires both explicit base and head refs.');
|
|
725
792
|
}
|
|
793
|
+
for (const value of [options.allowUnborn, options.allowMissingDefaultBase]) {
|
|
794
|
+
if (value !== undefined && typeof value !== 'boolean') {
|
|
795
|
+
return fail('invalid-input', 'Git orientation allowances must be explicit booleans.');
|
|
796
|
+
}
|
|
797
|
+
}
|
|
726
798
|
if (options.base !== undefined && options.head !== undefined) {
|
|
727
799
|
return {
|
|
728
800
|
base: requireSafeRef(options.base, 'Git comparison base'),
|
|
@@ -754,7 +826,7 @@ async function inspectDeveloperAgentGit(options) {
|
|
|
754
826
|
const budget = { count: 0 };
|
|
755
827
|
const linkedWorktrees = [];
|
|
756
828
|
for (const worktree of prepared) {
|
|
757
|
-
linkedWorktrees.push(await verifyWorktree(git, commonDirectory, worktree, budget));
|
|
829
|
+
linkedWorktrees.push(await verifyWorktree(git, commonDirectory, worktree, budget, options.allowUnborn === true));
|
|
758
830
|
}
|
|
759
831
|
const current = linkedWorktrees.find(({ root }) => root === currentRoot);
|
|
760
832
|
if (!current) {
|
|
@@ -763,7 +835,7 @@ async function inspectDeveloperAgentGit(options) {
|
|
|
763
835
|
const upstream = await inspectUpstream(git, current);
|
|
764
836
|
const defaultBase = comparisonInput.defaultBase !== undefined
|
|
765
837
|
? {
|
|
766
|
-
commit: await
|
|
838
|
+
commit: await resolveDefaultBase(git, comparisonInput.defaultBase, currentRoot, options.allowMissingDefaultBase === true),
|
|
767
839
|
ref: comparisonInput.defaultBase,
|
|
768
840
|
}
|
|
769
841
|
: undefined;
|
|
@@ -159,10 +159,12 @@ export interface DeveloperAgentGitContext {
|
|
|
159
159
|
baseCommit?: string;
|
|
160
160
|
behind: number;
|
|
161
161
|
branch?: string;
|
|
162
|
-
|
|
162
|
+
/** Null means a verified unborn symbolic branch, never a placeholder SHA. */
|
|
163
|
+
commit: string | null;
|
|
163
164
|
concurrentChangeInspectionComplete: boolean;
|
|
164
165
|
concurrentChanges: readonly DeveloperAgentConcurrentChangeContext[];
|
|
165
|
-
|
|
166
|
+
/** An implicit base may be absent during local first-use orientation. */
|
|
167
|
+
defaultBaseCommit: string | null;
|
|
166
168
|
defaultBaseRef: string;
|
|
167
169
|
dirty: boolean;
|
|
168
170
|
headCommit?: string;
|