@treeseed/sdk 0.11.0 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/README.md +9 -4
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +117 -60
  27. package/dist/capacity-provider.js +215 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +2 -2
  36. package/dist/copilot.d.ts +3 -0
  37. package/dist/copilot.js +16 -1
  38. package/dist/d1-http.d.ts +1 -1
  39. package/dist/d1-store.d.ts +32 -57
  40. package/dist/d1-store.js +115 -318
  41. package/dist/db/d1.d.ts +1 -232
  42. package/dist/db/index.d.ts +3 -3
  43. package/dist/db/market-schema.d.ts +49037 -11843
  44. package/dist/db/market-schema.js +1788 -50
  45. package/dist/db/node-sqlite.d.ts +1 -232
  46. package/dist/db/schema.d.ts +0 -462
  47. package/dist/db/schema.js +2 -22
  48. package/dist/dispatch.d.ts +1 -1
  49. package/dist/dispatch.js +0 -11
  50. package/dist/fixture-support.js +52 -4
  51. package/dist/governance.d.ts +133 -0
  52. package/dist/governance.js +285 -0
  53. package/dist/graph/build.d.ts +2 -2
  54. package/dist/graph/context-query-contracts.d.ts +1 -1
  55. package/dist/graph/dsl.d.ts +1 -1
  56. package/dist/graph/query.d.ts +4 -4
  57. package/dist/graph/ranking.d.ts +1 -1
  58. package/dist/graph/schema.d.ts +1 -1
  59. package/dist/graph.d.ts +11 -11
  60. package/dist/guarantees/index.d.ts +425 -0
  61. package/dist/guarantees/index.js +1146 -0
  62. package/dist/hosting/apps.d.ts +1 -1
  63. package/dist/hosting/builtins.d.ts +1 -1
  64. package/dist/hosting/builtins.js +9 -198
  65. package/dist/hosting/contracts.d.ts +3 -2
  66. package/dist/hosting/graph.d.ts +24 -21
  67. package/dist/hosting/graph.js +280 -294
  68. package/dist/hosting/index.d.ts +4 -4
  69. package/dist/index.d.ts +88 -74
  70. package/dist/index.js +81 -10
  71. package/dist/local-dev/managed-dev.d.ts +85 -0
  72. package/dist/local-dev/managed-dev.js +368 -0
  73. package/dist/managed-dependencies.d.ts +9 -0
  74. package/dist/managed-dependencies.js +10 -8
  75. package/dist/market-client.d.ts +265 -7
  76. package/dist/market-client.js +381 -9
  77. package/dist/model-registry.d.ts +1 -1
  78. package/dist/model-registry.js +19 -19
  79. package/dist/operations/agent-tools.d.ts +2 -11
  80. package/dist/operations/agent-tools.js +2 -14
  81. package/dist/operations/providers/default.d.ts +1 -1
  82. package/dist/operations/providers/default.js +20 -37
  83. package/dist/operations/repository-operations.d.ts +26 -2
  84. package/dist/operations/repository-operations.js +159 -1
  85. package/dist/operations/runtime.d.ts +3 -3
  86. package/dist/operations/services/bootstrap-runner.d.ts +1 -1
  87. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  88. package/dist/operations/services/build-warning-policy.js +81 -82
  89. package/dist/operations/services/commit-message-provider.js +4 -4
  90. package/dist/operations/services/config-runtime.d.ts +73 -19
  91. package/dist/operations/services/config-runtime.js +276 -100
  92. package/dist/operations/services/deploy.d.ts +41 -622
  93. package/dist/operations/services/deploy.js +181 -213
  94. package/dist/operations/services/deployment-readiness.d.ts +1 -1
  95. package/dist/operations/services/deployment-readiness.js +38 -7
  96. package/dist/operations/services/git-remote-policy.js +12 -4
  97. package/dist/operations/services/git-runner.d.ts +66 -0
  98. package/dist/operations/services/git-runner.js +479 -0
  99. package/dist/operations/services/git-workflow.d.ts +43 -5
  100. package/dist/operations/services/git-workflow.js +242 -20
  101. package/dist/operations/services/github-actions-verification.d.ts +3 -1
  102. package/dist/operations/services/github-actions-verification.js +11 -3
  103. package/dist/operations/services/github-api.js +21 -5
  104. package/dist/operations/services/github-automation.d.ts +3 -3
  105. package/dist/operations/services/github-automation.js +15 -18
  106. package/dist/operations/services/github-credentials.js +2 -1
  107. package/dist/operations/services/hosted-service-checks.d.ts +19 -1
  108. package/dist/operations/services/hosted-service-checks.js +162 -11
  109. package/dist/operations/services/hosting-audit.d.ts +2 -2
  110. package/dist/operations/services/hosting-audit.js +7 -7
  111. package/dist/operations/services/hub-launch.d.ts +1 -1
  112. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  113. package/dist/operations/services/hub-provider-launch.js +19 -14
  114. package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
  115. package/dist/operations/services/live-hosted-service-checks.js +193 -80
  116. package/dist/operations/services/local-dev.js +0 -1
  117. package/dist/operations/services/managed-host-security.d.ts +1 -1
  118. package/dist/operations/services/managed-repositories.d.ts +37 -0
  119. package/dist/operations/services/managed-repositories.js +177 -0
  120. package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
  121. package/dist/operations/services/operations-runner-smoke.js +22 -4
  122. package/dist/operations/services/package-adapters.d.ts +77 -2
  123. package/dist/operations/services/package-adapters.js +627 -56
  124. package/dist/operations/services/package-reference-policy.d.ts +12 -88
  125. package/dist/operations/services/package-reference-policy.js +81 -213
  126. package/dist/operations/services/project-host-operations.d.ts +4 -4
  127. package/dist/operations/services/project-platform.d.ts +19 -193
  128. package/dist/operations/services/project-platform.js +31 -103
  129. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  130. package/dist/operations/services/project-web-monitor.js +97 -2
  131. package/dist/operations/services/railway-api.d.ts +36 -7
  132. package/dist/operations/services/railway-api.js +331 -100
  133. package/dist/operations/services/railway-deploy.d.ts +7 -95
  134. package/dist/operations/services/railway-deploy.js +334 -742
  135. package/dist/operations/services/release-history.js +3 -4
  136. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  137. package/dist/operations/services/release-proof-ledger.js +81 -0
  138. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  139. package/dist/operations/services/release-proof-planner.js +195 -0
  140. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  141. package/dist/operations/services/release-proof-runner.js +169 -0
  142. package/dist/operations/services/release-proof.d.ts +81 -0
  143. package/dist/operations/services/release-proof.js +79 -0
  144. package/dist/operations/services/repository-save-orchestrator.d.ts +6 -7
  145. package/dist/operations/services/repository-save-orchestrator.js +353 -174
  146. package/dist/operations/services/runtime-paths.d.ts +1 -3
  147. package/dist/operations/services/runtime-paths.js +0 -4
  148. package/dist/operations/services/runtime-tools.d.ts +1 -192
  149. package/dist/operations/services/runtime-tools.js +4 -444
  150. package/dist/operations/services/save-deploy-preflight.js +9 -1
  151. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  152. package/dist/operations/services/template-host-bindings.js +3 -2
  153. package/dist/operations/services/template-registry.d.ts +6 -6
  154. package/dist/operations/services/template-registry.js +33 -14
  155. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  156. package/dist/operations/services/workflow-timing.d.ts +25 -0
  157. package/dist/operations/services/workflow-timing.js +79 -0
  158. package/dist/operations/services/workspace-dependency-mode.js +41 -4
  159. package/dist/operations/services/workspace-preflight.js +8 -8
  160. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  161. package/dist/operations/services/workspace-save.d.ts +1 -0
  162. package/dist/operations/services/workspace-save.js +41 -18
  163. package/dist/operations/services/workspace-tools.js +40 -6
  164. package/dist/operations-registry.d.ts +1 -1
  165. package/dist/operations-registry.js +5 -6
  166. package/dist/operations-types.d.ts +1 -1
  167. package/dist/operations.d.ts +17 -11
  168. package/dist/operations.js +57 -3
  169. package/dist/platform/book-export.js +2 -0
  170. package/dist/platform/books-data.d.ts +1 -1
  171. package/dist/platform/config.d.ts +27 -0
  172. package/dist/platform/config.js +100 -0
  173. package/dist/platform/content-runtime-source.d.ts +54 -0
  174. package/dist/platform/content-runtime-source.js +169 -0
  175. package/dist/platform/contracts.d.ts +6 -1
  176. package/dist/platform/deploy-config.d.ts +1 -1
  177. package/dist/platform/deploy-config.js +7 -1
  178. package/dist/platform/deploy-runtime.d.ts +1 -1
  179. package/dist/platform/desired-state.d.ts +63 -0
  180. package/dist/platform/desired-state.js +1021 -0
  181. package/dist/platform/env.yaml +414 -19
  182. package/dist/platform/environment.d.ts +2 -2
  183. package/dist/platform/environment.js +54 -22
  184. package/dist/platform/local-content-materialization.d.ts +9 -0
  185. package/dist/platform/local-content-materialization.js +212 -0
  186. package/dist/platform/plugin.d.ts +5 -5
  187. package/dist/platform/plugins/runtime.d.ts +3 -3
  188. package/dist/platform/plugins/runtime.js +62 -1
  189. package/dist/platform/plugins.d.ts +6 -6
  190. package/dist/platform/published-content-pipeline.d.ts +3 -3
  191. package/dist/platform/published-content-pipeline.js +5 -1
  192. package/dist/platform/published-content.d.ts +4 -3
  193. package/dist/platform/site-config-schema.d.ts +1 -0
  194. package/dist/platform/site-config-schema.js +4 -1
  195. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  196. package/dist/platform/tenant-config.d.ts +1 -1
  197. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  198. package/dist/platform/utils/site-config-schema.js +400 -461
  199. package/dist/platform-operation-store.d.ts +1 -1
  200. package/dist/plugin-default.d.ts +1 -1
  201. package/dist/plugin-default.js +27 -12
  202. package/dist/project-import.d.ts +91 -0
  203. package/dist/project-import.js +257 -0
  204. package/dist/project-workflow.d.ts +1 -1
  205. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  206. package/dist/reconcile/bootstrap-systems.js +3 -3
  207. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  208. package/dist/reconcile/builtin-adapters.js +2924 -346
  209. package/dist/reconcile/contracts.d.ts +15 -2
  210. package/dist/reconcile/desired-state.d.ts +2 -193
  211. package/dist/reconcile/desired-state.js +24 -33
  212. package/dist/reconcile/engine.d.ts +60 -397
  213. package/dist/reconcile/engine.js +182 -18
  214. package/dist/reconcile/index.d.ts +10 -10
  215. package/dist/reconcile/live-acceptance.d.ts +22 -1
  216. package/dist/reconcile/live-acceptance.js +456 -44
  217. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  218. package/dist/reconcile/providers/docker-private.js +101 -0
  219. package/dist/reconcile/providers/github-private.d.ts +65 -0
  220. package/dist/reconcile/providers/github-private.js +119 -0
  221. package/dist/reconcile/providers/local-private.d.ts +28 -0
  222. package/dist/reconcile/providers/local-private.js +75 -0
  223. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  224. package/dist/reconcile/providers/railway-iac.js +275 -0
  225. package/dist/reconcile/providers/release-private.d.ts +92 -0
  226. package/dist/reconcile/providers/release-private.js +152 -0
  227. package/dist/reconcile/registry.d.ts +2 -2
  228. package/dist/reconcile/registry.js +16 -1
  229. package/dist/reconcile/state.d.ts +1 -1
  230. package/dist/reconcile/state.js +3 -40
  231. package/dist/reconcile/units.d.ts +1 -1
  232. package/dist/reconcile/units.js +7 -1
  233. package/dist/remote.d.ts +6 -6
  234. package/dist/scenes/artifacts.d.ts +16 -0
  235. package/dist/scenes/artifacts.js +61 -0
  236. package/dist/scenes/auth.d.ts +2 -0
  237. package/dist/scenes/auth.js +28 -0
  238. package/dist/scenes/base-url.d.ts +12 -0
  239. package/dist/scenes/base-url.js +123 -0
  240. package/dist/scenes/builtin-plugins.d.ts +2 -0
  241. package/dist/scenes/builtin-plugins.js +447 -0
  242. package/dist/scenes/checkpoints.d.ts +14 -0
  243. package/dist/scenes/checkpoints.js +33 -0
  244. package/dist/scenes/device-matrix.d.ts +2 -0
  245. package/dist/scenes/device-matrix.js +97 -0
  246. package/dist/scenes/devices.d.ts +11 -0
  247. package/dist/scenes/devices.js +22 -0
  248. package/dist/scenes/diagnostics.d.ts +5 -0
  249. package/dist/scenes/diagnostics.js +22 -0
  250. package/dist/scenes/diagram-providers.d.ts +2 -0
  251. package/dist/scenes/diagram-providers.js +181 -0
  252. package/dist/scenes/diagram-validation.d.ts +22 -0
  253. package/dist/scenes/diagram-validation.js +74 -0
  254. package/dist/scenes/environment.d.ts +2 -0
  255. package/dist/scenes/environment.js +65 -0
  256. package/dist/scenes/evidence-bundle.d.ts +5 -0
  257. package/dist/scenes/evidence-bundle.js +42 -0
  258. package/dist/scenes/evidence-report.d.ts +10 -0
  259. package/dist/scenes/evidence-report.js +73 -0
  260. package/dist/scenes/evidence.d.ts +16 -0
  261. package/dist/scenes/evidence.js +277 -0
  262. package/dist/scenes/index.d.ts +48 -0
  263. package/dist/scenes/index.js +312 -0
  264. package/dist/scenes/inspect.d.ts +9 -0
  265. package/dist/scenes/inspect.js +64 -0
  266. package/dist/scenes/loader.d.ts +3 -0
  267. package/dist/scenes/loader.js +38 -0
  268. package/dist/scenes/logs.d.ts +2 -0
  269. package/dist/scenes/logs.js +47 -0
  270. package/dist/scenes/operations.d.ts +3 -0
  271. package/dist/scenes/operations.js +128 -0
  272. package/dist/scenes/phase0.d.ts +9 -0
  273. package/dist/scenes/phase0.js +637 -0
  274. package/dist/scenes/planner.d.ts +12 -0
  275. package/dist/scenes/planner.js +166 -0
  276. package/dist/scenes/playwright-adapter.d.ts +2 -0
  277. package/dist/scenes/playwright-adapter.js +63 -0
  278. package/dist/scenes/plugins.d.ts +5 -0
  279. package/dist/scenes/plugins.js +115 -0
  280. package/dist/scenes/progress.d.ts +17 -0
  281. package/dist/scenes/progress.js +24 -0
  282. package/dist/scenes/publish-destinations.d.ts +12 -0
  283. package/dist/scenes/publish-destinations.js +99 -0
  284. package/dist/scenes/publish-plan-report.d.ts +10 -0
  285. package/dist/scenes/publish-plan-report.js +70 -0
  286. package/dist/scenes/publish-plan.d.ts +15 -0
  287. package/dist/scenes/publish-plan.js +248 -0
  288. package/dist/scenes/publish-redaction.d.ts +16 -0
  289. package/dist/scenes/publish-redaction.js +148 -0
  290. package/dist/scenes/publish-release-record.d.ts +13 -0
  291. package/dist/scenes/publish-release-record.js +34 -0
  292. package/dist/scenes/publish-report.d.ts +10 -0
  293. package/dist/scenes/publish-report.js +67 -0
  294. package/dist/scenes/publish.d.ts +16 -0
  295. package/dist/scenes/publish.js +298 -0
  296. package/dist/scenes/registry.d.ts +12 -0
  297. package/dist/scenes/registry.js +65 -0
  298. package/dist/scenes/remotion-adapter.d.ts +3 -0
  299. package/dist/scenes/remotion-adapter.js +94 -0
  300. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  301. package/dist/scenes/remotion-composition-registry.js +12 -0
  302. package/dist/scenes/remotion-compositions.d.ts +15 -0
  303. package/dist/scenes/remotion-compositions.js +464 -0
  304. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  305. package/dist/scenes/remotion-diagrams.js +188 -0
  306. package/dist/scenes/remotion-input.d.ts +13 -0
  307. package/dist/scenes/remotion-input.js +291 -0
  308. package/dist/scenes/remotion-visuals.d.ts +29 -0
  309. package/dist/scenes/remotion-visuals.js +198 -0
  310. package/dist/scenes/render-media-assets.d.ts +9 -0
  311. package/dist/scenes/render-media-assets.js +117 -0
  312. package/dist/scenes/render-report.d.ts +10 -0
  313. package/dist/scenes/render-report.js +27 -0
  314. package/dist/scenes/render.d.ts +2 -0
  315. package/dist/scenes/render.js +218 -0
  316. package/dist/scenes/reporter.d.ts +3 -0
  317. package/dist/scenes/reporter.js +101 -0
  318. package/dist/scenes/resume.d.ts +2 -0
  319. package/dist/scenes/resume.js +79 -0
  320. package/dist/scenes/runner.d.ts +2 -0
  321. package/dist/scenes/runner.js +674 -0
  322. package/dist/scenes/schema.d.ts +6 -0
  323. package/dist/scenes/schema.js +994 -0
  324. package/dist/scenes/seed.d.ts +2 -0
  325. package/dist/scenes/seed.js +83 -0
  326. package/dist/scenes/segments.d.ts +15 -0
  327. package/dist/scenes/segments.js +79 -0
  328. package/dist/scenes/selectors.d.ts +3 -0
  329. package/dist/scenes/selectors.js +21 -0
  330. package/dist/scenes/timeline.d.ts +11 -0
  331. package/dist/scenes/timeline.js +26 -0
  332. package/dist/scenes/timeouts.d.ts +6 -0
  333. package/dist/scenes/timeouts.js +17 -0
  334. package/dist/scenes/training-captions.d.ts +14 -0
  335. package/dist/scenes/training-captions.js +98 -0
  336. package/dist/scenes/training-report.d.ts +10 -0
  337. package/dist/scenes/training-report.js +78 -0
  338. package/dist/scenes/training-transcript.d.ts +24 -0
  339. package/dist/scenes/training-transcript.js +204 -0
  340. package/dist/scenes/training.d.ts +10 -0
  341. package/dist/scenes/training.js +134 -0
  342. package/dist/scenes/types.d.ts +1872 -0
  343. package/dist/scenes/types.js +8 -0
  344. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  345. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  346. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  347. package/dist/scenes/visual-audit-fixtures.js +210 -0
  348. package/dist/scenes/visual-audit-report.d.ts +11 -0
  349. package/dist/scenes/visual-audit-report.js +85 -0
  350. package/dist/scenes/visual-audit-review.d.ts +23 -0
  351. package/dist/scenes/visual-audit-review.js +829 -0
  352. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  353. package/dist/scenes/visual-audit-routes.js +308 -0
  354. package/dist/scenes/visual-audit.d.ts +3 -0
  355. package/dist/scenes/visual-audit.js +596 -0
  356. package/dist/scripts/build-dist.js +154 -40
  357. package/dist/scripts/check-build-warnings.js +42 -53
  358. package/dist/scripts/cleanup-markdown.js +1 -1
  359. package/dist/scripts/cli-test-fixtures.js +24 -28
  360. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  361. package/dist/scripts/package-tools.js +12 -1
  362. package/dist/scripts/prepare.js +3 -7
  363. package/dist/scripts/release-verify.js +2 -5
  364. package/dist/scripts/run-fixture-astro-command.js +1 -1
  365. package/dist/scripts/template-catalog.test.js +68 -82
  366. package/dist/scripts/tenant-dev.js +0 -10
  367. package/dist/scripts/test-cloudflare-local.js +1 -1
  368. package/dist/scripts/test-scaffold.js +0 -1
  369. package/dist/scripts/test-smoke.js +3 -3
  370. package/dist/scripts/treeseed-build-dist.js +4 -7
  371. package/dist/scripts/treeseed-release-verify.js +1 -1
  372. package/dist/scripts/verify-driver.js +30 -21
  373. package/dist/scripts/workflow-commands.test.js +18 -27
  374. package/dist/scripts/workspace-command-e2e.js +1 -1
  375. package/dist/scripts/workspace-lint.js +6 -0
  376. package/dist/scripts/workspace-release-test.js +90 -1
  377. package/dist/scripts/workspace-test.js +6 -0
  378. package/dist/sdk-dispatch.d.ts +1 -1
  379. package/dist/sdk-dispatch.js +0 -16
  380. package/dist/sdk-fields.d.ts +1 -1
  381. package/dist/sdk-filters.d.ts +1 -1
  382. package/dist/sdk-types.d.ts +1184 -113
  383. package/dist/sdk-types.js +393 -0
  384. package/dist/sdk.d.ts +74 -79
  385. package/dist/sdk.js +27 -36
  386. package/dist/secrets-capability.d.ts +421 -0
  387. package/dist/secrets-capability.js +530 -0
  388. package/dist/seeds/normalize.js +1 -0
  389. package/dist/seeds/planner.js +38 -0
  390. package/dist/seeds/schema.js +293 -4
  391. package/dist/seeds/types.d.ts +60 -0
  392. package/dist/seeds/types.js +9 -1
  393. package/dist/service-credentials.d.ts +54 -0
  394. package/dist/service-credentials.js +112 -0
  395. package/dist/stores/cursor-store.d.ts +2 -2
  396. package/dist/stores/envelopes.d.ts +1 -1
  397. package/dist/stores/helpers.d.ts +1 -1
  398. package/dist/stores/lease-store.d.ts +2 -2
  399. package/dist/stores/message-store.d.ts +2 -2
  400. package/dist/stores/operational-store.d.ts +3 -26
  401. package/dist/stores/operational-store.js +0 -225
  402. package/dist/stores/project-workflow-store.d.ts +2 -2
  403. package/dist/stores/run-store.d.ts +2 -3
  404. package/dist/stores/run-store.js +0 -98
  405. package/dist/stores/subscription-store.d.ts +2 -3
  406. package/dist/stores/subscription-store.js +0 -100
  407. package/dist/template-catalog.d.ts +1 -1
  408. package/dist/template-launch-requirements.d.ts +2 -2
  409. package/dist/template-launch-ui.d.ts +2 -2
  410. package/dist/treedx/adapters.d.ts +6 -6
  411. package/dist/treedx/client.d.ts +1 -1
  412. package/dist/treedx/errors.d.ts +1 -1
  413. package/dist/treedx/federated-client.d.ts +3 -3
  414. package/dist/treedx/graph-adapter.d.ts +2 -2
  415. package/dist/treedx/index.d.ts +14 -14
  416. package/dist/treedx/market-integration.d.ts +1 -1
  417. package/dist/treedx/ports.d.ts +30 -30
  418. package/dist/treedx/query-adapter.d.ts +3 -3
  419. package/dist/treedx/registry-client.d.ts +2 -2
  420. package/dist/treedx/repository-adapter.d.ts +4 -4
  421. package/dist/treedx/repository-adapter.js +14 -3
  422. package/dist/treedx/sdk-integration.d.ts +3 -3
  423. package/dist/treedx/types.d.ts +2 -2
  424. package/dist/treedx/workspace-adapter.d.ts +2 -2
  425. package/dist/treedx-backends.d.ts +13 -11
  426. package/dist/treedx-backends.js +52 -50
  427. package/dist/treedx-client.d.ts +3 -0
  428. package/dist/treedx-client.js +10 -1
  429. package/dist/treeseed/services/compose.yml +2 -3
  430. package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
  431. package/dist/types/agents.d.ts +256 -0
  432. package/dist/types/agents.js +42 -1
  433. package/dist/verification.d.ts +1 -0
  434. package/dist/verification.js +143 -14
  435. package/dist/workflow/operations.d.ts +510 -559
  436. package/dist/workflow/operations.js +1891 -1342
  437. package/dist/workflow/policy.js +19 -7
  438. package/dist/workflow/runs.d.ts +9 -3
  439. package/dist/workflow/runs.js +66 -26
  440. package/dist/workflow/session.d.ts +4 -1
  441. package/dist/workflow/session.js +50 -10
  442. package/dist/workflow/worktrees.d.ts +6 -2
  443. package/dist/workflow/worktrees.js +98 -15
  444. package/dist/workflow-state.d.ts +5 -5
  445. package/dist/workflow-state.js +27 -17
  446. package/dist/workflow-support.d.ts +26 -25
  447. package/dist/workflow-support.js +27 -31
  448. package/dist/workflow.d.ts +46 -16
  449. package/dist/workflow.js +19 -7
  450. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  451. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  452. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  453. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  454. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  455. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  456. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  457. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  458. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  459. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  460. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  461. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  462. package/package.json +75 -18
  463. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  464. package/templates/github/deploy-web.workflow.yml +12 -8
  465. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  466. package/dist/operations/services/mailpit-runtime.js +0 -67
  467. package/dist/operations/services/release-candidate.d.ts +0 -60
  468. package/dist/operations/services/release-candidate.js +0 -953
  469. package/dist/scripts/ensure-mailpit.js +0 -48
  470. package/dist/scripts/logs-mailpit.js +0 -2
  471. package/dist/scripts/run-ts.js +0 -45
  472. package/dist/scripts/stop-mailpit.js +0 -5
  473. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -1,7 +1,7 @@
