@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.
Files changed (1108) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +33 -359
  3. package/dist/accounts/account-contracts.d.ts +170 -0
  4. package/dist/accounts/account-contracts.js +33 -0
  5. package/dist/agent-capacity/allocation.d.ts +186 -0
  6. package/dist/agent-capacity/allocation.js +226 -0
  7. package/dist/agent-capacity/artifact-mutation-receipt.d.ts +49 -0
  8. package/dist/agent-capacity/artifact-mutation-receipt.js +36 -0
  9. package/dist/agent-capacity/artifacts.d.ts +107 -0
  10. package/dist/agent-capacity/artifacts.js +39 -0
  11. package/dist/agent-capacity/authority/agent-authority-presets.d.ts +13 -0
  12. package/dist/agent-capacity/authority/agent-authority-presets.js +106 -0
  13. package/dist/agent-capacity/contracts/capacity/assignments/assignment-records.d.ts +269 -0
  14. package/dist/agent-capacity/contracts/capacity/assignments/assignment-records.js +10 -0
  15. package/dist/agent-capacity/contracts/capacity/communication/communication-records.d.ts +101 -0
  16. package/dist/agent-capacity/contracts/capacity/communication/communication-records.js +9 -0
  17. package/dist/agent-capacity/contracts/capacity/providers/supply-policy.d.ts +36 -0
  18. package/dist/agent-capacity/contracts/capacity/providers/supply-policy.js +4 -0
  19. package/dist/agent-capacity/contracts/capacity/workdays/workday-records.d.ts +188 -0
  20. package/dist/agent-capacity/contracts/configuration/configuration.d.ts +11 -0
  21. package/dist/agent-capacity/contracts/configuration/configuration.js +20 -0
  22. package/dist/agent-capacity/contracts/operations/research-workflow.d.ts +59 -0
  23. package/dist/agent-capacity/contracts/operations/research-workflow.js +16 -0
  24. package/dist/agent-capacity/contracts/operations/workflow-promotion.d.ts +24 -0
  25. package/dist/agent-capacity/contracts/projects/agents/project-agent-class.d.ts +37 -0
  26. package/dist/agent-capacity/contracts/runtime/runtime-observability.d.ts +335 -0
  27. package/dist/agent-capacity/contracts/support/agent-atlas.d.ts +185 -0
  28. package/dist/agent-capacity/contracts/support/agent-atlas.js +47 -0
  29. package/dist/agent-capacity/contracts/support/agent-lab-monitoring.d.ts +96 -0
  30. package/dist/agent-capacity/contracts/support/agent-lab-monitoring.js +14 -0
  31. package/dist/agent-capacity/contracts/support/authority/execution-mode.d.ts +10 -0
  32. package/dist/agent-capacity/contracts/support/authority/execution-mode.js +17 -0
  33. package/dist/agent-capacity/contracts/support/decision-work.d.ts +251 -0
  34. package/dist/agent-capacity/contracts/support/failure-records.d.ts +9 -0
  35. package/dist/agent-capacity/contracts/support/failure-records.js +0 -0
  36. package/dist/agent-capacity/contracts/support/financial-records.d.ts +124 -0
  37. package/dist/agent-capacity/contracts/support/financial-records.js +0 -0
  38. package/dist/agent-capacity/contracts/support/planning-records.d.ts +121 -0
  39. package/dist/agent-capacity/contracts/support/planning-records.js +0 -0
  40. package/dist/agent-capacity/contracts/support/research-citation.d.ts +15 -0
  41. package/dist/agent-capacity/contracts/support/research-citation.js +0 -0
  42. package/dist/agent-capacity/contracts/support/research-source-policy.d.ts +8 -0
  43. package/dist/agent-capacity/contracts/support/research-source-policy.js +0 -0
  44. package/dist/agent-capacity/contracts/support/time-capacity.d.ts +163 -0
  45. package/dist/agent-capacity/contracts/support/time-capacity.js +63 -0
  46. package/dist/agent-capacity/policy/capacity/allocations/allocation-hierarchy.d.ts +29 -0
  47. package/dist/agent-capacity/policy/capacity/allocations/allocation-hierarchy.js +110 -0
  48. package/dist/agent-capacity/validation/activity-profile.d.ts +12 -0
  49. package/dist/agent-capacity/validation/activity-profile.js +264 -0
  50. package/dist/agent-capacity/validation/agent-definition-schema.d.ts +9140 -0
  51. package/dist/agent-capacity/validation/agent-definition-schema.js +198 -0
  52. package/dist/agent-capacity/validation/agent-lab-forensics-schema.d.ts +234 -0
  53. package/dist/agent-capacity/validation/agent-lab-forensics-schema.js +104 -0
  54. package/dist/agent-capacity/validation/agent-signal.d.ts +30 -0
  55. package/dist/agent-capacity/validation/agent-signal.js +31 -0
  56. package/dist/agent-capacity/validation/allocation.d.ts +12 -0
  57. package/dist/agent-capacity/validation/allocation.js +115 -0
  58. package/dist/agent-capacity/validation/assignment-records.d.ts +16 -0
  59. package/dist/agent-capacity/validation/assignment-records.js +92 -0
  60. package/dist/agent-capacity/validation/configuration.d.ts +14 -0
  61. package/dist/agent-capacity/validation/configuration.js +23 -0
  62. package/dist/agent-capacity/validation/index.d.ts +11 -0
  63. package/dist/agent-capacity/validation/index.js +11 -0
  64. package/dist/agent-capacity/validation/proposal-type.d.ts +22 -0
  65. package/dist/agent-capacity/validation/proposal-type.js +21 -0
  66. package/dist/agent-capacity/validation/research/citation.d.ts +16 -0
  67. package/dist/agent-capacity/validation/research/citation.js +47 -0
  68. package/dist/agent-capacity/validation/research/source-policy.d.ts +11 -0
  69. package/dist/agent-capacity/validation/research/source-policy.js +26 -0
  70. package/dist/agent-capacity/validation/research/workflow.d.ts +10 -0
  71. package/dist/agent-capacity/validation/research/workflow.js +31 -0
  72. package/dist/agent-capacity/validation/workflow-promotion.d.ts +2 -0
  73. package/dist/agent-capacity/validation/workflow-promotion.js +34 -0
  74. package/dist/agent-capacity/workday.d.ts +52 -0
  75. package/dist/agent-capacity/workday.js +105 -0
  76. package/dist/ai-appliance/contracts.d.ts +90 -0
  77. package/dist/ai-appliance/contracts.js +16 -0
  78. package/dist/ai-appliance/validation.d.ts +4 -0
  79. package/dist/ai-appliance/validation.js +62 -0
  80. package/dist/capacity/agents/agent-capacity.d.ts +21 -0
  81. package/dist/capacity/agents/agent-capacity.js +20 -0
  82. package/dist/capacity/capacity-core/capacity-pagination.d.ts +18 -0
  83. package/dist/capacity/capacity-core/capacity-pagination.js +33 -0
  84. package/dist/capacity/providers/capacity-provider.d.ts +1 -0
  85. package/dist/capacity/providers/capacity-provider.js +1 -0
  86. package/dist/capacity-provider/client.d.ts +56 -0
  87. package/dist/capacity-provider/client.js +163 -0
  88. package/dist/capacity-provider/contracts/capacity-facts.d.ts +64 -0
  89. package/dist/capacity-provider/contracts/capacity-facts.js +0 -0
  90. package/dist/capacity-provider/contracts/governance.d.ts +399 -0
  91. package/dist/capacity-provider/contracts/governance.js +18 -0
  92. package/dist/capacity-provider/contracts/index.d.ts +2 -0
  93. package/dist/capacity-provider/contracts/index.js +2 -0
  94. package/dist/capacity-provider/index.d.ts +3 -0
  95. package/dist/capacity-provider/index.js +3 -0
  96. package/dist/capacity-provider/validation.d.ts +27 -0
  97. package/dist/capacity-provider/validation.js +184 -0
  98. package/dist/configuration/secrets-capability.d.ts +4 -0
  99. package/dist/configuration/secrets-capability.js +4 -0
  100. package/dist/content/contracts.d.ts +12 -0
  101. package/dist/content/contracts.js +0 -0
  102. package/dist/content/validation/agent-operational-content-schemas.d.ts +1351 -0
  103. package/dist/content/validation/agent-operational-content-schemas.js +146 -0
  104. package/dist/content/validation/auxiliary-content-schemas.d.ts +1715 -0
  105. package/dist/content/validation/auxiliary-content-schemas.js +173 -0
  106. package/dist/content/validation/content-model-schemas.d.ts +21728 -0
  107. package/dist/content/validation/content-model-schemas.js +271 -0
  108. package/dist/content/validation/index.d.ts +3 -0
  109. package/dist/content/validation/index.js +3 -0
  110. package/dist/content/validation/portable-content-data.d.ts +2101 -0
  111. package/dist/content/validation/portable-content-data.js +49 -0
  112. package/dist/entrypoints/clients/control-plane-client.d.ts +112 -0
  113. package/dist/entrypoints/clients/control-plane-client.js +180 -0
  114. package/dist/entrypoints/models/field-aliases.d.ts +11 -0
  115. package/dist/entrypoints/models/model-registry.d.ts +3 -0
  116. package/dist/entrypoints/models/model-registry.js +3 -0
  117. package/dist/entrypoints/models/sdk-fields.d.ts +11 -0
  118. package/dist/entrypoints/models/sdk-types.d.ts +10 -0
  119. package/dist/entrypoints/models/sdk-types.js +10 -0
  120. package/dist/feedback/contracts.d.ts +142 -0
  121. package/dist/feedback/contracts.js +18 -0
  122. package/dist/feedback/index.d.ts +1 -0
  123. package/dist/feedback/index.js +1 -0
  124. package/dist/governance/groups/contracts.d.ts +102 -0
  125. package/dist/governance/groups/contracts.js +6 -0
  126. package/dist/graph/context-query-contracts.d.ts +19 -1
  127. package/dist/graph/context-query-contracts.js +49 -8
  128. package/dist/knowledge/contracts.d.ts +173 -0
  129. package/dist/knowledge/contracts.js +16 -0
  130. package/dist/knowledge/index.d.ts +1 -0
  131. package/dist/knowledge/index.js +1 -0
  132. package/dist/model-registry/agent-operational-models.d.ts +4 -0
  133. package/dist/model-registry/agent-operational-models.js +38 -0
  134. package/dist/model-registry/build-builtin-model-registry.d.ts +2 -0
  135. package/dist/model-registry/build-builtin-model-registry.js +426 -0
  136. package/dist/model-registry/content-root.d.ts +9 -0
  137. package/dist/model-registry/content-root.js +33 -0
  138. package/dist/model-registry/discussion-models.d.ts +4 -0
  139. package/dist/model-registry/discussion-models.js +84 -0
  140. package/dist/model-registry/group-models.d.ts +2 -0
  141. package/dist/model-registry/group-models.js +52 -0
  142. package/dist/model-registry/knowledge-models.d.ts +2 -0
  143. package/dist/model-registry/knowledge-models.js +89 -0
  144. package/dist/model-registry/normalize-definition.d.ts +8 -0
  145. package/dist/model-registry/normalize-definition.js +69 -0
  146. package/dist/operator-contracts/canonical-command-tree.d.ts +3 -0
  147. package/dist/operator-contracts/canonical-command-tree.js +81 -0
  148. package/dist/operator-contracts/command-tree.d.ts +79 -0
  149. package/dist/operator-contracts/command-tree.js +53 -0
  150. package/dist/operator-contracts/control-plane-operation.d.ts +80 -0
  151. package/dist/operator-contracts/control-plane-operation.js +75 -0
  152. package/dist/operator-contracts/control-plane-operations.d.ts +546 -0
  153. package/dist/operator-contracts/control-plane-operations.js +352 -0
  154. package/dist/operator-contracts/index.d.ts +8 -0
  155. package/dist/operator-contracts/index.js +8 -0
  156. package/dist/operator-contracts/mcp.d.ts +78 -0
  157. package/dist/operator-contracts/mcp.js +23 -0
  158. package/dist/operator-contracts/oauth.d.ts +46 -0
  159. package/dist/operator-contracts/oauth.js +0 -0
  160. package/dist/operator-contracts/workday-lifecycle.d.ts +157 -0
  161. package/dist/operator-contracts/workday-lifecycle.js +65 -0
  162. package/dist/operator-contracts/workday-profile.d.ts +72 -0
  163. package/dist/operator-contracts/workday-profile.js +106 -0
  164. package/dist/projects/projects-core/project-workflow.d.ts +179 -0
  165. package/dist/projects/projects-core/project-workflow.js +66 -0
  166. package/dist/sdk-types/configuration/sdk-dispatch-credential-source.d.ts +201 -0
  167. package/dist/sdk-types/configuration/sdk-dispatch-credential-source.js +0 -0
  168. package/dist/sdk-types/control-plane/resource-requests.d.ts +124 -0
  169. package/dist/sdk-types/control-plane/resource-requests.js +0 -0
  170. package/dist/sdk-types/governance/commons/commons-question-input.d.ts +61 -0
  171. package/dist/sdk-types/governance/commons/commons-question-input.js +0 -0
  172. package/dist/sdk-types/support/planning-policy.d.ts +210 -0
  173. package/dist/sdk-types/support/planning-policy.js +0 -0
  174. package/dist/sdk-types/support/platform-contracts.d.ts +178 -0
  175. package/dist/sdk-types/support/platform-contracts.js +15 -0
  176. package/dist/sdk-types/support/sdk-model-names.d.ts +44 -0
  177. package/dist/sdk-types/support/sdk-model-names.js +80 -0
  178. package/dist/sdk-types/support/sdk-search-request.d.ts +182 -0
  179. package/dist/sdk-types/support/sdk-search-request.js +0 -0
  180. package/dist/sdk-types/support/task-planning.d.ts +189 -0
  181. package/dist/sdk-types/support/task-planning.js +0 -0
  182. package/dist/sdk-types/treedx/graph/sdk-graph-query-request.d.ts +157 -0
  183. package/dist/sdk-types/treedx/graph/sdk-graph-query-request.js +0 -0
  184. package/dist/secrets-capability/provider-operation-contracts.d.ts +90 -0
  185. package/dist/secrets-capability/provider-operation-contracts.js +10 -0
  186. package/dist/secrets-capability/service-provider-contracts.d.ts +92 -0
  187. package/dist/secrets-capability/service-provider-contracts.js +183 -0
  188. package/dist/secrets-capability/service-vault-contracts.d.ts +61 -0
  189. package/dist/secrets-capability/service-vault-contracts.js +39 -0
  190. package/dist/secrets-capability/workflow-operation-contracts.d.ts +95 -0
  191. package/dist/secrets-capability/workflow-operation-contracts.js +0 -0
  192. package/dist/standards/canonicalize.d.ts +10 -0
  193. package/dist/standards/canonicalize.js +43 -0
  194. package/dist/standards/compatibility-attestation.d.ts +23 -0
  195. package/dist/standards/compatibility-attestation.js +40 -0
  196. package/dist/standards/composition.d.ts +15 -0
  197. package/dist/standards/composition.js +14 -0
  198. package/dist/standards/contract-bundle.d.ts +8 -0
  199. package/dist/standards/contract-bundle.js +23 -0
  200. package/dist/standards/contracts.d.ts +39 -0
  201. package/dist/standards/contracts.js +0 -0
  202. package/dist/standards/errors.d.ts +6 -0
  203. package/dist/standards/errors.js +13 -0
  204. package/dist/standards/index.d.ts +8 -0
  205. package/dist/standards/index.js +8 -0
  206. package/dist/standards/mcp/compare.d.ts +2 -0
  207. package/dist/standards/mcp/compare.js +38 -0
  208. package/dist/standards/mcp/contracts.d.ts +34 -0
  209. package/dist/standards/mcp/contracts.js +0 -0
  210. package/dist/standards/mcp/index.d.ts +3 -0
  211. package/dist/standards/mcp/index.js +3 -0
  212. package/dist/standards/mcp/normalize.d.ts +4 -0
  213. package/dist/standards/mcp/normalize.js +30 -0
  214. package/dist/standards/openapi/compare.d.ts +2 -0
  215. package/dist/standards/openapi/compare.js +112 -0
  216. package/dist/standards/openapi/contracts.d.ts +24 -0
  217. package/dist/standards/openapi/contracts.js +0 -0
  218. package/dist/standards/openapi/index.d.ts +3 -0
  219. package/dist/standards/openapi/index.js +3 -0
  220. package/dist/standards/openapi/normalize.d.ts +2 -0
  221. package/dist/standards/openapi/normalize.js +57 -0
  222. package/dist/standards/package-manifest.d.ts +37 -0
  223. package/dist/standards/package-manifest.js +89 -0
  224. package/dist/standards/portfolio-entry.d.ts +12 -0
  225. package/dist/standards/portfolio-entry.js +11 -0
  226. package/dist/standards/typescript/compare.d.ts +2 -0
  227. package/dist/standards/typescript/compare.js +88 -0
  228. package/dist/standards/typescript/contracts.d.ts +44 -0
  229. package/dist/standards/typescript/contracts.js +0 -0
  230. package/dist/standards/typescript/extract.d.ts +10 -0
  231. package/dist/standards/typescript/extract.js +244 -0
  232. package/dist/standards/typescript/index.d.ts +3 -0
  233. package/dist/standards/typescript/index.js +3 -0
  234. package/dist/treedx/accounts/auth.d.ts +17 -0
  235. package/dist/treedx/accounts/auth.js +48 -0
  236. package/dist/treedx/client/accounts/contracts/auth-mode.d.ts +3 -0
  237. package/dist/treedx/client/accounts/contracts/auth-mode.js +6 -0
  238. package/dist/treedx/client/build/creation/build-context.d.ts +3 -0
  239. package/dist/treedx/client/build/creation/build-context.js +7 -0
  240. package/dist/treedx/client/build/creation/build-snapshot.d.ts +3 -0
  241. package/dist/treedx/client/build/creation/build-snapshot.js +8 -0
  242. package/dist/treedx/client/capacity/allocations/contracts/put-capability-grant.d.ts +3 -0
  243. package/dist/treedx/client/capacity/allocations/contracts/put-capability-grant.js +7 -0
  244. package/dist/treedx/client/capacity/allocations/queries/list-capability-grants.d.ts +6 -0
  245. package/dist/treedx/client/capacity/allocations/queries/list-capability-grants.js +10 -0
  246. package/dist/treedx/client/methods.d.ts +102 -0
  247. package/dist/treedx/client/methods.js +209 -0
  248. package/dist/treedx/client/persistence/contracts/restore-storage.d.ts +3 -0
  249. package/dist/treedx/client/persistence/contracts/restore-storage.js +6 -0
  250. package/dist/treedx/client/persistence/lifecycle/verify-storage-restore.d.ts +3 -0
  251. package/dist/treedx/client/persistence/lifecycle/verify-storage-restore.js +6 -0
  252. package/dist/treedx/client/repositories/creation/register-repository.d.ts +3 -0
  253. package/dist/treedx/client/repositories/creation/register-repository.js +7 -0
  254. package/dist/treedx/client/repositories/queries/get-repository.d.ts +3 -0
  255. package/dist/treedx/client/repositories/queries/get-repository.js +7 -0
  256. package/dist/treedx/client/repositories/queries/list-repository-paths.d.ts +3 -0
  257. package/dist/treedx/client/repositories/queries/list-repository-paths.js +7 -0
  258. package/dist/treedx/client/repositories/queries/list-repository-refs.d.ts +3 -0
  259. package/dist/treedx/client/repositories/queries/list-repository-refs.js +12 -0
  260. package/dist/treedx/client/repositories/queries/query-repository.d.ts +3 -0
  261. package/dist/treedx/client/repositories/queries/query-repository.js +7 -0
  262. package/dist/treedx/client/repositories/queries/read-repository-file.d.ts +3 -0
  263. package/dist/treedx/client/repositories/queries/read-repository-file.js +6 -0
  264. package/dist/treedx/client/repositories/queries/read-repository-files.d.ts +3 -0
  265. package/dist/treedx/client/repositories/queries/read-repository-files.js +7 -0
  266. package/dist/treedx/client/repositories/queries/search-repository-files.d.ts +3 -0
  267. package/dist/treedx/client/repositories/queries/search-repository-files.js +7 -0
  268. package/dist/treedx/client/support/contracts/treedx/artifacts/contracts/download-artifact.d.ts +3 -0
  269. package/dist/treedx/client/support/contracts/treedx/artifacts/contracts/download-artifact.js +9 -0
  270. package/dist/treedx/client/support/contracts/treedx/authorization/contracts/whoami.d.ts +3 -0
  271. package/dist/treedx/client/support/contracts/treedx/authorization/contracts/whoami.js +6 -0
  272. package/dist/treedx/client/support/contracts/treedx/graph/contracts/parse-context-dsl.d.ts +3 -0
  273. package/dist/treedx/client/support/contracts/treedx/graph/contracts/parse-context-dsl.js +7 -0
  274. package/dist/treedx/client/support/contracts/treedx/health/contracts/deep-health.d.ts +5 -0
  275. package/dist/treedx/client/support/contracts/treedx/health/contracts/deep-health.js +7 -0
  276. package/dist/treedx/client/support/contracts/treedx/health/contracts/health.d.ts +3 -0
  277. package/dist/treedx/client/support/contracts/treedx/health/contracts/health.js +6 -0
  278. package/dist/treedx/client/support/contracts/treedx/health/contracts/metrics.d.ts +3 -0
  279. package/dist/treedx/client/support/contracts/treedx/health/contracts/metrics.js +7 -0
  280. package/dist/treedx/client/support/contracts/treedx/health/contracts/prometheus-metrics.d.ts +2 -0
  281. package/dist/treedx/client/support/contracts/treedx/health/contracts/prometheus-metrics.js +19 -0
  282. package/dist/treedx/client/support/contracts/treedx/health/contracts/ready.d.ts +3 -0
  283. package/dist/treedx/client/support/contracts/treedx/health/contracts/ready.js +7 -0
  284. package/dist/treedx/client/support/contracts/treedx/health/contracts/status.d.ts +3 -0
  285. package/dist/treedx/client/support/contracts/treedx/health/contracts/status.js +6 -0
  286. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/commit.d.ts +3 -0
  287. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/commit.js +7 -0
  288. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/diff.d.ts +3 -0
  289. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/diff.js +6 -0
  290. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/fetch-remote.d.ts +3 -0
  291. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/fetch-remote.js +7 -0
  292. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/push.d.ts +6 -0
  293. package/dist/treedx/client/support/contracts/treedx/repositories/contracts/push.js +23 -0
  294. package/dist/treedx/client/support/contracts/treedx/search/contracts/compact-search-index.d.ts +3 -0
  295. package/dist/treedx/client/support/contracts/treedx/search/contracts/compact-search-index.js +8 -0
  296. package/dist/treedx/client/support/contracts/treedx/search/contracts/search.d.ts +3 -0
  297. package/dist/treedx/client/support/contracts/treedx/search/contracts/search.js +7 -0
  298. package/dist/treedx/client/support/contracts/treedx/storage/contracts/backup-storage.d.ts +3 -0
  299. package/dist/treedx/client/support/contracts/treedx/storage/contracts/backup-storage.js +8 -0
  300. package/dist/treedx/client/support/contracts/treedx/storage/contracts/compact-storage.d.ts +3 -0
  301. package/dist/treedx/client/support/contracts/treedx/storage/contracts/compact-storage.js +8 -0
  302. package/dist/treedx/client/support/contracts/treedx/transport/contracts/assert-binary-ok.d.ts +2 -0
  303. package/dist/treedx/client/support/contracts/treedx/transport/contracts/assert-binary-ok.js +15 -0
  304. package/dist/treedx/client/support/contracts/treedx/transport/contracts/fetch-with-timeout.d.ts +2 -0
  305. package/dist/treedx/client/support/contracts/treedx/transport/contracts/fetch-with-timeout.js +38 -0
  306. package/dist/treedx/client/support/contracts/treedx/transport/contracts/headers.d.ts +2 -0
  307. package/dist/treedx/client/support/contracts/treedx/transport/contracts/headers.js +15 -0
  308. package/dist/treedx/client/support/contracts/treedx/transport/contracts/parse-json-response.d.ts +2 -0
  309. package/dist/treedx/client/support/contracts/treedx/transport/contracts/parse-json-response.js +15 -0
  310. package/dist/treedx/client/support/contracts/treedx/transport/contracts/query.d.ts +2 -0
  311. package/dist/treedx/client/support/contracts/treedx/transport/contracts/query.js +14 -0
  312. package/dist/treedx/client/support/contracts/treedx/transport/contracts/repo-id.d.ts +2 -0
  313. package/dist/treedx/client/support/contracts/treedx/transport/contracts/repo-id.js +14 -0
  314. package/dist/treedx/client/support/contracts/treedx/transport/contracts/request.d.ts +6 -0
  315. package/dist/treedx/client/support/contracts/treedx/transport/contracts/request.js +41 -0
  316. package/dist/treedx/client/support/contracts/treedx/transport/contracts/throw-api-error.d.ts +2 -0
  317. package/dist/treedx/client/support/contracts/treedx/transport/contracts/throw-api-error.js +14 -0
  318. package/dist/treedx/client/support/contracts/treedx/workspaces/contracts/exec.d.ts +3 -0
  319. package/dist/treedx/client/support/contracts/treedx/workspaces/contracts/exec.js +7 -0
  320. package/dist/treedx/client/support/creation/apply-changeset.d.ts +3 -0
  321. package/dist/treedx/client/support/creation/apply-changeset.js +10 -0
  322. package/dist/treedx/client/support/creation/apply-storage-migration.d.ts +3 -0
  323. package/dist/treedx/client/support/creation/apply-storage-migration.js +7 -0
  324. package/dist/treedx/client/support/creation/create-migration.d.ts +6 -0
  325. package/dist/treedx/client/support/creation/create-migration.js +7 -0
  326. package/dist/treedx/client/support/creation/export-artifact.d.ts +3 -0
  327. package/dist/treedx/client/support/creation/export-artifact.js +8 -0
  328. package/dist/treedx/client/support/creation/plan-storage-migration.d.ts +3 -0
  329. package/dist/treedx/client/support/creation/plan-storage-migration.js +7 -0
  330. package/dist/treedx/client/support/creation/request-binary.d.ts +6 -0
  331. package/dist/treedx/client/support/creation/request-binary.js +42 -0
  332. package/dist/treedx/client/support/creation/write-file.d.ts +3 -0
  333. package/dist/treedx/client/support/creation/write-file.js +10 -0
  334. package/dist/treedx/client/support/creation/write-files.d.ts +3 -0
  335. package/dist/treedx/client/support/creation/write-files.js +12 -0
  336. package/dist/treedx/client/support/queries/treedx/artifacts/queries/get-artifact.d.ts +3 -0
  337. package/dist/treedx/client/support/queries/treedx/artifacts/queries/get-artifact.js +7 -0
  338. package/dist/treedx/client/support/queries/treedx/artifacts/queries/list-artifacts.d.ts +3 -0
  339. package/dist/treedx/client/support/queries/treedx/artifacts/queries/list-artifacts.js +7 -0
  340. package/dist/treedx/client/support/queries/treedx/authorization/queries/effective-scope.d.ts +3 -0
  341. package/dist/treedx/client/support/queries/treedx/authorization/queries/effective-scope.js +9 -0
  342. package/dist/treedx/client/support/queries/treedx/authorization/queries/list-capabilities.d.ts +4 -0
  343. package/dist/treedx/client/support/queries/treedx/authorization/queries/list-capabilities.js +6 -0
  344. package/dist/treedx/client/support/queries/treedx/federation/queries/get-placement.d.ts +3 -0
  345. package/dist/treedx/client/support/queries/treedx/federation/queries/get-placement.js +7 -0
  346. package/dist/treedx/client/support/queries/treedx/graph/queries/get-node.d.ts +3 -0
  347. package/dist/treedx/client/support/queries/treedx/graph/queries/get-node.js +7 -0
  348. package/dist/treedx/client/support/queries/treedx/graph/queries/get-related.d.ts +3 -0
  349. package/dist/treedx/client/support/queries/treedx/graph/queries/get-related.js +7 -0
  350. package/dist/treedx/client/support/queries/treedx/graph/queries/list-nodes.d.ts +3 -0
  351. package/dist/treedx/client/support/queries/treedx/graph/queries/list-nodes.js +7 -0
  352. package/dist/treedx/client/support/queries/treedx/repositories/queries/list-tree.d.ts +3 -0
  353. package/dist/treedx/client/support/queries/treedx/repositories/queries/list-tree.js +10 -0
  354. package/dist/treedx/client/support/queries/treedx/repositories/queries/read-file.d.ts +3 -0
  355. package/dist/treedx/client/support/queries/treedx/repositories/queries/read-file.js +9 -0
  356. package/dist/treedx/client/support/queries/treedx/search/queries/get-search-index-status.d.ts +3 -0
  357. package/dist/treedx/client/support/queries/treedx/search/queries/get-search-index-status.js +7 -0
  358. package/dist/treedx/client/support/queries/treedx/storage/queries/get-migration.d.ts +6 -0
  359. package/dist/treedx/client/support/queries/treedx/storage/queries/get-migration.js +7 -0
  360. package/dist/treedx/client/support/queries/treedx/storage/queries/get-snapshot.d.ts +6 -0
  361. package/dist/treedx/client/support/queries/treedx/storage/queries/get-snapshot.js +7 -0
  362. package/dist/treedx/client/support/queries/treedx/storage/queries/list-storage-migrations.d.ts +6 -0
  363. package/dist/treedx/client/support/queries/treedx/storage/queries/list-storage-migrations.js +6 -0
  364. package/dist/treedx/client/support/queries/treedx/transport/queries/list-audit-events.d.ts +15 -0
  365. package/dist/treedx/client/support/queries/treedx/transport/queries/list-audit-events.js +6 -0
  366. package/dist/treedx/client/support/queries/treedx/transport/queries/list-repositories.d.ts +3 -0
  367. package/dist/treedx/client/support/queries/treedx/transport/queries/list-repositories.js +7 -0
  368. package/dist/treedx/client/support/retirement/cleanup-artifacts.d.ts +3 -0
  369. package/dist/treedx/client/support/retirement/cleanup-artifacts.js +7 -0
  370. package/dist/treedx/client/support/retirement/delete-artifact.d.ts +3 -0
  371. package/dist/treedx/client/support/retirement/delete-artifact.js +7 -0
  372. package/dist/treedx/client/support/retirement/delete-file.d.ts +3 -0
  373. package/dist/treedx/client/support/retirement/delete-file.js +10 -0
  374. package/dist/treedx/client/support/retirement/rollback-storage-migration.d.ts +3 -0
  375. package/dist/treedx/client/support/retirement/rollback-storage-migration.js +7 -0
  376. package/dist/treedx/client/support/updates/patch-file.d.ts +3 -0
  377. package/dist/treedx/client/support/updates/patch-file.js +10 -0
  378. package/dist/treedx/client/support/updates/refresh-search-index.d.ts +3 -0
  379. package/dist/treedx/client/support/updates/refresh-search-index.js +8 -0
  380. package/dist/treedx/client/treedx/blobs/contracts/download-blob.d.ts +3 -0
  381. package/dist/treedx/client/treedx/blobs/contracts/download-blob.js +6 -0
  382. package/dist/treedx/client/treedx/blobs/creation/create-blob-upload.d.ts +3 -0
  383. package/dist/treedx/client/treedx/blobs/creation/create-blob-upload.js +8 -0
  384. package/dist/treedx/client/treedx/blobs/creation/request-blob-download.d.ts +3 -0
  385. package/dist/treedx/client/treedx/blobs/creation/request-blob-download.js +27 -0
  386. package/dist/treedx/client/treedx/blobs/creation/request-blob-upload.d.ts +3 -0
  387. package/dist/treedx/client/treedx/blobs/creation/request-blob-upload.js +41 -0
  388. package/dist/treedx/client/treedx/blobs/creation/upload-blob-part.d.ts +3 -0
  389. package/dist/treedx/client/treedx/blobs/creation/upload-blob-part.js +27 -0
  390. package/dist/treedx/client/treedx/blobs/creation/upload-blob.d.ts +3 -0
  391. package/dist/treedx/client/treedx/blobs/creation/upload-blob.js +6 -0
  392. package/dist/treedx/client/treedx/blobs/creation/write-blob.d.ts +3 -0
  393. package/dist/treedx/client/treedx/blobs/creation/write-blob.js +8 -0
  394. package/dist/treedx/client/treedx/blobs/lifecycle/complete-blob-upload.d.ts +3 -0
  395. package/dist/treedx/client/treedx/blobs/lifecycle/complete-blob-upload.js +8 -0
  396. package/dist/treedx/client/treedx/blobs/queries/read-blob.d.ts +3 -0
  397. package/dist/treedx/client/treedx/blobs/queries/read-blob.js +10 -0
  398. package/dist/treedx/client/treedx/blobs/retirement/abort-blob-upload.d.ts +3 -0
  399. package/dist/treedx/client/treedx/blobs/retirement/abort-blob-upload.js +7 -0
  400. package/dist/treedx/client/treedx/blobs/retirement/delete-blob.d.ts +3 -0
  401. package/dist/treedx/client/treedx/blobs/retirement/delete-blob.js +8 -0
  402. package/dist/treedx/client/treedx/federation/contracts/federated-query.d.ts +3 -0
  403. package/dist/treedx/client/treedx/federation/contracts/federated-query.js +7 -0
  404. package/dist/treedx/client/treedx/federation/creation/plan-federated-query.d.ts +3 -0
  405. package/dist/treedx/client/treedx/federation/creation/plan-federated-query.js +6 -0
  406. package/dist/treedx/client/treedx/federation/queries/check-mirror-health.d.ts +3 -0
  407. package/dist/treedx/client/treedx/federation/queries/check-mirror-health.js +7 -0
  408. package/dist/treedx/client/treedx/federation/updates/promote-mirror.d.ts +3 -0
  409. package/dist/treedx/client/treedx/federation/updates/promote-mirror.js +7 -0
  410. package/dist/treedx/client/treedx/federation/updates/sync-mirror.d.ts +3 -0
  411. package/dist/treedx/client/treedx/federation/updates/sync-mirror.js +7 -0
  412. package/dist/treedx/client/treedx/graph/contracts/federated-context.d.ts +3 -0
  413. package/dist/treedx/client/treedx/graph/contracts/federated-context.js +7 -0
  414. package/dist/treedx/client/treedx/graph/contracts/federated-graph.d.ts +3 -0
  415. package/dist/treedx/client/treedx/graph/contracts/federated-graph.js +7 -0
  416. package/dist/treedx/client/treedx/graph/contracts/graph-search.d.ts +3 -0
  417. package/dist/treedx/client/treedx/graph/contracts/graph-search.js +8 -0
  418. package/dist/treedx/client/treedx/graph/queries/get-graph-node.d.ts +3 -0
  419. package/dist/treedx/client/treedx/graph/queries/get-graph-node.js +10 -0
  420. package/dist/treedx/client/treedx/graph/queries/get-graph-refresh-job.d.ts +3 -0
  421. package/dist/treedx/client/treedx/graph/queries/get-graph-refresh-job.js +7 -0
  422. package/dist/treedx/client/treedx/graph/queries/get-subgraph.d.ts +3 -0
  423. package/dist/treedx/client/treedx/graph/queries/get-subgraph.js +7 -0
  424. package/dist/treedx/client/treedx/graph/queries/query-graph.d.ts +3 -0
  425. package/dist/treedx/client/treedx/graph/queries/query-graph.js +7 -0
  426. package/dist/treedx/client/treedx/graph/queries/search-graph-entities.d.ts +3 -0
  427. package/dist/treedx/client/treedx/graph/queries/search-graph-entities.js +6 -0
  428. package/dist/treedx/client/treedx/graph/queries/search-graph-files.d.ts +3 -0
  429. package/dist/treedx/client/treedx/graph/queries/search-graph-files.js +6 -0
  430. package/dist/treedx/client/treedx/graph/queries/search-graph-sections.d.ts +3 -0
  431. package/dist/treedx/client/treedx/graph/queries/search-graph-sections.js +6 -0
  432. package/dist/treedx/client/treedx/graph/updates/refresh-graph.d.ts +3 -0
  433. package/dist/treedx/client/treedx/graph/updates/refresh-graph.js +7 -0
  434. package/dist/treedx/client/treedx/search/contracts/federated-search.d.ts +3 -0
  435. package/dist/treedx/client/treedx/search/contracts/federated-search.js +7 -0
  436. package/dist/treedx/client/treedx/workspaces/creation/create-workspace.d.ts +3 -0
  437. package/dist/treedx/client/treedx/workspaces/creation/create-workspace.js +7 -0
  438. package/dist/treedx/client/treedx/workspaces/retirement/abandon-workspace.d.ts +3 -0
  439. package/dist/treedx/client/treedx/workspaces/retirement/abandon-workspace.js +12 -0
  440. package/dist/treedx/client/treedx/workspaces/retirement/close-workspace.d.ts +2 -0
  441. package/dist/treedx/client/treedx/workspaces/retirement/close-workspace.js +6 -0
  442. package/dist/treedx/generated/openapi-types.d.ts +104 -0
  443. package/dist/treedx/support/client.d.ts +251 -0
  444. package/dist/treedx/support/client.js +252 -0
  445. package/dist/treedx/support/errors.d.ts +13 -0
  446. package/dist/treedx/types/tree-dx-actor.d.ts +209 -0
  447. package/dist/treedx/types/tree-dx-actor.js +8 -0
  448. package/dist/treedx/types/tree-dx-artifact-list-response.d.ts +13 -0
  449. package/dist/treedx/types/tree-dx-artifact-list-response.js +0 -0
  450. package/dist/treedx/types/tree-dx-changeset.d.ts +51 -0
  451. package/dist/treedx/types/tree-dx-changeset.js +6 -0
  452. package/dist/treedx/types/tree-dx-context-request.d.ts +245 -0
  453. package/dist/treedx/types/tree-dx-context-request.js +0 -0
  454. package/dist/treedx/types/tree-dx-exec-result.d.ts +249 -0
  455. package/dist/treedx/types/tree-dx-exec-result.js +0 -0
  456. package/dist/treedx/types/tree-dx-list-tree-request.d.ts +222 -0
  457. package/dist/treedx/types/tree-dx-list-tree-request.js +0 -0
  458. package/dist/treedx/types/tree-dx-push-request.d.ts +229 -0
  459. package/dist/treedx/types/tree-dx-push-request.js +0 -0
  460. package/dist/treedx/types.d.ts +7 -1084
  461. package/dist/treedx/types.js +7 -8
  462. package/dist/types/agents/agent-activity-profile.d.ts +267 -0
  463. package/dist/types/agents/agent-activity-profile.js +0 -0
  464. package/dist/types/agents/agent-trigger-kinds.d.ts +189 -0
  465. package/dist/types/agents/agent-trigger-kinds.js +107 -0
  466. package/dist/types/agents/execution-run-ref.d.ts +136 -0
  467. package/dist/types/agents/execution-run-ref.js +0 -0
  468. package/dist/types/agents.d.ts +3 -493
  469. package/dist/types/agents.js +3 -95
  470. package/package.json +77 -362
  471. package/dist/agent-capacity.d.ts +0 -1100
  472. package/dist/agent-capacity.js +0 -1822
  473. package/dist/agent-tools.d.ts +0 -37
  474. package/dist/agent-tools.js +0 -301
  475. package/dist/api/app.d.ts +0 -8
  476. package/dist/api/app.js +0 -404
  477. package/dist/api/auth/d1-database.d.ts +0 -3
  478. package/dist/api/auth/d1-database.js +0 -20
  479. package/dist/api/auth/d1-provider.d.ts +0 -85
  480. package/dist/api/auth/d1-provider.js +0 -95
  481. package/dist/api/auth/d1-store.d.ts +0 -121
  482. package/dist/api/auth/d1-store.js +0 -990
  483. package/dist/api/auth/memory-provider.d.ts +0 -82
  484. package/dist/api/auth/memory-provider.js +0 -297
  485. package/dist/api/auth/rbac.d.ts +0 -22
  486. package/dist/api/auth/rbac.js +0 -162
  487. package/dist/api/auth/tokens.d.ts +0 -18
  488. package/dist/api/auth/tokens.js +0 -56
  489. package/dist/api/config.d.ts +0 -4
  490. package/dist/api/config.js +0 -149
  491. package/dist/api/http.d.ts +0 -28
  492. package/dist/api/http.js +0 -51
  493. package/dist/api/index.d.ts +0 -10
  494. package/dist/api/index.js +0 -29
  495. package/dist/api/operations-routes.d.ts +0 -11
  496. package/dist/api/operations-routes.js +0 -39
  497. package/dist/api/operations.d.ts +0 -3
  498. package/dist/api/operations.js +0 -26
  499. package/dist/api/providers.d.ts +0 -2
  500. package/dist/api/providers.js +0 -85
  501. package/dist/api/railway.d.ts +0 -53
  502. package/dist/api/railway.js +0 -71
  503. package/dist/api/sdk-dispatch.d.ts +0 -6
  504. package/dist/api/sdk-dispatch.js +0 -14
  505. package/dist/api/sdk-routes.d.ts +0 -11
  506. package/dist/api/sdk-routes.js +0 -29
  507. package/dist/api/templates.d.ts +0 -3
  508. package/dist/api/templates.js +0 -31
  509. package/dist/api/types.d.ts +0 -238
  510. package/dist/capacity-provider.d.ts +0 -494
  511. package/dist/capacity-provider.js +0 -727
  512. package/dist/capacity.d.ts +0 -483
  513. package/dist/capacity.js +0 -2331
  514. package/dist/cli-tools.d.ts +0 -3
  515. package/dist/cli-tools.js +0 -46
  516. package/dist/content-operations.d.ts +0 -97
  517. package/dist/content-operations.js +0 -250
  518. package/dist/content-store.d.ts +0 -25
  519. package/dist/content-store.js +0 -269
  520. package/dist/control-plane-client.d.ts +0 -203
  521. package/dist/control-plane-client.js +0 -540
  522. package/dist/control-plane.d.ts +0 -101
  523. package/dist/control-plane.js +0 -201
  524. package/dist/copilot.d.ts +0 -18
  525. package/dist/copilot.js +0 -90
  526. package/dist/d1-http.d.ts +0 -38
  527. package/dist/d1-http.js +0 -95
  528. package/dist/d1-store.d.ts +0 -336
  529. package/dist/d1-store.js +0 -1431
  530. package/dist/db/d1.d.ts +0 -246
  531. package/dist/db/d1.js +0 -8
  532. package/dist/db/index.d.ts +0 -3
  533. package/dist/db/index.js +0 -3
  534. package/dist/db/market-schema.d.ts +0 -83651
  535. package/dist/db/market-schema.js +0 -3725
  536. package/dist/db/node-sqlite.d.ts +0 -297
  537. package/dist/db/node-sqlite.js +0 -133
  538. package/dist/db/schema.d.ts +0 -483
  539. package/dist/db/schema.js +0 -29
  540. package/dist/dispatch.d.ts +0 -4
  541. package/dist/dispatch.js +0 -174
  542. package/dist/field-aliases.d.ts +0 -11
  543. package/dist/fixture-support.d.ts +0 -24
  544. package/dist/fixture-support.js +0 -385
  545. package/dist/frontmatter.d.ts +0 -6
  546. package/dist/frontmatter.js +0 -33
  547. package/dist/git-runtime.d.ts +0 -16
  548. package/dist/git-runtime.js +0 -69
  549. package/dist/governance.d.ts +0 -133
  550. package/dist/governance.js +0 -285
  551. package/dist/graph/build.d.ts +0 -19
  552. package/dist/graph/build.js +0 -949
  553. package/dist/graph/dsl.d.ts +0 -2
  554. package/dist/graph/dsl.js +0 -243
  555. package/dist/graph/query.d.ts +0 -47
  556. package/dist/graph/query.js +0 -447
  557. package/dist/graph/ranking.d.ts +0 -3
  558. package/dist/graph/ranking.js +0 -483
  559. package/dist/graph/schema.d.ts +0 -142
  560. package/dist/graph/schema.js +0 -137
  561. package/dist/graph.d.ts +0 -52
  562. package/dist/graph.js +0 -133
  563. package/dist/guarantees/index.d.ts +0 -512
  564. package/dist/guarantees/index.js +0 -1782
  565. package/dist/hosting/apps.d.ts +0 -12
  566. package/dist/hosting/apps.js +0 -107
  567. package/dist/hosting/builtins.d.ts +0 -25
  568. package/dist/hosting/builtins.js +0 -685
  569. package/dist/hosting/contracts.d.ts +0 -190
  570. package/dist/hosting/graph.d.ts +0 -110
  571. package/dist/hosting/graph.js +0 -993
  572. package/dist/hosting/index.d.ts +0 -4
  573. package/dist/hosting/index.js +0 -4
  574. package/dist/index.d.ts +0 -88
  575. package/dist/index.js +0 -757
  576. package/dist/local-dev/managed-dev.d.ts +0 -85
  577. package/dist/local-dev/managed-dev.js +0 -431
  578. package/dist/managed-dependencies.d.ts +0 -91
  579. package/dist/managed-dependencies.js +0 -1186
  580. package/dist/market-client.d.ts +0 -831
  581. package/dist/market-client.js +0 -1219
  582. package/dist/model-registry.d.ts +0 -8
  583. package/dist/model-registry.js +0 -674
  584. package/dist/operations/agent-tools.d.ts +0 -105
  585. package/dist/operations/agent-tools.js +0 -171
  586. package/dist/operations/providers/default.d.ts +0 -10
  587. package/dist/operations/providers/default.js +0 -1245
  588. package/dist/operations/repository-operations.d.ts +0 -158
  589. package/dist/operations/repository-operations.js +0 -851
  590. package/dist/operations/runtime.d.ts +0 -7
  591. package/dist/operations/runtime.js +0 -61
  592. package/dist/operations/services/bootstrap-runner.d.ts +0 -39
  593. package/dist/operations/services/bootstrap-runner.js +0 -191
  594. package/dist/operations/services/build-warning-policy.d.ts +0 -34
  595. package/dist/operations/services/build-warning-policy.js +0 -91
  596. package/dist/operations/services/commit-message-provider.d.ts +0 -65
  597. package/dist/operations/services/commit-message-provider.js +0 -496
  598. package/dist/operations/services/config-runtime.d.ts +0 -558
  599. package/dist/operations/services/config-runtime.js +0 -3494
  600. package/dist/operations/services/d1-migration.d.ts +0 -6
  601. package/dist/operations/services/d1-migration.js +0 -120
  602. package/dist/operations/services/deploy.d.ts +0 -645
  603. package/dist/operations/services/deploy.js +0 -3826
  604. package/dist/operations/services/deployment-readiness.d.ts +0 -30
  605. package/dist/operations/services/deployment-readiness.js +0 -217
  606. package/dist/operations/services/export-runtime.d.ts +0 -18
  607. package/dist/operations/services/export-runtime.js +0 -140
  608. package/dist/operations/services/git-remote-policy.d.ts +0 -9
  609. package/dist/operations/services/git-remote-policy.js +0 -63
  610. package/dist/operations/services/git-runner.d.ts +0 -68
  611. package/dist/operations/services/git-runner.js +0 -500
  612. package/dist/operations/services/git-workflow.d.ts +0 -255
  613. package/dist/operations/services/git-workflow.js +0 -845
  614. package/dist/operations/services/github-actions-verification.d.ts +0 -148
  615. package/dist/operations/services/github-actions-verification.js +0 -589
  616. package/dist/operations/services/github-api.d.ts +0 -279
  617. package/dist/operations/services/github-api.js +0 -936
  618. package/dist/operations/services/github-automation.d.ts +0 -230
  619. package/dist/operations/services/github-automation.js +0 -520
  620. package/dist/operations/services/github-credentials.d.ts +0 -13
  621. package/dist/operations/services/github-credentials.js +0 -59
  622. package/dist/operations/services/hosted-service-checks.d.ts +0 -82
  623. package/dist/operations/services/hosted-service-checks.js +0 -527
  624. package/dist/operations/services/hosting-audit.d.ts +0 -69
  625. package/dist/operations/services/hosting-audit.js +0 -638
  626. package/dist/operations/services/hub-launch.d.ts +0 -182
  627. package/dist/operations/services/hub-launch.js +0 -309
  628. package/dist/operations/services/hub-provider-launch.d.ts +0 -160
  629. package/dist/operations/services/hub-provider-launch.js +0 -1056
  630. package/dist/operations/services/key-agent.d.ts +0 -137
  631. package/dist/operations/services/key-agent.js +0 -641
  632. package/dist/operations/services/live-hosted-service-checks.d.ts +0 -30
  633. package/dist/operations/services/live-hosted-service-checks.js +0 -611
  634. package/dist/operations/services/local-cleanup.d.ts +0 -30
  635. package/dist/operations/services/local-cleanup.js +0 -77
  636. package/dist/operations/services/local-dev.d.ts +0 -8
  637. package/dist/operations/services/local-dev.js +0 -97
  638. package/dist/operations/services/managed-host-security.d.ts +0 -13
  639. package/dist/operations/services/managed-host-security.js +0 -56
  640. package/dist/operations/services/managed-repositories.d.ts +0 -37
  641. package/dist/operations/services/managed-repositories.js +0 -177
  642. package/dist/operations/services/market-packaging.d.ts +0 -59
  643. package/dist/operations/services/market-packaging.js +0 -234
  644. package/dist/operations/services/operations-runner-smoke.d.ts +0 -31
  645. package/dist/operations/services/operations-runner-smoke.js +0 -212
  646. package/dist/operations/services/package-adapters.d.ts +0 -184
  647. package/dist/operations/services/package-adapters.js +0 -912
  648. package/dist/operations/services/package-artifacts.d.ts +0 -37
  649. package/dist/operations/services/package-artifacts.js +0 -99
  650. package/dist/operations/services/package-reference-policy.d.ts +0 -64
  651. package/dist/operations/services/package-reference-policy.js +0 -364
  652. package/dist/operations/services/project-host-operations.d.ts +0 -153
  653. package/dist/operations/services/project-host-operations.js +0 -365
  654. package/dist/operations/services/project-platform.d.ts +0 -727
  655. package/dist/operations/services/project-platform.js +0 -1603
  656. package/dist/operations/services/project-web-monitor.d.ts +0 -15
  657. package/dist/operations/services/project-web-monitor.js +0 -377
  658. package/dist/operations/services/railway-api.d.ts +0 -494
  659. package/dist/operations/services/railway-api.js +0 -1874
  660. package/dist/operations/services/railway-cli.d.ts +0 -47
  661. package/dist/operations/services/railway-cli.js +0 -142
  662. package/dist/operations/services/railway-deploy.d.ts +0 -161
  663. package/dist/operations/services/railway-deploy.js +0 -1808
  664. package/dist/operations/services/railway-source-policy.d.ts +0 -25
  665. package/dist/operations/services/railway-source-policy.js +0 -111
  666. package/dist/operations/services/release-history.d.ts +0 -59
  667. package/dist/operations/services/release-history.js +0 -158
  668. package/dist/operations/services/release-proof-ledger.d.ts +0 -13
  669. package/dist/operations/services/release-proof-ledger.js +0 -81
  670. package/dist/operations/services/release-proof-planner.d.ts +0 -48
  671. package/dist/operations/services/release-proof-planner.js +0 -195
  672. package/dist/operations/services/release-proof-runner.d.ts +0 -16
  673. package/dist/operations/services/release-proof-runner.js +0 -169
  674. package/dist/operations/services/release-proof.d.ts +0 -81
  675. package/dist/operations/services/release-proof.js +0 -79
  676. package/dist/operations/services/repository-save-orchestrator.d.ts +0 -193
  677. package/dist/operations/services/repository-save-orchestrator.js +0 -2110
  678. package/dist/operations/services/runtime-paths.d.ts +0 -19
  679. package/dist/operations/services/runtime-paths.js +0 -54
  680. package/dist/operations/services/runtime-tools.d.ts +0 -35
  681. package/dist/operations/services/runtime-tools.js +0 -212
  682. package/dist/operations/services/save-deploy-preflight.d.ts +0 -32
  683. package/dist/operations/services/save-deploy-preflight.js +0 -82
  684. package/dist/operations/services/template-host-bindings.d.ts +0 -68
  685. package/dist/operations/services/template-host-bindings.js +0 -401
  686. package/dist/operations/services/template-registry.d.ts +0 -110
  687. package/dist/operations/services/template-registry.js +0 -595
  688. package/dist/operations/services/template-secret-sync.d.ts +0 -97
  689. package/dist/operations/services/template-secret-sync.js +0 -292
  690. package/dist/operations/services/verification-cache.d.ts +0 -25
  691. package/dist/operations/services/verification-cache.js +0 -71
  692. package/dist/operations/services/watch-dev.d.ts +0 -21
  693. package/dist/operations/services/watch-dev.js +0 -282
  694. package/dist/operations/services/workflow-timing.d.ts +0 -25
  695. package/dist/operations/services/workflow-timing.js +0 -79
  696. package/dist/operations/services/workspace-dependency-mode.d.ts +0 -74
  697. package/dist/operations/services/workspace-dependency-mode.js +0 -478
  698. package/dist/operations/services/workspace-preflight.d.ts +0 -40
  699. package/dist/operations/services/workspace-preflight.js +0 -172
  700. package/dist/operations/services/workspace-save-script.d.ts +0 -26
  701. package/dist/operations/services/workspace-save-script.js +0 -50
  702. package/dist/operations/services/workspace-save.d.ts +0 -76
  703. package/dist/operations/services/workspace-save.js +0 -453
  704. package/dist/operations/services/workspace-tools.d.ts +0 -17
  705. package/dist/operations/services/workspace-tools.js +0 -320
  706. package/dist/operations-registry.d.ts +0 -5
  707. package/dist/operations-registry.js +0 -98
  708. package/dist/operations-types.d.ts +0 -75
  709. package/dist/operations-types.js +0 -17
  710. package/dist/operations.d.ts +0 -17
  711. package/dist/operations.js +0 -114
  712. package/dist/platform/book-export.d.ts +0 -78
  713. package/dist/platform/book-export.js +0 -451
  714. package/dist/platform/books-data.d.ts +0 -28
  715. package/dist/platform/books-data.js +0 -111
  716. package/dist/platform/config.d.ts +0 -27
  717. package/dist/platform/config.js +0 -100
  718. package/dist/platform/content-runtime-source.d.ts +0 -54
  719. package/dist/platform/content-runtime-source.js +0 -169
  720. package/dist/platform/contracts.d.ts +0 -361
  721. package/dist/platform/deploy-config.d.ts +0 -17
  722. package/dist/platform/deploy-config.js +0 -731
  723. package/dist/platform/deploy-runtime.d.ts +0 -22
  724. package/dist/platform/deploy-runtime.js +0 -93
  725. package/dist/platform/desired-state.d.ts +0 -66
  726. package/dist/platform/desired-state.js +0 -1071
  727. package/dist/platform/env.yaml +0 -1126
  728. package/dist/platform/environment.d.ts +0 -159
  729. package/dist/platform/environment.js +0 -778
  730. package/dist/platform/local-content-materialization.d.ts +0 -9
  731. package/dist/platform/local-content-materialization.js +0 -212
  732. package/dist/platform/plugin.d.ts +0 -103
  733. package/dist/platform/plugin.js +0 -6
  734. package/dist/platform/plugins/constants.d.ts +0 -26
  735. package/dist/platform/plugins/constants.js +0 -33
  736. package/dist/platform/plugins/runtime.d.ts +0 -41
  737. package/dist/platform/plugins/runtime.js +0 -257
  738. package/dist/platform/plugins.d.ts +0 -6
  739. package/dist/platform/plugins.js +0 -42
  740. package/dist/platform/published-content-pipeline.d.ts +0 -84
  741. package/dist/platform/published-content-pipeline.js +0 -547
  742. package/dist/platform/published-content.d.ts +0 -224
  743. package/dist/platform/published-content.js +0 -611
  744. package/dist/platform/site-config-schema.d.ts +0 -1
  745. package/dist/platform/site-config-schema.js +0 -4
  746. package/dist/platform/tenant/runtime-config.d.ts +0 -154
  747. package/dist/platform/tenant/runtime-config.js +0 -69
  748. package/dist/platform/tenant-config.d.ts +0 -8
  749. package/dist/platform/tenant-config.js +0 -207
  750. package/dist/platform/utils/site-config-schema.d.ts +0 -154
  751. package/dist/platform/utils/site-config-schema.js +0 -450
  752. package/dist/platform-operation-store.d.ts +0 -94
  753. package/dist/platform-operation-store.js +0 -531
  754. package/dist/platform-operations.d.ts +0 -273
  755. package/dist/platform-operations.js +0 -440
  756. package/dist/plugin-default.d.ts +0 -28
  757. package/dist/plugin-default.js +0 -55
  758. package/dist/project-import.d.ts +0 -91
  759. package/dist/project-import.js +0 -257
  760. package/dist/project-workflow.d.ts +0 -233
  761. package/dist/project-workflow.js +0 -82
  762. package/dist/reconcile/bootstrap-systems.d.ts +0 -32
  763. package/dist/reconcile/bootstrap-systems.js +0 -175
  764. package/dist/reconcile/builtin-adapters.d.ts +0 -9
  765. package/dist/reconcile/builtin-adapters.js +0 -5545
  766. package/dist/reconcile/contracts.d.ts +0 -172
  767. package/dist/reconcile/desired-state.d.ts +0 -10
  768. package/dist/reconcile/desired-state.js +0 -322
  769. package/dist/reconcile/engine.d.ts +0 -118
  770. package/dist/reconcile/engine.js +0 -645
  771. package/dist/reconcile/errors.d.ts +0 -5
  772. package/dist/reconcile/errors.js +0 -13
  773. package/dist/reconcile/index.d.ts +0 -10
  774. package/dist/reconcile/index.js +0 -10
  775. package/dist/reconcile/live-acceptance.d.ts +0 -100
  776. package/dist/reconcile/live-acceptance.js +0 -2018
  777. package/dist/reconcile/platform.d.ts +0 -104
  778. package/dist/reconcile/platform.js +0 -100
  779. package/dist/reconcile/providers/docker-private.d.ts +0 -54
  780. package/dist/reconcile/providers/docker-private.js +0 -101
  781. package/dist/reconcile/providers/github-private.d.ts +0 -69
  782. package/dist/reconcile/providers/github-private.js +0 -145
  783. package/dist/reconcile/providers/local-private.d.ts +0 -28
  784. package/dist/reconcile/providers/local-private.js +0 -75
  785. package/dist/reconcile/providers/railway-iac.d.ts +0 -220
  786. package/dist/reconcile/providers/railway-iac.js +0 -621
  787. package/dist/reconcile/providers/release-private.d.ts +0 -89
  788. package/dist/reconcile/providers/release-private.js +0 -140
  789. package/dist/reconcile/registry.d.ts +0 -7
  790. package/dist/reconcile/registry.js +0 -79
  791. package/dist/reconcile/state.d.ts +0 -7
  792. package/dist/reconcile/state.js +0 -270
  793. package/dist/reconcile/units.d.ts +0 -6
  794. package/dist/reconcile/units.js +0 -72
  795. package/dist/remote.d.ts +0 -244
  796. package/dist/remote.js +0 -284
  797. package/dist/scenes/artifacts.d.ts +0 -16
  798. package/dist/scenes/artifacts.js +0 -61
  799. package/dist/scenes/auth.d.ts +0 -2
  800. package/dist/scenes/auth.js +0 -28
  801. package/dist/scenes/base-url.d.ts +0 -12
  802. package/dist/scenes/base-url.js +0 -123
  803. package/dist/scenes/builtin-plugins.d.ts +0 -2
  804. package/dist/scenes/builtin-plugins.js +0 -499
  805. package/dist/scenes/checkpoints.d.ts +0 -14
  806. package/dist/scenes/checkpoints.js +0 -33
  807. package/dist/scenes/device-matrix.d.ts +0 -2
  808. package/dist/scenes/device-matrix.js +0 -100
  809. package/dist/scenes/devices.d.ts +0 -11
  810. package/dist/scenes/devices.js +0 -40
  811. package/dist/scenes/diagnostics.d.ts +0 -5
  812. package/dist/scenes/diagnostics.js +0 -22
  813. package/dist/scenes/diagram-providers.d.ts +0 -2
  814. package/dist/scenes/diagram-providers.js +0 -181
  815. package/dist/scenes/diagram-validation.d.ts +0 -22
  816. package/dist/scenes/diagram-validation.js +0 -74
  817. package/dist/scenes/environment.d.ts +0 -2
  818. package/dist/scenes/environment.js +0 -65
  819. package/dist/scenes/evidence-bundle.d.ts +0 -5
  820. package/dist/scenes/evidence-bundle.js +0 -42
  821. package/dist/scenes/evidence-report.d.ts +0 -10
  822. package/dist/scenes/evidence-report.js +0 -73
  823. package/dist/scenes/evidence.d.ts +0 -16
  824. package/dist/scenes/evidence.js +0 -277
  825. package/dist/scenes/index.d.ts +0 -48
  826. package/dist/scenes/index.js +0 -312
  827. package/dist/scenes/inspect.d.ts +0 -9
  828. package/dist/scenes/inspect.js +0 -64
  829. package/dist/scenes/loader.d.ts +0 -3
  830. package/dist/scenes/loader.js +0 -38
  831. package/dist/scenes/logs.d.ts +0 -2
  832. package/dist/scenes/logs.js +0 -47
  833. package/dist/scenes/operations.d.ts +0 -3
  834. package/dist/scenes/operations.js +0 -128
  835. package/dist/scenes/phase0.d.ts +0 -9
  836. package/dist/scenes/phase0.js +0 -637
  837. package/dist/scenes/planner.d.ts +0 -12
  838. package/dist/scenes/planner.js +0 -166
  839. package/dist/scenes/playwright-adapter.d.ts +0 -2
  840. package/dist/scenes/playwright-adapter.js +0 -63
  841. package/dist/scenes/plugins.d.ts +0 -5
  842. package/dist/scenes/plugins.js +0 -115
  843. package/dist/scenes/progress.d.ts +0 -17
  844. package/dist/scenes/progress.js +0 -24
  845. package/dist/scenes/publish-destinations.d.ts +0 -12
  846. package/dist/scenes/publish-destinations.js +0 -99
  847. package/dist/scenes/publish-plan-report.d.ts +0 -10
  848. package/dist/scenes/publish-plan-report.js +0 -70
  849. package/dist/scenes/publish-plan.d.ts +0 -15
  850. package/dist/scenes/publish-plan.js +0 -248
  851. package/dist/scenes/publish-redaction.d.ts +0 -16
  852. package/dist/scenes/publish-redaction.js +0 -148
  853. package/dist/scenes/publish-release-record.d.ts +0 -13
  854. package/dist/scenes/publish-release-record.js +0 -34
  855. package/dist/scenes/publish-report.d.ts +0 -10
  856. package/dist/scenes/publish-report.js +0 -67
  857. package/dist/scenes/publish.d.ts +0 -16
  858. package/dist/scenes/publish.js +0 -298
  859. package/dist/scenes/registry.d.ts +0 -12
  860. package/dist/scenes/registry.js +0 -65
  861. package/dist/scenes/remotion-adapter.d.ts +0 -3
  862. package/dist/scenes/remotion-adapter.js +0 -94
  863. package/dist/scenes/remotion-composition-registry.d.ts +0 -2
  864. package/dist/scenes/remotion-composition-registry.js +0 -12
  865. package/dist/scenes/remotion-compositions.d.ts +0 -15
  866. package/dist/scenes/remotion-compositions.js +0 -464
  867. package/dist/scenes/remotion-diagrams.d.ts +0 -9
  868. package/dist/scenes/remotion-diagrams.js +0 -188
  869. package/dist/scenes/remotion-input.d.ts +0 -13
  870. package/dist/scenes/remotion-input.js +0 -291
  871. package/dist/scenes/remotion-visuals.d.ts +0 -29
  872. package/dist/scenes/remotion-visuals.js +0 -198
  873. package/dist/scenes/render-media-assets.d.ts +0 -9
  874. package/dist/scenes/render-media-assets.js +0 -117
  875. package/dist/scenes/render-report.d.ts +0 -10
  876. package/dist/scenes/render-report.js +0 -27
  877. package/dist/scenes/render.d.ts +0 -2
  878. package/dist/scenes/render.js +0 -218
  879. package/dist/scenes/reporter.d.ts +0 -3
  880. package/dist/scenes/reporter.js +0 -101
  881. package/dist/scenes/resume.d.ts +0 -2
  882. package/dist/scenes/resume.js +0 -79
  883. package/dist/scenes/runner.d.ts +0 -2
  884. package/dist/scenes/runner.js +0 -687
  885. package/dist/scenes/schema.d.ts +0 -6
  886. package/dist/scenes/schema.js +0 -1023
  887. package/dist/scenes/seed.d.ts +0 -2
  888. package/dist/scenes/seed.js +0 -83
  889. package/dist/scenes/segments.d.ts +0 -15
  890. package/dist/scenes/segments.js +0 -79
  891. package/dist/scenes/selectors.d.ts +0 -3
  892. package/dist/scenes/selectors.js +0 -21
  893. package/dist/scenes/timeline.d.ts +0 -11
  894. package/dist/scenes/timeline.js +0 -26
  895. package/dist/scenes/timeouts.d.ts +0 -6
  896. package/dist/scenes/timeouts.js +0 -17
  897. package/dist/scenes/training-captions.d.ts +0 -14
  898. package/dist/scenes/training-captions.js +0 -98
  899. package/dist/scenes/training-report.d.ts +0 -10
  900. package/dist/scenes/training-report.js +0 -78
  901. package/dist/scenes/training-transcript.d.ts +0 -24
  902. package/dist/scenes/training-transcript.js +0 -204
  903. package/dist/scenes/training.d.ts +0 -10
  904. package/dist/scenes/training.js +0 -134
  905. package/dist/scenes/types.d.ts +0 -1900
  906. package/dist/scenes/types.js +0 -8
  907. package/dist/scenes/visual-audit-contact-sheets.d.ts +0 -6
  908. package/dist/scenes/visual-audit-contact-sheets.js +0 -119
  909. package/dist/scenes/visual-audit-fixtures.d.ts +0 -25
  910. package/dist/scenes/visual-audit-fixtures.js +0 -247
  911. package/dist/scenes/visual-audit-report.d.ts +0 -11
  912. package/dist/scenes/visual-audit-report.js +0 -85
  913. package/dist/scenes/visual-audit-review.d.ts +0 -23
  914. package/dist/scenes/visual-audit-review.js +0 -829
  915. package/dist/scenes/visual-audit-routes.d.ts +0 -13
  916. package/dist/scenes/visual-audit-routes.js +0 -308
  917. package/dist/scenes/visual-audit.d.ts +0 -3
  918. package/dist/scenes/visual-audit.js +0 -596
  919. package/dist/scripts/aggregate-book.js +0 -16
  920. package/dist/scripts/assert-release-tag-version.js +0 -23
  921. package/dist/scripts/build-dist.js +0 -294
  922. package/dist/scripts/build-tenant-worker.js +0 -36
  923. package/dist/scripts/check-build-warnings.js +0 -51
  924. package/dist/scripts/cleanup-markdown.js +0 -377
  925. package/dist/scripts/cli-test-fixtures.js +0 -44
  926. package/dist/scripts/config-treeseed.js +0 -131
  927. package/dist/scripts/deployment-readiness.js +0 -20
  928. package/dist/scripts/generate-treedx-openapi-types.js +0 -186
  929. package/dist/scripts/install-managed-dependencies.js +0 -12
  930. package/dist/scripts/key-agent.js +0 -165
  931. package/dist/scripts/local-dev.js +0 -129
  932. package/dist/scripts/migrate-journey-csv-to-guarantees.js +0 -140
  933. package/dist/scripts/operations-runner-smoke.js +0 -16
  934. package/dist/scripts/package-tools.js +0 -85
  935. package/dist/scripts/patch-starlight-content-path.js +0 -173
  936. package/dist/scripts/prepare.js +0 -10
  937. package/dist/scripts/publish-package.js +0 -29
  938. package/dist/scripts/release-verify.js +0 -105
  939. package/dist/scripts/run-fixture-astro-command.js +0 -18
  940. package/dist/scripts/scaffold-site.js +0 -66
  941. package/dist/scripts/sync-template.js +0 -20
  942. package/dist/scripts/template-catalog.test.js +0 -86
  943. package/dist/scripts/template-command.js +0 -31
  944. package/dist/scripts/tenant-astro-command.js +0 -3
  945. package/dist/scripts/tenant-build.js +0 -48
  946. package/dist/scripts/tenant-check.js +0 -10
  947. package/dist/scripts/tenant-d1-migrate-local.js +0 -15
  948. package/dist/scripts/tenant-deploy.js +0 -220
  949. package/dist/scripts/tenant-destroy.js +0 -112
  950. package/dist/scripts/tenant-dev.js +0 -160
  951. package/dist/scripts/tenant-lint.js +0 -4
  952. package/dist/scripts/tenant-test.js +0 -4
  953. package/dist/scripts/tenant-workflow-action.js +0 -101
  954. package/dist/scripts/test-cloudflare-local.js +0 -209
  955. package/dist/scripts/test-scaffold.js +0 -300
  956. package/dist/scripts/test-smoke.js +0 -137
  957. package/dist/scripts/treeseed-assert-release-tag-version.js +0 -21
  958. package/dist/scripts/treeseed-build-dist.js +0 -131
  959. package/dist/scripts/treeseed-publish-package.js +0 -19
  960. package/dist/scripts/treeseed-release-verify.js +0 -131
  961. package/dist/scripts/validate-templates.js +0 -6
  962. package/dist/scripts/verify-driver.js +0 -45
  963. package/dist/scripts/workflow-commands.test.js +0 -31
  964. package/dist/scripts/workspace-command-e2e.js +0 -718
  965. package/dist/scripts/workspace-lint.js +0 -15
  966. package/dist/scripts/workspace-preflight.js +0 -22
  967. package/dist/scripts/workspace-publish-changed-packages.js +0 -16
  968. package/dist/scripts/workspace-release-test.js +0 -104
  969. package/dist/scripts/workspace-release-verify.js +0 -81
  970. package/dist/scripts/workspace-save.js +0 -64
  971. package/dist/scripts/workspace-start-warning.js +0 -3
  972. package/dist/scripts/workspace-test-unit.js +0 -4
  973. package/dist/scripts/workspace-test.js +0 -17
  974. package/dist/sdk-dispatch.d.ts +0 -12
  975. package/dist/sdk-dispatch.js +0 -126
  976. package/dist/sdk-fields.d.ts +0 -11
  977. package/dist/sdk-filters.d.ts +0 -4
  978. package/dist/sdk-filters.js +0 -74
  979. package/dist/sdk-types.d.ts +0 -3868
  980. package/dist/sdk-types.js +0 -542
  981. package/dist/sdk-version.d.ts +0 -2
  982. package/dist/sdk-version.js +0 -42
  983. package/dist/sdk.d.ts +0 -266
  984. package/dist/sdk.js +0 -825
  985. package/dist/secrets-capability.d.ts +0 -421
  986. package/dist/secrets-capability.js +0 -530
  987. package/dist/seeds/errors.d.ts +0 -5
  988. package/dist/seeds/errors.js +0 -22
  989. package/dist/seeds/index.d.ts +0 -20
  990. package/dist/seeds/index.js +0 -53
  991. package/dist/seeds/loader.d.ts +0 -8
  992. package/dist/seeds/loader.js +0 -32
  993. package/dist/seeds/normalize.d.ts +0 -13
  994. package/dist/seeds/normalize.js +0 -282
  995. package/dist/seeds/planner.d.ts +0 -10
  996. package/dist/seeds/planner.js +0 -149
  997. package/dist/seeds/schema.d.ts +0 -2
  998. package/dist/seeds/schema.js +0 -893
  999. package/dist/seeds/types.d.ts +0 -312
  1000. package/dist/seeds/types.js +0 -12
  1001. package/dist/service-credentials.d.ts +0 -54
  1002. package/dist/service-credentials.js +0 -112
  1003. package/dist/stores/cursor-store.d.ts +0 -10
  1004. package/dist/stores/cursor-store.js +0 -164
  1005. package/dist/stores/envelopes.d.ts +0 -116
  1006. package/dist/stores/envelopes.js +0 -219
  1007. package/dist/stores/helpers.d.ts +0 -12
  1008. package/dist/stores/helpers.js +0 -42
  1009. package/dist/stores/lease-store.d.ts +0 -18
  1010. package/dist/stores/lease-store.js +0 -189
  1011. package/dist/stores/message-store.d.ts +0 -12
  1012. package/dist/stores/message-store.js +0 -273
  1013. package/dist/stores/operational-store.d.ts +0 -55
  1014. package/dist/stores/operational-store.js +0 -861
  1015. package/dist/stores/project-workflow-store.d.ts +0 -56
  1016. package/dist/stores/project-workflow-store.js +0 -482
  1017. package/dist/stores/run-store.d.ts +0 -9
  1018. package/dist/stores/run-store.js +0 -75
  1019. package/dist/stores/subscription-store.d.ts +0 -8
  1020. package/dist/stores/subscription-store.js +0 -73
  1021. package/dist/template-catalog.d.ts +0 -13
  1022. package/dist/template-catalog.js +0 -151
  1023. package/dist/template-launch-requirements.d.ts +0 -118
  1024. package/dist/template-launch-requirements.js +0 -768
  1025. package/dist/template-launch-ui.d.ts +0 -85
  1026. package/dist/template-launch-ui.js +0 -189
  1027. package/dist/timing.d.ts +0 -20
  1028. package/dist/timing.js +0 -73
  1029. package/dist/treedx/adapters.d.ts +0 -6
  1030. package/dist/treedx/adapters.js +0 -36
  1031. package/dist/treedx/client.d.ts +0 -222
  1032. package/dist/treedx/client.js +0 -871
  1033. package/dist/treedx/errors.d.ts +0 -13
  1034. package/dist/treedx/federated-client.d.ts +0 -27
  1035. package/dist/treedx/federated-client.js +0 -158
  1036. package/dist/treedx/graph-adapter.d.ts +0 -33
  1037. package/dist/treedx/graph-adapter.js +0 -156
  1038. package/dist/treedx/index.d.ts +0 -14
  1039. package/dist/treedx/index.js +0 -48
  1040. package/dist/treedx/market-integration.d.ts +0 -27
  1041. package/dist/treedx/market-integration.js +0 -131
  1042. package/dist/treedx/ports.d.ts +0 -166
  1043. package/dist/treedx/ports.js +0 -231
  1044. package/dist/treedx/query-adapter.d.ts +0 -19
  1045. package/dist/treedx/query-adapter.js +0 -62
  1046. package/dist/treedx/registry-client.d.ts +0 -11
  1047. package/dist/treedx/registry-client.js +0 -19
  1048. package/dist/treedx/repository-adapter.d.ts +0 -45
  1049. package/dist/treedx/repository-adapter.js +0 -319
  1050. package/dist/treedx/sdk-integration.d.ts +0 -27
  1051. package/dist/treedx/sdk-integration.js +0 -63
  1052. package/dist/treedx/workspace-adapter.d.ts +0 -27
  1053. package/dist/treedx/workspace-adapter.js +0 -65
  1054. package/dist/treedx-backends.d.ts +0 -220
  1055. package/dist/treedx-backends.js +0 -634
  1056. package/dist/treedx-client.d.ts +0 -89
  1057. package/dist/treedx-client.js +0 -184
  1058. package/dist/treeseed/services/compose.yml +0 -6
  1059. package/dist/treeseed/template-catalog/catalog.fixture.json +0 -707
  1060. package/dist/types/cloudflare.d.ts +0 -54
  1061. package/dist/verification.d.ts +0 -31
  1062. package/dist/verification.js +0 -430
  1063. package/dist/workflow/operations.d.ts +0 -1516
  1064. package/dist/workflow/operations.js +0 -7001
  1065. package/dist/workflow/policy.d.ts +0 -12
  1066. package/dist/workflow/policy.js +0 -70
  1067. package/dist/workflow/runs.d.ts +0 -143
  1068. package/dist/workflow/runs.js +0 -720
  1069. package/dist/workflow/session.d.ts +0 -34
  1070. package/dist/workflow/session.js +0 -160
  1071. package/dist/workflow/worktrees.d.ts +0 -43
  1072. package/dist/workflow/worktrees.js +0 -307
  1073. package/dist/workflow-state.d.ts +0 -250
  1074. package/dist/workflow-state.js +0 -844
  1075. package/dist/workflow-support.d.ts +0 -28
  1076. package/dist/workflow-support.js +0 -390
  1077. package/dist/workflow.d.ts +0 -327
  1078. package/dist/workflow.js +0 -140
  1079. package/drizzle/d1/0000_treeseed_d1.sql +0 -19
  1080. package/drizzle/market/0000_market_control_plane.sql +0 -3223
  1081. package/drizzle/market/0001_capacity_budget_mode_default.sql +0 -4
  1082. package/drizzle/market/0002_user_email_addresses.sql +0 -26
  1083. package/drizzle/market/0003_project_team_slug_unique.sql +0 -4
  1084. package/drizzle/market/0004_treedx_market_integration.sql +0 -99
  1085. package/drizzle/market/0005_agent_capacity_coordination.sql +0 -145
  1086. package/drizzle/market/0006_provider_assignment_lifecycle.sql +0 -9
  1087. package/drizzle/market/0007_agent_architecture_gap_closure.sql +0 -157
  1088. package/drizzle/market/0008_agent_capacity_operational_closure.sql +0 -27
  1089. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +0 -29
  1090. package/drizzle/market/0010_secrets_capability_persistence.sql +0 -130
  1091. package/drizzle/market/0011_github_app_adapter.sql +0 -47
  1092. package/drizzle/market/0012_workday_test_runs.sql +0 -44
  1093. package/drizzle/market/0013_runtime_task_lifecycle.sql +0 -39
  1094. package/drizzle/market/0014_governance_pipeline.sql +0 -189
  1095. package/drizzle/market/0015_agent_decision_assignment_graphs.sql +0 -60
  1096. package/scripts/verify-driver.ts +0 -51
  1097. package/templates/github/deploy-web.workflow.yml +0 -168
  1098. package/templates/github/hosted-project.workflow.yml +0 -76
  1099. /package/dist/{api/types.js → agent-capacity/contracts/capacity/workdays/workday-records.js} +0 -0
  1100. /package/dist/{hosting/contracts.js → agent-capacity/contracts/operations/workflow-promotion.js} +0 -0
  1101. /package/dist/{platform/contracts.js → agent-capacity/contracts/projects/agents/project-agent-class.js} +0 -0
  1102. /package/dist/{reconcile/contracts.js → agent-capacity/contracts/runtime/runtime-observability.js} +0 -0
  1103. /package/dist/{types/cloudflare.js → agent-capacity/contracts/support/decision-work.js} +0 -0
  1104. /package/dist/{field-aliases.js → entrypoints/models/field-aliases.js} +0 -0
  1105. /package/dist/{sdk-fields.js → entrypoints/models/sdk-fields.js} +0 -0
  1106. /package/dist/{runtime.d.ts → runtime/runtime.d.ts} +0 -0
  1107. /package/dist/{runtime.js → runtime/runtime.js} +0 -0
  1108. /package/dist/treedx/{errors.js → support/errors.js} +0 -0
