@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
@@ -3,7 +3,7 @@ import { dirname, extname, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { spawn, spawnSync } from "node:child_process";
5
5
  import { createRequire } from "node:module";
6
- import { parse as parseYaml } from "yaml";
6
+ import { loadTreeseedDeployConfigFromPath } from "../../platform/deploy-config.js";
7
7
  const require2 = createRequire(import.meta.url);
8
8
  const scriptRoot = dirname(fileURLToPath(import.meta.url));
9
9
  function resolveSdkPackageRoot(startDir) {
@@ -28,246 +28,7 @@ function resolveSdkPackageRoot(startDir) {
28
28
  }
29
29
  const packageRootFromSource = resolveSdkPackageRoot(scriptRoot);
30
30
  const treeseedRuntimeRoot = resolve(packageRootFromSource, "src", "treeseed");
31
- const TREESEED_DEFAULT_PLUGIN_REFERENCES = [
32
- {
33
- package: "@treeseed/sdk/plugin-default",
34
- enabled: true
35
- }
36
- ];
37
- const TREESEED_DEFAULT_PROVIDER_SELECTIONS = {
38
- forms: "store_only",
39
- agents: {
40
- execution: "codex",
41
- mutation: "local_branch",
42
- repository: "git",
43
- verification: "local",
44
- notification: "sdk_message",
45
- research: "project_graph"
46
- },
47
- deploy: "cloudflare",
48
- dns: "cloudflare-dns",
49
- content: {
50
- runtime: "team_scoped_r2_overlay",
51
- publish: "team_scoped_r2_overlay",
52
- docs: "default"
53
- },
54
- site: "default"
55
- };
56
- const TRESEED_MANAGED_SERVICE_KEYS = ["treeseedDatabase", "api", "operationsRunner"];
57
31
  const TRESEED_WORKSPACE_PACKAGE_DIRS = ["sdk", "core", "cli"];
58
- const CLOUDFLARE_ACCOUNT_ID_PLACEHOLDER = "replace-with-cloudflare-account-id";
59
- function normalizePlanesFromLegacyHosting(hosting) {
60
- if (!hosting || Object.keys(hosting).length === 0) {
61
- return {
62
- hub: { mode: "treeseed_hosted" },
63
- runtime: { mode: "none", registration: "none" }
64
- };
65
- }
66
- if (hosting.kind === "treeseed_control_plane" || hosting.kind === "hosted_project") {
67
- return {
68
- hub: { mode: "treeseed_hosted" },
69
- runtime: {
70
- mode: "treeseed_managed",
71
- registration: hosting.kind === "treeseed_control_plane" ? "none" : hosting.registration ?? "none",
72
- marketBaseUrl: hosting.marketBaseUrl,
73
- teamId: hosting.teamId,
74
- projectId: hosting.projectId
75
- }
76
- };
77
- }
78
- return {
79
- hub: { mode: "customer_hosted" },
80
- runtime: {
81
- mode: "byo_attached",
82
- registration: hosting.registration ?? "none",
83
- marketBaseUrl: hosting.marketBaseUrl,
84
- teamId: hosting.teamId,
85
- projectId: hosting.projectId
86
- }
87
- };
88
- }
89
- function normalizeLegacyHostingFromPlanes(hub, runtime) {
90
- if (runtime.mode === "treeseed_managed" && hub.mode === "treeseed_hosted") {
91
- return {
92
- kind: "hosted_project",
93
- registration: runtime.registration === "required" ? "optional" : runtime.registration ?? "none",
94
- marketBaseUrl: runtime.marketBaseUrl,
95
- teamId: runtime.teamId,
96
- projectId: runtime.projectId
97
- };
98
- }
99
- return {
100
- kind: "self_hosted_project",
101
- registration: runtime.registration === "required" ? "optional" : runtime.registration ?? "none",
102
- marketBaseUrl: runtime.marketBaseUrl,
103
- teamId: runtime.teamId,
104
- projectId: runtime.projectId
105
- };
106
- }
107
- function parseServiceEnvironmentConfig(value) {
108
- const record = optionalRecord(value, "service environment") ?? {};
109
- return {
110
- baseUrl: optionalString(record.baseUrl),
111
- domain: optionalString(record.domain),
112
- railwayEnvironment: optionalString(record.railwayEnvironment)
113
- };
114
- }
115
- function parseLocalRuntimeConfig(value, label) {
116
- const record = optionalRecord(value, label);
117
- if (!record) {
118
- return void 0;
119
- }
120
- return {
121
- runtime: optionalEnum(record.runtime ?? record.runtime_mode ?? record.runtimeMode, `${label}.runtime`, ["auto", "provider", "local"])
122
- };
123
- }
124
- function parseManagedServiceConfig(value, label) {
125
- const record = optionalRecord(value, label);
126
- if (!record) {
127
- return void 0;
128
- }
129
- const railway = optionalRecord(record.railway, `${label}.railway`) ?? {};
130
- const cloudflare = optionalRecord(record.cloudflare, `${label}.cloudflare`) ?? {};
131
- const environments = optionalRecord(record.environments, `${label}.environments`) ?? {};
132
- return {
133
- enabled: record.enabled === void 0 ? void 0 : optionalBoolean(record.enabled, `${label}.enabled`),
134
- provider: optionalString(record.provider),
135
- rootDir: optionalString(record.rootDir),
136
- publicBaseUrl: optionalString(record.publicBaseUrl),
137
- local: parseLocalRuntimeConfig(record.local, `${label}.local`),
138
- cloudflare: {
139
- workerName: optionalString(cloudflare.workerName)
140
- },
141
- railway: {
142
- projectId: optionalString(railway.projectId),
143
- projectName: optionalString(railway.projectName),
144
- serviceId: optionalString(railway.serviceId),
145
- serviceName: optionalString(railway.serviceName),
146
- resourceType: optionalString(railway.resourceType),
147
- environmentVariable: optionalString(railway.environmentVariable),
148
- serviceTargets: Array.isArray(railway.serviceTargets) ? railway.serviceTargets.map((entry) => optionalString(entry)).filter(Boolean) : void 0,
149
- rootDir: optionalString(railway.rootDir),
150
- buildCommand: optionalString(railway.buildCommand),
151
- startCommand: optionalString(railway.startCommand),
152
- healthcheckPath: optionalString(railway.healthcheckPath),
153
- healthcheckTimeoutSeconds: optionalNonNegativeNumber(railway.healthcheckTimeoutSeconds, `${label}.railway.healthcheckTimeoutSeconds`),
154
- healthcheckIntervalSeconds: optionalNonNegativeNumber(railway.healthcheckIntervalSeconds, `${label}.railway.healthcheckIntervalSeconds`),
155
- restartPolicy: optionalString(railway.restartPolicy),
156
- runtimeMode: optionalString(railway.runtimeMode),
157
- volumeMountPath: optionalString(railway.volumeMountPath),
158
- runnerPool: optionalRecord(railway.runnerPool, `${label}.railway.runnerPool`) ? {
159
- bootstrapCount: optionalNonNegativeNumber(railway.runnerPool.bootstrapCount, `${label}.railway.runnerPool.bootstrapCount`),
160
- maxRunners: optionalNonNegativeNumber(railway.runnerPool.maxRunners, `${label}.railway.runnerPool.maxRunners`),
161
- volumeMountPath: optionalString(railway.runnerPool.volumeMountPath)
162
- } : void 0,
163
- schedule: Array.isArray(railway.schedule) ? railway.schedule.map((entry) => optionalString(entry)).filter(Boolean) : optionalString(railway.schedule)
164
- },
165
- environments: {
166
- local: parseServiceEnvironmentConfig(environments.local),
167
- staging: parseServiceEnvironmentConfig(environments.staging),
168
- prod: parseServiceEnvironmentConfig(environments.prod)
169
- }
170
- };
171
- }
172
- function parseManagedServicesConfig(value) {
173
- const record = optionalRecord(value, "services");
174
- if (!record) {
175
- return void 0;
176
- }
177
- return Object.fromEntries(
178
- TRESEED_MANAGED_SERVICE_KEYS.map((serviceKey) => [
179
- serviceKey,
180
- parseManagedServiceConfig(record[serviceKey], `services.${serviceKey}`)
181
- ])
182
- );
183
- }
184
- function parseWebSurfaceCacheConfig(value, label) {
185
- const record = optionalRecord(value, label) ?? {};
186
- if (Object.keys(record).length === 0) {
187
- return void 0;
188
- }
189
- return {
190
- sourcePages: parseWebCachePolicyRecord(record.sourcePages ?? record.source_pages, `${label}.sourcePages`, {
191
- paths: ["/", "/contact", "/404"]
192
- }),
193
- contentPages: parseWebCachePolicyRecord(record.contentPages ?? record.content_pages, `${label}.contentPages`),
194
- r2PublishedObjects: parseWebCachePolicyRecord(
195
- record.r2PublishedObjects ?? record.r2_published_objects,
196
- `${label}.r2PublishedObjects`
197
- )
198
- };
199
- }
200
- function parseWebCachePolicyRecord(value, label, options = {}) {
201
- const record = optionalRecord(value, label) ?? {};
202
- if (Object.keys(record).length === 0) {
203
- return options.paths ? { paths: [...options.paths] } : void 0;
204
- }
205
- const parsed = {
206
- browserTtlSeconds: optionalNonNegativeNumber(
207
- record.browserTtlSeconds ?? record.browser_ttl_seconds,
208
- `${label}.browserTtlSeconds`
209
- ),
210
- edgeTtlSeconds: optionalNonNegativeNumber(
211
- record.edgeTtlSeconds ?? record.edge_ttl_seconds,
212
- `${label}.edgeTtlSeconds`
213
- ),
214
- staleWhileRevalidateSeconds: optionalNonNegativeNumber(
215
- record.staleWhileRevalidateSeconds ?? record.stale_while_revalidate_seconds,
216
- `${label}.staleWhileRevalidateSeconds`
217
- ),
218
- staleIfErrorSeconds: optionalNonNegativeNumber(
219
- record.staleIfErrorSeconds ?? record.stale_if_error_seconds,
220
- `${label}.staleIfErrorSeconds`
221
- )
222
- };
223
- if (options.paths) {
224
- parsed.paths = [...new Set(Array.isArray(record.paths) ? record.paths.map((entry) => optionalString(entry)).filter(Boolean) : options.paths)];
225
- }
226
- return parsed;
227
- }
228
- function parseSurfaceConfig(value, label) {
229
- const record = optionalRecord(value, label);
230
- if (!record) {
231
- return void 0;
232
- }
233
- return {
234
- enabled: record.enabled === void 0 ? void 0 : optionalBoolean(record.enabled, `${label}.enabled`),
235
- provider: optionalString(record.provider),
236
- rootDir: optionalString(record.rootDir),
237
- publicBaseUrl: optionalString(record.publicBaseUrl),
238
- localBaseUrl: optionalString(record.localBaseUrl),
239
- local: parseLocalRuntimeConfig(record.local, `${label}.local`),
240
- environments: (() => {
241
- const environments = optionalRecord(record.environments, `${label}.environments`);
242
- if (!environments) {
243
- return void 0;
244
- }
245
- return {
246
- local: parseServiceEnvironmentConfig(environments.local),
247
- staging: parseServiceEnvironmentConfig(environments.staging),
248
- prod: parseServiceEnvironmentConfig(environments.prod)
249
- };
250
- })(),
251
- cache: parseWebSurfaceCacheConfig(record.cache, `${label}.cache`)
252
- };
253
- }
254
- function parsePlatformSurfacesConfig(value) {
255
- const record = optionalRecord(value, "surfaces");
256
- if (!record) {
257
- return void 0;
258
- }
259
- return Object.fromEntries(
260
- Object.entries(record).map(([surfaceKey, surfaceValue]) => [
261
- surfaceKey,
262
- parseSurfaceConfig(surfaceValue, `surfaces.${surfaceKey}`)
263
- ])
264
- );
265
- }
266
- function inferManagedRuntimeFromServices(services) {
267
- return Object.values(services ?? {}).some(
268
- (service) => service && service.enabled !== false && (service.provider ?? "railway") === "railway"
269
- );
270
- }
271
32
  const packageRoot = packageRootFromSource;
272
33
  const packageScriptRoot = resolve(packageRoot, "scripts");
273
34
  const packageDistScriptRoot = resolve(packageRoot, "dist", "scripts");
@@ -374,13 +135,13 @@ function packageScriptPath(scriptName) {
374
135
  }
375
136
  return directScriptPath;
376
137
  }
377
- for (const extension of [".js", ".ts", ".mjs"]) {
138
+ for (const extension of [".ts", ".js"]) {
378
139
  const candidate = resolve(packageScriptRoot, `${scriptName}${extension}`);
379
140
  if (existsSync(candidate)) {
380
141
  return candidate;
381
142
  }
382
143
  }
383
- for (const extension of [".js", ".mjs"]) {
144
+ for (const extension of [".js"]) {
384
145
  const candidate = resolve(packageDistScriptRoot, `${scriptName}${extension}`);
385
146
  if (existsSync(candidate)) {
386
147
  return candidate;
@@ -400,213 +161,12 @@ function withProcessCwd(cwd, action) {
400
161
  process.chdir(previous);
401
162
  }
402
163
  }
403
- function expectString(value, label) {
404
- if (typeof value !== "string" || value.trim().length === 0) {
405
- throw new Error(`Invalid deploy config: expected ${label} to be a non-empty string.`);
406
- }
407
- return value.trim();
408
- }
409
- function optionalString(value) {
410
- return typeof value === "string" && value.trim().length > 0 ? value.trim() : void 0;
411
- }
412
- function optionalCloudflareAccountId(value) {
413
- const accountId = optionalString(value);
414
- return accountId === CLOUDFLARE_ACCOUNT_ID_PLACEHOLDER ? void 0 : accountId;
415
- }
416
- function optionalBoolean(value, label) {
417
- if (value === void 0) {
418
- return void 0;
419
- }
420
- if (typeof value !== "boolean") {
421
- throw new Error(`Invalid deploy config: expected ${label} to be a boolean when provided.`);
422
- }
423
- return value;
424
- }
425
- function optionalPositiveNumber(value, label) {
426
- if (value === void 0) {
427
- return void 0;
428
- }
429
- if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
430
- throw new Error(`Invalid deploy config: expected ${label} to be a positive number when provided.`);
431
- }
432
- return value;
433
- }
434
- function optionalNonNegativeNumber(value, label) {
435
- if (value === void 0) {
436
- return void 0;
437
- }
438
- if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
439
- throw new Error(`Invalid deploy config: expected ${label} to be a non-negative number when provided.`);
440
- }
441
- return value;
442
- }
443
- function optionalEnum(value, label, allowed) {
444
- const normalized = optionalString(value);
445
- if (!normalized) {
446
- return void 0;
447
- }
448
- if (!allowed.includes(normalized)) {
449
- throw new Error(`Invalid deploy config: expected ${label} to be one of ${allowed.join(", ")}.`);
450
- }
451
- return normalized;
452
- }
453
- function optionalRecord(value, label) {
454
- if (value === void 0 || value === null) {
455
- return void 0;
456
- }
457
- if (typeof value !== "object" || Array.isArray(value)) {
458
- throw new Error(`Invalid deploy config: expected ${label} to be an object when provided.`);
459
- }
460
- return value;
461
- }
462
- function parsePluginReferences(value) {
463
- if (value === void 0) {
464
- return [...TREESEED_DEFAULT_PLUGIN_REFERENCES];
465
- }
466
- if (!Array.isArray(value)) {
467
- throw new Error("Invalid deploy config: expected plugins to be an array.");
468
- }
469
- return value.map((entry, index) => {
470
- const record = optionalRecord(entry, `plugins[${index}]`) ?? {};
471
- return {
472
- package: expectString(record.package, `plugins[${index}].package`),
473
- enabled: record.enabled === void 0 ? true : optionalBoolean(record.enabled, `plugins[${index}].enabled`),
474
- config: record.config === void 0 ? {} : optionalRecord(record.config, `plugins[${index}].config`)
475
- };
476
- });
477
- }
478
- function parseFallbackDeployConfig(configPath) {
479
- const parsed = parseYaml(readFileSync(configPath, "utf8")) ?? {};
480
- const record = optionalRecord(parsed, "root") ?? {};
481
- const cloudflare = optionalRecord(record.cloudflare, "cloudflare") ?? {};
482
- const cloudflarePages = optionalRecord(cloudflare.pages, "cloudflare.pages") ?? {};
483
- const cloudflareR2 = optionalRecord(cloudflare.r2, "cloudflare.r2") ?? {};
484
- const hosting = optionalRecord(record.hosting, "hosting") ?? {};
485
- const parsedHosting = Object.keys(hosting).length === 0 ? void 0 : {
486
- kind: optionalEnum(hosting.kind, "hosting.kind", [
487
- "treeseed_control_plane",
488
- "hosted_project",
489
- "self_hosted_project"
490
- ]) ?? "self_hosted_project",
491
- registration: optionalEnum(hosting.registration, "hosting.registration", ["optional", "none"]) ?? "none",
492
- marketBaseUrl: optionalString(process.env.TREESEED_API_BASE_URL) ?? optionalString(hosting.marketBaseUrl),
493
- teamId: optionalString(process.env.TREESEED_HOSTING_TEAM_ID) ?? optionalString(hosting.teamId),
494
- projectId: optionalString(process.env.TREESEED_PROJECT_ID) ?? optionalString(hosting.projectId)
495
- };
496
- const services = parseManagedServicesConfig(record.services);
497
- const normalizedPlanes = normalizePlanesFromLegacyHosting(parsedHosting);
498
- const inferredPlanes = !parsedHosting && record.hub === void 0 && record.runtime === void 0 && inferManagedRuntimeFromServices(services) ? {
499
- hub: { mode: "customer_hosted" },
500
- runtime: { mode: "treeseed_managed", registration: "none" }
501
- } : normalizedPlanes;
502
- const hubRecord = optionalRecord(record.hub, "hub") ?? {};
503
- const runtimeRecord = optionalRecord(record.runtime, "runtime") ?? {};
504
- const hub = {
505
- mode: optionalEnum(hubRecord.mode, "hub.mode", ["treeseed_hosted", "customer_hosted"]) ?? inferredPlanes.hub.mode
506
- };
507
- const runtime = {
508
- mode: optionalEnum(runtimeRecord.mode, "runtime.mode", ["none", "byo_attached", "treeseed_managed"]) ?? inferredPlanes.runtime.mode,
509
- registration: optionalEnum(runtimeRecord.registration, "runtime.registration", ["optional", "required", "none"]) ?? inferredPlanes.runtime.registration ?? "none",
510
- marketBaseUrl: optionalString(process.env.TREESEED_API_BASE_URL) ?? optionalString(runtimeRecord.marketBaseUrl) ?? inferredPlanes.runtime.marketBaseUrl,
511
- teamId: optionalString(process.env.TREESEED_HOSTING_TEAM_ID) ?? optionalString(runtimeRecord.teamId) ?? inferredPlanes.runtime.teamId,
512
- projectId: optionalString(process.env.TREESEED_PROJECT_ID) ?? optionalString(runtimeRecord.projectId) ?? inferredPlanes.runtime.projectId
513
- };
514
- const smtp = optionalRecord(record.smtp, "smtp") ?? {};
515
- const turnstile = optionalRecord(record.turnstile, "turnstile") ?? {};
516
- const agentProviders = optionalRecord(optionalRecord(record.providers, "providers")?.agents, "providers.agents") ?? {};
517
- const contentProviders = optionalRecord(optionalRecord(record.providers, "providers")?.content, "providers.content") ?? {};
518
- const deployConfig = {
519
- name: expectString(record.name, "name"),
520
- slug: expectString(record.slug, "slug"),
521
- siteUrl: expectString(record.siteUrl, "siteUrl"),
522
- contactEmail: expectString(record.contactEmail, "contactEmail"),
523
- hosting: parsedHosting?.kind === "treeseed_control_plane" ? { ...parsedHosting, registration: "none" } : parsedHosting && record.hub === void 0 && record.runtime === void 0 ? parsedHosting : normalizeLegacyHostingFromPlanes(hub, runtime),
524
- hub,
525
- runtime,
526
- cloudflare: {
527
- accountId: optionalCloudflareAccountId(process.env.CLOUDFLARE_ACCOUNT_ID) ?? CLOUDFLARE_ACCOUNT_ID_PLACEHOLDER,
528
- zoneId: optionalString(cloudflare.zoneId ?? cloudflare.zone_id),
529
- workerName: optionalString(cloudflare.workerName),
530
- queueName: optionalString(cloudflare.queueName),
531
- dlqName: optionalString(cloudflare.dlqName),
532
- d1Binding: optionalString(cloudflare.d1Binding),
533
- queueBinding: optionalString(cloudflare.queueBinding),
534
- pages: cloudflare.pages === void 0 ? void 0 : {
535
- projectName: optionalString(cloudflarePages.projectName) ?? optionalString(process.env.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME),
536
- previewProjectName: optionalString(process.env.TREESEED_CLOUDFLARE_PAGES_PREVIEW_PROJECT_NAME) ?? optionalString(cloudflarePages.previewProjectName) ?? optionalString(cloudflarePages.projectName) ?? optionalString(process.env.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME),
537
- productionBranch: optionalString(cloudflarePages.productionBranch) ?? "main",
538
- stagingBranch: optionalString(cloudflarePages.stagingBranch) ?? "staging",
539
- buildCommand: optionalString(cloudflarePages.buildCommand),
540
- buildOutputDir: optionalString(cloudflarePages.buildOutputDir)
541
- },
542
- r2: cloudflare.r2 === void 0 ? void 0 : {
543
- binding: optionalString(process.env.TREESEED_CONTENT_BUCKET_BINDING),
544
- bucketName: optionalString(process.env.TREESEED_CONTENT_BUCKET_NAME),
545
- publicBaseUrl: optionalString(process.env.TREESEED_CONTENT_PUBLIC_BASE_URL),
546
- manifestKeyTemplate: optionalString(cloudflareR2.manifestKeyTemplate ?? cloudflareR2.manifestKey) ?? "teams/{teamId}/published/common.json",
547
- previewRootTemplate: optionalString(cloudflareR2.previewRootTemplate ?? cloudflareR2.previewRoot) ?? "teams/{teamId}/previews",
548
- previewTtlHours: optionalPositiveNumber(cloudflareR2.previewTtlHours, "cloudflare.r2.previewTtlHours") ?? 168
549
- }
550
- },
551
- plugins: parsePluginReferences(record.plugins),
552
- providers: {
553
- forms: expectString(record.providers?.forms ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.forms, "providers.forms"),
554
- agents: {
555
- execution: expectString(agentProviders.execution ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.agents.execution, "providers.agents.execution"),
556
- mutation: expectString(agentProviders.mutation ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.agents.mutation, "providers.agents.mutation"),
557
- repository: expectString(agentProviders.repository ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.agents.repository, "providers.agents.repository"),
558
- verification: expectString(agentProviders.verification ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.agents.verification, "providers.agents.verification"),
559
- notification: expectString(agentProviders.notification ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.agents.notification, "providers.agents.notification"),
560
- research: expectString(agentProviders.research ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.agents.research, "providers.agents.research")
561
- },
562
- deploy: expectString(record.providers?.deploy ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.deploy, "providers.deploy"),
563
- dns: expectString(record.providers?.dns ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.dns, "providers.dns"),
564
- content: {
565
- runtime: expectString(
566
- contentProviders.runtime ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.content.runtime,
567
- "providers.content.runtime"
568
- ),
569
- publish: expectString(
570
- contentProviders.publish ?? contentProviders.runtime ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.content.publish,
571
- "providers.content.publish"
572
- ),
573
- docs: expectString(
574
- contentProviders.docs ?? contentProviders.runtime ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.content.docs ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.content.runtime,
575
- "providers.content.docs"
576
- ),
577
- serving: optionalEnum(
578
- contentProviders.serving,
579
- "providers.content.serving",
580
- ["local_collections", "published_runtime"]
581
- ) ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.content.serving
582
- },
583
- site: expectString(record.providers?.site ?? TREESEED_DEFAULT_PROVIDER_SELECTIONS.site, "providers.site")
584
- },
585
- surfaces: parsePlatformSurfacesConfig(record.surfaces),
586
- services,
587
- smtp: {
588
- enabled: optionalBoolean(smtp.enabled, "smtp.enabled")
589
- },
590
- turnstile: {
591
- enabled: optionalBoolean(turnstile.enabled, "turnstile.enabled") ?? false
592
- }
593
- };
594
- Object.defineProperty(deployConfig, "__tenantRoot", {
595
- value: dirname(configPath),
596
- enumerable: false
597
- });
598
- Object.defineProperty(deployConfig, "__configPath", {
599
- value: configPath,
600
- enumerable: false
601
- });
602
- return deployConfig;
603
- }
604
164
  function loadCliDeployConfig(tenantRoot) {
605
165
  const configPath = resolve(tenantRoot, "treeseed.site.yaml");
606
166
  if (!existsSync(configPath)) {
607
167
  throw new Error(`Unable to resolve Treeseed deploy config at "${configPath}".`);
608
168
  }
609
- return parseFallbackDeployConfig(configPath);
169
+ return loadTreeseedDeployConfigFromPath(configPath);
610
170
  }
611
171
  function runNodeBinary(binPath, args, options = {}) {
612
172
  const result = spawnSync(process.execPath, [binPath, ...args], {
@@ -4,17 +4,25 @@ import { applyTreeseedEnvironmentToProcess, assertTreeseedCommandEnvironment } f
4
4
  import { collectCliPreflight } from "./workspace-preflight.js";
5
5
  import { requiredGitHubEnvironment } from "./github-automation.js";
6
6
  function runStep(label, scriptName, { cwd, env } = {}) {
7
+ const startedAt = Date.now();
8
+ process.stderr.write(`[preflight] ${label} start (${scriptName})
9
+ `);
7
10
  const result = spawnSync(process.execPath, [packageScriptPath(scriptName)], {
8
11
  cwd,
9
12
  env: { ...process.env, ...env ?? {} },
10
13
  stdio: "inherit"
11
14
  });
15
+ const elapsedSeconds = ((Date.now() - startedAt) / 1e3).toFixed(1);
12
16
  if (result.status !== 0) {
17
+ process.stderr.write(`[preflight] ${label} failed after ${elapsedSeconds}s (${scriptName})
18
+ `);
13
19
  const error = new Error(`${label} failed.`);
14
20
  error.kind = `${label}_failed`;
15
21
  error.exitCode = result.status ?? 1;
16
22
  throw error;
17
23
  }
24
+ process.stderr.write(`[preflight] ${label} complete after ${elapsedSeconds}s (${scriptName})
25
+ `);
18
26
  }
19
27
  function missingRequiredEnv(requiredKeys) {
20
28
  return requiredKeys.filter((key) => {
@@ -51,7 +59,7 @@ function validateSaveAutomationPrerequisites({ cwd }) {
51
59
  }
52
60
  function runWorkspaceSavePreflight({ cwd }) {
53
61
  runStep("lint", "workspace-lint", { cwd });
54
- runStep("test", "workspace-test", { cwd });
62
+ runStep("test", "workspace-release-test", { cwd });
55
63
  runStep("build", "tenant-build", { cwd });
56
64
  }
57
65
  function runWorkspaceReleasePreflight({ cwd }) {
@@ -1,5 +1,5 @@
1
- import { type ProjectEnvironmentName, type TemplateConfigMergeStrategy, type TemplateConfigWriteTarget, type TemplateSecretSensitivity } from '../../sdk-types.ts';
2
- import type { ProjectLaunchConfigWritePlanItem, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.ts';
1
+ import { type ProjectEnvironmentName, type TemplateConfigMergeStrategy, type TemplateConfigWriteTarget, type TemplateSecretSensitivity } from '../../sdk-types.js';
2
+ import type { ProjectLaunchConfigWritePlanItem, ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.js';
3
3
  export interface ApplyProjectLaunchHostBindingConfigOptions {
4
4
  projectRoot: string;
5
5
  hostBindings?: Record<string, ProjectLaunchResolvedHostBinding> | null;
@@ -1,5 +1,4 @@
1
1
  import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
- import { tmpdir } from "node:os";
3
2
  import { dirname, join, resolve } from "node:path";
4
3
  import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
5
4
  import {
@@ -297,7 +296,9 @@ function auditProjectLaunchHostBindingConfig(options) {
297
296
  plannedTargets.add("src/env.yaml");
298
297
  }
299
298
  const checkedTargets = [...plannedTargets];
300
- const tempRoot = mkdtempSync(join(tmpdir(), "treeseed-host-binding-audit-"));
299
+ const tempBase = resolve(options.projectRoot, ".treeseed", "tmp", "host-binding-audit");
300
+ mkdirSync(tempBase, { recursive: true });
301
+ const tempRoot = mkdtempSync(join(tempBase, "treeseed-host-binding-audit-"));
301
302
  const before = /* @__PURE__ */ new Map();
302
303
  try {
303
304
  for (const target of checkedTargets) {
@@ -1,5 +1,5 @@
1
- import { type SdkTemplateCatalogEntry, type TemplateLaunchRequirements } from '../../sdk-types.ts';
2
- import { type ProjectLaunchConfigWritePlanItem, type ProjectLaunchLocalHostBindingSummary, type ProjectLaunchResolvedHostBinding, type ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.ts';
1
+ import { type SdkTemplateCatalogEntry, type TemplateLaunchRequirements } from '../../sdk-types.js';
2
+ import { type ProjectLaunchConfigWritePlanItem, type ProjectLaunchLocalHostBindingSummary, type ProjectLaunchResolvedHostBinding, type ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.js';
3
3
  export declare const TEMPLATE_CATEGORIES: readonly ["starter", "example", "fixture", "reference-app"];
4
4
  export type TemplateCategory = (typeof TEMPLATE_CATEGORIES)[number];
5
5
  export interface TemplateVariableDefinition {
@@ -93,17 +93,17 @@ export declare function serializeTemplateRegistryEntry(product: Pick<TemplatePro
93
93
  displayName: string;
94
94
  description: string;
95
95
  summary: string;
96
- status: import("../../sdk-types.ts").SdkTemplateCatalogStatus;
96
+ status: import("../../sdk-types.js").SdkTemplateCatalogStatus;
97
97
  featured: boolean;
98
- category: import("../../sdk-types.ts").SdkTemplateCategory;
98
+ category: import("../../sdk-types.js").SdkTemplateCategory;
99
99
  tags: string[];
100
- publisher: import("../../sdk-types.ts").SdkTemplateCatalogPublisher;
100
+ publisher: import("../../sdk-types.js").SdkTemplateCatalogPublisher;
101
101
  templateVersion: string;
102
102
  templateApiVersion: number;
103
103
  minCliVersion: string;
104
104
  minCoreVersion: string | undefined;
105
105
  fulfillmentMode: "r2" | "git" | "packaged";
106
- source: import("../../sdk-types.ts").SdkTemplateCatalogSource;
106
+ source: import("../../sdk-types.js").SdkTemplateCatalogSource;
107
107
  launchRequirements: TemplateLaunchRequirements | undefined;
108
108
  };
109
109
  export declare function exportTemplateCatalogYaml(options?: TemplateCatalogOptions): Promise<string>;
@@ -1,6 +1,6 @@
1
1
  import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
- import { spawnSync } from "node:child_process";
3
2
  import { basename, dirname, relative, resolve } from "node:path";
3
+ import { runTreeseedGit } from "./git-runner.js";
4
4
  import {
5
5
  normalizeTreeseedTemplateId
6
6
  } from "../../sdk-types.js";
@@ -29,15 +29,34 @@ function loadJsonFile(filePath) {
29
29
  function ensureDir(filePath) {
30
30
  mkdirSync(dirname(filePath), { recursive: true });
31
31
  }
32
- function listFiles(root) {
33
- if (!existsSync(root)) {
32
+ const templatePayloadIgnoredDirectoryNames = /* @__PURE__ */ new Set([
33
+ "node_modules",
34
+ "dist",
35
+ ".astro"
36
+ ]);
37
+ const templatePayloadIgnoredRelativePaths = /* @__PURE__ */ new Set([
38
+ ".treeseed/generated",
39
+ ".treeseed/test-reports",
40
+ "public/books"
41
+ ]);
42
+ function normalizeTemplateRelativePath(path) {
43
+ return path.split(/[\\/]+/u).join("/");
44
+ }
45
+ function isIgnoredTemplatePayloadDirectory(root, directoryPath) {
46
+ const relativePath = normalizeTemplateRelativePath(relative(root, directoryPath));
47
+ return templatePayloadIgnoredDirectoryNames.has(basename(directoryPath)) || templatePayloadIgnoredRelativePaths.has(relativePath);
48
+ }
49
+ function listFiles(root, currentRoot = root) {
50
+ if (!existsSync(currentRoot)) {
34
51
  return [];
35
52
  }
36
53
  const files = [];
37
- for (const entry of readdirSync(root, { withFileTypes: true })) {
38
- const fullPath = resolve(root, entry.name);
54
+ for (const entry of readdirSync(currentRoot, { withFileTypes: true })) {
55
+ const fullPath = resolve(currentRoot, entry.name);
39
56
  if (entry.isDirectory()) {
40
- files.push(...listFiles(fullPath));
57
+ if (!isIgnoredTemplatePayloadDirectory(root, fullPath)) {
58
+ files.push(...listFiles(root, fullPath));
59
+ }
41
60
  continue;
42
61
  }
43
62
  files.push(fullPath);
@@ -149,20 +168,20 @@ function resolveTemplateSourceCacheRoot(product, options) {
149
168
  return resolve(dirname(cachePath), "templates", sanitizeCacheSegment(product.id), sanitizeCacheSegment(sourceVersion));
150
169
  }
151
170
  function runGit(commandArgs, cwd) {
152
- const result = spawnSync("git", commandArgs, {
153
- cwd,
154
- stdio: "pipe",
155
- encoding: "utf8"
171
+ const mutating = /^(add|commit|checkout|switch|merge|tag|push|fetch|worktree|submodule|reset|clean|restore|branch|clone)$/u.test(commandArgs[0] ?? "");
172
+ const result = runTreeseedGit(commandArgs, {
173
+ cwd: cwd ?? process.cwd(),
174
+ mode: mutating ? "mutate" : "read"
156
175
  });
157
176
  if (result.status !== 0) {
158
177
  throw new Error(result.stderr?.trim() || result.stdout?.trim() || `git ${commandArgs.join(" ")} failed`);
159
178
  }
160
179
  }
161
180
  function readGitOutput(commandArgs, cwd) {
162
- const result = spawnSync("git", commandArgs, {
163
- cwd,
164
- stdio: "pipe",
165
- encoding: "utf8"
181
+ const result = runTreeseedGit(commandArgs, {
182
+ cwd: cwd ?? process.cwd(),
183
+ mode: "read",
184
+ allowFailure: true
166
185
  });
167
186
  return result.status === 0 ? result.stdout.trim() : null;
168
187
  }
@@ -1,6 +1,6 @@
1
- import { syncTreeseedCloudflareEnvironment, syncTreeseedGitHubEnvironment, syncTreeseedRailwayEnvironment, type TreeseedConfigScope } from './config-runtime.ts';
2
- import type { ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.ts';
3
- import type { ProjectLaunchRequirementKind } from '../../sdk-types.ts';
1
+ import { syncTreeseedCloudflareEnvironment, syncTreeseedGitHubEnvironment, syncTreeseedRailwayEnvironment, type TreeseedConfigScope } from './config-runtime.js';
2
+ import type { ProjectLaunchResolvedHostBinding, ProjectLaunchSecretDeploymentPlanItem } from '../../template-launch-requirements.js';
3
+ import type { ProjectLaunchRequirementKind } from '../../sdk-types.js';
4
4
  export type ProjectLaunchSecretSyncProvider = 'github' | 'cloudflare' | 'railway';
5
5
  export type ProjectLaunchSecretSyncStatus = 'synced' | 'skipped' | 'failed';
6
6
  export type ProjectLaunchSecretSyncProviderStatus = 'running' | 'completed' | 'failed';