@treeseed/sdk 0.12.62 → 0.13.0-rc.10
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/LICENSE +13 -0
- package/README.md +33 -359
- package/dist/accounts/account-contracts.d.ts +170 -0
- package/dist/accounts/account-contracts.js +33 -0
- package/dist/agent-capacity/allocation.d.ts +186 -0
- package/dist/agent-capacity/allocation.js +226 -0
- package/dist/agent-capacity/artifact-mutation-receipt.d.ts +49 -0
- package/dist/agent-capacity/artifact-mutation-receipt.js +36 -0
- package/dist/agent-capacity/artifacts.d.ts +107 -0
- package/dist/agent-capacity/artifacts.js +39 -0
- package/dist/agent-capacity/authority/agent-authority-presets.d.ts +13 -0
- package/dist/agent-capacity/authority/agent-authority-presets.js +106 -0
- package/dist/agent-capacity/contracts/capacity/assignments/assignment-records.d.ts +269 -0
- package/dist/agent-capacity/contracts/capacity/assignments/assignment-records.js +10 -0
- package/dist/agent-capacity/contracts/capacity/communication/communication-records.d.ts +101 -0
- package/dist/agent-capacity/contracts/capacity/communication/communication-records.js +9 -0
- package/dist/agent-capacity/contracts/capacity/providers/supply-policy.d.ts +36 -0
- package/dist/agent-capacity/contracts/capacity/providers/supply-policy.js +4 -0
- package/dist/agent-capacity/contracts/capacity/workdays/workday-records.d.ts +188 -0
- package/dist/agent-capacity/contracts/configuration/configuration.d.ts +11 -0
- package/dist/agent-capacity/contracts/configuration/configuration.js +20 -0
- package/dist/agent-capacity/contracts/operations/research-workflow.d.ts +59 -0
- package/dist/agent-capacity/contracts/operations/research-workflow.js +16 -0
- package/dist/agent-capacity/contracts/operations/workflow-promotion.d.ts +24 -0
- package/dist/agent-capacity/contracts/projects/agents/project-agent-class.d.ts +37 -0
- package/dist/agent-capacity/contracts/runtime/runtime-observability.d.ts +335 -0
- package/dist/agent-capacity/contracts/support/agent-atlas.d.ts +185 -0
- package/dist/agent-capacity/contracts/support/agent-atlas.js +47 -0
- package/dist/agent-capacity/contracts/support/agent-lab-monitoring.d.ts +96 -0
- package/dist/agent-capacity/contracts/support/agent-lab-monitoring.js +14 -0
- package/dist/agent-capacity/contracts/support/authority/execution-mode.d.ts +10 -0
- package/dist/agent-capacity/contracts/support/authority/execution-mode.js +17 -0
- package/dist/agent-capacity/contracts/support/decision-work.d.ts +251 -0
- package/dist/agent-capacity/contracts/support/failure-records.d.ts +9 -0
- package/dist/agent-capacity/contracts/support/failure-records.js +0 -0
- package/dist/agent-capacity/contracts/support/financial-records.d.ts +124 -0
- package/dist/agent-capacity/contracts/support/financial-records.js +0 -0
- package/dist/agent-capacity/contracts/support/planning-records.d.ts +121 -0
- package/dist/agent-capacity/contracts/support/planning-records.js +0 -0
- package/dist/agent-capacity/contracts/support/research-citation.d.ts +15 -0
- package/dist/agent-capacity/contracts/support/research-citation.js +0 -0
- package/dist/agent-capacity/contracts/support/research-source-policy.d.ts +8 -0
- package/dist/agent-capacity/contracts/support/research-source-policy.js +0 -0
- package/dist/agent-capacity/contracts/support/time-capacity.d.ts +163 -0
- package/dist/agent-capacity/contracts/support/time-capacity.js +63 -0
- package/dist/agent-capacity/policy/capacity/allocations/allocation-hierarchy.d.ts +29 -0
- package/dist/agent-capacity/policy/capacity/allocations/allocation-hierarchy.js +110 -0
- package/dist/agent-capacity/validation/activity-profile.d.ts +12 -0
- package/dist/agent-capacity/validation/activity-profile.js +264 -0
- package/dist/agent-capacity/validation/agent-definition-schema.d.ts +9140 -0
- package/dist/agent-capacity/validation/agent-definition-schema.js +198 -0
- package/dist/agent-capacity/validation/agent-lab-forensics-schema.d.ts +234 -0
- package/dist/agent-capacity/validation/agent-lab-forensics-schema.js +104 -0
- package/dist/agent-capacity/validation/agent-signal.d.ts +30 -0
- package/dist/agent-capacity/validation/agent-signal.js +31 -0
- package/dist/agent-capacity/validation/allocation.d.ts +12 -0
- package/dist/agent-capacity/validation/allocation.js +115 -0
- package/dist/agent-capacity/validation/assignment-records.d.ts +16 -0
- package/dist/agent-capacity/validation/assignment-records.js +92 -0
- package/dist/agent-capacity/validation/configuration.d.ts +14 -0
- package/dist/agent-capacity/validation/configuration.js +23 -0
- package/dist/agent-capacity/validation/index.d.ts +11 -0
- package/dist/agent-capacity/validation/index.js +11 -0
- package/dist/agent-capacity/validation/proposal-type.d.ts +22 -0
- package/dist/agent-capacity/validation/proposal-type.js +21 -0
- package/dist/agent-capacity/validation/research/citation.d.ts +16 -0
- package/dist/agent-capacity/validation/research/citation.js +47 -0
- package/dist/agent-capacity/validation/research/source-policy.d.ts +11 -0
- package/dist/agent-capacity/validation/research/source-policy.js +26 -0
- package/dist/agent-capacity/validation/research/workflow.d.ts +10 -0
- package/dist/agent-capacity/validation/research/workflow.js +31 -0
- package/dist/agent-capacity/validation/workflow-promotion.d.ts +2 -0
- package/dist/agent-capacity/validation/workflow-promotion.js +34 -0
- package/dist/agent-capacity/workday.d.ts +52 -0
- package/dist/agent-capacity/workday.js +105 -0
- package/dist/ai-appliance/contracts.d.ts +90 -0
- package/dist/ai-appliance/contracts.js +16 -0
- package/dist/ai-appliance/validation.d.ts +4 -0
- package/dist/ai-appliance/validation.js +62 -0
- package/dist/capacity/agents/agent-capacity.d.ts +21 -0
- package/dist/capacity/agents/agent-capacity.js +20 -0
- package/dist/capacity/capacity-core/capacity-pagination.d.ts +18 -0
- package/dist/capacity/capacity-core/capacity-pagination.js +33 -0
- package/dist/capacity/providers/capacity-provider.d.ts +1 -0
- package/dist/capacity/providers/capacity-provider.js +1 -0
- package/dist/capacity-provider/client.d.ts +56 -0
- package/dist/capacity-provider/client.js +163 -0
- package/dist/capacity-provider/contracts/capacity-facts.d.ts +64 -0
- package/dist/capacity-provider/contracts/capacity-facts.js +0 -0
- package/dist/capacity-provider/contracts/governance.d.ts +399 -0
- package/dist/capacity-provider/contracts/governance.js +18 -0
- package/dist/capacity-provider/contracts/index.d.ts +2 -0
- package/dist/capacity-provider/contracts/index.js +2 -0
- package/dist/capacity-provider/index.d.ts +3 -0
- package/dist/capacity-provider/index.js +3 -0
- package/dist/capacity-provider/validation.d.ts +27 -0
- package/dist/capacity-provider/validation.js +184 -0
- package/dist/configuration/secrets-capability.d.ts +4 -0
- package/dist/configuration/secrets-capability.js +4 -0
- package/dist/content/contracts.d.ts +12 -0
- package/dist/content/contracts.js +0 -0
- package/dist/content/validation/agent-operational-content-schemas.d.ts +1351 -0
- package/dist/content/validation/agent-operational-content-schemas.js +146 -0
- package/dist/content/validation/auxiliary-content-schemas.d.ts +1715 -0
- package/dist/content/validation/auxiliary-content-schemas.js +173 -0
- package/dist/content/validation/content-model-schemas.d.ts +21728 -0
- package/dist/content/validation/content-model-schemas.js +271 -0
- package/dist/content/validation/index.d.ts +3 -0
- package/dist/content/validation/index.js +3 -0
- package/dist/content/validation/portable-content-data.d.ts +2101 -0
- package/dist/content/validation/portable-content-data.js +49 -0
- package/dist/entrypoints/clients/control-plane-client.d.ts +112 -0
- package/dist/entrypoints/clients/control-plane-client.js +180 -0
- package/dist/entrypoints/models/field-aliases.d.ts +11 -0
- package/dist/entrypoints/models/model-registry.d.ts +3 -0
- package/dist/entrypoints/models/model-registry.js +3 -0
- package/dist/entrypoints/models/sdk-fields.d.ts +11 -0
- package/dist/entrypoints/models/sdk-types.d.ts +10 -0
- package/dist/entrypoints/models/sdk-types.js +10 -0
- package/dist/feedback/contracts.d.ts +142 -0
- package/dist/feedback/contracts.js +18 -0
- package/dist/feedback/index.d.ts +1 -0
- package/dist/feedback/index.js +1 -0
- package/dist/governance/groups/contracts.d.ts +102 -0
- package/dist/governance/groups/contracts.js +6 -0
- package/dist/graph/context-query-contracts.d.ts +19 -1
- package/dist/graph/context-query-contracts.js +49 -8
- package/dist/knowledge/contracts.d.ts +173 -0
- package/dist/knowledge/contracts.js +16 -0
- package/dist/knowledge/index.d.ts +1 -0
- package/dist/knowledge/index.js +1 -0
- package/dist/model-registry/agent-operational-models.d.ts +4 -0
- package/dist/model-registry/agent-operational-models.js +38 -0
- package/dist/model-registry/build-builtin-model-registry.d.ts +2 -0
- package/dist/model-registry/build-builtin-model-registry.js +426 -0
- package/dist/model-registry/content-root.d.ts +9 -0
- package/dist/model-registry/content-root.js +33 -0
- package/dist/model-registry/discussion-models.d.ts +4 -0
- package/dist/model-registry/discussion-models.js +84 -0
- package/dist/model-registry/group-models.d.ts +2 -0
- package/dist/model-registry/group-models.js +52 -0
- package/dist/model-registry/knowledge-models.d.ts +2 -0
- package/dist/model-registry/knowledge-models.js +89 -0
- package/dist/model-registry/normalize-definition.d.ts +8 -0
- package/dist/model-registry/normalize-definition.js +69 -0
- package/dist/operator-contracts/canonical-command-tree.d.ts +3 -0
- package/dist/operator-contracts/canonical-command-tree.js +81 -0
- package/dist/operator-contracts/command-tree.d.ts +79 -0
- package/dist/operator-contracts/command-tree.js +53 -0
- package/dist/operator-contracts/control-plane-operation.d.ts +80 -0
- package/dist/operator-contracts/control-plane-operation.js +75 -0
- package/dist/operator-contracts/control-plane-operations.d.ts +546 -0
- package/dist/operator-contracts/control-plane-operations.js +352 -0
- package/dist/operator-contracts/index.d.ts +8 -0
- package/dist/operator-contracts/index.js +8 -0
- package/dist/operator-contracts/mcp.d.ts +78 -0
- package/dist/operator-contracts/mcp.js +23 -0
- package/dist/operator-contracts/oauth.d.ts +46 -0
- package/dist/operator-contracts/oauth.js +0 -0
- package/dist/operator-contracts/workday-lifecycle.d.ts +157 -0
- package/dist/operator-contracts/workday-lifecycle.js +65 -0
- package/dist/operator-contracts/workday-profile.d.ts +72 -0
- package/dist/operator-contracts/workday-profile.js +106 -0
- package/dist/projects/projects-core/project-workflow.d.ts +179 -0
- package/dist/projects/projects-core/project-workflow.js +66 -0
- package/dist/sdk-types/configuration/sdk-dispatch-credential-source.d.ts +201 -0
- package/dist/sdk-types/configuration/sdk-dispatch-credential-source.js +0 -0
- package/dist/sdk-types/control-plane/resource-requests.d.ts +124 -0
- package/dist/sdk-types/control-plane/resource-requests.js +0 -0
- package/dist/sdk-types/governance/commons/commons-question-input.d.ts +61 -0
- package/dist/sdk-types/governance/commons/commons-question-input.js +0 -0
- package/dist/sdk-types/support/planning-policy.d.ts +210 -0
- package/dist/sdk-types/support/planning-policy.js +0 -0
- package/dist/sdk-types/support/platform-contracts.d.ts +178 -0
- package/dist/sdk-types/support/platform-contracts.js +15 -0
- package/dist/sdk-types/support/sdk-model-names.d.ts +44 -0
- package/dist/sdk-types/support/sdk-model-names.js +80 -0
- package/dist/sdk-types/support/sdk-search-request.d.ts +182 -0
- package/dist/sdk-types/support/sdk-search-request.js +0 -0
- package/dist/sdk-types/support/task-planning.d.ts +189 -0
- package/dist/sdk-types/support/task-planning.js +0 -0
- package/dist/sdk-types/treedx/graph/sdk-graph-query-request.d.ts +157 -0
- package/dist/sdk-types/treedx/graph/sdk-graph-query-request.js +0 -0
- package/dist/secrets-capability/provider-operation-contracts.d.ts +90 -0
- package/dist/secrets-capability/provider-operation-contracts.js +10 -0
- package/dist/secrets-capability/service-provider-contracts.d.ts +92 -0
- package/dist/secrets-capability/service-provider-contracts.js +183 -0
- package/dist/secrets-capability/service-vault-contracts.d.ts +61 -0
- package/dist/secrets-capability/service-vault-contracts.js +39 -0
- package/dist/secrets-capability/workflow-operation-contracts.d.ts +95 -0
- package/dist/secrets-capability/workflow-operation-contracts.js +0 -0
- package/dist/standards/canonicalize.d.ts +10 -0
- package/dist/standards/canonicalize.js +43 -0
- package/dist/standards/compatibility-attestation.d.ts +23 -0
- package/dist/standards/compatibility-attestation.js +40 -0
- package/dist/standards/composition.d.ts +15 -0
- package/dist/standards/composition.js +14 -0
- package/dist/standards/contract-bundle.d.ts +8 -0
- package/dist/standards/contract-bundle.js +23 -0
- package/dist/standards/contracts.d.ts +39 -0
- package/dist/standards/contracts.js +0 -0
- package/dist/standards/errors.d.ts +6 -0
- package/dist/standards/errors.js +13 -0
- package/dist/standards/index.d.ts +8 -0
- package/dist/standards/index.js +8 -0
- package/dist/standards/mcp/compare.d.ts +2 -0
- package/dist/standards/mcp/compare.js +38 -0
- package/dist/standards/mcp/contracts.d.ts +34 -0
- package/dist/standards/mcp/contracts.js +0 -0
- package/dist/standards/mcp/index.d.ts +3 -0
- package/dist/standards/mcp/index.js +3 -0
- package/dist/standards/mcp/normalize.d.ts +4 -0
- package/dist/standards/mcp/normalize.js +30 -0
- package/dist/standards/openapi/compare.d.ts +2 -0
- package/dist/standards/openapi/compare.js +112 -0
- package/dist/standards/openapi/contracts.d.ts +24 -0
- package/dist/standards/openapi/contracts.js +0 -0
- package/dist/standards/openapi/index.d.ts +3 -0
- package/dist/standards/openapi/index.js +3 -0
- package/dist/standards/openapi/normalize.d.ts +2 -0
- package/dist/standards/openapi/normalize.js +57 -0
- package/dist/standards/package-manifest.d.ts +37 -0
- package/dist/standards/package-manifest.js +89 -0
- package/dist/standards/portfolio-entry.d.ts +12 -0
- package/dist/standards/portfolio-entry.js +11 -0
- package/dist/standards/typescript/compare.d.ts +2 -0
- package/dist/standards/typescript/compare.js +88 -0
- package/dist/standards/typescript/contracts.d.ts +44 -0
- package/dist/standards/typescript/contracts.js +0 -0
- package/dist/standards/typescript/extract.d.ts +10 -0
- package/dist/standards/typescript/extract.js +244 -0
- package/dist/standards/typescript/index.d.ts +3 -0
- package/dist/standards/typescript/index.js +3 -0
- package/dist/treedx/accounts/auth.d.ts +17 -0
- package/dist/treedx/accounts/auth.js +48 -0
- package/dist/treedx/client/accounts/contracts/auth-mode.d.ts +3 -0
- package/dist/treedx/client/accounts/contracts/auth-mode.js +6 -0
- package/dist/treedx/client/build/creation/build-context.d.ts +3 -0
- package/dist/treedx/client/build/creation/build-context.js +7 -0
- package/dist/treedx/client/build/creation/build-snapshot.d.ts +3 -0
- package/dist/treedx/client/build/creation/build-snapshot.js +8 -0
- package/dist/treedx/client/capacity/allocations/contracts/put-capability-grant.d.ts +3 -0
- package/dist/treedx/client/capacity/allocations/contracts/put-capability-grant.js +7 -0
- package/dist/treedx/client/capacity/allocations/queries/list-capability-grants.d.ts +6 -0
- package/dist/treedx/client/capacity/allocations/queries/list-capability-grants.js +10 -0
- package/dist/treedx/client/methods.d.ts +102 -0
- package/dist/treedx/client/methods.js +209 -0
- package/dist/treedx/client/persistence/contracts/restore-storage.d.ts +3 -0
- package/dist/treedx/client/persistence/contracts/restore-storage.js +6 -0
- package/dist/treedx/client/persistence/lifecycle/verify-storage-restore.d.ts +3 -0
- package/dist/treedx/client/persistence/lifecycle/verify-storage-restore.js +6 -0
- package/dist/treedx/client/repositories/creation/register-repository.d.ts +3 -0
- package/dist/treedx/client/repositories/creation/register-repository.js +7 -0
- package/dist/treedx/client/repositories/queries/get-repository.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/get-repository.js +7 -0
- package/dist/treedx/client/repositories/queries/list-repository-paths.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/list-repository-paths.js +7 -0
- package/dist/treedx/client/repositories/queries/list-repository-refs.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/list-repository-refs.js +12 -0
- package/dist/treedx/client/repositories/queries/query-repository.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/query-repository.js +7 -0
- package/dist/treedx/client/repositories/queries/read-repository-file.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/read-repository-file.js +6 -0
- package/dist/treedx/client/repositories/queries/read-repository-files.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/read-repository-files.js +7 -0
- package/dist/treedx/client/repositories/queries/search-repository-files.d.ts +3 -0
- package/dist/treedx/client/repositories/queries/search-repository-files.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/artifacts/contracts/download-artifact.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/artifacts/contracts/download-artifact.js +9 -0
- package/dist/treedx/client/support/contracts/treedx/authorization/contracts/whoami.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/authorization/contracts/whoami.js +6 -0
- package/dist/treedx/client/support/contracts/treedx/graph/contracts/parse-context-dsl.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/graph/contracts/parse-context-dsl.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/deep-health.d.ts +5 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/deep-health.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/health.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/health.js +6 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/metrics.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/metrics.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/prometheus-metrics.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/prometheus-metrics.js +19 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/ready.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/ready.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/status.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/health/contracts/status.js +6 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/commit.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/commit.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/diff.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/diff.js +6 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/fetch-remote.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/fetch-remote.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/push.d.ts +6 -0
- package/dist/treedx/client/support/contracts/treedx/repositories/contracts/push.js +23 -0
- package/dist/treedx/client/support/contracts/treedx/search/contracts/compact-search-index.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/search/contracts/compact-search-index.js +8 -0
- package/dist/treedx/client/support/contracts/treedx/search/contracts/search.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/search/contracts/search.js +7 -0
- package/dist/treedx/client/support/contracts/treedx/storage/contracts/backup-storage.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/storage/contracts/backup-storage.js +8 -0
- package/dist/treedx/client/support/contracts/treedx/storage/contracts/compact-storage.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/storage/contracts/compact-storage.js +8 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/assert-binary-ok.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/assert-binary-ok.js +15 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/fetch-with-timeout.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/fetch-with-timeout.js +38 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/headers.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/headers.js +15 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/parse-json-response.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/parse-json-response.js +15 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/query.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/query.js +14 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/repo-id.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/repo-id.js +14 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/request.d.ts +6 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/request.js +41 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/throw-api-error.d.ts +2 -0
- package/dist/treedx/client/support/contracts/treedx/transport/contracts/throw-api-error.js +14 -0
- package/dist/treedx/client/support/contracts/treedx/workspaces/contracts/exec.d.ts +3 -0
- package/dist/treedx/client/support/contracts/treedx/workspaces/contracts/exec.js +7 -0
- package/dist/treedx/client/support/creation/apply-changeset.d.ts +3 -0
- package/dist/treedx/client/support/creation/apply-changeset.js +10 -0
- package/dist/treedx/client/support/creation/apply-storage-migration.d.ts +3 -0
- package/dist/treedx/client/support/creation/apply-storage-migration.js +7 -0
- package/dist/treedx/client/support/creation/create-migration.d.ts +6 -0
- package/dist/treedx/client/support/creation/create-migration.js +7 -0
- package/dist/treedx/client/support/creation/export-artifact.d.ts +3 -0
- package/dist/treedx/client/support/creation/export-artifact.js +8 -0
- package/dist/treedx/client/support/creation/plan-storage-migration.d.ts +3 -0
- package/dist/treedx/client/support/creation/plan-storage-migration.js +7 -0
- package/dist/treedx/client/support/creation/request-binary.d.ts +6 -0
- package/dist/treedx/client/support/creation/request-binary.js +42 -0
- package/dist/treedx/client/support/creation/write-file.d.ts +3 -0
- package/dist/treedx/client/support/creation/write-file.js +10 -0
- package/dist/treedx/client/support/creation/write-files.d.ts +3 -0
- package/dist/treedx/client/support/creation/write-files.js +12 -0
- package/dist/treedx/client/support/queries/treedx/artifacts/queries/get-artifact.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/artifacts/queries/get-artifact.js +7 -0
- package/dist/treedx/client/support/queries/treedx/artifacts/queries/list-artifacts.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/artifacts/queries/list-artifacts.js +7 -0
- package/dist/treedx/client/support/queries/treedx/authorization/queries/effective-scope.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/authorization/queries/effective-scope.js +9 -0
- package/dist/treedx/client/support/queries/treedx/authorization/queries/list-capabilities.d.ts +4 -0
- package/dist/treedx/client/support/queries/treedx/authorization/queries/list-capabilities.js +6 -0
- package/dist/treedx/client/support/queries/treedx/federation/queries/get-placement.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/federation/queries/get-placement.js +7 -0
- package/dist/treedx/client/support/queries/treedx/graph/queries/get-node.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/graph/queries/get-node.js +7 -0
- package/dist/treedx/client/support/queries/treedx/graph/queries/get-related.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/graph/queries/get-related.js +7 -0
- package/dist/treedx/client/support/queries/treedx/graph/queries/list-nodes.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/graph/queries/list-nodes.js +7 -0
- package/dist/treedx/client/support/queries/treedx/repositories/queries/list-tree.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/repositories/queries/list-tree.js +10 -0
- package/dist/treedx/client/support/queries/treedx/repositories/queries/read-file.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/repositories/queries/read-file.js +9 -0
- package/dist/treedx/client/support/queries/treedx/search/queries/get-search-index-status.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/search/queries/get-search-index-status.js +7 -0
- package/dist/treedx/client/support/queries/treedx/storage/queries/get-migration.d.ts +6 -0
- package/dist/treedx/client/support/queries/treedx/storage/queries/get-migration.js +7 -0
- package/dist/treedx/client/support/queries/treedx/storage/queries/get-snapshot.d.ts +6 -0
- package/dist/treedx/client/support/queries/treedx/storage/queries/get-snapshot.js +7 -0
- package/dist/treedx/client/support/queries/treedx/storage/queries/list-storage-migrations.d.ts +6 -0
- package/dist/treedx/client/support/queries/treedx/storage/queries/list-storage-migrations.js +6 -0
- package/dist/treedx/client/support/queries/treedx/transport/queries/list-audit-events.d.ts +15 -0
- package/dist/treedx/client/support/queries/treedx/transport/queries/list-audit-events.js +6 -0
- package/dist/treedx/client/support/queries/treedx/transport/queries/list-repositories.d.ts +3 -0
- package/dist/treedx/client/support/queries/treedx/transport/queries/list-repositories.js +7 -0
- package/dist/treedx/client/support/retirement/cleanup-artifacts.d.ts +3 -0
- package/dist/treedx/client/support/retirement/cleanup-artifacts.js +7 -0
- package/dist/treedx/client/support/retirement/delete-artifact.d.ts +3 -0
- package/dist/treedx/client/support/retirement/delete-artifact.js +7 -0
- package/dist/treedx/client/support/retirement/delete-file.d.ts +3 -0
- package/dist/treedx/client/support/retirement/delete-file.js +10 -0
- package/dist/treedx/client/support/retirement/rollback-storage-migration.d.ts +3 -0
- package/dist/treedx/client/support/retirement/rollback-storage-migration.js +7 -0
- package/dist/treedx/client/support/updates/patch-file.d.ts +3 -0
- package/dist/treedx/client/support/updates/patch-file.js +10 -0
- package/dist/treedx/client/support/updates/refresh-search-index.d.ts +3 -0
- package/dist/treedx/client/support/updates/refresh-search-index.js +8 -0
- package/dist/treedx/client/treedx/blobs/contracts/download-blob.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/contracts/download-blob.js +6 -0
- package/dist/treedx/client/treedx/blobs/creation/create-blob-upload.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/creation/create-blob-upload.js +8 -0
- package/dist/treedx/client/treedx/blobs/creation/request-blob-download.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/creation/request-blob-download.js +27 -0
- package/dist/treedx/client/treedx/blobs/creation/request-blob-upload.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/creation/request-blob-upload.js +41 -0
- package/dist/treedx/client/treedx/blobs/creation/upload-blob-part.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/creation/upload-blob-part.js +27 -0
- package/dist/treedx/client/treedx/blobs/creation/upload-blob.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/creation/upload-blob.js +6 -0
- package/dist/treedx/client/treedx/blobs/creation/write-blob.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/creation/write-blob.js +8 -0
- package/dist/treedx/client/treedx/blobs/lifecycle/complete-blob-upload.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/lifecycle/complete-blob-upload.js +8 -0
- package/dist/treedx/client/treedx/blobs/queries/read-blob.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/queries/read-blob.js +10 -0
- package/dist/treedx/client/treedx/blobs/retirement/abort-blob-upload.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/retirement/abort-blob-upload.js +7 -0
- package/dist/treedx/client/treedx/blobs/retirement/delete-blob.d.ts +3 -0
- package/dist/treedx/client/treedx/blobs/retirement/delete-blob.js +8 -0
- package/dist/treedx/client/treedx/federation/contracts/federated-query.d.ts +3 -0
- package/dist/treedx/client/treedx/federation/contracts/federated-query.js +7 -0
- package/dist/treedx/client/treedx/federation/creation/plan-federated-query.d.ts +3 -0
- package/dist/treedx/client/treedx/federation/creation/plan-federated-query.js +6 -0
- package/dist/treedx/client/treedx/federation/queries/check-mirror-health.d.ts +3 -0
- package/dist/treedx/client/treedx/federation/queries/check-mirror-health.js +7 -0
- package/dist/treedx/client/treedx/federation/updates/promote-mirror.d.ts +3 -0
- package/dist/treedx/client/treedx/federation/updates/promote-mirror.js +7 -0
- package/dist/treedx/client/treedx/federation/updates/sync-mirror.d.ts +3 -0
- package/dist/treedx/client/treedx/federation/updates/sync-mirror.js +7 -0
- package/dist/treedx/client/treedx/graph/contracts/federated-context.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/contracts/federated-context.js +7 -0
- package/dist/treedx/client/treedx/graph/contracts/federated-graph.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/contracts/federated-graph.js +7 -0
- package/dist/treedx/client/treedx/graph/contracts/graph-search.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/contracts/graph-search.js +8 -0
- package/dist/treedx/client/treedx/graph/queries/get-graph-node.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/get-graph-node.js +10 -0
- package/dist/treedx/client/treedx/graph/queries/get-graph-refresh-job.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/get-graph-refresh-job.js +7 -0
- package/dist/treedx/client/treedx/graph/queries/get-subgraph.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/get-subgraph.js +7 -0
- package/dist/treedx/client/treedx/graph/queries/query-graph.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/query-graph.js +7 -0
- package/dist/treedx/client/treedx/graph/queries/search-graph-entities.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/search-graph-entities.js +6 -0
- package/dist/treedx/client/treedx/graph/queries/search-graph-files.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/search-graph-files.js +6 -0
- package/dist/treedx/client/treedx/graph/queries/search-graph-sections.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/queries/search-graph-sections.js +6 -0
- package/dist/treedx/client/treedx/graph/updates/refresh-graph.d.ts +3 -0
- package/dist/treedx/client/treedx/graph/updates/refresh-graph.js +7 -0
- package/dist/treedx/client/treedx/search/contracts/federated-search.d.ts +3 -0
- package/dist/treedx/client/treedx/search/contracts/federated-search.js +7 -0
- package/dist/treedx/client/treedx/workspaces/creation/create-workspace.d.ts +3 -0
- package/dist/treedx/client/treedx/workspaces/creation/create-workspace.js +7 -0
- package/dist/treedx/client/treedx/workspaces/retirement/abandon-workspace.d.ts +3 -0
- package/dist/treedx/client/treedx/workspaces/retirement/abandon-workspace.js +12 -0
- package/dist/treedx/client/treedx/workspaces/retirement/close-workspace.d.ts +2 -0
- package/dist/treedx/client/treedx/workspaces/retirement/close-workspace.js +6 -0
- package/dist/treedx/generated/openapi-types.d.ts +104 -0
- package/dist/treedx/support/client.d.ts +251 -0
- package/dist/treedx/support/client.js +252 -0
- package/dist/treedx/support/errors.d.ts +13 -0
- package/dist/treedx/types/tree-dx-actor.d.ts +209 -0
- package/dist/treedx/types/tree-dx-actor.js +8 -0
- package/dist/treedx/types/tree-dx-artifact-list-response.d.ts +13 -0
- package/dist/treedx/types/tree-dx-artifact-list-response.js +0 -0
- package/dist/treedx/types/tree-dx-changeset.d.ts +51 -0
- package/dist/treedx/types/tree-dx-changeset.js +6 -0
- package/dist/treedx/types/tree-dx-context-request.d.ts +245 -0
- package/dist/treedx/types/tree-dx-context-request.js +0 -0
- package/dist/treedx/types/tree-dx-exec-result.d.ts +249 -0
- package/dist/treedx/types/tree-dx-exec-result.js +0 -0
- package/dist/treedx/types/tree-dx-list-tree-request.d.ts +222 -0
- package/dist/treedx/types/tree-dx-list-tree-request.js +0 -0
- package/dist/treedx/types/tree-dx-push-request.d.ts +229 -0
- package/dist/treedx/types/tree-dx-push-request.js +0 -0
- package/dist/treedx/types.d.ts +7 -1084
- package/dist/treedx/types.js +7 -8
- package/dist/types/agents/agent-activity-profile.d.ts +267 -0
- package/dist/types/agents/agent-activity-profile.js +0 -0
- package/dist/types/agents/agent-trigger-kinds.d.ts +189 -0
- package/dist/types/agents/agent-trigger-kinds.js +107 -0
- package/dist/types/agents/execution-run-ref.d.ts +136 -0
- package/dist/types/agents/execution-run-ref.js +0 -0
- package/dist/types/agents.d.ts +3 -493
- package/dist/types/agents.js +3 -95
- package/package.json +77 -362
- package/dist/agent-capacity.d.ts +0 -1100
- package/dist/agent-capacity.js +0 -1822
- package/dist/agent-tools.d.ts +0 -37
- package/dist/agent-tools.js +0 -301
- package/dist/api/app.d.ts +0 -8
- package/dist/api/app.js +0 -404
- package/dist/api/auth/d1-database.d.ts +0 -3
- package/dist/api/auth/d1-database.js +0 -20
- package/dist/api/auth/d1-provider.d.ts +0 -85
- package/dist/api/auth/d1-provider.js +0 -95
- package/dist/api/auth/d1-store.d.ts +0 -121
- package/dist/api/auth/d1-store.js +0 -990
- package/dist/api/auth/memory-provider.d.ts +0 -82
- package/dist/api/auth/memory-provider.js +0 -297
- package/dist/api/auth/rbac.d.ts +0 -22
- package/dist/api/auth/rbac.js +0 -162
- package/dist/api/auth/tokens.d.ts +0 -18
- package/dist/api/auth/tokens.js +0 -56
- package/dist/api/config.d.ts +0 -4
- package/dist/api/config.js +0 -149
- package/dist/api/http.d.ts +0 -28
- package/dist/api/http.js +0 -51
- package/dist/api/index.d.ts +0 -10
- package/dist/api/index.js +0 -29
- package/dist/api/operations-routes.d.ts +0 -11
- package/dist/api/operations-routes.js +0 -39
- package/dist/api/operations.d.ts +0 -3
- package/dist/api/operations.js +0 -26
- package/dist/api/providers.d.ts +0 -2
- package/dist/api/providers.js +0 -85
- package/dist/api/railway.d.ts +0 -53
- package/dist/api/railway.js +0 -71
- package/dist/api/sdk-dispatch.d.ts +0 -6
- package/dist/api/sdk-dispatch.js +0 -14
- package/dist/api/sdk-routes.d.ts +0 -11
- package/dist/api/sdk-routes.js +0 -29
- package/dist/api/templates.d.ts +0 -3
- package/dist/api/templates.js +0 -31
- package/dist/api/types.d.ts +0 -238
- package/dist/capacity-provider.d.ts +0 -494
- package/dist/capacity-provider.js +0 -727
- package/dist/capacity.d.ts +0 -483
- package/dist/capacity.js +0 -2331
- package/dist/cli-tools.d.ts +0 -3
- package/dist/cli-tools.js +0 -46
- package/dist/content-operations.d.ts +0 -97
- package/dist/content-operations.js +0 -250
- package/dist/content-store.d.ts +0 -25
- package/dist/content-store.js +0 -269
- package/dist/control-plane-client.d.ts +0 -203
- package/dist/control-plane-client.js +0 -540
- package/dist/control-plane.d.ts +0 -101
- package/dist/control-plane.js +0 -201
- package/dist/copilot.d.ts +0 -18
- package/dist/copilot.js +0 -90
- package/dist/d1-http.d.ts +0 -38
- package/dist/d1-http.js +0 -95
- package/dist/d1-store.d.ts +0 -336
- package/dist/d1-store.js +0 -1431
- package/dist/db/d1.d.ts +0 -246
- package/dist/db/d1.js +0 -8
- package/dist/db/index.d.ts +0 -3
- package/dist/db/index.js +0 -3
- package/dist/db/market-schema.d.ts +0 -83651
- package/dist/db/market-schema.js +0 -3725
- package/dist/db/node-sqlite.d.ts +0 -297
- package/dist/db/node-sqlite.js +0 -133
- package/dist/db/schema.d.ts +0 -483
- package/dist/db/schema.js +0 -29
- package/dist/dispatch.d.ts +0 -4
- package/dist/dispatch.js +0 -174
- package/dist/field-aliases.d.ts +0 -11
- package/dist/fixture-support.d.ts +0 -24
- package/dist/fixture-support.js +0 -385
- package/dist/frontmatter.d.ts +0 -6
- package/dist/frontmatter.js +0 -33
- package/dist/git-runtime.d.ts +0 -16
- package/dist/git-runtime.js +0 -69
- package/dist/governance.d.ts +0 -133
- package/dist/governance.js +0 -285
- package/dist/graph/build.d.ts +0 -19
- package/dist/graph/build.js +0 -949
- package/dist/graph/dsl.d.ts +0 -2
- package/dist/graph/dsl.js +0 -243
- package/dist/graph/query.d.ts +0 -47
- package/dist/graph/query.js +0 -447
- package/dist/graph/ranking.d.ts +0 -3
- package/dist/graph/ranking.js +0 -483
- package/dist/graph/schema.d.ts +0 -142
- package/dist/graph/schema.js +0 -137
- package/dist/graph.d.ts +0 -52
- package/dist/graph.js +0 -133
- package/dist/guarantees/index.d.ts +0 -512
- package/dist/guarantees/index.js +0 -1782
- package/dist/hosting/apps.d.ts +0 -12
- package/dist/hosting/apps.js +0 -107
- package/dist/hosting/builtins.d.ts +0 -25
- package/dist/hosting/builtins.js +0 -685
- package/dist/hosting/contracts.d.ts +0 -190
- package/dist/hosting/graph.d.ts +0 -110
- package/dist/hosting/graph.js +0 -993
- package/dist/hosting/index.d.ts +0 -4
- package/dist/hosting/index.js +0 -4
- package/dist/index.d.ts +0 -88
- package/dist/index.js +0 -757
- package/dist/local-dev/managed-dev.d.ts +0 -85
- package/dist/local-dev/managed-dev.js +0 -431
- package/dist/managed-dependencies.d.ts +0 -91
- package/dist/managed-dependencies.js +0 -1186
- package/dist/market-client.d.ts +0 -831
- package/dist/market-client.js +0 -1219
- package/dist/model-registry.d.ts +0 -8
- package/dist/model-registry.js +0 -674
- package/dist/operations/agent-tools.d.ts +0 -105
- package/dist/operations/agent-tools.js +0 -171
- package/dist/operations/providers/default.d.ts +0 -10
- package/dist/operations/providers/default.js +0 -1245
- package/dist/operations/repository-operations.d.ts +0 -158
- package/dist/operations/repository-operations.js +0 -851
- package/dist/operations/runtime.d.ts +0 -7
- package/dist/operations/runtime.js +0 -61
- package/dist/operations/services/bootstrap-runner.d.ts +0 -39
- package/dist/operations/services/bootstrap-runner.js +0 -191
- package/dist/operations/services/build-warning-policy.d.ts +0 -34
- package/dist/operations/services/build-warning-policy.js +0 -91
- package/dist/operations/services/commit-message-provider.d.ts +0 -65
- package/dist/operations/services/commit-message-provider.js +0 -496
- package/dist/operations/services/config-runtime.d.ts +0 -558
- package/dist/operations/services/config-runtime.js +0 -3494
- package/dist/operations/services/d1-migration.d.ts +0 -6
- package/dist/operations/services/d1-migration.js +0 -120
- package/dist/operations/services/deploy.d.ts +0 -645
- package/dist/operations/services/deploy.js +0 -3826
- package/dist/operations/services/deployment-readiness.d.ts +0 -30
- package/dist/operations/services/deployment-readiness.js +0 -217
- package/dist/operations/services/export-runtime.d.ts +0 -18
- package/dist/operations/services/export-runtime.js +0 -140
- package/dist/operations/services/git-remote-policy.d.ts +0 -9
- package/dist/operations/services/git-remote-policy.js +0 -63
- package/dist/operations/services/git-runner.d.ts +0 -68
- package/dist/operations/services/git-runner.js +0 -500
- package/dist/operations/services/git-workflow.d.ts +0 -255
- package/dist/operations/services/git-workflow.js +0 -845
- package/dist/operations/services/github-actions-verification.d.ts +0 -148
- package/dist/operations/services/github-actions-verification.js +0 -589
- package/dist/operations/services/github-api.d.ts +0 -279
- package/dist/operations/services/github-api.js +0 -936
- package/dist/operations/services/github-automation.d.ts +0 -230
- package/dist/operations/services/github-automation.js +0 -520
- package/dist/operations/services/github-credentials.d.ts +0 -13
- package/dist/operations/services/github-credentials.js +0 -59
- package/dist/operations/services/hosted-service-checks.d.ts +0 -82
- package/dist/operations/services/hosted-service-checks.js +0 -527
- package/dist/operations/services/hosting-audit.d.ts +0 -69
- package/dist/operations/services/hosting-audit.js +0 -638
- package/dist/operations/services/hub-launch.d.ts +0 -182
- package/dist/operations/services/hub-launch.js +0 -309
- package/dist/operations/services/hub-provider-launch.d.ts +0 -160
- package/dist/operations/services/hub-provider-launch.js +0 -1056
- package/dist/operations/services/key-agent.d.ts +0 -137
- package/dist/operations/services/key-agent.js +0 -641
- package/dist/operations/services/live-hosted-service-checks.d.ts +0 -30
- package/dist/operations/services/live-hosted-service-checks.js +0 -611
- package/dist/operations/services/local-cleanup.d.ts +0 -30
- package/dist/operations/services/local-cleanup.js +0 -77
- package/dist/operations/services/local-dev.d.ts +0 -8
- package/dist/operations/services/local-dev.js +0 -97
- package/dist/operations/services/managed-host-security.d.ts +0 -13
- package/dist/operations/services/managed-host-security.js +0 -56
- package/dist/operations/services/managed-repositories.d.ts +0 -37
- package/dist/operations/services/managed-repositories.js +0 -177
- package/dist/operations/services/market-packaging.d.ts +0 -59
- package/dist/operations/services/market-packaging.js +0 -234
- package/dist/operations/services/operations-runner-smoke.d.ts +0 -31
- package/dist/operations/services/operations-runner-smoke.js +0 -212
- package/dist/operations/services/package-adapters.d.ts +0 -184
- package/dist/operations/services/package-adapters.js +0 -912
- package/dist/operations/services/package-artifacts.d.ts +0 -37
- package/dist/operations/services/package-artifacts.js +0 -99
- package/dist/operations/services/package-reference-policy.d.ts +0 -64
- package/dist/operations/services/package-reference-policy.js +0 -364
- package/dist/operations/services/project-host-operations.d.ts +0 -153
- package/dist/operations/services/project-host-operations.js +0 -365
- package/dist/operations/services/project-platform.d.ts +0 -727
- package/dist/operations/services/project-platform.js +0 -1603
- package/dist/operations/services/project-web-monitor.d.ts +0 -15
- package/dist/operations/services/project-web-monitor.js +0 -377
- package/dist/operations/services/railway-api.d.ts +0 -494
- package/dist/operations/services/railway-api.js +0 -1874
- package/dist/operations/services/railway-cli.d.ts +0 -47
- package/dist/operations/services/railway-cli.js +0 -142
- package/dist/operations/services/railway-deploy.d.ts +0 -161
- package/dist/operations/services/railway-deploy.js +0 -1808
- package/dist/operations/services/railway-source-policy.d.ts +0 -25
- package/dist/operations/services/railway-source-policy.js +0 -111
- package/dist/operations/services/release-history.d.ts +0 -59
- package/dist/operations/services/release-history.js +0 -158
- package/dist/operations/services/release-proof-ledger.d.ts +0 -13
- package/dist/operations/services/release-proof-ledger.js +0 -81
- package/dist/operations/services/release-proof-planner.d.ts +0 -48
- package/dist/operations/services/release-proof-planner.js +0 -195
- package/dist/operations/services/release-proof-runner.d.ts +0 -16
- package/dist/operations/services/release-proof-runner.js +0 -169
- package/dist/operations/services/release-proof.d.ts +0 -81
- package/dist/operations/services/release-proof.js +0 -79
- package/dist/operations/services/repository-save-orchestrator.d.ts +0 -193
- package/dist/operations/services/repository-save-orchestrator.js +0 -2110
- package/dist/operations/services/runtime-paths.d.ts +0 -19
- package/dist/operations/services/runtime-paths.js +0 -54
- package/dist/operations/services/runtime-tools.d.ts +0 -35
- package/dist/operations/services/runtime-tools.js +0 -212
- package/dist/operations/services/save-deploy-preflight.d.ts +0 -32
- package/dist/operations/services/save-deploy-preflight.js +0 -82
- package/dist/operations/services/template-host-bindings.d.ts +0 -68
- package/dist/operations/services/template-host-bindings.js +0 -401
- package/dist/operations/services/template-registry.d.ts +0 -110
- package/dist/operations/services/template-registry.js +0 -595
- package/dist/operations/services/template-secret-sync.d.ts +0 -97
- package/dist/operations/services/template-secret-sync.js +0 -292
- package/dist/operations/services/verification-cache.d.ts +0 -25
- package/dist/operations/services/verification-cache.js +0 -71
- package/dist/operations/services/watch-dev.d.ts +0 -21
- package/dist/operations/services/watch-dev.js +0 -282
- package/dist/operations/services/workflow-timing.d.ts +0 -25
- package/dist/operations/services/workflow-timing.js +0 -79
- package/dist/operations/services/workspace-dependency-mode.d.ts +0 -74
- package/dist/operations/services/workspace-dependency-mode.js +0 -478
- package/dist/operations/services/workspace-preflight.d.ts +0 -40
- package/dist/operations/services/workspace-preflight.js +0 -172
- package/dist/operations/services/workspace-save-script.d.ts +0 -26
- package/dist/operations/services/workspace-save-script.js +0 -50
- package/dist/operations/services/workspace-save.d.ts +0 -76
- package/dist/operations/services/workspace-save.js +0 -453
- package/dist/operations/services/workspace-tools.d.ts +0 -17
- package/dist/operations/services/workspace-tools.js +0 -320
- package/dist/operations-registry.d.ts +0 -5
- package/dist/operations-registry.js +0 -98
- package/dist/operations-types.d.ts +0 -75
- package/dist/operations-types.js +0 -17
- package/dist/operations.d.ts +0 -17
- package/dist/operations.js +0 -114
- package/dist/platform/book-export.d.ts +0 -78
- package/dist/platform/book-export.js +0 -451
- package/dist/platform/books-data.d.ts +0 -28
- package/dist/platform/books-data.js +0 -111
- package/dist/platform/config.d.ts +0 -27
- package/dist/platform/config.js +0 -100
- package/dist/platform/content-runtime-source.d.ts +0 -54
- package/dist/platform/content-runtime-source.js +0 -169
- package/dist/platform/contracts.d.ts +0 -361
- package/dist/platform/deploy-config.d.ts +0 -17
- package/dist/platform/deploy-config.js +0 -731
- package/dist/platform/deploy-runtime.d.ts +0 -22
- package/dist/platform/deploy-runtime.js +0 -93
- package/dist/platform/desired-state.d.ts +0 -66
- package/dist/platform/desired-state.js +0 -1071
- package/dist/platform/env.yaml +0 -1126
- package/dist/platform/environment.d.ts +0 -159
- package/dist/platform/environment.js +0 -778
- package/dist/platform/local-content-materialization.d.ts +0 -9
- package/dist/platform/local-content-materialization.js +0 -212
- package/dist/platform/plugin.d.ts +0 -103
- package/dist/platform/plugin.js +0 -6
- package/dist/platform/plugins/constants.d.ts +0 -26
- package/dist/platform/plugins/constants.js +0 -33
- package/dist/platform/plugins/runtime.d.ts +0 -41
- package/dist/platform/plugins/runtime.js +0 -257
- package/dist/platform/plugins.d.ts +0 -6
- package/dist/platform/plugins.js +0 -42
- package/dist/platform/published-content-pipeline.d.ts +0 -84
- package/dist/platform/published-content-pipeline.js +0 -547
- package/dist/platform/published-content.d.ts +0 -224
- package/dist/platform/published-content.js +0 -611
- package/dist/platform/site-config-schema.d.ts +0 -1
- package/dist/platform/site-config-schema.js +0 -4
- package/dist/platform/tenant/runtime-config.d.ts +0 -154
- package/dist/platform/tenant/runtime-config.js +0 -69
- package/dist/platform/tenant-config.d.ts +0 -8
- package/dist/platform/tenant-config.js +0 -207
- package/dist/platform/utils/site-config-schema.d.ts +0 -154
- package/dist/platform/utils/site-config-schema.js +0 -450
- package/dist/platform-operation-store.d.ts +0 -94
- package/dist/platform-operation-store.js +0 -531
- package/dist/platform-operations.d.ts +0 -273
- package/dist/platform-operations.js +0 -440
- package/dist/plugin-default.d.ts +0 -28
- package/dist/plugin-default.js +0 -55
- package/dist/project-import.d.ts +0 -91
- package/dist/project-import.js +0 -257
- package/dist/project-workflow.d.ts +0 -233
- package/dist/project-workflow.js +0 -82
- package/dist/reconcile/bootstrap-systems.d.ts +0 -32
- package/dist/reconcile/bootstrap-systems.js +0 -175
- package/dist/reconcile/builtin-adapters.d.ts +0 -9
- package/dist/reconcile/builtin-adapters.js +0 -5545
- package/dist/reconcile/contracts.d.ts +0 -172
- package/dist/reconcile/desired-state.d.ts +0 -10
- package/dist/reconcile/desired-state.js +0 -322
- package/dist/reconcile/engine.d.ts +0 -118
- package/dist/reconcile/engine.js +0 -645
- package/dist/reconcile/errors.d.ts +0 -5
- package/dist/reconcile/errors.js +0 -13
- package/dist/reconcile/index.d.ts +0 -10
- package/dist/reconcile/index.js +0 -10
- package/dist/reconcile/live-acceptance.d.ts +0 -100
- package/dist/reconcile/live-acceptance.js +0 -2018
- package/dist/reconcile/platform.d.ts +0 -104
- package/dist/reconcile/platform.js +0 -100
- package/dist/reconcile/providers/docker-private.d.ts +0 -54
- package/dist/reconcile/providers/docker-private.js +0 -101
- package/dist/reconcile/providers/github-private.d.ts +0 -69
- package/dist/reconcile/providers/github-private.js +0 -145
- package/dist/reconcile/providers/local-private.d.ts +0 -28
- package/dist/reconcile/providers/local-private.js +0 -75
- package/dist/reconcile/providers/railway-iac.d.ts +0 -220
- package/dist/reconcile/providers/railway-iac.js +0 -621
- package/dist/reconcile/providers/release-private.d.ts +0 -89
- package/dist/reconcile/providers/release-private.js +0 -140
- package/dist/reconcile/registry.d.ts +0 -7
- package/dist/reconcile/registry.js +0 -79
- package/dist/reconcile/state.d.ts +0 -7
- package/dist/reconcile/state.js +0 -270
- package/dist/reconcile/units.d.ts +0 -6
- package/dist/reconcile/units.js +0 -72
- package/dist/remote.d.ts +0 -244
- package/dist/remote.js +0 -284
- package/dist/scenes/artifacts.d.ts +0 -16
- package/dist/scenes/artifacts.js +0 -61
- package/dist/scenes/auth.d.ts +0 -2
- package/dist/scenes/auth.js +0 -28
- package/dist/scenes/base-url.d.ts +0 -12
- package/dist/scenes/base-url.js +0 -123
- package/dist/scenes/builtin-plugins.d.ts +0 -2
- package/dist/scenes/builtin-plugins.js +0 -499
- package/dist/scenes/checkpoints.d.ts +0 -14
- package/dist/scenes/checkpoints.js +0 -33
- package/dist/scenes/device-matrix.d.ts +0 -2
- package/dist/scenes/device-matrix.js +0 -100
- package/dist/scenes/devices.d.ts +0 -11
- package/dist/scenes/devices.js +0 -40
- package/dist/scenes/diagnostics.d.ts +0 -5
- package/dist/scenes/diagnostics.js +0 -22
- package/dist/scenes/diagram-providers.d.ts +0 -2
- package/dist/scenes/diagram-providers.js +0 -181
- package/dist/scenes/diagram-validation.d.ts +0 -22
- package/dist/scenes/diagram-validation.js +0 -74
- package/dist/scenes/environment.d.ts +0 -2
- package/dist/scenes/environment.js +0 -65
- package/dist/scenes/evidence-bundle.d.ts +0 -5
- package/dist/scenes/evidence-bundle.js +0 -42
- package/dist/scenes/evidence-report.d.ts +0 -10
- package/dist/scenes/evidence-report.js +0 -73
- package/dist/scenes/evidence.d.ts +0 -16
- package/dist/scenes/evidence.js +0 -277
- package/dist/scenes/index.d.ts +0 -48
- package/dist/scenes/index.js +0 -312
- package/dist/scenes/inspect.d.ts +0 -9
- package/dist/scenes/inspect.js +0 -64
- package/dist/scenes/loader.d.ts +0 -3
- package/dist/scenes/loader.js +0 -38
- package/dist/scenes/logs.d.ts +0 -2
- package/dist/scenes/logs.js +0 -47
- package/dist/scenes/operations.d.ts +0 -3
- package/dist/scenes/operations.js +0 -128
- package/dist/scenes/phase0.d.ts +0 -9
- package/dist/scenes/phase0.js +0 -637
- package/dist/scenes/planner.d.ts +0 -12
- package/dist/scenes/planner.js +0 -166
- package/dist/scenes/playwright-adapter.d.ts +0 -2
- package/dist/scenes/playwright-adapter.js +0 -63
- package/dist/scenes/plugins.d.ts +0 -5
- package/dist/scenes/plugins.js +0 -115
- package/dist/scenes/progress.d.ts +0 -17
- package/dist/scenes/progress.js +0 -24
- package/dist/scenes/publish-destinations.d.ts +0 -12
- package/dist/scenes/publish-destinations.js +0 -99
- package/dist/scenes/publish-plan-report.d.ts +0 -10
- package/dist/scenes/publish-plan-report.js +0 -70
- package/dist/scenes/publish-plan.d.ts +0 -15
- package/dist/scenes/publish-plan.js +0 -248
- package/dist/scenes/publish-redaction.d.ts +0 -16
- package/dist/scenes/publish-redaction.js +0 -148
- package/dist/scenes/publish-release-record.d.ts +0 -13
- package/dist/scenes/publish-release-record.js +0 -34
- package/dist/scenes/publish-report.d.ts +0 -10
- package/dist/scenes/publish-report.js +0 -67
- package/dist/scenes/publish.d.ts +0 -16
- package/dist/scenes/publish.js +0 -298
- package/dist/scenes/registry.d.ts +0 -12
- package/dist/scenes/registry.js +0 -65
- package/dist/scenes/remotion-adapter.d.ts +0 -3
- package/dist/scenes/remotion-adapter.js +0 -94
- package/dist/scenes/remotion-composition-registry.d.ts +0 -2
- package/dist/scenes/remotion-composition-registry.js +0 -12
- package/dist/scenes/remotion-compositions.d.ts +0 -15
- package/dist/scenes/remotion-compositions.js +0 -464
- package/dist/scenes/remotion-diagrams.d.ts +0 -9
- package/dist/scenes/remotion-diagrams.js +0 -188
- package/dist/scenes/remotion-input.d.ts +0 -13
- package/dist/scenes/remotion-input.js +0 -291
- package/dist/scenes/remotion-visuals.d.ts +0 -29
- package/dist/scenes/remotion-visuals.js +0 -198
- package/dist/scenes/render-media-assets.d.ts +0 -9
- package/dist/scenes/render-media-assets.js +0 -117
- package/dist/scenes/render-report.d.ts +0 -10
- package/dist/scenes/render-report.js +0 -27
- package/dist/scenes/render.d.ts +0 -2
- package/dist/scenes/render.js +0 -218
- package/dist/scenes/reporter.d.ts +0 -3
- package/dist/scenes/reporter.js +0 -101
- package/dist/scenes/resume.d.ts +0 -2
- package/dist/scenes/resume.js +0 -79
- package/dist/scenes/runner.d.ts +0 -2
- package/dist/scenes/runner.js +0 -687
- package/dist/scenes/schema.d.ts +0 -6
- package/dist/scenes/schema.js +0 -1023
- package/dist/scenes/seed.d.ts +0 -2
- package/dist/scenes/seed.js +0 -83
- package/dist/scenes/segments.d.ts +0 -15
- package/dist/scenes/segments.js +0 -79
- package/dist/scenes/selectors.d.ts +0 -3
- package/dist/scenes/selectors.js +0 -21
- package/dist/scenes/timeline.d.ts +0 -11
- package/dist/scenes/timeline.js +0 -26
- package/dist/scenes/timeouts.d.ts +0 -6
- package/dist/scenes/timeouts.js +0 -17
- package/dist/scenes/training-captions.d.ts +0 -14
- package/dist/scenes/training-captions.js +0 -98
- package/dist/scenes/training-report.d.ts +0 -10
- package/dist/scenes/training-report.js +0 -78
- package/dist/scenes/training-transcript.d.ts +0 -24
- package/dist/scenes/training-transcript.js +0 -204
- package/dist/scenes/training.d.ts +0 -10
- package/dist/scenes/training.js +0 -134
- package/dist/scenes/types.d.ts +0 -1900
- package/dist/scenes/types.js +0 -8
- package/dist/scenes/visual-audit-contact-sheets.d.ts +0 -6
- package/dist/scenes/visual-audit-contact-sheets.js +0 -119
- package/dist/scenes/visual-audit-fixtures.d.ts +0 -25
- package/dist/scenes/visual-audit-fixtures.js +0 -247
- package/dist/scenes/visual-audit-report.d.ts +0 -11
- package/dist/scenes/visual-audit-report.js +0 -85
- package/dist/scenes/visual-audit-review.d.ts +0 -23
- package/dist/scenes/visual-audit-review.js +0 -829
- package/dist/scenes/visual-audit-routes.d.ts +0 -13
- package/dist/scenes/visual-audit-routes.js +0 -308
- package/dist/scenes/visual-audit.d.ts +0 -3
- package/dist/scenes/visual-audit.js +0 -596
- package/dist/scripts/aggregate-book.js +0 -16
- package/dist/scripts/assert-release-tag-version.js +0 -23
- package/dist/scripts/build-dist.js +0 -294
- package/dist/scripts/build-tenant-worker.js +0 -36
- package/dist/scripts/check-build-warnings.js +0 -51
- package/dist/scripts/cleanup-markdown.js +0 -377
- package/dist/scripts/cli-test-fixtures.js +0 -44
- package/dist/scripts/config-treeseed.js +0 -131
- package/dist/scripts/deployment-readiness.js +0 -20
- package/dist/scripts/generate-treedx-openapi-types.js +0 -186
- package/dist/scripts/install-managed-dependencies.js +0 -12
- package/dist/scripts/key-agent.js +0 -165
- package/dist/scripts/local-dev.js +0 -129
- package/dist/scripts/migrate-journey-csv-to-guarantees.js +0 -140
- package/dist/scripts/operations-runner-smoke.js +0 -16
- package/dist/scripts/package-tools.js +0 -85
- package/dist/scripts/patch-starlight-content-path.js +0 -173
- package/dist/scripts/prepare.js +0 -10
- package/dist/scripts/publish-package.js +0 -29
- package/dist/scripts/release-verify.js +0 -105
- package/dist/scripts/run-fixture-astro-command.js +0 -18
- package/dist/scripts/scaffold-site.js +0 -66
- package/dist/scripts/sync-template.js +0 -20
- package/dist/scripts/template-catalog.test.js +0 -86
- package/dist/scripts/template-command.js +0 -31
- package/dist/scripts/tenant-astro-command.js +0 -3
- package/dist/scripts/tenant-build.js +0 -48
- package/dist/scripts/tenant-check.js +0 -10
- package/dist/scripts/tenant-d1-migrate-local.js +0 -15
- package/dist/scripts/tenant-deploy.js +0 -220
- package/dist/scripts/tenant-destroy.js +0 -112
- package/dist/scripts/tenant-dev.js +0 -160
- package/dist/scripts/tenant-lint.js +0 -4
- package/dist/scripts/tenant-test.js +0 -4
- package/dist/scripts/tenant-workflow-action.js +0 -101
- package/dist/scripts/test-cloudflare-local.js +0 -209
- package/dist/scripts/test-scaffold.js +0 -300
- package/dist/scripts/test-smoke.js +0 -137
- package/dist/scripts/treeseed-assert-release-tag-version.js +0 -21
- package/dist/scripts/treeseed-build-dist.js +0 -131
- package/dist/scripts/treeseed-publish-package.js +0 -19
- package/dist/scripts/treeseed-release-verify.js +0 -131
- package/dist/scripts/validate-templates.js +0 -6
- package/dist/scripts/verify-driver.js +0 -45
- package/dist/scripts/workflow-commands.test.js +0 -31
- package/dist/scripts/workspace-command-e2e.js +0 -718
- package/dist/scripts/workspace-lint.js +0 -15
- package/dist/scripts/workspace-preflight.js +0 -22
- package/dist/scripts/workspace-publish-changed-packages.js +0 -16
- package/dist/scripts/workspace-release-test.js +0 -104
- package/dist/scripts/workspace-release-verify.js +0 -81
- package/dist/scripts/workspace-save.js +0 -64
- package/dist/scripts/workspace-start-warning.js +0 -3
- package/dist/scripts/workspace-test-unit.js +0 -4
- package/dist/scripts/workspace-test.js +0 -17
- package/dist/sdk-dispatch.d.ts +0 -12
- package/dist/sdk-dispatch.js +0 -126
- package/dist/sdk-fields.d.ts +0 -11
- package/dist/sdk-filters.d.ts +0 -4
- package/dist/sdk-filters.js +0 -74
- package/dist/sdk-types.d.ts +0 -3868
- package/dist/sdk-types.js +0 -542
- package/dist/sdk-version.d.ts +0 -2
- package/dist/sdk-version.js +0 -42
- package/dist/sdk.d.ts +0 -266
- package/dist/sdk.js +0 -825
- package/dist/secrets-capability.d.ts +0 -421
- package/dist/secrets-capability.js +0 -530
- package/dist/seeds/errors.d.ts +0 -5
- package/dist/seeds/errors.js +0 -22
- package/dist/seeds/index.d.ts +0 -20
- package/dist/seeds/index.js +0 -53
- package/dist/seeds/loader.d.ts +0 -8
- package/dist/seeds/loader.js +0 -32
- package/dist/seeds/normalize.d.ts +0 -13
- package/dist/seeds/normalize.js +0 -282
- package/dist/seeds/planner.d.ts +0 -10
- package/dist/seeds/planner.js +0 -149
- package/dist/seeds/schema.d.ts +0 -2
- package/dist/seeds/schema.js +0 -893
- package/dist/seeds/types.d.ts +0 -312
- package/dist/seeds/types.js +0 -12
- package/dist/service-credentials.d.ts +0 -54
- package/dist/service-credentials.js +0 -112
- package/dist/stores/cursor-store.d.ts +0 -10
- package/dist/stores/cursor-store.js +0 -164
- package/dist/stores/envelopes.d.ts +0 -116
- package/dist/stores/envelopes.js +0 -219
- package/dist/stores/helpers.d.ts +0 -12
- package/dist/stores/helpers.js +0 -42
- package/dist/stores/lease-store.d.ts +0 -18
- package/dist/stores/lease-store.js +0 -189
- package/dist/stores/message-store.d.ts +0 -12
- package/dist/stores/message-store.js +0 -273
- package/dist/stores/operational-store.d.ts +0 -55
- package/dist/stores/operational-store.js +0 -861
- package/dist/stores/project-workflow-store.d.ts +0 -56
- package/dist/stores/project-workflow-store.js +0 -482
- package/dist/stores/run-store.d.ts +0 -9
- package/dist/stores/run-store.js +0 -75
- package/dist/stores/subscription-store.d.ts +0 -8
- package/dist/stores/subscription-store.js +0 -73
- package/dist/template-catalog.d.ts +0 -13
- package/dist/template-catalog.js +0 -151
- package/dist/template-launch-requirements.d.ts +0 -118
- package/dist/template-launch-requirements.js +0 -768
- package/dist/template-launch-ui.d.ts +0 -85
- package/dist/template-launch-ui.js +0 -189
- package/dist/timing.d.ts +0 -20
- package/dist/timing.js +0 -73
- package/dist/treedx/adapters.d.ts +0 -6
- package/dist/treedx/adapters.js +0 -36
- package/dist/treedx/client.d.ts +0 -222
- package/dist/treedx/client.js +0 -871
- package/dist/treedx/errors.d.ts +0 -13
- package/dist/treedx/federated-client.d.ts +0 -27
- package/dist/treedx/federated-client.js +0 -158
- package/dist/treedx/graph-adapter.d.ts +0 -33
- package/dist/treedx/graph-adapter.js +0 -156
- package/dist/treedx/index.d.ts +0 -14
- package/dist/treedx/index.js +0 -48
- package/dist/treedx/market-integration.d.ts +0 -27
- package/dist/treedx/market-integration.js +0 -131
- package/dist/treedx/ports.d.ts +0 -166
- package/dist/treedx/ports.js +0 -231
- package/dist/treedx/query-adapter.d.ts +0 -19
- package/dist/treedx/query-adapter.js +0 -62
- package/dist/treedx/registry-client.d.ts +0 -11
- package/dist/treedx/registry-client.js +0 -19
- package/dist/treedx/repository-adapter.d.ts +0 -45
- package/dist/treedx/repository-adapter.js +0 -319
- package/dist/treedx/sdk-integration.d.ts +0 -27
- package/dist/treedx/sdk-integration.js +0 -63
- package/dist/treedx/workspace-adapter.d.ts +0 -27
- package/dist/treedx/workspace-adapter.js +0 -65
- package/dist/treedx-backends.d.ts +0 -220
- package/dist/treedx-backends.js +0 -634
- package/dist/treedx-client.d.ts +0 -89
- package/dist/treedx-client.js +0 -184
- package/dist/treeseed/services/compose.yml +0 -6
- package/dist/treeseed/template-catalog/catalog.fixture.json +0 -707
- package/dist/types/cloudflare.d.ts +0 -54
- package/dist/verification.d.ts +0 -31
- package/dist/verification.js +0 -430
- package/dist/workflow/operations.d.ts +0 -1516
- package/dist/workflow/operations.js +0 -7001
- package/dist/workflow/policy.d.ts +0 -12
- package/dist/workflow/policy.js +0 -70
- package/dist/workflow/runs.d.ts +0 -143
- package/dist/workflow/runs.js +0 -720
- package/dist/workflow/session.d.ts +0 -34
- package/dist/workflow/session.js +0 -160
- package/dist/workflow/worktrees.d.ts +0 -43
- package/dist/workflow/worktrees.js +0 -307
- package/dist/workflow-state.d.ts +0 -250
- package/dist/workflow-state.js +0 -844
- package/dist/workflow-support.d.ts +0 -28
- package/dist/workflow-support.js +0 -390
- package/dist/workflow.d.ts +0 -327
- package/dist/workflow.js +0 -140
- package/drizzle/d1/0000_treeseed_d1.sql +0 -19
- package/drizzle/market/0000_market_control_plane.sql +0 -3223
- package/drizzle/market/0001_capacity_budget_mode_default.sql +0 -4
- package/drizzle/market/0002_user_email_addresses.sql +0 -26
- package/drizzle/market/0003_project_team_slug_unique.sql +0 -4
- package/drizzle/market/0004_treedx_market_integration.sql +0 -99
- package/drizzle/market/0005_agent_capacity_coordination.sql +0 -145
- package/drizzle/market/0006_provider_assignment_lifecycle.sql +0 -9
- package/drizzle/market/0007_agent_architecture_gap_closure.sql +0 -157
- package/drizzle/market/0008_agent_capacity_operational_closure.sql +0 -27
- package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +0 -29
- package/drizzle/market/0010_secrets_capability_persistence.sql +0 -130
- package/drizzle/market/0011_github_app_adapter.sql +0 -47
- package/drizzle/market/0012_workday_test_runs.sql +0 -44
- package/drizzle/market/0013_runtime_task_lifecycle.sql +0 -39
- package/drizzle/market/0014_governance_pipeline.sql +0 -189
- package/drizzle/market/0015_agent_decision_assignment_graphs.sql +0 -60
- package/scripts/verify-driver.ts +0 -51
- package/templates/github/deploy-web.workflow.yml +0 -168
- package/templates/github/hosted-project.workflow.yml +0 -76
- /package/dist/{api/types.js → agent-capacity/contracts/capacity/workdays/workday-records.js} +0 -0
- /package/dist/{hosting/contracts.js → agent-capacity/contracts/operations/workflow-promotion.js} +0 -0
- /package/dist/{platform/contracts.js → agent-capacity/contracts/projects/agents/project-agent-class.js} +0 -0
- /package/dist/{reconcile/contracts.js → agent-capacity/contracts/runtime/runtime-observability.js} +0 -0
- /package/dist/{types/cloudflare.js → agent-capacity/contracts/support/decision-work.js} +0 -0
- /package/dist/{field-aliases.js → entrypoints/models/field-aliases.js} +0 -0
- /package/dist/{sdk-fields.js → entrypoints/models/sdk-fields.js} +0 -0
- /package/dist/{runtime.d.ts → runtime/runtime.d.ts} +0 -0
- /package/dist/{runtime.js → runtime/runtime.js} +0 -0
- /package/dist/treedx/{errors.js → support/errors.js} +0 -0
|
@@ -1,1808 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { relative, resolve } from "node:path";
|
|
3
|
-
import { parse as parseYaml } from "yaml";
|
|
4
|
-
import { loadCliDeployConfig } from "./runtime-tools.js";
|
|
5
|
-
import { resolveTreeseedMachineEnvironmentValues } from "./config-runtime.js";
|
|
6
|
-
import { createPersistentDeployTarget, resolveTreeseedResourceIdentity } from "./deploy.js";
|
|
7
|
-
import { classifyTreeseedGitMode, runTreeseedGitText } from "./git-runner.js";
|
|
8
|
-
import { discoverTreeseedApplications } from "../../hosting/apps.js";
|
|
9
|
-
import { apiRailwayDefaultDockerfilePath, apiRailwayDefaultSourceRepo, assertApiRailwaySourcePolicy, isApiRailwaySourcePolicyService, railwayEnvironmentQualifiedServiceName, railwayTreeDxServiceName } from "./railway-source-policy.js";
|
|
10
|
-
import { runPrefixedCommand, sleep } from "./bootstrap-runner.js";
|
|
11
|
-
import {
|
|
12
|
-
ensureRailwayEnvironment,
|
|
13
|
-
ensureRailwayProject,
|
|
14
|
-
ensureRailwayService,
|
|
15
|
-
ensureRailwayServiceInstanceConfiguration,
|
|
16
|
-
ensureRailwayServiceVolume,
|
|
17
|
-
deployRailwayServiceInstance,
|
|
18
|
-
getRailwayServiceInstance,
|
|
19
|
-
listRailwayEnvironments,
|
|
20
|
-
listRailwayProjects,
|
|
21
|
-
listRailwayServices,
|
|
22
|
-
listRailwayVolumes,
|
|
23
|
-
normalizeRailwayEnvironmentName,
|
|
24
|
-
railwayGraphqlRequest,
|
|
25
|
-
resolveRailwayApiToken,
|
|
26
|
-
resolveRailwayApiUrl,
|
|
27
|
-
resolveRailwayWorkspaceContext,
|
|
28
|
-
upsertRailwayVariables
|
|
29
|
-
} from "./railway-api.js";
|
|
30
|
-
import { elapsedMs, formatDurationMs } from "../../timing.js";
|
|
31
|
-
function normalizeScope(scope) {
|
|
32
|
-
return scope === "prod" ? "prod" : scope === "staging" ? "staging" : "local";
|
|
33
|
-
}
|
|
34
|
-
function resolveRailwayEnvironmentForScope(scope, configuredEnvironment) {
|
|
35
|
-
return normalizeRailwayEnvironmentName(configuredEnvironment || normalizeScope(scope));
|
|
36
|
-
}
|
|
37
|
-
const RAILWAY_SERVICE_KEYS = ["api", "operationsRunner", "capacityProviderManager", "capacityProviderRunner"];
|
|
38
|
-
const HOSTED_PROJECT_SERVICE_KEYS = ["api"];
|
|
39
|
-
const WORKER_RUNNER_BOOTSTRAP_INDEX = 1;
|
|
40
|
-
const WORKER_RUNNER_VOLUME_MOUNT_PATH = "/data";
|
|
41
|
-
const OPERATIONS_RUNNER_BOOTSTRAP_COUNT = 2;
|
|
42
|
-
const PUBLIC_TREEDX_NODE_SERVICE_KEY_PREFIX = "public-treedx-node-";
|
|
43
|
-
function isTreeseedOperationsRunnerResourceName(value) {
|
|
44
|
-
const normalized = String(value ?? "").trim().toLowerCase();
|
|
45
|
-
if (!normalized) {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
if (normalized.startsWith("market-ops")) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
return normalized.includes("operations-runner");
|
|
52
|
-
}
|
|
53
|
-
function findStaleTreeseedOperationsRunnerResources(resources, desiredNames) {
|
|
54
|
-
const desired = new Set([...desiredNames].map((value) => String(value ?? "").trim()).filter(Boolean));
|
|
55
|
-
return resources.filter((resource) => {
|
|
56
|
-
const name = String(resource?.name ?? "").trim();
|
|
57
|
-
return name && isTreeseedOperationsRunnerResourceName(name) && !desired.has(name);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
function shouldManageRailwaySchedules(scope, phase = "deploy") {
|
|
61
|
-
const environment = normalizeRailwayEnvironmentName(scope);
|
|
62
|
-
return phase === "deploy" && (environment === "staging" || environment === "production");
|
|
63
|
-
}
|
|
64
|
-
function railwayServiceNameSuffix(serviceKey) {
|
|
65
|
-
return serviceKey === "capacityProviderManager" ? "capacity-provider-manager" : serviceKey === "capacityProviderRunner" ? "capacity-provider-runner" : serviceKey === "workdayManager" ? "workday-manager" : serviceKey === "workerRunner" ? "worker-runner" : serviceKey === "operationsRunner" ? "operations-runner" : serviceKey;
|
|
66
|
-
}
|
|
67
|
-
function deriveRailwayWorkerRunnerServiceName(projectSlug, index = WORKER_RUNNER_BOOTSTRAP_INDEX) {
|
|
68
|
-
const normalizedIndex = Math.max(1, Number.parseInt(String(index), 10) || WORKER_RUNNER_BOOTSTRAP_INDEX);
|
|
69
|
-
return `${projectSlug}-worker-runner-${String(normalizedIndex).padStart(2, "0")}`;
|
|
70
|
-
}
|
|
71
|
-
function deriveRailwayOperationsRunnerServiceName(baseServiceName, index = WORKER_RUNNER_BOOTSTRAP_INDEX) {
|
|
72
|
-
const normalizedIndex = Math.max(1, Number.parseInt(String(index), 10) || WORKER_RUNNER_BOOTSTRAP_INDEX);
|
|
73
|
-
const base = String(baseServiceName ?? "").trim().replace(/-\d+$/u, "").replace(/-\d{2}$/u, "") || "treeseed-api-operations-runner";
|
|
74
|
-
return `${base}-${String(normalizedIndex).padStart(2, "0")}`;
|
|
75
|
-
}
|
|
76
|
-
function railwayImageRefEnvForService(serviceKey) {
|
|
77
|
-
if (serviceKey === "api") return "TREESEED_API_IMAGE_REF";
|
|
78
|
-
if (serviceKey === "operationsRunner") return "TREESEED_OPERATIONS_RUNNER_IMAGE_REF";
|
|
79
|
-
if (serviceKey === "capacityProviderManager") return "TREESEED_AGENT_MANAGER_IMAGE_REF";
|
|
80
|
-
if (serviceKey === "capacityProviderRunner") return "TREESEED_AGENT_RUNNER_IMAGE_REF";
|
|
81
|
-
if (isPublicTreeDxNodeServiceKey(serviceKey)) return "TREESEED_PUBLIC_TREEDX_IMAGE_REF";
|
|
82
|
-
return null;
|
|
83
|
-
}
|
|
84
|
-
function defaultRailwayImageRef(serviceKey, scope = "staging", env = process.env) {
|
|
85
|
-
if (normalizeScope(scope) !== "prod" && serviceKey !== "capacityProviderManager" && serviceKey !== "capacityProviderRunner") {
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
if (serviceKey === "api") {
|
|
89
|
-
return envValue("TREESEED_API_IMAGE_REF", env) || null;
|
|
90
|
-
}
|
|
91
|
-
if (serviceKey === "operationsRunner") {
|
|
92
|
-
return envValue("TREESEED_OPERATIONS_RUNNER_IMAGE_REF", env) || null;
|
|
93
|
-
}
|
|
94
|
-
if (serviceKey === "capacityProviderManager") {
|
|
95
|
-
return envValue("TREESEED_AGENT_MANAGER_IMAGE_REF", env) || null;
|
|
96
|
-
}
|
|
97
|
-
if (serviceKey === "capacityProviderRunner") {
|
|
98
|
-
return envValue("TREESEED_AGENT_RUNNER_IMAGE_REF", env) || null;
|
|
99
|
-
}
|
|
100
|
-
if (isPublicTreeDxNodeServiceKey(serviceKey)) {
|
|
101
|
-
return envValue("TREESEED_PUBLIC_TREEDX_IMAGE_REF", env) || null;
|
|
102
|
-
}
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
function isPublicTreeDxNodeServiceKey(serviceKey) {
|
|
106
|
-
return String(serviceKey ?? "").startsWith(PUBLIC_TREEDX_NODE_SERVICE_KEY_PREFIX);
|
|
107
|
-
}
|
|
108
|
-
function deriveRailwayWorkerRunnerVolumeName(serviceName, environmentName = "") {
|
|
109
|
-
return `${serviceName}-volume`;
|
|
110
|
-
}
|
|
111
|
-
function deriveRailwayOperationsRunnerVolumeName(serviceName, environmentName = "") {
|
|
112
|
-
return `${serviceName}-volume`;
|
|
113
|
-
}
|
|
114
|
-
function deriveRailwayCapacityProviderRunnerServiceName(baseServiceName, index = WORKER_RUNNER_BOOTSTRAP_INDEX) {
|
|
115
|
-
const normalizedIndex = Math.max(1, Number.parseInt(String(index), 10) || WORKER_RUNNER_BOOTSTRAP_INDEX);
|
|
116
|
-
const base = String(baseServiceName ?? "").trim().replace(/-\d+$/u, "").replace(/-\d{2}$/u, "") || "treeseed-capacity-provider-runner";
|
|
117
|
-
return `${base}-${String(normalizedIndex).padStart(2, "0")}`;
|
|
118
|
-
}
|
|
119
|
-
function deriveRailwayCapacityProviderRunnerVolumeName(serviceName, environmentName = "") {
|
|
120
|
-
return `${serviceName}-volume`;
|
|
121
|
-
}
|
|
122
|
-
function railwayServiceRuntimeStartCommand(service) {
|
|
123
|
-
return service.startCommand;
|
|
124
|
-
}
|
|
125
|
-
function normalizeScheduleExpressions(value) {
|
|
126
|
-
if (typeof value === "string" && value.trim()) {
|
|
127
|
-
return [value.trim()];
|
|
128
|
-
}
|
|
129
|
-
if (Array.isArray(value)) {
|
|
130
|
-
return value.map((entry) => typeof entry === "string" ? entry.trim() : "").filter(Boolean);
|
|
131
|
-
}
|
|
132
|
-
return [];
|
|
133
|
-
}
|
|
134
|
-
function envValue(name, env = process.env) {
|
|
135
|
-
const value = env?.[name];
|
|
136
|
-
return typeof value === "string" && value.trim() ? value.trim() : "";
|
|
137
|
-
}
|
|
138
|
-
function relativeRailwayRootDir(tenantRoot, serviceRoot) {
|
|
139
|
-
const resolved = relative(tenantRoot, serviceRoot).replace(/\\/gu, "/");
|
|
140
|
-
return !resolved || resolved === "" ? "." : resolved;
|
|
141
|
-
}
|
|
142
|
-
function configuredEnvValue(env, name) {
|
|
143
|
-
const value = env?.[name];
|
|
144
|
-
return typeof value === "string" && value.trim() ? value.trim() : "";
|
|
145
|
-
}
|
|
146
|
-
function configuredApiPublicBaseUrl(deployConfig, scope) {
|
|
147
|
-
const apiSurface = deployConfig.surfaces?.api;
|
|
148
|
-
if (!apiSurface || typeof apiSurface !== "object") return null;
|
|
149
|
-
const environment = apiSurface.environments?.[scope];
|
|
150
|
-
const configured = environment?.baseUrl ?? environment?.domain ?? (scope === "local" ? apiSurface.localBaseUrl : null) ?? apiSurface.publicBaseUrl ?? null;
|
|
151
|
-
if (typeof configured !== "string" || !configured.trim()) return null;
|
|
152
|
-
const value = configured.trim().replace(/\/+$/u, "");
|
|
153
|
-
return /^https?:\/\//iu.test(value) ? value : `https://${value}`;
|
|
154
|
-
}
|
|
155
|
-
function railwayDeployTransport(env) {
|
|
156
|
-
const configured = configuredEnvValue(env, "TREESEED_RAILWAY_DEPLOY_TRANSPORT").toLowerCase();
|
|
157
|
-
return configured === "cli-fallback" ? "cli-fallback" : "api";
|
|
158
|
-
}
|
|
159
|
-
async function timedRailwayPhase(timings, name, run, metadata) {
|
|
160
|
-
const startMs = performance.now();
|
|
161
|
-
try {
|
|
162
|
-
const result = await Promise.resolve(run());
|
|
163
|
-
timings.push({
|
|
164
|
-
name,
|
|
165
|
-
durationMs: elapsedMs(startMs),
|
|
166
|
-
status: "success",
|
|
167
|
-
...metadata ? { metadata } : {}
|
|
168
|
-
});
|
|
169
|
-
return result;
|
|
170
|
-
} catch (error) {
|
|
171
|
-
timings.push({
|
|
172
|
-
name,
|
|
173
|
-
durationMs: elapsedMs(startMs),
|
|
174
|
-
status: "failed",
|
|
175
|
-
metadata: {
|
|
176
|
-
...metadata ?? {},
|
|
177
|
-
error: error instanceof Error ? error.name || "Error" : "Error"
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
throw error;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
function parseRailwayJsonOutput(output) {
|
|
184
|
-
const trimmed = typeof output === "string" ? output.trim() : "";
|
|
185
|
-
if (!trimmed) {
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
try {
|
|
189
|
-
return JSON.parse(trimmed);
|
|
190
|
-
} catch {
|
|
191
|
-
}
|
|
192
|
-
const lines = trimmed.split(/\r?\n/u);
|
|
193
|
-
for (let index = lines.length - 1; index >= 0; index -= 1) {
|
|
194
|
-
const candidate = lines.slice(index).join("\n").trim();
|
|
195
|
-
if (!candidate.startsWith("{") && !candidate.startsWith("[")) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
try {
|
|
199
|
-
return JSON.parse(candidate);
|
|
200
|
-
} catch {
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
function railwayEdgeNodes(value) {
|
|
206
|
-
return Array.isArray(value?.edges) ? value.edges.map((entry) => entry?.node).filter(Boolean) : [];
|
|
207
|
-
}
|
|
208
|
-
function railwayStatusEnvironmentNodes(payload) {
|
|
209
|
-
if (!payload || typeof payload !== "object") {
|
|
210
|
-
return [];
|
|
211
|
-
}
|
|
212
|
-
if (Array.isArray(payload.environments)) {
|
|
213
|
-
return payload.environments;
|
|
214
|
-
}
|
|
215
|
-
return railwayEdgeNodes(payload.environments);
|
|
216
|
-
}
|
|
217
|
-
function railwayStatusDeploymentSettled(status) {
|
|
218
|
-
const normalized = String(status ?? "").trim().toUpperCase();
|
|
219
|
-
return normalized === "SUCCESS" || normalized === "SLEEPING";
|
|
220
|
-
}
|
|
221
|
-
function railwayStatusDeploymentTerminalFailure(status) {
|
|
222
|
-
const normalized = String(status ?? "").trim().toUpperCase();
|
|
223
|
-
return ["FAILED", "CRASHED", "REMOVED"].includes(normalized);
|
|
224
|
-
}
|
|
225
|
-
function formatRailwayDeploymentStatusSummary(scope, checks) {
|
|
226
|
-
const aliases = {
|
|
227
|
-
api: "api",
|
|
228
|
-
workdayManager: "manager",
|
|
229
|
-
workerRunner: "runner"
|
|
230
|
-
};
|
|
231
|
-
const parts = checks.map((check) => {
|
|
232
|
-
const name = aliases[check.service] ?? String(check.serviceName ?? check.service ?? "service");
|
|
233
|
-
const status = String(check.status ?? "unknown").toUpperCase();
|
|
234
|
-
const instanceStatuses = Array.isArray(check.observed?.instanceStatuses) && check.observed.instanceStatuses.length > 0 ? `/${check.observed.instanceStatuses.join("+")}` : "";
|
|
235
|
-
const stopped = check.observed?.deploymentStopped === true ? "/stopped" : "";
|
|
236
|
-
return `${name}=${status}${instanceStatuses}${stopped}`;
|
|
237
|
-
});
|
|
238
|
-
return `[railway][monitor][${scope}] ${parts.join(" ")}`;
|
|
239
|
-
}
|
|
240
|
-
function collectRailwayDeploymentStatusChecks(statusPayload, scope, services) {
|
|
241
|
-
const expectedEnvironment = resolveRailwayEnvironmentForScope(scope);
|
|
242
|
-
const environments = railwayStatusEnvironmentNodes(statusPayload);
|
|
243
|
-
const environment = environments.find(
|
|
244
|
-
(candidate) => normalizeRailwayEnvironmentName(candidate?.name) === expectedEnvironment
|
|
245
|
-
) ?? null;
|
|
246
|
-
if (!environment) {
|
|
247
|
-
return services.map((service) => ({
|
|
248
|
-
type: "deployment-status",
|
|
249
|
-
service: service.key,
|
|
250
|
-
serviceName: service.serviceName,
|
|
251
|
-
environment: expectedEnvironment,
|
|
252
|
-
ok: false,
|
|
253
|
-
status: "missing_environment",
|
|
254
|
-
message: `Railway status did not include the ${expectedEnvironment} environment.`
|
|
255
|
-
}));
|
|
256
|
-
}
|
|
257
|
-
const instances = railwayEdgeNodes(environment.serviceInstances);
|
|
258
|
-
return services.map((service) => {
|
|
259
|
-
const instance = instances.find((candidate) => candidate?.serviceName === service.serviceName) ?? null;
|
|
260
|
-
if (!instance) {
|
|
261
|
-
return {
|
|
262
|
-
type: "deployment-status",
|
|
263
|
-
service: service.key,
|
|
264
|
-
serviceName: service.serviceName,
|
|
265
|
-
environment: expectedEnvironment,
|
|
266
|
-
ok: false,
|
|
267
|
-
status: "missing_service_instance",
|
|
268
|
-
message: `Railway status did not include service ${service.serviceName} in ${expectedEnvironment}.`
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
const deployment = instance.latestDeployment ?? null;
|
|
272
|
-
if (!deployment) {
|
|
273
|
-
return {
|
|
274
|
-
type: "deployment-status",
|
|
275
|
-
service: service.key,
|
|
276
|
-
serviceName: service.serviceName,
|
|
277
|
-
environment: normalizeRailwayEnvironmentName(environment.name),
|
|
278
|
-
ok: true,
|
|
279
|
-
skipped: true,
|
|
280
|
-
status: "no_active_deployment",
|
|
281
|
-
observed: {
|
|
282
|
-
status: null,
|
|
283
|
-
deploymentId: null,
|
|
284
|
-
deploymentCreatedAt: null,
|
|
285
|
-
deploymentStopped: null,
|
|
286
|
-
instanceStatuses: [],
|
|
287
|
-
volumeMounts: []
|
|
288
|
-
},
|
|
289
|
-
message: `Railway service ${service.serviceName} has no active deployment to wait for.`
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
const status = String(deployment?.status ?? "").trim().toUpperCase();
|
|
293
|
-
const instanceStatuses = Array.isArray(deployment?.instances) ? deployment.instances.map((entry) => String(entry?.status ?? "").trim()).filter(Boolean) : [];
|
|
294
|
-
const ok = railwayStatusDeploymentSettled(status);
|
|
295
|
-
const terminalFailure = railwayStatusDeploymentTerminalFailure(status);
|
|
296
|
-
return {
|
|
297
|
-
type: "deployment-status",
|
|
298
|
-
service: service.key,
|
|
299
|
-
serviceName: service.serviceName,
|
|
300
|
-
environment: normalizeRailwayEnvironmentName(environment.name),
|
|
301
|
-
ok,
|
|
302
|
-
terminalFailure,
|
|
303
|
-
status: status || "missing_deployment",
|
|
304
|
-
observed: {
|
|
305
|
-
status: status || null,
|
|
306
|
-
deploymentId: deployment?.id ?? null,
|
|
307
|
-
deploymentCreatedAt: deployment?.createdAt ?? null,
|
|
308
|
-
deploymentStopped: deployment?.deploymentStopped ?? null,
|
|
309
|
-
instanceStatuses,
|
|
310
|
-
volumeMounts: Array.isArray(deployment?.meta?.volumeMounts) ? deployment.meta.volumeMounts : []
|
|
311
|
-
},
|
|
312
|
-
message: ok ? void 0 : terminalFailure ? `Railway deployment for ${service.serviceName} failed with terminal status ${status}.` : `Railway deployment for ${service.serviceName} is not settled yet; observed ${status || "missing deployment status"}.`
|
|
313
|
-
};
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
function isUsableRailwayToken(value) {
|
|
317
|
-
return typeof value === "string" && value.trim().length >= 8;
|
|
318
|
-
}
|
|
319
|
-
function resolveRailwayAuthToken(env = process.env) {
|
|
320
|
-
return resolveRailwayApiToken(env);
|
|
321
|
-
}
|
|
322
|
-
function buildRailwayCommandEnv(env = process.env) {
|
|
323
|
-
const merged = { ...env };
|
|
324
|
-
const token = resolveRailwayAuthToken(merged);
|
|
325
|
-
const projectToken = configuredEnvValue(merged, "TREESEED_RAILWAY_TOKEN");
|
|
326
|
-
if (token) {
|
|
327
|
-
merged.RAILWAY_API_TOKEN = token;
|
|
328
|
-
} else {
|
|
329
|
-
merged.RAILWAY_API_TOKEN = void 0;
|
|
330
|
-
}
|
|
331
|
-
merged.RAILWAY_TOKEN = projectToken || void 0;
|
|
332
|
-
return merged;
|
|
333
|
-
}
|
|
334
|
-
function normalizeRailwaySchedule(schedule) {
|
|
335
|
-
if (!schedule || typeof schedule !== "object") {
|
|
336
|
-
return null;
|
|
337
|
-
}
|
|
338
|
-
const expression = String(
|
|
339
|
-
schedule.expression ?? schedule.schedule ?? schedule.cron ?? schedule.cronExpression ?? ""
|
|
340
|
-
).trim();
|
|
341
|
-
if (!expression) {
|
|
342
|
-
return null;
|
|
343
|
-
}
|
|
344
|
-
return {
|
|
345
|
-
id: schedule.id ? String(schedule.id) : null,
|
|
346
|
-
name: schedule.name ? String(schedule.name) : null,
|
|
347
|
-
expression,
|
|
348
|
-
command: String(schedule.command ?? schedule.startCommand ?? "").trim() || null,
|
|
349
|
-
enabled: schedule.enabled !== false,
|
|
350
|
-
serviceId: schedule.serviceId ? String(schedule.serviceId) : schedule.service?.id ? String(schedule.service.id) : null,
|
|
351
|
-
serviceName: schedule.serviceName ? String(schedule.serviceName) : schedule.service?.name ? String(schedule.service.name) : null,
|
|
352
|
-
environmentId: schedule.environmentId ? String(schedule.environmentId) : schedule.environment?.id ? String(schedule.environment.id) : null,
|
|
353
|
-
environmentName: schedule.environmentName ? String(schedule.environmentName) : schedule.environment?.name ? String(schedule.environment.name) : null
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
function collectRailwaySchedules(value, seen = /* @__PURE__ */ new Set()) {
|
|
357
|
-
const matches = [];
|
|
358
|
-
const visit = (entry) => {
|
|
359
|
-
if (!entry || typeof entry !== "object") {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
if (seen.has(entry)) {
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
seen.add(entry);
|
|
366
|
-
if (Array.isArray(entry)) {
|
|
367
|
-
for (const item of entry) {
|
|
368
|
-
visit(item);
|
|
369
|
-
}
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
const normalized = normalizeRailwaySchedule(entry);
|
|
373
|
-
if (normalized) {
|
|
374
|
-
matches.push(normalized);
|
|
375
|
-
}
|
|
376
|
-
for (const child of Object.values(entry)) {
|
|
377
|
-
visit(child);
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
visit(value);
|
|
381
|
-
return matches;
|
|
382
|
-
}
|
|
383
|
-
function isRailwayScheduleCapabilityError(error) {
|
|
384
|
-
const message = error instanceof Error ? error.message : String(error ?? "");
|
|
385
|
-
return /cronTriggers|cronTriggerCreate|cronTriggerUpdate/iu.test(message);
|
|
386
|
-
}
|
|
387
|
-
async function waitForRailwayManagedDeploymentsSettled(tenantRoot, scope, {
|
|
388
|
-
services = configuredRailwayServices(tenantRoot, scope),
|
|
389
|
-
env = process.env,
|
|
390
|
-
timeoutMs = 6e5,
|
|
391
|
-
pollMs = 15e3,
|
|
392
|
-
fetchImpl = fetch,
|
|
393
|
-
onProgress
|
|
394
|
-
} = {}) {
|
|
395
|
-
const startMs = performance.now();
|
|
396
|
-
const deadline = Date.now() + timeoutMs;
|
|
397
|
-
const projectId = await resolveRailwayDeploymentProjectId(services, { env, fetchImpl });
|
|
398
|
-
if (!projectId) {
|
|
399
|
-
return {
|
|
400
|
-
ok: false,
|
|
401
|
-
checks: services.map((service) => ({
|
|
402
|
-
type: "deployment-status",
|
|
403
|
-
service: service.key,
|
|
404
|
-
serviceName: service.serviceName,
|
|
405
|
-
environment: resolveRailwayEnvironmentForScope(scope),
|
|
406
|
-
ok: false,
|
|
407
|
-
status: "missing_project",
|
|
408
|
-
settle: {
|
|
409
|
-
durationMs: elapsedMs(startMs),
|
|
410
|
-
pollCount: 0,
|
|
411
|
-
finalStatus: "missing_project"
|
|
412
|
-
},
|
|
413
|
-
message: `Railway deployment status for ${service.serviceName} cannot be checked without a project id.`
|
|
414
|
-
}))
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
let checks = [];
|
|
418
|
-
let lastError = null;
|
|
419
|
-
let lastSummary = "";
|
|
420
|
-
let pollCount = 0;
|
|
421
|
-
for (; ; ) {
|
|
422
|
-
lastError = null;
|
|
423
|
-
pollCount += 1;
|
|
424
|
-
try {
|
|
425
|
-
const statusPayload = await fetchRailwayProjectDeploymentStatus({
|
|
426
|
-
projectId,
|
|
427
|
-
env,
|
|
428
|
-
fetchImpl
|
|
429
|
-
});
|
|
430
|
-
checks = collectRailwayDeploymentStatusChecks(statusPayload, scope, services);
|
|
431
|
-
} catch (error) {
|
|
432
|
-
lastError = error;
|
|
433
|
-
checks = services.map((service) => ({
|
|
434
|
-
type: "deployment-status",
|
|
435
|
-
service: service.key,
|
|
436
|
-
serviceName: service.serviceName,
|
|
437
|
-
environment: resolveRailwayEnvironmentForScope(scope),
|
|
438
|
-
ok: false,
|
|
439
|
-
status: "status_error",
|
|
440
|
-
settle: {
|
|
441
|
-
durationMs: elapsedMs(startMs),
|
|
442
|
-
pollCount,
|
|
443
|
-
finalStatus: "status_error"
|
|
444
|
-
},
|
|
445
|
-
message: error instanceof Error ? error.message : String(error)
|
|
446
|
-
}));
|
|
447
|
-
}
|
|
448
|
-
const summary = formatRailwayDeploymentStatusSummary(scope, checks);
|
|
449
|
-
const progress = `${summary} poll=${pollCount} elapsed=${formatDurationMs(elapsedMs(startMs))}`;
|
|
450
|
-
if (progress !== lastSummary || !checks.every((entry) => entry.ok === true || entry.skipped === true)) {
|
|
451
|
-
onProgress?.(progress, "stdout");
|
|
452
|
-
lastSummary = progress;
|
|
453
|
-
}
|
|
454
|
-
if (checks.every((entry) => entry.ok === true || entry.skipped === true)) {
|
|
455
|
-
return {
|
|
456
|
-
ok: true,
|
|
457
|
-
checks: checks.map((check) => ({
|
|
458
|
-
...check,
|
|
459
|
-
settle: {
|
|
460
|
-
durationMs: elapsedMs(startMs),
|
|
461
|
-
pollCount,
|
|
462
|
-
finalStatus: check.status,
|
|
463
|
-
fastSkipped: check.skipped === true
|
|
464
|
-
}
|
|
465
|
-
})),
|
|
466
|
-
settle: {
|
|
467
|
-
durationMs: elapsedMs(startMs),
|
|
468
|
-
pollCount,
|
|
469
|
-
status: checks.every((entry) => entry.skipped === true) ? "skipped" : "settled"
|
|
470
|
-
}
|
|
471
|
-
};
|
|
472
|
-
}
|
|
473
|
-
if (checks.some((entry) => entry.terminalFailure === true)) {
|
|
474
|
-
return {
|
|
475
|
-
ok: false,
|
|
476
|
-
checks: checks.map((check) => ({
|
|
477
|
-
...check,
|
|
478
|
-
settle: {
|
|
479
|
-
durationMs: elapsedMs(startMs),
|
|
480
|
-
pollCount,
|
|
481
|
-
finalStatus: check.status,
|
|
482
|
-
terminalFailure: check.terminalFailure === true
|
|
483
|
-
}
|
|
484
|
-
})),
|
|
485
|
-
settle: {
|
|
486
|
-
durationMs: elapsedMs(startMs),
|
|
487
|
-
pollCount,
|
|
488
|
-
status: "failed"
|
|
489
|
-
},
|
|
490
|
-
message: "Railway deployment reached a terminal failed state."
|
|
491
|
-
};
|
|
492
|
-
}
|
|
493
|
-
if (Date.now() >= deadline) {
|
|
494
|
-
return {
|
|
495
|
-
ok: false,
|
|
496
|
-
checks: checks.map((check) => ({
|
|
497
|
-
...check,
|
|
498
|
-
settle: {
|
|
499
|
-
durationMs: elapsedMs(startMs),
|
|
500
|
-
pollCount,
|
|
501
|
-
finalStatus: check.status,
|
|
502
|
-
timeout: true
|
|
503
|
-
}
|
|
504
|
-
})),
|
|
505
|
-
settle: {
|
|
506
|
-
durationMs: elapsedMs(startMs),
|
|
507
|
-
pollCount,
|
|
508
|
-
status: "timeout"
|
|
509
|
-
},
|
|
510
|
-
message: lastError instanceof Error ? lastError.message : "Railway deployments did not settle before the monitor timeout."
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
await sleep(pollMs);
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
async function resolveRailwayDeploymentProjectId(services, { env = process.env, fetchImpl = fetch } = {}) {
|
|
517
|
-
const configuredProjectId = services.find((service) => typeof service.projectId === "string" && service.projectId.trim())?.projectId?.trim();
|
|
518
|
-
if (configuredProjectId) {
|
|
519
|
-
return configuredProjectId;
|
|
520
|
-
}
|
|
521
|
-
const projectName = services.find((service) => typeof service.projectName === "string" && service.projectName.trim())?.projectName?.trim();
|
|
522
|
-
if (!projectName) {
|
|
523
|
-
return null;
|
|
524
|
-
}
|
|
525
|
-
try {
|
|
526
|
-
const workspace = await resolveRailwayWorkspaceContext({ env, fetchImpl });
|
|
527
|
-
const projects = await listRailwayProjects({ env, workspaceId: workspace.id, fetchImpl });
|
|
528
|
-
return projects.find((project) => project.name === projectName)?.id ?? null;
|
|
529
|
-
} catch {
|
|
530
|
-
return null;
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
async function fetchRailwayProjectDeploymentStatus({ projectId, env = process.env, fetchImpl = fetch }) {
|
|
534
|
-
const payload = await railwayGraphqlRequest({
|
|
535
|
-
query: `
|
|
536
|
-
query TreeseedRailwayDeploymentStatus($projectId: String!) {
|
|
537
|
-
project(id: $projectId) {
|
|
538
|
-
id
|
|
539
|
-
environments(first: 50) {
|
|
540
|
-
edges {
|
|
541
|
-
node {
|
|
542
|
-
id
|
|
543
|
-
name
|
|
544
|
-
serviceInstances {
|
|
545
|
-
edges {
|
|
546
|
-
node {
|
|
547
|
-
id
|
|
548
|
-
serviceId
|
|
549
|
-
serviceName
|
|
550
|
-
latestDeployment {
|
|
551
|
-
id
|
|
552
|
-
status
|
|
553
|
-
createdAt
|
|
554
|
-
deploymentStopped
|
|
555
|
-
meta
|
|
556
|
-
instances {
|
|
557
|
-
id
|
|
558
|
-
status
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
`.trim(),
|
|
570
|
-
variables: { projectId },
|
|
571
|
-
env,
|
|
572
|
-
fetchImpl
|
|
573
|
-
});
|
|
574
|
-
return payload.data?.project ?? null;
|
|
575
|
-
}
|
|
576
|
-
function configuredRailwayServicesForConfig(tenantRoot, scope, deployConfig, application = null, machineConfigRoot = tenantRoot, envOverlay = {}, options = {}) {
|
|
577
|
-
const normalizedScope = normalizeScope(scope);
|
|
578
|
-
const identityOnly = options.identityOnly === true;
|
|
579
|
-
const imageRefKeys = [
|
|
580
|
-
"TREESEED_API_IMAGE_REF",
|
|
581
|
-
"TREESEED_OPERATIONS_RUNNER_IMAGE_REF",
|
|
582
|
-
"TREESEED_AGENT_MANAGER_IMAGE_REF",
|
|
583
|
-
"TREESEED_AGENT_RUNNER_IMAGE_REF",
|
|
584
|
-
"TREESEED_PUBLIC_TREEDX_IMAGE_REF"
|
|
585
|
-
];
|
|
586
|
-
let machineEnv = {};
|
|
587
|
-
try {
|
|
588
|
-
machineEnv = resolveTreeseedMachineEnvironmentValues(machineConfigRoot, normalizedScope, imageRefKeys);
|
|
589
|
-
} catch {
|
|
590
|
-
machineEnv = {};
|
|
591
|
-
}
|
|
592
|
-
const imageRefEnv = { ...machineEnv, ...process.env, ...envOverlay };
|
|
593
|
-
let identity;
|
|
594
|
-
try {
|
|
595
|
-
identity = resolveTreeseedResourceIdentity(deployConfig, createPersistentDeployTarget(normalizedScope));
|
|
596
|
-
} catch {
|
|
597
|
-
identity = { deploymentKey: deployConfig.slug ?? deployConfig.name ?? "treeseed" };
|
|
598
|
-
}
|
|
599
|
-
const managedRuntime = deployConfig.runtime?.mode === "treeseed_managed";
|
|
600
|
-
const hostingKind = deployConfig.hosting?.kind ?? (managedRuntime ? "hosted_project" : "self_hosted_project");
|
|
601
|
-
if (!managedRuntime) {
|
|
602
|
-
return [];
|
|
603
|
-
}
|
|
604
|
-
const configuredOptionalServiceKeys = Object.keys(deployConfig.services ?? {}).filter((serviceKey) => RAILWAY_SERVICE_KEYS.includes(serviceKey));
|
|
605
|
-
const serviceKeys = hostingKind === "hosted_project" ? [.../* @__PURE__ */ new Set([...HOSTED_PROJECT_SERVICE_KEYS, ...configuredOptionalServiceKeys])] : RAILWAY_SERVICE_KEYS;
|
|
606
|
-
const configuredServices = serviceKeys.flatMap((serviceKey) => {
|
|
607
|
-
const service = deployConfig.services?.[serviceKey];
|
|
608
|
-
if (!service || service.enabled === false || (service.provider ?? "railway") !== "railway") {
|
|
609
|
-
return [];
|
|
610
|
-
}
|
|
611
|
-
const isCapacityProviderService = String(serviceKey).startsWith("capacityProvider");
|
|
612
|
-
const defaultRootDir = ["api", "operationsRunner"].includes(serviceKey) ? "." : isCapacityProviderService ? "packages/agent" : "packages/core";
|
|
613
|
-
const serviceRoot = isCapacityProviderService ? resolveRailwayCapacityProviderRoot(tenantRoot, service) : resolve(tenantRoot, service.railway?.rootDir ?? service.rootDir ?? defaultRootDir);
|
|
614
|
-
const railwayEnvironment = resolveRailwayEnvironmentForScope(
|
|
615
|
-
normalizedScope,
|
|
616
|
-
service.environments?.[normalizedScope]?.railwayEnvironment
|
|
617
|
-
);
|
|
618
|
-
const publicBaseUrl = service.environments?.[normalizedScope]?.baseUrl ?? service.publicBaseUrl ?? (serviceKey === "api" ? configuredApiPublicBaseUrl(deployConfig, normalizedScope) : null);
|
|
619
|
-
const environmentConfig = service.environments?.[normalizedScope];
|
|
620
|
-
const baseServiceName = service.railway?.serviceName ?? (serviceKey === "workerRunner" ? deriveRailwayWorkerRunnerServiceName(identity.deploymentKey) : `${identity.deploymentKey}-${railwayServiceNameSuffix(serviceKey)}`);
|
|
621
|
-
const configuredServiceName = typeof environmentConfig?.serviceName === "string" && environmentConfig.serviceName.trim() ? environmentConfig.serviceName.trim() : isApiRailwaySourcePolicyService({ key: serviceKey, serviceName: baseServiceName }) ? railwayEnvironmentQualifiedServiceName(baseServiceName, normalizedScope) : baseServiceName;
|
|
622
|
-
const configuredRunnerPool = service.railway?.runnerPool && typeof service.railway.runnerPool === "object" ? service.railway.runnerPool : null;
|
|
623
|
-
const runnerPool = serviceKey === "operationsRunner" || serviceKey === "capacityProviderRunner" ? {
|
|
624
|
-
bootstrapCount: Math.max(1, Number.parseInt(String(configuredRunnerPool?.bootstrapCount ?? (serviceKey === "capacityProviderRunner" ? 1 : OPERATIONS_RUNNER_BOOTSTRAP_COUNT)), 10) || (serviceKey === "capacityProviderRunner" ? 1 : OPERATIONS_RUNNER_BOOTSTRAP_COUNT)),
|
|
625
|
-
maxRunners: Math.max(1, Number.parseInt(String(configuredRunnerPool?.maxRunners ?? configuredRunnerPool?.bootstrapCount ?? (serviceKey === "capacityProviderRunner" ? 1 : OPERATIONS_RUNNER_BOOTSTRAP_COUNT)), 10) || (serviceKey === "capacityProviderRunner" ? 1 : OPERATIONS_RUNNER_BOOTSTRAP_COUNT)),
|
|
626
|
-
volumeMountPath: service.railway?.volumeMountPath ?? configuredRunnerPool?.volumeMountPath ?? WORKER_RUNNER_VOLUME_MOUNT_PATH
|
|
627
|
-
} : serviceKey === "workerRunner" ? {
|
|
628
|
-
bootstrapIndex: WORKER_RUNNER_BOOTSTRAP_INDEX,
|
|
629
|
-
volumeMountPath: WORKER_RUNNER_VOLUME_MOUNT_PATH
|
|
630
|
-
} : null;
|
|
631
|
-
const instanceCount = serviceKey === "operationsRunner" || serviceKey === "capacityProviderRunner" ? runnerPool.bootstrapCount : 1;
|
|
632
|
-
return Array.from({ length: instanceCount }, (_, offset) => {
|
|
633
|
-
const runnerIndex = offset + 1;
|
|
634
|
-
const serviceName = serviceKey === "operationsRunner" ? deriveRailwayOperationsRunnerServiceName(configuredServiceName, runnerIndex) : serviceKey === "capacityProviderRunner" ? deriveRailwayCapacityProviderRunnerServiceName(configuredServiceName, runnerIndex) : configuredServiceName;
|
|
635
|
-
const configuredImageRefEnv = service.railway?.imageRefEnv ?? railwayImageRefEnvForService(serviceKey);
|
|
636
|
-
const canUseImageRefEnv = normalizedScope === "prod" || serviceKey === "capacityProviderManager" || serviceKey === "capacityProviderRunner";
|
|
637
|
-
const imageRef = service.railway?.imageRef ?? (canUseImageRefEnv && configuredImageRefEnv ? envValue(configuredImageRefEnv, imageRefEnv) || null : null) ?? defaultRailwayImageRef(serviceKey, normalizedScope, imageRefEnv);
|
|
638
|
-
const sourcePolicy = identityOnly ? {
|
|
639
|
-
sourceMode: normalizedScope === "prod" ? "image" : "git",
|
|
640
|
-
sourceRepo: null,
|
|
641
|
-
sourceBranch: null,
|
|
642
|
-
sourceCommit: null,
|
|
643
|
-
sourceRootDirectory: null
|
|
644
|
-
} : resolveRailwayServiceSourcePolicy({
|
|
645
|
-
tenantRoot,
|
|
646
|
-
scope: normalizedScope,
|
|
647
|
-
serviceKey,
|
|
648
|
-
service,
|
|
649
|
-
serviceRoot,
|
|
650
|
-
imageRef,
|
|
651
|
-
serviceName
|
|
652
|
-
});
|
|
653
|
-
const resolvedImageRef = sourcePolicy.sourceMode === "image" ? imageRef : null;
|
|
654
|
-
return {
|
|
655
|
-
key: serviceKey,
|
|
656
|
-
instanceKey: serviceKey === "operationsRunner" || serviceKey === "capacityProviderRunner" ? `${serviceKey}:${runnerIndex}` : serviceKey,
|
|
657
|
-
runnerIndex: serviceKey === "operationsRunner" || serviceKey === "capacityProviderRunner" ? runnerIndex : null,
|
|
658
|
-
serviceConfig: service,
|
|
659
|
-
scope: normalizedScope,
|
|
660
|
-
projectId: service.railway?.projectId ?? null,
|
|
661
|
-
projectName: environmentConfig?.railwayProjectName ?? service.railway?.projectName ?? identity.deploymentKey,
|
|
662
|
-
serviceId: service.railway?.serviceId ?? null,
|
|
663
|
-
serviceName,
|
|
664
|
-
runnerId: serviceKey === "operationsRunner" || serviceKey === "capacityProviderRunner" ? serviceName : null,
|
|
665
|
-
rootDir: serviceRoot,
|
|
666
|
-
publicBaseUrl,
|
|
667
|
-
railwayEnvironment,
|
|
668
|
-
buildCommand: resolvedImageRef || sourcePolicy.sourceMode === "git" && service.railway?.dockerfilePath ? null : service.railway?.buildCommand ?? null,
|
|
669
|
-
startCommand: isCapacityProviderService ? null : resolvedImageRef ? null : service.railway?.startCommand ?? null,
|
|
670
|
-
imageRef: resolvedImageRef,
|
|
671
|
-
sourceMode: sourcePolicy.sourceMode,
|
|
672
|
-
sourceRepo: sourcePolicy.sourceRepo,
|
|
673
|
-
sourceBranch: sourcePolicy.sourceBranch,
|
|
674
|
-
sourceCommit: sourcePolicy.sourceCommit,
|
|
675
|
-
sourceRootDirectory: sourcePolicy.sourceRootDirectory,
|
|
676
|
-
dockerfilePath: sourcePolicy.sourceMode === "git" ? service.railway?.dockerfilePath ?? apiRailwayDefaultDockerfilePath({ key: serviceKey, serviceName }) : null,
|
|
677
|
-
healthcheckPath: service.railway?.healthcheckPath ?? null,
|
|
678
|
-
healthcheckTimeoutSeconds: service.railway?.healthcheckTimeoutSeconds ?? null,
|
|
679
|
-
healthcheckIntervalSeconds: service.railway?.healthcheckIntervalSeconds ?? null,
|
|
680
|
-
restartPolicy: service.railway?.restartPolicy ?? null,
|
|
681
|
-
runtimeMode: service.railway?.runtimeMode ?? null,
|
|
682
|
-
volumeMountPath: serviceKey === "operationsRunner" || serviceKey === "capacityProviderRunner" ? runnerPool.volumeMountPath : service.railway?.volumeMountPath ?? null,
|
|
683
|
-
schedule: normalizeScheduleExpressions(service.railway?.schedule),
|
|
684
|
-
hostingKind,
|
|
685
|
-
runnerPool,
|
|
686
|
-
application,
|
|
687
|
-
secretRefs: Array.isArray(service.secretRefs) ? service.secretRefs : [],
|
|
688
|
-
variableRefs: Array.isArray(service.variableRefs) ? service.variableRefs : []
|
|
689
|
-
};
|
|
690
|
-
});
|
|
691
|
-
}).filter(Boolean);
|
|
692
|
-
return [
|
|
693
|
-
...configuredServices,
|
|
694
|
-
...configuredPublicTreeDxRailwayServices({
|
|
695
|
-
tenantRoot,
|
|
696
|
-
scope: normalizedScope,
|
|
697
|
-
deployConfig,
|
|
698
|
-
identity,
|
|
699
|
-
hostingKind,
|
|
700
|
-
application,
|
|
701
|
-
imageRefEnv,
|
|
702
|
-
workspaceRoot: machineConfigRoot,
|
|
703
|
-
identityOnly
|
|
704
|
-
})
|
|
705
|
-
];
|
|
706
|
-
}
|
|
707
|
-
function configuredPublicTreeDxRailwayServices({ tenantRoot, scope, deployConfig, identity, hostingKind, application, imageRefEnv, workspaceRoot, identityOnly = false }) {
|
|
708
|
-
if (deployConfig.hosting?.kind !== "treeseed_control_plane") {
|
|
709
|
-
return [];
|
|
710
|
-
}
|
|
711
|
-
const railway = deployConfig.publicTreeDxFederation?.railway ?? {};
|
|
712
|
-
const nodePool = railway.nodePool && typeof railway.nodePool === "object" && !Array.isArray(railway.nodePool) ? railway.nodePool : {};
|
|
713
|
-
const bootstrapCount = Math.max(0, Number.parseInt(String(nodePool.bootstrapCount ?? 1), 10) || 0);
|
|
714
|
-
if (bootstrapCount <= 0) {
|
|
715
|
-
return [];
|
|
716
|
-
}
|
|
717
|
-
const configuredSource = railway.source && typeof railway.source === "object" && !Array.isArray(railway.source) ? railway.source : {};
|
|
718
|
-
const treeDxRoot = resolve(workspaceRoot ?? tenantRoot, "packages", "treedx");
|
|
719
|
-
const configuredMode = typeof railway.sourceMode === "string" ? railway.sourceMode : null;
|
|
720
|
-
if (scope === "staging" && configuredMode === "image") {
|
|
721
|
-
throw new Error("public-treedx-node-01: API Railway staging services must use GitHub Dockerfile source builds (configured sourceMode image is not allowed).");
|
|
722
|
-
}
|
|
723
|
-
const sourceMode = scope === "prod" ? "image" : configuredMode === "git" || configuredMode === "image" ? configuredMode : "git";
|
|
724
|
-
const repository = typeof railway.sourceRepo === "string" ? railway.sourceRepo : typeof configuredSource.repository === "string" ? configuredSource.repository : typeof configuredSource.repo === "string" ? configuredSource.repo : readTreeseedPackageRepository(treeDxRoot) ?? "treeseed-ai/treedx";
|
|
725
|
-
const sourceBranch = typeof railway.sourceBranch === "string" ? railway.sourceBranch : typeof configuredSource.branch === "string" ? configuredSource.branch : scope === "staging" ? "staging" : null;
|
|
726
|
-
const sourceRootDirectory = typeof railway.sourceRootDirectory === "string" ? railway.sourceRootDirectory : typeof configuredSource.rootDirectory === "string" ? configuredSource.rootDirectory : ".";
|
|
727
|
-
const projectName = typeof railway.projectName === "string" && railway.projectName.trim() ? railway.projectName.trim() : typeof imageRefEnv.TREESEED_PUBLIC_TREEDX_RAILWAY_PROJECT_NAME === "string" && imageRefEnv.TREESEED_PUBLIC_TREEDX_RAILWAY_PROJECT_NAME.trim() ? imageRefEnv.TREESEED_PUBLIC_TREEDX_RAILWAY_PROJECT_NAME.trim() : identity.deploymentKey;
|
|
728
|
-
const railwayEnvironment = resolveRailwayEnvironmentForScope(scope, railway.environmentName);
|
|
729
|
-
const baseImageRef = envValue("TREESEED_PUBLIC_TREEDX_IMAGE_REF", imageRefEnv) || "treeseed/treedx";
|
|
730
|
-
return Array.from({ length: bootstrapCount }, (_, offset) => {
|
|
731
|
-
const index = offset + 1;
|
|
732
|
-
const baseServiceName = `${PUBLIC_TREEDX_NODE_SERVICE_KEY_PREFIX}${String(index).padStart(2, "0")}`;
|
|
733
|
-
const serviceName = railwayTreeDxServiceName(index, scope);
|
|
734
|
-
const service = {
|
|
735
|
-
key: baseServiceName,
|
|
736
|
-
serviceName,
|
|
737
|
-
sourceMode,
|
|
738
|
-
sourceRepo: sourceMode === "git" ? repository : null,
|
|
739
|
-
sourceBranch: sourceMode === "git" ? sourceBranch : null,
|
|
740
|
-
sourceCommit: sourceMode === "git" ? typeof railway.sourceCommit === "string" ? railway.sourceCommit : typeof configuredSource.commit === "string" ? configuredSource.commit : headCommitSafe(treeDxRoot) ?? headCommitSafe(tenantRoot) : null,
|
|
741
|
-
sourceRootDirectory: sourceMode === "git" ? sourceRootDirectory : null,
|
|
742
|
-
imageRef: sourceMode === "image" ? baseImageRef : null,
|
|
743
|
-
dockerfilePath: sourceMode === "git" ? railway.dockerfilePath ?? "/Dockerfile" : null,
|
|
744
|
-
buildCommand: sourceMode === "git" ? railway.buildCommand ?? null : null,
|
|
745
|
-
startCommand: sourceMode === "git" ? railway.startCommand ?? null : null
|
|
746
|
-
};
|
|
747
|
-
if (!identityOnly) {
|
|
748
|
-
assertApiRailwaySourcePolicy(scope, service);
|
|
749
|
-
}
|
|
750
|
-
return {
|
|
751
|
-
key: service.key,
|
|
752
|
-
instanceKey: serviceName,
|
|
753
|
-
runnerIndex: null,
|
|
754
|
-
serviceConfig: null,
|
|
755
|
-
scope,
|
|
756
|
-
projectId: typeof railway.projectId === "string" ? railway.projectId : null,
|
|
757
|
-
projectName,
|
|
758
|
-
serviceId: typeof railway.serviceId === "string" && bootstrapCount === 1 ? railway.serviceId : null,
|
|
759
|
-
serviceName: service.serviceName,
|
|
760
|
-
runnerId: null,
|
|
761
|
-
rootDir: treeDxRoot,
|
|
762
|
-
publicBaseUrl: null,
|
|
763
|
-
railwayEnvironment,
|
|
764
|
-
buildCommand: service.buildCommand,
|
|
765
|
-
startCommand: service.startCommand,
|
|
766
|
-
imageRef: service.imageRef,
|
|
767
|
-
sourceMode: service.sourceMode,
|
|
768
|
-
sourceRepo: service.sourceRepo,
|
|
769
|
-
sourceBranch: service.sourceBranch,
|
|
770
|
-
sourceCommit: service.sourceCommit,
|
|
771
|
-
sourceRootDirectory: service.sourceRootDirectory,
|
|
772
|
-
dockerfilePath: service.dockerfilePath,
|
|
773
|
-
healthcheckPath: railway.healthcheckPath ?? null,
|
|
774
|
-
healthcheckTimeoutSeconds: railway.healthcheckTimeoutSeconds ?? null,
|
|
775
|
-
healthcheckIntervalSeconds: railway.healthcheckIntervalSeconds ?? null,
|
|
776
|
-
restartPolicy: railway.restartPolicy ?? null,
|
|
777
|
-
runtimeMode: railway.runtimeMode ?? "replicated",
|
|
778
|
-
volumeMountPath: railway.volumeMountPath ?? "/data",
|
|
779
|
-
schedule: [],
|
|
780
|
-
hostingKind,
|
|
781
|
-
runnerPool: null,
|
|
782
|
-
application,
|
|
783
|
-
environmentVariables: {
|
|
784
|
-
PORT: "4000",
|
|
785
|
-
TREEDX_DATA_DIR: railway.volumeMountPath ?? "/data",
|
|
786
|
-
TREEDX_AUTH_MODE: "connected",
|
|
787
|
-
TREEDX_AUTH_VERIFIER: "hs256_dev",
|
|
788
|
-
TREEDX_ALLOW_DEV_VERIFIER_IN_PROD: "true",
|
|
789
|
-
TREEDX_EXEC_BACKEND: "container_sandbox",
|
|
790
|
-
TREEDX_FEDERATION_MODE: "connected_library",
|
|
791
|
-
TREEDX_JWT_AUDIENCE: "treedx-public-federation",
|
|
792
|
-
TREEDX_JWT_ISSUER: "https://api.treeseed.local/treedx",
|
|
793
|
-
TREEDX_BOOTSTRAP_TRUST_ACTOR_ID: "treeseed-api",
|
|
794
|
-
TREEDX_BOOTSTRAP_TRUST_TENANT_ID: "treeseed-control-plane",
|
|
795
|
-
TREEDX_BOOTSTRAP_TRUST_REPO_IDS: "*",
|
|
796
|
-
TREEDX_BOOTSTRAP_TRUST_REFS: "*",
|
|
797
|
-
TREEDX_BOOTSTRAP_TRUST_PATHS: "**",
|
|
798
|
-
TREEDX_SCOPE: "public_federation"
|
|
799
|
-
},
|
|
800
|
-
secretRefs: ["TREEDX_SECRET_KEY_BASE", "TREEDX_ADMIN_TOKEN", "TREEDX_JWT_HS256_SECRET"],
|
|
801
|
-
variableRefs: [
|
|
802
|
-
"PORT",
|
|
803
|
-
"TREEDX_DATA_DIR",
|
|
804
|
-
"TREEDX_AUTH_MODE",
|
|
805
|
-
"TREEDX_AUTH_VERIFIER",
|
|
806
|
-
"TREEDX_ALLOW_DEV_VERIFIER_IN_PROD",
|
|
807
|
-
"TREEDX_EXEC_BACKEND",
|
|
808
|
-
"TREEDX_FEDERATION_MODE",
|
|
809
|
-
"TREEDX_JWT_AUDIENCE",
|
|
810
|
-
"TREEDX_JWT_ISSUER",
|
|
811
|
-
"TREEDX_BOOTSTRAP_TRUST_ACTOR_ID",
|
|
812
|
-
"TREEDX_BOOTSTRAP_TRUST_TENANT_ID",
|
|
813
|
-
"TREEDX_BOOTSTRAP_TRUST_REPO_IDS",
|
|
814
|
-
"TREEDX_BOOTSTRAP_TRUST_REFS",
|
|
815
|
-
"TREEDX_BOOTSTRAP_TRUST_PATHS",
|
|
816
|
-
"TREEDX_SCOPE"
|
|
817
|
-
]
|
|
818
|
-
};
|
|
819
|
-
});
|
|
820
|
-
}
|
|
821
|
-
function readTreeseedPackageRepository(packageRoot) {
|
|
822
|
-
const manifestPath = resolve(packageRoot, "treeseed.package.yaml");
|
|
823
|
-
if (!existsSync(manifestPath)) return null;
|
|
824
|
-
try {
|
|
825
|
-
const manifest = parseYaml(readFileSync(manifestPath, "utf8"));
|
|
826
|
-
const repository = manifest && typeof manifest === "object" && !Array.isArray(manifest) ? manifest.repository : null;
|
|
827
|
-
return typeof repository === "string" && /^[^/\s]+\/[^/\s]+$/u.test(repository.trim()) ? repository.trim() : null;
|
|
828
|
-
} catch {
|
|
829
|
-
return null;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
function headCommitSafe(cwd) {
|
|
833
|
-
try {
|
|
834
|
-
return runTreeseedGitText(["rev-parse", "HEAD"], {
|
|
835
|
-
cwd,
|
|
836
|
-
mode: classifyTreeseedGitMode(["rev-parse", "HEAD"])
|
|
837
|
-
}).trim();
|
|
838
|
-
} catch {
|
|
839
|
-
return null;
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
function resolveRailwayServiceSourcePolicy({ tenantRoot, scope, serviceKey, service, serviceRoot, imageRef, serviceName: effectiveServiceName }) {
|
|
843
|
-
const configuredMode = typeof service.railway?.sourceMode === "string" ? service.railway.sourceMode : null;
|
|
844
|
-
const configuredSource = service.railway?.source && typeof service.railway.source === "object" && !Array.isArray(service.railway.source) ? service.railway.source : {};
|
|
845
|
-
const configuredRepo = typeof service.railway?.sourceRepo === "string" ? service.railway.sourceRepo : typeof configuredSource.repository === "string" ? configuredSource.repository : typeof configuredSource.repo === "string" ? configuredSource.repo : null;
|
|
846
|
-
const serviceName = effectiveServiceName ?? service.railway?.serviceName ?? null;
|
|
847
|
-
const packageRepository = configuredRepo ?? readTreeseedPackageRepository(serviceRoot) ?? readTreeseedPackageRepository(tenantRoot) ?? apiRailwayDefaultSourceRepo({ key: serviceKey, serviceName });
|
|
848
|
-
const dockerfilePath = service.railway?.dockerfilePath ?? apiRailwayDefaultDockerfilePath({ key: serviceKey, serviceName });
|
|
849
|
-
const apiPackageSourceEligible = ["api", "operationsRunner"].includes(serviceKey);
|
|
850
|
-
if (scope === "staging" && isApiRailwaySourcePolicyService({ key: serviceKey, serviceName }) && (configuredMode === "image" || service.railway?.imageRef)) {
|
|
851
|
-
throw new Error(`${serviceName ?? serviceKey}: API Railway staging services must use GitHub Dockerfile source builds (configured image source is not allowed).`);
|
|
852
|
-
}
|
|
853
|
-
const sourceMode = scope === "prod" ? "image" : scope === "staging" && apiPackageSourceEligible ? "git" : configuredMode === "git" || configuredMode === "image" ? configuredMode : imageRef ? "image" : "git";
|
|
854
|
-
if (sourceMode !== "git") {
|
|
855
|
-
const policy2 = {
|
|
856
|
-
sourceMode: "image",
|
|
857
|
-
sourceRepo: null,
|
|
858
|
-
sourceBranch: null,
|
|
859
|
-
sourceCommit: null,
|
|
860
|
-
sourceRootDirectory: null
|
|
861
|
-
};
|
|
862
|
-
assertApiRailwaySourcePolicy(scope, {
|
|
863
|
-
key: serviceKey,
|
|
864
|
-
serviceName,
|
|
865
|
-
imageRef,
|
|
866
|
-
dockerfilePath: null,
|
|
867
|
-
buildCommand: null,
|
|
868
|
-
startCommand: null,
|
|
869
|
-
...policy2
|
|
870
|
-
});
|
|
871
|
-
return policy2;
|
|
872
|
-
}
|
|
873
|
-
const policy = {
|
|
874
|
-
sourceMode: "git",
|
|
875
|
-
sourceRepo: packageRepository,
|
|
876
|
-
sourceBranch: typeof service.railway?.sourceBranch === "string" ? service.railway.sourceBranch : typeof configuredSource.branch === "string" ? configuredSource.branch : scope === "staging" ? "staging" : null,
|
|
877
|
-
sourceCommit: typeof service.railway?.sourceCommit === "string" ? service.railway.sourceCommit : typeof configuredSource.commit === "string" ? configuredSource.commit : headCommitSafe(serviceRoot),
|
|
878
|
-
sourceRootDirectory: typeof service.railway?.sourceRootDirectory === "string" ? service.railway.sourceRootDirectory : typeof configuredSource.rootDirectory === "string" ? configuredSource.rootDirectory : "."
|
|
879
|
-
};
|
|
880
|
-
assertApiRailwaySourcePolicy(scope, {
|
|
881
|
-
key: serviceKey,
|
|
882
|
-
serviceName,
|
|
883
|
-
imageRef: null,
|
|
884
|
-
dockerfilePath,
|
|
885
|
-
...policy
|
|
886
|
-
});
|
|
887
|
-
return policy;
|
|
888
|
-
}
|
|
889
|
-
function resolveRailwayCapacityProviderRoot(tenantRoot, service) {
|
|
890
|
-
if (service.railway?.rootDir) {
|
|
891
|
-
return resolve(tenantRoot, service.railway.rootDir);
|
|
892
|
-
}
|
|
893
|
-
const candidates = [
|
|
894
|
-
resolve(tenantRoot, "..", "agent"),
|
|
895
|
-
resolve(tenantRoot, "packages", "agent"),
|
|
896
|
-
resolve(tenantRoot, "..", "..", "packages", "agent")
|
|
897
|
-
];
|
|
898
|
-
const found = candidates.find(
|
|
899
|
-
(candidate) => existsSync(resolve(candidate, "treeseed.package.yaml")) || existsSync(resolve(candidate, "package.json"))
|
|
900
|
-
);
|
|
901
|
-
return found ?? resolve(tenantRoot, "packages", "agent");
|
|
902
|
-
}
|
|
903
|
-
function configuredRailwayServices(tenantRoot, scope, envOverlay = {}, options = {}) {
|
|
904
|
-
const deployConfig = loadCliDeployConfig(tenantRoot);
|
|
905
|
-
const direct = configuredRailwayServicesForConfig(tenantRoot, scope, deployConfig, null, tenantRoot, envOverlay, options);
|
|
906
|
-
const nested = discoverTreeseedApplications(tenantRoot).filter((application) => application.root !== resolve(tenantRoot)).flatMap((application) => configuredRailwayServicesForConfig(
|
|
907
|
-
application.root,
|
|
908
|
-
scope,
|
|
909
|
-
application.config,
|
|
910
|
-
{
|
|
911
|
-
id: application.id,
|
|
912
|
-
root: application.root,
|
|
913
|
-
relativeRoot: application.relativeRoot
|
|
914
|
-
},
|
|
915
|
-
tenantRoot,
|
|
916
|
-
envOverlay,
|
|
917
|
-
options
|
|
918
|
-
));
|
|
919
|
-
return [...direct, ...nested];
|
|
920
|
-
}
|
|
921
|
-
function obsoleteUnqualifiedRailwayResourceNames(services) {
|
|
922
|
-
const aliases = /* @__PURE__ */ new Set();
|
|
923
|
-
for (const service of services) {
|
|
924
|
-
const alias = service.serviceName.replace(/-(?:staging|production)(?=-\d+$|$)/u, "");
|
|
925
|
-
if (!alias || alias === service.serviceName) continue;
|
|
926
|
-
aliases.add(alias);
|
|
927
|
-
if (service.volumeMountPath) aliases.add(`${alias}-volume`);
|
|
928
|
-
const index = /-(\d+)$/u.exec(service.serviceName)?.[1] ?? "01";
|
|
929
|
-
const environmentSuffix = service.railwayEnvironment === "production" ? "production" : "staging";
|
|
930
|
-
const formerNames = service.key === "operationsRunner" ? [
|
|
931
|
-
`treeseed-api-operations-runner-${index}`,
|
|
932
|
-
`treeseed-api-operations-runner-${environmentSuffix}-${index}`
|
|
933
|
-
] : service.key.startsWith("public-treedx-node-") ? [
|
|
934
|
-
`public-treedx-node-${index}`,
|
|
935
|
-
`public-treedx-node-${environmentSuffix}-${index}`
|
|
936
|
-
] : [];
|
|
937
|
-
for (const formerName of formerNames) {
|
|
938
|
-
if (formerName === service.serviceName) continue;
|
|
939
|
-
aliases.add(formerName);
|
|
940
|
-
if (service.volumeMountPath) aliases.add(`${formerName}-volume`);
|
|
941
|
-
}
|
|
942
|
-
}
|
|
943
|
-
return [...aliases];
|
|
944
|
-
}
|
|
945
|
-
function railwayObsoleteAliasCleanupPolicy(scope, services, liveProjectServiceNames = [], activeEnvironmentServiceNames = []) {
|
|
946
|
-
const aliases = obsoleteUnqualifiedRailwayResourceNames(services);
|
|
947
|
-
const liveNames = new Set(liveProjectServiceNames);
|
|
948
|
-
void scope;
|
|
949
|
-
void activeEnvironmentServiceNames;
|
|
950
|
-
const qualifiedServices = services.filter((service) => service.serviceName !== service.serviceName.replace(/-(?:staging|production)(?=-\d+$|$)/u, "")).map((service) => service.serviceName);
|
|
951
|
-
const qualifiedResourcesExist = aliases.length > 0 && qualifiedServices.every((name) => liveNames.has(name));
|
|
952
|
-
return {
|
|
953
|
-
retainedResourceNames: qualifiedResourcesExist ? [] : aliases,
|
|
954
|
-
allowedResourceDeletions: qualifiedResourcesExist ? aliases : []
|
|
955
|
-
};
|
|
956
|
-
}
|
|
957
|
-
function configuredRailwayScheduledJobs(tenantRoot, scope, { phase = "deploy" } = {}) {
|
|
958
|
-
if (!shouldManageRailwaySchedules(scope, phase)) {
|
|
959
|
-
return [];
|
|
960
|
-
}
|
|
961
|
-
return configuredRailwayServices(tenantRoot, scope).filter((service) => Array.isArray(service.schedule) && service.schedule.length > 0).flatMap(
|
|
962
|
-
(service) => service.schedule.map((expression, index) => ({
|
|
963
|
-
service: service.key,
|
|
964
|
-
projectId: service.projectId,
|
|
965
|
-
projectName: service.projectName,
|
|
966
|
-
serviceId: service.serviceId,
|
|
967
|
-
serviceName: service.serviceName,
|
|
968
|
-
environment: normalizeRailwayEnvironmentName(service.railwayEnvironment),
|
|
969
|
-
environmentId: envValue("TREESEED_RAILWAY_ENVIRONMENT_ID") || null,
|
|
970
|
-
expression,
|
|
971
|
-
command: service.startCommand,
|
|
972
|
-
enabled: true,
|
|
973
|
-
logicalName: `${service.key}:${index + 1}`
|
|
974
|
-
}))
|
|
975
|
-
);
|
|
976
|
-
}
|
|
977
|
-
async function resolveRailwayScheduleTarget(schedule, {
|
|
978
|
-
env = process.env,
|
|
979
|
-
fetchImpl = fetch,
|
|
980
|
-
ensure = false
|
|
981
|
-
} = {}) {
|
|
982
|
-
const workspace = await resolveRailwayWorkspaceContext({ env, fetchImpl });
|
|
983
|
-
const projects = await listRailwayProjects({
|
|
984
|
-
env,
|
|
985
|
-
workspaceId: workspace.id,
|
|
986
|
-
fetchImpl
|
|
987
|
-
});
|
|
988
|
-
let project = projects.find((entry) => entry.id === schedule.projectId || entry.name === schedule.projectName) ?? null;
|
|
989
|
-
if (!project && ensure) {
|
|
990
|
-
project = (await ensureRailwayProject({
|
|
991
|
-
projectId: schedule.projectId,
|
|
992
|
-
projectName: schedule.projectName,
|
|
993
|
-
defaultEnvironmentName: schedule.environment,
|
|
994
|
-
env,
|
|
995
|
-
workspace: workspace.name,
|
|
996
|
-
fetchImpl
|
|
997
|
-
})).project;
|
|
998
|
-
}
|
|
999
|
-
if (!project) {
|
|
1000
|
-
return { workspace, project: null, environment: null, service: null };
|
|
1001
|
-
}
|
|
1002
|
-
let environment = project.environments.find((entry) => entry.id === schedule.environmentId || entry.name === schedule.environment) ?? null;
|
|
1003
|
-
if (!environment) {
|
|
1004
|
-
environment = ensure ? (await ensureRailwayEnvironment({
|
|
1005
|
-
projectId: project.id,
|
|
1006
|
-
environmentName: schedule.environment,
|
|
1007
|
-
env,
|
|
1008
|
-
fetchImpl
|
|
1009
|
-
})).environment : (await listRailwayEnvironments({ projectId: project.id, env, fetchImpl })).find((entry) => entry.id === schedule.environmentId || entry.name === schedule.environment) ?? null;
|
|
1010
|
-
}
|
|
1011
|
-
let service = project.services.find((entry) => entry.id === schedule.serviceId || entry.name === schedule.serviceName) ?? null;
|
|
1012
|
-
if (!service) {
|
|
1013
|
-
service = ensure ? (await ensureRailwayService({
|
|
1014
|
-
projectId: project.id,
|
|
1015
|
-
serviceId: schedule.serviceId,
|
|
1016
|
-
serviceName: schedule.serviceName,
|
|
1017
|
-
env,
|
|
1018
|
-
fetchImpl
|
|
1019
|
-
})).service : (await listRailwayServices({ projectId: project.id, env, fetchImpl })).find((entry) => entry.id === schedule.serviceId || entry.name === schedule.serviceName) ?? null;
|
|
1020
|
-
}
|
|
1021
|
-
return { workspace, project, environment, service };
|
|
1022
|
-
}
|
|
1023
|
-
function resolveRailwayDeploymentProfile(tenantRoot) {
|
|
1024
|
-
const deployConfig = loadCliDeployConfig(tenantRoot);
|
|
1025
|
-
const hostingKind = deployConfig.hosting?.kind ?? (deployConfig.runtime?.mode === "treeseed_managed" ? "hosted_project" : "self_hosted_project");
|
|
1026
|
-
const configuredOptionalServiceKeys = Object.keys(deployConfig.services ?? {}).filter((serviceKey) => RAILWAY_SERVICE_KEYS.includes(serviceKey));
|
|
1027
|
-
return {
|
|
1028
|
-
hostingKind,
|
|
1029
|
-
managedTopology: deployConfig.runtime?.mode === "treeseed_managed" ? hostingKind === "hosted_project" ? [.../* @__PURE__ */ new Set([...HOSTED_PROJECT_SERVICE_KEYS, ...configuredOptionalServiceKeys])] : [...RAILWAY_SERVICE_KEYS] : []
|
|
1030
|
-
};
|
|
1031
|
-
}
|
|
1032
|
-
function validateRailwayServiceConfiguration(tenantRoot, scope) {
|
|
1033
|
-
const services = configuredRailwayServices(tenantRoot, scope);
|
|
1034
|
-
const { hostingKind, managedTopology } = resolveRailwayDeploymentProfile(tenantRoot);
|
|
1035
|
-
const issues = [];
|
|
1036
|
-
const configuredKeys = new Set(services.map((service) => service.key));
|
|
1037
|
-
if (hostingKind === "hosted_project") {
|
|
1038
|
-
for (const serviceKey of HOSTED_PROJECT_SERVICE_KEYS) {
|
|
1039
|
-
if (!configuredKeys.has(serviceKey)) {
|
|
1040
|
-
issues.push(`${serviceKey}: hosted_project deployments require the ${serviceKey} Railway service to be configured.`);
|
|
1041
|
-
}
|
|
1042
|
-
}
|
|
1043
|
-
}
|
|
1044
|
-
for (const service of services) {
|
|
1045
|
-
if (!service.serviceName && !service.serviceId) {
|
|
1046
|
-
issues.push(`${service.key}: set railway.serviceName or railway.serviceId in treeseed.site.yaml.`);
|
|
1047
|
-
}
|
|
1048
|
-
if (!service.projectName && !service.projectId) {
|
|
1049
|
-
issues.push(`${service.key}: set railway.projectName or railway.projectId in treeseed.site.yaml.`);
|
|
1050
|
-
}
|
|
1051
|
-
if (service.sourceMode === "git" && !service.sourceRepo) {
|
|
1052
|
-
issues.push(`${service.key}: staging source builds require railway.source.repository or package repository metadata.`);
|
|
1053
|
-
}
|
|
1054
|
-
const usesExternalGitSource = service.sourceMode === "git" && Boolean(service.sourceRepo);
|
|
1055
|
-
if (!service.imageRef && !usesExternalGitSource && !existsSync(service.rootDir)) {
|
|
1056
|
-
issues.push(`${service.key}: service root ${service.rootDir} does not exist.`);
|
|
1057
|
-
}
|
|
1058
|
-
if (service.schedule?.length && !service.startCommand) {
|
|
1059
|
-
issues.push(`${service.key}: scheduled Railway services require railway.startCommand in treeseed.site.yaml.`);
|
|
1060
|
-
}
|
|
1061
|
-
}
|
|
1062
|
-
if (issues.length > 0) {
|
|
1063
|
-
throw new Error(`Railway service configuration is incomplete:
|
|
1064
|
-
- ${issues.join("\n- ")}`);
|
|
1065
|
-
}
|
|
1066
|
-
return {
|
|
1067
|
-
services,
|
|
1068
|
-
schedules: configuredRailwayScheduledJobs(tenantRoot, scope, { phase: "deploy" }),
|
|
1069
|
-
hostingKind,
|
|
1070
|
-
managedTopology
|
|
1071
|
-
};
|
|
1072
|
-
}
|
|
1073
|
-
function validateRailwayDeployPrerequisites(tenantRoot, scope, { env = process.env } = {}) {
|
|
1074
|
-
const validation = validateRailwayServiceConfiguration(tenantRoot, scope);
|
|
1075
|
-
const token = resolveRailwayAuthToken(env);
|
|
1076
|
-
if (typeof token !== "string" || token.trim().length === 0) {
|
|
1077
|
-
throw new Error("Configure TREESEED_RAILWAY_API_TOKEN before deploying Railway-managed services.");
|
|
1078
|
-
}
|
|
1079
|
-
return validation;
|
|
1080
|
-
}
|
|
1081
|
-
async function ensureRailwayScheduledJobs(tenantRoot, scope, { planOnly = false, fetchImpl = fetch, apiToken, apiUrl, env = process.env } = {}) {
|
|
1082
|
-
const { schedules } = validateRailwayServiceConfiguration(tenantRoot, scope);
|
|
1083
|
-
if (schedules.length === 0) {
|
|
1084
|
-
return [];
|
|
1085
|
-
}
|
|
1086
|
-
const effectiveApiToken = apiToken || resolveRailwayAuthToken(env);
|
|
1087
|
-
const effectiveApiUrl = apiUrl || resolveRailwayApiUrl(env);
|
|
1088
|
-
if (typeof effectiveApiToken !== "string" || effectiveApiToken.trim().length === 0) {
|
|
1089
|
-
throw new Error("Configure TREESEED_RAILWAY_API_TOKEN before deploying Railway-managed services.");
|
|
1090
|
-
}
|
|
1091
|
-
const results = [];
|
|
1092
|
-
try {
|
|
1093
|
-
for (const schedule of schedules) {
|
|
1094
|
-
const target = await resolveRailwayScheduleTarget(schedule, {
|
|
1095
|
-
env,
|
|
1096
|
-
fetchImpl,
|
|
1097
|
-
ensure: !planOnly
|
|
1098
|
-
});
|
|
1099
|
-
if (!target.project || !target.environment || !target.service) {
|
|
1100
|
-
results.push({
|
|
1101
|
-
...schedule,
|
|
1102
|
-
id: null,
|
|
1103
|
-
projectId: target.project?.id ?? null,
|
|
1104
|
-
serviceId: target.service?.id ?? null,
|
|
1105
|
-
environmentId: target.environment?.id ?? null,
|
|
1106
|
-
status: "skipped_missing_identifiers",
|
|
1107
|
-
enabled: schedule.enabled !== false,
|
|
1108
|
-
command: schedule.command
|
|
1109
|
-
});
|
|
1110
|
-
continue;
|
|
1111
|
-
}
|
|
1112
|
-
const current = await getRailwayServiceInstance({
|
|
1113
|
-
serviceId: target.service.id,
|
|
1114
|
-
environmentId: target.environment.id,
|
|
1115
|
-
env: { ...env, TREESEED_RAILWAY_API_TOKEN: effectiveApiToken, RAILWAY_API_TOKEN: effectiveApiToken, TREESEED_RAILWAY_API_URL: effectiveApiUrl },
|
|
1116
|
-
fetchImpl
|
|
1117
|
-
});
|
|
1118
|
-
const desired = {
|
|
1119
|
-
name: schedule.logicalName,
|
|
1120
|
-
schedule: schedule.expression,
|
|
1121
|
-
command: schedule.command,
|
|
1122
|
-
enabled: schedule.enabled !== false
|
|
1123
|
-
};
|
|
1124
|
-
const drifted = Boolean(
|
|
1125
|
-
current.id && (current.cronSchedule !== desired.schedule || (current.startCommand ?? null) !== (desired.command ?? null))
|
|
1126
|
-
);
|
|
1127
|
-
if (planOnly) {
|
|
1128
|
-
results.push({
|
|
1129
|
-
...schedule,
|
|
1130
|
-
projectId: target.project.id,
|
|
1131
|
-
id: current.id,
|
|
1132
|
-
status: current.id ? drifted ? "planned_update" : "planned_noop" : "planned_create",
|
|
1133
|
-
enabled: desired.enabled,
|
|
1134
|
-
command: desired.command,
|
|
1135
|
-
serviceId: target.service.id,
|
|
1136
|
-
environmentId: target.environment.id
|
|
1137
|
-
});
|
|
1138
|
-
continue;
|
|
1139
|
-
}
|
|
1140
|
-
const updated = await ensureRailwayServiceInstanceConfiguration({
|
|
1141
|
-
serviceId: target.service.id,
|
|
1142
|
-
environmentId: target.environment.id,
|
|
1143
|
-
startCommand: desired.command,
|
|
1144
|
-
cronSchedule: desired.schedule,
|
|
1145
|
-
env: { ...env, TREESEED_RAILWAY_API_TOKEN: effectiveApiToken, RAILWAY_API_TOKEN: effectiveApiToken, TREESEED_RAILWAY_API_URL: effectiveApiUrl },
|
|
1146
|
-
fetchImpl
|
|
1147
|
-
});
|
|
1148
|
-
results.push({
|
|
1149
|
-
...schedule,
|
|
1150
|
-
projectId: target.project.id,
|
|
1151
|
-
id: updated.instance.id,
|
|
1152
|
-
status: updated.updated ? "updated" : "noop",
|
|
1153
|
-
enabled: desired.enabled,
|
|
1154
|
-
command: desired.command,
|
|
1155
|
-
serviceId: target.service.id,
|
|
1156
|
-
environmentId: target.environment.id
|
|
1157
|
-
});
|
|
1158
|
-
}
|
|
1159
|
-
} catch (error) {
|
|
1160
|
-
if (!isRailwayScheduleCapabilityError(error)) {
|
|
1161
|
-
throw error;
|
|
1162
|
-
}
|
|
1163
|
-
return schedules.map((schedule) => ({
|
|
1164
|
-
...schedule,
|
|
1165
|
-
id: null,
|
|
1166
|
-
status: "unsupported",
|
|
1167
|
-
enabled: schedule.enabled !== false,
|
|
1168
|
-
command: schedule.command,
|
|
1169
|
-
message: "Railway GraphQL no longer exposes cron trigger resources for this account. Schedule reconciliation is not currently supported."
|
|
1170
|
-
}));
|
|
1171
|
-
}
|
|
1172
|
-
return results;
|
|
1173
|
-
}
|
|
1174
|
-
async function verifyRailwayScheduledJobs(tenantRoot, scope, { fetchImpl = fetch, apiToken, apiUrl, env = process.env } = {}) {
|
|
1175
|
-
const effectiveApiToken = apiToken || resolveRailwayAuthToken(env);
|
|
1176
|
-
const effectiveApiUrl = apiUrl || resolveRailwayApiUrl(env);
|
|
1177
|
-
const configured = configuredRailwayScheduledJobs(tenantRoot, scope);
|
|
1178
|
-
const checks = [];
|
|
1179
|
-
try {
|
|
1180
|
-
for (const schedule of configured) {
|
|
1181
|
-
const target = await resolveRailwayScheduleTarget(schedule, {
|
|
1182
|
-
env,
|
|
1183
|
-
fetchImpl,
|
|
1184
|
-
ensure: false
|
|
1185
|
-
});
|
|
1186
|
-
if (!target.project || !target.environment || !target.service) {
|
|
1187
|
-
checks.push({
|
|
1188
|
-
...schedule,
|
|
1189
|
-
id: null,
|
|
1190
|
-
ok: false,
|
|
1191
|
-
status: "skipped_missing_identifiers",
|
|
1192
|
-
message: `Railway schedule target is missing in workspace ${target.workspace.name}.`
|
|
1193
|
-
});
|
|
1194
|
-
continue;
|
|
1195
|
-
}
|
|
1196
|
-
const existing = await getRailwayServiceInstance({
|
|
1197
|
-
serviceId: target.service.id,
|
|
1198
|
-
environmentId: target.environment.id,
|
|
1199
|
-
env: { ...env, TREESEED_RAILWAY_API_TOKEN: effectiveApiToken, RAILWAY_API_TOKEN: effectiveApiToken, TREESEED_RAILWAY_API_URL: effectiveApiUrl },
|
|
1200
|
-
fetchImpl
|
|
1201
|
-
});
|
|
1202
|
-
checks.push({
|
|
1203
|
-
...schedule,
|
|
1204
|
-
id: existing.id,
|
|
1205
|
-
projectId: target.project.id,
|
|
1206
|
-
serviceId: target.service.id,
|
|
1207
|
-
environmentId: target.environment.id,
|
|
1208
|
-
ok: Boolean(
|
|
1209
|
-
existing.id && existing.cronSchedule === schedule.expression && (existing.startCommand ?? null) === (schedule.command ?? null)
|
|
1210
|
-
),
|
|
1211
|
-
status: existing.id ? "checked" : "missing",
|
|
1212
|
-
observed: existing.id ? {
|
|
1213
|
-
expression: existing.cronSchedule,
|
|
1214
|
-
command: existing.startCommand ?? null,
|
|
1215
|
-
enabled: true
|
|
1216
|
-
} : null,
|
|
1217
|
-
message: existing.id ? void 0 : `Railway schedule ${schedule.logicalName} is missing for ${target.service.name} in ${target.environment.name}.`
|
|
1218
|
-
});
|
|
1219
|
-
}
|
|
1220
|
-
} catch (error) {
|
|
1221
|
-
if (!isRailwayScheduleCapabilityError(error)) {
|
|
1222
|
-
throw error;
|
|
1223
|
-
}
|
|
1224
|
-
return {
|
|
1225
|
-
ok: true,
|
|
1226
|
-
unsupported: true,
|
|
1227
|
-
message: "Railway GraphQL no longer exposes cron trigger resources for this account. Schedule verification is skipped.",
|
|
1228
|
-
checks: configured.map((schedule) => ({
|
|
1229
|
-
...schedule,
|
|
1230
|
-
id: null,
|
|
1231
|
-
ok: true,
|
|
1232
|
-
status: "unsupported",
|
|
1233
|
-
message: "Railway GraphQL no longer exposes cron trigger resources for this account. Schedule verification is skipped."
|
|
1234
|
-
}))
|
|
1235
|
-
};
|
|
1236
|
-
}
|
|
1237
|
-
return {
|
|
1238
|
-
ok: checks.every((entry) => entry.ok === true),
|
|
1239
|
-
checks
|
|
1240
|
-
};
|
|
1241
|
-
}
|
|
1242
|
-
async function verifyRailwayManagedResources(tenantRoot, scope, {
|
|
1243
|
-
fetchImpl = fetch,
|
|
1244
|
-
apiToken,
|
|
1245
|
-
apiUrl,
|
|
1246
|
-
env = process.env,
|
|
1247
|
-
settleDeployments = false,
|
|
1248
|
-
settleTimeoutMs = 6e5,
|
|
1249
|
-
settlePollMs = 15e3,
|
|
1250
|
-
onProgress
|
|
1251
|
-
} = {}) {
|
|
1252
|
-
const effectiveApiToken = apiToken || resolveRailwayAuthToken(env);
|
|
1253
|
-
const effectiveApiUrl = apiUrl || resolveRailwayApiUrl(env);
|
|
1254
|
-
const effectiveEnv = { ...env, TREESEED_RAILWAY_API_TOKEN: effectiveApiToken, RAILWAY_API_TOKEN: effectiveApiToken, TREESEED_RAILWAY_API_URL: effectiveApiUrl };
|
|
1255
|
-
const services = configuredRailwayServices(tenantRoot, scope);
|
|
1256
|
-
const checks = [];
|
|
1257
|
-
const deploymentStatusServices = [];
|
|
1258
|
-
for (const service of services) {
|
|
1259
|
-
const target = await resolveRailwayScheduleTarget({
|
|
1260
|
-
projectId: service.projectId,
|
|
1261
|
-
projectName: service.projectName,
|
|
1262
|
-
serviceId: service.serviceId,
|
|
1263
|
-
serviceName: service.serviceName,
|
|
1264
|
-
environment: normalizeRailwayEnvironmentName(service.railwayEnvironment),
|
|
1265
|
-
environmentId: envValue("TREESEED_RAILWAY_ENVIRONMENT_ID") || null
|
|
1266
|
-
}, {
|
|
1267
|
-
env: effectiveEnv,
|
|
1268
|
-
fetchImpl,
|
|
1269
|
-
ensure: false
|
|
1270
|
-
});
|
|
1271
|
-
if (!target.project || !target.environment || !target.service) {
|
|
1272
|
-
checks.push({
|
|
1273
|
-
type: "service",
|
|
1274
|
-
service: service.key,
|
|
1275
|
-
serviceName: service.serviceName,
|
|
1276
|
-
projectName: service.projectName,
|
|
1277
|
-
environment: service.railwayEnvironment,
|
|
1278
|
-
ok: false,
|
|
1279
|
-
status: "missing",
|
|
1280
|
-
message: `Railway service ${service.serviceName} is missing in ${service.railwayEnvironment}.`
|
|
1281
|
-
});
|
|
1282
|
-
continue;
|
|
1283
|
-
}
|
|
1284
|
-
deploymentStatusServices.push({
|
|
1285
|
-
...service,
|
|
1286
|
-
projectId: target.project.id
|
|
1287
|
-
});
|
|
1288
|
-
const instance = await getRailwayServiceInstance({
|
|
1289
|
-
serviceId: target.service.id,
|
|
1290
|
-
environmentId: target.environment.id,
|
|
1291
|
-
env: effectiveEnv,
|
|
1292
|
-
fetchImpl
|
|
1293
|
-
});
|
|
1294
|
-
checks.push({
|
|
1295
|
-
type: "service-instance",
|
|
1296
|
-
service: service.key,
|
|
1297
|
-
serviceName: target.service.name,
|
|
1298
|
-
serviceId: target.service.id,
|
|
1299
|
-
projectId: target.project.id,
|
|
1300
|
-
environment: target.environment.name,
|
|
1301
|
-
environmentId: target.environment.id,
|
|
1302
|
-
instanceId: instance.id,
|
|
1303
|
-
ok: Boolean(instance.id),
|
|
1304
|
-
status: instance.id ? "checked" : "missing",
|
|
1305
|
-
observed: instance.id ? {
|
|
1306
|
-
rootDirectory: instance.rootDirectory,
|
|
1307
|
-
startCommand: instance.startCommand,
|
|
1308
|
-
cronSchedule: instance.cronSchedule,
|
|
1309
|
-
sleepApplication: instance.sleepApplication,
|
|
1310
|
-
runtimeMode: instance.runtimeMode
|
|
1311
|
-
} : null,
|
|
1312
|
-
message: instance.id ? void 0 : `Railway service instance for ${target.service.name} is missing in ${target.environment.name}.`
|
|
1313
|
-
});
|
|
1314
|
-
const expectedVolumeMountPath = service.volumeMountPath ?? service.runnerPool?.volumeMountPath ?? null;
|
|
1315
|
-
if (expectedVolumeMountPath) {
|
|
1316
|
-
const expectedVolumeName = service.key === "operationsRunner" ? deriveRailwayOperationsRunnerVolumeName(target.service.name, target.environment.name) : service.key === "capacityProviderRunner" ? deriveRailwayCapacityProviderRunnerVolumeName(target.service.name, target.environment.name) : deriveRailwayWorkerRunnerVolumeName(target.service.name, target.environment.name);
|
|
1317
|
-
const volumes = await listRailwayVolumes({
|
|
1318
|
-
projectId: target.project.id,
|
|
1319
|
-
env: effectiveEnv,
|
|
1320
|
-
fetchImpl
|
|
1321
|
-
});
|
|
1322
|
-
const volume = volumes.find(
|
|
1323
|
-
(candidate) => candidate.name === expectedVolumeName && candidate.instances.some((entry) => entry.serviceId === target.service.id && entry.environmentId === target.environment.id && entry.mountPath === expectedVolumeMountPath)
|
|
1324
|
-
) ?? null;
|
|
1325
|
-
checks.push({
|
|
1326
|
-
type: "service-volume",
|
|
1327
|
-
service: service.key,
|
|
1328
|
-
serviceName: target.service.name,
|
|
1329
|
-
serviceId: target.service.id,
|
|
1330
|
-
projectId: target.project.id,
|
|
1331
|
-
environment: target.environment.name,
|
|
1332
|
-
environmentId: target.environment.id,
|
|
1333
|
-
volumeName: expectedVolumeName,
|
|
1334
|
-
mountPath: expectedVolumeMountPath,
|
|
1335
|
-
ok: Boolean(volume),
|
|
1336
|
-
status: volume ? "checked" : "missing",
|
|
1337
|
-
observed: volume ? {
|
|
1338
|
-
id: volume.id,
|
|
1339
|
-
name: volume.name,
|
|
1340
|
-
instances: volume.instances
|
|
1341
|
-
} : null,
|
|
1342
|
-
message: volume ? void 0 : `Railway volume ${expectedVolumeName} is missing or is not mounted on ${target.service.name} at ${expectedVolumeMountPath}.`
|
|
1343
|
-
});
|
|
1344
|
-
}
|
|
1345
|
-
}
|
|
1346
|
-
const schedules = await verifyRailwayScheduledJobs(tenantRoot, scope, {
|
|
1347
|
-
fetchImpl,
|
|
1348
|
-
apiToken: effectiveApiToken,
|
|
1349
|
-
apiUrl: effectiveApiUrl,
|
|
1350
|
-
env: effectiveEnv
|
|
1351
|
-
});
|
|
1352
|
-
for (const check of schedules.checks ?? []) {
|
|
1353
|
-
checks.push({
|
|
1354
|
-
type: "schedule",
|
|
1355
|
-
...check
|
|
1356
|
-
});
|
|
1357
|
-
}
|
|
1358
|
-
if (settleDeployments) {
|
|
1359
|
-
const settled = await waitForRailwayManagedDeploymentsSettled(tenantRoot, scope, {
|
|
1360
|
-
services: deploymentStatusServices.length > 0 ? deploymentStatusServices : services,
|
|
1361
|
-
env: effectiveEnv,
|
|
1362
|
-
fetchImpl,
|
|
1363
|
-
timeoutMs: settleTimeoutMs,
|
|
1364
|
-
pollMs: settlePollMs,
|
|
1365
|
-
onProgress
|
|
1366
|
-
});
|
|
1367
|
-
for (const check of settled.checks ?? []) {
|
|
1368
|
-
checks.push(check);
|
|
1369
|
-
}
|
|
1370
|
-
}
|
|
1371
|
-
return {
|
|
1372
|
-
ok: checks.every((entry) => entry.ok === true || entry.skipped === true),
|
|
1373
|
-
checks
|
|
1374
|
-
};
|
|
1375
|
-
}
|
|
1376
|
-
function railwayPhaseTimeoutMs(env = process.env, phase = "default") {
|
|
1377
|
-
const configured = Number.parseInt(configuredEnvValue(env, `TREESEED_RAILWAY_${String(phase).toUpperCase().replace(/[^A-Z0-9]+/gu, "_")}_TIMEOUT_MS`), 10);
|
|
1378
|
-
if (Number.isFinite(configured) && configured > 0) {
|
|
1379
|
-
return configured;
|
|
1380
|
-
}
|
|
1381
|
-
const defaultConfigured = Number.parseInt(configuredEnvValue(env, "TREESEED_RAILWAY_PHASE_TIMEOUT_MS"), 10);
|
|
1382
|
-
if (Number.isFinite(defaultConfigured) && defaultConfigured > 0) {
|
|
1383
|
-
return defaultConfigured;
|
|
1384
|
-
}
|
|
1385
|
-
if (phase === "sync_runtime_config") {
|
|
1386
|
-
return 6e5;
|
|
1387
|
-
}
|
|
1388
|
-
return phase === "deploy" ? 3e5 : 18e4;
|
|
1389
|
-
}
|
|
1390
|
-
async function withRailwayPhaseTimeout(run, timeoutMs, message) {
|
|
1391
|
-
let timer = null;
|
|
1392
|
-
try {
|
|
1393
|
-
return await Promise.race([
|
|
1394
|
-
Promise.resolve().then(run),
|
|
1395
|
-
new Promise((_, reject) => {
|
|
1396
|
-
timer = setTimeout(() => reject(new Error(message)), timeoutMs);
|
|
1397
|
-
})
|
|
1398
|
-
]);
|
|
1399
|
-
} finally {
|
|
1400
|
-
if (timer) {
|
|
1401
|
-
clearTimeout(timer);
|
|
1402
|
-
}
|
|
1403
|
-
}
|
|
1404
|
-
}
|
|
1405
|
-
function shouldRunRailwayPredeployBuild(env = process.env) {
|
|
1406
|
-
const configured = configuredEnvValue(env, "TREESEED_RAILWAY_PREDEPLOY_BUILD");
|
|
1407
|
-
if (configured === "1" || configured === "true") {
|
|
1408
|
-
return true;
|
|
1409
|
-
}
|
|
1410
|
-
if (configured === "0" || configured === "false") {
|
|
1411
|
-
return false;
|
|
1412
|
-
}
|
|
1413
|
-
return configuredEnvValue(env, "CI") !== "true";
|
|
1414
|
-
}
|
|
1415
|
-
async function syncRailwayApiDeviceLoginVariables(service, env, write, prefix, fetchImpl = fetch) {
|
|
1416
|
-
if (service.key !== "api") {
|
|
1417
|
-
return null;
|
|
1418
|
-
}
|
|
1419
|
-
const projectId = configuredEnvValue(service, "projectId");
|
|
1420
|
-
const environmentId = configuredEnvValue(service, "environmentId");
|
|
1421
|
-
const serviceId = configuredEnvValue(service, "serviceId");
|
|
1422
|
-
if (!projectId || !environmentId || !serviceId) {
|
|
1423
|
-
return null;
|
|
1424
|
-
}
|
|
1425
|
-
const variables = Object.fromEntries(
|
|
1426
|
-
[
|
|
1427
|
-
"TREESEED_API_AUTH_APPROVAL_BASE_URL",
|
|
1428
|
-
"TREESEED_SITE_URL",
|
|
1429
|
-
"TREESEED_BETTER_AUTH_URL"
|
|
1430
|
-
].map((key) => [key, configuredEnvValue(env, key)]).filter(([, value]) => value)
|
|
1431
|
-
);
|
|
1432
|
-
if (Object.keys(variables).length === 0) {
|
|
1433
|
-
return null;
|
|
1434
|
-
}
|
|
1435
|
-
await upsertRailwayVariables({
|
|
1436
|
-
projectId,
|
|
1437
|
-
environmentId,
|
|
1438
|
-
serviceId,
|
|
1439
|
-
variables,
|
|
1440
|
-
env,
|
|
1441
|
-
fetchImpl
|
|
1442
|
-
});
|
|
1443
|
-
write ? write(`[${prefix.scope}][${prefix.system}][${prefix.task}][vars] Synced device login approval URL variables for ${service.serviceName ?? serviceId}.`, "stdout") : null;
|
|
1444
|
-
return { variables: Object.keys(variables) };
|
|
1445
|
-
}
|
|
1446
|
-
async function resolveRailwayDeployProjectContext(service, { env = process.env, fetchImpl = fetch } = {}) {
|
|
1447
|
-
if (service.projectId) {
|
|
1448
|
-
return service;
|
|
1449
|
-
}
|
|
1450
|
-
const workspace = await resolveRailwayWorkspaceContext({ env, fetchImpl });
|
|
1451
|
-
const { project } = await ensureRailwayProject({
|
|
1452
|
-
projectId: service.projectId,
|
|
1453
|
-
projectName: service.projectName,
|
|
1454
|
-
defaultEnvironmentName: service.railwayEnvironment,
|
|
1455
|
-
env,
|
|
1456
|
-
workspace: workspace.id,
|
|
1457
|
-
fetchImpl
|
|
1458
|
-
});
|
|
1459
|
-
return {
|
|
1460
|
-
...service,
|
|
1461
|
-
projectId: project.id,
|
|
1462
|
-
projectName: project.name ?? service.projectName
|
|
1463
|
-
};
|
|
1464
|
-
}
|
|
1465
|
-
async function syncRailwayServiceRuntimeConfigurationAfterDeploy(tenantRoot, service, { env = process.env, writePhase = null, fetchImpl = fetch } = {}) {
|
|
1466
|
-
const writeSyncPhase = (stage, message) => {
|
|
1467
|
-
if (typeof writePhase === "function") {
|
|
1468
|
-
writePhase(`sync-runtime-config:${stage}`, message);
|
|
1469
|
-
}
|
|
1470
|
-
};
|
|
1471
|
-
const wantsInstanceConfig = service.buildCommand || service.startCommand || !(service.imageRef || service.sourceMode === "image") && service.rootDir || service.healthcheckPath || service.healthcheckTimeoutSeconds !== null || service.healthcheckTimeoutSeconds !== void 0 || service.healthcheckIntervalSeconds !== null || service.healthcheckIntervalSeconds !== void 0 || service.restartPolicy || service.runtimeMode;
|
|
1472
|
-
const wantsRunnerVolume = service.key === "workerRunner" || service.key === "operationsRunner" || service.key === "capacityProviderRunner";
|
|
1473
|
-
if (!wantsInstanceConfig && !wantsRunnerVolume) {
|
|
1474
|
-
writeSyncPhase("skip", "No runtime configuration changes requested.");
|
|
1475
|
-
return null;
|
|
1476
|
-
}
|
|
1477
|
-
writeSyncPhase("workspace", "Resolving Railway workspace.");
|
|
1478
|
-
const workspace = await resolveRailwayWorkspaceContext({ env, fetchImpl });
|
|
1479
|
-
let project = null;
|
|
1480
|
-
if (service.projectId) {
|
|
1481
|
-
writeSyncPhase("project", `Resolving Railway project ${service.projectName ?? service.projectId}.`);
|
|
1482
|
-
project = await ensureRailwayProject({
|
|
1483
|
-
projectId: service.projectId,
|
|
1484
|
-
projectName: service.projectName,
|
|
1485
|
-
defaultEnvironmentName: service.railwayEnvironment,
|
|
1486
|
-
env,
|
|
1487
|
-
workspace: workspace.id,
|
|
1488
|
-
fetchImpl
|
|
1489
|
-
}).then((result) => result.project);
|
|
1490
|
-
} else {
|
|
1491
|
-
writeSyncPhase("project", `Looking up Railway project ${service.projectName}.`);
|
|
1492
|
-
const projects = await listRailwayProjects({ env, workspaceId: workspace.id, fetchImpl });
|
|
1493
|
-
project = projects.find((entry) => entry.name === service.projectName) ?? null;
|
|
1494
|
-
if (!project) {
|
|
1495
|
-
writeSyncPhase("project", `Creating Railway project ${service.projectName}.`);
|
|
1496
|
-
project = await ensureRailwayProject({
|
|
1497
|
-
projectName: service.projectName,
|
|
1498
|
-
defaultEnvironmentName: service.railwayEnvironment,
|
|
1499
|
-
env,
|
|
1500
|
-
workspace: workspace.id,
|
|
1501
|
-
fetchImpl
|
|
1502
|
-
}).then((result) => result.project);
|
|
1503
|
-
}
|
|
1504
|
-
}
|
|
1505
|
-
const environmentName = normalizeRailwayEnvironmentName(service.railwayEnvironment);
|
|
1506
|
-
let environment = project.environments.find((entry) => entry.name === environmentName || entry.id === environmentName) ?? null;
|
|
1507
|
-
if (!environment) {
|
|
1508
|
-
writeSyncPhase("environment", `Creating Railway environment ${environmentName}.`);
|
|
1509
|
-
environment = await ensureRailwayEnvironment({
|
|
1510
|
-
projectId: project.id,
|
|
1511
|
-
environmentName,
|
|
1512
|
-
env,
|
|
1513
|
-
fetchImpl
|
|
1514
|
-
}).then((result) => result.environment);
|
|
1515
|
-
}
|
|
1516
|
-
let railwayService = project.services.find((entry) => entry.id === service.serviceId || entry.name === service.serviceName) ?? null;
|
|
1517
|
-
if (!railwayService) {
|
|
1518
|
-
writeSyncPhase("service", `Creating Railway service ${service.serviceName ?? service.key}.`);
|
|
1519
|
-
railwayService = await ensureRailwayService({
|
|
1520
|
-
projectId: project.id,
|
|
1521
|
-
serviceId: service.serviceId,
|
|
1522
|
-
serviceName: service.serviceName,
|
|
1523
|
-
environmentId: environment.id,
|
|
1524
|
-
imageRef: service.imageRef,
|
|
1525
|
-
sourceRepo: service.sourceRepo,
|
|
1526
|
-
sourceBranch: service.sourceBranch,
|
|
1527
|
-
env,
|
|
1528
|
-
fetchImpl
|
|
1529
|
-
}).then((result) => result.service);
|
|
1530
|
-
} else if (service.imageRef || service.sourceRepo) {
|
|
1531
|
-
railwayService = await ensureRailwayService({
|
|
1532
|
-
projectId: project.id,
|
|
1533
|
-
serviceId: service.serviceId,
|
|
1534
|
-
serviceName: service.serviceName,
|
|
1535
|
-
environmentId: environment.id,
|
|
1536
|
-
imageRef: service.imageRef,
|
|
1537
|
-
sourceRepo: service.sourceRepo,
|
|
1538
|
-
sourceBranch: service.sourceBranch,
|
|
1539
|
-
env,
|
|
1540
|
-
fetchImpl
|
|
1541
|
-
}).then((result) => result.service);
|
|
1542
|
-
}
|
|
1543
|
-
if (wantsInstanceConfig) {
|
|
1544
|
-
writeSyncPhase("instance", "Ensuring Railway service instance configuration.");
|
|
1545
|
-
}
|
|
1546
|
-
const runtimeConfiguration = wantsInstanceConfig ? await ensureRailwayServiceInstanceConfiguration({
|
|
1547
|
-
serviceId: railwayService.id,
|
|
1548
|
-
environmentId: environment.id,
|
|
1549
|
-
buildCommand: service.buildCommand,
|
|
1550
|
-
startCommand: railwayServiceRuntimeStartCommand(service),
|
|
1551
|
-
cronSchedule: service.schedule?.[0] ?? null,
|
|
1552
|
-
rootDirectory: service.imageRef || service.sourceMode === "image" ? null : service.sourceRootDirectory ?? ".",
|
|
1553
|
-
healthcheckPath: service.healthcheckPath,
|
|
1554
|
-
healthcheckTimeoutSeconds: service.healthcheckTimeoutSeconds,
|
|
1555
|
-
healthcheckIntervalSeconds: service.healthcheckIntervalSeconds,
|
|
1556
|
-
restartPolicy: service.restartPolicy,
|
|
1557
|
-
runtimeMode: service.runtimeMode,
|
|
1558
|
-
deploymentRegion: wantsRunnerVolume ? configuredEnvValue(env, "TREESEED_RAILWAY_STATEFUL_REGION") || "us-west2" : null,
|
|
1559
|
-
env,
|
|
1560
|
-
fetchImpl
|
|
1561
|
-
}) : null;
|
|
1562
|
-
writeSyncPhase("variables", "Upserting Railway runtime variables.");
|
|
1563
|
-
await upsertRailwayVariables({
|
|
1564
|
-
projectId: project.id,
|
|
1565
|
-
environmentId: environment.id,
|
|
1566
|
-
serviceId: railwayService.id,
|
|
1567
|
-
variables: {
|
|
1568
|
-
TREESEED_SKIP_PACKAGE_PREPARE: "1",
|
|
1569
|
-
...["api", "operationsRunner"].includes(service.key) ? {
|
|
1570
|
-
...configuredEnvValue(env, "TREESEED_PLATFORM_RUNNER_SECRET") ? {
|
|
1571
|
-
TREESEED_PLATFORM_RUNNER_SECRET: configuredEnvValue(env, "TREESEED_PLATFORM_RUNNER_SECRET")
|
|
1572
|
-
} : {},
|
|
1573
|
-
...configuredEnvValue(env, "TREESEED_CREDENTIAL_SESSION_SECRET") ? {
|
|
1574
|
-
TREESEED_CREDENTIAL_SESSION_SECRET: configuredEnvValue(env, "TREESEED_CREDENTIAL_SESSION_SECRET")
|
|
1575
|
-
} : {},
|
|
1576
|
-
...configuredEnvValue(env, "TREESEED_WEB_SERVICE_SECRET") ? {
|
|
1577
|
-
TREESEED_WEB_SERVICE_SECRET: configuredEnvValue(env, "TREESEED_WEB_SERVICE_SECRET")
|
|
1578
|
-
} : {}
|
|
1579
|
-
} : {},
|
|
1580
|
-
...service.sourceMode === "git" ? {
|
|
1581
|
-
TREESEED_DEPLOY_SOURCE_MODE: "git",
|
|
1582
|
-
...service.sourceRepo ? { TREESEED_DEPLOY_SOURCE_REPOSITORY: service.sourceRepo } : {},
|
|
1583
|
-
...service.sourceBranch ? { TREESEED_DEPLOY_SOURCE_BRANCH: service.sourceBranch } : {},
|
|
1584
|
-
...service.sourceCommit ? { TREESEED_DEPLOY_SOURCE_COMMIT: service.sourceCommit } : {}
|
|
1585
|
-
} : {
|
|
1586
|
-
TREESEED_DEPLOY_SOURCE_MODE: "image"
|
|
1587
|
-
},
|
|
1588
|
-
...service.key === "operationsRunner" ? {
|
|
1589
|
-
NIXPACKS_APT_PKGS: "git",
|
|
1590
|
-
NIXPACKS_PKGS: "git",
|
|
1591
|
-
TREESEED_PLATFORM_RUNNER_ID: service.runnerId ?? railwayService.name,
|
|
1592
|
-
TREESEED_PLATFORM_RUNNER_DATA_DIR: service.volumeMountPath ?? WORKER_RUNNER_VOLUME_MOUNT_PATH,
|
|
1593
|
-
TREESEED_PLATFORM_RUNNER_ENVIRONMENT: normalizeScope(service.scope) === "prod" ? "production" : normalizeScope(service.scope),
|
|
1594
|
-
TREESEED_MANAGER_ID: normalizeScope(service.scope),
|
|
1595
|
-
...configuredEnvValue(env, "TREESEED_RAILWAY_API_TOKEN") ? { TREESEED_RAILWAY_API_TOKEN: configuredEnvValue(env, "TREESEED_RAILWAY_API_TOKEN") } : {},
|
|
1596
|
-
...configuredEnvValue(env, "TREESEED_RAILWAY_WORKSPACE") ? { TREESEED_RAILWAY_WORKSPACE: configuredEnvValue(env, "TREESEED_RAILWAY_WORKSPACE") } : {},
|
|
1597
|
-
...configuredEnvValue(env, "TREESEED_API_BASE_URL") || configuredEnvValue(env, "TREESEED_URL") ? {
|
|
1598
|
-
TREESEED_API_BASE_URL: configuredEnvValue(env, "TREESEED_API_BASE_URL") || configuredEnvValue(env, "TREESEED_URL")
|
|
1599
|
-
} : {}
|
|
1600
|
-
} : {},
|
|
1601
|
-
...String(service.key).startsWith("capacityProvider") ? {
|
|
1602
|
-
TREESEED_PROVIDER_ENVIRONMENT: normalizeScope(service.scope) === "prod" ? "production" : normalizeScope(service.scope),
|
|
1603
|
-
TREESEED_MANAGER_ID: normalizeScope(service.scope),
|
|
1604
|
-
TREESEED_MARKET_ID: normalizeScope(service.scope),
|
|
1605
|
-
TREESEED_PROVIDER_ROLE: service.key === "capacityProviderManager" ? "manager" : "runner",
|
|
1606
|
-
...service.key === "capacityProviderRunner" ? {
|
|
1607
|
-
TREESEED_PROVIDER_DATA_DIR: service.volumeMountPath ?? WORKER_RUNNER_VOLUME_MOUNT_PATH,
|
|
1608
|
-
TREESEED_PROVIDER_RUNNER_ID: service.runnerId ?? railwayService.name
|
|
1609
|
-
} : {},
|
|
1610
|
-
...configuredEnvValue(env, "TREESEED_MARKET_URL") ? { TREESEED_MARKET_URL: configuredEnvValue(env, "TREESEED_MARKET_URL") } : {},
|
|
1611
|
-
...configuredEnvValue(env, "TREESEED_CAPACITY_PROVIDER_API_KEY") ? { TREESEED_CAPACITY_PROVIDER_API_KEY: configuredEnvValue(env, "TREESEED_CAPACITY_PROVIDER_API_KEY") } : {},
|
|
1612
|
-
...configuredEnvValue(env, "TREESEED_CODEX_AUTH_JSON_B64") ? { TREESEED_CODEX_AUTH_JSON_B64: configuredEnvValue(env, "TREESEED_CODEX_AUTH_JSON_B64") } : {}
|
|
1613
|
-
} : {}
|
|
1614
|
-
},
|
|
1615
|
-
env,
|
|
1616
|
-
fetchImpl
|
|
1617
|
-
});
|
|
1618
|
-
const volumeMountPath = service.volumeMountPath ?? service.runnerPool?.volumeMountPath ?? WORKER_RUNNER_VOLUME_MOUNT_PATH;
|
|
1619
|
-
if (wantsRunnerVolume) {
|
|
1620
|
-
writeSyncPhase("volume", `Ensuring Railway volume mounted at ${volumeMountPath}.`);
|
|
1621
|
-
}
|
|
1622
|
-
const volumeConfiguration = wantsRunnerVolume ? await ensureRailwayServiceVolume({
|
|
1623
|
-
projectId: project.id,
|
|
1624
|
-
environmentId: environment.id,
|
|
1625
|
-
serviceId: railwayService.id,
|
|
1626
|
-
name: service.key === "operationsRunner" ? deriveRailwayOperationsRunnerVolumeName(railwayService.name, environment.name) : service.key === "capacityProviderRunner" ? deriveRailwayCapacityProviderRunnerVolumeName(railwayService.name, environment.name) : deriveRailwayWorkerRunnerVolumeName(railwayService.name, environment.name),
|
|
1627
|
-
mountPath: volumeMountPath,
|
|
1628
|
-
env,
|
|
1629
|
-
fetchImpl
|
|
1630
|
-
}) : null;
|
|
1631
|
-
if (wantsRunnerVolume) {
|
|
1632
|
-
if (service.key === "workerRunner") {
|
|
1633
|
-
writeSyncPhase("volume-vars", "Upserting Railway worker volume variables.");
|
|
1634
|
-
await upsertRailwayVariables({
|
|
1635
|
-
projectId: project.id,
|
|
1636
|
-
environmentId: environment.id,
|
|
1637
|
-
serviceId: railwayService.id,
|
|
1638
|
-
variables: {
|
|
1639
|
-
TREESEED_RUNNER_SERVICE_NAME: railwayService.name,
|
|
1640
|
-
TREESEED_RUNNER_VOLUME_ROOT: volumeMountPath,
|
|
1641
|
-
TREESEED_RUNNER_VOLUME_NAME: volumeConfiguration?.volume.name ?? deriveRailwayWorkerRunnerVolumeName(railwayService.name, environment.name),
|
|
1642
|
-
TREESEED_WORKER_IDLE_EXIT_MS: configuredEnvValue(env, "TREESEED_WORKER_IDLE_EXIT_MS") || "60000",
|
|
1643
|
-
...volumeConfiguration?.volume.id ? { TREESEED_RUNNER_VOLUME_ID: volumeConfiguration.volume.id } : {}
|
|
1644
|
-
},
|
|
1645
|
-
env,
|
|
1646
|
-
fetchImpl
|
|
1647
|
-
});
|
|
1648
|
-
}
|
|
1649
|
-
}
|
|
1650
|
-
writeSyncPhase("done", "Runtime configuration is synchronized.");
|
|
1651
|
-
return {
|
|
1652
|
-
projectId: project.id,
|
|
1653
|
-
projectName: project.name ?? service.projectName ?? null,
|
|
1654
|
-
environmentId: environment.id,
|
|
1655
|
-
environmentName: environment.name ?? environmentName,
|
|
1656
|
-
serviceId: railwayService.id,
|
|
1657
|
-
serviceName: railwayService.name ?? service.serviceName ?? null,
|
|
1658
|
-
instance: runtimeConfiguration?.instance ?? null,
|
|
1659
|
-
updated: Boolean(runtimeConfiguration?.updated || volumeConfiguration?.updated || volumeConfiguration?.created),
|
|
1660
|
-
volume: volumeConfiguration ? {
|
|
1661
|
-
id: volumeConfiguration.volume.id,
|
|
1662
|
-
name: volumeConfiguration.volume.name,
|
|
1663
|
-
mountPath: volumeConfiguration.instance?.mountPath ?? volumeMountPath,
|
|
1664
|
-
created: volumeConfiguration.created,
|
|
1665
|
-
updated: volumeConfiguration.updated
|
|
1666
|
-
} : null
|
|
1667
|
-
};
|
|
1668
|
-
}
|
|
1669
|
-
async function deployRailwayService(tenantRoot, service, {
|
|
1670
|
-
planOnly = false,
|
|
1671
|
-
write,
|
|
1672
|
-
prefix,
|
|
1673
|
-
env = process.env,
|
|
1674
|
-
fetchImpl = fetch
|
|
1675
|
-
} = {}) {
|
|
1676
|
-
const timings = [];
|
|
1677
|
-
if (planOnly) {
|
|
1678
|
-
return {
|
|
1679
|
-
service: service.key,
|
|
1680
|
-
status: "planned",
|
|
1681
|
-
command: "railway-cli service redeploy",
|
|
1682
|
-
cwd: service.rootDir,
|
|
1683
|
-
publicBaseUrl: service.publicBaseUrl,
|
|
1684
|
-
timings,
|
|
1685
|
-
transport: {
|
|
1686
|
-
railway: {
|
|
1687
|
-
reconcile: "api",
|
|
1688
|
-
deploy: railwayDeployTransport(env)
|
|
1689
|
-
}
|
|
1690
|
-
}
|
|
1691
|
-
};
|
|
1692
|
-
}
|
|
1693
|
-
const deployService = await timedRailwayPhase(timings, "railway:resolve-context", () => resolveRailwayDeployProjectContext(service, { env, fetchImpl }), {
|
|
1694
|
-
service: service.key
|
|
1695
|
-
});
|
|
1696
|
-
const commandEnv = buildRailwayCommandEnv({ ...process.env, ...env });
|
|
1697
|
-
const deployTransport = railwayDeployTransport(commandEnv);
|
|
1698
|
-
const taskPrefix = prefix ?? {
|
|
1699
|
-
scope: normalizeScope(deployService.scope ?? deployService.railwayEnvironment ?? "railway"),
|
|
1700
|
-
system: deployService.key === "api" ? "api" : "agents",
|
|
1701
|
-
task: `${deployService.key}-railway-deploy`,
|
|
1702
|
-
stage: "deploy"
|
|
1703
|
-
};
|
|
1704
|
-
const writePhase = (stage, message) => {
|
|
1705
|
-
write ? write(`[${taskPrefix.scope}][${taskPrefix.system}][${taskPrefix.task}][${stage}] ${message}`, "stdout") : null;
|
|
1706
|
-
};
|
|
1707
|
-
writePhase("resolve-context", `Resolved Railway service ${deployService.serviceName ?? deployService.serviceId ?? deployService.key}.`);
|
|
1708
|
-
writePhase("sync-runtime-config", "Syncing Railway runtime configuration.");
|
|
1709
|
-
const runtimeConfiguration = await timedRailwayPhase(timings, "railway:sync-runtime-config", () => withRailwayPhaseTimeout(
|
|
1710
|
-
() => syncRailwayServiceRuntimeConfigurationAfterDeploy(tenantRoot, deployService, { env: commandEnv, writePhase, fetchImpl }),
|
|
1711
|
-
railwayPhaseTimeoutMs(commandEnv, "sync_runtime_config"),
|
|
1712
|
-
`Railway runtime configuration sync timed out for ${deployService.serviceName ?? deployService.key}.`
|
|
1713
|
-
), { service: deployService.key });
|
|
1714
|
-
const cliDeployService = {
|
|
1715
|
-
...deployService,
|
|
1716
|
-
projectId: runtimeConfiguration?.projectId ?? deployService.projectId,
|
|
1717
|
-
projectName: runtimeConfiguration?.projectName ?? deployService.projectName,
|
|
1718
|
-
environmentId: runtimeConfiguration?.environmentId ?? deployService.environmentId,
|
|
1719
|
-
serviceId: runtimeConfiguration?.serviceId ?? deployService.serviceId,
|
|
1720
|
-
serviceName: runtimeConfiguration?.serviceName ?? deployService.serviceName,
|
|
1721
|
-
railwayEnvironment: runtimeConfiguration?.environmentName ?? runtimeConfiguration?.environmentId ?? deployService.railwayEnvironment
|
|
1722
|
-
};
|
|
1723
|
-
writePhase("device-login-vars", "Syncing Railway device-login variables.");
|
|
1724
|
-
await timedRailwayPhase(timings, "railway:device-login-vars", () => withRailwayPhaseTimeout(
|
|
1725
|
-
() => syncRailwayApiDeviceLoginVariables(cliDeployService, commandEnv, write, taskPrefix, fetchImpl),
|
|
1726
|
-
railwayPhaseTimeoutMs(commandEnv, "device_login_vars"),
|
|
1727
|
-
`Railway device-login variable sync timed out for ${cliDeployService.serviceName ?? cliDeployService.key}.`
|
|
1728
|
-
), {
|
|
1729
|
-
service: cliDeployService.key
|
|
1730
|
-
});
|
|
1731
|
-
if (deployService.buildCommand && !deployService.imageRef && shouldRunRailwayPredeployBuild(commandEnv)) {
|
|
1732
|
-
const buildResult = await timedRailwayPhase(timings, "railway:predeploy-build", () => runPrefixedCommand("bash", ["-lc", deployService.buildCommand], {
|
|
1733
|
-
cwd: deployService.rootDir,
|
|
1734
|
-
env: commandEnv,
|
|
1735
|
-
write,
|
|
1736
|
-
prefix: { ...taskPrefix, stage: "build" }
|
|
1737
|
-
}), { service: deployService.key });
|
|
1738
|
-
if (buildResult.status !== 0) {
|
|
1739
|
-
throw new Error(`Railway ${deployService.key} build command failed.`);
|
|
1740
|
-
}
|
|
1741
|
-
}
|
|
1742
|
-
if (deployTransport !== "cli-fallback") {
|
|
1743
|
-
writePhase("deploy", `Deploying Railway service ${cliDeployService.serviceName ?? cliDeployService.serviceId ?? cliDeployService.key} through the managed Railway CLI.`);
|
|
1744
|
-
const apiDeploy = await timedRailwayPhase(timings, "railway:api-deploy", () => withRailwayPhaseTimeout(
|
|
1745
|
-
() => deployRailwayServiceInstance({
|
|
1746
|
-
projectId: cliDeployService.projectId,
|
|
1747
|
-
serviceId: cliDeployService.serviceId,
|
|
1748
|
-
environmentId: cliDeployService.environmentId,
|
|
1749
|
-
env: commandEnv,
|
|
1750
|
-
fetchImpl
|
|
1751
|
-
}),
|
|
1752
|
-
railwayPhaseTimeoutMs(commandEnv, "deploy"),
|
|
1753
|
-
`Railway API deploy phase timed out for ${cliDeployService.serviceName ?? cliDeployService.key}.`
|
|
1754
|
-
), { service: cliDeployService.key });
|
|
1755
|
-
return {
|
|
1756
|
-
service: deployService.key,
|
|
1757
|
-
status: "deployed",
|
|
1758
|
-
command: "railway-cli service redeploy",
|
|
1759
|
-
cwd: deployService.rootDir,
|
|
1760
|
-
publicBaseUrl: deployService.publicBaseUrl,
|
|
1761
|
-
timings,
|
|
1762
|
-
deploymentId: apiDeploy.deploymentId,
|
|
1763
|
-
transport: {
|
|
1764
|
-
railway: {
|
|
1765
|
-
reconcile: "api",
|
|
1766
|
-
deploy: "api"
|
|
1767
|
-
}
|
|
1768
|
-
},
|
|
1769
|
-
runtimeConfiguration: runtimeConfiguration ? {
|
|
1770
|
-
updated: runtimeConfiguration.updated,
|
|
1771
|
-
healthcheckPath: runtimeConfiguration.instance?.healthcheckPath ?? null,
|
|
1772
|
-
healthcheckTimeoutSeconds: runtimeConfiguration.instance?.healthcheckTimeoutSeconds ?? null,
|
|
1773
|
-
runtimeMode: runtimeConfiguration.instance?.runtimeMode ?? null,
|
|
1774
|
-
volume: runtimeConfiguration.volume ?? null
|
|
1775
|
-
} : null
|
|
1776
|
-
};
|
|
1777
|
-
}
|
|
1778
|
-
throw new Error(`Railway deployment for ${cliDeployService.serviceName ?? cliDeployService.serviceId ?? cliDeployService.key} requires Railway API deployment support. CLI deploy fallback has been removed.`);
|
|
1779
|
-
}
|
|
1780
|
-
export {
|
|
1781
|
-
buildRailwayCommandEnv,
|
|
1782
|
-
collectRailwayDeploymentStatusChecks,
|
|
1783
|
-
configuredRailwayScheduledJobs,
|
|
1784
|
-
configuredRailwayServices,
|
|
1785
|
-
deployRailwayService,
|
|
1786
|
-
deriveRailwayCapacityProviderRunnerServiceName,
|
|
1787
|
-
deriveRailwayCapacityProviderRunnerVolumeName,
|
|
1788
|
-
deriveRailwayOperationsRunnerServiceName,
|
|
1789
|
-
deriveRailwayOperationsRunnerVolumeName,
|
|
1790
|
-
deriveRailwayWorkerRunnerServiceName,
|
|
1791
|
-
deriveRailwayWorkerRunnerVolumeName,
|
|
1792
|
-
ensureRailwayScheduledJobs,
|
|
1793
|
-
findStaleTreeseedOperationsRunnerResources,
|
|
1794
|
-
isTreeseedOperationsRunnerResourceName,
|
|
1795
|
-
isUsableRailwayToken,
|
|
1796
|
-
obsoleteUnqualifiedRailwayResourceNames,
|
|
1797
|
-
parseRailwayJsonOutput,
|
|
1798
|
-
railwayObsoleteAliasCleanupPolicy,
|
|
1799
|
-
railwayServiceRuntimeStartCommand,
|
|
1800
|
-
resolveRailwayAuthToken,
|
|
1801
|
-
resolveRailwayDeploymentProfile,
|
|
1802
|
-
shouldRunRailwayPredeployBuild,
|
|
1803
|
-
validateRailwayDeployPrerequisites,
|
|
1804
|
-
validateRailwayServiceConfiguration,
|
|
1805
|
-
verifyRailwayManagedResources,
|
|
1806
|
-
verifyRailwayScheduledJobs,
|
|
1807
|
-
waitForRailwayManagedDeploymentsSettled
|
|
1808
|
-
};
|