@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
package/dist/seeds/schema.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { errorDiagnostic, warningDiagnostic } from "./errors.js";
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
SEED_CONTENT_PUBLISH_TARGETS,
|
|
4
|
+
SEED_CONTENT_RUNTIME_SOURCES,
|
|
5
|
+
SEED_ENVIRONMENTS,
|
|
6
|
+
SEED_LOCAL_CONTENT_MATERIALIZATIONS,
|
|
7
|
+
SEED_PROJECT_TOPOLOGIES
|
|
4
8
|
} from "./types.js";
|
|
5
9
|
const RESOURCE_BUCKETS = [
|
|
6
10
|
"teams",
|
|
@@ -16,6 +20,30 @@ const RESOURCE_BUCKETS = [
|
|
|
16
20
|
];
|
|
17
21
|
const SUPPORTED_BUCKETS = /* @__PURE__ */ new Set(["teams", "repositoryHosts", "projects", "hubRepositories", "products", "catalogArtifacts", "capacityProviders", "capacityGrants", "workPolicies"]);
|
|
18
22
|
const ALLOWED_ENVIRONMENTS = new Set(SEED_ENVIRONMENTS);
|
|
23
|
+
const ALLOWED_PROJECT_TOPOLOGIES = new Set(SEED_PROJECT_TOPOLOGIES);
|
|
24
|
+
const ALLOWED_CONTENT_RUNTIME_SOURCES = new Set(SEED_CONTENT_RUNTIME_SOURCES);
|
|
25
|
+
const ALLOWED_LOCAL_CONTENT_MATERIALIZATIONS = new Set(SEED_LOCAL_CONTENT_MATERIALIZATIONS);
|
|
26
|
+
const ALLOWED_CONTENT_PUBLISH_TARGETS = new Set(SEED_CONTENT_PUBLISH_TARGETS);
|
|
27
|
+
const LEGACY_PROVIDER_TASK_SCOPE_PREFIX = "provider:tasks:";
|
|
28
|
+
const ALLOWED_RECIPE_CHANNELS = /* @__PURE__ */ new Set(["cli", "ui", "api", "provider-runtime", "system-check"]);
|
|
29
|
+
const ALLOWED_RECIPE_OPERATIONS = /* @__PURE__ */ new Set([
|
|
30
|
+
"navigate",
|
|
31
|
+
"seed.apply",
|
|
32
|
+
"seed.plan",
|
|
33
|
+
"verify.treedx",
|
|
34
|
+
"capacity-provider.create",
|
|
35
|
+
"capacity.up",
|
|
36
|
+
"capacity.status",
|
|
37
|
+
"capacity.allocate.portfolio",
|
|
38
|
+
"capacity.allocate.project",
|
|
39
|
+
"project.create",
|
|
40
|
+
"provider-runtime.launch",
|
|
41
|
+
"work.start",
|
|
42
|
+
"work.review-decision",
|
|
43
|
+
"knowledge.inspect-artifacts",
|
|
44
|
+
"knowledge.publish",
|
|
45
|
+
"system.health"
|
|
46
|
+
]);
|
|
19
47
|
const CREDENTIAL_REF_PATTERN = /^(?:env|secret|provider-session):[A-Za-z0-9_./:-]+$/u;
|
|
20
48
|
function isRecord(value) {
|
|
21
49
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -75,6 +103,15 @@ function objectField(record, field, path, diagnostics) {
|
|
|
75
103
|
}
|
|
76
104
|
return value;
|
|
77
105
|
}
|
|
106
|
+
function booleanField(record, field, path, diagnostics) {
|
|
107
|
+
const value = record[field];
|
|
108
|
+
if (value === void 0) return void 0;
|
|
109
|
+
if (typeof value !== "boolean") {
|
|
110
|
+
diagnostics.push(errorDiagnostic("seed.invalid_boolean", `Expected ${field} to be a boolean.`, `${path}.${field}`));
|
|
111
|
+
return void 0;
|
|
112
|
+
}
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
78
115
|
function stringArrayField(record, field, path, diagnostics) {
|
|
79
116
|
const value = record[field];
|
|
80
117
|
if (value === void 0) return void 0;
|
|
@@ -84,6 +121,23 @@ function stringArrayField(record, field, path, diagnostics) {
|
|
|
84
121
|
}
|
|
85
122
|
return value.map((entry) => asString(entry)).filter(Boolean);
|
|
86
123
|
}
|
|
124
|
+
function recordArrayField(record, field, path, diagnostics) {
|
|
125
|
+
const value = record[field];
|
|
126
|
+
if (value === void 0) return [];
|
|
127
|
+
if (!Array.isArray(value)) {
|
|
128
|
+
diagnostics.push(errorDiagnostic("seed.invalid_array", `Expected ${field} to be an array.`, `${path}.${field}`));
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
const result = [];
|
|
132
|
+
value.forEach((entry, index) => {
|
|
133
|
+
if (!isRecord(entry)) {
|
|
134
|
+
diagnostics.push(errorDiagnostic("seed.invalid_object", `Expected ${field} entry to be an object.`, `${path}.${field}[${index}]`));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
result.push(entry);
|
|
138
|
+
});
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
87
141
|
function keyBase(record, path, diagnostics) {
|
|
88
142
|
const key = requireString(record, "key", path, diagnostics);
|
|
89
143
|
const environments = parseEnvironments(record.environments, `${path}.environments`, diagnostics);
|
|
@@ -123,11 +177,87 @@ function parseRepository(value, path, diagnostics) {
|
|
|
123
177
|
validateRepository(repository, path, diagnostics);
|
|
124
178
|
return repository;
|
|
125
179
|
}
|
|
180
|
+
function parseProjectContentPublishTarget(value, path, diagnostics) {
|
|
181
|
+
if (value === void 0) return void 0;
|
|
182
|
+
if (!isRecord(value)) {
|
|
183
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", "Expected contentPublishTarget to be an object.", path));
|
|
184
|
+
return void 0;
|
|
185
|
+
}
|
|
186
|
+
const kind = requireString(value, "kind", path, diagnostics);
|
|
187
|
+
if (kind && !ALLOWED_CONTENT_PUBLISH_TARGETS.has(kind)) {
|
|
188
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", `Unsupported content publish target: ${kind}.`, `${path}.kind`));
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
kind: ALLOWED_CONTENT_PUBLISH_TARGETS.has(kind) ? kind : "none",
|
|
192
|
+
bucket: asString(value.bucket) || void 0,
|
|
193
|
+
prefix: asString(value.prefix) || void 0,
|
|
194
|
+
manifestPath: asString(value.manifestPath) || void 0,
|
|
195
|
+
metadata: objectField(value, "metadata", path, diagnostics)
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function parseProjectArchitecture(value, path, diagnostics) {
|
|
199
|
+
if (!isRecord(value)) {
|
|
200
|
+
diagnostics.push(errorDiagnostic("seed.missing_project_architecture", "Project resources must declare canonical architecture.", path));
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
const topology = requireString(value, "topology", path, diagnostics);
|
|
204
|
+
const contentRuntimeSource = requireString(value, "contentRuntimeSource", path, diagnostics);
|
|
205
|
+
const localContentMaterialization = requireString(value, "localContentMaterialization", path, diagnostics);
|
|
206
|
+
if (topology && !ALLOWED_PROJECT_TOPOLOGIES.has(topology)) {
|
|
207
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", `Unsupported project topology: ${topology}.`, `${path}.topology`));
|
|
208
|
+
}
|
|
209
|
+
if (contentRuntimeSource && !ALLOWED_CONTENT_RUNTIME_SOURCES.has(contentRuntimeSource)) {
|
|
210
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", `Unsupported content runtime source: ${contentRuntimeSource}.`, `${path}.contentRuntimeSource`));
|
|
211
|
+
}
|
|
212
|
+
if (localContentMaterialization && !ALLOWED_LOCAL_CONTENT_MATERIALIZATIONS.has(localContentMaterialization)) {
|
|
213
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", `Unsupported local content materialization: ${localContentMaterialization}.`, `${path}.localContentMaterialization`));
|
|
214
|
+
}
|
|
215
|
+
const architecture = {
|
|
216
|
+
topology: ALLOWED_PROJECT_TOPOLOGIES.has(topology) ? topology : "single_repository_site",
|
|
217
|
+
rootPath: asString(value.rootPath) || ".",
|
|
218
|
+
sitePath: requireString(value, "sitePath", path, diagnostics),
|
|
219
|
+
contentPath: asString(value.contentPath) || void 0,
|
|
220
|
+
contentRuntimeSource: ALLOWED_CONTENT_RUNTIME_SOURCES.has(contentRuntimeSource) ? contentRuntimeSource : "r2_published_manifest",
|
|
221
|
+
localContentMaterialization: ALLOWED_LOCAL_CONTENT_MATERIALIZATIONS.has(localContentMaterialization) ? localContentMaterialization : "none",
|
|
222
|
+
contentPublishTarget: parseProjectContentPublishTarget(value.contentPublishTarget, `${path}.contentPublishTarget`, diagnostics),
|
|
223
|
+
requiresLocalContentForCi: booleanField(value, "requiresLocalContentForCi", path, diagnostics),
|
|
224
|
+
requiresLocalContentForDeploy: booleanField(value, "requiresLocalContentForDeploy", path, diagnostics)
|
|
225
|
+
};
|
|
226
|
+
validateProjectArchitecture(architecture, path, diagnostics);
|
|
227
|
+
return architecture;
|
|
228
|
+
}
|
|
229
|
+
function validateProjectArchitecture(architecture, path, diagnostics) {
|
|
230
|
+
if (!architecture.sitePath) return;
|
|
231
|
+
if (architecture.topology === "single_repository_site" && architecture.rootPath === "" && architecture.sitePath === "") {
|
|
232
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", "single_repository_site projects must have repository-relative rootPath and sitePath values.", path));
|
|
233
|
+
}
|
|
234
|
+
if (architecture.topology === "split_site_content" && !architecture.contentPath && architecture.contentRuntimeSource === "local_directory") {
|
|
235
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", "split_site_content projects using local_directory content must declare contentPath.", `${path}.contentPath`));
|
|
236
|
+
}
|
|
237
|
+
if (!architecture.requiresLocalContentForCi && !architecture.requiresLocalContentForDeploy && architecture.contentRuntimeSource !== "local_directory" && ["managed_clone", "submodule"].includes(architecture.localContentMaterialization)) {
|
|
238
|
+
diagnostics.push(errorDiagnostic(
|
|
239
|
+
"seed.local_content_required_by_default",
|
|
240
|
+
"CI/deploy defaults must not require managed_clone or submodule content unless requiresLocalContentForCi or requiresLocalContentForDeploy is explicit.",
|
|
241
|
+
`${path}.localContentMaterialization`
|
|
242
|
+
));
|
|
243
|
+
}
|
|
244
|
+
if (architecture.contentPublishTarget?.kind === "cloudflare_r2" && architecture.contentRuntimeSource === "local_directory" && !architecture.contentPath) {
|
|
245
|
+
diagnostics.push(errorDiagnostic("seed.invalid_project_architecture", "Cloudflare R2 content publish targets need a contentPath when runtime source is local_directory.", `${path}.contentPath`));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
126
248
|
function parseProject(value, path, diagnostics) {
|
|
127
249
|
if (!isRecord(value)) {
|
|
128
250
|
diagnostics.push(errorDiagnostic("seed.invalid_resource", "Expected project resource to be an object.", path));
|
|
129
251
|
return null;
|
|
130
252
|
}
|
|
253
|
+
const metadata = objectField(value, "metadata", path, diagnostics);
|
|
254
|
+
if (metadata?.repositoryTopology !== void 0 || metadata?.contentRoot !== void 0 || metadata?.sitePath !== void 0 || metadata?.contentPath !== void 0) {
|
|
255
|
+
diagnostics.push(errorDiagnostic(
|
|
256
|
+
"seed.legacy_project_topology_metadata",
|
|
257
|
+
"Project topology must be declared in project.architecture, not metadata.",
|
|
258
|
+
`${path}.metadata`
|
|
259
|
+
));
|
|
260
|
+
}
|
|
131
261
|
return {
|
|
132
262
|
...keyBase(value, path, diagnostics),
|
|
133
263
|
team: requireString(value, "team", path, diagnostics),
|
|
@@ -136,7 +266,14 @@ function parseProject(value, path, diagnostics) {
|
|
|
136
266
|
description: asString(value.description) || void 0,
|
|
137
267
|
kind: asString(value.kind) || void 0,
|
|
138
268
|
repository: parseRepository(value.repository, `${path}.repository`, diagnostics),
|
|
139
|
-
|
|
269
|
+
architecture: parseProjectArchitecture(value.architecture, `${path}.architecture`, diagnostics) ?? {
|
|
270
|
+
topology: "single_repository_site",
|
|
271
|
+
rootPath: ".",
|
|
272
|
+
sitePath: "",
|
|
273
|
+
contentRuntimeSource: "r2_published_manifest",
|
|
274
|
+
localContentMaterialization: "none"
|
|
275
|
+
},
|
|
276
|
+
metadata
|
|
140
277
|
};
|
|
141
278
|
}
|
|
142
279
|
function parseRepositoryHost(value, path, diagnostics) {
|
|
@@ -275,11 +412,22 @@ function parseProviderRegistration(value, path, diagnostics) {
|
|
|
275
412
|
if (apiKeyValue.createIfMissing !== void 0 && typeof apiKeyValue.createIfMissing !== "boolean") {
|
|
276
413
|
diagnostics.push(errorDiagnostic("seed.invalid_boolean", "Expected registration.apiKey.createIfMissing to be a boolean.", `${path}.apiKey.createIfMissing`));
|
|
277
414
|
}
|
|
415
|
+
const scopes = stringArrayField(apiKeyValue, "scopes", `${path}.apiKey`, diagnostics);
|
|
416
|
+
scopes?.forEach((scope, index) => {
|
|
417
|
+
if (scope.startsWith(LEGACY_PROVIDER_TASK_SCOPE_PREFIX)) {
|
|
418
|
+
diagnostics.push(errorDiagnostic(
|
|
419
|
+
"seed.legacy_provider_task_scope",
|
|
420
|
+
`Legacy provider task scope ${scope} is not supported; use provider assignment scopes instead.`,
|
|
421
|
+
`${path}.apiKey.scopes[${index}]`
|
|
422
|
+
));
|
|
423
|
+
}
|
|
424
|
+
});
|
|
278
425
|
return {
|
|
279
426
|
apiKey: {
|
|
280
427
|
createIfMissing: typeof apiKeyValue.createIfMissing === "boolean" ? apiKeyValue.createIfMissing : void 0,
|
|
281
428
|
name: asString(apiKeyValue.name) || void 0,
|
|
282
|
-
|
|
429
|
+
plaintextKey: asString(apiKeyValue.plaintextKey) || void 0,
|
|
430
|
+
scopes,
|
|
283
431
|
expiresAt: asString(apiKeyValue.expiresAt) || void 0
|
|
284
432
|
}
|
|
285
433
|
};
|
|
@@ -415,6 +563,63 @@ function parseWorkPolicy(value, path, diagnostics) {
|
|
|
415
563
|
metadata: objectField(value, "metadata", path, diagnostics)
|
|
416
564
|
};
|
|
417
565
|
}
|
|
566
|
+
function parseRecipeCommand(value, path, diagnostics) {
|
|
567
|
+
if (value === void 0) return void 0;
|
|
568
|
+
if (!isRecord(value)) {
|
|
569
|
+
diagnostics.push(errorDiagnostic("seed.invalid_object", "Expected command to be an object.", path));
|
|
570
|
+
return void 0;
|
|
571
|
+
}
|
|
572
|
+
const argv = stringArrayField(value, "argv", path, diagnostics);
|
|
573
|
+
if (argv.length === 0) {
|
|
574
|
+
diagnostics.push(errorDiagnostic("seed.recipe_command_missing_argv", "Recipe command must include argv.", `${path}.argv`));
|
|
575
|
+
}
|
|
576
|
+
return { argv };
|
|
577
|
+
}
|
|
578
|
+
function parseRecipeStep(value, path, diagnostics) {
|
|
579
|
+
if (!isRecord(value)) {
|
|
580
|
+
diagnostics.push(errorDiagnostic("seed.invalid_recipe_step", "Expected operation recipe step to be an object.", path));
|
|
581
|
+
return null;
|
|
582
|
+
}
|
|
583
|
+
const channel = requireString(value, "channel", path, diagnostics);
|
|
584
|
+
if (channel && !ALLOWED_RECIPE_CHANNELS.has(channel)) {
|
|
585
|
+
diagnostics.push(errorDiagnostic("seed.recipe_unknown_channel", `Unsupported operation recipe channel: ${channel}.`, `${path}.channel`));
|
|
586
|
+
}
|
|
587
|
+
const operation = requireString(value, "operation", path, diagnostics);
|
|
588
|
+
if (operation && !ALLOWED_RECIPE_OPERATIONS.has(operation)) {
|
|
589
|
+
diagnostics.push(errorDiagnostic("seed.recipe_unknown_operation", `Unsupported operation recipe operation: ${operation}.`, `${path}.operation`));
|
|
590
|
+
}
|
|
591
|
+
return {
|
|
592
|
+
id: requireString(value, "id", path, diagnostics),
|
|
593
|
+
title: requireString(value, "title", path, diagnostics),
|
|
594
|
+
actor: asString(value.actor) || void 0,
|
|
595
|
+
channel: ALLOWED_RECIPE_CHANNELS.has(channel) ? channel : "system-check",
|
|
596
|
+
operation,
|
|
597
|
+
dependsOn: stringArrayField(value, "dependsOn", path, diagnostics) ?? [],
|
|
598
|
+
uses: stringArrayField(value, "uses", path, diagnostics) ?? [],
|
|
599
|
+
target: asString(value.target) || void 0,
|
|
600
|
+
command: parseRecipeCommand(value.command, `${path}.command`, diagnostics),
|
|
601
|
+
assertions: recordArrayField(value, "assertions", path, diagnostics),
|
|
602
|
+
artifacts: recordArrayField(value, "artifacts", path, diagnostics)
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
function parseOperationRecipe(value, path, diagnostics, manifestEnvironments) {
|
|
606
|
+
if (!isRecord(value)) {
|
|
607
|
+
diagnostics.push(errorDiagnostic("seed.invalid_recipe", "Expected operation recipe to be an object.", path));
|
|
608
|
+
return null;
|
|
609
|
+
}
|
|
610
|
+
const environments = parseEnvironments(value.environments, `${path}.environments`, diagnostics) ?? manifestEnvironments;
|
|
611
|
+
const recipe = {
|
|
612
|
+
id: requireString(value, "id", path, diagnostics),
|
|
613
|
+
title: requireString(value, "title", path, diagnostics),
|
|
614
|
+
environments,
|
|
615
|
+
entrypoints: stringArrayField(value, "entrypoints", path, diagnostics) ?? [],
|
|
616
|
+
steps: Array.isArray(value.steps) ? value.steps.map((step, index) => parseRecipeStep(step, `${path}.steps[${index}]`, diagnostics)).filter((step) => Boolean(step)) : []
|
|
617
|
+
};
|
|
618
|
+
if (!Array.isArray(value.steps)) {
|
|
619
|
+
diagnostics.push(errorDiagnostic("seed.invalid_recipe_steps", "Operation recipe steps must be an array.", `${path}.steps`));
|
|
620
|
+
}
|
|
621
|
+
return recipe;
|
|
622
|
+
}
|
|
418
623
|
function validateRepository(repository, path, diagnostics) {
|
|
419
624
|
if (!repository.gitUrl) return;
|
|
420
625
|
if (/^(?:\.{1,2}\/?|packages\/|\/)/u.test(repository.gitUrl) || !/(?:^[a-z][a-z0-9+.-]*:\/\/|^git@)/iu.test(repository.gitUrl)) {
|
|
@@ -542,6 +747,85 @@ function validateReferences(manifest, diagnostics) {
|
|
|
542
747
|
if (!projectKeys.has(policy.project)) diagnostics.push(errorDiagnostic("seed.invalid_reference", `Unknown project reference: ${policy.project}.`, `resources.workPolicies[${index}].project`));
|
|
543
748
|
});
|
|
544
749
|
}
|
|
750
|
+
function allResourceKeys(manifest) {
|
|
751
|
+
return /* @__PURE__ */ new Set([
|
|
752
|
+
...manifest.resources.teams.map((team) => team.key),
|
|
753
|
+
...manifest.resources.repositoryHosts.map((host) => host.key),
|
|
754
|
+
...manifest.resources.projects.map((project) => project.key),
|
|
755
|
+
...manifest.resources.hubRepositories.map((repository) => repository.key),
|
|
756
|
+
...manifest.resources.products.map((product) => product.key),
|
|
757
|
+
...manifest.resources.catalogArtifacts.map((artifact) => artifact.key),
|
|
758
|
+
...manifest.resources.capacityProviders.flatMap((provider) => [provider.key, ...(provider.lanes ?? []).map((lane) => lane.key)]),
|
|
759
|
+
...manifest.resources.capacityGrants.map((grant) => grant.key),
|
|
760
|
+
...manifest.resources.workPolicies.map((policy) => policy.key)
|
|
761
|
+
]);
|
|
762
|
+
}
|
|
763
|
+
function validateOperationRecipes(manifest, diagnostics) {
|
|
764
|
+
const recipeIds = /* @__PURE__ */ new Map();
|
|
765
|
+
const resourceKeys = allResourceKeys(manifest);
|
|
766
|
+
manifest.operationRecipes.forEach((recipe, recipeIndex) => {
|
|
767
|
+
const recipePath = `operationRecipes[${recipeIndex}]`;
|
|
768
|
+
const existingRecipePath = recipeIds.get(recipe.id);
|
|
769
|
+
if (recipe.id && existingRecipePath) {
|
|
770
|
+
diagnostics.push(errorDiagnostic("seed.recipe_duplicate_id", `Duplicate operation recipe id ${recipe.id}; first seen at ${existingRecipePath}.`, `${recipePath}.id`));
|
|
771
|
+
}
|
|
772
|
+
if (recipe.id) recipeIds.set(recipe.id, `${recipePath}.id`);
|
|
773
|
+
if (recipe.environments.length === 0) {
|
|
774
|
+
diagnostics.push(errorDiagnostic("seed.recipe_missing_environments", "Operation recipe must target at least one environment.", `${recipePath}.environments`));
|
|
775
|
+
}
|
|
776
|
+
for (const environment of recipe.environments) {
|
|
777
|
+
if (!manifest.environments.includes(environment)) {
|
|
778
|
+
diagnostics.push(errorDiagnostic("seed.recipe_environment_not_declared", `Recipe environment ${environment} is not declared in environments.`, `${recipePath}.environments`));
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
const steps = /* @__PURE__ */ new Map();
|
|
782
|
+
recipe.steps.forEach((step, stepIndex) => {
|
|
783
|
+
const stepPath = `${recipePath}.steps[${stepIndex}]`;
|
|
784
|
+
const existingStep = steps.get(step.id);
|
|
785
|
+
if (step.id && existingStep) {
|
|
786
|
+
diagnostics.push(errorDiagnostic("seed.recipe_duplicate_step_id", `Duplicate operation recipe step id ${step.id}.`, `${stepPath}.id`));
|
|
787
|
+
}
|
|
788
|
+
if (step.id) steps.set(step.id, step);
|
|
789
|
+
step.uses.forEach((resourceKey, useIndex) => {
|
|
790
|
+
if (!resourceKeys.has(resourceKey)) {
|
|
791
|
+
diagnostics.push(errorDiagnostic("seed.recipe_invalid_resource_reference", `Unknown recipe resource reference: ${resourceKey}.`, `${stepPath}.uses[${useIndex}]`));
|
|
792
|
+
}
|
|
793
|
+
});
|
|
794
|
+
});
|
|
795
|
+
recipe.entrypoints.forEach((entrypoint, entrypointIndex) => {
|
|
796
|
+
if (!steps.has(entrypoint)) {
|
|
797
|
+
diagnostics.push(errorDiagnostic("seed.recipe_invalid_entrypoint", `Unknown recipe entrypoint step: ${entrypoint}.`, `${recipePath}.entrypoints[${entrypointIndex}]`));
|
|
798
|
+
}
|
|
799
|
+
});
|
|
800
|
+
recipe.steps.forEach((step, stepIndex) => {
|
|
801
|
+
step.dependsOn.forEach((dependency, dependencyIndex) => {
|
|
802
|
+
if (!steps.has(dependency)) {
|
|
803
|
+
diagnostics.push(errorDiagnostic("seed.recipe_invalid_dependency", `Unknown recipe dependency step: ${dependency}.`, `${recipePath}.steps[${stepIndex}].dependsOn[${dependencyIndex}]`));
|
|
804
|
+
}
|
|
805
|
+
});
|
|
806
|
+
});
|
|
807
|
+
const visiting = /* @__PURE__ */ new Set();
|
|
808
|
+
const visited = /* @__PURE__ */ new Set();
|
|
809
|
+
const visit = (stepId, chain) => {
|
|
810
|
+
if (visited.has(stepId)) return;
|
|
811
|
+
if (visiting.has(stepId)) {
|
|
812
|
+
diagnostics.push(errorDiagnostic("seed.recipe_cycle", `Recipe dependency cycle detected: ${[...chain, stepId].join(" -> ")}.`, recipePath));
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
const step = steps.get(stepId);
|
|
816
|
+
if (!step) return;
|
|
817
|
+
visiting.add(stepId);
|
|
818
|
+
for (const dependency of step.dependsOn) {
|
|
819
|
+
visit(dependency, [...chain, stepId]);
|
|
820
|
+
}
|
|
821
|
+
visiting.delete(stepId);
|
|
822
|
+
visited.add(stepId);
|
|
823
|
+
};
|
|
824
|
+
for (const step of recipe.steps) {
|
|
825
|
+
visit(step.id, []);
|
|
826
|
+
}
|
|
827
|
+
});
|
|
828
|
+
}
|
|
545
829
|
function parseSeedManifest(value, diagnostics) {
|
|
546
830
|
walkForSecrets(value, "", diagnostics);
|
|
547
831
|
if (!isRecord(value)) {
|
|
@@ -590,10 +874,15 @@ function parseSeedManifest(value, diagnostics) {
|
|
|
590
874
|
description: asString(value.description) || void 0,
|
|
591
875
|
defaultEnvironments,
|
|
592
876
|
environments,
|
|
593
|
-
resources
|
|
877
|
+
resources,
|
|
878
|
+
operationRecipes: Array.isArray(value.operationRecipes) ? value.operationRecipes.map((recipe, index) => parseOperationRecipe(recipe, `operationRecipes[${index}]`, diagnostics, environments)).filter((recipe) => Boolean(recipe)) : []
|
|
594
879
|
};
|
|
880
|
+
if (value.operationRecipes !== void 0 && !Array.isArray(value.operationRecipes)) {
|
|
881
|
+
diagnostics.push(errorDiagnostic("seed.invalid_operation_recipes", "operationRecipes must be an array.", "operationRecipes"));
|
|
882
|
+
}
|
|
595
883
|
validateResourceKeys(manifest, diagnostics);
|
|
596
884
|
validateReferences(manifest, diagnostics);
|
|
885
|
+
validateOperationRecipes(manifest, diagnostics);
|
|
597
886
|
if (diagnostics.length === 0 && manifest.resources.projects.length === 0) {
|
|
598
887
|
diagnostics.push(warningDiagnostic("seed.empty_projects", "Seed manifest does not define projects.", "resources.projects"));
|
|
599
888
|
}
|
package/dist/seeds/types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type SeedEnvironment = typeof SEED_ENVIRONMENTS[number];
|
|
|
3
3
|
export type SeedDiagnosticSeverity = 'error' | 'warning';
|
|
4
4
|
export type SeedPlanActionType = 'create' | 'update' | 'unchanged' | 'skip' | 'delete' | 'error';
|
|
5
5
|
export type SeedResourceKind = 'team' | 'repositoryHost' | 'project' | 'hubRepository' | 'capacityProvider' | 'capacityLane' | 'capacityGrant' | 'workPolicy' | 'product' | 'catalogArtifact';
|
|
6
|
+
export type SeedOperationRecipeChannel = 'cli' | 'ui' | 'api' | 'provider-runtime' | 'system-check';
|
|
6
7
|
export type SeedDiagnostic = {
|
|
7
8
|
severity: SeedDiagnosticSeverity;
|
|
8
9
|
code: string;
|
|
@@ -13,6 +14,32 @@ export type SeedResourceBase = {
|
|
|
13
14
|
key: string;
|
|
14
15
|
environments?: SeedEnvironment[];
|
|
15
16
|
};
|
|
17
|
+
export declare const SEED_PROJECT_TOPOLOGIES: readonly ["single_repository_site", "split_site_content", "parent_workspace"];
|
|
18
|
+
export declare const SEED_CONTENT_RUNTIME_SOURCES: readonly ["local_directory", "treedx_snapshot", "r2_published_manifest", "r2_preview_overlay"];
|
|
19
|
+
export declare const SEED_LOCAL_CONTENT_MATERIALIZATIONS: readonly ["none", "existing_path", "managed_clone", "submodule"];
|
|
20
|
+
export declare const SEED_CONTENT_PUBLISH_TARGETS: readonly ["none", "cloudflare_r2"];
|
|
21
|
+
export type SeedProjectTopology = typeof SEED_PROJECT_TOPOLOGIES[number];
|
|
22
|
+
export type SeedContentRuntimeSource = typeof SEED_CONTENT_RUNTIME_SOURCES[number];
|
|
23
|
+
export type SeedLocalContentMaterialization = typeof SEED_LOCAL_CONTENT_MATERIALIZATIONS[number];
|
|
24
|
+
export type SeedContentPublishTargetKind = typeof SEED_CONTENT_PUBLISH_TARGETS[number];
|
|
25
|
+
export type SeedProjectContentPublishTarget = {
|
|
26
|
+
kind: SeedContentPublishTargetKind;
|
|
27
|
+
bucket?: string;
|
|
28
|
+
prefix?: string;
|
|
29
|
+
manifestPath?: string;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
};
|
|
32
|
+
export type SeedProjectArchitecture = {
|
|
33
|
+
topology: SeedProjectTopology;
|
|
34
|
+
rootPath: string;
|
|
35
|
+
sitePath: string;
|
|
36
|
+
contentPath?: string;
|
|
37
|
+
contentRuntimeSource: SeedContentRuntimeSource;
|
|
38
|
+
localContentMaterialization: SeedLocalContentMaterialization;
|
|
39
|
+
contentPublishTarget?: SeedProjectContentPublishTarget;
|
|
40
|
+
requiresLocalContentForCi?: boolean;
|
|
41
|
+
requiresLocalContentForDeploy?: boolean;
|
|
42
|
+
};
|
|
16
43
|
export type SeedManifest = {
|
|
17
44
|
name: string;
|
|
18
45
|
version: 1;
|
|
@@ -20,6 +47,7 @@ export type SeedManifest = {
|
|
|
20
47
|
defaultEnvironments?: SeedEnvironment[];
|
|
21
48
|
environments: SeedEnvironment[];
|
|
22
49
|
resources: SeedManifestResources;
|
|
50
|
+
operationRecipes: SeedOperationRecipe[];
|
|
23
51
|
};
|
|
24
52
|
export type SeedManifestResources = {
|
|
25
53
|
teams: SeedTeamResource[];
|
|
@@ -59,6 +87,7 @@ export type SeedProjectResource = SeedResourceBase & {
|
|
|
59
87
|
description?: string;
|
|
60
88
|
kind?: string;
|
|
61
89
|
repository: SeedProjectRepository;
|
|
90
|
+
architecture: SeedProjectArchitecture;
|
|
62
91
|
metadata?: Record<string, unknown>;
|
|
63
92
|
};
|
|
64
93
|
export type SeedRepositoryHostResource = SeedResourceBase & {
|
|
@@ -133,6 +162,7 @@ export type SeedCapacityLaneResource = SeedResourceBase & {
|
|
|
133
162
|
export type SeedCapacityProviderRegistrationApiKey = {
|
|
134
163
|
createIfMissing?: boolean;
|
|
135
164
|
name?: string;
|
|
165
|
+
plaintextKey?: string;
|
|
136
166
|
scopes?: string[];
|
|
137
167
|
expiresAt?: string;
|
|
138
168
|
};
|
|
@@ -219,6 +249,35 @@ export type SeedWorkPolicyResource = SeedResourceBase & {
|
|
|
219
249
|
creditWeights?: unknown[];
|
|
220
250
|
metadata?: Record<string, unknown>;
|
|
221
251
|
};
|
|
252
|
+
export type SeedOperationRecipeCommand = {
|
|
253
|
+
argv: string[];
|
|
254
|
+
};
|
|
255
|
+
export type SeedOperationRecipeAssertion = Record<string, unknown>;
|
|
256
|
+
export type SeedOperationRecipeArtifact = Record<string, unknown>;
|
|
257
|
+
export type SeedOperationRecipeStep = {
|
|
258
|
+
id: string;
|
|
259
|
+
title: string;
|
|
260
|
+
actor?: string;
|
|
261
|
+
channel: SeedOperationRecipeChannel;
|
|
262
|
+
operation: string;
|
|
263
|
+
dependsOn: string[];
|
|
264
|
+
uses: string[];
|
|
265
|
+
target?: string;
|
|
266
|
+
command?: SeedOperationRecipeCommand;
|
|
267
|
+
assertions: SeedOperationRecipeAssertion[];
|
|
268
|
+
artifacts: SeedOperationRecipeArtifact[];
|
|
269
|
+
};
|
|
270
|
+
export type SeedOperationRecipe = {
|
|
271
|
+
id: string;
|
|
272
|
+
title: string;
|
|
273
|
+
environments: SeedEnvironment[];
|
|
274
|
+
entrypoints: string[];
|
|
275
|
+
steps: SeedOperationRecipeStep[];
|
|
276
|
+
};
|
|
277
|
+
export type SeedOperationRecipePlan = SeedOperationRecipe & {
|
|
278
|
+
selected: boolean;
|
|
279
|
+
orderedSteps: SeedOperationRecipeStep[];
|
|
280
|
+
};
|
|
222
281
|
export type NormalizedSeedResource = {
|
|
223
282
|
kind: SeedResourceKind;
|
|
224
283
|
key: string;
|
|
@@ -247,6 +306,7 @@ export type SeedPlan = {
|
|
|
247
306
|
environments: SeedEnvironment[];
|
|
248
307
|
summary: SeedPlanSummary;
|
|
249
308
|
actions: SeedPlanAction[];
|
|
309
|
+
recipes: SeedOperationRecipePlan[];
|
|
250
310
|
diagnostics: SeedDiagnostic[];
|
|
251
311
|
manifestPath: string;
|
|
252
312
|
};
|
package/dist/seeds/types.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
const SEED_ENVIRONMENTS = ["local", "staging", "prod"];
|
|
2
|
+
const SEED_PROJECT_TOPOLOGIES = ["single_repository_site", "split_site_content", "parent_workspace"];
|
|
3
|
+
const SEED_CONTENT_RUNTIME_SOURCES = ["local_directory", "treedx_snapshot", "r2_published_manifest", "r2_preview_overlay"];
|
|
4
|
+
const SEED_LOCAL_CONTENT_MATERIALIZATIONS = ["none", "existing_path", "managed_clone", "submodule"];
|
|
5
|
+
const SEED_CONTENT_PUBLISH_TARGETS = ["none", "cloudflare_r2"];
|
|
2
6
|
export {
|
|
3
|
-
|
|
7
|
+
SEED_CONTENT_PUBLISH_TARGETS,
|
|
8
|
+
SEED_CONTENT_RUNTIME_SOURCES,
|
|
9
|
+
SEED_ENVIRONMENTS,
|
|
10
|
+
SEED_LOCAL_CONTENT_MATERIALIZATIONS,
|
|
11
|
+
SEED_PROJECT_TOPOLOGIES
|
|
4
12
|
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export declare const TREESEED_GITHUB_TOKEN_ENV = "TREESEED_GITHUB_TOKEN";
|
|
2
|
+
export declare const TREESEED_GITHUB_COPILOT_TOKEN_ENV = "TREESEED_GITHUB_COPILOT_TOKEN";
|
|
3
|
+
export declare const TREESEED_CLOUDFLARE_API_TOKEN_ENV = "TREESEED_CLOUDFLARE_API_TOKEN";
|
|
4
|
+
export declare const TREESEED_CLOUDFLARE_ACCOUNT_ID_ENV = "TREESEED_CLOUDFLARE_ACCOUNT_ID";
|
|
5
|
+
export declare const TREESEED_RAILWAY_API_TOKEN_ENV = "TREESEED_RAILWAY_API_TOKEN";
|
|
6
|
+
export declare const TREESEED_RAILWAY_TOKEN_ENV = "TREESEED_RAILWAY_TOKEN";
|
|
7
|
+
export declare const TREESEED_DOCKERHUB_TOKEN_ENV = "TREESEED_DOCKERHUB_TOKEN";
|
|
8
|
+
export declare const TREESEED_DOCKERHUB_USERNAME_ENV = "TREESEED_DOCKERHUB_USERNAME";
|
|
9
|
+
export declare const TREESEED_CODEX_API_KEY_ENV = "TREESEED_CODEX_API_KEY";
|
|
10
|
+
type EnvLike = Record<string, string | undefined>;
|
|
11
|
+
export declare function resolveTreeseedGitHubToken(env?: EnvLike): string;
|
|
12
|
+
export declare function resolveTreeseedGitHubCopilotToken(env?: EnvLike): string;
|
|
13
|
+
export declare function resolveTreeseedCloudflareApiToken(env?: EnvLike): string;
|
|
14
|
+
export declare function resolveTreeseedCloudflareAccountId(env?: EnvLike): string;
|
|
15
|
+
export declare function resolveTreeseedRailwayApiToken(env?: EnvLike): string;
|
|
16
|
+
export declare function resolveTreeseedRailwayProjectToken(env?: EnvLike): string;
|
|
17
|
+
export declare function resolveTreeseedDockerhubToken(env?: EnvLike): string;
|
|
18
|
+
export declare function resolveTreeseedDockerhubUsername(env?: EnvLike): string;
|
|
19
|
+
export declare function resolveTreeseedCodexApiKey(env?: EnvLike): string;
|
|
20
|
+
export declare function withGitHubServiceCredentialEnv<TEnv extends EnvLike>(env: TEnv): TEnv & {
|
|
21
|
+
GH_TOKEN?: string;
|
|
22
|
+
GITHUB_TOKEN?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare function withCloudflareServiceCredentialEnv<TEnv extends EnvLike>(env: TEnv): TEnv & {
|
|
25
|
+
CLOUDFLARE_API_TOKEN?: string;
|
|
26
|
+
CLOUDFLARE_ACCOUNT_ID?: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function withRailwayServiceCredentialEnv<TEnv extends EnvLike>(env: TEnv): TEnv & {
|
|
29
|
+
RAILWAY_API_TOKEN?: string;
|
|
30
|
+
RAILWAY_TOKEN?: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function withDockerhubServiceCredentialEnv<TEnv extends EnvLike>(env: TEnv): TEnv & {
|
|
33
|
+
DOCKERHUB_TOKEN?: string;
|
|
34
|
+
DOCKERHUB_USERNAME?: string;
|
|
35
|
+
};
|
|
36
|
+
export declare function withCodexServiceCredentialEnv<TEnv extends EnvLike>(env: TEnv): TEnv & {
|
|
37
|
+
CODEX_API_KEY?: string;
|
|
38
|
+
};
|
|
39
|
+
export declare function withTreeseedServiceCredentialEnv<TEnv extends EnvLike>(env: TEnv): TEnv & {
|
|
40
|
+
GH_TOKEN?: string;
|
|
41
|
+
GITHUB_TOKEN?: string;
|
|
42
|
+
} & {
|
|
43
|
+
CLOUDFLARE_API_TOKEN?: string;
|
|
44
|
+
CLOUDFLARE_ACCOUNT_ID?: string;
|
|
45
|
+
} & {
|
|
46
|
+
RAILWAY_API_TOKEN?: string;
|
|
47
|
+
RAILWAY_TOKEN?: string;
|
|
48
|
+
} & {
|
|
49
|
+
DOCKERHUB_TOKEN?: string;
|
|
50
|
+
DOCKERHUB_USERNAME?: string;
|
|
51
|
+
} & {
|
|
52
|
+
CODEX_API_KEY?: string;
|
|
53
|
+
};
|
|
54
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
const TREESEED_GITHUB_TOKEN_ENV = "TREESEED_GITHUB_TOKEN";
|
|
2
|
+
const TREESEED_GITHUB_COPILOT_TOKEN_ENV = "TREESEED_GITHUB_COPILOT_TOKEN";
|
|
3
|
+
const TREESEED_CLOUDFLARE_API_TOKEN_ENV = "TREESEED_CLOUDFLARE_API_TOKEN";
|
|
4
|
+
const TREESEED_CLOUDFLARE_ACCOUNT_ID_ENV = "TREESEED_CLOUDFLARE_ACCOUNT_ID";
|
|
5
|
+
const TREESEED_RAILWAY_API_TOKEN_ENV = "TREESEED_RAILWAY_API_TOKEN";
|
|
6
|
+
const TREESEED_RAILWAY_TOKEN_ENV = "TREESEED_RAILWAY_TOKEN";
|
|
7
|
+
const TREESEED_DOCKERHUB_TOKEN_ENV = "TREESEED_DOCKERHUB_TOKEN";
|
|
8
|
+
const TREESEED_DOCKERHUB_USERNAME_ENV = "TREESEED_DOCKERHUB_USERNAME";
|
|
9
|
+
const TREESEED_CODEX_API_KEY_ENV = "TREESEED_CODEX_API_KEY";
|
|
10
|
+
function configuredValue(env, key) {
|
|
11
|
+
const value = env?.[key];
|
|
12
|
+
return typeof value === "string" && value.trim() ? value.trim() : "";
|
|
13
|
+
}
|
|
14
|
+
function resolveTreeseedGitHubToken(env = process.env) {
|
|
15
|
+
return configuredValue(env, TREESEED_GITHUB_TOKEN_ENV);
|
|
16
|
+
}
|
|
17
|
+
function resolveTreeseedGitHubCopilotToken(env = process.env) {
|
|
18
|
+
return configuredValue(env, TREESEED_GITHUB_COPILOT_TOKEN_ENV);
|
|
19
|
+
}
|
|
20
|
+
function resolveTreeseedCloudflareApiToken(env = process.env) {
|
|
21
|
+
return configuredValue(env, TREESEED_CLOUDFLARE_API_TOKEN_ENV);
|
|
22
|
+
}
|
|
23
|
+
function resolveTreeseedCloudflareAccountId(env = process.env) {
|
|
24
|
+
return configuredValue(env, TREESEED_CLOUDFLARE_ACCOUNT_ID_ENV);
|
|
25
|
+
}
|
|
26
|
+
function resolveTreeseedRailwayApiToken(env = process.env) {
|
|
27
|
+
return configuredValue(env, TREESEED_RAILWAY_API_TOKEN_ENV);
|
|
28
|
+
}
|
|
29
|
+
function resolveTreeseedRailwayProjectToken(env = process.env) {
|
|
30
|
+
return configuredValue(env, TREESEED_RAILWAY_TOKEN_ENV);
|
|
31
|
+
}
|
|
32
|
+
function resolveTreeseedDockerhubToken(env = process.env) {
|
|
33
|
+
return configuredValue(env, TREESEED_DOCKERHUB_TOKEN_ENV);
|
|
34
|
+
}
|
|
35
|
+
function resolveTreeseedDockerhubUsername(env = process.env) {
|
|
36
|
+
return configuredValue(env, TREESEED_DOCKERHUB_USERNAME_ENV);
|
|
37
|
+
}
|
|
38
|
+
function resolveTreeseedCodexApiKey(env = process.env) {
|
|
39
|
+
return configuredValue(env, TREESEED_CODEX_API_KEY_ENV);
|
|
40
|
+
}
|
|
41
|
+
function withGitHubServiceCredentialEnv(env) {
|
|
42
|
+
const token = resolveTreeseedGitHubToken(env);
|
|
43
|
+
return token ? { ...env, GH_TOKEN: token, GITHUB_TOKEN: token } : { ...env };
|
|
44
|
+
}
|
|
45
|
+
function withCloudflareServiceCredentialEnv(env) {
|
|
46
|
+
const token = resolveTreeseedCloudflareApiToken(env);
|
|
47
|
+
const accountId = resolveTreeseedCloudflareAccountId(env);
|
|
48
|
+
return {
|
|
49
|
+
...env,
|
|
50
|
+
...token ? { CLOUDFLARE_API_TOKEN: token } : {},
|
|
51
|
+
...accountId ? { CLOUDFLARE_ACCOUNT_ID: accountId } : {}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function withRailwayServiceCredentialEnv(env) {
|
|
55
|
+
const token = resolveTreeseedRailwayApiToken(env);
|
|
56
|
+
const projectToken = resolveTreeseedRailwayProjectToken(env);
|
|
57
|
+
return {
|
|
58
|
+
...env,
|
|
59
|
+
...token ? { RAILWAY_API_TOKEN: token } : {},
|
|
60
|
+
...projectToken ? { RAILWAY_TOKEN: projectToken } : {}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function withDockerhubServiceCredentialEnv(env) {
|
|
64
|
+
const token = resolveTreeseedDockerhubToken(env);
|
|
65
|
+
const username = resolveTreeseedDockerhubUsername(env);
|
|
66
|
+
return {
|
|
67
|
+
...env,
|
|
68
|
+
...token ? { DOCKERHUB_TOKEN: token } : {},
|
|
69
|
+
...username ? { DOCKERHUB_USERNAME: username } : {}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function withCodexServiceCredentialEnv(env) {
|
|
73
|
+
const token = resolveTreeseedCodexApiKey(env);
|
|
74
|
+
return token ? { ...env, CODEX_API_KEY: token } : { ...env };
|
|
75
|
+
}
|
|
76
|
+
function withTreeseedServiceCredentialEnv(env) {
|
|
77
|
+
return withCodexServiceCredentialEnv(
|
|
78
|
+
withDockerhubServiceCredentialEnv(
|
|
79
|
+
withRailwayServiceCredentialEnv(
|
|
80
|
+
withCloudflareServiceCredentialEnv(
|
|
81
|
+
withGitHubServiceCredentialEnv(env)
|
|
82
|
+
)
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
export {
|
|
88
|
+
TREESEED_CLOUDFLARE_ACCOUNT_ID_ENV,
|
|
89
|
+
TREESEED_CLOUDFLARE_API_TOKEN_ENV,
|
|
90
|
+
TREESEED_CODEX_API_KEY_ENV,
|
|
91
|
+
TREESEED_DOCKERHUB_TOKEN_ENV,
|
|
92
|
+
TREESEED_DOCKERHUB_USERNAME_ENV,
|
|
93
|
+
TREESEED_GITHUB_COPILOT_TOKEN_ENV,
|
|
94
|
+
TREESEED_GITHUB_TOKEN_ENV,
|
|
95
|
+
TREESEED_RAILWAY_API_TOKEN_ENV,
|
|
96
|
+
TREESEED_RAILWAY_TOKEN_ENV,
|
|
97
|
+
resolveTreeseedCloudflareAccountId,
|
|
98
|
+
resolveTreeseedCloudflareApiToken,
|
|
99
|
+
resolveTreeseedCodexApiKey,
|
|
100
|
+
resolveTreeseedDockerhubToken,
|
|
101
|
+
resolveTreeseedDockerhubUsername,
|
|
102
|
+
resolveTreeseedGitHubCopilotToken,
|
|
103
|
+
resolveTreeseedGitHubToken,
|
|
104
|
+
resolveTreeseedRailwayApiToken,
|
|
105
|
+
resolveTreeseedRailwayProjectToken,
|
|
106
|
+
withCloudflareServiceCredentialEnv,
|
|
107
|
+
withCodexServiceCredentialEnv,
|
|
108
|
+
withDockerhubServiceCredentialEnv,
|
|
109
|
+
withGitHubServiceCredentialEnv,
|
|
110
|
+
withRailwayServiceCredentialEnv,
|
|
111
|
+
withTreeseedServiceCredentialEnv
|
|
112
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SdkCursorEntity, SdkCursorRequest, SdkGetCursorRequest, SdkSearchRequest, SdkUpdateRequest } from '../sdk-types.
|
|
2
|
-
import { SqliteStoreBase } from './helpers.
|
|
1
|
+
import type { SdkCursorEntity, SdkCursorRequest, SdkGetCursorRequest, SdkSearchRequest, SdkUpdateRequest } from '../sdk-types.js';
|
|
2
|
+
import { SqliteStoreBase } from './helpers.js';
|
|
3
3
|
export declare class CursorStore extends SqliteStoreBase {
|
|
4
4
|
private usesEnvelopeTable;
|
|
5
5
|
getByKey(key: string): Promise<SdkCursorEntity | null>;
|