@treeseed/sdk 0.11.0 → 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 +9 -4
- 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 +117 -60
- package/dist/capacity-provider.js +215 -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 +2 -2
- 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 +49037 -11843
- package/dist/db/market-schema.js +1788 -50
- package/dist/db/node-sqlite.d.ts +1 -232
- 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 +1 -1
- package/dist/hosting/builtins.d.ts +1 -1
- package/dist/hosting/builtins.js +9 -198
- package/dist/hosting/contracts.d.ts +3 -2
- package/dist/hosting/graph.d.ts +24 -21
- package/dist/hosting/graph.js +280 -294
- package/dist/hosting/index.d.ts +4 -4
- package/dist/index.d.ts +88 -74
- package/dist/index.js +81 -10
- 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 -8
- package/dist/market-client.d.ts +265 -7
- package/dist/market-client.js +381 -9
- 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 +1 -1
- 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 +73 -19
- package/dist/operations/services/config-runtime.js +276 -100
- package/dist/operations/services/deploy.d.ts +41 -622
- package/dist/operations/services/deploy.js +181 -213
- package/dist/operations/services/deployment-readiness.d.ts +1 -1
- package/dist/operations/services/deployment-readiness.js +38 -7
- 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 +43 -5
- package/dist/operations/services/git-workflow.js +242 -20
- package/dist/operations/services/github-actions-verification.d.ts +3 -1
- package/dist/operations/services/github-actions-verification.js +11 -3
- package/dist/operations/services/github-api.js +21 -5
- package/dist/operations/services/github-automation.d.ts +3 -3
- package/dist/operations/services/github-automation.js +15 -18
- package/dist/operations/services/github-credentials.js +2 -1
- package/dist/operations/services/hosted-service-checks.d.ts +19 -1
- package/dist/operations/services/hosted-service-checks.js +162 -11
- 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 +19 -14
- package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
- package/dist/operations/services/live-hosted-service-checks.js +193 -80
- 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-repositories.d.ts +37 -0
- package/dist/operations/services/managed-repositories.js +177 -0
- package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
- package/dist/operations/services/operations-runner-smoke.js +22 -4
- package/dist/operations/services/package-adapters.d.ts +77 -2
- package/dist/operations/services/package-adapters.js +627 -56
- package/dist/operations/services/package-reference-policy.d.ts +12 -88
- package/dist/operations/services/package-reference-policy.js +81 -213
- package/dist/operations/services/project-host-operations.d.ts +4 -4
- package/dist/operations/services/project-platform.d.ts +19 -193
- package/dist/operations/services/project-platform.js +31 -103
- package/dist/operations/services/project-web-monitor.d.ts +2 -2
- package/dist/operations/services/project-web-monitor.js +97 -2
- package/dist/operations/services/railway-api.d.ts +36 -7
- package/dist/operations/services/railway-api.js +331 -100
- package/dist/operations/services/railway-deploy.d.ts +7 -95
- package/dist/operations/services/railway-deploy.js +334 -742
- 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 +6 -7
- package/dist/operations/services/repository-save-orchestrator.js +353 -174
- 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 -192
- package/dist/operations/services/runtime-tools.js +4 -444
- 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/workflow-timing.d.ts +25 -0
- package/dist/operations/services/workflow-timing.js +79 -0
- package/dist/operations/services/workspace-dependency-mode.js +41 -4
- 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 +41 -18
- package/dist/operations/services/workspace-tools.js +40 -6
- 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 +6 -1
- package/dist/platform/deploy-config.d.ts +1 -1
- package/dist/platform/deploy-config.js +7 -1
- 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 +414 -19
- package/dist/platform/environment.d.ts +2 -2
- package/dist/platform/environment.js +54 -22
- 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 +5 -5
- 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/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 +3 -3
- package/dist/reconcile/builtin-adapters.d.ts +7 -1
- package/dist/reconcile/builtin-adapters.js +2924 -346
- package/dist/reconcile/contracts.d.ts +15 -2
- package/dist/reconcile/desired-state.d.ts +2 -193
- package/dist/reconcile/desired-state.js +24 -33
- package/dist/reconcile/engine.d.ts +60 -397
- package/dist/reconcile/engine.js +182 -18
- package/dist/reconcile/index.d.ts +10 -10
- package/dist/reconcile/live-acceptance.d.ts +22 -1
- package/dist/reconcile/live-acceptance.js +456 -44
- 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 +3 -40
- package/dist/reconcile/units.d.ts +1 -1
- package/dist/reconcile/units.js +7 -1
- 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/migrate-journey-csv-to-guarantees.js +140 -0
- package/dist/scripts/package-tools.js +12 -1
- package/dist/scripts/prepare.js +3 -7
- package/dist/scripts/release-verify.js +2 -5
- 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/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 +1184 -113
- package/dist/sdk-types.js +393 -0
- package/dist/sdk.d.ts +74 -79
- package/dist/sdk.js +27 -36
- 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-ui.d.ts +2 -2
- package/dist/treedx/adapters.d.ts +6 -6
- package/dist/treedx/client.d.ts +1 -1
- package/dist/treedx/errors.d.ts +1 -1
- package/dist/treedx/federated-client.d.ts +3 -3
- package/dist/treedx/graph-adapter.d.ts +2 -2
- package/dist/treedx/index.d.ts +14 -14
- package/dist/treedx/market-integration.d.ts +1 -1
- package/dist/treedx/ports.d.ts +30 -30
- package/dist/treedx/query-adapter.d.ts +3 -3
- package/dist/treedx/registry-client.d.ts +2 -2
- package/dist/treedx/repository-adapter.d.ts +4 -4
- package/dist/treedx/repository-adapter.js +14 -3
- package/dist/treedx/sdk-integration.d.ts +3 -3
- package/dist/treedx/types.d.ts +2 -2
- package/dist/treedx/workspace-adapter.d.ts +2 -2
- package/dist/treedx-backends.d.ts +13 -11
- package/dist/treedx-backends.js +52 -50
- package/dist/treedx-client.d.ts +3 -0
- package/dist/treedx-client.js +10 -1
- package/dist/treeseed/services/compose.yml +2 -3
- package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
- 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 +510 -559
- package/dist/workflow/operations.js +1891 -1342
- 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 +5 -5
- package/dist/workflow-state.js +27 -17
- package/dist/workflow-support.d.ts +26 -25
- package/dist/workflow-support.js +27 -31
- package/dist/workflow.d.ts +46 -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/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 +75 -18
- package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
- package/templates/github/deploy-web.workflow.yml +12 -8
- 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 -60
- package/dist/operations/services/release-candidate.js +0 -953
- 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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { relative, resolve } from "node:path";
|
|
2
2
|
import { collectTreeseedEnvironmentContext, resolveTreeseedMachineEnvironmentValues } from "./config-runtime.js";
|
|
3
3
|
import { configuredRailwayServices } from "./railway-deploy.js";
|
|
4
|
-
import {
|
|
4
|
+
import { loadTreeseedPlatformConfig } from "../../platform/config.js";
|
|
5
5
|
import { discoverTreeseedApplications } from "../../hosting/apps.js";
|
|
6
6
|
const RAILWAY_SECRET_KEYS_BY_SERVICE = {
|
|
7
7
|
api: [
|
|
@@ -14,6 +14,12 @@ const RAILWAY_SECRET_KEYS_BY_SERVICE = {
|
|
|
14
14
|
"TREESEED_DATABASE_URL",
|
|
15
15
|
"TREESEED_PLATFORM_RUNNER_SECRET",
|
|
16
16
|
"TREESEED_CREDENTIAL_SESSION_SECRET"
|
|
17
|
+
],
|
|
18
|
+
capacityProviderManager: [
|
|
19
|
+
"TREESEED_CAPACITY_PROVIDER_API_KEY"
|
|
20
|
+
],
|
|
21
|
+
capacityProviderRunner: [
|
|
22
|
+
"TREESEED_CAPACITY_PROVIDER_API_KEY"
|
|
17
23
|
]
|
|
18
24
|
};
|
|
19
25
|
const RAILWAY_VARIABLE_KEYS_BY_SERVICE = {
|
|
@@ -22,6 +28,18 @@ const RAILWAY_VARIABLE_KEYS_BY_SERVICE = {
|
|
|
22
28
|
"TREESEED_PLATFORM_RUNNER_DATA_DIR",
|
|
23
29
|
"TREESEED_PLATFORM_RUNNER_ENVIRONMENT",
|
|
24
30
|
"TREESEED_MANAGER_ID"
|
|
31
|
+
],
|
|
32
|
+
capacityProviderManager: [
|
|
33
|
+
"TREESEED_PROVIDER_ENVIRONMENT",
|
|
34
|
+
"TREESEED_PROVIDER_ROLE",
|
|
35
|
+
"TREESEED_MARKET_URL"
|
|
36
|
+
],
|
|
37
|
+
capacityProviderRunner: [
|
|
38
|
+
"TREESEED_PROVIDER_ENVIRONMENT",
|
|
39
|
+
"TREESEED_PROVIDER_ROLE",
|
|
40
|
+
"TREESEED_MARKET_URL",
|
|
41
|
+
"TREESEED_PROVIDER_RUNNER_ID",
|
|
42
|
+
"TREESEED_PROVIDER_DATA_DIR"
|
|
25
43
|
]
|
|
26
44
|
};
|
|
27
45
|
function check(input) {
|
|
@@ -38,8 +56,15 @@ function rootDirectory(tenantRoot, rootDir) {
|
|
|
38
56
|
return rel || ".";
|
|
39
57
|
}
|
|
40
58
|
function railwayServiceRootDirectory(tenantRoot, service) {
|
|
59
|
+
const sourceRootDirectory = String(service.sourceRootDirectory ?? "").trim();
|
|
60
|
+
if (sourceRootDirectory) {
|
|
61
|
+
return sourceRootDirectory;
|
|
62
|
+
}
|
|
41
63
|
return rootDirectory(service.application?.root ?? tenantRoot, service.rootDir);
|
|
42
64
|
}
|
|
65
|
+
function railwayServiceUsesImageSource(service) {
|
|
66
|
+
return Boolean(service.imageRef || service.sourceMode === "image");
|
|
67
|
+
}
|
|
43
68
|
function hasConfiguredValue(values, key) {
|
|
44
69
|
return typeof values[key] === "string" && Boolean(values[key]?.trim());
|
|
45
70
|
}
|
|
@@ -65,6 +90,8 @@ function valuePresence(values, observed, key, serviceTarget) {
|
|
|
65
90
|
function serviceTypeFor(key) {
|
|
66
91
|
if (key === "api") return "api";
|
|
67
92
|
if (key === "operationsRunner") return "operationsRunner";
|
|
93
|
+
if (key === "capacityProviderManager") return "capacityProviderManager";
|
|
94
|
+
if (key === "capacityProviderRunner") return "capacityProviderRunner";
|
|
68
95
|
if (key === "treeseedDatabase") return "treeseedDatabase";
|
|
69
96
|
return "unknown";
|
|
70
97
|
}
|
|
@@ -118,7 +145,7 @@ function httpStatus(url, options) {
|
|
|
118
145
|
function collectTreeseedHostedServiceChecks(options) {
|
|
119
146
|
const target = options.target ?? "prod";
|
|
120
147
|
const tenantRoot = options.tenantRoot;
|
|
121
|
-
const deployConfig =
|
|
148
|
+
const deployConfig = loadTreeseedPlatformConfig({ tenantRoot, environment: target, env: process.env }).deployConfig;
|
|
122
149
|
const registry = collectTreeseedEnvironmentContext(tenantRoot);
|
|
123
150
|
let machineValues = {};
|
|
124
151
|
try {
|
|
@@ -128,12 +155,17 @@ function collectTreeseedHostedServiceChecks(options) {
|
|
|
128
155
|
}
|
|
129
156
|
const values = { ...machineValues, ...options.valuesOverlay ?? {} };
|
|
130
157
|
const checks = [];
|
|
158
|
+
const selectedServiceKeys = new Set((options.serviceKeys ?? []).map((key) => key.trim()).filter(Boolean));
|
|
131
159
|
const selectedAppId = options.appId?.trim() || null;
|
|
132
|
-
const
|
|
160
|
+
const applications = discoverTreeseedApplications(tenantRoot);
|
|
161
|
+
const selectedApplication = selectedAppId ? applications.find((application) => application.id === selectedAppId || application.relativeRoot === selectedAppId) : null;
|
|
162
|
+
const workspaceHasApiApplication = applications.some(
|
|
163
|
+
(application) => application.roles.includes("api") || application.config.surfaces?.api?.enabled === true || application.config.services?.api?.enabled !== false && Boolean(application.config.services?.api)
|
|
164
|
+
);
|
|
133
165
|
const includeWeb = !selectedAppId || selectedAppId === "web" || selectedApplication?.roles.includes("web") === true;
|
|
134
166
|
const includeApi = !selectedAppId || selectedAppId === "api" || selectedApplication?.roles.includes("api") === true;
|
|
135
167
|
const selectedAppHasApi = Boolean(
|
|
136
|
-
selectedApplication?.roles.includes("api") || selectedApplication?.config.surfaces?.api?.enabled === true || selectedApplication?.config.services?.api?.enabled !== false && selectedApplication?.config.services?.api
|
|
168
|
+
selectedApplication?.roles.includes("api") || selectedApplication?.config.surfaces?.api?.enabled === true || selectedApplication?.config.services?.api?.enabled !== false && selectedApplication?.config.services?.api || selectedAppId === "web" && workspaceHasApiApplication || selectedAppId === "web" && (deployConfig.surfaces?.api?.enabled === true || deployConfig.services?.api?.enabled !== false && deployConfig.services?.api)
|
|
137
169
|
);
|
|
138
170
|
const selectedWeb = webCheckConfig(deployConfig, selectedApplication);
|
|
139
171
|
const web = selectedWeb.web;
|
|
@@ -179,7 +211,7 @@ function collectTreeseedHostedServiceChecks(options) {
|
|
|
179
211
|
}));
|
|
180
212
|
}
|
|
181
213
|
}
|
|
182
|
-
const configuredServices = configuredRailwayServices(tenantRoot, target).filter((service) => !selectedAppId || service.application?.id === selectedAppId);
|
|
214
|
+
const configuredServices = configuredRailwayServices(tenantRoot, target).filter((service) => !selectedAppId || service.application?.id === selectedAppId).filter((service) => selectedServiceKeys.size === 0 || selectedServiceKeys.has(service.key));
|
|
183
215
|
for (const service of configuredServices) {
|
|
184
216
|
const serviceType = serviceTypeFor(service.key);
|
|
185
217
|
const observed = observedFor(options, service.serviceName);
|
|
@@ -197,8 +229,9 @@ function collectTreeseedHostedServiceChecks(options) {
|
|
|
197
229
|
issues: observed ? [] : ["No live Railway observation was provided."]
|
|
198
230
|
}));
|
|
199
231
|
for (const [key, expected] of Object.entries({
|
|
200
|
-
rootDirectory: expectedRootDirectory,
|
|
232
|
+
rootDirectory: railwayServiceUsesImageSource(service) ? null : expectedRootDirectory,
|
|
201
233
|
buildCommand: service.buildCommand,
|
|
234
|
+
dockerfilePath: service.dockerfilePath,
|
|
202
235
|
startCommand: service.startCommand,
|
|
203
236
|
healthcheckPath: service.healthcheckPath,
|
|
204
237
|
healthcheckTimeoutSeconds: service.healthcheckTimeoutSeconds,
|
|
@@ -219,7 +252,81 @@ function collectTreeseedHostedServiceChecks(options) {
|
|
|
219
252
|
issues: !observed || actual === expected ? [] : [`Expected ${key}=${expected}, observed ${actual ?? "(unset)"}.`]
|
|
220
253
|
}));
|
|
221
254
|
}
|
|
222
|
-
if (service
|
|
255
|
+
if (!railwayServiceUsesImageSource(service) && service.sourceRepo) {
|
|
256
|
+
const actualRepo = observed?.deploymentRepo ?? null;
|
|
257
|
+
const actualBranch = observed?.deploymentBranch ?? null;
|
|
258
|
+
const actualRootDirectory = observed?.deploymentRootDirectory ?? null;
|
|
259
|
+
const sourceUploadDeployment = target === "staging" && actualRepo === null && actualBranch === null && observed?.deploymentHealthy === true;
|
|
260
|
+
checks.push(check({
|
|
261
|
+
id: `railway:${service.instanceKey}:deployment-repo`,
|
|
262
|
+
provider: "railway",
|
|
263
|
+
serviceKey: service.key,
|
|
264
|
+
serviceType,
|
|
265
|
+
target,
|
|
266
|
+
description: `Railway ${service.serviceName} latest deployment uses the desired Git repo.`,
|
|
267
|
+
expected: { repo: service.sourceRepo },
|
|
268
|
+
observed: observed ? { repo: actualRepo, sourceUpload: sourceUploadDeployment } : { skipped: true },
|
|
269
|
+
status: observed ? sourceUploadDeployment ? "passed" : statusForMatch(actualRepo, service.sourceRepo) : "skipped",
|
|
270
|
+
issues: !observed || sourceUploadDeployment || actualRepo === service.sourceRepo ? [] : [`Expected deployment repo=${service.sourceRepo}, observed ${actualRepo ?? "(unset)"}.`]
|
|
271
|
+
}));
|
|
272
|
+
if (service.sourceBranch) {
|
|
273
|
+
checks.push(check({
|
|
274
|
+
id: `railway:${service.instanceKey}:deployment-branch`,
|
|
275
|
+
provider: "railway",
|
|
276
|
+
serviceKey: service.key,
|
|
277
|
+
serviceType,
|
|
278
|
+
target,
|
|
279
|
+
description: `Railway ${service.serviceName} latest deployment uses the desired Git branch.`,
|
|
280
|
+
expected: { branch: service.sourceBranch },
|
|
281
|
+
observed: observed ? { branch: actualBranch, commitHash: observed.deploymentCommitHash ?? null, sourceUpload: sourceUploadDeployment } : { skipped: true },
|
|
282
|
+
status: observed ? sourceUploadDeployment ? "passed" : statusForMatch(actualBranch, service.sourceBranch) : "skipped",
|
|
283
|
+
issues: !observed || sourceUploadDeployment || actualBranch === service.sourceBranch ? [] : [`Expected deployment branch=${service.sourceBranch}, observed ${actualBranch ?? "(unset)"}.`]
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
286
|
+
if (expectedRootDirectory) {
|
|
287
|
+
checks.push(check({
|
|
288
|
+
id: `railway:${service.instanceKey}:deployment-root-directory`,
|
|
289
|
+
provider: "railway",
|
|
290
|
+
serviceKey: service.key,
|
|
291
|
+
serviceType,
|
|
292
|
+
target,
|
|
293
|
+
description: `Railway ${service.serviceName} latest deployment uses the desired Git root directory.`,
|
|
294
|
+
expected: { rootDirectory: expectedRootDirectory },
|
|
295
|
+
observed: observed ? { rootDirectory: actualRootDirectory } : { skipped: true },
|
|
296
|
+
status: observed ? statusForMatch(actualRootDirectory, expectedRootDirectory) : "skipped",
|
|
297
|
+
issues: !observed || actualRootDirectory === expectedRootDirectory ? [] : [`Expected deployment rootDirectory=${expectedRootDirectory}, observed ${actualRootDirectory ?? "(unset)"}.`]
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (observed && observed.deploymentHealthy === false) {
|
|
302
|
+
checks.push(check({
|
|
303
|
+
id: `railway:${service.instanceKey}:deployment`,
|
|
304
|
+
provider: "railway",
|
|
305
|
+
serviceKey: service.key,
|
|
306
|
+
serviceType,
|
|
307
|
+
target,
|
|
308
|
+
description: `Railway ${service.serviceName} latest deployment is healthy.`,
|
|
309
|
+
expected: { healthy: true },
|
|
310
|
+
observed: { healthy: false, status: observed.deploymentStatus ?? null },
|
|
311
|
+
status: "failed",
|
|
312
|
+
issues: [`Latest Railway deployment status is ${observed.deploymentStatus ?? "unknown"}.`]
|
|
313
|
+
}));
|
|
314
|
+
} else if (observed) {
|
|
315
|
+
checks.push(check({
|
|
316
|
+
id: `railway:${service.instanceKey}:deployment`,
|
|
317
|
+
provider: "railway",
|
|
318
|
+
serviceKey: service.key,
|
|
319
|
+
serviceType,
|
|
320
|
+
target,
|
|
321
|
+
description: `Railway ${service.serviceName} latest deployment is healthy.`,
|
|
322
|
+
expected: { healthy: true },
|
|
323
|
+
observed: { healthy: observed.deploymentHealthy ?? null, status: observed.deploymentStatus ?? null },
|
|
324
|
+
status: observed.deploymentHealthy === true ? "passed" : "skipped",
|
|
325
|
+
issues: observed.deploymentHealthy === true ? [] : ["No live Railway deployment health observation was provided."]
|
|
326
|
+
}));
|
|
327
|
+
}
|
|
328
|
+
if (service.volumeMountPath) {
|
|
329
|
+
const volumeAttached = Boolean(observed?.volumeId) && observed?.volumeMountPath === service.volumeMountPath && (!observed?.serviceName || !observed?.volumeServiceId || observed.volumeServiceId === observed.serviceId) && observed?.volumePendingDeletion !== true && !(typeof observed?.volumeDeletedAt === "string" && observed.volumeDeletedAt.trim()) && !["DELETING", "DELETED"].includes(String(observed?.volumeState ?? "").toUpperCase());
|
|
223
330
|
checks.push(check({
|
|
224
331
|
id: `railway:${service.instanceKey}:volume`,
|
|
225
332
|
provider: "railway",
|
|
@@ -228,9 +335,53 @@ function collectTreeseedHostedServiceChecks(options) {
|
|
|
228
335
|
target,
|
|
229
336
|
description: `Railway ${service.serviceName} volume mount matches config.`,
|
|
230
337
|
expected: { volumeMountPath: service.volumeMountPath },
|
|
231
|
-
observed: observed ? {
|
|
232
|
-
|
|
233
|
-
|
|
338
|
+
observed: observed ? {
|
|
339
|
+
volumeName: observed.volumeName ?? null,
|
|
340
|
+
volumeId: observed.volumeId ?? null,
|
|
341
|
+
volumeMountPath: observed.volumeMountPath ?? null,
|
|
342
|
+
volumeServiceId: observed.volumeServiceId ?? null,
|
|
343
|
+
volumeEnvironmentId: observed.volumeEnvironmentId ?? null,
|
|
344
|
+
volumeState: observed.volumeState ?? null,
|
|
345
|
+
volumePendingDeletion: observed.volumePendingDeletion ?? null,
|
|
346
|
+
volumeDeletedAt: observed.volumeDeletedAt ?? null
|
|
347
|
+
} : { skipped: true },
|
|
348
|
+
status: observed ? volumeAttached ? "passed" : "failed" : "skipped",
|
|
349
|
+
issues: !observed || volumeAttached ? [] : [`Expected an attached persistent volume mounted at ${service.volumeMountPath}, observed ${observed.volumeMountPath ?? "(unset)"} on volume ${observed.volumeName ?? "(none)"}.`]
|
|
350
|
+
}));
|
|
351
|
+
const volumeNotPendingDeletion = observed?.volumePendingDeletion === false && !["DELETING", "DELETED"].includes(String(observed?.volumeState ?? "").toUpperCase());
|
|
352
|
+
checks.push(check({
|
|
353
|
+
id: `railway:${service.instanceKey}:volume-retained`,
|
|
354
|
+
provider: "railway",
|
|
355
|
+
serviceKey: service.key,
|
|
356
|
+
serviceType,
|
|
357
|
+
target,
|
|
358
|
+
description: `Railway ${service.serviceName} volume is retained and active.`,
|
|
359
|
+
expected: { pendingDeletion: false },
|
|
360
|
+
observed: observed ? {
|
|
361
|
+
volumeName: observed.volumeName ?? null,
|
|
362
|
+
volumeId: observed.volumeId ?? null,
|
|
363
|
+
state: observed.volumeState ?? null,
|
|
364
|
+
pendingDeletion: observed.volumePendingDeletion ?? null,
|
|
365
|
+
deletedAt: observed.volumeDeletedAt ?? null
|
|
366
|
+
} : { skipped: true },
|
|
367
|
+
status: observed ? volumeNotPendingDeletion ? "passed" : "failed" : "skipped",
|
|
368
|
+
issues: !observed || volumeNotPendingDeletion ? [] : [`Expected an active retained volume, observed state=${observed.volumeState ?? "(unset)"} pendingDeletion=${String(observed.volumePendingDeletion ?? null)} deletedAt=${observed.volumeDeletedAt ?? "(unset)"}.`]
|
|
369
|
+
}));
|
|
370
|
+
const deploymentHasVolumeMount = observed?.deploymentRequiredMountPath === service.volumeMountPath || (observed?.deploymentVolumeMounts ?? []).includes(service.volumeMountPath);
|
|
371
|
+
checks.push(check({
|
|
372
|
+
id: `railway:${service.instanceKey}:deployment-required-mount`,
|
|
373
|
+
provider: "railway",
|
|
374
|
+
serviceKey: service.key,
|
|
375
|
+
serviceType,
|
|
376
|
+
target,
|
|
377
|
+
description: `Railway ${service.serviceName} deployment metadata includes the volume mount.`,
|
|
378
|
+
expected: { volumeMountPath: service.volumeMountPath },
|
|
379
|
+
observed: observed ? {
|
|
380
|
+
requiredMountPath: observed.deploymentRequiredMountPath ?? null,
|
|
381
|
+
volumeMounts: observed.deploymentVolumeMounts ?? []
|
|
382
|
+
} : { skipped: true },
|
|
383
|
+
status: observed ? deploymentHasVolumeMount ? "passed" : "failed" : "skipped",
|
|
384
|
+
issues: !observed || deploymentHasVolumeMount ? [] : [`Expected deployment metadata to include volume mount ${service.volumeMountPath}.`]
|
|
234
385
|
}));
|
|
235
386
|
}
|
|
236
387
|
for (const key of [...RAILWAY_SECRET_KEYS_BY_SERVICE[service.key] ?? [], ...RAILWAY_VARIABLE_KEYS_BY_SERVICE[service.key] ?? []]) {
|
|
@@ -262,7 +413,7 @@ function collectTreeseedHostedServiceChecks(options) {
|
|
|
262
413
|
...discoverTreeseedApplications(tenantRoot).filter((application) => application.root !== resolve(tenantRoot)).filter((application) => !selectedAppId || application.id === selectedAppId).map((application) => application.config)
|
|
263
414
|
];
|
|
264
415
|
const treeseedDatabaseService = applicationConfigs.map((config) => config.services?.treeseedDatabase).find((service) => service?.enabled !== false);
|
|
265
|
-
if (includeApi && treeseedDatabaseService?.enabled !== false && treeseedDatabaseService?.provider === "railway") {
|
|
416
|
+
if (includeApi && (selectedServiceKeys.size === 0 || selectedServiceKeys.has("treeseedDatabase")) && treeseedDatabaseService?.enabled !== false && treeseedDatabaseService?.provider === "railway") {
|
|
266
417
|
const targets = treeseedDatabaseService.railway?.serviceTargets ?? [];
|
|
267
418
|
checks.push(check({
|
|
268
419
|
id: "railway:treeseedDatabase:targets",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type TreeseedEnvironmentScope } from '../../platform/environment.
|
|
2
|
-
import type { TreeseedReconcileTarget } from '../../reconcile/contracts.
|
|
1
|
+
import { type TreeseedEnvironmentScope } from '../../platform/environment.js';
|
|
2
|
+
import type { TreeseedReconcileTarget } from '../../reconcile/contracts.js';
|
|
3
3
|
export type TreeseedHostingAuditEnvironment = 'current' | 'local' | 'staging' | 'prod';
|
|
4
4
|
export type TreeseedHostingAuditResolvedEnvironment = 'local' | 'staging' | 'prod' | 'preview';
|
|
5
5
|
export type TreeseedHostingAuditHostKind = 'repository' | 'web' | 'email';
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
PRODUCTION_BRANCH,
|
|
21
21
|
STAGING_BRANCH
|
|
22
22
|
} from "./git-workflow.js";
|
|
23
|
-
import {
|
|
23
|
+
import { loadTreeseedPlatformConfig } from "../../platform/config.js";
|
|
24
24
|
import {
|
|
25
25
|
collectTreeseedReconcileStatus,
|
|
26
26
|
reconcileTreeseedTarget
|
|
@@ -110,7 +110,7 @@ function resolveTreeseedHostingAuditTarget({
|
|
|
110
110
|
}
|
|
111
111
|
if (branchName) {
|
|
112
112
|
try {
|
|
113
|
-
const deployConfig =
|
|
113
|
+
const deployConfig = loadTreeseedPlatformConfig({ tenantRoot, environment: "staging", env: process.env }).deployConfig;
|
|
114
114
|
const previewTarget = createBranchPreviewDeployTarget(branchName);
|
|
115
115
|
const previewState = loadDeployState(tenantRoot, deployConfig, { target: previewTarget });
|
|
116
116
|
if (previewState?.previewEnabled === true || previewState?.readiness?.initialized === true || hasValue(previewState?.lastDeployedUrl) || hasValue(previewState?.workerName)) {
|
|
@@ -222,17 +222,17 @@ function appendManualConfigChecks(checks, values, hostKinds) {
|
|
|
222
222
|
id: "web.cloudflare.token",
|
|
223
223
|
hostType: "web",
|
|
224
224
|
provider: "cloudflare",
|
|
225
|
-
keys: ["
|
|
225
|
+
keys: ["TREESEED_CLOUDFLARE_API_TOKEN"],
|
|
226
226
|
label: "Web provider token",
|
|
227
|
-
remediation: "Set
|
|
227
|
+
remediation: "Set TREESEED_CLOUDFLARE_API_TOKEN for TreeSeed-managed Web hosting."
|
|
228
228
|
});
|
|
229
229
|
requiredKeyCheck(checks, values, {
|
|
230
230
|
id: "web.cloudflare.account",
|
|
231
231
|
hostType: "web",
|
|
232
232
|
provider: "cloudflare",
|
|
233
|
-
keys: ["
|
|
233
|
+
keys: ["TREESEED_CLOUDFLARE_ACCOUNT_ID"],
|
|
234
234
|
label: "Web provider account",
|
|
235
|
-
remediation: "Set
|
|
235
|
+
remediation: "Set TREESEED_CLOUDFLARE_ACCOUNT_ID for TreeSeed-managed Web hosting."
|
|
236
236
|
});
|
|
237
237
|
}
|
|
238
238
|
if (hostKinds.includes("email")) {
|
|
@@ -468,7 +468,7 @@ async function runTreeseedHostingAudit({
|
|
|
468
468
|
}) {
|
|
469
469
|
const resolved = resolveTreeseedHostingAuditTarget({ tenantRoot, environment });
|
|
470
470
|
const hostKinds = normalizeHostKinds(requestedHostKinds);
|
|
471
|
-
const deployConfig =
|
|
471
|
+
const deployConfig = loadTreeseedPlatformConfig({ tenantRoot, environment: resolved.scope, env }).deployConfig;
|
|
472
472
|
const seedValues = collectTreeseedConfigSeedValues(tenantRoot, resolved.scope, env, valuesOverlay);
|
|
473
473
|
const suggestedValues = getTreeseedEnvironmentSuggestedValues({
|
|
474
474
|
scope: resolved.scope,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type KnowledgeHubProviderLaunchInput, type KnowledgeHubProviderLaunchResult } from './hub-provider-launch.
|
|
1
|
+
import { type KnowledgeHubProviderLaunchInput, type KnowledgeHubProviderLaunchResult } from './hub-provider-launch.js';
|
|
2
2
|
export type KnowledgeHubSourceKind = 'blank_hub' | 'template' | 'knowledge_pack' | 'market_listing';
|
|
3
3
|
export type KnowledgeHubRepositoryTopology = 'split_software_content' | 'combined_compatibility';
|
|
4
4
|
export type KnowledgeHubRepositoryRole = 'software' | 'content' | 'parent_workspace';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { checkTreeseedProviderConnections, syncTreeseedGitHubEnvironment } from './config-runtime.
|
|
2
|
-
import { configuredRailwayServices, deployRailwayService, ensureRailwayScheduledJobs, verifyRailwayScheduledJobs } from './railway-deploy.
|
|
3
|
-
import { type ProjectLaunchSecretSyncResult } from './template-secret-sync.
|
|
4
|
-
import { buildKnowledgePackMarketPackage, buildTemplateMarketPackage } from './market-packaging.
|
|
5
|
-
import type { ProjectLaunchConfigWritePlanItem, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.
|
|
1
|
+
import { checkTreeseedProviderConnections, syncTreeseedGitHubEnvironment } from './config-runtime.js';
|
|
2
|
+
import { configuredRailwayServices, deployRailwayService, ensureRailwayScheduledJobs, verifyRailwayScheduledJobs } from './railway-deploy.js';
|
|
3
|
+
import { type ProjectLaunchSecretSyncResult } from './template-secret-sync.js';
|
|
4
|
+
import { buildKnowledgePackMarketPackage, buildTemplateMarketPackage } from './market-packaging.js';
|
|
5
|
+
import type { ProjectLaunchConfigWritePlanItem, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.js';
|
|
6
6
|
export type KnowledgeHubProviderLaunchFailurePhase = 'repo_provision_failed' | 'content_bootstrap_failed' | 'workflow_bootstrap_failed' | 'hosting_registration_failed' | 'host_binding_secret_sync_failed' | 'runtime_connection_failed';
|
|
7
7
|
export interface KnowledgeHubProviderLaunchInput {
|
|
8
8
|
projectId: string;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { cpSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync, existsSync } from "node:fs";
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
3
|
import { dirname, join, resolve } from "node:path";
|
|
5
4
|
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
6
5
|
import { collectTreeseedReconcileStatus, reconcileTreeseedTarget } from "../../reconcile/index.js";
|
|
@@ -18,6 +17,7 @@ import { loadCliDeployConfig } from "./runtime-tools.js";
|
|
|
18
17
|
import { templateCatalogRoot } from "./runtime-paths.js";
|
|
19
18
|
import { scaffoldTemplateProject } from "./template-registry.js";
|
|
20
19
|
import { applyProjectLaunchHostBindingConfig } from "./template-host-bindings.js";
|
|
20
|
+
import { runTreeseedGit } from "./git-runner.js";
|
|
21
21
|
import {
|
|
22
22
|
ProjectLaunchSecretSyncError,
|
|
23
23
|
syncProjectLaunchHostBindingSecrets
|
|
@@ -70,19 +70,24 @@ function ensureDir(path) {
|
|
|
70
70
|
mkdirSync(path, { recursive: true });
|
|
71
71
|
}
|
|
72
72
|
function runGit(cwd, args, capture = true) {
|
|
73
|
-
const
|
|
73
|
+
const mutating = /^(add|commit|checkout|switch|merge|tag|push|fetch|worktree|submodule|reset|clean|restore|branch)$/u.test(args[0] ?? "");
|
|
74
|
+
const result = runTreeseedGit(args, {
|
|
74
75
|
cwd,
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
mode: mutating ? "mutate" : "read",
|
|
77
|
+
allowFailure: true
|
|
77
78
|
});
|
|
79
|
+
if (!capture && result.stdout.trim()) process.stdout.write(result.stdout);
|
|
80
|
+
if (!capture && result.stderr.trim()) process.stderr.write(result.stderr);
|
|
78
81
|
if (result.status !== 0) {
|
|
79
82
|
if (args[0] === "push" && !args.includes("--force")) {
|
|
80
83
|
const retryArgs = ["push", "--force", ...args.slice(1)];
|
|
81
|
-
const retry =
|
|
84
|
+
const retry = runTreeseedGit(retryArgs, {
|
|
82
85
|
cwd,
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
mode: "mutate",
|
|
87
|
+
allowFailure: true
|
|
85
88
|
});
|
|
89
|
+
if (!capture && retry.stdout.trim()) process.stdout.write(retry.stdout);
|
|
90
|
+
if (!capture && retry.stderr.trim()) process.stderr.write(retry.stderr);
|
|
86
91
|
if (retry.status === 0) return retry;
|
|
87
92
|
const retryDetail = retry.stderr?.trim() || retry.stdout?.trim();
|
|
88
93
|
throw new Error(`git ${retryArgs.join(" ")} failed${retryDetail ? `: ${retryDetail}` : ""}`);
|
|
@@ -292,7 +297,7 @@ This hub is live and ready for the first team release cycle.
|
|
|
292
297
|
}
|
|
293
298
|
function ensureHostedProjectFiles(projectRoot) {
|
|
294
299
|
const sdkApiPackage = ["@treeseed", "sdk/api"].join("/");
|
|
295
|
-
writeText(resolve(projectRoot, "src/api/server.
|
|
300
|
+
writeText(resolve(projectRoot, "src/api/server.ts"), `import { createRailwayTreeseedApiServer } from '${sdkApiPackage}';
|
|
296
301
|
|
|
297
302
|
const server = await createRailwayTreeseedApiServer();
|
|
298
303
|
console.log(\`Treeseed project API listening on \${server.url}\`);
|
|
@@ -340,8 +345,6 @@ function applyManagedProjectDefaults(projectRoot, input) {
|
|
|
340
345
|
accountId: cloudflareAccountId,
|
|
341
346
|
...input.domains?.zoneId ? { zoneId: input.domains.zoneId } : {},
|
|
342
347
|
workerName: slug,
|
|
343
|
-
queueName: `${slug}-agent-work`,
|
|
344
|
-
dlqName: `${slug}-agent-work-dlq`,
|
|
345
348
|
pages: {
|
|
346
349
|
projectName: slug,
|
|
347
350
|
previewProjectName: slug,
|
|
@@ -647,7 +650,7 @@ function scaffoldLaunchSource(projectRoot, input) {
|
|
|
647
650
|
});
|
|
648
651
|
}
|
|
649
652
|
function repositoryHostGitHubEnvOverlay() {
|
|
650
|
-
const token = process.env.
|
|
653
|
+
const token = process.env.TREESEED_GITHUB_TOKEN || process.env.TREESEED_HOSTED_HUBS_GITHUB_TOKEN || "";
|
|
651
654
|
return token ? { ...process.env, GH_TOKEN: token, GITHUB_TOKEN: token } : process.env;
|
|
652
655
|
}
|
|
653
656
|
function prepareKnowledgeHubContentRepositoryRoot(sourceRoot, contentRoot, input) {
|
|
@@ -747,7 +750,9 @@ async function executeKnowledgeHubProviderLaunch(input, options = {}) {
|
|
|
747
750
|
[]
|
|
748
751
|
);
|
|
749
752
|
}
|
|
750
|
-
const
|
|
753
|
+
const launchTempBase = resolve(process.cwd(), ".treeseed", "tmp", "hub-provider-launch");
|
|
754
|
+
mkdirSync(launchTempBase, { recursive: true });
|
|
755
|
+
const workingRoot = mkdtempSync(join(launchTempBase, `hub-provider-launch-${slugify(input.projectSlug, "project")}-`));
|
|
751
756
|
const repoOwner = slugify(input.repoOwner ?? resolveDefaultGitHubOwner(), "treeseed-ai");
|
|
752
757
|
const repoName = slugify(input.repoName ?? input.projectSlug, "project");
|
|
753
758
|
const githubEnv = repositoryHostGitHubEnvOverlay();
|
|
@@ -796,14 +801,14 @@ async function executeKnowledgeHubProviderLaunch(input, options = {}) {
|
|
|
796
801
|
);
|
|
797
802
|
}
|
|
798
803
|
const seed = seedLaunchContent(workingRoot, input);
|
|
799
|
-
packageSourceRoot = mkdtempSync(join(
|
|
804
|
+
packageSourceRoot = mkdtempSync(join(launchTempBase, `market-package-${slugify(input.projectSlug, "project")}-`));
|
|
800
805
|
cpSync(workingRoot, packageSourceRoot, { recursive: true });
|
|
801
806
|
await appendPhase(phases, "content_bootstrap", "completed", "Scaffolded the repo and seeded Direct content.", reportPhase);
|
|
802
807
|
let contentRepository = null;
|
|
803
808
|
let contentRepositoryWorkingRoot = null;
|
|
804
809
|
if (input.contentRepository?.name) {
|
|
805
810
|
await appendPhase(phases, "content_repository", "running", "Creating content repository.", reportPhase);
|
|
806
|
-
contentRepositoryWorkingRoot = mkdtempSync(join(
|
|
811
|
+
contentRepositoryWorkingRoot = mkdtempSync(join(launchTempBase, `market-content-${slugify(input.projectSlug, "project")}-`));
|
|
807
812
|
prepareKnowledgeHubContentRepositoryRoot(workingRoot, contentRepositoryWorkingRoot, input);
|
|
808
813
|
const createdContentRepository = input.contentRepository.url ? {
|
|
809
814
|
...resolveGitHubRemoteUrls(input.contentRepository.owner ?? repoOwner, input.contentRepository.name),
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { type TreeseedHostedServiceCheckReport, type TreeseedHostedServiceTarget } from './hosted-service-checks.
|
|
1
|
+
import { type TreeseedHostedServiceCheckReport, type TreeseedHostedServiceTarget } from './hosted-service-checks.js';
|
|
2
2
|
export interface TreeseedLiveHostedServiceCheckOptions {
|
|
3
3
|
tenantRoot: string;
|
|
4
4
|
target: TreeseedHostedServiceTarget;
|
|
5
5
|
appId?: string;
|
|
6
|
+
serviceKeys?: string[];
|
|
6
7
|
strict?: boolean;
|
|
7
8
|
requireLiveRailway?: boolean;
|
|
8
9
|
requireLiveHttp?: boolean;
|