1
1
  import { relative, resolve } from "node:path";
2
2
  import { collectTreeseedEnvironmentContext, resolveTreeseedMachineEnvironmentValues } from "./config-runtime.js";
3
3
  import { configuredRailwayServices } from "./railway-deploy.js";
4
- import { loadCliDeployConfig } from "./runtime-tools.js";
4
+ import { loadTreeseedPlatformConfig } from "../../platform/config.js";
5
5
  import { discoverTreeseedApplications } from "../../hosting/apps.js";
6
6
  const RAILWAY_SECRET_KEYS_BY_SERVICE = {
7
7
  api: [
@@ -14,6 +14,12 @@ const RAILWAY_SECRET_KEYS_BY_SERVICE = {
14
14
  "TREESEED_DATABASE_URL",
15
15
  "TREESEED_PLATFORM_RUNNER_SECRET",
16
16
  "TREESEED_CREDENTIAL_SESSION_SECRET"
17
+ ],
18
+ capacityProviderManager: [
19
+ "TREESEED_CAPACITY_PROVIDER_API_KEY"
20
+ ],
21
+ capacityProviderRunner: [
22
+ "TREESEED_CAPACITY_PROVIDER_API_KEY"
17
23
  ]
18
24
  };
19
25
  const RAILWAY_VARIABLE_KEYS_BY_SERVICE = {
@@ -22,6 +28,18 @@ const RAILWAY_VARIABLE_KEYS_BY_SERVICE = {
22
28
  "TREESEED_PLATFORM_RUNNER_DATA_DIR",
23
29
  "TREESEED_PLATFORM_RUNNER_ENVIRONMENT",
24
30
  "TREESEED_MANAGER_ID"
31
+ ],
32
+ capacityProviderManager: [
33
+ "TREESEED_PROVIDER_ENVIRONMENT",
34
+ "TREESEED_PROVIDER_ROLE",
35
+ "TREESEED_MARKET_URL"
36
+ ],
37
+ capacityProviderRunner: [
38
+ "TREESEED_PROVIDER_ENVIRONMENT",
39
+ "TREESEED_PROVIDER_ROLE",
40
+ "TREESEED_MARKET_URL",
41
+ "TREESEED_PROVIDER_RUNNER_ID",
42
+ "TREESEED_PROVIDER_DATA_DIR"
25
43
  ]
26
44
  };
27
45
  function check(input) {
@@ -38,8 +56,15 @@ function rootDirectory(tenantRoot, rootDir) {
38
56
  return rel || ".";
39
57
  }
40
58
  function railwayServiceRootDirectory(tenantRoot, service) {
59
+ const sourceRootDirectory = String(service.sourceRootDirectory ?? "").trim();
60
+ if (sourceRootDirectory) {
61
+ return sourceRootDirectory;
62
+ }
41
63
  return rootDirectory(service.application?.root ?? tenantRoot, service.rootDir);
42
64
  }
65
+ function railwayServiceUsesImageSource(service) {
66
+ return Boolean(service.imageRef || service.sourceMode === "image");
67
+ }
43
68
  function hasConfiguredValue(values, key) {
44
69
  return typeof values[key] === "string" && Boolean(values[key]?.trim());
45
70
  }
@@ -65,6 +90,8 @@ function valuePresence(values, observed, key, serviceTarget) {
65
90
  function serviceTypeFor(key) {
66
91
  if (key === "api") return "api";
67
92
  if (key === "operationsRunner") return "operationsRunner";
93
+ if (key === "capacityProviderManager") return "capacityProviderManager";
94
+ if (key === "capacityProviderRunner") return "capacityProviderRunner";
68
95
  if (key === "treeseedDatabase") return "treeseedDatabase";
69
96
  return "unknown";
70
97
  }
@@ -118,7 +145,7 @@ function httpStatus(url, options) {
118
145
  function collectTreeseedHostedServiceChecks(options) {
119
146
  const target = options.target ?? "prod";
120
147
  const tenantRoot = options.tenantRoot;
121
- const deployConfig = loadCliDeployConfig(tenantRoot);
148
+ const deployConfig = loadTreeseedPlatformConfig({ tenantRoot, environment: target, env: process.env }).deployConfig;
122
149
  const registry = collectTreeseedEnvironmentContext(tenantRoot);
123
150
  let machineValues = {};
124
151
  try {
@@ -128,12 +155,17 @@ function collectTreeseedHostedServiceChecks(options) {
128
155
  }
129
156
  const values = { ...machineValues, ...options.valuesOverlay ?? {} };
130
157
  const checks = [];
158
+ const selectedServiceKeys = new Set((options.serviceKeys ?? []).map((key) => key.trim()).filter(Boolean));
131
159
  const selectedAppId = options.appId?.trim() || null;
132
- const selectedApplication = selectedAppId ? discoverTreeseedApplications(tenantRoot).find((application) => application.id === selectedAppId || application.relativeRoot === selectedAppId) : null;
160
+ const applications = discoverTreeseedApplications(tenantRoot);
161
+ const selectedApplication = selectedAppId ? applications.find((application) => application.id === selectedAppId || application.relativeRoot === selectedAppId) : null;
162
+ const workspaceHasApiApplication = applications.some(
163
+ (application) => application.roles.includes("api") || application.config.surfaces?.api?.enabled === true || application.config.services?.api?.enabled !== false && Boolean(application.config.services?.api)
164
+ );
133
165
  const includeWeb = !selectedAppId || selectedAppId === "web" || selectedApplication?.roles.includes("web") === true;
134
166
  const includeApi = !selectedAppId || selectedAppId === "api" || selectedApplication?.roles.includes("api") === true;
135
167
  const selectedAppHasApi = Boolean(
136
- selectedApplication?.roles.includes("api") || selectedApplication?.config.surfaces?.api?.enabled === true || selectedApplication?.config.services?.api?.enabled !== false && selectedApplication?.config.services?.api
168
+ selectedApplication?.roles.includes("api") || selectedApplication?.config.surfaces?.api?.enabled === true || selectedApplication?.config.services?.api?.enabled !== false && selectedApplication?.config.services?.api || selectedAppId === "web" && workspaceHasApiApplication || selectedAppId === "web" && (deployConfig.surfaces?.api?.enabled === true || deployConfig.services?.api?.enabled !== false && deployConfig.services?.api)
137
169
  );
138
170
  const selectedWeb = webCheckConfig(deployConfig, selectedApplication);
139
171
  const web = selectedWeb.web;
@@ -179,7 +211,7 @@ function collectTreeseedHostedServiceChecks(options) {
179
211
  }));
180
212
  }
181
213
  }
182
- const configuredServices = configuredRailwayServices(tenantRoot, target).filter((service) => !selectedAppId || service.application?.id === selectedAppId);
214
+ const configuredServices = configuredRailwayServices(tenantRoot, target).filter((service) => !selectedAppId || service.application?.id === selectedAppId).filter((service) => selectedServiceKeys.size === 0 || selectedServiceKeys.has(service.key));
183
215
  for (const service of configuredServices) {
184
216
  const serviceType = serviceTypeFor(service.key);
185
217
  const observed = observedFor(options, service.serviceName);
@@ -197,8 +229,9 @@ function collectTreeseedHostedServiceChecks(options) {
197
229
  issues: observed ? [] : ["No live Railway observation was provided."]
198
230
  }));
199
231
  for (const [key, expected] of Object.entries({
200
- rootDirectory: expectedRootDirectory,
232
+ rootDirectory: railwayServiceUsesImageSource(service) ? null : expectedRootDirectory,
201
233
  buildCommand: service.buildCommand,
234
+ dockerfilePath: service.dockerfilePath,
202
235
  startCommand: service.startCommand,
203
236
  healthcheckPath: service.healthcheckPath,
204
237
  healthcheckTimeoutSeconds: service.healthcheckTimeoutSeconds,
@@ -219,7 +252,81 @@ function collectTreeseedHostedServiceChecks(options) {
219
252
  issues: !observed || actual === expected ? [] : [`Expected ${key}=${expected}, observed ${actual ?? "(unset)"}.`]
220
253
  }));
221
254
  }
222
- if (service.key === "operationsRunner" && service.volumeMountPath) {
255
+ if (!railwayServiceUsesImageSource(service) && service.sourceRepo) {
256
+ const actualRepo = observed?.deploymentRepo ?? null;
257
+ const actualBranch = observed?.deploymentBranch ?? null;
258
+ const actualRootDirectory = observed?.deploymentRootDirectory ?? null;
259
+ const sourceUploadDeployment = target === "staging" && actualRepo === null && actualBranch === null && observed?.deploymentHealthy === true;
260
+ checks.push(check({
261
+ id: `railway:${service.instanceKey}:deployment-repo`,
262
+ provider: "railway",
263
+ serviceKey: service.key,
264
+ serviceType,
265
+ target,
266
+ description: `Railway ${service.serviceName} latest deployment uses the desired Git repo.`,
267
+ expected: { repo: service.sourceRepo },
268
+ observed: observed ? { repo: actualRepo, sourceUpload: sourceUploadDeployment } : { skipped: true },
269
+ status: observed ? sourceUploadDeployment ? "passed" : statusForMatch(actualRepo, service.sourceRepo) : "skipped",
270
+ issues: !observed || sourceUploadDeployment || actualRepo === service.sourceRepo ? [] : [`Expected deployment repo=${service.sourceRepo}, observed ${actualRepo ?? "(unset)"}.`]
271
+ }));
272
+ if (service.sourceBranch) {
273
+ checks.push(check({
274
+ id: `railway:${service.instanceKey}:deployment-branch`,
275
+ provider: "railway",
276
+ serviceKey: service.key,
277
+ serviceType,
278
+ target,
279
+ description: `Railway ${service.serviceName} latest deployment uses the desired Git branch.`,
280
+ expected: { branch: service.sourceBranch },
281
+ observed: observed ? { branch: actualBranch, commitHash: observed.deploymentCommitHash ?? null, sourceUpload: sourceUploadDeployment } : { skipped: true },
282
+ status: observed ? sourceUploadDeployment ? "passed" : statusForMatch(actualBranch, service.sourceBranch) : "skipped",
283
+ issues: !observed || sourceUploadDeployment || actualBranch === service.sourceBranch ? [] : [`Expected deployment branch=${service.sourceBranch}, observed ${actualBranch ?? "(unset)"}.`]
284
+ }));
285
+ }
286
+ if (expectedRootDirectory) {
287
+ checks.push(check({
288
+ id: `railway:${service.instanceKey}:deployment-root-directory`,
289
+ provider: "railway",
290
+ serviceKey: service.key,
291
+ serviceType,
292
+ target,
293
+ description: `Railway ${service.serviceName} latest deployment uses the desired Git root directory.`,
294
+ expected: { rootDirectory: expectedRootDirectory },
295
+ observed: observed ? { rootDirectory: actualRootDirectory } : { skipped: true },
296
+ status: observed ? statusForMatch(actualRootDirectory, expectedRootDirectory) : "skipped",
297
+ issues: !observed || actualRootDirectory === expectedRootDirectory ? [] : [`Expected deployment rootDirectory=${expectedRootDirectory}, observed ${actualRootDirectory ?? "(unset)"}.`]
298
+ }));
299
+ }
300
+ }
301
+ if (observed && observed.deploymentHealthy === false) {
302
+ checks.push(check({
303
+ id: `railway:${service.instanceKey}:deployment`,
304
+ provider: "railway",
305
+ serviceKey: service.key,
306
+ serviceType,
307
+ target,
308
+ description: `Railway ${service.serviceName} latest deployment is healthy.`,
309
+ expected: { healthy: true },
310
+ observed: { healthy: false, status: observed.deploymentStatus ?? null },
311
+ status: "failed",
312
+ issues: [`Latest Railway deployment status is ${observed.deploymentStatus ?? "unknown"}.`]
313
+ }));
314
+ } else if (observed) {
315
+ checks.push(check({
316
+ id: `railway:${service.instanceKey}:deployment`,
317
+ provider: "railway",
318
+ serviceKey: service.key,
319
+ serviceType,
320
+ target,
321
+ description: `Railway ${service.serviceName} latest deployment is healthy.`,
322
+ expected: { healthy: true },
323
+ observed: { healthy: observed.deploymentHealthy ?? null, status: observed.deploymentStatus ?? null },
324
+ status: observed.deploymentHealthy === true ? "passed" : "skipped",
325
+ issues: observed.deploymentHealthy === true ? [] : ["No live Railway deployment health observation was provided."]
326
+ }));
327
+ }
328
+ if (service.volumeMountPath) {
329
+ const volumeAttached = Boolean(observed?.volumeId) && observed?.volumeMountPath === service.volumeMountPath && (!observed?.serviceName || !observed?.volumeServiceId || observed.volumeServiceId === observed.serviceId) && observed?.volumePendingDeletion !== true && !(typeof observed?.volumeDeletedAt === "string" && observed.volumeDeletedAt.trim()) && !["DELETING", "DELETED"].includes(String(observed?.volumeState ?? "").toUpperCase());
223
330
  checks.push(check({
224
331
  id: `railway:${service.instanceKey}:volume`,
225
332
  provider: "railway",
@@ -228,9 +335,53 @@ function collectTreeseedHostedServiceChecks(options) {
228
335
  target,
229
336
  description: `Railway ${service.serviceName} volume mount matches config.`,
230
337
  expected: { volumeMountPath: service.volumeMountPath },
231
- observed: observed ? { volumeMountPath: observed.volumeMountPath ?? null } : { skipped: true },
232
- status: observed ? statusForMatch(observed.volumeMountPath ?? null, service.volumeMountPath) : "skipped",
233
- issues: !observed || observed.volumeMountPath === service.volumeMountPath ? [] : [`Expected volumeMountPath=${service.volumeMountPath}, observed ${observed.volumeMountPath ?? "(unset)"}.`]
338
+ observed: observed ? {
339
+ volumeName: observed.volumeName ?? null,
340
+ volumeId: observed.volumeId ?? null,
341
+ volumeMountPath: observed.volumeMountPath ?? null,
342
+ volumeServiceId: observed.volumeServiceId ?? null,
343
+ volumeEnvironmentId: observed.volumeEnvironmentId ?? null,
344
+ volumeState: observed.volumeState ?? null,
345
+ volumePendingDeletion: observed.volumePendingDeletion ?? null,
346
+ volumeDeletedAt: observed.volumeDeletedAt ?? null
347
+ } : { skipped: true },
348
+ status: observed ? volumeAttached ? "passed" : "failed" : "skipped",
349
+ issues: !observed || volumeAttached ? [] : [`Expected an attached persistent volume mounted at ${service.volumeMountPath}, observed ${observed.volumeMountPath ?? "(unset)"} on volume ${observed.volumeName ?? "(none)"}.`]
350
+ }));
351
+ const volumeNotPendingDeletion = observed?.volumePendingDeletion === false && !["DELETING", "DELETED"].includes(String(observed?.volumeState ?? "").toUpperCase());
352
+ checks.push(check({
353
+ id: `railway:${service.instanceKey}:volume-retained`,
354
+ provider: "railway",
355
+ serviceKey: service.key,
356
+ serviceType,
357
+ target,
358
+ description: `Railway ${service.serviceName} volume is retained and active.`,
359
+ expected: { pendingDeletion: false },
360
+ observed: observed ? {
361
+ volumeName: observed.volumeName ?? null,
362
+ volumeId: observed.volumeId ?? null,
363
+ state: observed.volumeState ?? null,
364
+ pendingDeletion: observed.volumePendingDeletion ?? null,
365
+ deletedAt: observed.volumeDeletedAt ?? null
366
+ } : { skipped: true },
367
+ status: observed ? volumeNotPendingDeletion ? "passed" : "failed" : "skipped",
368
+ issues: !observed || volumeNotPendingDeletion ? [] : [`Expected an active retained volume, observed state=${observed.volumeState ?? "(unset)"} pendingDeletion=${String(observed.volumePendingDeletion ?? null)} deletedAt=${observed.volumeDeletedAt ?? "(unset)"}.`]
369
+ }));
370
+ const deploymentHasVolumeMount = observed?.deploymentRequiredMountPath === service.volumeMountPath || (observed?.deploymentVolumeMounts ?? []).includes(service.volumeMountPath);
371
+ checks.push(check({
372
+ id: `railway:${service.instanceKey}:deployment-required-mount`,
373
+ provider: "railway",
374
+ serviceKey: service.key,
375
+ serviceType,
376
+ target,
377
+ description: `Railway ${service.serviceName} deployment metadata includes the volume mount.`,
378
+ expected: { volumeMountPath: service.volumeMountPath },
379
+ observed: observed ? {
380
+ requiredMountPath: observed.deploymentRequiredMountPath ?? null,
381
+ volumeMounts: observed.deploymentVolumeMounts ?? []
382
+ } : { skipped: true },
383
+ status: observed ? deploymentHasVolumeMount ? "passed" : "failed" : "skipped",
384
+ issues: !observed || deploymentHasVolumeMount ? [] : [`Expected deployment metadata to include volume mount ${service.volumeMountPath}.`]
234
385
  }));
235
386
  }
236
387
  for (const key of [...RAILWAY_SECRET_KEYS_BY_SERVICE[service.key] ?? [], ...RAILWAY_VARIABLE_KEYS_BY_SERVICE[service.key] ?? []]) {
@@ -262,7 +413,7 @@ function collectTreeseedHostedServiceChecks(options) {
262
413
  ...discoverTreeseedApplications(tenantRoot).filter((application) => application.root !== resolve(tenantRoot)).filter((application) => !selectedAppId || application.id === selectedAppId).map((application) => application.config)
263
414
  ];
264
415
  const treeseedDatabaseService = applicationConfigs.map((config) => config.services?.treeseedDatabase).find((service) => service?.enabled !== false);
265
- if (includeApi && treeseedDatabaseService?.enabled !== false && treeseedDatabaseService?.provider === "railway") {
416
+ if (includeApi && (selectedServiceKeys.size === 0 || selectedServiceKeys.has("treeseedDatabase")) && treeseedDatabaseService?.enabled !== false && treeseedDatabaseService?.provider === "railway") {
266
417
  const targets = treeseedDatabaseService.railway?.serviceTargets ?? [];
267
418
  checks.push(check({
268
419
  id: "railway:treeseedDatabase:targets",
@@ -1,5 +1,5 @@
1
- import { type TreeseedEnvironmentScope } from '../../platform/environment.ts';
2
- import type { TreeseedReconcileTarget } from '../../reconcile/contracts.ts';
1
+ import { type TreeseedEnvironmentScope } from '../../platform/environment.js';
2
+ import type { TreeseedReconcileTarget } from '../../reconcile/contracts.js';
3
3
  export type TreeseedHostingAuditEnvironment = 'current' | 'local' | 'staging' | 'prod';
4
4
  export type TreeseedHostingAuditResolvedEnvironment = 'local' | 'staging' | 'prod' | 'preview';
5
5
  export type TreeseedHostingAuditHostKind = 'repository' | 'web' | 'email';
@@ -20,7 +20,7 @@ import {
20
20
  PRODUCTION_BRANCH,
21
21
  STAGING_BRANCH
22
22
  } from "./git-workflow.js";
23
- import { loadCliDeployConfig } from "./runtime-tools.js";
23
+ import { loadTreeseedPlatformConfig } from "../../platform/config.js";
24
24
  import {
25
25
  collectTreeseedReconcileStatus,
26
26
  reconcileTreeseedTarget
@@ -110,7 +110,7 @@ function resolveTreeseedHostingAuditTarget({
110
110
  }
111
111
  if (branchName) {
112
112
  try {
113
- const deployConfig = loadCliDeployConfig(tenantRoot);
113
+ const deployConfig = loadTreeseedPlatformConfig({ tenantRoot, environment: "staging", env: process.env }).deployConfig;
114
114
  const previewTarget = createBranchPreviewDeployTarget(branchName);
115
115
  const previewState = loadDeployState(tenantRoot, deployConfig, { target: previewTarget });
116
116
  if (previewState?.previewEnabled === true || previewState?.readiness?.initialized === true || hasValue(previewState?.lastDeployedUrl) || hasValue(previewState?.workerName)) {
@@ -222,17 +222,17 @@ function appendManualConfigChecks(checks, values, hostKinds) {
222
222
  id: "web.cloudflare.token",
223
223
  hostType: "web",
224
224
  provider: "cloudflare",
225
- keys: ["CLOUDFLARE_API_TOKEN"],
225
+ keys: ["TREESEED_CLOUDFLARE_API_TOKEN"],
226
226
  label: "Web provider token",
227
- remediation: "Set CLOUDFLARE_API_TOKEN for TreeSeed-managed Web hosting."
227
+ remediation: "Set TREESEED_CLOUDFLARE_API_TOKEN for TreeSeed-managed Web hosting."
228
228
  });
229
229
  requiredKeyCheck(checks, values, {
230
230
  id: "web.cloudflare.account",
231
231
  hostType: "web",
232
232
  provider: "cloudflare",
233
- keys: ["CLOUDFLARE_ACCOUNT_ID"],
233
+ keys: ["TREESEED_CLOUDFLARE_ACCOUNT_ID"],
234
234
  label: "Web provider account",
235
- remediation: "Set CLOUDFLARE_ACCOUNT_ID for TreeSeed-managed Web hosting."
235
+ remediation: "Set TREESEED_CLOUDFLARE_ACCOUNT_ID for TreeSeed-managed Web hosting."
236
236
  });
237
237
  }
238
238
  if (hostKinds.includes("email")) {
@@ -468,7 +468,7 @@ async function runTreeseedHostingAudit({
468
468
  }) {
469
469
  const resolved = resolveTreeseedHostingAuditTarget({ tenantRoot, environment });
470
470
  const hostKinds = normalizeHostKinds(requestedHostKinds);
471
- const deployConfig = loadCliDeployConfig(tenantRoot);
471
+ const deployConfig = loadTreeseedPlatformConfig({ tenantRoot, environment: resolved.scope, env }).deployConfig;
472
472
  const seedValues = collectTreeseedConfigSeedValues(tenantRoot, resolved.scope, env, valuesOverlay);
473
473
  const suggestedValues = getTreeseedEnvironmentSuggestedValues({
474
474
  scope: resolved.scope,
@@ -1,4 +1,4 @@
1
- import { type KnowledgeHubProviderLaunchInput, type KnowledgeHubProviderLaunchResult } from './hub-provider-launch.ts';
1
+ import { type KnowledgeHubProviderLaunchInput, type KnowledgeHubProviderLaunchResult } from './hub-provider-launch.js';
2
2
  export type KnowledgeHubSourceKind = 'blank_hub' | 'template' | 'knowledge_pack' | 'market_listing';
3
3
  export type KnowledgeHubRepositoryTopology = 'split_software_content' | 'combined_compatibility';
4
4
  export type KnowledgeHubRepositoryRole = 'software' | 'content' | 'parent_workspace';
@@ -1,8 +1,8 @@
1
- import { checkTreeseedProviderConnections, syncTreeseedGitHubEnvironment } from './config-runtime.ts';
2
- import { configuredRailwayServices, deployRailwayService, ensureRailwayScheduledJobs, verifyRailwayScheduledJobs } from './railway-deploy.ts';
3
- import { type ProjectLaunchSecretSyncResult } from './template-secret-sync.ts';
4
- import { buildKnowledgePackMarketPackage, buildTemplateMarketPackage } from './market-packaging.ts';
5
- import type { ProjectLaunchConfigWritePlanItem, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.ts';
1
+ import { checkTreeseedProviderConnections, syncTreeseedGitHubEnvironment } from './config-runtime.js';
2
+ import { configuredRailwayServices, deployRailwayService, ensureRailwayScheduledJobs, verifyRailwayScheduledJobs } from './railway-deploy.js';
3
+ import { type ProjectLaunchSecretSyncResult } from './template-secret-sync.js';
4
+ import { buildKnowledgePackMarketPackage, buildTemplateMarketPackage } from './market-packaging.js';
5
+ import type { ProjectLaunchConfigWritePlanItem, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.js';
6
6
  export type KnowledgeHubProviderLaunchFailurePhase = 'repo_provision_failed' | 'content_bootstrap_failed' | 'workflow_bootstrap_failed' | 'hosting_registration_failed' | 'host_binding_secret_sync_failed' | 'runtime_connection_failed';
7
7
  export interface KnowledgeHubProviderLaunchInput {
8
8
  projectId: string;
@@ -1,6 +1,5 @@
1
1
  import { cpSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync, existsSync } from "node:fs";
2
2
  import { spawnSync } from "node:child_process";
3
- import { tmpdir } from "node:os";
4
3
  import { dirname, join, resolve } from "node:path";
5
4
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
6
5
  import { collectTreeseedReconcileStatus, reconcileTreeseedTarget } from "../../reconcile/index.js";
@@ -18,6 +17,7 @@ import { loadCliDeployConfig } from "./runtime-tools.js";
18
17
  import { templateCatalogRoot } from "./runtime-paths.js";
19
18
  import { scaffoldTemplateProject } from "./template-registry.js";
20
19
  import { applyProjectLaunchHostBindingConfig } from "./template-host-bindings.js";
20
+ import { runTreeseedGit } from "./git-runner.js";
21
21
  import {
22
22
  ProjectLaunchSecretSyncError,
23
23
  syncProjectLaunchHostBindingSecrets
@@ -70,19 +70,24 @@ function ensureDir(path) {
70
70
  mkdirSync(path, { recursive: true });
71
71
  }
72
72
  function runGit(cwd, args, capture = true) {
73
- const result = spawnSync("git", args, {
73
+ const mutating = /^(add|commit|checkout|switch|merge|tag|push|fetch|worktree|submodule|reset|clean|restore|branch)$/u.test(args[0] ?? "");
74
+ const result = runTreeseedGit(args, {
74
75
  cwd,
75
- stdio: capture ? "pipe" : "inherit",
76
- encoding: "utf8"
76
+ mode: mutating ? "mutate" : "read",
77
+ allowFailure: true
77
78
  });
79
+ if (!capture && result.stdout.trim()) process.stdout.write(result.stdout);
80
+ if (!capture && result.stderr.trim()) process.stderr.write(result.stderr);
78
81
  if (result.status !== 0) {
79
82
  if (args[0] === "push" && !args.includes("--force")) {
80
83
  const retryArgs = ["push", "--force", ...args.slice(1)];
81
- const retry = spawnSync("git", retryArgs, {
84
+ const retry = runTreeseedGit(retryArgs, {
82
85
  cwd,
83
- stdio: capture ? "pipe" : "inherit",
84
- encoding: "utf8"
86
+ mode: "mutate",
87
+ allowFailure: true
85
88
  });
89
+ if (!capture && retry.stdout.trim()) process.stdout.write(retry.stdout);
90
+ if (!capture && retry.stderr.trim()) process.stderr.write(retry.stderr);
86
91
  if (retry.status === 0) return retry;
87
92
  const retryDetail = retry.stderr?.trim() || retry.stdout?.trim();
88
93
  throw new Error(`git ${retryArgs.join(" ")} failed${retryDetail ? `: ${retryDetail}` : ""}`);
@@ -292,7 +297,7 @@ This hub is live and ready for the first team release cycle.
292
297
  }
293
298
  function ensureHostedProjectFiles(projectRoot) {
294
299
  const sdkApiPackage = ["@treeseed", "sdk/api"].join("/");
295
- writeText(resolve(projectRoot, "src/api/server.js"), `import { createRailwayTreeseedApiServer } from '${sdkApiPackage}';
300
+ writeText(resolve(projectRoot, "src/api/server.ts"), `import { createRailwayTreeseedApiServer } from '${sdkApiPackage}';
296
301
 
297
302
  const server = await createRailwayTreeseedApiServer();
298
303
  console.log(\`Treeseed project API listening on \${server.url}\`);
@@ -340,8 +345,6 @@ function applyManagedProjectDefaults(projectRoot, input) {
340
345
  accountId: cloudflareAccountId,
341
346
  ...input.domains?.zoneId ? { zoneId: input.domains.zoneId } : {},
342
347
  workerName: slug,
343
- queueName: `${slug}-agent-work`,
344
- dlqName: `${slug}-agent-work-dlq`,
345
348
  pages: {
346
349
  projectName: slug,
347
350
  previewProjectName: slug,
@@ -647,7 +650,7 @@ function scaffoldLaunchSource(projectRoot, input) {
647
650
  });
648
651
  }
649
652
  function repositoryHostGitHubEnvOverlay() {
650
- const token = process.env.GH_TOKEN || process.env.GITHUB_TOKEN || process.env.TREESEED_HOSTED_HUBS_GITHUB_TOKEN || "";
653
+ const token = process.env.TREESEED_GITHUB_TOKEN || process.env.TREESEED_HOSTED_HUBS_GITHUB_TOKEN || "";
651
654
  return token ? { ...process.env, GH_TOKEN: token, GITHUB_TOKEN: token } : process.env;
652
655
  }
653
656
  function prepareKnowledgeHubContentRepositoryRoot(sourceRoot, contentRoot, input) {
@@ -747,7 +750,9 @@ async function executeKnowledgeHubProviderLaunch(input, options = {}) {
747
750
  []
748
751
  );
749
752
  }
750
- const workingRoot = mkdtempSync(join(tmpdir(), `hub-provider-launch-${slugify(input.projectSlug, "project")}-`));
753
+ const launchTempBase = resolve(process.cwd(), ".treeseed", "tmp", "hub-provider-launch");
754
+ mkdirSync(launchTempBase, { recursive: true });
755
+ const workingRoot = mkdtempSync(join(launchTempBase, `hub-provider-launch-${slugify(input.projectSlug, "project")}-`));
751
756
  const repoOwner = slugify(input.repoOwner ?? resolveDefaultGitHubOwner(), "treeseed-ai");
752
757
  const repoName = slugify(input.repoName ?? input.projectSlug, "project");
753
758
  const githubEnv = repositoryHostGitHubEnvOverlay();
@@ -796,14 +801,14 @@ async function executeKnowledgeHubProviderLaunch(input, options = {}) {
796
801
  );
797
802
  }
798
803
  const seed = seedLaunchContent(workingRoot, input);
799
- packageSourceRoot = mkdtempSync(join(tmpdir(), `market-package-${slugify(input.projectSlug, "project")}-`));
804
+ packageSourceRoot = mkdtempSync(join(launchTempBase, `market-package-${slugify(input.projectSlug, "project")}-`));
800
805
  cpSync(workingRoot, packageSourceRoot, { recursive: true });
801
806
  await appendPhase(phases, "content_bootstrap", "completed", "Scaffolded the repo and seeded Direct content.", reportPhase);
802
807
  let contentRepository = null;
803
808
  let contentRepositoryWorkingRoot = null;
804
809
  if (input.contentRepository?.name) {
805
810
  await appendPhase(phases, "content_repository", "running", "Creating content repository.", reportPhase);
806
- contentRepositoryWorkingRoot = mkdtempSync(join(tmpdir(), `market-content-${slugify(input.projectSlug, "project")}-`));
811
+ contentRepositoryWorkingRoot = mkdtempSync(join(launchTempBase, `market-content-${slugify(input.projectSlug, "project")}-`));
807
812
  prepareKnowledgeHubContentRepositoryRoot(workingRoot, contentRepositoryWorkingRoot, input);
808
813
  const createdContentRepository = input.contentRepository.url ? {
809
814
  ...resolveGitHubRemoteUrls(input.contentRepository.owner ?? repoOwner, input.contentRepository.name),
@@ -1,8 +1,9 @@
1
- import { type TreeseedHostedServiceCheckReport, type TreeseedHostedServiceTarget } from './hosted-service-checks.ts';
1
+ import { type TreeseedHostedServiceCheckReport, type TreeseedHostedServiceTarget } from './hosted-service-checks.js';
2
2
  export interface TreeseedLiveHostedServiceCheckOptions {
3
3
  tenantRoot: string;
4
4
  target: TreeseedHostedServiceTarget;
5
5
  appId?: string;
6
+ serviceKeys?: string[];
6
7
  strict?: boolean;
7
8
  requireLiveRailway?: boolean;
8
9
  requireLiveHttp?: boolean;