@@ -1,1874 +0,0 @@
1
- import { mkdtempSync, rmSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
- import { resolve } from "node:path";
4
- import { IacClient } from "railway";
5
- import { connectRailwayServiceSourceWithCli, runRailwayCliJson } from "./railway-cli.js";
6
- import { resolveTreeseedRailwayApiToken } from "../../service-credentials.js";
7
- const DEFAULT_RAILWAY_API_URL = "https://backboard.railway.com/graphql/v2";
8
- const DEFAULT_RAILWAY_WORKSPACE = "knowledge-coop";
9
- let railwayReadActive = false;
10
- const railwayReadWaiters = [];
11
- let railwayReadCooldownUntil = 0;
12
- async function acquireRailwayReadSlot() {
13
- if (railwayReadActive) await new Promise((resolve2) => railwayReadWaiters.push(resolve2));
14
- railwayReadActive = true;
15
- const cooldownMs = Math.max(0, railwayReadCooldownUntil - Date.now());
16
- if (cooldownMs > 0) await new Promise((resolve2) => setTimeout(resolve2, cooldownMs));
17
- return () => {
18
- const next = railwayReadWaiters.shift();
19
- if (next) next();
20
- else railwayReadActive = false;
21
- };
22
- }
23
- function extendRailwayReadCooldown(delayMs) {
24
- railwayReadCooldownUntil = Math.max(railwayReadCooldownUntil, Date.now() + Math.max(0, delayMs));
25
- }
26
- function normalizeRailwayEnvironmentName(value) {
27
- const normalized = typeof value === "string" ? value.trim() : "";
28
- if (!normalized) {
29
- return "";
30
- }
31
- return normalized === "prod" ? "production" : normalized;
32
- }
33
- function createRailwayEnvironmentPatchClient({
34
- env,
35
- fetchImpl
36
- }) {
37
- const token = resolveRailwayApiToken(env);
38
- if (!token) {
39
- throw new Error("Railway API token is required for environment reconciliation.");
40
- }
41
- return new IacClient({
42
- token,
43
- endpoint: resolveRailwayApiUrl(env),
44
- fetch: fetchImpl
45
- });
46
- }
47
- function configuredEnvValue(env, name) {
48
- const value = env?.[name];
49
- return typeof value === "string" && value.trim() ? value.trim() : "";
50
- }
51
- function isUsableRailwayToken(value) {
52
- return typeof value === "string" && value.trim().length >= 8;
53
- }
54
- function resolveRailwayApiToken(env = process.env) {
55
- const token = resolveTreeseedRailwayApiToken(env);
56
- return isUsableRailwayToken(token) ? token : "";
57
- }
58
- function resolveRailwayApiUrl(env = process.env) {
59
- return configuredEnvValue(env, "TREESEED_RAILWAY_API_URL") || DEFAULT_RAILWAY_API_URL;
60
- }
61
- function resolveRailwayWorkspace(env = process.env) {
62
- return configuredEnvValue(env, "TREESEED_RAILWAY_WORKSPACE") || DEFAULT_RAILWAY_WORKSPACE;
63
- }
64
- function normalizeRailwayErrorMessage(payload, fallbackStatus) {
65
- if (payload && typeof payload === "object" && Array.isArray(payload.errors) && payload.errors.length > 0) {
66
- const first = payload.errors[0];
67
- if (first && typeof first === "object" && typeof first.message === "string") {
68
- return first.message;
69
- }
70
- }
71
- return typeof fallbackStatus === "number" ? `Railway API request failed with ${fallbackStatus}.` : "Railway API request failed.";
72
- }
73
- function isRetryableRailwayStatus(status) {
74
- return status === 408 || status === 429 || status >= 500;
75
- }
76
- function parseRetryAfterMs(value) {
77
- if (!value) {
78
- return null;
79
- }
80
- const seconds = Number(value);
81
- if (Number.isFinite(seconds) && seconds >= 0) {
82
- return Math.round(seconds * 1e3);
83
- }
84
- const absoluteTime = Date.parse(value);
85
- if (Number.isFinite(absoluteTime)) {
86
- return Math.max(0, absoluteTime - Date.now());
87
- }
88
- return null;
89
- }
90
- function markRailwayTransientError(error, options = {}) {
91
- const tagged = error;
92
- tagged.treeseedTransient = true;
93
- if (options.rateLimited) tagged.treeseedRateLimited = true;
94
- if (typeof options.retryAfterMs === "number" && Number.isFinite(options.retryAfterMs) && options.retryAfterMs >= 0) {
95
- tagged.treeseedRetryAfterMs = options.retryAfterMs;
96
- }
97
- return tagged;
98
- }
99
- function isTransientRailwayRequestError(error) {
100
- if (error && typeof error === "object" && error.treeseedTransient === true) {
101
- return true;
102
- }
103
- const message = error instanceof Error ? error.message : String(error ?? "");
104
- return /fetch failed|timed out|etimedout|econnreset|enetunreach|temporarily unavailable|aborted|rate limit|too many requests|429/iu.test(message);
105
- }
106
- function railwayConnectionLabel(value) {
107
- return typeof value === "string" && value.trim() ? value.trim() : "";
108
- }
109
- function normalizeConnectionNodes(connection, mapper) {
110
- if (!connection || typeof connection !== "object" || !Array.isArray(connection.edges)) {
111
- return [];
112
- }
113
- return connection.edges.map((edge) => {
114
- if (!edge || typeof edge !== "object") {
115
- return null;
116
- }
117
- const node = edge.node;
118
- return node && typeof node === "object" ? mapper(node) : null;
119
- }).filter(Boolean);
120
- }
121
- function normalizeWorkspace(node) {
122
- const id = railwayConnectionLabel(node.id);
123
- const name = railwayConnectionLabel(node.name);
124
- if (!id || !name) {
125
- return null;
126
- }
127
- return { id, name };
128
- }
129
- function normalizeEnvironment(node) {
130
- const id = railwayConnectionLabel(node.id);
131
- const name = railwayConnectionLabel(node.name);
132
- if (!id || !name) {
133
- return null;
134
- }
135
- return { id, name };
136
- }
137
- function normalizeService(node) {
138
- const id = railwayConnectionLabel(node.id);
139
- const name = railwayConnectionLabel(node.name);
140
- if (!id || !name) {
141
- return null;
142
- }
143
- return { id, name };
144
- }
145
- function normalizeProject(node) {
146
- const id = railwayConnectionLabel(node.id);
147
- const name = railwayConnectionLabel(node.name);
148
- if (!id || !name) {
149
- return null;
150
- }
151
- const services = /* @__PURE__ */ new Map();
152
- for (const service of normalizeConnectionNodes(node.services, normalizeService)) {
153
- services.set(service.id, service);
154
- }
155
- for (const environment of normalizeConnectionNodes(node.environments, (entry) => entry)) {
156
- for (const instance of normalizeConnectionNodes(environment.serviceInstances, (entry) => entry)) {
157
- const serviceId = railwayConnectionLabel(instance.serviceId);
158
- const serviceName = railwayConnectionLabel(instance.serviceName);
159
- if (serviceId && serviceName) {
160
- services.set(serviceId, { id: serviceId, name: serviceName });
161
- }
162
- }
163
- }
164
- return {
165
- id,
166
- name,
167
- workspaceId: railwayConnectionLabel(node.workspaceId) || null,
168
- deletedAt: railwayConnectionLabel(node.deletedAt) || null,
169
- environments: normalizeConnectionNodes(node.environments, normalizeEnvironment),
170
- services: [...services.values()]
171
- };
172
- }
173
- function normalizeServiceInstanceService(node) {
174
- const id = railwayConnectionLabel(node.serviceId);
175
- const name = railwayConnectionLabel(node.serviceName);
176
- if (!id || !name) {
177
- return null;
178
- }
179
- return { id, name };
180
- }
181
- function normalizeVariableMap(value) {
182
- if (!value) {
183
- return {};
184
- }
185
- if (typeof value === "string") {
186
- try {
187
- return normalizeVariableMap(JSON.parse(value));
188
- } catch {
189
- return {};
190
- }
191
- }
192
- if (typeof value !== "object" || Array.isArray(value)) {
193
- return {};
194
- }
195
- return Object.fromEntries(
196
- Object.entries(value).map(([key, entryValue]) => {
197
- if (typeof entryValue === "string") {
198
- return [key, entryValue];
199
- }
200
- if (entryValue && typeof entryValue === "object" && typeof entryValue.value === "string") {
201
- return [key, entryValue.value];
202
- }
203
- return [key, null];
204
- })
205
- );
206
- }
207
- function normalizeRailwayNumber(value) {
208
- if (typeof value === "number" && Number.isFinite(value)) {
209
- return value;
210
- }
211
- if (typeof value === "string" && value.trim()) {
212
- const parsed = Number(value);
213
- return Number.isFinite(parsed) ? parsed : null;
214
- }
215
- return null;
216
- }
217
- function normalizeRailwayCustomDomainDnsRecord(node) {
218
- const fqdn = railwayConnectionLabel(node.fqdn);
219
- if (!fqdn) {
220
- return null;
221
- }
222
- return {
223
- fqdn,
224
- hostlabel: railwayConnectionLabel(node.hostlabel),
225
- recordType: railwayConnectionLabel(node.recordType),
226
- requiredValue: railwayConnectionLabel(node.requiredValue),
227
- currentValue: railwayConnectionLabel(node.currentValue),
228
- status: railwayConnectionLabel(node.status),
229
- zone: railwayConnectionLabel(node.zone),
230
- purpose: railwayConnectionLabel(node.purpose)
231
- };
232
- }
233
- function normalizeRailwayCustomDomain(node) {
234
- const id = railwayConnectionLabel(node.id);
235
- const domain = railwayConnectionLabel(node.domain);
236
- if (!id || !domain) {
237
- return null;
238
- }
239
- const status = node.status && typeof node.status === "object" ? node.status : {};
240
- const dnsRecords = Array.isArray(status.dnsRecords) ? status.dnsRecords.map((entry) => entry && typeof entry === "object" ? normalizeRailwayCustomDomainDnsRecord(entry) : null).filter(Boolean) : [];
241
- return {
242
- id,
243
- domain,
244
- environmentId: railwayConnectionLabel(node.environmentId),
245
- serviceId: railwayConnectionLabel(node.serviceId),
246
- targetPort: typeof node.targetPort === "number" && Number.isFinite(node.targetPort) ? node.targetPort : null,
247
- verified: status.verified === true,
248
- certificateStatus: railwayConnectionLabel(status.certificateStatus) || null,
249
- verificationDnsHost: railwayConnectionLabel(status.verificationDnsHost) || null,
250
- verificationToken: railwayConnectionLabel(status.verificationToken) || null,
251
- dnsRecords
252
- };
253
- }
254
- function normalizeRailwayDomain(node, kind = "service") {
255
- if (!node || typeof node !== "object") {
256
- return null;
257
- }
258
- const record = node;
259
- const id = railwayConnectionLabel(record.id) || railwayConnectionLabel(record.domain);
260
- const domain = railwayConnectionLabel(record.domain);
261
- if (!id || !domain) {
262
- return null;
263
- }
264
- return {
265
- id,
266
- domain,
267
- kind,
268
- environmentId: railwayConnectionLabel(record.environmentId),
269
- serviceId: railwayConnectionLabel(record.serviceId),
270
- targetPort: normalizeRailwayNumber(record.targetPort)
271
- };
272
- }
273
- function normalizeRailwayDomainList(value, kind) {
274
- if (!Array.isArray(value)) {
275
- return [];
276
- }
277
- return value.map((entry) => normalizeRailwayDomain(entry, kind)).filter(Boolean);
278
- }
279
- function normalizeRailwayVolumeInstance(node) {
280
- const id = railwayConnectionLabel(node.id);
281
- if (!id) {
282
- return null;
283
- }
284
- const sizeGb = normalizeRailwayNumber(node.sizeGb ?? node.sizeGB ?? node.size_gb ?? node.capacityGb ?? node.capacityGB);
285
- const usedGb = normalizeRailwayNumber(node.usedGb ?? node.usedGB ?? node.used_gb ?? node.currentUsageGb ?? node.currentUsageGB);
286
- return {
287
- id,
288
- serviceId: railwayConnectionLabel(node.serviceId) || railwayConnectionLabel(node.service?.id) || null,
289
- environmentId: railwayConnectionLabel(node.environmentId) || railwayConnectionLabel(node.environment?.id) || null,
290
- mountPath: railwayConnectionLabel(node.mountPath) || railwayConnectionLabel(node.mount_path) || null,
291
- state: railwayConnectionLabel(node.state) || null,
292
- isPendingDeletion: node.isPendingDeletion === true || node.pendingDeletion === true,
293
- deletedAt: railwayConnectionLabel(node.deletedAt) || null,
294
- sizeGb,
295
- usedGb
296
- };
297
- }
298
- function isActiveRailwayVolumeInstance(instance) {
299
- const state = String(instance.state ?? "READY").toUpperCase();
300
- return !instance.isPendingDeletion && !(typeof instance.deletedAt === "string" && instance.deletedAt.trim()) && state !== "DELETING" && state !== "DELETED";
301
- }
302
- function normalizeVolumeInstances(value) {
303
- const direct = Array.isArray(value) ? value : null;
304
- if (direct) {
305
- return direct.map((entry) => entry && typeof entry === "object" ? normalizeRailwayVolumeInstance(entry) : null).filter(Boolean);
306
- }
307
- return normalizeConnectionNodes(value, normalizeRailwayVolumeInstance);
308
- }
309
- function mergeRailwayVolumeInstances(instances) {
310
- const byId = /* @__PURE__ */ new Map();
311
- for (const instance of instances) {
312
- const existing = byId.get(instance.id);
313
- byId.set(instance.id, existing ? {
314
- ...existing,
315
- serviceId: existing.serviceId || instance.serviceId,
316
- environmentId: existing.environmentId || instance.environmentId,
317
- mountPath: existing.mountPath || instance.mountPath,
318
- state: [existing.state, instance.state].find((state) => /^(?:DELETED|DELETING)$/u.test(String(state ?? "").toUpperCase())) ?? existing.state ?? instance.state,
319
- isPendingDeletion: existing.isPendingDeletion || instance.isPendingDeletion,
320
- deletedAt: existing.deletedAt || instance.deletedAt,
321
- sizeGb: existing.sizeGb ?? instance.sizeGb,
322
- usedGb: existing.usedGb ?? instance.usedGb
323
- } : instance);
324
- }
325
- return [...byId.values()];
326
- }
327
- function normalizeRailwayVolume(node) {
328
- const id = railwayConnectionLabel(node.id);
329
- if (!id) {
330
- return null;
331
- }
332
- return {
333
- id,
334
- name: railwayConnectionLabel(node.name),
335
- projectId: railwayConnectionLabel(node.projectId) || null,
336
- instances: mergeRailwayVolumeInstances([
337
- ...normalizeVolumeInstances(node.instances),
338
- ...normalizeVolumeInstances(node.volumeInstances),
339
- ...normalizeVolumeInstances(node.volume_instances)
340
- ])
341
- };
342
- }
343
- function collectRailwayVolumes(value, seen = /* @__PURE__ */ new Set()) {
344
- const volumes = [];
345
- const visit = (entry) => {
346
- if (!entry || typeof entry !== "object") {
347
- return;
348
- }
349
- if (seen.has(entry)) {
350
- return;
351
- }
352
- seen.add(entry);
353
- if (Array.isArray(entry)) {
354
- for (const item of entry) {
355
- visit(item);
356
- }
357
- return;
358
- }
359
- const record = entry;
360
- const volume = normalizeRailwayVolume(record);
361
- if (volume && (record.volumeInstances !== void 0 || record.instances !== void 0 || record.projectId !== void 0 || record.name !== void 0)) {
362
- volumes.push(volume);
363
- }
364
- for (const child of Object.values(record)) {
365
- visit(child);
366
- }
367
- };
368
- visit(value);
369
- const byId = /* @__PURE__ */ new Map();
370
- for (const volume of volumes) {
371
- const existing = byId.get(volume.id);
372
- byId.set(volume.id, existing ? {
373
- ...existing,
374
- name: existing.name || volume.name,
375
- projectId: existing.projectId || volume.projectId,
376
- instances: mergeRailwayVolumeInstances([...existing.instances, ...volume.instances])
377
- } : volume);
378
- }
379
- return [...byId.values()];
380
- }
381
- function railwayApiTimeoutMs(env, explicitTimeoutMs) {
382
- if (typeof explicitTimeoutMs === "number" && Number.isFinite(explicitTimeoutMs) && explicitTimeoutMs > 0) {
383
- return explicitTimeoutMs;
384
- }
385
- const configured = Number.parseInt(String(env.TREESEED_RAILWAY_API_TIMEOUT_MS ?? "").trim(), 10);
386
- return Number.isFinite(configured) && configured > 0 ? Math.min(configured, 15e3) : 15e3;
387
- }
388
- function assertRailwayGraphqlReadOnly(document) {
389
- const operation = document.replace(/^\uFEFF/u, "").replace(/#[^\r\n]*/gu, "").trimStart();
390
- if (!operation.startsWith("query ") && !operation.startsWith("query\n") && !operation.startsWith("{")) {
391
- throw new Error("Direct Railway GraphQL is read-only. Use the official Railway SDK/IaC client, or the managed Railway CLI when the public SDK lacks the operation.");
392
- }
393
- }
394
- async function railwayGraphqlRequest({
395
- query,
396
- variables,
397
- env = process.env,
398
- apiToken,
399
- apiUrl,
400
- fetchImpl = fetch,
401
- timeoutMs,
402
- retries = 3
403
- }) {
404
- assertRailwayGraphqlReadOnly(query);
405
- const token = apiToken || resolveRailwayApiToken(env);
406
- if (!token) {
407
- throw new Error("Configure TREESEED_RAILWAY_API_TOKEN before invoking Railway APIs.");
408
- }
409
- const requestTimeoutMs = railwayApiTimeoutMs(env, timeoutMs);
410
- if (env.TREESEED_RECONCILE_TRACE === "1") {
411
- process.stderr.write(`[trsd][railway][api:request] timeoutMs=${requestTimeoutMs} retries=${retries}
412
- `);
413
- }
414
- let attempt = 0;
415
- for (; ; ) {
416
- const controller = new AbortController();
417
- let timer = null;
418
- let releaseReadSlot = null;
419
- try {
420
- releaseReadSlot = await acquireRailwayReadSlot();
421
- const response = await Promise.race([
422
- fetchImpl(apiUrl || resolveRailwayApiUrl(env), {
423
- method: "POST",
424
- headers: {
425
- authorization: `Bearer ${token}`,
426
- "content-type": "application/json"
427
- },
428
- body: JSON.stringify({ query, variables }),
429
- signal: controller.signal
430
- }).then(async (fetchResponse) => ({
431
- ok: fetchResponse.ok,
432
- status: fetchResponse.status,
433
- payload: await fetchResponse.json().catch(() => ({})),
434
- retryAfter: fetchResponse.headers.get("retry-after")
435
- })),
436
- new Promise((_, reject) => {
437
- timer = setTimeout(() => {
438
- controller.abort();
439
- reject(markRailwayTransientError(new Error(`Railway API request timed out after ${requestTimeoutMs}ms.`)));
440
- }, requestTimeoutMs);
441
- })
442
- ]);
443
- const payload = response.payload;
444
- if (!response.ok || Array.isArray(payload.errors) && payload.errors.length > 0) {
445
- const message = normalizeRailwayErrorMessage(payload, response.status);
446
- const hasGraphqlErrors = Array.isArray(payload.errors) && payload.errors.length > 0;
447
- const retryAfterMs = parseRetryAfterMs(response.retryAfter);
448
- const shouldRetry = isRetryableRailwayStatus(response.status) || /rate limit|too many requests/iu.test(message);
449
- const error = new Error(message);
450
- if (shouldRetry || hasGraphqlErrors && /rate limit|too many requests/iu.test(message)) {
451
- const rateLimited = response.status === 429 || /rate limit|too many requests/iu.test(message);
452
- if (rateLimited) extendRailwayReadCooldown(retryAfterMs ?? 15e3);
453
- throw markRailwayTransientError(error, { retryAfterMs, rateLimited });
454
- }
455
- throw error;
456
- }
457
- return payload;
458
- } catch (error) {
459
- if (attempt >= retries || !isTransientRailwayRequestError(error)) {
460
- throw error;
461
- }
462
- attempt += 1;
463
- const retryAfterMs = error && typeof error === "object" && typeof error.treeseedRetryAfterMs === "number" ? Math.max(0, Number(error.treeseedRetryAfterMs)) : null;
464
- const rateLimited = error && typeof error === "object" && error.treeseedRateLimited === true;
465
- const backoffMs = retryAfterMs !== null ? Math.min(retryAfterMs, 18e4) : rateLimited ? [15e3, 45e3, 9e4][attempt - 1] ?? 9e4 : Math.min(500 * 2 ** (attempt - 1), 4e3);
466
- if (rateLimited) process.stderr.write(`[trsd][railway][api:rate-limit] attempt=${attempt + 1} waitMs=${backoffMs}
467
- `);
468
- let remainingMs = backoffMs;
469
- while (remainingMs > 0) {
470
- const sliceMs = Math.min(15e3, remainingMs);
471
- await new Promise((resolve2) => setTimeout(resolve2, sliceMs));
472
- remainingMs -= sliceMs;
473
- if (rateLimited && remainingMs > 0) {
474
- process.stderr.write(`[trsd][railway][api:rate-limit] cooldownRemainingMs=${remainingMs}
475
- `);
476
- }
477
- }
478
- } finally {
479
- releaseReadSlot?.();
480
- if (timer) {
481
- clearTimeout(timer);
482
- }
483
- }
484
- }
485
- }
486
- async function getRailwayAuthProfile({
487
- env = process.env,
488
- fetchImpl = fetch
489
- }) {
490
- const payload = await railwayGraphqlRequest({
491
- query: `
492
- query TreeseedRailwayAuthProfile {
493
- me {
494
- id
495
- name
496
- email
497
- workspaces {
498
- id
499
- name
500
- }
501
- }
502
- }
503
- `.trim(),
504
- env,
505
- fetchImpl
506
- });
507
- const me = payload.data?.me;
508
- return {
509
- id: railwayConnectionLabel(me?.id) || null,
510
- name: railwayConnectionLabel(me?.name) || null,
511
- email: railwayConnectionLabel(me?.email) || null,
512
- workspaces: Array.isArray(me?.workspaces) ? me.workspaces.map((workspace) => workspace && typeof workspace === "object" ? normalizeWorkspace(workspace) : null).filter(Boolean) : []
513
- };
514
- }
515
- async function resolveRailwayWorkspaceContext({
516
- env = process.env,
517
- workspace,
518
- fetchImpl = fetch
519
- }) {
520
- const desired = (workspace || resolveRailwayWorkspace(env)).trim();
521
- const profile = await getRailwayAuthProfile({ env, fetchImpl });
522
- const match = profile.workspaces.find((candidate) => candidate.id === desired || candidate.name === desired) ?? null;
523
- if (!match) {
524
- const available = profile.workspaces.map((candidate) => candidate.name).join(", ") || "(none)";
525
- throw new Error(`Railway workspace ${desired} is not visible to the current token. Available workspaces: ${available}.`);
526
- }
527
- return match;
528
- }
529
- async function listRailwayProjects({
530
- env = process.env,
531
- workspaceId,
532
- fetchImpl = fetch
533
- }) {
534
- const payload = await railwayGraphqlRequest({
535
- query: `
536
- query TreeseedRailwayProjects($workspaceId: String!, $first: Int!) {
537
- projects(workspaceId: $workspaceId, first: $first) {
538
- edges {
539
- node {
540
- id
541
- name
542
- workspaceId
543
- deletedAt
544
- environments(first: 50) {
545
- edges {
546
- node {
547
- id
548
- name
549
- }
550
- }
551
- }
552
- services(first: 50) {
553
- edges {
554
- node {
555
- id
556
- name
557
- }
558
- }
559
- }
560
- }
561
- }
562
- }
563
- }
564
- `.trim(),
565
- variables: { workspaceId, first: 100 },
566
- env,
567
- fetchImpl
568
- });
569
- return normalizeConnectionNodes(payload.data?.projects, normalizeProject);
570
- }
571
- async function getRailwayProject({
572
- projectId,
573
- env = process.env,
574
- fetchImpl = fetch
575
- }) {
576
- const payload = await railwayGraphqlRequest({
577
- query: `
578
- query TreeseedRailwayProject($projectId: String!) {
579
- project(id: $projectId) {
580
- id
581
- name
582
- workspaceId
583
- deletedAt
584
- environments(first: 50) {
585
- edges {
586
- node {
587
- id
588
- name
589
- }
590
- }
591
- }
592
- services(first: 50) {
593
- edges {
594
- node {
595
- id
596
- name
597
- }
598
- }
599
- }
600
- }
601
- }
602
- `.trim(),
603
- variables: { projectId },
604
- env,
605
- fetchImpl
606
- });
607
- return payload.data?.project ? normalizeProject(payload.data.project) : null;
608
- }
609
- async function ensureRailwayProject({
610
- projectName,
611
- projectId,
612
- defaultEnvironmentName = "staging",
613
- env = process.env,
614
- workspace,
615
- fetchImpl = fetch
616
- }) {
617
- const workspaceContext = await resolveRailwayWorkspaceContext({ env, workspace, fetchImpl });
618
- const projects = await listRailwayProjects({ env, workspaceId: workspaceContext.id, fetchImpl });
619
- const desiredProjectName = railwayConnectionLabel(projectName);
620
- const desiredProjectId = railwayConnectionLabel(projectId);
621
- const existing = projects.find(
622
- (project2) => !project2.deletedAt && (desiredProjectId && project2.id === desiredProjectId || desiredProjectName && project2.name === desiredProjectName)
623
- ) ?? null;
624
- if (existing) {
625
- return { workspace: workspaceContext, project: existing, created: false };
626
- }
627
- if (!desiredProjectName) {
628
- throw new Error("Railway project creation requires a project name.");
629
- }
630
- void defaultEnvironmentName;
631
- const tempRoot = mkdtempSync(resolve(tmpdir(), "treeseed-railway-init-"));
632
- try {
633
- await runRailwayCliJson({ args: ["init", "--name", desiredProjectName, "--workspace", workspaceContext.id, "--json"], env, cwd: tempRoot });
634
- } finally {
635
- rmSync(tempRoot, { recursive: true, force: true });
636
- }
637
- const project = (await listRailwayProjects({ env, workspaceId: workspaceContext.id, fetchImpl })).find((entry) => entry.name === desiredProjectName && !entry.deletedAt) ?? null;
638
- if (!project) {
639
- throw new Error(`Railway project create did not return a usable project for ${desiredProjectName}.`);
640
- }
641
- return { workspace: workspaceContext, project, created: true };
642
- }
643
- async function ensureRailwayEnvironment({
644
- projectId,
645
- environmentName,
646
- env = process.env,
647
- fetchImpl = fetch
648
- }) {
649
- const environments = await listRailwayEnvironments({ projectId, env, fetchImpl });
650
- const existing = environments.find((environment2) => environment2.name === environmentName || environment2.id === environmentName) ?? null;
651
- if (existing) {
652
- return { environment: existing, created: false };
653
- }
654
- const tempRoot = mkdtempSync(resolve(tmpdir(), "treeseed-railway-environment-"));
655
- try {
656
- await runRailwayCliJson({ args: ["link", projectId, "--json"], env, cwd: tempRoot });
657
- await runRailwayCliJson({ args: ["environment", "new", environmentName, "--json"], env, cwd: tempRoot });
658
- } finally {
659
- rmSync(tempRoot, { recursive: true, force: true });
660
- }
661
- const environment = (await listRailwayEnvironments({ projectId, env, fetchImpl })).find((entry) => entry.name === environmentName) ?? null;
662
- if (!environment) {
663
- throw new Error(`Railway environment create did not return a usable environment for ${environmentName}.`);
664
- }
665
- return { environment, created: true };
666
- }
667
- async function listRailwayEnvironments({
668
- projectId,
669
- env = process.env,
670
- fetchImpl = fetch
671
- }) {
672
- const payload = await railwayGraphqlRequest({
673
- query: `
674
- query TreeseedRailwayProjectEnvironments($projectId: String!) {
675
- project(id: $projectId) {
676
- id
677
- environments(first: 50) {
678
- edges {
679
- node {
680
- id
681
- name
682
- }
683
- }
684
- }
685
- }
686
- }
687
- `.trim(),
688
- variables: { projectId },
689
- env,
690
- fetchImpl
691
- });
692
- return normalizeConnectionNodes(payload.data?.project ? payload.data.project.environments : null, normalizeEnvironment);
693
- }
694
- async function listRailwayEnvironmentServices({
695
- environmentId,
696
- env = process.env,
697
- fetchImpl = fetch
698
- }) {
699
- const payload = await railwayGraphqlRequest({
700
- query: `
701
- query TreeseedRailwayEnvironmentServices($environmentId: String!) {
702
- environment(id: $environmentId) {
703
- id
704
- name
705
- serviceInstances(first: 100) {
706
- edges {
707
- node {
708
- id
709
- serviceId
710
- serviceName
711
- environmentId
712
- }
713
- }
714
- }
715
- }
716
- }
717
- `.trim(),
718
- variables: { environmentId },
719
- env,
720
- fetchImpl
721
- });
722
- return normalizeConnectionNodes(
723
- payload.data?.environment ? payload.data.environment.serviceInstances : null,
724
- normalizeServiceInstanceService
725
- );
726
- }
727
- async function ensureRailwayService({
728
- projectId,
729
- serviceName,
730
- serviceId,
731
- environmentId,
732
- imageRef,
733
- sourceRepo,
734
- sourceBranch,
735
- env = process.env,
736
- fetchImpl = fetch
737
- }) {
738
- const services = await listRailwayServices({ projectId, env, fetchImpl });
739
- const desiredServiceName = railwayConnectionLabel(serviceName);
740
- const desiredServiceId = railwayConnectionLabel(serviceId);
741
- let existing = services.find(
742
- (service2) => desiredServiceId && service2.id === desiredServiceId || desiredServiceName && service2.name === desiredServiceName
743
- ) ?? null;
744
- if (!existing && environmentId) {
745
- const environmentServices = await listRailwayEnvironmentServices({ environmentId, env, fetchImpl }).catch(() => []);
746
- existing = environmentServices.find(
747
- (service2) => desiredServiceId && service2.id === desiredServiceId || desiredServiceName && service2.name === desiredServiceName
748
- ) ?? null;
749
- }
750
- if (existing) {
751
- const desiredImageRef = railwayConnectionLabel(imageRef);
752
- const desiredSourceRepo = railwayConnectionLabel(sourceRepo);
753
- if (desiredSourceRepo) {
754
- try {
755
- await updateRailwayServiceGitSource({
756
- projectId,
757
- serviceId: existing.id,
758
- environmentId,
759
- sourceRepo: desiredSourceRepo,
760
- sourceBranch,
761
- env,
762
- fetchImpl
763
- });
764
- } catch (error) {
765
- if (!looksLikeRailwayImageSourceUpdateUnsupported(error)) {
766
- throw error;
767
- }
768
- throw new Error(
769
- `Railway Git source update for existing service ${existing.name} (${existing.id}) is unsupported; refusing to delete and recreate an existing service. Repair the service in place or use a provider-supported source update.`
770
- );
771
- }
772
- return { service: existing, created: false };
773
- }
774
- if (desiredImageRef) {
775
- try {
776
- await updateRailwayServiceImageSource({
777
- projectId,
778
- serviceId: existing.id,
779
- environmentId,
780
- imageRef: desiredImageRef,
781
- env,
782
- fetchImpl
783
- });
784
- } catch (error) {
785
- if (!looksLikeRailwayImageSourceUpdateUnsupported(error)) {
786
- throw error;
787
- }
788
- throw new Error(
789
- `Railway image source update for existing service ${existing.name} (${existing.id}) is unsupported; refusing to delete and recreate an existing service. Repair the service in place or use a provider-supported image source update.`
790
- );
791
- }
792
- }
793
- return { service: existing, created: false };
794
- }
795
- if (!desiredServiceName) {
796
- throw new Error("Railway service creation requires a service name.");
797
- }
798
- const service = await createRailwayImageService({
799
- projectId,
800
- environmentId,
801
- serviceName: desiredServiceName,
802
- imageRef,
803
- sourceRepo,
804
- sourceBranch,
805
- env,
806
- fetchImpl
807
- });
808
- return { service, created: true };
809
- }
810
- async function createRailwayImageService({
811
- projectId,
812
- serviceName,
813
- environmentId,
814
- imageRef,
815
- sourceRepo,
816
- sourceBranch,
817
- env = process.env,
818
- fetchImpl = fetch
819
- }) {
820
- const desiredSourceRepo = railwayConnectionLabel(sourceRepo);
821
- const desiredImageRef = railwayConnectionLabel(imageRef);
822
- const targetEnvironmentId = railwayConnectionLabel(environmentId);
823
- if (!targetEnvironmentId) throw new Error(`Railway service creation requires an environment id for ${serviceName}.`);
824
- const client = createRailwayEnvironmentPatchClient({ env, fetchImpl });
825
- await client.stageEnvironmentChanges({
826
- environmentId: targetEnvironmentId,
827
- merge: true,
828
- patch: {
829
- services: {
830
- [serviceName]: {
831
- isCreated: true,
832
- source: desiredSourceRepo ? { repo: desiredSourceRepo, branch: railwayConnectionLabel(sourceBranch) || null, image: null } : desiredImageRef ? { image: desiredImageRef, repo: null, branch: null } : null
833
- }
834
- }
835
- }
836
- });
837
- await client.commitStagedPatch({
838
- environmentId: targetEnvironmentId,
839
- message: `Treeseed create service ${serviceName}`,
840
- skipDeploys: true
841
- });
842
- const service = (await listRailwayServices({ projectId, env, fetchImpl })).find((entry) => entry.name === serviceName) ?? null;
843
- if (!service) {
844
- throw new Error(`Railway service create did not return a usable service for ${serviceName}.`);
845
- }
846
- return service;
847
- }
848
- function looksLikeRailwayImageSourceUpdateUnsupported(error) {
849
- const message = error instanceof Error ? error.message : String(error ?? "");
850
- return /Problem processing request|source|image|ServiceUpdateInput/iu.test(message);
851
- }
852
- async function updateRailwayServiceImageSource({
853
- projectId,
854
- serviceId,
855
- environmentId,
856
- imageRef,
857
- env = process.env
858
- }) {
859
- const desiredImage = railwayConnectionLabel(imageRef);
860
- if (!serviceId || !desiredImage) {
861
- throw new Error("Railway service image source update requires a service id and image reference.");
862
- }
863
- const targetEnvironmentId = railwayConnectionLabel(environmentId);
864
- if (!targetEnvironmentId) throw new Error(`Railway service image source update requires an environment id for ${serviceId}.`);
865
- await connectRailwayServiceSourceWithCli({
866
- projectId,
867
- environmentId: targetEnvironmentId,
868
- serviceId,
869
- image: desiredImage,
870
- env
871
- });
872
- return { id: serviceId, name: serviceId };
873
- }
874
- async function updateRailwayServiceGitSource({
875
- projectId,
876
- serviceId,
877
- environmentId,
878
- sourceRepo,
879
- sourceBranch,
880
- env = process.env
881
- }) {
882
- const desiredRepo = railwayConnectionLabel(sourceRepo);
883
- if (!serviceId || !desiredRepo) {
884
- throw new Error("Railway service Git source update requires a service id and repository slug.");
885
- }
886
- const targetEnvironmentId = railwayConnectionLabel(environmentId);
887
- if (!targetEnvironmentId) throw new Error(`Railway service Git source update requires an environment id for ${serviceId}.`);
888
- await connectRailwayServiceSourceWithCli({
889
- projectId,
890
- environmentId: targetEnvironmentId,
891
- serviceId,
892
- repo: desiredRepo,
893
- branch: railwayConnectionLabel(sourceBranch) || null,
894
- env
895
- });
896
- return { id: serviceId, name: serviceId };
897
- }
898
- async function ensureRailwayGeneratedServiceDomain({
899
- projectId,
900
- environmentId,
901
- serviceId,
902
- targetPort,
903
- env = process.env,
904
- fetchImpl = fetch
905
- }) {
906
- const domains = await listRailwayServiceDomains({ projectId, environmentId, serviceId, env, fetchImpl });
907
- const existing = domains.find((domain2) => domain2.kind === "service") ?? domains.find((domain2) => domain2.domain.endsWith(".railway.app")) ?? null;
908
- if (existing) {
909
- return { domain: existing, created: false };
910
- }
911
- await runRailwayCliJson({
912
- args: [
913
- "domain",
914
- "--project",
915
- projectId,
916
- "--environment",
917
- environmentId,
918
- "--service",
919
- serviceId,
920
- ...Number.isFinite(Number(targetPort)) ? ["--port", String(Number(targetPort))] : [],
921
- "--json"
922
- ],
923
- env
924
- });
925
- const domain = (await listRailwayServiceDomains({ projectId, environmentId, serviceId, env, fetchImpl })).find((entry) => entry.kind === "service" || entry.domain.endsWith(".railway.app")) ?? null;
926
- if (!domain) {
927
- throw new Error("Railway service domain create did not return a usable domain.");
928
- }
929
- return { domain, created: true };
930
- }
931
- async function listRailwayServiceDomains({
932
- projectId,
933
- environmentId,
934
- serviceId,
935
- env = process.env,
936
- fetchImpl = fetch
937
- }) {
938
- const payload = await railwayGraphqlRequest({
939
- query: `
940
- query TreeseedRailwayServiceDomains($projectId: String!, $environmentId: String!, $serviceId: String!) {
941
- domains(projectId: $projectId, environmentId: $environmentId, serviceId: $serviceId) {
942
- serviceDomains {
943
- id
944
- domain
945
- serviceId
946
- environmentId
947
- targetPort
948
- }
949
- customDomains {
950
- id
951
- domain
952
- serviceId
953
- environmentId
954
- targetPort
955
- }
956
- }
957
- }
958
- `.trim(),
959
- variables: { projectId, environmentId, serviceId },
960
- env,
961
- fetchImpl
962
- });
963
- const domains = payload.data?.domains && typeof payload.data.domains === "object" ? payload.data.domains : {};
964
- return [
965
- ...normalizeRailwayDomainList(domains.serviceDomains, "service"),
966
- ...normalizeRailwayDomainList(domains.customDomains, "custom")
967
- ];
968
- }
969
- async function deployRailwayServiceInstance({
970
- projectId,
971
- serviceId,
972
- environmentId,
973
- env = process.env,
974
- fetchImpl = fetch
975
- }) {
976
- void fetchImpl;
977
- const targetProjectId = railwayConnectionLabel(projectId) || configuredEnvValue(env, "TREESEED_RAILWAY_PROJECT_ID");
978
- if (!targetProjectId) throw new Error(`Railway CLI redeploy requires a project id for service ${serviceId}.`);
979
- const result = await runRailwayCliJson({
980
- args: ["service", "redeploy", "--project", targetProjectId, "--environment", environmentId, "--service", serviceId, "--from-source", "--yes", "--json"],
981
- env
982
- });
983
- return { deploymentId: railwayConnectionLabel(result.deploymentId ?? result.id) || null };
984
- }
985
- async function updateRailwayServiceName({
986
- serviceId,
987
- name,
988
- env = process.env,
989
- fetchImpl = fetch
990
- }) {
991
- const desiredName = railwayConnectionLabel(name);
992
- if (!serviceId || !desiredName) {
993
- throw new Error("Railway service rename requires a service id and name.");
994
- }
995
- void env;
996
- void fetchImpl;
997
- throw new Error(`Railway service rename ${serviceId} -> ${desiredName} is not exposed by the official SDK or CLI; direct GraphQL mutation is prohibited.`);
998
- }
999
- async function ensureRailwayPostgresService({
1000
- projectId,
1001
- environmentId,
1002
- serviceName,
1003
- env = process.env,
1004
- fetchImpl = fetch,
1005
- maxAttempts = 40
1006
- }) {
1007
- const desiredServiceName = railwayConnectionLabel(serviceName);
1008
- if (!desiredServiceName) {
1009
- throw new Error("Railway Postgres service creation requires a service name.");
1010
- }
1011
- const services = await listRailwayServices({ projectId, env, fetchImpl });
1012
- const existing = services.find((service) => service.name === desiredServiceName || service.id === desiredServiceName) ?? null;
1013
- if (existing) {
1014
- const proof = await inspectRailwayPostgresService({ projectId, environmentId, serviceId: existing.id, env, fetchImpl });
1015
- if (proof.ok) {
1016
- return { service: existing, created: false, proof };
1017
- }
1018
- throw new Error(
1019
- `Railway Postgres service ${existing.name} (${existing.id}) failed proof; refusing to delete and recreate an existing service. Repair the existing database service in place and rerun reconciliation.`
1020
- );
1021
- }
1022
- const template = await getRailwayTemplateByCode({ code: "postgres", env, fetchImpl });
1023
- await deployRailwayTemplate({
1024
- templateId: template.id,
1025
- serializedConfig: template.serializedConfig,
1026
- projectId,
1027
- environmentId,
1028
- env,
1029
- fetchImpl
1030
- });
1031
- const settled = await waitForRailwayPostgresTemplateService({
1032
- projectId,
1033
- environmentId,
1034
- desiredServiceName,
1035
- env,
1036
- fetchImpl,
1037
- maxAttempts
1038
- });
1039
- return { service: settled.service, created: true, proof: settled.proof };
1040
- }
1041
- async function getRailwayTemplateByCode({
1042
- code,
1043
- env = process.env,
1044
- fetchImpl = fetch
1045
- }) {
1046
- const payload = await railwayGraphqlRequest({
1047
- query: `
1048
- query TreeseedRailwayTemplate($code: String!) {
1049
- template(code: $code) {
1050
- id
1051
- code
1052
- name
1053
- serializedConfig
1054
- }
1055
- }
1056
- `.trim(),
1057
- variables: { code },
1058
- env,
1059
- fetchImpl,
1060
- timeoutMs: 15e3,
1061
- retries: 1
1062
- });
1063
- const template = payload.data?.template;
1064
- const id = railwayConnectionLabel(template?.id);
1065
- if (!id || !template || typeof template !== "object") {
1066
- throw new Error(`Railway Postgres template "${code}" was not found through the Railway API.`);
1067
- }
1068
- return {
1069
- id,
1070
- code: railwayConnectionLabel(template.code) || null,
1071
- name: railwayConnectionLabel(template.name) || null,
1072
- serializedConfig: normalizeTemplateSerializedConfig(template.serializedConfig)
1073
- };
1074
- }
1075
- function normalizeTemplateSerializedConfig(value) {
1076
- if (typeof value === "string") {
1077
- try {
1078
- const parsed = JSON.parse(value);
1079
- return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
1080
- } catch {
1081
- return {};
1082
- }
1083
- }
1084
- return value && typeof value === "object" && !Array.isArray(value) ? value : {};
1085
- }
1086
- async function deployRailwayTemplate({
1087
- templateId,
1088
- serializedConfig,
1089
- projectId,
1090
- environmentId,
1091
- env = process.env,
1092
- fetchImpl = fetch
1093
- }) {
1094
- void serializedConfig;
1095
- void env;
1096
- void fetchImpl;
1097
- throw new Error(`Railway template deployment ${templateId} into ${projectId}/${environmentId} is not exposed non-interactively by the official SDK or CLI; direct GraphQL mutation is prohibited.`);
1098
- }
1099
- async function waitForRailwayPostgresTemplateService({
1100
- projectId,
1101
- environmentId,
1102
- desiredServiceName,
1103
- env = process.env,
1104
- fetchImpl = fetch,
1105
- maxAttempts = 40
1106
- }) {
1107
- let lastProof = null;
1108
- for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
1109
- const services = await listRailwayServices({ projectId, env, fetchImpl });
1110
- for (const service of services) {
1111
- const proof = await inspectRailwayPostgresService({
1112
- projectId,
1113
- environmentId,
1114
- serviceId: service.id,
1115
- env,
1116
- fetchImpl
1117
- });
1118
- if (proof.ok) {
1119
- const renamed = service.name === desiredServiceName ? service : await updateRailwayServiceName({ serviceId: service.id, name: desiredServiceName, env, fetchImpl });
1120
- return { service: renamed, proof };
1121
- }
1122
- lastProof = proof;
1123
- }
1124
- await new Promise((resolve2) => setTimeout(resolve2, 3e3));
1125
- }
1126
- throw new Error(`Railway Postgres template deployment did not produce a managed PostgreSQL service named ${desiredServiceName}. Last proof: ${lastProof?.message ?? "no candidate service observed"}`);
1127
- }
1128
- async function inspectRailwayPostgresService({
1129
- projectId,
1130
- environmentId,
1131
- serviceId,
1132
- env = process.env,
1133
- fetchImpl = fetch
1134
- }) {
1135
- const variables = await listRailwayVariables({ projectId, environmentId, serviceId, env, fetchImpl }).catch(() => ({}));
1136
- const hasConnectionVars = typeof variables.DATABASE_URL === "string" && typeof variables.PGHOST === "string" && typeof variables.PGUSER === "string" && typeof variables.PGPASSWORD === "string" && typeof variables.PGDATABASE === "string";
1137
- const volumes = await listRailwayVolumes({ projectId, env, fetchImpl }).catch(() => []);
1138
- const volume = volumes.find((candidate) => candidate.instances.some(
1139
- (instance) => instance.serviceId === serviceId && instance.environmentId === environmentId && instance.mountPath === "/var/lib/postgresql/data"
1140
- )) ?? null;
1141
- const deployment = await inspectRailwayServiceDeploymentHealth({ serviceId, environmentId, env, fetchImpl }).catch((error) => ({
1142
- ok: false,
1143
- status: null,
1144
- message: error instanceof Error ? error.message : String(error ?? "Unable to inspect PostgreSQL deployment health.")
1145
- }));
1146
- return {
1147
- ok: hasConnectionVars && Boolean(volume) && deployment.ok,
1148
- variableKeys: Object.keys(variables).sort(),
1149
- volumeId: volume?.id ?? null,
1150
- deploymentStatus: deployment.status,
1151
- message: hasConnectionVars ? volume ? deployment.ok ? "Railway managed PostgreSQL markers are present and the deployment is healthy." : `Railway managed PostgreSQL markers are present, but deployment health is not ready. ${deployment.message}` : "PostgreSQL connection variables exist, but the managed data volume is missing." : "PostgreSQL connection variables are missing."
1152
- };
1153
- }
1154
- async function inspectRailwayServiceDeploymentHealth({
1155
- serviceId,
1156
- environmentId,
1157
- env = process.env,
1158
- fetchImpl = fetch
1159
- }) {
1160
- const payload = await railwayGraphqlRequest({
1161
- query: `
1162
- query TreeseedRailwayServiceDeploymentHealth($serviceId: String!, $environmentId: String!) {
1163
- serviceInstance(serviceId: $serviceId, environmentId: $environmentId) {
1164
- latestDeployment {
1165
- status
1166
- deploymentStopped
1167
- meta
1168
- instances {
1169
- status
1170
- }
1171
- }
1172
- }
1173
- }
1174
- `.trim(),
1175
- variables: { serviceId, environmentId },
1176
- env,
1177
- fetchImpl
1178
- });
1179
- const deployment = payload.data?.serviceInstance?.latestDeployment;
1180
- const status = railwayConnectionLabel(deployment?.status)?.toUpperCase() ?? null;
1181
- const instanceStatuses = Array.isArray(deployment?.instances) ? deployment.instances.map((instance) => railwayConnectionLabel(instance?.status)?.toUpperCase()).filter(Boolean) : [];
1182
- const stopped = deployment?.deploymentStopped === true;
1183
- const ok = status === "SUCCESS" && !stopped && (instanceStatuses.length === 0 || instanceStatuses.some((candidate) => candidate === "RUNNING"));
1184
- return {
1185
- ok,
1186
- status,
1187
- deploymentStopped: stopped,
1188
- instanceStatuses,
1189
- branch: railwayConnectionLabel(deployment?.meta?.branch) || null,
1190
- repo: railwayConnectionLabel(deployment?.meta?.repo) || null,
1191
- rootDirectory: railwayConnectionLabel(deployment?.meta?.rootDirectory) || null,
1192
- commitHash: railwayConnectionLabel(deployment?.meta?.commitHash) || null,
1193
- image: railwayConnectionLabel(deployment?.meta?.image) || null,
1194
- requiredMountPath: railwayConnectionLabel(deployment?.meta?.serviceManifest?.deploy?.requiredMountPath) || null,
1195
- volumeMounts: Array.isArray(deployment?.meta?.volumeMounts) ? deployment.meta.volumeMounts.map((entry) => railwayConnectionLabel(entry)).filter(Boolean) : [],
1196
- message: ok ? "Deployment is healthy." : `Latest deployment status is ${status ?? "unknown"}${stopped ? " and stopped" : ""}${instanceStatuses.length ? `; instances=${instanceStatuses.join(",")}` : ""}.`
1197
- };
1198
- }
1199
- async function listRailwayServices({
1200
- projectId,
1201
- env = process.env,
1202
- fetchImpl = fetch
1203
- }) {
1204
- const payload = await railwayGraphqlRequest({
1205
- query: `
1206
- query TreeseedRailwayProjectServices($projectId: String!) {
1207
- project(id: $projectId) {
1208
- id
1209
- services(first: 50) {
1210
- edges {
1211
- node {
1212
- id
1213
- name
1214
- }
1215
- }
1216
- }
1217
- }
1218
- }
1219
- `.trim(),
1220
- variables: { projectId },
1221
- env,
1222
- fetchImpl
1223
- });
1224
- return normalizeConnectionNodes(payload.data?.project ? payload.data.project.services : null, normalizeService);
1225
- }
1226
- async function getRailwayServiceInstance({
1227
- serviceId,
1228
- environmentId,
1229
- env = process.env,
1230
- fetchImpl = fetch
1231
- }) {
1232
- const legacySummary = {
1233
- id: null,
1234
- buildCommand: null,
1235
- dockerfilePath: null,
1236
- railwayConfigFile: null,
1237
- startCommand: null,
1238
- cronSchedule: null,
1239
- rootDirectory: null,
1240
- healthcheckPath: null,
1241
- healthcheckTimeoutSeconds: null,
1242
- healthcheckIntervalSeconds: null,
1243
- restartPolicy: null,
1244
- runtimeMode: null,
1245
- sleepApplication: null,
1246
- runtimeConfigSupported: false
1247
- };
1248
- try {
1249
- const payload = await railwayGraphqlRequest({
1250
- query: `
1251
- query TreeseedRailwayServiceInstance($serviceId: String!, $environmentId: String!) {
1252
- serviceInstance(serviceId: $serviceId, environmentId: $environmentId) {
1253
- id
1254
- buildCommand
1255
- dockerfilePath
1256
- railwayConfigFile
1257
- startCommand
1258
- cronSchedule
1259
- rootDirectory
1260
- healthcheckPath
1261
- healthcheckTimeout
1262
- sleepApplication
1263
- }
1264
- }
1265
- `.trim(),
1266
- variables: { serviceId, environmentId },
1267
- env,
1268
- fetchImpl
1269
- });
1270
- const instance = payload.data?.serviceInstance;
1271
- return {
1272
- id: railwayConnectionLabel(instance?.id) || null,
1273
- buildCommand: railwayConnectionLabel(instance?.buildCommand) || null,
1274
- dockerfilePath: railwayConnectionLabel(instance?.dockerfilePath) || null,
1275
- railwayConfigFile: railwayConnectionLabel(instance?.railwayConfigFile) || null,
1276
- startCommand: railwayConnectionLabel(instance?.startCommand) || null,
1277
- cronSchedule: railwayConnectionLabel(instance?.cronSchedule) || null,
1278
- rootDirectory: railwayConnectionLabel(instance?.rootDirectory) || null,
1279
- healthcheckPath: railwayConnectionLabel(instance?.healthcheckPath) || null,
1280
- healthcheckTimeoutSeconds: normalizeRailwayNumber(instance?.healthcheckTimeout),
1281
- healthcheckIntervalSeconds: null,
1282
- restartPolicy: null,
1283
- runtimeMode: instance?.sleepApplication === true ? "serverless" : "replicated",
1284
- sleepApplication: typeof instance?.sleepApplication === "boolean" ? instance.sleepApplication : null,
1285
- runtimeConfigSupported: true
1286
- };
1287
- } catch (error) {
1288
- const message = error instanceof Error ? error.message : String(error ?? "");
1289
- if (/Cannot query field .*healthcheckPath|Cannot query field .*healthcheckTimeout|Cannot query field .*sleepApplication/iu.test(message)) {
1290
- const payload = await railwayGraphqlRequest({
1291
- query: `
1292
- query TreeseedRailwayServiceInstanceLegacy($serviceId: String!, $environmentId: String!) {
1293
- serviceInstance(serviceId: $serviceId, environmentId: $environmentId) {
1294
- id
1295
- buildCommand
1296
- dockerfilePath
1297
- railwayConfigFile
1298
- startCommand
1299
- cronSchedule
1300
- rootDirectory
1301
- }
1302
- }
1303
- `.trim(),
1304
- variables: { serviceId, environmentId },
1305
- env,
1306
- fetchImpl
1307
- });
1308
- const instance = payload.data?.serviceInstance;
1309
- return {
1310
- ...legacySummary,
1311
- id: railwayConnectionLabel(instance?.id) || null,
1312
- buildCommand: railwayConnectionLabel(instance?.buildCommand) || null,
1313
- dockerfilePath: railwayConnectionLabel(instance?.dockerfilePath) || null,
1314
- railwayConfigFile: railwayConnectionLabel(instance?.railwayConfigFile) || null,
1315
- startCommand: railwayConnectionLabel(instance?.startCommand) || null,
1316
- cronSchedule: railwayConnectionLabel(instance?.cronSchedule) || null,
1317
- rootDirectory: railwayConnectionLabel(instance?.rootDirectory) || null
1318
- };
1319
- }
1320
- if (!/ServiceInstance not found/iu.test(message)) {
1321
- throw error;
1322
- }
1323
- return legacySummary;
1324
- }
1325
- }
1326
- async function ensureRailwayServiceInstanceConfiguration({
1327
- serviceId,
1328
- environmentId,
1329
- buildCommand,
1330
- dockerfilePath,
1331
- railwayConfigFile,
1332
- startCommand,
1333
- cronSchedule,
1334
- rootDirectory,
1335
- healthcheckPath,
1336
- healthcheckTimeoutSeconds,
1337
- healthcheckIntervalSeconds,
1338
- restartPolicy,
1339
- runtimeMode,
1340
- deploymentRegion,
1341
- clearSourceConfiguration = false,
1342
- env = process.env,
1343
- fetchImpl = fetch,
1344
- settleAttempts = 60,
1345
- settleDelayMs = 5e3
1346
- }) {
1347
- let current = await getRailwayServiceInstance({ serviceId, environmentId, env, fetchImpl });
1348
- if (!current.id) {
1349
- for (let attempt = 0; attempt < settleAttempts && !current.id; attempt += 1) {
1350
- await new Promise((resolve2) => setTimeout(resolve2, settleDelayMs));
1351
- current = await getRailwayServiceInstance({ serviceId, environmentId, env, fetchImpl });
1352
- }
1353
- }
1354
- if (!current.id) {
1355
- return { instance: current, updated: false };
1356
- }
1357
- const desiredRuntimeMode = railwayConnectionLabel(runtimeMode) === "service" ? "replicated" : railwayConnectionLabel(runtimeMode) || null;
1358
- const desiredDeploymentRegion = railwayConnectionLabel(deploymentRegion) || null;
1359
- const desired = {
1360
- buildCommand: railwayConnectionLabel(buildCommand) || null,
1361
- dockerfilePath: railwayConnectionLabel(dockerfilePath) || null,
1362
- railwayConfigFile: railwayConnectionLabel(railwayConfigFile) || null,
1363
- startCommand: railwayConnectionLabel(startCommand) || null,
1364
- cronSchedule: railwayConnectionLabel(cronSchedule) || null,
1365
- rootDirectory: railwayConnectionLabel(rootDirectory) || null,
1366
- healthcheckPath: railwayConnectionLabel(healthcheckPath) || null,
1367
- healthcheckTimeoutSeconds: normalizeRailwayNumber(healthcheckTimeoutSeconds),
1368
- healthcheckIntervalSeconds: normalizeRailwayNumber(healthcheckIntervalSeconds),
1369
- restartPolicy: railwayConnectionLabel(restartPolicy) || null,
1370
- runtimeMode: desiredRuntimeMode,
1371
- deploymentRegion: desiredDeploymentRegion,
1372
- sleepApplication: desiredRuntimeMode === "serverless" ? true : desiredRuntimeMode === "replicated" ? false : null
1373
- };
1374
- const needsRuntimeConfig = desired.healthcheckPath !== null || desired.healthcheckTimeoutSeconds !== null || desired.runtimeMode !== null || desired.deploymentRegion !== null;
1375
- if (needsRuntimeConfig && current.runtimeConfigSupported !== true) {
1376
- throw new Error("Railway service instance runtime settings are unsupported by the current Railway API schema.");
1377
- }
1378
- if (desired.healthcheckIntervalSeconds !== null) {
1379
- throw new Error("Railway service instance healthcheck intervals are unsupported by the current Railway API schema.");
1380
- }
1381
- if (desired.restartPolicy !== null) {
1382
- throw new Error("Railway service instance restart policies are unsupported by the current Railway API schema.");
1383
- }
1384
- const drifted = (desired.buildCommand !== null || clearSourceConfiguration) && desired.buildCommand !== current.buildCommand || (desired.dockerfilePath !== null || clearSourceConfiguration) && desired.dockerfilePath !== current.dockerfilePath || (desired.railwayConfigFile !== null || clearSourceConfiguration) && desired.railwayConfigFile !== current.railwayConfigFile || (desired.startCommand !== null || clearSourceConfiguration) && desired.startCommand !== current.startCommand || desired.cronSchedule !== null && desired.cronSchedule !== current.cronSchedule || (desired.rootDirectory !== null || clearSourceConfiguration) && desired.rootDirectory !== current.rootDirectory || desired.healthcheckPath !== null && desired.healthcheckPath !== current.healthcheckPath || desired.healthcheckTimeoutSeconds !== null && desired.healthcheckTimeoutSeconds !== current.healthcheckTimeoutSeconds || desired.runtimeMode !== null && desired.runtimeMode !== current.runtimeMode || desired.deploymentRegion !== null;
1385
- if (!drifted) {
1386
- return { instance: current, updated: false };
1387
- }
1388
- const client = createRailwayEnvironmentPatchClient({ env, fetchImpl });
1389
- await client.stageEnvironmentChanges({
1390
- environmentId,
1391
- merge: true,
1392
- patch: {
1393
- services: {
1394
- [serviceId]: {
1395
- build: {
1396
- ...desired.buildCommand !== null || clearSourceConfiguration ? { buildCommand: desired.buildCommand } : {},
1397
- ...desired.dockerfilePath !== null || clearSourceConfiguration ? { dockerfilePath: desired.dockerfilePath } : {}
1398
- },
1399
- ...desired.railwayConfigFile !== null || clearSourceConfiguration ? { configFile: desired.railwayConfigFile } : {},
1400
- ...desired.rootDirectory !== null || clearSourceConfiguration ? { source: { rootDirectory: desired.rootDirectory } } : {},
1401
- deploy: {
1402
- ...desired.startCommand !== null || clearSourceConfiguration ? { startCommand: desired.startCommand } : {},
1403
- ...desired.cronSchedule !== null ? { cronSchedule: desired.cronSchedule } : {},
1404
- ...desired.healthcheckPath !== null ? { healthcheckPath: desired.healthcheckPath } : {},
1405
- ...desired.healthcheckTimeoutSeconds !== null ? { healthcheckTimeout: desired.healthcheckTimeoutSeconds } : {},
1406
- ...desired.sleepApplication !== null ? { sleepApplication: desired.sleepApplication } : {},
1407
- ...desired.runtimeMode !== null ? { runtime: desired.runtimeMode } : {},
1408
- ...desired.deploymentRegion !== null ? {
1409
- region: desired.deploymentRegion,
1410
- multiRegionConfig: { [desired.deploymentRegion]: { numReplicas: 1 } }
1411
- } : {}
1412
- }
1413
- }
1414
- }
1415
- }
1416
- });
1417
- await client.commitStagedPatch({
1418
- environmentId,
1419
- message: `Treeseed reconcile service configuration ${serviceId}`,
1420
- skipDeploys: true
1421
- });
1422
- let instance = current;
1423
- for (let attempt = 0; attempt <= settleAttempts; attempt += 1) {
1424
- instance = await getRailwayServiceInstance({
1425
- serviceId,
1426
- environmentId,
1427
- env,
1428
- fetchImpl
1429
- });
1430
- if (!serviceInstanceDrifted(instance, desired, clearSourceConfiguration) || attempt >= settleAttempts) {
1431
- break;
1432
- }
1433
- await new Promise((resolve2) => setTimeout(resolve2, settleDelayMs));
1434
- }
1435
- return {
1436
- instance: {
1437
- id: instance.id || current.id,
1438
- buildCommand: instance.buildCommand,
1439
- dockerfilePath: instance.dockerfilePath,
1440
- railwayConfigFile: instance.railwayConfigFile,
1441
- startCommand: instance.startCommand,
1442
- cronSchedule: instance.cronSchedule,
1443
- rootDirectory: instance.rootDirectory,
1444
- healthcheckPath: instance.healthcheckPath,
1445
- healthcheckTimeoutSeconds: instance.healthcheckTimeoutSeconds,
1446
- healthcheckIntervalSeconds: instance.healthcheckIntervalSeconds,
1447
- restartPolicy: instance.restartPolicy,
1448
- runtimeMode: instance.runtimeMode,
1449
- sleepApplication: instance.sleepApplication,
1450
- runtimeConfigSupported: instance.runtimeConfigSupported
1451
- },
1452
- updated: true
1453
- };
1454
- }
1455
- function serviceInstanceDrifted(current, desired, clearSourceConfiguration = false) {
1456
- return (desired.buildCommand !== null || clearSourceConfiguration) && desired.buildCommand !== current.buildCommand || (desired.dockerfilePath !== null && desired.dockerfilePath !== void 0 || clearSourceConfiguration) && (desired.dockerfilePath ?? null) !== current.dockerfilePath || (desired.railwayConfigFile !== null && desired.railwayConfigFile !== void 0 || clearSourceConfiguration) && (desired.railwayConfigFile ?? null) !== current.railwayConfigFile || (desired.startCommand !== null || clearSourceConfiguration) && desired.startCommand !== current.startCommand || desired.cronSchedule !== null && desired.cronSchedule !== current.cronSchedule || (desired.rootDirectory !== null || clearSourceConfiguration) && desired.rootDirectory !== current.rootDirectory || desired.healthcheckPath !== null && desired.healthcheckPath !== current.healthcheckPath || desired.healthcheckTimeoutSeconds !== null && desired.healthcheckTimeoutSeconds !== current.healthcheckTimeoutSeconds || desired.runtimeMode !== null && desired.runtimeMode !== current.runtimeMode;
1457
- }
1458
- async function listRailwayVariables({
1459
- projectId,
1460
- environmentId,
1461
- serviceId,
1462
- env = process.env,
1463
- fetchImpl = fetch
1464
- }) {
1465
- const payload = await railwayGraphqlRequest({
1466
- query: `
1467
- query TreeseedRailwayVariables($projectId: String!, $environmentId: String!, $serviceId: String) {
1468
- variables(projectId: $projectId, environmentId: $environmentId, serviceId: $serviceId, unrendered: true)
1469
- }
1470
- `.trim(),
1471
- variables: {
1472
- projectId,
1473
- environmentId,
1474
- serviceId: serviceId || null
1475
- },
1476
- env,
1477
- fetchImpl
1478
- });
1479
- return normalizeVariableMap(payload.data?.variables);
1480
- }
1481
- async function upsertRailwayVariables({
1482
- projectId,
1483
- environmentId,
1484
- serviceId,
1485
- variables,
1486
- env = process.env,
1487
- fetchImpl = fetch
1488
- }) {
1489
- if (Object.keys(variables).length === 0) {
1490
- return;
1491
- }
1492
- const client = createRailwayEnvironmentPatchClient({ env, fetchImpl });
1493
- const applyVariablePatch = async (keys) => {
1494
- const variablePatch = Object.fromEntries(keys.map((key) => [key, { value: variables[key] }]));
1495
- await client.stageEnvironmentChanges({
1496
- environmentId,
1497
- merge: true,
1498
- patch: serviceId ? { services: { [serviceId]: { variables: variablePatch } } } : { sharedVariables: variablePatch }
1499
- });
1500
- await client.commitStagedPatch({
1501
- environmentId,
1502
- message: `Treeseed update ${keys.length} Railway variable${keys.length === 1 ? "" : "s"}`,
1503
- skipDeploys: true
1504
- });
1505
- };
1506
- await applyVariablePatch(Object.keys(variables));
1507
- const expectedKeys = Object.keys(variables);
1508
- const mismatchedKeys = (observed2) => expectedKeys.filter((key) => observed2[key] !== variables[key]);
1509
- const observed = await listRailwayVariables({ projectId, environmentId, serviceId, env, fetchImpl }).catch(() => ({}));
1510
- const missingOrMismatched = mismatchedKeys(observed);
1511
- if (missingOrMismatched.length > 0) await applyVariablePatch(missingOrMismatched);
1512
- let retried = missingOrMismatched.length > 0 ? await listRailwayVariables({ projectId, environmentId, serviceId, env, fetchImpl }).catch(() => ({})) : observed;
1513
- let stillMismatched = mismatchedKeys(retried);
1514
- for (let attempt = 0; stillMismatched.length > 0 && attempt < 12; attempt += 1) {
1515
- await new Promise((resolve2) => setTimeout(resolve2, 2500));
1516
- retried = await listRailwayVariables({ projectId, environmentId, serviceId, env, fetchImpl }).catch(() => ({}));
1517
- stillMismatched = mismatchedKeys(retried);
1518
- if (stillMismatched.length > 0 && attempt === 5) {
1519
- await applyVariablePatch(stillMismatched);
1520
- }
1521
- }
1522
- if (stillMismatched.length > 0) {
1523
- throw new Error(`Railway variable upsert did not persist expected values: ${stillMismatched.join(", ")}.`);
1524
- }
1525
- }
1526
- async function listRailwayVolumes({
1527
- projectId,
1528
- env = process.env,
1529
- fetchImpl = fetch
1530
- }) {
1531
- const query = configuredEnvValue(env, "TREESEED_RAILWAY_VOLUME_LIST_QUERY") || `
1532
- query TreeseedRailwayVolumeList($projectId: String!) {
1533
- project(id: $projectId) {
1534
- id
1535
- volumes {
1536
- edges {
1537
- node {
1538
- id
1539
- name
1540
- projectId
1541
- volumeInstances {
1542
- edges {
1543
- node {
1544
- id
1545
- serviceId
1546
- environmentId
1547
- mountPath
1548
- state
1549
- isPendingDeletion
1550
- deletedAt
1551
- }
1552
- }
1553
- }
1554
- }
1555
- }
1556
- }
1557
- }
1558
- }
1559
- `.trim();
1560
- const payload = await railwayGraphqlRequest({
1561
- query,
1562
- variables: { projectId },
1563
- env,
1564
- fetchImpl
1565
- });
1566
- return collectRailwayVolumes(payload.data);
1567
- }
1568
- async function ensureRailwayServiceVolume({
1569
- projectId,
1570
- environmentId,
1571
- serviceId,
1572
- name,
1573
- mountPath,
1574
- adoptVolumeId,
1575
- env = process.env,
1576
- fetchImpl = fetch,
1577
- settleAttempts = 24,
1578
- settleDelayMs = 5e3
1579
- }) {
1580
- if (!mountPath.startsWith("/")) {
1581
- throw new Error(`Railway volume mount path must be absolute: ${mountPath}`);
1582
- }
1583
- {
1584
- const observed = await listRailwayVolumes({ projectId, env, fetchImpl });
1585
- const exact = observed.find(
1586
- (candidate) => candidate.name === name && candidate.instances.some(
1587
- (instance) => instance.serviceId === serviceId && instance.environmentId === environmentId && instance.mountPath === mountPath && isActiveRailwayVolumeInstance(instance)
1588
- )
1589
- ) ?? null;
1590
- if (exact) {
1591
- return {
1592
- volume: exact,
1593
- instance: exact.instances.find((instance) => instance.serviceId === serviceId && instance.environmentId === environmentId) ?? null,
1594
- created: false,
1595
- updated: false
1596
- };
1597
- }
1598
- const requestedAdoption = railwayConnectionLabel(adoptVolumeId);
1599
- const adoptable = requestedAdoption ? observed.find((candidate) => candidate.id === requestedAdoption) ?? null : observed.find((candidate) => candidate.name === name) ?? findRailwayVolumeForService(observed, serviceId, environmentId) ?? null;
1600
- if (requestedAdoption && !adoptable) {
1601
- throw new Error(`Railway volume ${requestedAdoption} cannot be adopted because it was not found; refusing to create an empty replacement volume.`);
1602
- }
1603
- const volumeKey = adoptable?.id ?? name;
1604
- const client = createRailwayEnvironmentPatchClient({ env, fetchImpl });
1605
- await client.stageEnvironmentChanges({
1606
- environmentId,
1607
- merge: true,
1608
- patch: {
1609
- volumes: { [volumeKey]: adoptable ? { isDeleted: false } : { isCreated: true } },
1610
- services: { [serviceId]: { volumeMounts: { [volumeKey]: { mountPath } } } }
1611
- }
1612
- });
1613
- await client.commitStagedPatch({
1614
- environmentId,
1615
- message: `Treeseed reconcile volume ${name}`,
1616
- skipDeploys: true
1617
- });
1618
- for (let attempt = 0; attempt <= settleAttempts; attempt += 1) {
1619
- if (attempt > 0) await new Promise((resolve2) => setTimeout(resolve2, settleDelayMs));
1620
- const refreshed = await listRailwayVolumes({ projectId, env, fetchImpl });
1621
- const volume = refreshed.find((candidate) => candidate.id === adoptable?.id || candidate.name === name) ?? null;
1622
- const instance = volume?.instances.find(
1623
- (entry) => entry.serviceId === serviceId && entry.environmentId === environmentId && entry.mountPath === mountPath && isActiveRailwayVolumeInstance(entry)
1624
- ) ?? null;
1625
- if (volume && instance) return { volume, instance, created: !adoptable, updated: Boolean(adoptable) };
1626
- }
1627
- throw new Error(`Railway SDK volume reconciliation did not observe ${name} mounted on service ${serviceId} at ${mountPath}.`);
1628
- }
1629
- }
1630
- function findRailwayVolumeForService(volumes, serviceId, environmentId) {
1631
- return volumes.find(
1632
- (candidate) => candidate.instances.some(
1633
- (instance) => instance.serviceId === serviceId && (!environmentId || instance.environmentId === environmentId) && isActiveRailwayVolumeInstance(instance)
1634
- )
1635
- ) ?? null;
1636
- }
1637
- async function listRailwayCustomDomains({
1638
- projectId,
1639
- environmentId,
1640
- serviceId,
1641
- env = process.env,
1642
- fetchImpl = fetch
1643
- }) {
1644
- const payload = await railwayGraphqlRequest({
1645
- query: `
1646
- query TreeseedRailwayCustomDomains($projectId: String!, $environmentId: String!, $serviceId: String!) {
1647
- domains(projectId: $projectId, environmentId: $environmentId, serviceId: $serviceId) {
1648
- customDomains {
1649
- id
1650
- domain
1651
- environmentId
1652
- serviceId
1653
- targetPort
1654
- status {
1655
- verified
1656
- certificateStatus
1657
- verificationDnsHost
1658
- verificationToken
1659
- dnsRecords {
1660
- fqdn
1661
- hostlabel
1662
- recordType
1663
- requiredValue
1664
- currentValue
1665
- status
1666
- zone
1667
- purpose
1668
- }
1669
- }
1670
- }
1671
- }
1672
- }
1673
- `.trim(),
1674
- variables: {
1675
- projectId,
1676
- environmentId,
1677
- serviceId
1678
- },
1679
- env,
1680
- fetchImpl
1681
- });
1682
- return Array.isArray(payload.data?.domains?.customDomains) ? payload.data.domains.customDomains.map((entry) => entry && typeof entry === "object" ? normalizeRailwayCustomDomain(entry) : null).filter(Boolean) : [];
1683
- }
1684
- async function ensureRailwayCustomDomain({
1685
- projectId,
1686
- environmentId,
1687
- serviceId,
1688
- domain,
1689
- env = process.env,
1690
- fetchImpl = fetch
1691
- }) {
1692
- const normalizedDomain = railwayConnectionLabel(domain);
1693
- if (!normalizedDomain) {
1694
- throw new Error("Railway custom domain creation requires a domain.");
1695
- }
1696
- const existing = await listRailwayCustomDomains({ projectId, environmentId, serviceId, env, fetchImpl });
1697
- const matched = existing.find((entry) => entry.domain === normalizedDomain) ?? null;
1698
- if (matched) {
1699
- return { domain: matched, created: false };
1700
- }
1701
- await runRailwayCliJson({
1702
- args: ["domain", normalizedDomain, "--project", projectId, "--environment", environmentId, "--service", serviceId, "--json"],
1703
- env
1704
- });
1705
- const created = (await listRailwayCustomDomains({ projectId, environmentId, serviceId, env, fetchImpl })).find((entry) => entry.domain === normalizedDomain) ?? null;
1706
- if (!created) {
1707
- throw new Error(`Railway custom domain create did not return a usable domain for ${normalizedDomain}.`);
1708
- }
1709
- return { domain: created, created: true };
1710
- }
1711
- function looksLikeRailwayMissingResource(error) {
1712
- const message = error instanceof Error ? error.message : String(error ?? "");
1713
- return /not found|does not exist|could not find|unknown|invalid .*id/iu.test(message);
1714
- }
1715
- function looksLikeRailwayOperationInProgress(error) {
1716
- const message = error instanceof Error ? error.message : String(error ?? "");
1717
- return /operation is already in progress/iu.test(message);
1718
- }
1719
- async function railwayDeleteMutation({
1720
- query,
1721
- variables,
1722
- env,
1723
- fetchImpl,
1724
- missingResult
1725
- }) {
1726
- let lastError = null;
1727
- for (let attempt = 0; attempt < 6; attempt += 1) {
1728
- try {
1729
- const payload = await railwayGraphqlRequest({
1730
- query,
1731
- variables,
1732
- env,
1733
- fetchImpl
1734
- });
1735
- const mutationResult = Object.values(payload.data ?? {})[0];
1736
- if (mutationResult === false || mutationResult == null) {
1737
- throw new Error("Railway delete mutation returned no successful deletion result.");
1738
- }
1739
- return { status: "deleted" };
1740
- } catch (error) {
1741
- if (looksLikeRailwayMissingResource(error)) {
1742
- return missingResult;
1743
- }
1744
- if (!looksLikeRailwayOperationInProgress(error) || attempt >= 5) {
1745
- throw error;
1746
- }
1747
- lastError = error;
1748
- await new Promise((resolve2) => setTimeout(resolve2, 2500 * (attempt + 1)));
1749
- }
1750
- }
1751
- throw lastError instanceof Error ? lastError : new Error(String(lastError ?? "Railway delete mutation did not complete."));
1752
- }
1753
- async function deleteRailwayCustomDomain({
1754
- projectId,
1755
- environmentId,
1756
- serviceId,
1757
- domainId,
1758
- env = process.env,
1759
- fetchImpl = fetch
1760
- }) {
1761
- if (!railwayConnectionLabel(domainId)) {
1762
- return { status: "missing", id: domainId };
1763
- }
1764
- void fetchImpl;
1765
- if (!projectId || !environmentId || !serviceId) throw new Error(`Railway CLI domain deletion requires project, environment, and service ids for ${domainId}.`);
1766
- await runRailwayCliJson({ args: ["domain", "delete", domainId, "--project", projectId, "--environment", environmentId, "--service", serviceId, "--yes", "--json"], env });
1767
- return { status: "deleted" };
1768
- }
1769
- async function deleteRailwayService({
1770
- projectId,
1771
- environmentId,
1772
- serviceId,
1773
- env = process.env,
1774
- fetchImpl = fetch
1775
- }) {
1776
- if (!railwayConnectionLabel(serviceId)) {
1777
- return { status: "missing", id: serviceId };
1778
- }
1779
- void fetchImpl;
1780
- if (!projectId || !environmentId) throw new Error(`Railway CLI service deletion requires project and environment ids for ${serviceId}.`);
1781
- await runRailwayCliJson({ args: ["service", "delete", "--project", projectId, "--environment", environmentId, "--service", serviceId, "--yes", "--json"], env });
1782
- return { status: "deleted" };
1783
- }
1784
- async function deleteRailwayVolume({
1785
- projectId,
1786
- environmentId,
1787
- volumeId,
1788
- env = process.env,
1789
- fetchImpl = fetch
1790
- }) {
1791
- if (!railwayConnectionLabel(volumeId)) {
1792
- return { status: "missing", id: volumeId };
1793
- }
1794
- void fetchImpl;
1795
- if (!projectId || !environmentId) throw new Error(`Railway CLI volume deletion requires project and environment ids for ${volumeId}.`);
1796
- await runRailwayCliJson({ args: ["volume", "--project", projectId, "--environment", environmentId, "delete", "--volume", volumeId, "--yes", "--json"], env });
1797
- return { status: "deleted" };
1798
- }
1799
- function looksLikeRailwayVolumeDeleteShapeUnsupported(error) {
1800
- const message = error instanceof Error ? error.message : String(error ?? "");
1801
- return /Unknown argument|Cannot query field|Unknown field|Field .* is not defined|volumeDelete.*argument|Problem processing request/iu.test(message);
1802
- }
1803
- async function deleteRailwayEnvironment({
1804
- projectId,
1805
- environmentId,
1806
- env = process.env,
1807
- fetchImpl = fetch
1808
- }) {
1809
- if (!railwayConnectionLabel(environmentId)) {
1810
- return { status: "missing", id: environmentId };
1811
- }
1812
- void fetchImpl;
1813
- if (!projectId) throw new Error(`Railway CLI environment deletion requires a project id for ${environmentId}.`);
1814
- const tempRoot = mkdtempSync(resolve(tmpdir(), "treeseed-railway-environment-delete-"));
1815
- try {
1816
- await runRailwayCliJson({ args: ["link", projectId, "--json"], env, cwd: tempRoot });
1817
- await runRailwayCliJson({ args: ["environment", "delete", environmentId, "--yes", "--json"], env, cwd: tempRoot });
1818
- } finally {
1819
- rmSync(tempRoot, { recursive: true, force: true });
1820
- }
1821
- return { status: "deleted" };
1822
- }
1823
- async function deleteRailwayProject({
1824
- projectId,
1825
- env = process.env,
1826
- fetchImpl = fetch
1827
- }) {
1828
- if (!railwayConnectionLabel(projectId)) {
1829
- return { status: "missing", id: projectId };
1830
- }
1831
- void fetchImpl;
1832
- await runRailwayCliJson({ args: ["project", "delete", "--project", projectId, "--yes", "--json"], env });
1833
- return { status: "deleted" };
1834
- }
1835
- export {
1836
- assertRailwayGraphqlReadOnly,
1837
- deleteRailwayCustomDomain,
1838
- deleteRailwayEnvironment,
1839
- deleteRailwayProject,
1840
- deleteRailwayService,
1841
- deleteRailwayVolume,
1842
- deployRailwayServiceInstance,
1843
- ensureRailwayCustomDomain,
1844
- ensureRailwayEnvironment,
1845
- ensureRailwayGeneratedServiceDomain,
1846
- ensureRailwayPostgresService,
1847
- ensureRailwayProject,
1848
- ensureRailwayService,
1849
- ensureRailwayServiceInstanceConfiguration,
1850
- ensureRailwayServiceVolume,
1851
- getRailwayAuthProfile,
1852
- getRailwayProject,
1853
- getRailwayServiceInstance,
1854
- inspectRailwayServiceDeploymentHealth,
1855
- isUsableRailwayToken,
1856
- listRailwayCustomDomains,
1857
- listRailwayEnvironmentServices,
1858
- listRailwayEnvironments,
1859
- listRailwayProjects,
1860
- listRailwayServiceDomains,
1861
- listRailwayServices,
1862
- listRailwayVariables,
1863
- listRailwayVolumes,
1864
- normalizeRailwayEnvironmentName,
1865
- railwayGraphqlRequest,
1866
- resolveRailwayApiToken,
1867
- resolveRailwayApiUrl,
1868
- resolveRailwayWorkspace,
1869
- resolveRailwayWorkspaceContext,
1870
- updateRailwayServiceGitSource,
1871
- updateRailwayServiceImageSource,
1872
- updateRailwayServiceName,
1873
- upsertRailwayVariables
1874
- };