@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,5 +1,5 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { runTreeseedGit } from "../operations/services/git-runner.js";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { dirname, resolve } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
@@ -35,6 +35,8 @@ function firstExistingPath(candidates) {
|
|
|
35
35
|
function resolveSdkEnvironmentPath() {
|
|
36
36
|
const candidates = [
|
|
37
37
|
resolve(moduleDir, "env.yaml"),
|
|
38
|
+
resolve(moduleDir, "../../src/platform/env.yaml"),
|
|
39
|
+
resolve(moduleDir, "../../dist/platform/env.yaml"),
|
|
38
40
|
resolve(moduleDir, "../src/platform/env.yaml"),
|
|
39
41
|
resolve(moduleDir, "../dist/platform/env.yaml")
|
|
40
42
|
];
|
|
@@ -48,12 +50,8 @@ function resolveSiblingPackageEnvironmentPath(packageDir) {
|
|
|
48
50
|
resolve(moduleDir, `../../${packageDir}/dist/env.yaml`)
|
|
49
51
|
]);
|
|
50
52
|
}
|
|
51
|
-
const SDK_ENVIRONMENT_PATH = resolveSdkEnvironmentPath();
|
|
52
|
-
const CORE_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("core");
|
|
53
|
-
const API_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("api");
|
|
54
|
-
const AGENT_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("agent");
|
|
55
53
|
const TENANT_ENVIRONMENT_OVERLAY_PATH = "src/env.yaml";
|
|
56
|
-
const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.
|
|
54
|
+
const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.dev";
|
|
57
55
|
function loadOptionalTenantConfig() {
|
|
58
56
|
try {
|
|
59
57
|
return loadTreeseedManifest();
|
|
@@ -117,6 +115,9 @@ function codexExecutionSelected(context) {
|
|
|
117
115
|
const execution = context.deployConfig.providers?.agents?.execution ?? "codex";
|
|
118
116
|
return execution === "codex" || execution === "codex_subscription";
|
|
119
117
|
}
|
|
118
|
+
function copilotExecutionSelected(context) {
|
|
119
|
+
return context.deployConfig.providers?.agents?.execution === "github_copilot";
|
|
120
|
+
}
|
|
120
121
|
function railwayManagedEnabled(context) {
|
|
121
122
|
if (!workflowPlaneAllows("processing")) {
|
|
122
123
|
return false;
|
|
@@ -179,6 +180,13 @@ function contactEmailDefault(context) {
|
|
|
179
180
|
function workdayWindowsDefault() {
|
|
180
181
|
return JSON.stringify([{ days: [1, 2, 3, 4, 5], startTime: "09:00", endTime: "17:00" }]);
|
|
181
182
|
}
|
|
183
|
+
function localApiDatabaseUrlDefault(_context, _scope, values = {}) {
|
|
184
|
+
const port = values.TREESEED_MARKET_LOCAL_POSTGRES_PORT?.trim() || values.TREESEED_API_LOCAL_POSTGRES_PORT?.trim() || process.env.TREESEED_MARKET_LOCAL_POSTGRES_PORT?.trim() || "54329";
|
|
185
|
+
const database = values.TREESEED_MARKET_LOCAL_POSTGRES_DATABASE?.trim() || values.TREESEED_API_LOCAL_POSTGRES_DATABASE?.trim() || "treeseed_api";
|
|
186
|
+
const user = values.TREESEED_MARKET_LOCAL_POSTGRES_USER?.trim() || values.TREESEED_API_LOCAL_POSTGRES_USER?.trim() || "treeseed";
|
|
187
|
+
const password = values.TREESEED_MARKET_LOCAL_POSTGRES_PASSWORD?.trim() || values.TREESEED_API_LOCAL_POSTGRES_PASSWORD?.trim() || "treeseed-local-dev";
|
|
188
|
+
return `postgres://${encodeURIComponent(user)}:${encodeURIComponent(password)}@127.0.0.1:${port}/${encodeURIComponent(database)}`;
|
|
189
|
+
}
|
|
182
190
|
function normalizeUrl(value) {
|
|
183
191
|
return value.trim().replace(/\/$/u, "");
|
|
184
192
|
}
|
|
@@ -208,6 +216,15 @@ function deriveApiDomainFromProjectDomain(domain) {
|
|
|
208
216
|
}
|
|
209
217
|
return `api.${segments.slice(1).join(".")}`;
|
|
210
218
|
}
|
|
219
|
+
function projectDomainsDefault(context, scope) {
|
|
220
|
+
if (scope === "staging") {
|
|
221
|
+
return context.deployConfig.surfaces?.web?.environments?.staging?.domain ?? primaryHostFromUrl(context.deployConfig.surfaces?.web?.environments?.staging?.baseUrl) ?? primaryHostFromUrl(context.deployConfig.siteUrl);
|
|
222
|
+
}
|
|
223
|
+
if (scope === "prod") {
|
|
224
|
+
return context.deployConfig.surfaces?.web?.environments?.prod?.domain ?? primaryHostFromUrl(context.deployConfig.surfaces?.web?.environments?.prod?.baseUrl) ?? primaryHostFromUrl(context.deployConfig.surfaces?.web?.publicBaseUrl) ?? primaryHostFromUrl(context.deployConfig.siteUrl);
|
|
225
|
+
}
|
|
226
|
+
return primaryHostFromUrl(context.deployConfig.siteUrl);
|
|
227
|
+
}
|
|
211
228
|
function resolveConfiguredApiBaseUrl(context, scope, values = {}) {
|
|
212
229
|
const localBaseUrl = context.deployConfig.services?.api?.environments?.local?.baseUrl ?? context.deployConfig.surfaces?.api?.localBaseUrl ?? "http://127.0.0.1:3000";
|
|
213
230
|
if (scope === "local") {
|
|
@@ -284,10 +301,18 @@ function parseGitHubRepositorySlugFromRemote(remoteUrl) {
|
|
|
284
301
|
return null;
|
|
285
302
|
}
|
|
286
303
|
function resolveGitHubOriginRepository(context) {
|
|
287
|
-
const
|
|
304
|
+
const rootResult = runTreeseedGit(["rev-parse", "--show-toplevel"], {
|
|
305
|
+
cwd: context.tenantRoot,
|
|
306
|
+
mode: "read",
|
|
307
|
+
allowFailure: true
|
|
308
|
+
});
|
|
309
|
+
if (rootResult.status !== 0 || resolve(rootResult.stdout.trim()) !== resolve(context.tenantRoot)) {
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
const result = runTreeseedGit(["remote", "get-url", "origin"], {
|
|
288
313
|
cwd: context.tenantRoot,
|
|
289
|
-
|
|
290
|
-
|
|
314
|
+
mode: "read",
|
|
315
|
+
allowFailure: true
|
|
291
316
|
});
|
|
292
317
|
if (result.status !== 0) {
|
|
293
318
|
return null;
|
|
@@ -305,8 +330,9 @@ const VALUE_RESOLVERS = {
|
|
|
305
330
|
localFormsBypassDefault: () => "true",
|
|
306
331
|
localSmtpHostDefault: () => localSmtpHostDefault(),
|
|
307
332
|
localSmtpPortDefault: () => localSmtpPortDefault(),
|
|
333
|
+
localApiDatabaseUrlDefault: (context, scope, values) => localApiDatabaseUrlDefault(context, scope, values),
|
|
308
334
|
contactEmailDefault: (context) => contactEmailDefault(context),
|
|
309
|
-
projectDomainsDefault: (context) =>
|
|
335
|
+
projectDomainsDefault: (context, scope) => projectDomainsDefault(context, scope),
|
|
310
336
|
apiBaseUrlDefault: (context, scope, values) => resolveConfiguredApiBaseUrl(context, scope, values),
|
|
311
337
|
webServiceIdDefault: (_context, _scope, values) => resolveWebServiceId(values),
|
|
312
338
|
apiWebServiceIdDefault: (_context, _scope, values) => resolveApiWebServiceId(values),
|
|
@@ -355,6 +381,7 @@ const PREDICATES = {
|
|
|
355
381
|
processingPlaneEnabled: (context) => processingPlaneEnabled(context),
|
|
356
382
|
formsEnabled: (context) => formsEnabled(context),
|
|
357
383
|
codexExecutionSelected: (context) => codexExecutionSelected(context),
|
|
384
|
+
copilotExecutionSelected: (context) => copilotExecutionSelected(context),
|
|
358
385
|
railwayManagedEnabled: (context) => railwayManagedEnabled(context),
|
|
359
386
|
hubTreeseedHosted: (context) => resolveHubMode(context) === "treeseed_hosted",
|
|
360
387
|
hubCustomerHosted: (context) => resolveHubMode(context) === "customer_hosted",
|
|
@@ -503,25 +530,29 @@ function mergeEntryYaml(baseEntry, id, override) {
|
|
|
503
530
|
}
|
|
504
531
|
function collectOverlaySources(context) {
|
|
505
532
|
const sources = [];
|
|
506
|
-
const
|
|
533
|
+
const sdkEnvironmentPath = resolveSdkEnvironmentPath();
|
|
534
|
+
const sdkOverlay = readYamlOverlayIfPresent(sdkEnvironmentPath);
|
|
507
535
|
if (!sdkOverlay) {
|
|
508
|
-
throw new Error(`Treeseed SDK environment registry file was not found at ${
|
|
536
|
+
throw new Error(`Treeseed SDK environment registry file was not found at ${sdkEnvironmentPath}.`);
|
|
509
537
|
}
|
|
510
|
-
sources.push({ label:
|
|
538
|
+
sources.push({ label: sdkEnvironmentPath, overlay: sdkOverlay });
|
|
511
539
|
if (webSurfaceEnabled(context)) {
|
|
512
|
-
const
|
|
540
|
+
const coreEnvironmentPath = resolveSiblingPackageEnvironmentPath("core");
|
|
541
|
+
const coreOverlay = readYamlOverlayIfPresent(coreEnvironmentPath);
|
|
513
542
|
if (coreOverlay) {
|
|
514
|
-
sources.push({ label:
|
|
543
|
+
sources.push({ label: coreEnvironmentPath, overlay: coreOverlay });
|
|
515
544
|
}
|
|
516
545
|
}
|
|
517
546
|
if (apiSurfaceEnabled(context) || processingPlaneEnabled(context)) {
|
|
518
|
-
const
|
|
547
|
+
const apiEnvironmentPath = resolveSiblingPackageEnvironmentPath("api");
|
|
548
|
+
const apiOverlay = readYamlOverlayIfPresent(apiEnvironmentPath);
|
|
519
549
|
if (apiOverlay) {
|
|
520
|
-
sources.push({ label:
|
|
550
|
+
sources.push({ label: apiEnvironmentPath, overlay: apiOverlay });
|
|
521
551
|
}
|
|
522
|
-
const
|
|
552
|
+
const agentEnvironmentPath = resolveSiblingPackageEnvironmentPath("agent");
|
|
553
|
+
const agentOverlay = readYamlOverlayIfPresent(agentEnvironmentPath);
|
|
523
554
|
if (agentOverlay) {
|
|
524
|
-
sources.push({ label:
|
|
555
|
+
sources.push({ label: agentEnvironmentPath, overlay: agentOverlay });
|
|
525
556
|
}
|
|
526
557
|
}
|
|
527
558
|
let discoveredApiApps = [];
|
|
@@ -530,10 +561,11 @@ function collectOverlaySources(context) {
|
|
|
530
561
|
} catch {
|
|
531
562
|
discoveredApiApps = [];
|
|
532
563
|
}
|
|
533
|
-
|
|
534
|
-
|
|
564
|
+
const discoveredApiEnvironmentPath = resolveSiblingPackageEnvironmentPath("api");
|
|
565
|
+
if (discoveredApiApps.length > 0 && !sources.some((source) => source.label === discoveredApiEnvironmentPath)) {
|
|
566
|
+
const apiOverlay = readYamlOverlayIfPresent(discoveredApiEnvironmentPath);
|
|
535
567
|
if (apiOverlay) {
|
|
536
|
-
sources.push({ label:
|
|
568
|
+
sources.push({ label: discoveredApiEnvironmentPath, overlay: apiOverlay });
|
|
537
569
|
}
|
|
538
570
|
}
|
|
539
571
|
for (const application of discoveredApiApps) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TreeseedDesiredEnvironment, TreeseedDesiredResource } from './desired-state.js';
|
|
2
|
+
export declare const TREESEED_LOCAL_CONTENT_MODES: readonly ["auto", "none", "preview", "edit"];
|
|
3
|
+
export type TreeseedLocalContentMode = typeof TREESEED_LOCAL_CONTENT_MODES[number];
|
|
4
|
+
export type TreeseedLocalContentMaterializationStatus = 'not_requested' | 'existing_path_ready' | 'existing_path_missing' | 'managed_clone_ready' | 'managed_clone_missing' | 'submodule_ready' | 'submodule_missing' | 'site_not_prepared' | 'blocked';
|
|
5
|
+
export declare function buildProjectLocalContentResources({ tenantRoot, environment, localContent, }: {
|
|
6
|
+
tenantRoot: string;
|
|
7
|
+
environment: TreeseedDesiredEnvironment;
|
|
8
|
+
localContent?: TreeseedLocalContentMode;
|
|
9
|
+
}): TreeseedDesiredResource[];
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { existsSync, statSync } from "node:fs";
|
|
2
|
+
import { basename, resolve } from "node:path";
|
|
3
|
+
import { loadAndPlanSeed } from "../seeds/index.js";
|
|
4
|
+
const TREESEED_LOCAL_CONTENT_MODES = ["auto", "none", "preview", "edit"];
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function stringValue(value, fallback = "") {
|
|
9
|
+
return typeof value === "string" && value.trim() ? value.trim() : fallback;
|
|
10
|
+
}
|
|
11
|
+
function safeSegment(value) {
|
|
12
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "") || "project";
|
|
13
|
+
}
|
|
14
|
+
function normalizeRelativePath(value, fallback = ".") {
|
|
15
|
+
const raw = stringValue(value, fallback).replace(/\\/gu, "/").replace(/^\/+/u, "");
|
|
16
|
+
const parts = raw.split("/").filter((part) => part && part !== ".");
|
|
17
|
+
if (parts.some((part) => part === "..")) {
|
|
18
|
+
return fallback;
|
|
19
|
+
}
|
|
20
|
+
return parts.length === 0 ? "." : parts.join("/");
|
|
21
|
+
}
|
|
22
|
+
function pathFrom(root, ...parts) {
|
|
23
|
+
const clean = parts.filter((part) => Boolean(part && part !== "."));
|
|
24
|
+
return resolve(root, ...clean);
|
|
25
|
+
}
|
|
26
|
+
function isPreparedSitePath(path) {
|
|
27
|
+
if (!existsSync(path)) return false;
|
|
28
|
+
const stat = statSync(path);
|
|
29
|
+
if (!stat.isDirectory()) return false;
|
|
30
|
+
return [
|
|
31
|
+
"treeseed.site.yaml",
|
|
32
|
+
"astro.config.ts",
|
|
33
|
+
"astro.config.ts",
|
|
34
|
+
"package.json",
|
|
35
|
+
"src"
|
|
36
|
+
].some((entry) => existsSync(resolve(path, entry)));
|
|
37
|
+
}
|
|
38
|
+
function contentSourceMode(source) {
|
|
39
|
+
if (source === "local_directory") return "local_directory";
|
|
40
|
+
if (source === "treedx_snapshot") return "treedx";
|
|
41
|
+
return "r2";
|
|
42
|
+
}
|
|
43
|
+
function projectRepository(value) {
|
|
44
|
+
if (!isRecord(value)) return null;
|
|
45
|
+
const provider = stringValue(value.provider);
|
|
46
|
+
const owner = stringValue(value.owner);
|
|
47
|
+
const name = stringValue(value.name);
|
|
48
|
+
const gitUrl = stringValue(value.gitUrl);
|
|
49
|
+
const role = stringValue(value.role, "software");
|
|
50
|
+
if (!provider || !owner || !name || !gitUrl) return null;
|
|
51
|
+
return {
|
|
52
|
+
role,
|
|
53
|
+
provider,
|
|
54
|
+
owner,
|
|
55
|
+
name,
|
|
56
|
+
gitUrl,
|
|
57
|
+
defaultBranch: stringValue(value.defaultBranch, "main"),
|
|
58
|
+
checkoutPath: stringValue(value.checkoutPath) || void 0,
|
|
59
|
+
submodulePath: stringValue(value.submodulePath) || void 0,
|
|
60
|
+
webUrl: stringValue(value.webUrl) || void 0
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function projectArchitecture(value) {
|
|
64
|
+
if (!isRecord(value)) return null;
|
|
65
|
+
const topology = stringValue(value.topology);
|
|
66
|
+
const contentRuntimeSource = stringValue(value.contentRuntimeSource);
|
|
67
|
+
const localContentMaterialization = stringValue(value.localContentMaterialization);
|
|
68
|
+
if (!topology || !contentRuntimeSource || !localContentMaterialization) return null;
|
|
69
|
+
return {
|
|
70
|
+
topology,
|
|
71
|
+
rootPath: normalizeRelativePath(value.rootPath),
|
|
72
|
+
sitePath: normalizeRelativePath(value.sitePath),
|
|
73
|
+
contentPath: stringValue(value.contentPath) ? normalizeRelativePath(value.contentPath) : void 0,
|
|
74
|
+
contentRuntimeSource,
|
|
75
|
+
localContentMaterialization,
|
|
76
|
+
contentPublishTarget: isRecord(value.contentPublishTarget) ? value.contentPublishTarget : void 0,
|
|
77
|
+
requiresLocalContentForCi: value.requiresLocalContentForCi === true,
|
|
78
|
+
requiresLocalContentForDeploy: value.requiresLocalContentForDeploy === true
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function hubRepository(value) {
|
|
82
|
+
if (!isRecord(value)) return null;
|
|
83
|
+
const payload = value;
|
|
84
|
+
const projectKey = stringValue(payload.projectKey);
|
|
85
|
+
const role = stringValue(payload.role);
|
|
86
|
+
const provider = stringValue(payload.provider);
|
|
87
|
+
const owner = stringValue(payload.owner);
|
|
88
|
+
const name = stringValue(payload.name);
|
|
89
|
+
const gitUrl = stringValue(payload.gitUrl);
|
|
90
|
+
if (!projectKey || role !== "content" || !provider || !owner || !name || !gitUrl) return null;
|
|
91
|
+
return {
|
|
92
|
+
projectKey,
|
|
93
|
+
role,
|
|
94
|
+
provider,
|
|
95
|
+
owner,
|
|
96
|
+
name,
|
|
97
|
+
gitUrl,
|
|
98
|
+
defaultBranch: stringValue(payload.defaultBranch) || stringValue(payload.currentBranch) || "main",
|
|
99
|
+
submodulePath: stringValue(payload.submodulePath) || void 0
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function requestedMaterialization(architecture, mode) {
|
|
103
|
+
if (mode === "none") return "none";
|
|
104
|
+
if (mode === "preview" || mode === "edit") {
|
|
105
|
+
if (architecture.localContentMaterialization === "none" && architecture.contentRuntimeSource !== "local_directory") {
|
|
106
|
+
return "managed_clone";
|
|
107
|
+
}
|
|
108
|
+
return architecture.localContentMaterialization === "none" ? "managed_clone" : architecture.localContentMaterialization;
|
|
109
|
+
}
|
|
110
|
+
return architecture.localContentMaterialization;
|
|
111
|
+
}
|
|
112
|
+
function buildProjectLocalContentResources({
|
|
113
|
+
tenantRoot,
|
|
114
|
+
environment,
|
|
115
|
+
localContent = "auto"
|
|
116
|
+
}) {
|
|
117
|
+
if (environment !== "local") return [];
|
|
118
|
+
const seed = loadAndPlanSeed({
|
|
119
|
+
projectRoot: tenantRoot,
|
|
120
|
+
seedName: "treeseed",
|
|
121
|
+
environments: "local",
|
|
122
|
+
mode: "plan"
|
|
123
|
+
});
|
|
124
|
+
if (!seed.ok || !seed.plan) return [];
|
|
125
|
+
const contentRepositories = /* @__PURE__ */ new Map();
|
|
126
|
+
for (const action of seed.plan.actions) {
|
|
127
|
+
if (action.kind !== "hubRepository") continue;
|
|
128
|
+
const repo = hubRepository(action.payload);
|
|
129
|
+
if (repo) contentRepositories.set(repo.projectKey, repo);
|
|
130
|
+
}
|
|
131
|
+
return seed.plan.actions.flatMap((action) => {
|
|
132
|
+
if (action.kind !== "project") return [];
|
|
133
|
+
const payload = action.payload;
|
|
134
|
+
const architecture = projectArchitecture(payload.architecture);
|
|
135
|
+
const repository = projectRepository(payload.repository);
|
|
136
|
+
const slug = stringValue(payload.slug, safeSegment(action.key));
|
|
137
|
+
const teamSlug = stringValue(payload.teamKey, "team:treeseed").replace(/^team:/u, "") || "treeseed";
|
|
138
|
+
if (!architecture || !repository) return [];
|
|
139
|
+
const contentRepository = contentRepositories.get(action.key) ?? repository;
|
|
140
|
+
const materialization = requestedMaterialization(architecture, localContent);
|
|
141
|
+
const rootPath = normalizeRelativePath(architecture.rootPath);
|
|
142
|
+
const sitePath = normalizeRelativePath(architecture.sitePath);
|
|
143
|
+
const contentPath = architecture.contentPath ? normalizeRelativePath(architecture.contentPath) : null;
|
|
144
|
+
const repositoryCheckoutPath = normalizeRelativePath(repository.checkoutPath, ".");
|
|
145
|
+
const sourceRepoSlug = `${contentRepository.owner}/${contentRepository.name}`;
|
|
146
|
+
const managedTarget = pathFrom(tenantRoot, ".treeseed", "local-content", safeSegment(teamSlug), safeSegment(slug), "content");
|
|
147
|
+
const existingRoot = pathFrom(tenantRoot, repositoryCheckoutPath, rootPath);
|
|
148
|
+
const effectiveLocalPath = materialization === "managed_clone" ? managedTarget : materialization === "submodule" ? pathFrom(tenantRoot, repositoryCheckoutPath, normalizeRelativePath(contentRepository.submodulePath ?? repository.submodulePath ?? contentPath ?? sitePath)) : materialization === "existing_path" ? pathFrom(existingRoot, contentPath ?? sitePath) : null;
|
|
149
|
+
const siteLocalPath = materialization === "managed_clone" ? pathFrom(managedTarget, sitePath) : pathFrom(existingRoot, sitePath);
|
|
150
|
+
const siteReady = isPreparedSitePath(siteLocalPath);
|
|
151
|
+
const exists = effectiveLocalPath ? existsSync(effectiveLocalPath) : false;
|
|
152
|
+
const materializationStatus = materialization === "none" ? "not_requested" : materialization === "existing_path" ? exists ? siteReady ? "existing_path_ready" : "site_not_prepared" : "existing_path_missing" : materialization === "managed_clone" ? exists ? siteReady ? "managed_clone_ready" : "site_not_prepared" : "managed_clone_missing" : exists ? siteReady ? "submodule_ready" : "site_not_prepared" : "submodule_missing";
|
|
153
|
+
const executeRequested = (localContent === "preview" || localContent === "edit") && (materialization === "managed_clone" || materialization === "submodule");
|
|
154
|
+
return [{
|
|
155
|
+
id: `local-content-materialization:${safeSegment(teamSlug)}:${safeSegment(slug)}:content`,
|
|
156
|
+
kind: "local-content-materialization",
|
|
157
|
+
provider: "local",
|
|
158
|
+
environment,
|
|
159
|
+
packageId: "@treeseed/market",
|
|
160
|
+
serviceId: `content:${slug}`,
|
|
161
|
+
logicalName: `${stringValue(payload.name, slug)} local content materialization`,
|
|
162
|
+
dependencies: architecture.contentRuntimeSource === "treedx_snapshot" && !executeRequested ? ["local-treedx:team-primary"] : [],
|
|
163
|
+
spec: {
|
|
164
|
+
teamKey: stringValue(payload.teamKey, "team:treeseed"),
|
|
165
|
+
teamSlug,
|
|
166
|
+
projectKey: action.key,
|
|
167
|
+
projectSlug: slug,
|
|
168
|
+
projectName: stringValue(payload.name, slug),
|
|
169
|
+
topology: architecture.topology,
|
|
170
|
+
rootPath,
|
|
171
|
+
sitePath,
|
|
172
|
+
contentPath,
|
|
173
|
+
contentRuntimeSource: architecture.contentRuntimeSource,
|
|
174
|
+
contentSourceMode: contentSourceMode(architecture.contentRuntimeSource),
|
|
175
|
+
localContentMaterialization: materialization,
|
|
176
|
+
configuredLocalContentMaterialization: architecture.localContentMaterialization,
|
|
177
|
+
requestedLocalContentMode: localContent,
|
|
178
|
+
executeRequested,
|
|
179
|
+
repository: {
|
|
180
|
+
provider: repository.provider,
|
|
181
|
+
owner: repository.owner,
|
|
182
|
+
name: repository.name,
|
|
183
|
+
gitUrl: repository.gitUrl,
|
|
184
|
+
defaultBranch: repository.defaultBranch ?? "main",
|
|
185
|
+
checkoutPath: repository.checkoutPath ?? null,
|
|
186
|
+
submodulePath: repository.submodulePath ?? null
|
|
187
|
+
},
|
|
188
|
+
contentRepository: {
|
|
189
|
+
provider: contentRepository.provider,
|
|
190
|
+
owner: contentRepository.owner,
|
|
191
|
+
name: contentRepository.name,
|
|
192
|
+
gitUrl: contentRepository.gitUrl,
|
|
193
|
+
defaultBranch: contentRepository.defaultBranch ?? repository.defaultBranch ?? "main",
|
|
194
|
+
submodulePath: contentRepository.submodulePath ?? null
|
|
195
|
+
},
|
|
196
|
+
sourceRepoSlug,
|
|
197
|
+
effectiveLocalPath,
|
|
198
|
+
siteLocalPath,
|
|
199
|
+
docsSiteReadiness: siteReady ? "ready" : "site_not_prepared",
|
|
200
|
+
materializationStatus,
|
|
201
|
+
targetRelativePath: effectiveLocalPath ? effectiveLocalPath.replace(`${tenantRoot}/`, "") : null,
|
|
202
|
+
managedCloneRoot: resolve(tenantRoot, ".treeseed", "local-content"),
|
|
203
|
+
defaultDirectoryName: basename(effectiveLocalPath ?? slug)
|
|
204
|
+
},
|
|
205
|
+
source: { type: "package-adapter", id: `project-architecture:${action.key}` }
|
|
206
|
+
}];
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
export {
|
|
210
|
+
TREESEED_LOCAL_CONTENT_MODES,
|
|
211
|
+
buildProjectLocalContentResources
|
|
212
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { TreeseedDeployConfig, TreeseedPlatformLayerDefinition, TreeseedPlatformResourceKind, TreeseedPlatformSurfaceName, TreeseedTenantConfig } from './contracts.
|
|
2
|
-
import type { TreeseedEnvironmentRegistryOverlay } from './environment.
|
|
3
|
-
import type { SdkGraphRankingProvider } from '../sdk-types.
|
|
4
|
-
import type { TreeseedReconcileAdapter } from '../reconcile/contracts.
|
|
5
|
-
import type { TreeseedApplicationHostingProfile, TreeseedHostAdapter, TreeseedServiceTypeAdapter } from '../hosting/contracts.
|
|
1
|
+
import type { TreeseedDeployConfig, TreeseedPlatformLayerDefinition, TreeseedPlatformResourceKind, TreeseedPlatformSurfaceName, TreeseedTenantConfig } from './contracts.js';
|
|
2
|
+
import type { TreeseedEnvironmentRegistryOverlay } from './environment.js';
|
|
3
|
+
import type { SdkGraphRankingProvider } from '../sdk-types.js';
|
|
4
|
+
import type { TreeseedReconcileAdapter } from '../reconcile/contracts.js';
|
|
5
|
+
import type { TreeseedApplicationHostingProfile, TreeseedHostAdapter, TreeseedServiceTypeAdapter } from '../hosting/contracts.js';
|
|
6
6
|
export type TreeseedSiteLayerDefinition = TreeseedPlatformLayerDefinition & {
|
|
7
7
|
kinds?: Array<'pages' | 'styles' | 'components'>;
|
|
8
8
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { TreeseedDeployConfig } from '../contracts.
|
|
2
|
-
import type { TreeseedPluginEnvironmentContext } from '../plugin.
|
|
3
|
-
import type { SdkGraphRankingProvider } from '../../sdk-types.
|
|
1
|
+
import type { TreeseedDeployConfig } from '../contracts.js';
|
|
2
|
+
import type { TreeseedPluginEnvironmentContext } from '../plugin.js';
|
|
3
|
+
import type { SdkGraphRankingProvider } from '../../sdk-types.js';
|
|
4
4
|
type LoadedPluginEntry = {
|
|
5
5
|
package: string;
|
|
6
6
|
config: Record<string, unknown>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
2
3
|
import { createRequire } from "node:module";
|
|
3
4
|
import path from "node:path";
|
|
4
5
|
import { fileURLToPath } from "node:url";
|
|
@@ -52,6 +53,59 @@ function resolveInstalledPluginPath(packageName, tenantRoot) {
|
|
|
52
53
|
paths: [tenantRoot, process.cwd()]
|
|
53
54
|
});
|
|
54
55
|
}
|
|
56
|
+
function parseTreeseedPackageReference(packageName) {
|
|
57
|
+
const match = packageName.match(/^@treeseed\/([^/]+)(?:\/(.+))?$/u);
|
|
58
|
+
if (!match) return null;
|
|
59
|
+
return {
|
|
60
|
+
packageId: match[1],
|
|
61
|
+
subpath: match[2] ?? "index"
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function buildWorkspacePluginArtifacts(packageDir, packageName) {
|
|
65
|
+
const packageJsonPath = path.resolve(packageDir, "package.json");
|
|
66
|
+
let packageJson;
|
|
67
|
+
try {
|
|
68
|
+
packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
69
|
+
} catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
const scripts = packageJson.scripts && typeof packageJson.scripts === "object" && !Array.isArray(packageJson.scripts) ? packageJson.scripts : {};
|
|
73
|
+
const buildScript = typeof scripts["build:dist"] === "string" && scripts["build:dist"].trim() ? "build:dist" : typeof scripts.build === "string" && scripts.build.trim() ? "build" : null;
|
|
74
|
+
if (!buildScript) return false;
|
|
75
|
+
const result = spawnSync("npm", ["--prefix", packageDir, "run", buildScript], {
|
|
76
|
+
cwd: path.resolve(packageDir, "..", ".."),
|
|
77
|
+
stdio: "inherit",
|
|
78
|
+
env: process.env
|
|
79
|
+
});
|
|
80
|
+
if (result.status !== 0) {
|
|
81
|
+
throw new Error(`Failed to build ${packageName} workspace plugin artifacts with npm run ${buildScript}.`);
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
function resolveLocalWorkspacePluginPath(packageName, tenantRoot) {
|
|
86
|
+
const parsed = parseTreeseedPackageReference(packageName);
|
|
87
|
+
if (!parsed) return null;
|
|
88
|
+
const packageDir = path.resolve(tenantRoot, "packages", parsed.packageId);
|
|
89
|
+
const packageJsonPath = path.resolve(packageDir, "package.json");
|
|
90
|
+
if (!existsSync(packageJsonPath)) return null;
|
|
91
|
+
try {
|
|
92
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
93
|
+
if (packageJson?.name !== `@treeseed/${parsed.packageId}`) return null;
|
|
94
|
+
} catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
const normalizedSubpath = parsed.subpath.replace(/^\.\//u, "").replace(/\.js$/u, "");
|
|
98
|
+
const candidates = [
|
|
99
|
+
path.resolve(packageDir, "dist", `${normalizedSubpath}.js`),
|
|
100
|
+
path.resolve(packageDir, `${normalizedSubpath}.js`)
|
|
101
|
+
];
|
|
102
|
+
const existing = candidates.find((candidate) => existsSync(candidate));
|
|
103
|
+
if (existing) return existing;
|
|
104
|
+
if (buildWorkspacePluginArtifacts(packageDir, packageName)) {
|
|
105
|
+
return candidates.find((candidate) => existsSync(candidate)) ?? null;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
55
109
|
function loadPluginModule(packageName, tenantRoot) {
|
|
56
110
|
if (packageName === TREESEED_DEFAULT_PLUGIN_PACKAGE) {
|
|
57
111
|
const localDefaultPluginPath = resolveLocalDefaultPluginPath();
|
|
@@ -68,6 +122,13 @@ function loadPluginModule(packageName, tenantRoot) {
|
|
|
68
122
|
baseDir: path.dirname(resolvedPath2)
|
|
69
123
|
};
|
|
70
124
|
}
|
|
125
|
+
const localWorkspacePluginPath = resolveLocalWorkspacePluginPath(packageName, tenantRoot);
|
|
126
|
+
if (localWorkspacePluginPath) {
|
|
127
|
+
return {
|
|
128
|
+
moduleExports: require2(localWorkspacePluginPath),
|
|
129
|
+
baseDir: path.dirname(localWorkspacePluginPath)
|
|
130
|
+
};
|
|
131
|
+
}
|
|
71
132
|
const resolvedPath = resolveInstalledPluginPath(packageName, tenantRoot);
|
|
72
133
|
return {
|
|
73
134
|
moduleExports: require2(resolvedPath),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { TREESEED_DEFAULT_PLUGIN_PACKAGE, TREESEED_DEFAULT_PLUGIN_REFERENCES, TREESEED_DEFAULT_PROVIDER_SELECTIONS, } from './plugins/constants.
|
|
2
|
-
export { getTreeseedAgentProviderSelections, getTreeseedContentPublishProvider, getTreeseedContentRuntimeProvider, getTreeseedDeployConfig, getTreeseedDeployProvider, getTreeseedDocsProvider, getTreeseedFormsProvider, getTreeseedOperationsProvider, getTreeseedSiteProvider, isTreeseedSmtpEnabled, isTreeseedTurnstileEnabled, resetTreeseedDeployConfigForTests, } from './deploy-runtime.
|
|
3
|
-
export { defineTreeseedPlugin } from './plugin.
|
|
4
|
-
export type * from './plugin.
|
|
5
|
-
export { loadTreeseedPluginRuntime, loadTreeseedPlugins, resolveTreeseedGraphRankingProvider } from './plugins/runtime.
|
|
6
|
-
export type { LoadedTreeseedPluginEntry } from './plugins/runtime.
|
|
1
|
+
export { TREESEED_DEFAULT_PLUGIN_PACKAGE, TREESEED_DEFAULT_PLUGIN_REFERENCES, TREESEED_DEFAULT_PROVIDER_SELECTIONS, } from './plugins/constants.js';
|
|
2
|
+
export { getTreeseedAgentProviderSelections, getTreeseedContentPublishProvider, getTreeseedContentRuntimeProvider, getTreeseedDeployConfig, getTreeseedDeployProvider, getTreeseedDocsProvider, getTreeseedFormsProvider, getTreeseedOperationsProvider, getTreeseedSiteProvider, isTreeseedSmtpEnabled, isTreeseedTurnstileEnabled, resetTreeseedDeployConfigForTests, } from './deploy-runtime.js';
|
|
3
|
+
export { defineTreeseedPlugin } from './plugin.js';
|
|
4
|
+
export type * from './plugin.js';
|
|
5
|
+
export { loadTreeseedPluginRuntime, loadTreeseedPlugins, resolveTreeseedGraphRankingProvider } from './plugins/runtime.js';
|
|
6
|
+
export type { LoadedTreeseedPluginEntry } from './plugins/runtime.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { TreeseedDeployConfig, TreeseedTenantConfig } from './contracts.
|
|
2
|
-
import { type PublishContentObjectInput, type PublishedArtifactVersion, type PublishedCollectionIndex, type PublishedContentEntry, type PublishedContentManifest, type PublishedOverlayManifest, type PublishedRuntimePointers, type PublishedContentVisibility } from './published-content.
|
|
3
|
-
import type { CatalogIndexEntry } from './published-content.
|
|
1
|
+
import type { TreeseedDeployConfig, TreeseedTenantConfig } from './contracts.js';
|
|
2
|
+
import { type PublishContentObjectInput, type PublishedArtifactVersion, type PublishedCollectionIndex, type PublishedContentEntry, type PublishedContentManifest, type PublishedOverlayManifest, type PublishedRuntimePointers, type PublishedContentVisibility } from './published-content.js';
|
|
3
|
+
import type { CatalogIndexEntry } from './published-content.js';
|
|
4
4
|
export interface ContentSourceEntry {
|
|
5
5
|
model: string;
|
|
6
6
|
id: string;
|
|
@@ -7,11 +7,15 @@ import { toString } from "mdast-util-to-string";
|
|
|
7
7
|
import { parseFrontmatterDocument } from "../frontmatter.js";
|
|
8
8
|
import { buildTenantBookRuntime } from "./books-data.js";
|
|
9
9
|
import { exportBookLibrary, exportBookPackage } from "./book-export.js";
|
|
10
|
+
import { COMMERCE_OFFER_MODES } from "../sdk-types.js";
|
|
10
11
|
import {
|
|
11
12
|
PUBLISHED_CONTENT_MANIFEST_SCHEMA_VERSION,
|
|
12
13
|
resolvePublishedContentPreviewTtlHours,
|
|
13
14
|
resolveTeamScopedContentLocator
|
|
14
15
|
} from "./published-content.js";
|
|
16
|
+
function resolveCommerceOfferMode(value) {
|
|
17
|
+
return typeof value === "string" && COMMERCE_OFFER_MODES.includes(value) ? value : "free";
|
|
18
|
+
}
|
|
15
19
|
function stableHash(value) {
|
|
16
20
|
return createHash("sha256").update(value).digest("hex");
|
|
17
21
|
}
|
|
@@ -370,7 +374,7 @@ class DefaultArtifactBuilder {
|
|
|
370
374
|
summary: entry.summary,
|
|
371
375
|
visibility: entry.visibility,
|
|
372
376
|
listingEnabled: entry.metadata?.listingEnabled !== false,
|
|
373
|
-
offerMode:
|
|
377
|
+
offerMode: resolveCommerceOfferMode(entry.metadata?.offer?.priceModel),
|
|
374
378
|
manifestKey: resolveTeamScopedContentLocator(context.siteConfig, context.teamId).manifestKey,
|
|
375
379
|
artifactKey: void 0,
|
|
376
380
|
updatedAt: context.generatedAt,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { TreeseedDeployConfig } from './contracts.
|
|
2
|
-
import type {
|
|
1
|
+
import type { TreeseedDeployConfig } from './contracts.js';
|
|
2
|
+
import type { CommerceOfferMode } from '../sdk-types.js';
|
|
3
|
+
import type { CloudflareRuntime, R2BucketLike } from '../types/cloudflare.js';
|
|
3
4
|
export declare const PUBLISHED_CONTENT_MANIFEST_SCHEMA_VERSION = 2;
|
|
4
5
|
export declare const EDITORIAL_PREVIEW_COOKIE = "treeseed-content-preview";
|
|
5
6
|
export type PublishedContentVisibility = 'public' | 'authenticated' | 'team' | 'private';
|
|
@@ -67,7 +68,7 @@ export interface CatalogIndexEntry {
|
|
|
67
68
|
summary?: string;
|
|
68
69
|
visibility?: PublishedContentVisibility;
|
|
69
70
|
listingEnabled?: boolean;
|
|
70
|
-
offerMode?:
|
|
71
|
+
offerMode?: CommerceOfferMode;
|
|
71
72
|
manifestKey?: string;
|
|
72
73
|
artifactKey?: string;
|
|
73
74
|
updatedAt: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { parseSiteConfig } from './utils/site-config-schema.js';
|