@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { spawnSync } from "node:child_process";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { runTreeseedGit } from "./git-runner.js";
|
|
4
|
+
import { mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
|
|
5
5
|
import { basename, extname, join, resolve } from "node:path";
|
|
6
6
|
import { elapsedMs, formatTimingMarkdown, formatTimingSummary } from "../../timing.js";
|
|
7
7
|
import {
|
|
@@ -44,11 +44,10 @@ import {
|
|
|
44
44
|
} from "./railway-deploy.js";
|
|
45
45
|
import { loadCliDeployConfig, packageScriptPath } from "./runtime-tools.js";
|
|
46
46
|
import { resolveTreeseedToolCommand } from "../../managed-dependencies.js";
|
|
47
|
-
import { CloudflareQueuePullClient, CloudflareQueuePushClient } from "../../remote.js";
|
|
48
47
|
import { runPrefixedCommand, runTreeseedBootstrapDag, sleep, writeTreeseedBootstrapLine } from "./bootstrap-runner.js";
|
|
49
48
|
import { runTenantDeployPreflight } from "./save-deploy-preflight.js";
|
|
50
49
|
const PROJECT_PLATFORM_BOOTSTRAP_SYSTEMS = ["data", "web", "api", "agents"];
|
|
51
|
-
const WEB_PLATFORM_BOOTSTRAP_SYSTEMS =
|
|
50
|
+
const WEB_PLATFORM_BOOTSTRAP_SYSTEMS = ["data", "web"];
|
|
52
51
|
const PROCESSING_PLATFORM_BOOTSTRAP_SYSTEMS = ["api", "agents"];
|
|
53
52
|
function stableHash(value) {
|
|
54
53
|
return createHash("sha256").update(value).digest("hex");
|
|
@@ -63,6 +62,13 @@ function recordTiming(timings, name, startMs, status = "success", metadata) {
|
|
|
63
62
|
timings.push(entry);
|
|
64
63
|
return entry;
|
|
65
64
|
}
|
|
65
|
+
function writeWorkflowStatus(message) {
|
|
66
|
+
if (!process.env.TREESEED_WORKFLOW_ACTION && !process.env.TREESEED_WORKFLOW_DEBUG) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
process.stderr.write(`[project-platform] ${message}
|
|
70
|
+
`);
|
|
71
|
+
}
|
|
66
72
|
async function timedPhase(timings, name, run, metadata) {
|
|
67
73
|
const startMs = performance.now();
|
|
68
74
|
try {
|
|
@@ -104,18 +110,18 @@ function resolveScope(environment) {
|
|
|
104
110
|
return scope;
|
|
105
111
|
}
|
|
106
112
|
function currentCommit(tenantRoot) {
|
|
107
|
-
const result =
|
|
113
|
+
const result = runTreeseedGit(["rev-parse", "HEAD"], {
|
|
108
114
|
cwd: tenantRoot,
|
|
109
|
-
|
|
110
|
-
|
|
115
|
+
mode: "read",
|
|
116
|
+
allowFailure: true
|
|
111
117
|
});
|
|
112
118
|
return result.status === 0 ? result.stdout.trim() : null;
|
|
113
119
|
}
|
|
114
120
|
function currentRef(tenantRoot) {
|
|
115
|
-
const result =
|
|
121
|
+
const result = runTreeseedGit(["rev-parse", "--abbrev-ref", "HEAD"], {
|
|
116
122
|
cwd: tenantRoot,
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
mode: "read",
|
|
124
|
+
allowFailure: true
|
|
119
125
|
});
|
|
120
126
|
return result.status === 0 ? result.stdout.trim() : null;
|
|
121
127
|
}
|
|
@@ -365,6 +371,11 @@ function writeTempFile(root, name, body) {
|
|
|
365
371
|
writeFileSync(filePath, body);
|
|
366
372
|
return filePath;
|
|
367
373
|
}
|
|
374
|
+
function projectPlatformTempRoot(tenantRoot, scope) {
|
|
375
|
+
const base = resolve(tenantRoot, ".treeseed", "tmp", scope);
|
|
376
|
+
mkdirSync(base, { recursive: true });
|
|
377
|
+
return base;
|
|
378
|
+
}
|
|
368
379
|
function toBuffer(body) {
|
|
369
380
|
if (typeof body === "string") {
|
|
370
381
|
return Buffer.from(body);
|
|
@@ -375,7 +386,7 @@ function toBuffer(body) {
|
|
|
375
386
|
return Buffer.from(body.buffer, body.byteOffset, body.byteLength);
|
|
376
387
|
}
|
|
377
388
|
function readR2JsonObject(tenantRoot, bucketName, objectKey, wranglerPath, wranglerEnv) {
|
|
378
|
-
const tempRoot = mkdtempSync(join(
|
|
389
|
+
const tempRoot = mkdtempSync(join(projectPlatformTempRoot(tenantRoot, "r2-read"), "treeseed-r2-read-"));
|
|
379
390
|
const filePath = resolve(tempRoot, basename(objectKey) || "payload.json");
|
|
380
391
|
try {
|
|
381
392
|
const result = runWrangler(tenantRoot, [
|
|
@@ -615,20 +626,6 @@ async function probeHttp(url, { attempts = 1, delayMs = 2e3 } = {}) {
|
|
|
615
626
|
}
|
|
616
627
|
return result;
|
|
617
628
|
}
|
|
618
|
-
function queueClientConfig(siteConfig, state) {
|
|
619
|
-
const accountId = String(process.env.CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim();
|
|
620
|
-
const queueId = state.queues?.agentWork?.queueId;
|
|
621
|
-
const token = process.env.TREESEED_QUEUE_PUSH_TOKEN?.trim() || process.env.TREESEED_QUEUE_PULL_TOKEN?.trim() || process.env.CLOUDFLARE_API_TOKEN?.trim() || "";
|
|
622
|
-
if (!accountId || !queueId || !token) {
|
|
623
|
-
return null;
|
|
624
|
-
}
|
|
625
|
-
return {
|
|
626
|
-
accountId,
|
|
627
|
-
queueId,
|
|
628
|
-
token,
|
|
629
|
-
apiBaseUrl: process.env.TREESEED_QUEUE_API_BASE_URL?.trim() || void 0
|
|
630
|
-
};
|
|
631
|
-
}
|
|
632
629
|
function findFirstMatchingString(value, matcher, seen = /* @__PURE__ */ new Set()) {
|
|
633
630
|
if (typeof value === "string") {
|
|
634
631
|
return matcher(value) ? value : null;
|
|
@@ -658,10 +655,17 @@ function findFirstMatchingString(value, matcher, seen = /* @__PURE__ */ new Set(
|
|
|
658
655
|
return null;
|
|
659
656
|
}
|
|
660
657
|
function resolveImmediatePagesProbeUrl(siteConfig, state, target) {
|
|
658
|
+
if (target.kind === "persistent" && target.scope === "prod" && state.pages?.projectName) {
|
|
659
|
+
return `https://${state.pages.projectName}.pages.dev`;
|
|
660
|
+
}
|
|
661
|
+
const configuredUrl = resolveConfiguredSurfaceBaseUrl(siteConfig, target, "web");
|
|
662
|
+
if (configuredUrl) {
|
|
663
|
+
return configuredUrl;
|
|
664
|
+
}
|
|
661
665
|
if (target.kind === "persistent" && target.scope === "staging" && state.pages?.projectName) {
|
|
662
666
|
return `https://${state.pages?.stagingBranch ?? "staging"}.${state.pages.projectName}.pages.dev`;
|
|
663
667
|
}
|
|
664
|
-
return state.pages?.url ??
|
|
668
|
+
return state.pages?.url ?? siteConfig.siteUrl;
|
|
665
669
|
}
|
|
666
670
|
function resolveImmediateApiProbeUrl(siteConfig, state, target) {
|
|
667
671
|
const configuredUrl = resolveConfiguredSurfaceBaseUrl(siteConfig, target, "api") ?? siteConfig.services?.api?.environments?.[target.kind === "persistent" ? target.scope : "prod"]?.baseUrl ?? siteConfig.services?.api?.publicBaseUrl ?? process.env.TREESEED_API_BASE_URL ?? state.services?.api?.lastDeployedUrl ?? null;
|
|
@@ -696,57 +700,6 @@ function resolveApiMonitorEndpoints(siteConfig, apiBaseUrl) {
|
|
|
696
700
|
processingAgentApi: false
|
|
697
701
|
};
|
|
698
702
|
}
|
|
699
|
-
async function probeQueue(siteConfig, state) {
|
|
700
|
-
const config = queueClientConfig(siteConfig, state);
|
|
701
|
-
if (!config) {
|
|
702
|
-
return { ok: false, skipped: true, reason: "queue_probe_unconfigured" };
|
|
703
|
-
}
|
|
704
|
-
const pushClient = new CloudflareQueuePushClient(config);
|
|
705
|
-
const pullClient = new CloudflareQueuePullClient(config);
|
|
706
|
-
const messageId = `health-${Date.now()}`;
|
|
707
|
-
await pushClient.enqueue({
|
|
708
|
-
message: {
|
|
709
|
-
messageId,
|
|
710
|
-
taskId: messageId,
|
|
711
|
-
workDayId: "health-check",
|
|
712
|
-
agentId: "health-check",
|
|
713
|
-
taskType: "health_check",
|
|
714
|
-
idempotencyKey: messageId,
|
|
715
|
-
payloadRef: "health",
|
|
716
|
-
graphVersion: null,
|
|
717
|
-
budgetHint: 0
|
|
718
|
-
}
|
|
719
|
-
});
|
|
720
|
-
let pulled;
|
|
721
|
-
try {
|
|
722
|
-
pulled = await pullClient.pull({
|
|
723
|
-
batchSize: 1,
|
|
724
|
-
visibilityTimeoutMs: 1e4
|
|
725
|
-
});
|
|
726
|
-
} catch (error) {
|
|
727
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
728
|
-
if (/http_pull mode is enabled/iu.test(detail)) {
|
|
729
|
-
return {
|
|
730
|
-
ok: true,
|
|
731
|
-
skipped: true,
|
|
732
|
-
reason: "queue_push_only",
|
|
733
|
-
messageId,
|
|
734
|
-
detail
|
|
735
|
-
};
|
|
736
|
-
}
|
|
737
|
-
throw error;
|
|
738
|
-
}
|
|
739
|
-
const message = pulled.messages.find((entry) => entry.body?.messageId === messageId) ?? pulled.messages[0] ?? null;
|
|
740
|
-
if (!message) {
|
|
741
|
-
return { ok: false, reason: "queue_pull_empty" };
|
|
742
|
-
}
|
|
743
|
-
await pullClient.ack([message.leaseId]);
|
|
744
|
-
return {
|
|
745
|
-
ok: true,
|
|
746
|
-
messageId,
|
|
747
|
-
attempts: message.attempts
|
|
748
|
-
};
|
|
749
|
-
}
|
|
750
703
|
function r2HealthKey(state) {
|
|
751
704
|
return `${state.content?.manifestKey?.replace(/\/common\.json$/u, "") ?? "health"}/healthchecks/${Date.now()}.json`;
|
|
752
705
|
}
|
|
@@ -763,13 +716,13 @@ function deleteR2Object(tenantRoot, bucketName, objectKey, wranglerPath, wrangle
|
|
|
763
716
|
}
|
|
764
717
|
function probeR2(tenantRoot, siteConfig, state, target) {
|
|
765
718
|
const bucketName = state.content?.bucketName;
|
|
766
|
-
const cloudflareAccountId = String(process.env.
|
|
719
|
+
const cloudflareAccountId = String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim();
|
|
767
720
|
if (!bucketName) {
|
|
768
721
|
return { ok: false, skipped: true, reason: "r2_unconfigured" };
|
|
769
722
|
}
|
|
770
723
|
const { wranglerPath } = ensureGeneratedWranglerConfig(tenantRoot, { target });
|
|
771
724
|
const wranglerEnv = { CLOUDFLARE_ACCOUNT_ID: cloudflareAccountId };
|
|
772
|
-
const tempRoot = mkdtempSync(join(
|
|
725
|
+
const tempRoot = mkdtempSync(join(projectPlatformTempRoot(tenantRoot, "r2-health"), "treeseed-r2-health-"));
|
|
773
726
|
const objectKey = r2HealthKey(state);
|
|
774
727
|
try {
|
|
775
728
|
const payload = JSON.stringify({ ok: true, createdAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
@@ -799,12 +752,10 @@ function probeR2(tenantRoot, siteConfig, state, target) {
|
|
|
799
752
|
}
|
|
800
753
|
}
|
|
801
754
|
function probeScaleConfiguration(siteConfig, state) {
|
|
802
|
-
const
|
|
803
|
-
const
|
|
804
|
-
const marketRunner = state.services?.marketOperationsRunner ?? {};
|
|
805
|
-
const marketRunnerConfig = siteConfig.services?.marketOperationsRunner ?? {};
|
|
755
|
+
const marketRunner = state.services?.operationsRunner ?? {};
|
|
756
|
+
const marketRunnerConfig = siteConfig.services?.operationsRunner ?? {};
|
|
806
757
|
const scalerKind = String(process.env.TREESEED_WORKER_POOL_SCALER ?? "").trim();
|
|
807
|
-
if (marketRunnerConfig.provider === "railway"
|
|
758
|
+
if (marketRunnerConfig.provider === "railway") {
|
|
808
759
|
const runnerServiceId = marketRunner.serviceId ?? null;
|
|
809
760
|
const runnerServiceName = marketRunner.serviceName ?? marketRunnerConfig.railway?.serviceName ?? null;
|
|
810
761
|
return {
|
|
@@ -815,18 +766,18 @@ function probeScaleConfiguration(siteConfig, state) {
|
|
|
815
766
|
runnerKind: "market_operations_runner"
|
|
816
767
|
};
|
|
817
768
|
}
|
|
818
|
-
if (scalerKind !== "railway"
|
|
769
|
+
if (scalerKind !== "railway") {
|
|
819
770
|
return {
|
|
820
771
|
ok: true,
|
|
821
772
|
skipped: true,
|
|
822
773
|
reason: "scaler_unconfigured",
|
|
823
774
|
mocked: true,
|
|
824
|
-
serviceId:
|
|
775
|
+
serviceId: null
|
|
825
776
|
};
|
|
826
777
|
}
|
|
827
|
-
const serviceIdentifier =
|
|
828
|
-
const environmentIdentifier = process.env.TREESEED_RAILWAY_ENVIRONMENT_ID
|
|
829
|
-
const projectIdentifier = process.env.TREESEED_RAILWAY_PROJECT_ID
|
|
778
|
+
const serviceIdentifier = process.env.TREESEED_RAILWAY_WORKER_SERVICE_ID;
|
|
779
|
+
const environmentIdentifier = process.env.TREESEED_RAILWAY_ENVIRONMENT_ID;
|
|
780
|
+
const projectIdentifier = process.env.TREESEED_RAILWAY_PROJECT_ID;
|
|
830
781
|
return {
|
|
831
782
|
ok: Boolean(serviceIdentifier && (environmentIdentifier || projectIdentifier)),
|
|
832
783
|
mocked: true,
|
|
@@ -845,7 +796,7 @@ async function publishContent(options, reporter, publishOptions = {}) {
|
|
|
845
796
|
const previewId = options.previewId ?? `staging-${sanitizeSegment(branchName, "preview")}-${sanitizeSegment(commitSha?.slice(0, 12), "latest")}`;
|
|
846
797
|
const locator = resolveTeamScopedContentLocator(siteConfig, teamId);
|
|
847
798
|
const { wranglerPath } = ensureGeneratedWranglerConfig(options.tenantRoot, { target });
|
|
848
|
-
const wranglerEnv = { CLOUDFLARE_ACCOUNT_ID: String(process.env.
|
|
799
|
+
const wranglerEnv = { CLOUDFLARE_ACCOUNT_ID: String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() };
|
|
849
800
|
const bucketName = String(process.env.TREESEED_CONTENT_BUCKET_NAME ?? siteConfig.cloudflare.r2?.bucketName ?? "").trim();
|
|
850
801
|
if (!bucketName) {
|
|
851
802
|
throw new Error("Treeseed content publish requires TREESEED_CONTENT_BUCKET_NAME to be configured.");
|
|
@@ -948,7 +899,7 @@ async function publishContent(options, reporter, publishOptions = {}) {
|
|
|
948
899
|
contentPurgeUrls.add(absoluteUrl(siteConfig.siteUrl, freshnessPath) ?? "");
|
|
949
900
|
}
|
|
950
901
|
}
|
|
951
|
-
const tempRoot = mkdtempSync(join(
|
|
902
|
+
const tempRoot = mkdtempSync(join(projectPlatformTempRoot(options.tenantRoot, "content-publish"), "treeseed-content-publish-"));
|
|
952
903
|
try {
|
|
953
904
|
if (!options.dryRun) {
|
|
954
905
|
const uploadOptions = {
|
|
@@ -1058,30 +1009,46 @@ async function publishContent(options, reporter, publishOptions = {}) {
|
|
|
1058
1009
|
}
|
|
1059
1010
|
}
|
|
1060
1011
|
async function provisionProjectPlatform(options) {
|
|
1012
|
+
writeWorkflowStatus(`provision:start scope=${options.scope}`);
|
|
1061
1013
|
const timings = [];
|
|
1014
|
+
writeWorkflowStatus("provision:resolve-reporter");
|
|
1062
1015
|
const reporter = resolveReporter(options.tenantRoot, options.reporter);
|
|
1016
|
+
writeWorkflowStatus(`provision:reporter kind=${reporter.kind} enabled=${reporter.enabled ? "true" : "false"}`);
|
|
1063
1017
|
const target = createPersistentDeployTarget(options.scope === "local" ? "staging" : options.scope);
|
|
1018
|
+
writeWorkflowStatus(`provision:target ${deployTargetLabel(target)}`);
|
|
1064
1019
|
const siteConfig = loadCliDeployConfig(options.tenantRoot);
|
|
1020
|
+
writeWorkflowStatus("provision:resolve-bootstrap-systems");
|
|
1065
1021
|
const bootstrapSystems = resolveProjectPlatformBootstrapSystems(options, siteConfig);
|
|
1066
1022
|
const selectedSystems = new Set(bootstrapSystems);
|
|
1067
1023
|
const env = { ...process.env, ...options.env ?? {} };
|
|
1024
|
+
writeWorkflowStatus(`provision:reconcile:start systems=${bootstrapSystems.join(",") || "(none)"}`);
|
|
1068
1025
|
const summary = await timedPhase(timings, "provision:reconcile", () => reconcileTreeseedTarget({
|
|
1069
1026
|
tenantRoot: options.tenantRoot,
|
|
1070
1027
|
target,
|
|
1071
1028
|
env,
|
|
1072
1029
|
systems: bootstrapSystems,
|
|
1073
|
-
write: options.write
|
|
1030
|
+
write: options.write,
|
|
1031
|
+
dryRun: options.dryRun
|
|
1074
1032
|
}));
|
|
1033
|
+
writeWorkflowStatus("provision:reconcile:done");
|
|
1075
1034
|
timings.push(...summary.timings ?? []);
|
|
1035
|
+
writeWorkflowStatus("provision:collect-reconcile-status:start");
|
|
1076
1036
|
const verification = await timedPhase(timings, "provision:collect-reconcile-status", () => collectTreeseedReconcileStatus({
|
|
1077
1037
|
tenantRoot: options.tenantRoot,
|
|
1078
1038
|
target,
|
|
1079
1039
|
env,
|
|
1080
1040
|
systems: bootstrapSystems
|
|
1081
1041
|
}));
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1042
|
+
writeWorkflowStatus("provision:collect-reconcile-status:done");
|
|
1043
|
+
if (selectedSystems.has("data") || selectedSystems.has("web")) {
|
|
1044
|
+
writeWorkflowStatus("provision:ensure-wrangler-config:start");
|
|
1045
|
+
await timedPhase(timings, "provision:ensure-wrangler-config", () => {
|
|
1046
|
+
ensureGeneratedWranglerConfig(options.tenantRoot, { target });
|
|
1047
|
+
});
|
|
1048
|
+
writeWorkflowStatus("provision:ensure-wrangler-config:done");
|
|
1049
|
+
} else {
|
|
1050
|
+
writeWorkflowStatus("provision:ensure-wrangler-config:skipped");
|
|
1051
|
+
}
|
|
1085
1052
|
const shouldValidateRailway = selectedSystems.has("api") || selectedSystems.has("agents");
|
|
1086
1053
|
const railwayValidation = shouldValidateRailway ? options.scope === "local" ? validateRailwayServiceConfiguration(options.tenantRoot, options.scope) : validateRailwayDeployPrerequisites(options.tenantRoot, options.scope, { env }) : { services: [] };
|
|
1087
1054
|
const railwaySchedules = [];
|
|
@@ -1096,12 +1063,11 @@ async function provisionProjectPlatform(options) {
|
|
|
1096
1063
|
environment: options.scope,
|
|
1097
1064
|
deploymentProfile: siteConfig.hosting?.kind ?? "self_hosted_project",
|
|
1098
1065
|
baseUrl: state.lastDeployedUrl,
|
|
1099
|
-
cloudflareAccountId: String(process.env.
|
|
1066
|
+
cloudflareAccountId: String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() || null,
|
|
1100
1067
|
pagesProjectName: state.pages?.projectName ?? null,
|
|
1101
1068
|
workerName: state.workerName,
|
|
1102
1069
|
r2BucketName: state.content?.bucketName ?? null,
|
|
1103
1070
|
d1DatabaseName: state.d1Databases?.SITE_DATA_DB?.databaseName ?? null,
|
|
1104
|
-
queueName: state.queues?.agentWork?.name ?? null,
|
|
1105
1071
|
railwayProjectName: railwayValidation.services[0]?.projectName ?? null,
|
|
1106
1072
|
metadata: {
|
|
1107
1073
|
target: deployTargetLabel(target),
|
|
@@ -1157,14 +1123,6 @@ async function provisionProjectPlatform(options) {
|
|
|
1157
1123
|
logicalName: state.d1Databases?.SITE_DATA_DB?.databaseName ?? "site-data",
|
|
1158
1124
|
locator: state.d1Databases?.SITE_DATA_DB?.databaseId ?? null,
|
|
1159
1125
|
metadata: state.d1Databases?.SITE_DATA_DB ?? {}
|
|
1160
|
-
},
|
|
1161
|
-
{
|
|
1162
|
-
environment: options.scope,
|
|
1163
|
-
provider: "cloudflare",
|
|
1164
|
-
resourceKind: "queue",
|
|
1165
|
-
logicalName: state.queues?.agentWork?.name ?? "agent-work",
|
|
1166
|
-
locator: state.queues?.agentWork?.binding ?? null,
|
|
1167
|
-
metadata: state.queues?.agentWork ?? {}
|
|
1168
1126
|
}
|
|
1169
1127
|
];
|
|
1170
1128
|
for (const resource of resourceReports) {
|
|
@@ -1239,16 +1197,22 @@ async function provisionProjectPlatform(options) {
|
|
|
1239
1197
|
};
|
|
1240
1198
|
}
|
|
1241
1199
|
async function deployProjectPlatform(options) {
|
|
1200
|
+
writeWorkflowStatus(`deploy:start scope=${options.scope} dryRun=${options.dryRun ? "true" : "false"}`);
|
|
1242
1201
|
const timings = [];
|
|
1243
1202
|
const deployStartMs = performance.now();
|
|
1203
|
+
writeWorkflowStatus("deploy:resolve-reporter");
|
|
1244
1204
|
const reporter = resolveReporter(options.tenantRoot, options.reporter);
|
|
1205
|
+
writeWorkflowStatus(`deploy:reporter kind=${reporter.kind} enabled=${reporter.enabled ? "true" : "false"}`);
|
|
1245
1206
|
const commitSha = currentCommit(options.tenantRoot);
|
|
1246
1207
|
const branchName = currentRef(options.tenantRoot);
|
|
1208
|
+
writeWorkflowStatus("deploy:resolve-bootstrap-systems");
|
|
1247
1209
|
const bootstrapSystems = resolveProjectPlatformBootstrapSystems(options);
|
|
1248
1210
|
const selectedSystems = new Set(bootstrapSystems);
|
|
1249
1211
|
const execution = options.bootstrapExecution ?? "parallel";
|
|
1250
1212
|
const write = options.write;
|
|
1251
1213
|
const env = { ...process.env, ...options.env ?? {} };
|
|
1214
|
+
writeWorkflowStatus(`deploy:bootstrap-systems ${bootstrapSystems.join(",") || "(none)"}`);
|
|
1215
|
+
writeWorkflowStatus("deploy:report-running");
|
|
1252
1216
|
await reportDeployment(reporter, {
|
|
1253
1217
|
environment: options.scope,
|
|
1254
1218
|
deploymentKind: "code",
|
|
@@ -1258,9 +1222,12 @@ async function deployProjectPlatform(options) {
|
|
|
1258
1222
|
triggeredByType: "project_runner",
|
|
1259
1223
|
metadata: { scope: options.scope }
|
|
1260
1224
|
});
|
|
1225
|
+
writeWorkflowStatus("deploy:reported-running");
|
|
1261
1226
|
if (!options.skipProvision) {
|
|
1227
|
+
writeWorkflowStatus("deploy:provision:start");
|
|
1262
1228
|
const provision = await timedPhase(timings, "deploy:provision", () => provisionProjectPlatform({ ...options, reporter, bootstrapSystems }));
|
|
1263
1229
|
timings.push(...provision.timings ?? []);
|
|
1230
|
+
writeWorkflowStatus("deploy:provision:done");
|
|
1264
1231
|
}
|
|
1265
1232
|
const nodes = [];
|
|
1266
1233
|
let cloudflareContext = null;
|
|
@@ -1474,14 +1441,14 @@ async function monitorProjectPlatform(options) {
|
|
|
1474
1441
|
const skippedApiCheck = apiSelected ? { ok: false, skipped: true, reason: "api_url_unconfigured" } : { ok: true, skipped: true, reason: "api_not_selected" };
|
|
1475
1442
|
const skippedAgentCheck = agentsSelected ? { ok: false, skipped: true, reason: "api_url_unconfigured" } : { ok: true, skipped: true, reason: "agents_not_selected" };
|
|
1476
1443
|
const skippedD1Check = apiMonitorEndpoints.processingAgentApi ? { ok: true, skipped: true, reason: "processing_agent_api" } : skippedApiCheck;
|
|
1444
|
+
const pagesProbeOptions = options.scope === "prod" ? { attempts: 18, delayMs: 1e4 } : { attempts: 3, delayMs: 5e3 };
|
|
1477
1445
|
const checks = {
|
|
1478
|
-
pages: timedPhase(timings, "monitor:probe-pages", () => probeHttp(webProbeUrl,
|
|
1446
|
+
pages: timedPhase(timings, "monitor:probe-pages", () => probeHttp(webProbeUrl, pagesProbeOptions)),
|
|
1479
1447
|
apiHealth: apiSelected && apiMonitorEndpoints.apiHealth ? timedPhase(timings, "monitor:probe-api-health", () => probeHttp(apiMonitorEndpoints.apiHealth, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedApiCheck),
|
|
1480
1448
|
apiReady: apiSelected && apiMonitorEndpoints.apiReady ? timedPhase(timings, "monitor:probe-api-ready", () => probeHttp(apiMonitorEndpoints.apiReady, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedApiCheck),
|
|
1481
1449
|
d1Health: apiSelected && apiMonitorEndpoints.d1Health ? timedPhase(timings, "monitor:probe-d1-health", () => probeHttp(apiMonitorEndpoints.d1Health, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedD1Check),
|
|
1482
1450
|
agentHealth: agentsSelected && apiMonitorEndpoints.agentHealth ? timedPhase(timings, "monitor:probe-agent-health", () => probeHttp(apiMonitorEndpoints.agentHealth, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedAgentCheck),
|
|
1483
1451
|
r2: options.dryRun ? Promise.resolve({ ok: true, skipped: true, reason: "dry_run" }) : timedPhase(timings, "monitor:probe-r2", () => probeR2(options.tenantRoot, siteConfig, state, target)),
|
|
1484
|
-
queue: options.dryRun ? Promise.resolve({ ok: true, skipped: true, reason: "dry_run" }) : timedPhase(timings, "monitor:probe-queue", () => probeQueue(siteConfig, state)),
|
|
1485
1452
|
scaleProbe: timedPhase(timings, "monitor:probe-scale", () => probeScaleConfiguration(siteConfig, state)),
|
|
1486
1453
|
railwayResources: Promise.resolve(railwayResourcesPromise),
|
|
1487
1454
|
readiness: state.readiness,
|
|
@@ -1499,7 +1466,6 @@ async function monitorProjectPlatform(options) {
|
|
|
1499
1466
|
d1Health: await checks.d1Health,
|
|
1500
1467
|
agentHealth: await checks.agentHealth,
|
|
1501
1468
|
r2: await checks.r2,
|
|
1502
|
-
queue: await checks.queue,
|
|
1503
1469
|
scaleProbe: await checks.scaleProbe,
|
|
1504
1470
|
railwayResources: await checks.railwayResources
|
|
1505
1471
|
};
|
|
@@ -1510,7 +1476,6 @@ async function monitorProjectPlatform(options) {
|
|
|
1510
1476
|
resolvedChecks.d1Health,
|
|
1511
1477
|
resolvedChecks.agentHealth,
|
|
1512
1478
|
resolvedChecks.r2,
|
|
1513
|
-
resolvedChecks.queue,
|
|
1514
1479
|
resolvedChecks.scaleProbe,
|
|
1515
1480
|
resolvedChecks.railwayResources
|
|
1516
1481
|
].every((check) => check?.ok === true || check?.skipped === true);
|
|
@@ -1550,12 +1515,11 @@ async function syncControlPlaneState(options) {
|
|
|
1550
1515
|
environment: options.scope,
|
|
1551
1516
|
deploymentProfile: siteConfig.hosting?.kind ?? "self_hosted_project",
|
|
1552
1517
|
baseUrl: state.lastDeployedUrl,
|
|
1553
|
-
cloudflareAccountId: String(process.env.
|
|
1518
|
+
cloudflareAccountId: String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() || null,
|
|
1554
1519
|
pagesProjectName: state.pages?.projectName ?? null,
|
|
1555
1520
|
workerName: state.workerName,
|
|
1556
1521
|
r2BucketName: state.content?.bucketName ?? null,
|
|
1557
1522
|
d1DatabaseName: state.d1Databases?.SITE_DATA_DB?.databaseName ?? null,
|
|
1558
|
-
queueName: state.queues?.agentWork?.name ?? null,
|
|
1559
1523
|
railwayProjectName: state.services.api?.provider === "railway" ? state.services.api?.lastDeployedUrl ?? null : null,
|
|
1560
1524
|
metadata: { target: deployTargetLabel(target) }
|
|
1561
1525
|
});
|
|
@@ -1565,8 +1529,13 @@ async function runProjectPlatformAction(action, options) {
|
|
|
1565
1529
|
const previousWorkflowPlane = process.env.TREESEED_WORKFLOW_PLANE;
|
|
1566
1530
|
process.env.TREESEED_WORKFLOW_ACTION = action;
|
|
1567
1531
|
process.env.TREESEED_WORKFLOW_PLANE = previousWorkflowPlane ?? "all";
|
|
1532
|
+
writeWorkflowStatus(`action:start ${action} scope=${options.scope}`);
|
|
1533
|
+
writeWorkflowStatus("action:apply-environment:start");
|
|
1568
1534
|
applyTreeseedEnvironmentToProcess({ tenantRoot: options.tenantRoot, scope: options.scope, override: true });
|
|
1535
|
+
writeWorkflowStatus("action:apply-environment:done");
|
|
1536
|
+
writeWorkflowStatus("action:resolve-reporter:start");
|
|
1569
1537
|
const reporter = resolveReporter(options.tenantRoot, options.reporter);
|
|
1538
|
+
writeWorkflowStatus(`action:resolve-reporter:done kind=${reporter.kind} enabled=${reporter.enabled ? "true" : "false"}`);
|
|
1570
1539
|
try {
|
|
1571
1540
|
switch (action) {
|
|
1572
1541
|
case "deploy_web":
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type GitHubApiClient } from './github-api.
|
|
2
|
-
import type { ProjectDeploymentEnvironment, ProjectWebMonitorResult } from '../../sdk-types.
|
|
1
|
+
import { type GitHubApiClient } from './github-api.js';
|
|
2
|
+
import type { ProjectDeploymentEnvironment, ProjectWebMonitorResult } from '../../sdk-types.js';
|
|
3
3
|
export declare function buildProjectWebMonitorResult(input: {
|
|
4
4
|
environment: ProjectDeploymentEnvironment;
|
|
5
5
|
action?: string | null;
|
|
@@ -2,6 +2,10 @@ import {
|
|
|
2
2
|
getGitHubWorkflowFileStatus,
|
|
3
3
|
getLatestGitHubWorkflowRun
|
|
4
4
|
} from "./github-api.js";
|
|
5
|
+
import {
|
|
6
|
+
contentRuntimeMetadataFromTarget,
|
|
7
|
+
resolveTreeseedContentRuntimeSource
|
|
8
|
+
} from "../../platform/content-runtime-source.js";
|
|
5
9
|
const FORBIDDEN_MONITOR_FIELDS = /* @__PURE__ */ new Set([
|
|
6
10
|
"capacityProviderId",
|
|
7
11
|
"laneId",
|
|
@@ -56,7 +60,77 @@ function statusFromChecks(checks) {
|
|
|
56
60
|
if (checks.some((entry) => entry.status === "passed")) return "healthy";
|
|
57
61
|
return "unknown";
|
|
58
62
|
}
|
|
63
|
+
function architectureFromTarget(target) {
|
|
64
|
+
const architecture = objectValue(target.architecture);
|
|
65
|
+
const source = text(architecture.contentRuntimeSource);
|
|
66
|
+
if (!source) return null;
|
|
67
|
+
return {
|
|
68
|
+
contentRuntimeSource: source,
|
|
69
|
+
contentPublishTarget: objectValue(architecture.contentPublishTarget)
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function fallbackPublishArchitecture(target, treeDxPublish) {
|
|
73
|
+
const metadata = contentRuntimeMetadataFromTarget(target);
|
|
74
|
+
if (treeDxPublish) {
|
|
75
|
+
return {
|
|
76
|
+
architecture: {
|
|
77
|
+
contentRuntimeSource: "treedx_snapshot",
|
|
78
|
+
contentPublishTarget: objectValue(target.contentPublishTarget)
|
|
79
|
+
},
|
|
80
|
+
metadata
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (metadata.r2.manifestKey || metadata.r2.overlayKey) {
|
|
84
|
+
return {
|
|
85
|
+
architecture: {
|
|
86
|
+
contentRuntimeSource: metadata.r2.overlayKey ? "r2_preview_overlay" : "r2_published_manifest",
|
|
87
|
+
contentPublishTarget: objectValue(target.contentPublishTarget)
|
|
88
|
+
},
|
|
89
|
+
metadata
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
function contentRuntimeCheck(input) {
|
|
95
|
+
if (!input.resolution) {
|
|
96
|
+
return check({
|
|
97
|
+
key: "content_runtime",
|
|
98
|
+
label: "Content runtime",
|
|
99
|
+
status: "skipped",
|
|
100
|
+
source: "sdk",
|
|
101
|
+
summary: "No project content runtime metadata was reported."
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
const status = input.resolution.ready ? "passed" : input.hasRuntimeMetadata ? "warning" : "skipped";
|
|
105
|
+
const source = input.resolution.mode === "r2" ? "r2" : input.resolution.mode === "treedx" ? "treedx" : "sdk";
|
|
106
|
+
const locator = input.resolution.snapshotId ? `snapshot ${input.resolution.snapshotId}` : input.resolution.manifestKey ? `manifest ${input.resolution.manifestKey}` : null;
|
|
107
|
+
return check({
|
|
108
|
+
key: "content_runtime",
|
|
109
|
+
label: "Content runtime",
|
|
110
|
+
status,
|
|
111
|
+
source,
|
|
112
|
+
summary: input.resolution.ready ? `Content runtime will use ${input.resolution.effectiveContentSource}${locator ? ` (${locator})` : ""}.` : input.resolution.diagnostics[0]?.summary ?? "Content runtime metadata is incomplete."
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function summarizeContentPublish(input) {
|
|
116
|
+
if (input.treeDxPublish) {
|
|
117
|
+
return input.contentRuntime?.snapshotId ? `TreeDX content snapshot ${input.contentRuntime.snapshotId} was published to R2 without GitHub Actions.` : "TreeDX content snapshot was published to R2 without GitHub Actions.";
|
|
118
|
+
}
|
|
119
|
+
if (input.action === "publish_content") {
|
|
120
|
+
return input.contentRuntime?.manifestKey ? `Content publish completed for R2 manifest ${input.contentRuntime.manifestKey}.` : "Content publish workflow completed.";
|
|
121
|
+
}
|
|
122
|
+
return "Content publish was not part of this action.";
|
|
123
|
+
}
|
|
59
124
|
function workflowRunCheck(input) {
|
|
125
|
+
if (input.treeDxPublish) {
|
|
126
|
+
return check({
|
|
127
|
+
key: "latest_workflow",
|
|
128
|
+
label: "Latest workflow",
|
|
129
|
+
status: "skipped",
|
|
130
|
+
source: "treedx",
|
|
131
|
+
summary: "TreeDX content publish does not dispatch a GitHub Actions workflow."
|
|
132
|
+
});
|
|
133
|
+
}
|
|
60
134
|
const run = input.workflowResult?.runId ? input.workflowResult : input.latestWorkflowRun;
|
|
61
135
|
if (!run) {
|
|
62
136
|
return check({
|
|
@@ -83,6 +157,15 @@ function workflowRunCheck(input) {
|
|
|
83
157
|
});
|
|
84
158
|
}
|
|
85
159
|
async function workflowFileCheck(input) {
|
|
160
|
+
if (input.treeDxPublish) {
|
|
161
|
+
return check({
|
|
162
|
+
key: "workflow_file",
|
|
163
|
+
label: "Workflow file",
|
|
164
|
+
status: "skipped",
|
|
165
|
+
source: "treedx",
|
|
166
|
+
summary: "TreeDX content publish uses the Treeseed operations runner and Cloudflare R2 directly."
|
|
167
|
+
});
|
|
168
|
+
}
|
|
86
169
|
if (!input.repository) {
|
|
87
170
|
return check({
|
|
88
171
|
key: "workflow_file",
|
|
@@ -179,6 +262,21 @@ async function buildProjectWebMonitorResult(input) {
|
|
|
179
262
|
const repository = repositorySlug(input.repository);
|
|
180
263
|
const workflowFile = text(input.workflowFile ?? input.repository?.workflowFile, "deploy-web.yml");
|
|
181
264
|
const target = objectValue(input.target);
|
|
265
|
+
const contentPublish = objectValue(target.contentPublish);
|
|
266
|
+
const treeDxPublish = input.action === "publish_content" && contentPublish.provider === "treedx";
|
|
267
|
+
const targetArchitecture = architectureFromTarget(target);
|
|
268
|
+
const fallbackArchitecture = fallbackPublishArchitecture(target, treeDxPublish);
|
|
269
|
+
const contentRuntimeMetadata = fallbackArchitecture?.metadata ?? contentRuntimeMetadataFromTarget(target);
|
|
270
|
+
const runtimeArchitecture = targetArchitecture ?? fallbackArchitecture?.architecture ?? null;
|
|
271
|
+
const contentRuntime = runtimeArchitecture ? resolveTreeseedContentRuntimeSource({
|
|
272
|
+
architecture: runtimeArchitecture,
|
|
273
|
+
r2: contentRuntimeMetadata.r2,
|
|
274
|
+
treeDx: contentRuntimeMetadata.treeDx,
|
|
275
|
+
includeLocalPath: false
|
|
276
|
+
}) : null;
|
|
277
|
+
const hasRuntimeMetadata = Boolean(
|
|
278
|
+
targetArchitecture || contentRuntimeMetadata.r2.manifestKey || contentRuntimeMetadata.r2.overlayKey || contentRuntimeMetadata.treeDx.snapshotId || contentRuntimeMetadata.treeDx.libraryId || contentRuntimeMetadata.treeDx.repositoryId
|
|
279
|
+
);
|
|
182
280
|
const targetUrl = externalUrl(target.url, target.baseUrl, target.previewUrl, target.lastDeploymentUrl);
|
|
183
281
|
const latestWorkflowRun = !input.workflowResult && repository && input.githubClient ? await getLatestGitHubWorkflowRun(repository, {
|
|
184
282
|
client: input.githubClient,
|
|
@@ -190,14 +288,16 @@ async function buildProjectWebMonitorResult(input) {
|
|
|
190
288
|
workflowResult: input.workflowResult ?? input.externalWorkflow ?? null,
|
|
191
289
|
latestWorkflowRun,
|
|
192
290
|
repository,
|
|
193
|
-
workflowFile
|
|
291
|
+
workflowFile,
|
|
292
|
+
treeDxPublish
|
|
194
293
|
}),
|
|
195
294
|
await workflowFileCheck({
|
|
196
295
|
repository,
|
|
197
296
|
workflowFile,
|
|
198
297
|
githubClient: input.githubClient,
|
|
199
298
|
mockExternal: input.mockExternal,
|
|
200
|
-
dryRun: input.dryRun
|
|
299
|
+
dryRun: input.dryRun,
|
|
300
|
+
treeDxPublish
|
|
201
301
|
}),
|
|
202
302
|
check({
|
|
203
303
|
key: "web_host",
|
|
@@ -220,12 +320,13 @@ async function buildProjectWebMonitorResult(input) {
|
|
|
220
320
|
mockExternal: input.mockExternal,
|
|
221
321
|
dryRun: input.dryRun
|
|
222
322
|
}),
|
|
323
|
+
contentRuntimeCheck({ resolution: contentRuntime, hasRuntimeMetadata }),
|
|
223
324
|
check({
|
|
224
325
|
key: "content_publish",
|
|
225
326
|
label: "Content publish",
|
|
226
327
|
status: input.action === "publish_content" ? "passed" : "skipped",
|
|
227
|
-
source: "sdk",
|
|
228
|
-
summary: input.action
|
|
328
|
+
source: treeDxPublish ? "treedx" : "sdk",
|
|
329
|
+
summary: summarizeContentPublish({ action: input.action, treeDxPublish, contentRuntime })
|
|
229
330
|
}),
|
|
230
331
|
check({
|
|
231
332
|
key: "d1_migration",
|
|
@@ -251,7 +352,23 @@ async function buildProjectWebMonitorResult(input) {
|
|
|
251
352
|
checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
252
353
|
checks,
|
|
253
354
|
urls,
|
|
254
|
-
warnings
|
|
355
|
+
warnings,
|
|
356
|
+
...contentRuntime ? {
|
|
357
|
+
contentRuntime: {
|
|
358
|
+
contentRuntimeSource: contentRuntime.contentRuntimeSource,
|
|
359
|
+
effectiveContentSource: contentRuntime.effectiveContentSource,
|
|
360
|
+
manifestKey: contentRuntime.manifestKey,
|
|
361
|
+
overlayKey: contentRuntime.overlayKey,
|
|
362
|
+
revision: contentRuntime.revision,
|
|
363
|
+
snapshotId: contentRuntime.snapshotId,
|
|
364
|
+
diagnostics: contentRuntime.diagnostics.map((entry) => ({
|
|
365
|
+
code: entry.code,
|
|
366
|
+
status: entry.status,
|
|
367
|
+
source: entry.source,
|
|
368
|
+
summary: entry.summary
|
|
369
|
+
}))
|
|
370
|
+
}
|
|
371
|
+
} : {}
|
|
255
372
|
};
|
|
256
373
|
return redact(result);
|
|
257
374
|
}
|