@treeseed/sdk 0.10.28 → 0.12.4
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 +213 -7
- package/dist/agent-capacity.d.ts +916 -0
- package/dist/agent-capacity.js +1600 -0
- package/dist/agent-tools.d.ts +37 -0
- package/dist/agent-tools.js +301 -0
- package/dist/api/app.d.ts +1 -1
- package/dist/api/auth/d1-database.d.ts +2 -2
- package/dist/api/auth/d1-provider.d.ts +4 -4
- package/dist/api/auth/d1-store.d.ts +2 -2
- package/dist/api/auth/memory-provider.d.ts +1 -1
- package/dist/api/auth/tokens.d.ts +1 -1
- package/dist/api/config.d.ts +3 -1
- package/dist/api/config.js +34 -10
- package/dist/api/http.d.ts +2 -2
- package/dist/api/index.d.ts +10 -10
- package/dist/api/index.js +4 -2
- package/dist/api/operations-routes.d.ts +3 -3
- package/dist/api/operations.d.ts +1 -1
- package/dist/api/providers.d.ts +1 -1
- package/dist/api/providers.js +21 -4
- package/dist/api/railway.d.ts +3 -2
- package/dist/api/sdk-dispatch.d.ts +4 -4
- package/dist/api/sdk-routes.d.ts +2 -2
- package/dist/api/templates.d.ts +2 -2
- package/dist/api/types.d.ts +3 -2
- package/dist/capacity-provider.d.ts +118 -59
- package/dist/capacity-provider.js +235 -43
- package/dist/capacity.d.ts +2 -2
- package/dist/cli-tools.d.ts +1 -1
- package/dist/content-operations.d.ts +97 -0
- package/dist/content-operations.js +250 -0
- package/dist/content-store.d.ts +4 -4
- package/dist/control-plane-client.d.ts +13 -18
- package/dist/control-plane-client.js +8 -86
- package/dist/control-plane.d.ts +3 -2
- package/dist/control-plane.js +38 -13
- package/dist/copilot.d.ts +3 -0
- package/dist/copilot.js +16 -1
- package/dist/d1-http.d.ts +1 -1
- package/dist/d1-store.d.ts +32 -57
- package/dist/d1-store.js +115 -318
- package/dist/db/d1.d.ts +1 -232
- package/dist/db/index.d.ts +3 -3
- package/dist/db/market-schema.d.ts +50900 -11018
- package/dist/db/market-schema.js +2313 -467
- package/dist/db/node-sqlite.d.ts +1 -232
- package/dist/db/node-sqlite.js +7 -2
- package/dist/db/schema.d.ts +0 -462
- package/dist/db/schema.js +2 -22
- package/dist/dispatch.d.ts +1 -1
- package/dist/dispatch.js +0 -11
- package/dist/fixture-support.js +52 -4
- package/dist/governance.d.ts +133 -0
- package/dist/governance.js +285 -0
- package/dist/graph/build.d.ts +2 -2
- package/dist/graph/context-query-contracts.d.ts +1 -1
- package/dist/graph/dsl.d.ts +1 -1
- package/dist/graph/query.d.ts +4 -4
- package/dist/graph/ranking.d.ts +1 -1
- package/dist/graph/schema.d.ts +1 -1
- package/dist/graph.d.ts +11 -11
- package/dist/guarantees/index.d.ts +425 -0
- package/dist/guarantees/index.js +1146 -0
- package/dist/hosting/apps.d.ts +12 -0
- package/dist/hosting/apps.js +107 -0
- package/dist/hosting/builtins.d.ts +25 -0
- package/dist/hosting/builtins.js +602 -0
- package/dist/hosting/contracts.d.ts +208 -0
- package/dist/hosting/contracts.js +0 -0
- package/dist/hosting/graph.d.ts +195 -0
- package/dist/hosting/graph.js +1092 -0
- package/dist/hosting/index.d.ts +4 -0
- package/dist/hosting/index.js +4 -0
- package/dist/index.d.ts +88 -67
- package/dist/index.js +142 -14
- package/dist/local-dev/managed-dev.d.ts +85 -0
- package/dist/local-dev/managed-dev.js +368 -0
- package/dist/managed-dependencies.d.ts +9 -0
- package/dist/managed-dependencies.js +10 -9
- package/dist/market-client.d.ts +327 -9
- package/dist/market-client.js +464 -20
- package/dist/model-registry.d.ts +1 -1
- package/dist/model-registry.js +19 -19
- package/dist/operations/agent-tools.d.ts +2 -11
- package/dist/operations/agent-tools.js +2 -14
- package/dist/operations/providers/default.d.ts +1 -1
- package/dist/operations/providers/default.js +20 -37
- package/dist/operations/repository-operations.d.ts +26 -2
- package/dist/operations/repository-operations.js +159 -1
- package/dist/operations/runtime.d.ts +3 -3
- package/dist/operations/services/bootstrap-runner.d.ts +4 -2
- package/dist/operations/services/bootstrap-runner.js +22 -2
- package/dist/operations/services/build-warning-policy.d.ts +34 -0
- package/dist/operations/services/build-warning-policy.js +81 -82
- package/dist/operations/services/commit-message-provider.js +4 -4
- package/dist/operations/services/config-runtime.d.ts +83 -24
- package/dist/operations/services/config-runtime.js +449 -130
- package/dist/operations/services/deploy.d.ts +106 -624
- package/dist/operations/services/deploy.js +746 -263
- package/dist/operations/services/deployment-readiness.d.ts +30 -0
- package/dist/operations/services/deployment-readiness.js +206 -0
- package/dist/operations/services/git-remote-policy.js +12 -4
- package/dist/operations/services/git-runner.d.ts +66 -0
- package/dist/operations/services/git-runner.js +479 -0
- package/dist/operations/services/git-workflow.d.ts +45 -6
- package/dist/operations/services/git-workflow.js +251 -23
- package/dist/operations/services/github-actions-verification.d.ts +4 -1
- package/dist/operations/services/github-actions-verification.js +12 -3
- package/dist/operations/services/github-api.js +22 -6
- package/dist/operations/services/github-automation.d.ts +4 -4
- package/dist/operations/services/github-automation.js +19 -21
- package/dist/operations/services/github-credentials.d.ts +13 -0
- package/dist/operations/services/github-credentials.js +59 -0
- package/dist/operations/services/hosted-service-checks.d.ts +81 -0
- package/dist/operations/services/hosted-service-checks.js +478 -0
- package/dist/operations/services/hosting-audit.d.ts +2 -2
- package/dist/operations/services/hosting-audit.js +7 -7
- package/dist/operations/services/hub-launch.d.ts +1 -1
- package/dist/operations/services/hub-provider-launch.d.ts +5 -5
- package/dist/operations/services/hub-provider-launch.js +22 -17
- package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
- package/dist/operations/services/live-hosted-service-checks.js +463 -0
- package/dist/operations/services/local-dev.js +0 -1
- package/dist/operations/services/managed-host-security.d.ts +1 -1
- package/dist/operations/services/managed-host-security.js +1 -1
- package/dist/operations/services/managed-repositories.d.ts +37 -0
- package/dist/operations/services/managed-repositories.js +177 -0
- package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
- package/dist/operations/services/operations-runner-smoke.js +198 -0
- package/dist/operations/services/package-adapters.d.ts +170 -0
- package/dist/operations/services/package-adapters.js +859 -0
- package/dist/operations/services/package-reference-policy.d.ts +13 -88
- package/dist/operations/services/package-reference-policy.js +96 -215
- package/dist/operations/services/project-host-operations.d.ts +4 -4
- package/dist/operations/services/project-platform.d.ts +57 -173
- package/dist/operations/services/project-platform.js +80 -111
- package/dist/operations/services/project-web-monitor.d.ts +2 -2
- package/dist/operations/services/project-web-monitor.js +122 -5
- package/dist/operations/services/railway-api.d.ts +117 -5
- package/dist/operations/services/railway-api.js +915 -93
- package/dist/operations/services/railway-deploy.d.ts +30 -112
- package/dist/operations/services/railway-deploy.js +521 -961
- package/dist/operations/services/release-history.js +3 -4
- package/dist/operations/services/release-proof-ledger.d.ts +13 -0
- package/dist/operations/services/release-proof-ledger.js +81 -0
- package/dist/operations/services/release-proof-planner.d.ts +48 -0
- package/dist/operations/services/release-proof-planner.js +195 -0
- package/dist/operations/services/release-proof-runner.d.ts +16 -0
- package/dist/operations/services/release-proof-runner.js +169 -0
- package/dist/operations/services/release-proof.d.ts +81 -0
- package/dist/operations/services/release-proof.js +79 -0
- package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
- package/dist/operations/services/repository-save-orchestrator.js +604 -212
- package/dist/operations/services/runtime-paths.d.ts +1 -3
- package/dist/operations/services/runtime-paths.js +0 -4
- package/dist/operations/services/runtime-tools.d.ts +1 -191
- package/dist/operations/services/runtime-tools.js +4 -443
- package/dist/operations/services/save-deploy-preflight.js +9 -1
- package/dist/operations/services/template-host-bindings.d.ts +2 -2
- package/dist/operations/services/template-host-bindings.js +3 -2
- package/dist/operations/services/template-registry.d.ts +6 -6
- package/dist/operations/services/template-registry.js +33 -14
- package/dist/operations/services/template-secret-sync.d.ts +3 -3
- package/dist/operations/services/verification-cache.d.ts +25 -0
- package/dist/operations/services/verification-cache.js +71 -0
- package/dist/operations/services/workflow-timing.d.ts +25 -0
- package/dist/operations/services/workflow-timing.js +79 -0
- package/dist/operations/services/workspace-dependency-mode.js +50 -5
- package/dist/operations/services/workspace-preflight.js +8 -8
- package/dist/operations/services/workspace-save-script.d.ts +4 -4
- package/dist/operations/services/workspace-save.d.ts +1 -0
- package/dist/operations/services/workspace-save.js +42 -19
- package/dist/operations/services/workspace-tools.js +42 -7
- package/dist/operations-registry.d.ts +1 -1
- package/dist/operations-registry.js +5 -6
- package/dist/operations-types.d.ts +1 -1
- package/dist/operations.d.ts +17 -11
- package/dist/operations.js +57 -3
- package/dist/platform/book-export.js +2 -0
- package/dist/platform/books-data.d.ts +1 -1
- package/dist/platform/config.d.ts +27 -0
- package/dist/platform/config.js +100 -0
- package/dist/platform/content-runtime-source.d.ts +54 -0
- package/dist/platform/content-runtime-source.js +169 -0
- package/dist/platform/contracts.d.ts +38 -2
- package/dist/platform/deploy-config.d.ts +1 -1
- package/dist/platform/deploy-config.js +80 -9
- package/dist/platform/deploy-runtime.d.ts +1 -1
- package/dist/platform/desired-state.d.ts +63 -0
- package/dist/platform/desired-state.js +1021 -0
- package/dist/platform/env.yaml +568 -45
- package/dist/platform/environment.d.ts +3 -2
- package/dist/platform/environment.js +122 -21
- package/dist/platform/local-content-materialization.d.ts +9 -0
- package/dist/platform/local-content-materialization.js +212 -0
- package/dist/platform/plugin.d.ts +13 -4
- package/dist/platform/plugins/runtime.d.ts +3 -3
- package/dist/platform/plugins/runtime.js +62 -1
- package/dist/platform/plugins.d.ts +6 -6
- package/dist/platform/published-content-pipeline.d.ts +3 -3
- package/dist/platform/published-content-pipeline.js +5 -1
- package/dist/platform/published-content.d.ts +4 -3
- package/dist/platform/site-config-schema.d.ts +1 -0
- package/dist/platform/site-config-schema.js +4 -1
- package/dist/platform/tenant/runtime-config.d.ts +152 -2
- package/dist/platform/tenant-config.d.ts +1 -1
- package/dist/platform/utils/site-config-schema.d.ts +154 -0
- package/dist/platform/utils/site-config-schema.js +400 -461
- package/dist/platform-operation-store.d.ts +1 -1
- package/dist/platform-operation-store.js +2 -2
- package/dist/platform-operations.js +1 -1
- package/dist/plugin-default.d.ts +1 -1
- package/dist/plugin-default.js +27 -12
- package/dist/project-import.d.ts +91 -0
- package/dist/project-import.js +257 -0
- package/dist/project-workflow.d.ts +1 -1
- package/dist/reconcile/bootstrap-systems.d.ts +2 -2
- package/dist/reconcile/bootstrap-systems.js +5 -5
- package/dist/reconcile/builtin-adapters.d.ts +7 -1
- package/dist/reconcile/builtin-adapters.js +3190 -429
- package/dist/reconcile/contracts.d.ts +23 -6
- package/dist/reconcile/desired-state.d.ts +2 -192
- package/dist/reconcile/desired-state.js +29 -38
- package/dist/reconcile/engine.d.ts +61 -395
- package/dist/reconcile/engine.js +229 -44
- package/dist/reconcile/index.d.ts +10 -8
- package/dist/reconcile/index.js +2 -0
- package/dist/reconcile/live-acceptance.d.ts +100 -0
- package/dist/reconcile/live-acceptance.js +2027 -0
- package/dist/reconcile/platform.d.ts +104 -0
- package/dist/reconcile/platform.js +100 -0
- package/dist/reconcile/providers/docker-private.d.ts +54 -0
- package/dist/reconcile/providers/docker-private.js +101 -0
- package/dist/reconcile/providers/github-private.d.ts +65 -0
- package/dist/reconcile/providers/github-private.js +119 -0
- package/dist/reconcile/providers/local-private.d.ts +28 -0
- package/dist/reconcile/providers/local-private.js +75 -0
- package/dist/reconcile/providers/railway-iac.d.ts +66 -0
- package/dist/reconcile/providers/railway-iac.js +275 -0
- package/dist/reconcile/providers/release-private.d.ts +92 -0
- package/dist/reconcile/providers/release-private.js +152 -0
- package/dist/reconcile/registry.d.ts +2 -2
- package/dist/reconcile/registry.js +16 -1
- package/dist/reconcile/state.d.ts +1 -1
- package/dist/reconcile/state.js +7 -44
- package/dist/reconcile/units.d.ts +1 -1
- package/dist/reconcile/units.js +9 -3
- package/dist/remote.d.ts +6 -6
- package/dist/scenes/artifacts.d.ts +16 -0
- package/dist/scenes/artifacts.js +61 -0
- package/dist/scenes/auth.d.ts +2 -0
- package/dist/scenes/auth.js +28 -0
- package/dist/scenes/base-url.d.ts +12 -0
- package/dist/scenes/base-url.js +123 -0
- package/dist/scenes/builtin-plugins.d.ts +2 -0
- package/dist/scenes/builtin-plugins.js +447 -0
- package/dist/scenes/checkpoints.d.ts +14 -0
- package/dist/scenes/checkpoints.js +33 -0
- package/dist/scenes/device-matrix.d.ts +2 -0
- package/dist/scenes/device-matrix.js +97 -0
- package/dist/scenes/devices.d.ts +11 -0
- package/dist/scenes/devices.js +22 -0
- package/dist/scenes/diagnostics.d.ts +5 -0
- package/dist/scenes/diagnostics.js +22 -0
- package/dist/scenes/diagram-providers.d.ts +2 -0
- package/dist/scenes/diagram-providers.js +181 -0
- package/dist/scenes/diagram-validation.d.ts +22 -0
- package/dist/scenes/diagram-validation.js +74 -0
- package/dist/scenes/environment.d.ts +2 -0
- package/dist/scenes/environment.js +65 -0
- package/dist/scenes/evidence-bundle.d.ts +5 -0
- package/dist/scenes/evidence-bundle.js +42 -0
- package/dist/scenes/evidence-report.d.ts +10 -0
- package/dist/scenes/evidence-report.js +73 -0
- package/dist/scenes/evidence.d.ts +16 -0
- package/dist/scenes/evidence.js +277 -0
- package/dist/scenes/index.d.ts +48 -0
- package/dist/scenes/index.js +312 -0
- package/dist/scenes/inspect.d.ts +9 -0
- package/dist/scenes/inspect.js +64 -0
- package/dist/scenes/loader.d.ts +3 -0
- package/dist/scenes/loader.js +38 -0
- package/dist/scenes/logs.d.ts +2 -0
- package/dist/scenes/logs.js +47 -0
- package/dist/scenes/operations.d.ts +3 -0
- package/dist/scenes/operations.js +128 -0
- package/dist/scenes/phase0.d.ts +9 -0
- package/dist/scenes/phase0.js +637 -0
- package/dist/scenes/planner.d.ts +12 -0
- package/dist/scenes/planner.js +166 -0
- package/dist/scenes/playwright-adapter.d.ts +2 -0
- package/dist/scenes/playwright-adapter.js +63 -0
- package/dist/scenes/plugins.d.ts +5 -0
- package/dist/scenes/plugins.js +115 -0
- package/dist/scenes/progress.d.ts +17 -0
- package/dist/scenes/progress.js +24 -0
- package/dist/scenes/publish-destinations.d.ts +12 -0
- package/dist/scenes/publish-destinations.js +99 -0
- package/dist/scenes/publish-plan-report.d.ts +10 -0
- package/dist/scenes/publish-plan-report.js +70 -0
- package/dist/scenes/publish-plan.d.ts +15 -0
- package/dist/scenes/publish-plan.js +248 -0
- package/dist/scenes/publish-redaction.d.ts +16 -0
- package/dist/scenes/publish-redaction.js +148 -0
- package/dist/scenes/publish-release-record.d.ts +13 -0
- package/dist/scenes/publish-release-record.js +34 -0
- package/dist/scenes/publish-report.d.ts +10 -0
- package/dist/scenes/publish-report.js +67 -0
- package/dist/scenes/publish.d.ts +16 -0
- package/dist/scenes/publish.js +298 -0
- package/dist/scenes/registry.d.ts +12 -0
- package/dist/scenes/registry.js +65 -0
- package/dist/scenes/remotion-adapter.d.ts +3 -0
- package/dist/scenes/remotion-adapter.js +94 -0
- package/dist/scenes/remotion-composition-registry.d.ts +2 -0
- package/dist/scenes/remotion-composition-registry.js +12 -0
- package/dist/scenes/remotion-compositions.d.ts +15 -0
- package/dist/scenes/remotion-compositions.js +464 -0
- package/dist/scenes/remotion-diagrams.d.ts +9 -0
- package/dist/scenes/remotion-diagrams.js +188 -0
- package/dist/scenes/remotion-input.d.ts +13 -0
- package/dist/scenes/remotion-input.js +291 -0
- package/dist/scenes/remotion-visuals.d.ts +29 -0
- package/dist/scenes/remotion-visuals.js +198 -0
- package/dist/scenes/render-media-assets.d.ts +9 -0
- package/dist/scenes/render-media-assets.js +117 -0
- package/dist/scenes/render-report.d.ts +10 -0
- package/dist/scenes/render-report.js +27 -0
- package/dist/scenes/render.d.ts +2 -0
- package/dist/scenes/render.js +218 -0
- package/dist/scenes/reporter.d.ts +3 -0
- package/dist/scenes/reporter.js +101 -0
- package/dist/scenes/resume.d.ts +2 -0
- package/dist/scenes/resume.js +79 -0
- package/dist/scenes/runner.d.ts +2 -0
- package/dist/scenes/runner.js +674 -0
- package/dist/scenes/schema.d.ts +6 -0
- package/dist/scenes/schema.js +994 -0
- package/dist/scenes/seed.d.ts +2 -0
- package/dist/scenes/seed.js +83 -0
- package/dist/scenes/segments.d.ts +15 -0
- package/dist/scenes/segments.js +79 -0
- package/dist/scenes/selectors.d.ts +3 -0
- package/dist/scenes/selectors.js +21 -0
- package/dist/scenes/timeline.d.ts +11 -0
- package/dist/scenes/timeline.js +26 -0
- package/dist/scenes/timeouts.d.ts +6 -0
- package/dist/scenes/timeouts.js +17 -0
- package/dist/scenes/training-captions.d.ts +14 -0
- package/dist/scenes/training-captions.js +98 -0
- package/dist/scenes/training-report.d.ts +10 -0
- package/dist/scenes/training-report.js +78 -0
- package/dist/scenes/training-transcript.d.ts +24 -0
- package/dist/scenes/training-transcript.js +204 -0
- package/dist/scenes/training.d.ts +10 -0
- package/dist/scenes/training.js +134 -0
- package/dist/scenes/types.d.ts +1872 -0
- package/dist/scenes/types.js +8 -0
- package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
- package/dist/scenes/visual-audit-contact-sheets.js +119 -0
- package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
- package/dist/scenes/visual-audit-fixtures.js +210 -0
- package/dist/scenes/visual-audit-report.d.ts +11 -0
- package/dist/scenes/visual-audit-report.js +85 -0
- package/dist/scenes/visual-audit-review.d.ts +23 -0
- package/dist/scenes/visual-audit-review.js +829 -0
- package/dist/scenes/visual-audit-routes.d.ts +13 -0
- package/dist/scenes/visual-audit-routes.js +308 -0
- package/dist/scenes/visual-audit.d.ts +3 -0
- package/dist/scenes/visual-audit.js +596 -0
- package/dist/scripts/build-dist.js +154 -40
- package/dist/scripts/check-build-warnings.js +42 -53
- package/dist/scripts/cleanup-markdown.js +1 -1
- package/dist/scripts/cli-test-fixtures.js +24 -28
- package/dist/scripts/deployment-readiness.js +20 -0
- package/dist/scripts/generate-treedx-openapi-types.js +186 -0
- package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
- package/dist/scripts/operations-runner-smoke.js +16 -0
- package/dist/scripts/package-tools.js +12 -1
- package/dist/scripts/prepare.js +3 -7
- package/dist/scripts/release-verify.js +6 -6
- package/dist/scripts/run-fixture-astro-command.js +1 -1
- package/dist/scripts/template-catalog.test.js +68 -82
- package/dist/scripts/tenant-dev.js +0 -10
- package/dist/scripts/tenant-workflow-action.js +10 -1
- package/dist/scripts/test-cloudflare-local.js +1 -1
- package/dist/scripts/test-scaffold.js +0 -1
- package/dist/scripts/test-smoke.js +3 -3
- package/dist/scripts/treeseed-build-dist.js +4 -7
- package/dist/scripts/treeseed-release-verify.js +1 -1
- package/dist/scripts/verify-driver.js +30 -21
- package/dist/scripts/workflow-commands.test.js +18 -27
- package/dist/scripts/workspace-command-e2e.js +1 -1
- package/dist/scripts/workspace-lint.js +6 -0
- package/dist/scripts/workspace-release-test.js +90 -1
- package/dist/scripts/workspace-test.js +6 -0
- package/dist/sdk-dispatch.d.ts +1 -1
- package/dist/sdk-dispatch.js +0 -16
- package/dist/sdk-fields.d.ts +1 -1
- package/dist/sdk-filters.d.ts +1 -1
- package/dist/sdk-types.d.ts +1352 -116
- package/dist/sdk-types.js +413 -2
- package/dist/sdk.d.ts +106 -100
- package/dist/sdk.js +211 -51
- package/dist/secrets-capability.d.ts +421 -0
- package/dist/secrets-capability.js +530 -0
- package/dist/seeds/normalize.js +1 -0
- package/dist/seeds/planner.js +38 -0
- package/dist/seeds/schema.js +293 -4
- package/dist/seeds/types.d.ts +60 -0
- package/dist/seeds/types.js +9 -1
- package/dist/service-credentials.d.ts +54 -0
- package/dist/service-credentials.js +112 -0
- package/dist/stores/cursor-store.d.ts +2 -2
- package/dist/stores/envelopes.d.ts +1 -1
- package/dist/stores/helpers.d.ts +1 -1
- package/dist/stores/lease-store.d.ts +2 -2
- package/dist/stores/message-store.d.ts +2 -2
- package/dist/stores/operational-store.d.ts +3 -26
- package/dist/stores/operational-store.js +0 -225
- package/dist/stores/project-workflow-store.d.ts +2 -2
- package/dist/stores/run-store.d.ts +2 -3
- package/dist/stores/run-store.js +0 -98
- package/dist/stores/subscription-store.d.ts +2 -3
- package/dist/stores/subscription-store.js +0 -100
- package/dist/template-catalog.d.ts +1 -1
- package/dist/template-launch-requirements.d.ts +2 -2
- package/dist/template-launch-requirements.js +9 -0
- package/dist/template-launch-ui.d.ts +2 -2
- package/dist/treedx/adapters.d.ts +6 -0
- package/dist/treedx/adapters.js +36 -0
- package/dist/treedx/client.d.ts +222 -0
- package/dist/treedx/client.js +871 -0
- package/dist/treedx/errors.d.ts +13 -0
- package/dist/treedx/errors.js +17 -0
- package/dist/treedx/federated-client.d.ts +27 -0
- package/dist/treedx/federated-client.js +158 -0
- package/dist/treedx/generated/openapi-types.d.ts +3558 -0
- package/dist/treedx/generated/openapi-types.js +0 -0
- package/dist/treedx/graph-adapter.d.ts +33 -0
- package/dist/treedx/graph-adapter.js +156 -0
- package/dist/treedx/index.d.ts +14 -0
- package/dist/treedx/index.js +48 -0
- package/dist/treedx/market-integration.d.ts +27 -0
- package/dist/treedx/market-integration.js +131 -0
- package/dist/treedx/ports.d.ts +166 -0
- package/dist/treedx/ports.js +231 -0
- package/dist/treedx/query-adapter.d.ts +19 -0
- package/dist/treedx/query-adapter.js +62 -0
- package/dist/treedx/registry-client.d.ts +11 -0
- package/dist/treedx/registry-client.js +19 -0
- package/dist/treedx/repository-adapter.d.ts +45 -0
- package/dist/treedx/repository-adapter.js +319 -0
- package/dist/treedx/sdk-integration.d.ts +27 -0
- package/dist/treedx/sdk-integration.js +63 -0
- package/dist/treedx/types.d.ts +1084 -0
- package/dist/treedx/types.js +8 -0
- package/dist/treedx/workspace-adapter.d.ts +27 -0
- package/dist/treedx/workspace-adapter.js +65 -0
- package/dist/treedx-backends.d.ts +220 -0
- package/dist/treedx-backends.js +634 -0
- package/dist/treedx-client.d.ts +89 -0
- package/dist/treedx-client.js +184 -0
- package/dist/treeseed/services/compose.yml +2 -3
- package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
- package/dist/types/agents.d.ts +256 -0
- package/dist/types/agents.js +42 -1
- package/dist/verification.d.ts +1 -0
- package/dist/verification.js +143 -14
- package/dist/workflow/operations.d.ts +580 -523
- package/dist/workflow/operations.js +2084 -1279
- package/dist/workflow/policy.js +19 -7
- package/dist/workflow/runs.d.ts +9 -3
- package/dist/workflow/runs.js +66 -26
- package/dist/workflow/session.d.ts +4 -1
- package/dist/workflow/session.js +50 -10
- package/dist/workflow/worktrees.d.ts +6 -2
- package/dist/workflow/worktrees.js +98 -15
- package/dist/workflow-state.d.ts +17 -4
- package/dist/workflow-state.js +68 -41
- package/dist/workflow-support.d.ts +26 -17
- package/dist/workflow-support.js +84 -24
- package/dist/workflow.d.ts +51 -16
- package/dist/workflow.js +19 -7
- package/drizzle/d1/0000_treeseed_d1.sql +0 -18
- package/drizzle/market/0000_market_control_plane.sql +1793 -1499
- package/drizzle/market/0004_treedx_market_integration.sql +99 -0
- package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
- package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
- package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
- package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
- package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
- package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
- package/drizzle/market/0011_github_app_adapter.sql +47 -0
- package/drizzle/market/0012_workday_test_runs.sql +44 -0
- package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
- package/drizzle/market/0014_governance_pipeline.sql +189 -0
- package/package.json +106 -18
- package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
- package/templates/github/deploy-web.workflow.yml +49 -12
- package/dist/operations/services/mailpit-runtime.d.ts +0 -20
- package/dist/operations/services/mailpit-runtime.js +0 -67
- package/dist/operations/services/release-candidate.d.ts +0 -41
- package/dist/operations/services/release-candidate.js +0 -616
- package/dist/scripts/ensure-mailpit.js +0 -48
- package/dist/scripts/logs-mailpit.js +0 -2
- package/dist/scripts/run-ts.js +0 -45
- package/dist/scripts/stop-mailpit.js +0 -5
- package/dist/scripts/treeseed-run-ts.js +0 -45
package/dist/reconcile/engine.js
CHANGED
|
@@ -26,17 +26,84 @@ function formatVerificationFailure(verification) {
|
|
|
26
26
|
].filter(Boolean);
|
|
27
27
|
return details.length > 0 ? `Verification failed (${details.join(" | ")})` : "Verification failed.";
|
|
28
28
|
}
|
|
29
|
-
function createRunContext(tenantRoot, target, launchEnv, write) {
|
|
29
|
+
function createRunContext(tenantRoot, target, launchEnv, write, dryRun = false, session) {
|
|
30
30
|
const { deployConfig } = deriveTreeseedDesiredUnits({ tenantRoot, target });
|
|
31
31
|
return {
|
|
32
32
|
tenantRoot,
|
|
33
33
|
target,
|
|
34
34
|
deployConfig,
|
|
35
35
|
launchEnv,
|
|
36
|
+
dryRun,
|
|
36
37
|
write,
|
|
37
|
-
session: /* @__PURE__ */ new Map()
|
|
38
|
+
session: session ?? /* @__PURE__ */ new Map()
|
|
38
39
|
};
|
|
39
40
|
}
|
|
41
|
+
function normalizeSelectorValues(values) {
|
|
42
|
+
return new Set((values ?? []).map((value) => value.trim()).filter(Boolean));
|
|
43
|
+
}
|
|
44
|
+
function unitSelectorValues(unit) {
|
|
45
|
+
const metadata = unit.metadata ?? {};
|
|
46
|
+
const spec = unit.spec ?? {};
|
|
47
|
+
const serviceKey = typeof metadata.serviceKey === "string" ? metadata.serviceKey : null;
|
|
48
|
+
const placement = typeof metadata.placement === "string" ? metadata.placement : null;
|
|
49
|
+
const appId = typeof metadata.applicationId === "string" ? metadata.applicationId : typeof metadata.appId === "string" ? metadata.appId : typeof spec.applicationId === "string" ? spec.applicationId : null;
|
|
50
|
+
const packageId = typeof metadata.packageId === "string" ? metadata.packageId : appId;
|
|
51
|
+
const serviceName = typeof spec.serviceName === "string" ? spec.serviceName : null;
|
|
52
|
+
const serviceId = typeof metadata.serviceId === "string" ? metadata.serviceId : typeof spec.serviceId === "string" ? spec.serviceId : null;
|
|
53
|
+
return {
|
|
54
|
+
provider: unit.provider,
|
|
55
|
+
unitType: unit.unitType,
|
|
56
|
+
unitId: unit.unitId,
|
|
57
|
+
serviceIds: [
|
|
58
|
+
unit.logicalName,
|
|
59
|
+
serviceId,
|
|
60
|
+
serviceKey,
|
|
61
|
+
serviceName,
|
|
62
|
+
unit.unitType.startsWith("railway-service:") ? unit.unitType.slice("railway-service:".length) : null,
|
|
63
|
+
unit.unitType.endsWith("-runtime") ? unit.logicalName : null
|
|
64
|
+
].filter((value) => Boolean(value)),
|
|
65
|
+
serviceTypes: [unit.unitType],
|
|
66
|
+
placements: [placement].filter((value) => Boolean(value)),
|
|
67
|
+
appIds: [appId].filter((value) => Boolean(value)),
|
|
68
|
+
packageIds: [packageId].filter((value) => Boolean(value))
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function unitMatchesSelector(unit, selector) {
|
|
72
|
+
if (!selector) return true;
|
|
73
|
+
const values = unitSelectorValues(unit);
|
|
74
|
+
const provider = normalizeSelectorValues(selector.provider ?? selector.host);
|
|
75
|
+
const unitIds = normalizeSelectorValues(selector.unitId);
|
|
76
|
+
const unitTypes = normalizeSelectorValues([
|
|
77
|
+
...selector.unitType ?? [],
|
|
78
|
+
...selector.resourceKind ?? []
|
|
79
|
+
]);
|
|
80
|
+
const serviceIds = normalizeSelectorValues(selector.serviceId);
|
|
81
|
+
const serviceTypes = normalizeSelectorValues(selector.serviceType);
|
|
82
|
+
const placements = normalizeSelectorValues(selector.placement);
|
|
83
|
+
const appIds = normalizeSelectorValues(selector.appId);
|
|
84
|
+
const packageIds = normalizeSelectorValues(selector.packageId);
|
|
85
|
+
const has = (needle, haystack) => needle.size === 0 || haystack.some((entry) => needle.has(entry));
|
|
86
|
+
return has(provider, [values.provider]) && has(unitIds, [values.unitId]) && has(unitTypes, [values.unitType]) && has(serviceIds, values.serviceIds) && has(serviceTypes, values.serviceTypes) && has(placements, values.placements) && has(appIds, values.appIds) && has(packageIds, values.packageIds);
|
|
87
|
+
}
|
|
88
|
+
function includeDependencies(units, selected) {
|
|
89
|
+
const byId = new Map(units.map((unit) => [unit.unitId, unit]));
|
|
90
|
+
const included = new Map(selected.map((unit) => [unit.unitId, unit]));
|
|
91
|
+
const visit = (unit) => {
|
|
92
|
+
for (const dependencyId of unit.dependencies) {
|
|
93
|
+
const dependency = byId.get(dependencyId);
|
|
94
|
+
if (!dependency || included.has(dependency.unitId)) continue;
|
|
95
|
+
included.set(dependency.unitId, dependency);
|
|
96
|
+
visit(dependency);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
for (const unit of selected) visit(unit);
|
|
100
|
+
return units.filter((unit) => included.has(unit.unitId));
|
|
101
|
+
}
|
|
102
|
+
function filterUnitsBySelector(units, selector) {
|
|
103
|
+
if (!selector) return units;
|
|
104
|
+
const selected = units.filter((unit) => unitMatchesSelector(unit, selector));
|
|
105
|
+
return includeDependencies(units, selected);
|
|
106
|
+
}
|
|
40
107
|
function dependencyLevels(units) {
|
|
41
108
|
const remaining = new Map(units.map((unit) => [unit.unitId, unit]));
|
|
42
109
|
const completed = /* @__PURE__ */ new Set();
|
|
@@ -123,33 +190,36 @@ async function verifyPlanUnits({
|
|
|
123
190
|
}
|
|
124
191
|
return verificationResults;
|
|
125
192
|
}
|
|
126
|
-
async function
|
|
193
|
+
async function refreshTreeseedUnits({
|
|
127
194
|
tenantRoot,
|
|
128
195
|
target,
|
|
129
196
|
env = process.env,
|
|
130
197
|
systems,
|
|
198
|
+
selector,
|
|
199
|
+
units: explicitUnits,
|
|
131
200
|
write
|
|
132
201
|
}) {
|
|
133
202
|
const derived = deriveTreeseedDesiredUnits({ tenantRoot, target });
|
|
134
|
-
const
|
|
203
|
+
const baseUnits = explicitUnits ?? filterTreeseedDesiredUnitsByBootstrapSystems(derived.units, systems);
|
|
204
|
+
const units = filterUnitsBySelector(baseUnits, selector);
|
|
135
205
|
const deployConfig = derived.deployConfig;
|
|
136
206
|
const registry = createTreeseedReconcileRegistry(deployConfig);
|
|
137
207
|
const reconcileState = loadTreeseedReconcileState(tenantRoot, target);
|
|
138
208
|
const context = createRunContext(tenantRoot, target, env, write);
|
|
139
209
|
const observations = /* @__PURE__ */ new Map();
|
|
140
210
|
await runByDependencyLevel(topologicallySortDesiredUnits(units), async (unit) => {
|
|
141
|
-
write?.(`
|
|
211
|
+
write?.(`Refreshing ${unit.provider}:${unit.unitType}...`);
|
|
142
212
|
const adapter = registry.get(unit.unitType, unit.provider);
|
|
143
213
|
const persisted = ensureTreeseedPersistedUnitState(reconcileState, unit);
|
|
144
214
|
let observed;
|
|
145
215
|
try {
|
|
146
|
-
observed = await Promise.resolve(adapter.
|
|
216
|
+
observed = await Promise.resolve(adapter.refresh({
|
|
147
217
|
context,
|
|
148
218
|
unit,
|
|
149
219
|
persistedState: persisted
|
|
150
220
|
}));
|
|
151
221
|
} catch (error) {
|
|
152
|
-
wrapAdapterFailure("
|
|
222
|
+
wrapAdapterFailure("refresh", unit.provider, unit.unitType, unit.unitId, error);
|
|
153
223
|
}
|
|
154
224
|
observations.set(unit.unitId, observed);
|
|
155
225
|
});
|
|
@@ -165,9 +235,11 @@ async function planTreeseedReconciliation({
|
|
|
165
235
|
target,
|
|
166
236
|
env = process.env,
|
|
167
237
|
systems,
|
|
238
|
+
selector,
|
|
239
|
+
units,
|
|
168
240
|
write
|
|
169
241
|
}) {
|
|
170
|
-
const observed = await
|
|
242
|
+
const observed = await refreshTreeseedUnits({ tenantRoot, target, env, systems, selector, units, write });
|
|
171
243
|
const registry = createTreeseedReconcileRegistry(observed.deployConfig);
|
|
172
244
|
const context = createRunContext(tenantRoot, target, env, write);
|
|
173
245
|
const plans = [];
|
|
@@ -177,14 +249,14 @@ async function planTreeseedReconciliation({
|
|
|
177
249
|
const observation = observed.observations.get(unit.unitId);
|
|
178
250
|
let diff;
|
|
179
251
|
try {
|
|
180
|
-
diff = await Promise.resolve(adapter.
|
|
252
|
+
diff = await Promise.resolve(adapter.diff({
|
|
181
253
|
context,
|
|
182
254
|
unit,
|
|
183
255
|
persistedState: persisted,
|
|
184
256
|
observed: observation
|
|
185
257
|
}));
|
|
186
258
|
} catch (error) {
|
|
187
|
-
wrapAdapterFailure("
|
|
259
|
+
wrapAdapterFailure("diff", unit.provider, unit.unitType, unit.unitId, error);
|
|
188
260
|
}
|
|
189
261
|
plans.push({
|
|
190
262
|
unit,
|
|
@@ -203,11 +275,15 @@ async function reconcileTreeseedTarget({
|
|
|
203
275
|
target,
|
|
204
276
|
env = process.env,
|
|
205
277
|
systems,
|
|
206
|
-
|
|
278
|
+
selector,
|
|
279
|
+
units,
|
|
280
|
+
write,
|
|
281
|
+
dryRun = false,
|
|
282
|
+
session
|
|
207
283
|
}) {
|
|
208
|
-
const planned = await planTreeseedReconciliation({ tenantRoot, target, env, systems, write });
|
|
284
|
+
const planned = await planTreeseedReconciliation({ tenantRoot, target, env, systems, selector, units, write });
|
|
209
285
|
const registry = createTreeseedReconcileRegistry(planned.deployConfig);
|
|
210
|
-
const context = createRunContext(tenantRoot, target, env, write);
|
|
286
|
+
const context = createRunContext(tenantRoot, target, env, write, dryRun, session);
|
|
211
287
|
const results = [];
|
|
212
288
|
const verificationMap = /* @__PURE__ */ new Map();
|
|
213
289
|
const timingEntries = [];
|
|
@@ -225,7 +301,7 @@ async function reconcileTreeseedTarget({
|
|
|
225
301
|
await runByDependencyLevel(topologicallySortDesiredUnits(planned.units), async (unit) => {
|
|
226
302
|
const plan = planByUnitId.get(unit.unitId);
|
|
227
303
|
const unitTiming = {
|
|
228
|
-
name: `
|
|
304
|
+
name: `apply:${plan.unit.provider}:${plan.unit.unitType}:${plan.unit.logicalName}`,
|
|
229
305
|
durationMs: 0,
|
|
230
306
|
status: "running",
|
|
231
307
|
children: [],
|
|
@@ -233,7 +309,7 @@ async function reconcileTreeseedTarget({
|
|
|
233
309
|
};
|
|
234
310
|
const unitStartMs = performance.now();
|
|
235
311
|
timingEntries.push(unitTiming);
|
|
236
|
-
write?.(`
|
|
312
|
+
write?.(`Applying ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName})...`);
|
|
237
313
|
const adapter = registry.get(plan.unit.unitType, plan.unit.provider);
|
|
238
314
|
const persisted = ensureTreeseedPersistedUnitState(planned.state, plan.unit);
|
|
239
315
|
try {
|
|
@@ -261,27 +337,69 @@ async function reconcileTreeseedTarget({
|
|
|
261
337
|
let result;
|
|
262
338
|
try {
|
|
263
339
|
const stageStartMs = performance.now();
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
340
|
+
if (dryRun) {
|
|
341
|
+
result = {
|
|
342
|
+
unit: plan.unit,
|
|
343
|
+
observed: plan.observed,
|
|
344
|
+
diff: plan.diff,
|
|
345
|
+
action: plan.diff.action,
|
|
346
|
+
warnings: [...plan.observed.warnings, "dry run: apply skipped"],
|
|
347
|
+
resourceLocators: plan.observed.locators,
|
|
348
|
+
state: plan.observed.live,
|
|
349
|
+
verification: null
|
|
350
|
+
};
|
|
351
|
+
} else {
|
|
352
|
+
result = await Promise.resolve(adapter.apply({
|
|
353
|
+
context,
|
|
354
|
+
unit: plan.unit,
|
|
355
|
+
persistedState: persisted,
|
|
356
|
+
observed: plan.observed,
|
|
357
|
+
diff: plan.diff
|
|
358
|
+
}));
|
|
359
|
+
}
|
|
271
360
|
unitTiming.children?.push({
|
|
272
|
-
name: `${unitTiming.name}:
|
|
361
|
+
name: `${unitTiming.name}:apply`,
|
|
273
362
|
durationMs: elapsedMs(stageStartMs),
|
|
274
|
-
status: "success"
|
|
363
|
+
status: dryRun ? "skipped" : "success"
|
|
275
364
|
});
|
|
276
365
|
} catch (error) {
|
|
277
366
|
unitTiming.children?.push({
|
|
278
|
-
name: `${unitTiming.name}:
|
|
367
|
+
name: `${unitTiming.name}:apply`,
|
|
279
368
|
durationMs: elapsedMs(unitStartMs),
|
|
280
369
|
status: "failed"
|
|
281
370
|
});
|
|
282
371
|
unitTiming.durationMs = elapsedMs(unitStartMs);
|
|
283
372
|
unitTiming.status = "failed";
|
|
284
|
-
wrapAdapterFailure("
|
|
373
|
+
wrapAdapterFailure("apply", plan.unit.provider, plan.unit.unitType, plan.unit.unitId, error);
|
|
374
|
+
}
|
|
375
|
+
let refreshedObserved = result.observed;
|
|
376
|
+
if (!dryRun) {
|
|
377
|
+
try {
|
|
378
|
+
const stageStartMs = performance.now();
|
|
379
|
+
refreshedObserved = await Promise.resolve(adapter.refresh({
|
|
380
|
+
context,
|
|
381
|
+
unit: plan.unit,
|
|
382
|
+
persistedState: persisted
|
|
383
|
+
}));
|
|
384
|
+
result = {
|
|
385
|
+
...result,
|
|
386
|
+
observed: refreshedObserved
|
|
387
|
+
};
|
|
388
|
+
unitTiming.children?.push({
|
|
389
|
+
name: `${unitTiming.name}:refresh-after-apply`,
|
|
390
|
+
durationMs: elapsedMs(stageStartMs),
|
|
391
|
+
status: "success"
|
|
392
|
+
});
|
|
393
|
+
} catch (error) {
|
|
394
|
+
unitTiming.children?.push({
|
|
395
|
+
name: `${unitTiming.name}:refresh-after-apply`,
|
|
396
|
+
durationMs: elapsedMs(unitStartMs),
|
|
397
|
+
status: "failed"
|
|
398
|
+
});
|
|
399
|
+
unitTiming.durationMs = elapsedMs(unitStartMs);
|
|
400
|
+
unitTiming.status = "failed";
|
|
401
|
+
wrapAdapterFailure("refresh", plan.unit.provider, plan.unit.unitType, plan.unit.unitId, error);
|
|
402
|
+
}
|
|
285
403
|
}
|
|
286
404
|
write?.(`Verifying ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName})...`);
|
|
287
405
|
const postconditions = await Promise.resolve(adapter.requiredPostconditions?.({
|
|
@@ -296,7 +414,7 @@ async function reconcileTreeseedTarget({
|
|
|
296
414
|
context,
|
|
297
415
|
unit: plan.unit,
|
|
298
416
|
persistedState: persisted,
|
|
299
|
-
observed:
|
|
417
|
+
observed: refreshedObserved,
|
|
300
418
|
diff: plan.diff,
|
|
301
419
|
result,
|
|
302
420
|
postconditions
|
|
@@ -329,13 +447,19 @@ async function reconcileTreeseedTarget({
|
|
|
329
447
|
unitTiming.status = verification.verified ? "success" : "failed";
|
|
330
448
|
write?.(`Finished ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName}) in ${formatDurationMs(unitTiming.durationMs)}.`);
|
|
331
449
|
if (!verification.verified) {
|
|
332
|
-
|
|
450
|
+
if (!dryRun) {
|
|
451
|
+
await persistVerifiedResult(persisted, verifiedResult);
|
|
452
|
+
}
|
|
333
453
|
throw new Error(`Treeseed reconcile verification failed for ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.unitId}): ${formatVerificationFailure(verification)}`);
|
|
334
454
|
}
|
|
335
|
-
|
|
455
|
+
if (!dryRun) {
|
|
456
|
+
await persistVerifiedResult(persisted, verifiedResult);
|
|
457
|
+
}
|
|
336
458
|
results.push(verifiedResult);
|
|
337
459
|
});
|
|
338
|
-
|
|
460
|
+
if (!dryRun) {
|
|
461
|
+
writeTreeseedReconcileState(tenantRoot, planned.state);
|
|
462
|
+
}
|
|
339
463
|
return {
|
|
340
464
|
target,
|
|
341
465
|
units: planned.units,
|
|
@@ -349,9 +473,12 @@ async function destroyTreeseedTargetUnits({
|
|
|
349
473
|
tenantRoot,
|
|
350
474
|
target,
|
|
351
475
|
env = process.env,
|
|
476
|
+
selector,
|
|
477
|
+
units: explicitUnits,
|
|
352
478
|
write
|
|
353
479
|
}) {
|
|
354
|
-
const { units, deployConfig } = deriveTreeseedDesiredUnits({ tenantRoot, target });
|
|
480
|
+
const { units: allUnits, deployConfig } = deriveTreeseedDesiredUnits({ tenantRoot, target });
|
|
481
|
+
const units = filterUnitsBySelector(explicitUnits ?? allUnits, selector);
|
|
355
482
|
const registry = createTreeseedReconcileRegistry(deployConfig);
|
|
356
483
|
const reconcileState = loadTreeseedReconcileState(tenantRoot, target);
|
|
357
484
|
const context = createRunContext(tenantRoot, target, env, write);
|
|
@@ -365,13 +492,13 @@ async function destroyTreeseedTargetUnits({
|
|
|
365
492
|
const persisted = ensureTreeseedPersistedUnitState(reconcileState, unit);
|
|
366
493
|
let observed;
|
|
367
494
|
try {
|
|
368
|
-
observed = await Promise.resolve(adapter.
|
|
495
|
+
observed = await Promise.resolve(adapter.refresh({
|
|
369
496
|
context,
|
|
370
497
|
unit,
|
|
371
498
|
persistedState: persisted
|
|
372
499
|
}));
|
|
373
500
|
} catch (error) {
|
|
374
|
-
wrapAdapterFailure("
|
|
501
|
+
wrapAdapterFailure("refresh", unit.provider, unit.unitType, unit.unitId, error);
|
|
375
502
|
}
|
|
376
503
|
let result;
|
|
377
504
|
try {
|
|
@@ -392,16 +519,19 @@ async function collectTreeseedReconcileStatus({
|
|
|
392
519
|
tenantRoot,
|
|
393
520
|
target,
|
|
394
521
|
env = process.env,
|
|
395
|
-
systems
|
|
522
|
+
systems,
|
|
523
|
+
selector,
|
|
524
|
+
units,
|
|
525
|
+
session
|
|
396
526
|
}) {
|
|
397
|
-
const observed = await
|
|
527
|
+
const observed = await refreshTreeseedUnits({ tenantRoot, target, env, systems, selector, units });
|
|
398
528
|
const registry = createTreeseedReconcileRegistry(observed.deployConfig);
|
|
399
|
-
const context = createRunContext(tenantRoot, target, env);
|
|
529
|
+
const context = createRunContext(tenantRoot, target, env, void 0, false, session);
|
|
400
530
|
const plans = await Promise.all(observed.units.map(async (unit) => {
|
|
401
531
|
const adapter = registry.get(unit.unitType, unit.provider);
|
|
402
532
|
const persisted = ensureTreeseedPersistedUnitState(observed.state, unit);
|
|
403
533
|
const observation = observed.observations.get(unit.unitId);
|
|
404
|
-
const diff = await Promise.resolve(adapter.
|
|
534
|
+
const diff = await Promise.resolve(adapter.diff({
|
|
405
535
|
context,
|
|
406
536
|
unit,
|
|
407
537
|
persistedState: persisted,
|
|
@@ -420,7 +550,7 @@ async function collectTreeseedReconcileStatus({
|
|
|
420
550
|
context,
|
|
421
551
|
state: observed.state
|
|
422
552
|
});
|
|
423
|
-
const
|
|
553
|
+
const unitStatuses = observed.units.map((unit) => {
|
|
424
554
|
const observation = observed.observations.get(unit.unitId);
|
|
425
555
|
const verification = verificationResults.get(unit.unitId)?.verification ?? null;
|
|
426
556
|
return {
|
|
@@ -434,21 +564,76 @@ async function collectTreeseedReconcileStatus({
|
|
|
434
564
|
verification
|
|
435
565
|
};
|
|
436
566
|
});
|
|
437
|
-
const ready =
|
|
438
|
-
const blockers =
|
|
439
|
-
const warnings =
|
|
567
|
+
const ready = unitStatuses.every((unit) => unit.verification?.verified === true);
|
|
568
|
+
const blockers = unitStatuses.filter((unit) => unit.verification?.verified !== true).map((unit) => `Reconcile unit ${unit.provider}:${unit.unitType} is unverified: ${formatVerificationFailure(unit.verification)}.`);
|
|
569
|
+
const warnings = unitStatuses.flatMap((unit) => unit.warnings);
|
|
440
570
|
return {
|
|
441
571
|
target,
|
|
442
572
|
ready,
|
|
443
573
|
blockers,
|
|
444
574
|
warnings,
|
|
445
|
-
units
|
|
575
|
+
units: unitStatuses
|
|
446
576
|
};
|
|
447
577
|
}
|
|
578
|
+
async function reconcileTreeseedNestedTarget({
|
|
579
|
+
parentContext,
|
|
580
|
+
selector,
|
|
581
|
+
target,
|
|
582
|
+
dryRun
|
|
583
|
+
}) {
|
|
584
|
+
const previousVerificationResults = parentContext.session.get("treeseed:verification-results");
|
|
585
|
+
const previousTimings = parentContext.session.get("treeseed:timings");
|
|
586
|
+
try {
|
|
587
|
+
return await reconcileTreeseedTarget({
|
|
588
|
+
tenantRoot: parentContext.tenantRoot,
|
|
589
|
+
target,
|
|
590
|
+
env: parentContext.launchEnv,
|
|
591
|
+
selector,
|
|
592
|
+
write: parentContext.write,
|
|
593
|
+
dryRun,
|
|
594
|
+
session: parentContext.session
|
|
595
|
+
});
|
|
596
|
+
} finally {
|
|
597
|
+
if (previousVerificationResults === void 0) {
|
|
598
|
+
parentContext.session.delete("treeseed:verification-results");
|
|
599
|
+
} else {
|
|
600
|
+
parentContext.session.set("treeseed:verification-results", previousVerificationResults);
|
|
601
|
+
}
|
|
602
|
+
if (previousTimings === void 0) {
|
|
603
|
+
parentContext.session.delete("treeseed:timings");
|
|
604
|
+
} else {
|
|
605
|
+
parentContext.session.set("treeseed:timings", previousTimings);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
async function verifyTreeseedNestedTarget({
|
|
610
|
+
parentContext,
|
|
611
|
+
selector,
|
|
612
|
+
target
|
|
613
|
+
}) {
|
|
614
|
+
const previousVerificationResults = parentContext.session.get("treeseed:verification-results");
|
|
615
|
+
try {
|
|
616
|
+
return await collectTreeseedReconcileStatus({
|
|
617
|
+
tenantRoot: parentContext.tenantRoot,
|
|
618
|
+
target,
|
|
619
|
+
env: parentContext.launchEnv,
|
|
620
|
+
selector,
|
|
621
|
+
session: parentContext.session
|
|
622
|
+
});
|
|
623
|
+
} finally {
|
|
624
|
+
if (previousVerificationResults === void 0) {
|
|
625
|
+
parentContext.session.delete("treeseed:verification-results");
|
|
626
|
+
} else {
|
|
627
|
+
parentContext.session.set("treeseed:verification-results", previousVerificationResults);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
}
|
|
448
631
|
export {
|
|
449
632
|
collectTreeseedReconcileStatus,
|
|
450
633
|
destroyTreeseedTargetUnits,
|
|
451
|
-
observeTreeseedUnits,
|
|
452
634
|
planTreeseedReconciliation,
|
|
453
|
-
|
|
635
|
+
reconcileTreeseedNestedTarget,
|
|
636
|
+
reconcileTreeseedTarget,
|
|
637
|
+
refreshTreeseedUnits,
|
|
638
|
+
verifyTreeseedNestedTarget
|
|
454
639
|
};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
export * from './contracts.
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './
|
|
8
|
-
export * from './
|
|
1
|
+
export * from './contracts.js';
|
|
2
|
+
export * from './platform.js';
|
|
3
|
+
export * from './bootstrap-systems.js';
|
|
4
|
+
export * from './desired-state.js';
|
|
5
|
+
export * from './engine.js';
|
|
6
|
+
export * from './errors.js';
|
|
7
|
+
export * from './live-acceptance.js';
|
|
8
|
+
export * from './registry.js';
|
|
9
|
+
export * from './state.js';
|
|
10
|
+
export * from './units.js';
|
package/dist/reconcile/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export * from "./contracts.js";
|
|
2
|
+
export * from "./platform.js";
|
|
2
3
|
export * from "./bootstrap-systems.js";
|
|
3
4
|
export * from "./desired-state.js";
|
|
4
5
|
export * from "./engine.js";
|
|
5
6
|
export * from "./errors.js";
|
|
7
|
+
export * from "./live-acceptance.js";
|
|
6
8
|
export * from "./registry.js";
|
|
7
9
|
export * from "./state.js";
|
|
8
10
|
export * from "./units.js";
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { type TreeseedCanonicalAction, type TreeseedCanonicalDrift, type TreeseedCanonicalGraphNode, type TreeseedCanonicalReconcileReport } from './platform.js';
|
|
2
|
+
import type { TreeseedDesiredResource } from '../platform/desired-state.js';
|
|
3
|
+
import type { TreeseedReconcileSelector } from './contracts.js';
|
|
4
|
+
export type TreeseedLiveReconcileProvider = 'railway' | 'cloudflare' | 'github' | 'local';
|
|
5
|
+
export type TreeseedLiveReconcileMode = 'smoke' | 'acceptance' | 'cleanup';
|
|
6
|
+
export type TreeseedLiveReconcileEnvironment = 'local' | 'staging' | 'prod';
|
|
7
|
+
export interface TreeseedLiveReconcileScenarioResult {
|
|
8
|
+
id: string;
|
|
9
|
+
provider: TreeseedLiveReconcileProvider;
|
|
10
|
+
capability: string;
|
|
11
|
+
mode: TreeseedLiveReconcileMode;
|
|
12
|
+
ok: boolean;
|
|
13
|
+
phase: 'smoke' | 'validate' | 'create' | 'update' | 'replace' | 'verify' | 'destroy' | 'cleanup' | 'blocked';
|
|
14
|
+
action: TreeseedCanonicalAction['kind'];
|
|
15
|
+
reason: string;
|
|
16
|
+
startedAt: string;
|
|
17
|
+
completedAt: string;
|
|
18
|
+
durationMs: number;
|
|
19
|
+
locators: Record<string, string | null>;
|
|
20
|
+
createdResources: TreeseedCanonicalGraphNode[];
|
|
21
|
+
updatedResources: TreeseedCanonicalGraphNode[];
|
|
22
|
+
replacedResources: TreeseedCanonicalGraphNode[];
|
|
23
|
+
destroyedResources: TreeseedCanonicalGraphNode[];
|
|
24
|
+
retainedResources: TreeseedCanonicalGraphNode[];
|
|
25
|
+
issues: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface TreeseedLiveReconcileProviderReport {
|
|
28
|
+
provider: TreeseedLiveReconcileProvider;
|
|
29
|
+
mode: TreeseedLiveReconcileMode;
|
|
30
|
+
runId: string;
|
|
31
|
+
resourcePrefix: string;
|
|
32
|
+
scenarioResults: TreeseedLiveReconcileScenarioResult[];
|
|
33
|
+
coverage: {
|
|
34
|
+
total: number;
|
|
35
|
+
passed: number;
|
|
36
|
+
failed: number;
|
|
37
|
+
capabilities: string[];
|
|
38
|
+
};
|
|
39
|
+
createdResources: TreeseedCanonicalGraphNode[];
|
|
40
|
+
updatedResources: TreeseedCanonicalGraphNode[];
|
|
41
|
+
replacedResources: TreeseedCanonicalGraphNode[];
|
|
42
|
+
destroyedResources: TreeseedCanonicalGraphNode[];
|
|
43
|
+
retainedResources: TreeseedCanonicalGraphNode[];
|
|
44
|
+
cleanupDrift: TreeseedCanonicalDrift[];
|
|
45
|
+
report: TreeseedCanonicalReconcileReport;
|
|
46
|
+
ok: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface TreeseedLiveReconcileRunResult {
|
|
49
|
+
command: 'reconcile test-live';
|
|
50
|
+
mode: TreeseedLiveReconcileMode;
|
|
51
|
+
environment: TreeseedLiveReconcileEnvironment;
|
|
52
|
+
runId: string;
|
|
53
|
+
resourcePrefix: string;
|
|
54
|
+
providers: TreeseedLiveReconcileProviderReport[];
|
|
55
|
+
ok: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface TreeseedLiveAcceptanceScenario {
|
|
58
|
+
id: string;
|
|
59
|
+
provider: TreeseedLiveReconcileProvider;
|
|
60
|
+
capability: string;
|
|
61
|
+
desiredResources: TreeseedDesiredResource[];
|
|
62
|
+
selector: TreeseedReconcileSelector;
|
|
63
|
+
expectedActions: TreeseedCanonicalAction['kind'][];
|
|
64
|
+
cleanupSelector: TreeseedReconcileSelector;
|
|
65
|
+
required: boolean;
|
|
66
|
+
probeOnly?: boolean;
|
|
67
|
+
cleanupRequired: boolean;
|
|
68
|
+
}
|
|
69
|
+
export interface TreeseedLiveReconcileProgressEvent {
|
|
70
|
+
provider: TreeseedLiveReconcileProvider;
|
|
71
|
+
mode: TreeseedLiveReconcileMode;
|
|
72
|
+
environment: TreeseedLiveReconcileEnvironment;
|
|
73
|
+
runId: string;
|
|
74
|
+
resourcePrefix: string;
|
|
75
|
+
capability?: string;
|
|
76
|
+
phase: 'start' | 'cleanup' | 'create' | 'verify' | 'destroy' | 'complete' | 'blocked';
|
|
77
|
+
message: string;
|
|
78
|
+
elapsedMs?: number;
|
|
79
|
+
}
|
|
80
|
+
export interface RunTreeseedLiveReconcileTestsOptions {
|
|
81
|
+
cwd: string;
|
|
82
|
+
environment: TreeseedLiveReconcileEnvironment;
|
|
83
|
+
providers: TreeseedLiveReconcileProvider[];
|
|
84
|
+
mode?: TreeseedLiveReconcileMode;
|
|
85
|
+
env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
|
|
86
|
+
runId?: string;
|
|
87
|
+
now?: Date;
|
|
88
|
+
fetchImpl?: typeof fetch;
|
|
89
|
+
onProgress?: (event: TreeseedLiveReconcileProgressEvent) => void;
|
|
90
|
+
}
|
|
91
|
+
export declare function compileTreeseedLiveAcceptanceScenarios(input: {
|
|
92
|
+
tenantRoot: string;
|
|
93
|
+
environment: TreeseedLiveReconcileEnvironment;
|
|
94
|
+
provider: TreeseedLiveReconcileProvider | 'all';
|
|
95
|
+
mode: TreeseedLiveReconcileMode;
|
|
96
|
+
runId: string;
|
|
97
|
+
}): TreeseedLiveAcceptanceScenario[];
|
|
98
|
+
export declare function treeseedLiveReconcileProviderCapabilities(provider: TreeseedLiveReconcileProvider): string[];
|
|
99
|
+
export declare function treeseedLiveReconcileResourcePrefix(environment: TreeseedLiveReconcileEnvironment, provider: TreeseedLiveReconcileProvider, runId: string): string;
|
|
100
|
+
export declare function runTreeseedLiveReconcileTests(options: RunTreeseedLiveReconcileTestsOptions): Promise<TreeseedLiveReconcileRunResult>;
|