@treeseed/sdk 0.10.28 → 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 (509) hide show
  1. package/README.md +213 -7
  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 +118 -59
  27. package/dist/capacity-provider.js +235 -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 +3 -2
  36. package/dist/control-plane.js +38 -13
  37. package/dist/copilot.d.ts +3 -0
  38. package/dist/copilot.js +16 -1
  39. package/dist/d1-http.d.ts +1 -1
  40. package/dist/d1-store.d.ts +32 -57
  41. package/dist/d1-store.js +115 -318
  42. package/dist/db/d1.d.ts +1 -232
  43. package/dist/db/index.d.ts +3 -3
  44. package/dist/db/market-schema.d.ts +50900 -11018
  45. package/dist/db/market-schema.js +2313 -467
  46. package/dist/db/node-sqlite.d.ts +1 -232
  47. package/dist/db/node-sqlite.js +7 -2
  48. package/dist/db/schema.d.ts +0 -462
  49. package/dist/db/schema.js +2 -22
  50. package/dist/dispatch.d.ts +1 -1
  51. package/dist/dispatch.js +0 -11
  52. package/dist/fixture-support.js +52 -4
  53. package/dist/governance.d.ts +133 -0
  54. package/dist/governance.js +285 -0
  55. package/dist/graph/build.d.ts +2 -2
  56. package/dist/graph/context-query-contracts.d.ts +1 -1
  57. package/dist/graph/dsl.d.ts +1 -1
  58. package/dist/graph/query.d.ts +4 -4
  59. package/dist/graph/ranking.d.ts +1 -1
  60. package/dist/graph/schema.d.ts +1 -1
  61. package/dist/graph.d.ts +11 -11
  62. package/dist/guarantees/index.d.ts +425 -0
  63. package/dist/guarantees/index.js +1146 -0
  64. package/dist/hosting/apps.d.ts +12 -0
  65. package/dist/hosting/apps.js +107 -0
  66. package/dist/hosting/builtins.d.ts +25 -0
  67. package/dist/hosting/builtins.js +602 -0
  68. package/dist/hosting/contracts.d.ts +208 -0
  69. package/dist/hosting/contracts.js +0 -0
  70. package/dist/hosting/graph.d.ts +195 -0
  71. package/dist/hosting/graph.js +1092 -0
  72. package/dist/hosting/index.d.ts +4 -0
  73. package/dist/hosting/index.js +4 -0
  74. package/dist/index.d.ts +88 -67
  75. package/dist/index.js +142 -14
  76. package/dist/local-dev/managed-dev.d.ts +85 -0
  77. package/dist/local-dev/managed-dev.js +368 -0
  78. package/dist/managed-dependencies.d.ts +9 -0
  79. package/dist/managed-dependencies.js +10 -9
  80. package/dist/market-client.d.ts +327 -9
  81. package/dist/market-client.js +464 -20
  82. package/dist/model-registry.d.ts +1 -1
  83. package/dist/model-registry.js +19 -19
  84. package/dist/operations/agent-tools.d.ts +2 -11
  85. package/dist/operations/agent-tools.js +2 -14
  86. package/dist/operations/providers/default.d.ts +1 -1
  87. package/dist/operations/providers/default.js +20 -37
  88. package/dist/operations/repository-operations.d.ts +26 -2
  89. package/dist/operations/repository-operations.js +159 -1
  90. package/dist/operations/runtime.d.ts +3 -3
  91. package/dist/operations/services/bootstrap-runner.d.ts +4 -2
  92. package/dist/operations/services/bootstrap-runner.js +22 -2
  93. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  94. package/dist/operations/services/build-warning-policy.js +81 -82
  95. package/dist/operations/services/commit-message-provider.js +4 -4
  96. package/dist/operations/services/config-runtime.d.ts +83 -24
  97. package/dist/operations/services/config-runtime.js +449 -130
  98. package/dist/operations/services/deploy.d.ts +106 -624
  99. package/dist/operations/services/deploy.js +746 -263
  100. package/dist/operations/services/deployment-readiness.d.ts +30 -0
  101. package/dist/operations/services/deployment-readiness.js +206 -0
  102. package/dist/operations/services/git-remote-policy.js +12 -4
  103. package/dist/operations/services/git-runner.d.ts +66 -0
  104. package/dist/operations/services/git-runner.js +479 -0
  105. package/dist/operations/services/git-workflow.d.ts +45 -6
  106. package/dist/operations/services/git-workflow.js +251 -23
  107. package/dist/operations/services/github-actions-verification.d.ts +4 -1
  108. package/dist/operations/services/github-actions-verification.js +12 -3
  109. package/dist/operations/services/github-api.js +22 -6
  110. package/dist/operations/services/github-automation.d.ts +4 -4
  111. package/dist/operations/services/github-automation.js +19 -21
  112. package/dist/operations/services/github-credentials.d.ts +13 -0
  113. package/dist/operations/services/github-credentials.js +59 -0
  114. package/dist/operations/services/hosted-service-checks.d.ts +81 -0
  115. package/dist/operations/services/hosted-service-checks.js +478 -0
  116. package/dist/operations/services/hosting-audit.d.ts +2 -2
  117. package/dist/operations/services/hosting-audit.js +7 -7
  118. package/dist/operations/services/hub-launch.d.ts +1 -1
  119. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  120. package/dist/operations/services/hub-provider-launch.js +22 -17
  121. package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
  122. package/dist/operations/services/live-hosted-service-checks.js +463 -0
  123. package/dist/operations/services/local-dev.js +0 -1
  124. package/dist/operations/services/managed-host-security.d.ts +1 -1
  125. package/dist/operations/services/managed-host-security.js +1 -1
  126. package/dist/operations/services/managed-repositories.d.ts +37 -0
  127. package/dist/operations/services/managed-repositories.js +177 -0
  128. package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
  129. package/dist/operations/services/operations-runner-smoke.js +198 -0
  130. package/dist/operations/services/package-adapters.d.ts +170 -0
  131. package/dist/operations/services/package-adapters.js +859 -0
  132. package/dist/operations/services/package-reference-policy.d.ts +13 -88
  133. package/dist/operations/services/package-reference-policy.js +96 -215
  134. package/dist/operations/services/project-host-operations.d.ts +4 -4
  135. package/dist/operations/services/project-platform.d.ts +57 -173
  136. package/dist/operations/services/project-platform.js +80 -111
  137. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  138. package/dist/operations/services/project-web-monitor.js +122 -5
  139. package/dist/operations/services/railway-api.d.ts +117 -5
  140. package/dist/operations/services/railway-api.js +915 -93
  141. package/dist/operations/services/railway-deploy.d.ts +30 -112
  142. package/dist/operations/services/railway-deploy.js +521 -961
  143. package/dist/operations/services/release-history.js +3 -4
  144. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  145. package/dist/operations/services/release-proof-ledger.js +81 -0
  146. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  147. package/dist/operations/services/release-proof-planner.js +195 -0
  148. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  149. package/dist/operations/services/release-proof-runner.js +169 -0
  150. package/dist/operations/services/release-proof.d.ts +81 -0
  151. package/dist/operations/services/release-proof.js +79 -0
  152. package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
  153. package/dist/operations/services/repository-save-orchestrator.js +604 -212
  154. package/dist/operations/services/runtime-paths.d.ts +1 -3
  155. package/dist/operations/services/runtime-paths.js +0 -4
  156. package/dist/operations/services/runtime-tools.d.ts +1 -191
  157. package/dist/operations/services/runtime-tools.js +4 -443
  158. package/dist/operations/services/save-deploy-preflight.js +9 -1
  159. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  160. package/dist/operations/services/template-host-bindings.js +3 -2
  161. package/dist/operations/services/template-registry.d.ts +6 -6
  162. package/dist/operations/services/template-registry.js +33 -14
  163. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  164. package/dist/operations/services/verification-cache.d.ts +25 -0
  165. package/dist/operations/services/verification-cache.js +71 -0
  166. package/dist/operations/services/workflow-timing.d.ts +25 -0
  167. package/dist/operations/services/workflow-timing.js +79 -0
  168. package/dist/operations/services/workspace-dependency-mode.js +50 -5
  169. package/dist/operations/services/workspace-preflight.js +8 -8
  170. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  171. package/dist/operations/services/workspace-save.d.ts +1 -0
  172. package/dist/operations/services/workspace-save.js +42 -19
  173. package/dist/operations/services/workspace-tools.js +42 -7
  174. package/dist/operations-registry.d.ts +1 -1
  175. package/dist/operations-registry.js +5 -6
  176. package/dist/operations-types.d.ts +1 -1
  177. package/dist/operations.d.ts +17 -11
  178. package/dist/operations.js +57 -3
  179. package/dist/platform/book-export.js +2 -0
  180. package/dist/platform/books-data.d.ts +1 -1
  181. package/dist/platform/config.d.ts +27 -0
  182. package/dist/platform/config.js +100 -0
  183. package/dist/platform/content-runtime-source.d.ts +54 -0
  184. package/dist/platform/content-runtime-source.js +169 -0
  185. package/dist/platform/contracts.d.ts +38 -2
  186. package/dist/platform/deploy-config.d.ts +1 -1
  187. package/dist/platform/deploy-config.js +80 -9
  188. package/dist/platform/deploy-runtime.d.ts +1 -1
  189. package/dist/platform/desired-state.d.ts +63 -0
  190. package/dist/platform/desired-state.js +1021 -0
  191. package/dist/platform/env.yaml +568 -45
  192. package/dist/platform/environment.d.ts +3 -2
  193. package/dist/platform/environment.js +122 -21
  194. package/dist/platform/local-content-materialization.d.ts +9 -0
  195. package/dist/platform/local-content-materialization.js +212 -0
  196. package/dist/platform/plugin.d.ts +13 -4
  197. package/dist/platform/plugins/runtime.d.ts +3 -3
  198. package/dist/platform/plugins/runtime.js +62 -1
  199. package/dist/platform/plugins.d.ts +6 -6
  200. package/dist/platform/published-content-pipeline.d.ts +3 -3
  201. package/dist/platform/published-content-pipeline.js +5 -1
  202. package/dist/platform/published-content.d.ts +4 -3
  203. package/dist/platform/site-config-schema.d.ts +1 -0
  204. package/dist/platform/site-config-schema.js +4 -1
  205. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  206. package/dist/platform/tenant-config.d.ts +1 -1
  207. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  208. package/dist/platform/utils/site-config-schema.js +400 -461
  209. package/dist/platform-operation-store.d.ts +1 -1
  210. package/dist/platform-operation-store.js +2 -2
  211. package/dist/platform-operations.js +1 -1
  212. package/dist/plugin-default.d.ts +1 -1
  213. package/dist/plugin-default.js +27 -12
  214. package/dist/project-import.d.ts +91 -0
  215. package/dist/project-import.js +257 -0
  216. package/dist/project-workflow.d.ts +1 -1
  217. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  218. package/dist/reconcile/bootstrap-systems.js +5 -5
  219. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  220. package/dist/reconcile/builtin-adapters.js +3190 -429
  221. package/dist/reconcile/contracts.d.ts +23 -6
  222. package/dist/reconcile/desired-state.d.ts +2 -192
  223. package/dist/reconcile/desired-state.js +29 -38
  224. package/dist/reconcile/engine.d.ts +61 -395
  225. package/dist/reconcile/engine.js +229 -44
  226. package/dist/reconcile/index.d.ts +10 -8
  227. package/dist/reconcile/index.js +2 -0
  228. package/dist/reconcile/live-acceptance.d.ts +100 -0
  229. package/dist/reconcile/live-acceptance.js +2027 -0
  230. package/dist/reconcile/platform.d.ts +104 -0
  231. package/dist/reconcile/platform.js +100 -0
  232. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  233. package/dist/reconcile/providers/docker-private.js +101 -0
  234. package/dist/reconcile/providers/github-private.d.ts +65 -0
  235. package/dist/reconcile/providers/github-private.js +119 -0
  236. package/dist/reconcile/providers/local-private.d.ts +28 -0
  237. package/dist/reconcile/providers/local-private.js +75 -0
  238. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  239. package/dist/reconcile/providers/railway-iac.js +275 -0
  240. package/dist/reconcile/providers/release-private.d.ts +92 -0
  241. package/dist/reconcile/providers/release-private.js +152 -0
  242. package/dist/reconcile/registry.d.ts +2 -2
  243. package/dist/reconcile/registry.js +16 -1
  244. package/dist/reconcile/state.d.ts +1 -1
  245. package/dist/reconcile/state.js +7 -44
  246. package/dist/reconcile/units.d.ts +1 -1
  247. package/dist/reconcile/units.js +9 -3
  248. package/dist/remote.d.ts +6 -6
  249. package/dist/scenes/artifacts.d.ts +16 -0
  250. package/dist/scenes/artifacts.js +61 -0
  251. package/dist/scenes/auth.d.ts +2 -0
  252. package/dist/scenes/auth.js +28 -0
  253. package/dist/scenes/base-url.d.ts +12 -0
  254. package/dist/scenes/base-url.js +123 -0
  255. package/dist/scenes/builtin-plugins.d.ts +2 -0
  256. package/dist/scenes/builtin-plugins.js +447 -0
  257. package/dist/scenes/checkpoints.d.ts +14 -0
  258. package/dist/scenes/checkpoints.js +33 -0
  259. package/dist/scenes/device-matrix.d.ts +2 -0
  260. package/dist/scenes/device-matrix.js +97 -0
  261. package/dist/scenes/devices.d.ts +11 -0
  262. package/dist/scenes/devices.js +22 -0
  263. package/dist/scenes/diagnostics.d.ts +5 -0
  264. package/dist/scenes/diagnostics.js +22 -0
  265. package/dist/scenes/diagram-providers.d.ts +2 -0
  266. package/dist/scenes/diagram-providers.js +181 -0
  267. package/dist/scenes/diagram-validation.d.ts +22 -0
  268. package/dist/scenes/diagram-validation.js +74 -0
  269. package/dist/scenes/environment.d.ts +2 -0
  270. package/dist/scenes/environment.js +65 -0
  271. package/dist/scenes/evidence-bundle.d.ts +5 -0
  272. package/dist/scenes/evidence-bundle.js +42 -0
  273. package/dist/scenes/evidence-report.d.ts +10 -0
  274. package/dist/scenes/evidence-report.js +73 -0
  275. package/dist/scenes/evidence.d.ts +16 -0
  276. package/dist/scenes/evidence.js +277 -0
  277. package/dist/scenes/index.d.ts +48 -0
  278. package/dist/scenes/index.js +312 -0
  279. package/dist/scenes/inspect.d.ts +9 -0
  280. package/dist/scenes/inspect.js +64 -0
  281. package/dist/scenes/loader.d.ts +3 -0
  282. package/dist/scenes/loader.js +38 -0
  283. package/dist/scenes/logs.d.ts +2 -0
  284. package/dist/scenes/logs.js +47 -0
  285. package/dist/scenes/operations.d.ts +3 -0
  286. package/dist/scenes/operations.js +128 -0
  287. package/dist/scenes/phase0.d.ts +9 -0
  288. package/dist/scenes/phase0.js +637 -0
  289. package/dist/scenes/planner.d.ts +12 -0
  290. package/dist/scenes/planner.js +166 -0
  291. package/dist/scenes/playwright-adapter.d.ts +2 -0
  292. package/dist/scenes/playwright-adapter.js +63 -0
  293. package/dist/scenes/plugins.d.ts +5 -0
  294. package/dist/scenes/plugins.js +115 -0
  295. package/dist/scenes/progress.d.ts +17 -0
  296. package/dist/scenes/progress.js +24 -0
  297. package/dist/scenes/publish-destinations.d.ts +12 -0
  298. package/dist/scenes/publish-destinations.js +99 -0
  299. package/dist/scenes/publish-plan-report.d.ts +10 -0
  300. package/dist/scenes/publish-plan-report.js +70 -0
  301. package/dist/scenes/publish-plan.d.ts +15 -0
  302. package/dist/scenes/publish-plan.js +248 -0
  303. package/dist/scenes/publish-redaction.d.ts +16 -0
  304. package/dist/scenes/publish-redaction.js +148 -0
  305. package/dist/scenes/publish-release-record.d.ts +13 -0
  306. package/dist/scenes/publish-release-record.js +34 -0
  307. package/dist/scenes/publish-report.d.ts +10 -0
  308. package/dist/scenes/publish-report.js +67 -0
  309. package/dist/scenes/publish.d.ts +16 -0
  310. package/dist/scenes/publish.js +298 -0
  311. package/dist/scenes/registry.d.ts +12 -0
  312. package/dist/scenes/registry.js +65 -0
  313. package/dist/scenes/remotion-adapter.d.ts +3 -0
  314. package/dist/scenes/remotion-adapter.js +94 -0
  315. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  316. package/dist/scenes/remotion-composition-registry.js +12 -0
  317. package/dist/scenes/remotion-compositions.d.ts +15 -0
  318. package/dist/scenes/remotion-compositions.js +464 -0
  319. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  320. package/dist/scenes/remotion-diagrams.js +188 -0
  321. package/dist/scenes/remotion-input.d.ts +13 -0
  322. package/dist/scenes/remotion-input.js +291 -0
  323. package/dist/scenes/remotion-visuals.d.ts +29 -0
  324. package/dist/scenes/remotion-visuals.js +198 -0
  325. package/dist/scenes/render-media-assets.d.ts +9 -0
  326. package/dist/scenes/render-media-assets.js +117 -0
  327. package/dist/scenes/render-report.d.ts +10 -0
  328. package/dist/scenes/render-report.js +27 -0
  329. package/dist/scenes/render.d.ts +2 -0
  330. package/dist/scenes/render.js +218 -0
  331. package/dist/scenes/reporter.d.ts +3 -0
  332. package/dist/scenes/reporter.js +101 -0
  333. package/dist/scenes/resume.d.ts +2 -0
  334. package/dist/scenes/resume.js +79 -0
  335. package/dist/scenes/runner.d.ts +2 -0
  336. package/dist/scenes/runner.js +674 -0
  337. package/dist/scenes/schema.d.ts +6 -0
  338. package/dist/scenes/schema.js +994 -0
  339. package/dist/scenes/seed.d.ts +2 -0
  340. package/dist/scenes/seed.js +83 -0
  341. package/dist/scenes/segments.d.ts +15 -0
  342. package/dist/scenes/segments.js +79 -0
  343. package/dist/scenes/selectors.d.ts +3 -0
  344. package/dist/scenes/selectors.js +21 -0
  345. package/dist/scenes/timeline.d.ts +11 -0
  346. package/dist/scenes/timeline.js +26 -0
  347. package/dist/scenes/timeouts.d.ts +6 -0
  348. package/dist/scenes/timeouts.js +17 -0
  349. package/dist/scenes/training-captions.d.ts +14 -0
  350. package/dist/scenes/training-captions.js +98 -0
  351. package/dist/scenes/training-report.d.ts +10 -0
  352. package/dist/scenes/training-report.js +78 -0
  353. package/dist/scenes/training-transcript.d.ts +24 -0
  354. package/dist/scenes/training-transcript.js +204 -0
  355. package/dist/scenes/training.d.ts +10 -0
  356. package/dist/scenes/training.js +134 -0
  357. package/dist/scenes/types.d.ts +1872 -0
  358. package/dist/scenes/types.js +8 -0
  359. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  360. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  361. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  362. package/dist/scenes/visual-audit-fixtures.js +210 -0
  363. package/dist/scenes/visual-audit-report.d.ts +11 -0
  364. package/dist/scenes/visual-audit-report.js +85 -0
  365. package/dist/scenes/visual-audit-review.d.ts +23 -0
  366. package/dist/scenes/visual-audit-review.js +829 -0
  367. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  368. package/dist/scenes/visual-audit-routes.js +308 -0
  369. package/dist/scenes/visual-audit.d.ts +3 -0
  370. package/dist/scenes/visual-audit.js +596 -0
  371. package/dist/scripts/build-dist.js +154 -40
  372. package/dist/scripts/check-build-warnings.js +42 -53
  373. package/dist/scripts/cleanup-markdown.js +1 -1
  374. package/dist/scripts/cli-test-fixtures.js +24 -28
  375. package/dist/scripts/deployment-readiness.js +20 -0
  376. package/dist/scripts/generate-treedx-openapi-types.js +186 -0
  377. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  378. package/dist/scripts/operations-runner-smoke.js +16 -0
  379. package/dist/scripts/package-tools.js +12 -1
  380. package/dist/scripts/prepare.js +3 -7
  381. package/dist/scripts/release-verify.js +6 -6
  382. package/dist/scripts/run-fixture-astro-command.js +1 -1
  383. package/dist/scripts/template-catalog.test.js +68 -82
  384. package/dist/scripts/tenant-dev.js +0 -10
  385. package/dist/scripts/tenant-workflow-action.js +10 -1
  386. package/dist/scripts/test-cloudflare-local.js +1 -1
  387. package/dist/scripts/test-scaffold.js +0 -1
  388. package/dist/scripts/test-smoke.js +3 -3
  389. package/dist/scripts/treeseed-build-dist.js +4 -7
  390. package/dist/scripts/treeseed-release-verify.js +1 -1
  391. package/dist/scripts/verify-driver.js +30 -21
  392. package/dist/scripts/workflow-commands.test.js +18 -27
  393. package/dist/scripts/workspace-command-e2e.js +1 -1
  394. package/dist/scripts/workspace-lint.js +6 -0
  395. package/dist/scripts/workspace-release-test.js +90 -1
  396. package/dist/scripts/workspace-test.js +6 -0
  397. package/dist/sdk-dispatch.d.ts +1 -1
  398. package/dist/sdk-dispatch.js +0 -16
  399. package/dist/sdk-fields.d.ts +1 -1
  400. package/dist/sdk-filters.d.ts +1 -1
  401. package/dist/sdk-types.d.ts +1352 -116
  402. package/dist/sdk-types.js +413 -2
  403. package/dist/sdk.d.ts +106 -100
  404. package/dist/sdk.js +211 -51
  405. package/dist/secrets-capability.d.ts +421 -0
  406. package/dist/secrets-capability.js +530 -0
  407. package/dist/seeds/normalize.js +1 -0
  408. package/dist/seeds/planner.js +38 -0
  409. package/dist/seeds/schema.js +293 -4
  410. package/dist/seeds/types.d.ts +60 -0
  411. package/dist/seeds/types.js +9 -1
  412. package/dist/service-credentials.d.ts +54 -0
  413. package/dist/service-credentials.js +112 -0
  414. package/dist/stores/cursor-store.d.ts +2 -2
  415. package/dist/stores/envelopes.d.ts +1 -1
  416. package/dist/stores/helpers.d.ts +1 -1
  417. package/dist/stores/lease-store.d.ts +2 -2
  418. package/dist/stores/message-store.d.ts +2 -2
  419. package/dist/stores/operational-store.d.ts +3 -26
  420. package/dist/stores/operational-store.js +0 -225
  421. package/dist/stores/project-workflow-store.d.ts +2 -2
  422. package/dist/stores/run-store.d.ts +2 -3
  423. package/dist/stores/run-store.js +0 -98
  424. package/dist/stores/subscription-store.d.ts +2 -3
  425. package/dist/stores/subscription-store.js +0 -100
  426. package/dist/template-catalog.d.ts +1 -1
  427. package/dist/template-launch-requirements.d.ts +2 -2
  428. package/dist/template-launch-requirements.js +9 -0
  429. package/dist/template-launch-ui.d.ts +2 -2
  430. package/dist/treedx/adapters.d.ts +6 -0
  431. package/dist/treedx/adapters.js +36 -0
  432. package/dist/treedx/client.d.ts +222 -0
  433. package/dist/treedx/client.js +871 -0
  434. package/dist/treedx/errors.d.ts +13 -0
  435. package/dist/treedx/errors.js +17 -0
  436. package/dist/treedx/federated-client.d.ts +27 -0
  437. package/dist/treedx/federated-client.js +158 -0
  438. package/dist/treedx/generated/openapi-types.d.ts +3558 -0
  439. package/dist/treedx/generated/openapi-types.js +0 -0
  440. package/dist/treedx/graph-adapter.d.ts +33 -0
  441. package/dist/treedx/graph-adapter.js +156 -0
  442. package/dist/treedx/index.d.ts +14 -0
  443. package/dist/treedx/index.js +48 -0
  444. package/dist/treedx/market-integration.d.ts +27 -0
  445. package/dist/treedx/market-integration.js +131 -0
  446. package/dist/treedx/ports.d.ts +166 -0
  447. package/dist/treedx/ports.js +231 -0
  448. package/dist/treedx/query-adapter.d.ts +19 -0
  449. package/dist/treedx/query-adapter.js +62 -0
  450. package/dist/treedx/registry-client.d.ts +11 -0
  451. package/dist/treedx/registry-client.js +19 -0
  452. package/dist/treedx/repository-adapter.d.ts +45 -0
  453. package/dist/treedx/repository-adapter.js +319 -0
  454. package/dist/treedx/sdk-integration.d.ts +27 -0
  455. package/dist/treedx/sdk-integration.js +63 -0
  456. package/dist/treedx/types.d.ts +1084 -0
  457. package/dist/treedx/types.js +8 -0
  458. package/dist/treedx/workspace-adapter.d.ts +27 -0
  459. package/dist/treedx/workspace-adapter.js +65 -0
  460. package/dist/treedx-backends.d.ts +220 -0
  461. package/dist/treedx-backends.js +634 -0
  462. package/dist/treedx-client.d.ts +89 -0
  463. package/dist/treedx-client.js +184 -0
  464. package/dist/treeseed/services/compose.yml +2 -3
  465. package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
  466. package/dist/types/agents.d.ts +256 -0
  467. package/dist/types/agents.js +42 -1
  468. package/dist/verification.d.ts +1 -0
  469. package/dist/verification.js +143 -14
  470. package/dist/workflow/operations.d.ts +580 -523
  471. package/dist/workflow/operations.js +2084 -1279
  472. package/dist/workflow/policy.js +19 -7
  473. package/dist/workflow/runs.d.ts +9 -3
  474. package/dist/workflow/runs.js +66 -26
  475. package/dist/workflow/session.d.ts +4 -1
  476. package/dist/workflow/session.js +50 -10
  477. package/dist/workflow/worktrees.d.ts +6 -2
  478. package/dist/workflow/worktrees.js +98 -15
  479. package/dist/workflow-state.d.ts +17 -4
  480. package/dist/workflow-state.js +68 -41
  481. package/dist/workflow-support.d.ts +26 -17
  482. package/dist/workflow-support.js +84 -24
  483. package/dist/workflow.d.ts +51 -16
  484. package/dist/workflow.js +19 -7
  485. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  486. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  487. package/drizzle/market/0004_treedx_market_integration.sql +99 -0
  488. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  489. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  490. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  491. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  492. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  493. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  494. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  495. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  496. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  497. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  498. package/package.json +106 -18
  499. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  500. package/templates/github/deploy-web.workflow.yml +49 -12
  501. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  502. package/dist/operations/services/mailpit-runtime.js +0 -67
  503. package/dist/operations/services/release-candidate.d.ts +0 -41
  504. package/dist/operations/services/release-candidate.js +0 -616
  505. package/dist/scripts/ensure-mailpit.js +0 -48
  506. package/dist/scripts/logs-mailpit.js +0 -2
  507. package/dist/scripts/run-ts.js +0 -45
  508. package/dist/scripts/stop-mailpit.js +0 -5
  509. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { spawnSync } from "node:child_process";
3
- import { mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
4
- import { tmpdir } from "node:os";
3
+ import { runTreeseedGit } from "./git-runner.js";
4
+ import { mkdirSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
5
5
  import { basename, extname, join, resolve } from "node:path";
6
6
  import { elapsedMs, formatTimingMarkdown, formatTimingSummary } from "../../timing.js";
7
7
  import {
@@ -44,11 +44,10 @@ import {
44
44
  } from "./railway-deploy.js";
45
45
  import { loadCliDeployConfig, packageScriptPath } from "./runtime-tools.js";
46
46
  import { resolveTreeseedToolCommand } from "../../managed-dependencies.js";
47
- import { CloudflareQueuePullClient, CloudflareQueuePushClient } from "../../remote.js";
48
47
  import { runPrefixedCommand, runTreeseedBootstrapDag, sleep, writeTreeseedBootstrapLine } from "./bootstrap-runner.js";
49
48
  import { runTenantDeployPreflight } from "./save-deploy-preflight.js";
50
49
  const PROJECT_PLATFORM_BOOTSTRAP_SYSTEMS = ["data", "web", "api", "agents"];
51
- const WEB_PLATFORM_BOOTSTRAP_SYSTEMS = PROJECT_PLATFORM_BOOTSTRAP_SYSTEMS;
50
+ const WEB_PLATFORM_BOOTSTRAP_SYSTEMS = ["data", "web"];
52
51
  const PROCESSING_PLATFORM_BOOTSTRAP_SYSTEMS = ["api", "agents"];
53
52
  function stableHash(value) {
54
53
  return createHash("sha256").update(value).digest("hex");
@@ -63,6 +62,13 @@ function recordTiming(timings, name, startMs, status = "success", metadata) {
63
62
  timings.push(entry);
64
63
  return entry;
65
64
  }
65
+ function writeWorkflowStatus(message) {
66
+ if (!process.env.TREESEED_WORKFLOW_ACTION && !process.env.TREESEED_WORKFLOW_DEBUG) {
67
+ return;
68
+ }
69
+ process.stderr.write(`[project-platform] ${message}
70
+ `);
71
+ }
66
72
  async function timedPhase(timings, name, run, metadata) {
67
73
  const startMs = performance.now();
68
74
  try {
@@ -104,18 +110,18 @@ function resolveScope(environment) {
104
110
  return scope;
105
111
  }
106
112
  function currentCommit(tenantRoot) {
107
- const result = spawnSync("git", ["rev-parse", "HEAD"], {
113
+ const result = runTreeseedGit(["rev-parse", "HEAD"], {
108
114
  cwd: tenantRoot,
109
- stdio: "pipe",
110
- encoding: "utf8"
115
+ mode: "read",
116
+ allowFailure: true
111
117
  });
112
118
  return result.status === 0 ? result.stdout.trim() : null;
113
119
  }
114
120
  function currentRef(tenantRoot) {
115
- const result = spawnSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
121
+ const result = runTreeseedGit(["rev-parse", "--abbrev-ref", "HEAD"], {
116
122
  cwd: tenantRoot,
117
- stdio: "pipe",
118
- encoding: "utf8"
123
+ mode: "read",
124
+ allowFailure: true
119
125
  });
120
126
  return result.status === 0 ? result.stdout.trim() : null;
121
127
  }
@@ -365,6 +371,11 @@ function writeTempFile(root, name, body) {
365
371
  writeFileSync(filePath, body);
366
372
  return filePath;
367
373
  }
374
+ function projectPlatformTempRoot(tenantRoot, scope) {
375
+ const base = resolve(tenantRoot, ".treeseed", "tmp", scope);
376
+ mkdirSync(base, { recursive: true });
377
+ return base;
378
+ }
368
379
  function toBuffer(body) {
369
380
  if (typeof body === "string") {
370
381
  return Buffer.from(body);
@@ -375,7 +386,7 @@ function toBuffer(body) {
375
386
  return Buffer.from(body.buffer, body.byteOffset, body.byteLength);
376
387
  }
377
388
  function readR2JsonObject(tenantRoot, bucketName, objectKey, wranglerPath, wranglerEnv) {
378
- const tempRoot = mkdtempSync(join(tmpdir(), "treeseed-r2-read-"));
389
+ const tempRoot = mkdtempSync(join(projectPlatformTempRoot(tenantRoot, "r2-read"), "treeseed-r2-read-"));
379
390
  const filePath = resolve(tempRoot, basename(objectKey) || "payload.json");
380
391
  try {
381
392
  const result = runWrangler(tenantRoot, [
@@ -615,20 +626,6 @@ async function probeHttp(url, { attempts = 1, delayMs = 2e3 } = {}) {
615
626
  }
616
627
  return result;
617
628
  }
618
- function queueClientConfig(siteConfig, state) {
619
- const accountId = String(process.env.CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim();
620
- const queueId = state.queues?.agentWork?.queueId;
621
- const token = process.env.TREESEED_QUEUE_PUSH_TOKEN?.trim() || process.env.TREESEED_QUEUE_PULL_TOKEN?.trim() || process.env.CLOUDFLARE_API_TOKEN?.trim() || "";
622
- if (!accountId || !queueId || !token) {
623
- return null;
624
- }
625
- return {
626
- accountId,
627
- queueId,
628
- token,
629
- apiBaseUrl: process.env.TREESEED_QUEUE_API_BASE_URL?.trim() || void 0
630
- };
631
- }
632
629
  function findFirstMatchingString(value, matcher, seen = /* @__PURE__ */ new Set()) {
633
630
  if (typeof value === "string") {
634
631
  return matcher(value) ? value : null;
@@ -658,10 +655,17 @@ function findFirstMatchingString(value, matcher, seen = /* @__PURE__ */ new Set(
658
655
  return null;
659
656
  }
660
657
  function resolveImmediatePagesProbeUrl(siteConfig, state, target) {
658
+ if (target.kind === "persistent" && target.scope === "prod" && state.pages?.projectName) {
659
+ return `https://${state.pages.projectName}.pages.dev`;
660
+ }
661
+ const configuredUrl = resolveConfiguredSurfaceBaseUrl(siteConfig, target, "web");
662
+ if (configuredUrl) {
663
+ return configuredUrl;
664
+ }
661
665
  if (target.kind === "persistent" && target.scope === "staging" && state.pages?.projectName) {
662
666
  return `https://${state.pages?.stagingBranch ?? "staging"}.${state.pages.projectName}.pages.dev`;
663
667
  }
664
- return state.pages?.url ?? resolveConfiguredSurfaceBaseUrl(siteConfig, target, "web") ?? siteConfig.siteUrl;
668
+ return state.pages?.url ?? siteConfig.siteUrl;
665
669
  }
666
670
  function resolveImmediateApiProbeUrl(siteConfig, state, target) {
667
671
  const configuredUrl = resolveConfiguredSurfaceBaseUrl(siteConfig, target, "api") ?? siteConfig.services?.api?.environments?.[target.kind === "persistent" ? target.scope : "prod"]?.baseUrl ?? siteConfig.services?.api?.publicBaseUrl ?? process.env.TREESEED_API_BASE_URL ?? state.services?.api?.lastDeployedUrl ?? null;
@@ -696,57 +700,6 @@ function resolveApiMonitorEndpoints(siteConfig, apiBaseUrl) {
696
700
  processingAgentApi: false
697
701
  };
698
702
  }
699
- async function probeQueue(siteConfig, state) {
700
- const config = queueClientConfig(siteConfig, state);
701
- if (!config) {
702
- return { ok: false, skipped: true, reason: "queue_probe_unconfigured" };
703
- }
704
- const pushClient = new CloudflareQueuePushClient(config);
705
- const pullClient = new CloudflareQueuePullClient(config);
706
- const messageId = `health-${Date.now()}`;
707
- await pushClient.enqueue({
708
- message: {
709
- messageId,
710
- taskId: messageId,
711
- workDayId: "health-check",
712
- agentId: "health-check",
713
- taskType: "health_check",
714
- idempotencyKey: messageId,
715
- payloadRef: "health",
716
- graphVersion: null,
717
- budgetHint: 0
718
- }
719
- });
720
- let pulled;
721
- try {
722
- pulled = await pullClient.pull({
723
- batchSize: 1,
724
- visibilityTimeoutMs: 1e4
725
- });
726
- } catch (error) {
727
- const detail = error instanceof Error ? error.message : String(error);
728
- if (/http_pull mode is enabled/iu.test(detail)) {
729
- return {
730
- ok: true,
731
- skipped: true,
732
- reason: "queue_push_only",
733
- messageId,
734
- detail
735
- };
736
- }
737
- throw error;
738
- }
739
- const message = pulled.messages.find((entry) => entry.body?.messageId === messageId) ?? pulled.messages[0] ?? null;
740
- if (!message) {
741
- return { ok: false, reason: "queue_pull_empty" };
742
- }
743
- await pullClient.ack([message.leaseId]);
744
- return {
745
- ok: true,
746
- messageId,
747
- attempts: message.attempts
748
- };
749
- }
750
703
  function r2HealthKey(state) {
751
704
  return `${state.content?.manifestKey?.replace(/\/common\.json$/u, "") ?? "health"}/healthchecks/${Date.now()}.json`;
752
705
  }
@@ -763,13 +716,13 @@ function deleteR2Object(tenantRoot, bucketName, objectKey, wranglerPath, wrangle
763
716
  }
764
717
  function probeR2(tenantRoot, siteConfig, state, target) {
765
718
  const bucketName = state.content?.bucketName;
766
- const cloudflareAccountId = String(process.env.CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim();
719
+ const cloudflareAccountId = String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim();
767
720
  if (!bucketName) {
768
721
  return { ok: false, skipped: true, reason: "r2_unconfigured" };
769
722
  }
770
723
  const { wranglerPath } = ensureGeneratedWranglerConfig(tenantRoot, { target });
771
724
  const wranglerEnv = { CLOUDFLARE_ACCOUNT_ID: cloudflareAccountId };
772
- const tempRoot = mkdtempSync(join(tmpdir(), "treeseed-r2-health-"));
725
+ const tempRoot = mkdtempSync(join(projectPlatformTempRoot(tenantRoot, "r2-health"), "treeseed-r2-health-"));
773
726
  const objectKey = r2HealthKey(state);
774
727
  try {
775
728
  const payload = JSON.stringify({ ok: true, createdAt: (/* @__PURE__ */ new Date()).toISOString() });
@@ -799,12 +752,10 @@ function probeR2(tenantRoot, siteConfig, state, target) {
799
752
  }
800
753
  }
801
754
  function probeScaleConfiguration(siteConfig, state) {
802
- const worker = state.services?.workerRunner ?? state.services?.worker ?? {};
803
- const workerConfig = siteConfig.services?.workerRunner ?? siteConfig.services?.worker ?? {};
804
- const marketRunner = state.services?.marketOperationsRunner ?? {};
805
- const marketRunnerConfig = siteConfig.services?.marketOperationsRunner ?? {};
755
+ const marketRunner = state.services?.operationsRunner ?? {};
756
+ const marketRunnerConfig = siteConfig.services?.operationsRunner ?? {};
806
757
  const scalerKind = String(process.env.TREESEED_WORKER_POOL_SCALER ?? "").trim();
807
- if (marketRunnerConfig.provider === "railway" && workerConfig.provider !== "railway") {
758
+ if (marketRunnerConfig.provider === "railway") {
808
759
  const runnerServiceId = marketRunner.serviceId ?? null;
809
760
  const runnerServiceName = marketRunner.serviceName ?? marketRunnerConfig.railway?.serviceName ?? null;
810
761
  return {
@@ -815,18 +766,18 @@ function probeScaleConfiguration(siteConfig, state) {
815
766
  runnerKind: "market_operations_runner"
816
767
  };
817
768
  }
818
- if (scalerKind !== "railway" && workerConfig.provider !== "railway") {
769
+ if (scalerKind !== "railway") {
819
770
  return {
820
771
  ok: true,
821
772
  skipped: true,
822
773
  reason: "scaler_unconfigured",
823
774
  mocked: true,
824
- serviceId: worker.serviceId ?? null
775
+ serviceId: null
825
776
  };
826
777
  }
827
- const serviceIdentifier = worker.serviceId || process.env.TREESEED_RAILWAY_WORKER_SERVICE_ID || worker.serviceName;
828
- const environmentIdentifier = process.env.TREESEED_RAILWAY_ENVIRONMENT_ID || worker.environment;
829
- const projectIdentifier = process.env.TREESEED_RAILWAY_PROJECT_ID || worker.projectId || worker.projectName;
778
+ const serviceIdentifier = process.env.TREESEED_RAILWAY_WORKER_SERVICE_ID;
779
+ const environmentIdentifier = process.env.TREESEED_RAILWAY_ENVIRONMENT_ID;
780
+ const projectIdentifier = process.env.TREESEED_RAILWAY_PROJECT_ID;
830
781
  return {
831
782
  ok: Boolean(serviceIdentifier && (environmentIdentifier || projectIdentifier)),
832
783
  mocked: true,
@@ -845,7 +796,7 @@ async function publishContent(options, reporter, publishOptions = {}) {
845
796
  const previewId = options.previewId ?? `staging-${sanitizeSegment(branchName, "preview")}-${sanitizeSegment(commitSha?.slice(0, 12), "latest")}`;
846
797
  const locator = resolveTeamScopedContentLocator(siteConfig, teamId);
847
798
  const { wranglerPath } = ensureGeneratedWranglerConfig(options.tenantRoot, { target });
848
- const wranglerEnv = { CLOUDFLARE_ACCOUNT_ID: String(process.env.CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() };
799
+ const wranglerEnv = { CLOUDFLARE_ACCOUNT_ID: String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() };
849
800
  const bucketName = String(process.env.TREESEED_CONTENT_BUCKET_NAME ?? siteConfig.cloudflare.r2?.bucketName ?? "").trim();
850
801
  if (!bucketName) {
851
802
  throw new Error("Treeseed content publish requires TREESEED_CONTENT_BUCKET_NAME to be configured.");
@@ -948,7 +899,7 @@ async function publishContent(options, reporter, publishOptions = {}) {
948
899
  contentPurgeUrls.add(absoluteUrl(siteConfig.siteUrl, freshnessPath) ?? "");
949
900
  }
950
901
  }
951
- const tempRoot = mkdtempSync(join(tmpdir(), "treeseed-content-publish-"));
902
+ const tempRoot = mkdtempSync(join(projectPlatformTempRoot(options.tenantRoot, "content-publish"), "treeseed-content-publish-"));
952
903
  try {
953
904
  if (!options.dryRun) {
954
905
  const uploadOptions = {
@@ -1058,30 +1009,46 @@ async function publishContent(options, reporter, publishOptions = {}) {
1058
1009
  }
1059
1010
  }
1060
1011
  async function provisionProjectPlatform(options) {
1012
+ writeWorkflowStatus(`provision:start scope=${options.scope}`);
1061
1013
  const timings = [];
1014
+ writeWorkflowStatus("provision:resolve-reporter");
1062
1015
  const reporter = resolveReporter(options.tenantRoot, options.reporter);
1016
+ writeWorkflowStatus(`provision:reporter kind=${reporter.kind} enabled=${reporter.enabled ? "true" : "false"}`);
1063
1017
  const target = createPersistentDeployTarget(options.scope === "local" ? "staging" : options.scope);
1018
+ writeWorkflowStatus(`provision:target ${deployTargetLabel(target)}`);
1064
1019
  const siteConfig = loadCliDeployConfig(options.tenantRoot);
1020
+ writeWorkflowStatus("provision:resolve-bootstrap-systems");
1065
1021
  const bootstrapSystems = resolveProjectPlatformBootstrapSystems(options, siteConfig);
1066
1022
  const selectedSystems = new Set(bootstrapSystems);
1067
1023
  const env = { ...process.env, ...options.env ?? {} };
1024
+ writeWorkflowStatus(`provision:reconcile:start systems=${bootstrapSystems.join(",") || "(none)"}`);
1068
1025
  const summary = await timedPhase(timings, "provision:reconcile", () => reconcileTreeseedTarget({
1069
1026
  tenantRoot: options.tenantRoot,
1070
1027
  target,
1071
1028
  env,
1072
1029
  systems: bootstrapSystems,
1073
- write: options.write
1030
+ write: options.write,
1031
+ dryRun: options.dryRun
1074
1032
  }));
1033
+ writeWorkflowStatus("provision:reconcile:done");
1075
1034
  timings.push(...summary.timings ?? []);
1035
+ writeWorkflowStatus("provision:collect-reconcile-status:start");
1076
1036
  const verification = await timedPhase(timings, "provision:collect-reconcile-status", () => collectTreeseedReconcileStatus({
1077
1037
  tenantRoot: options.tenantRoot,
1078
1038
  target,
1079
1039
  env,
1080
1040
  systems: bootstrapSystems
1081
1041
  }));
1082
- await timedPhase(timings, "provision:ensure-wrangler-config", () => {
1083
- ensureGeneratedWranglerConfig(options.tenantRoot, { target });
1084
- });
1042
+ writeWorkflowStatus("provision:collect-reconcile-status:done");
1043
+ if (selectedSystems.has("data") || selectedSystems.has("web")) {
1044
+ writeWorkflowStatus("provision:ensure-wrangler-config:start");
1045
+ await timedPhase(timings, "provision:ensure-wrangler-config", () => {
1046
+ ensureGeneratedWranglerConfig(options.tenantRoot, { target });
1047
+ });
1048
+ writeWorkflowStatus("provision:ensure-wrangler-config:done");
1049
+ } else {
1050
+ writeWorkflowStatus("provision:ensure-wrangler-config:skipped");
1051
+ }
1085
1052
  const shouldValidateRailway = selectedSystems.has("api") || selectedSystems.has("agents");
1086
1053
  const railwayValidation = shouldValidateRailway ? options.scope === "local" ? validateRailwayServiceConfiguration(options.tenantRoot, options.scope) : validateRailwayDeployPrerequisites(options.tenantRoot, options.scope, { env }) : { services: [] };
1087
1054
  const railwaySchedules = [];
@@ -1096,12 +1063,11 @@ async function provisionProjectPlatform(options) {
1096
1063
  environment: options.scope,
1097
1064
  deploymentProfile: siteConfig.hosting?.kind ?? "self_hosted_project",
1098
1065
  baseUrl: state.lastDeployedUrl,
1099
- cloudflareAccountId: String(process.env.CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() || null,
1066
+ cloudflareAccountId: String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() || null,
1100
1067
  pagesProjectName: state.pages?.projectName ?? null,
1101
1068
  workerName: state.workerName,
1102
1069
  r2BucketName: state.content?.bucketName ?? null,
1103
1070
  d1DatabaseName: state.d1Databases?.SITE_DATA_DB?.databaseName ?? null,
1104
- queueName: state.queues?.agentWork?.name ?? null,
1105
1071
  railwayProjectName: railwayValidation.services[0]?.projectName ?? null,
1106
1072
  metadata: {
1107
1073
  target: deployTargetLabel(target),
@@ -1157,14 +1123,6 @@ async function provisionProjectPlatform(options) {
1157
1123
  logicalName: state.d1Databases?.SITE_DATA_DB?.databaseName ?? "site-data",
1158
1124
  locator: state.d1Databases?.SITE_DATA_DB?.databaseId ?? null,
1159
1125
  metadata: state.d1Databases?.SITE_DATA_DB ?? {}
1160
- },
1161
- {
1162
- environment: options.scope,
1163
- provider: "cloudflare",
1164
- resourceKind: "queue",
1165
- logicalName: state.queues?.agentWork?.name ?? "agent-work",
1166
- locator: state.queues?.agentWork?.binding ?? null,
1167
- metadata: state.queues?.agentWork ?? {}
1168
1126
  }
1169
1127
  ];
1170
1128
  for (const resource of resourceReports) {
@@ -1239,16 +1197,22 @@ async function provisionProjectPlatform(options) {
1239
1197
  };
1240
1198
  }
1241
1199
  async function deployProjectPlatform(options) {
1200
+ writeWorkflowStatus(`deploy:start scope=${options.scope} dryRun=${options.dryRun ? "true" : "false"}`);
1242
1201
  const timings = [];
1243
1202
  const deployStartMs = performance.now();
1203
+ writeWorkflowStatus("deploy:resolve-reporter");
1244
1204
  const reporter = resolveReporter(options.tenantRoot, options.reporter);
1205
+ writeWorkflowStatus(`deploy:reporter kind=${reporter.kind} enabled=${reporter.enabled ? "true" : "false"}`);
1245
1206
  const commitSha = currentCommit(options.tenantRoot);
1246
1207
  const branchName = currentRef(options.tenantRoot);
1208
+ writeWorkflowStatus("deploy:resolve-bootstrap-systems");
1247
1209
  const bootstrapSystems = resolveProjectPlatformBootstrapSystems(options);
1248
1210
  const selectedSystems = new Set(bootstrapSystems);
1249
1211
  const execution = options.bootstrapExecution ?? "parallel";
1250
1212
  const write = options.write;
1251
1213
  const env = { ...process.env, ...options.env ?? {} };
1214
+ writeWorkflowStatus(`deploy:bootstrap-systems ${bootstrapSystems.join(",") || "(none)"}`);
1215
+ writeWorkflowStatus("deploy:report-running");
1252
1216
  await reportDeployment(reporter, {
1253
1217
  environment: options.scope,
1254
1218
  deploymentKind: "code",
@@ -1258,9 +1222,12 @@ async function deployProjectPlatform(options) {
1258
1222
  triggeredByType: "project_runner",
1259
1223
  metadata: { scope: options.scope }
1260
1224
  });
1225
+ writeWorkflowStatus("deploy:reported-running");
1261
1226
  if (!options.skipProvision) {
1227
+ writeWorkflowStatus("deploy:provision:start");
1262
1228
  const provision = await timedPhase(timings, "deploy:provision", () => provisionProjectPlatform({ ...options, reporter, bootstrapSystems }));
1263
1229
  timings.push(...provision.timings ?? []);
1230
+ writeWorkflowStatus("deploy:provision:done");
1264
1231
  }
1265
1232
  const nodes = [];
1266
1233
  let cloudflareContext = null;
@@ -1474,14 +1441,14 @@ async function monitorProjectPlatform(options) {
1474
1441
  const skippedApiCheck = apiSelected ? { ok: false, skipped: true, reason: "api_url_unconfigured" } : { ok: true, skipped: true, reason: "api_not_selected" };
1475
1442
  const skippedAgentCheck = agentsSelected ? { ok: false, skipped: true, reason: "api_url_unconfigured" } : { ok: true, skipped: true, reason: "agents_not_selected" };
1476
1443
  const skippedD1Check = apiMonitorEndpoints.processingAgentApi ? { ok: true, skipped: true, reason: "processing_agent_api" } : skippedApiCheck;
1444
+ const pagesProbeOptions = options.scope === "prod" ? { attempts: 18, delayMs: 1e4 } : { attempts: 3, delayMs: 5e3 };
1477
1445
  const checks = {
1478
- pages: timedPhase(timings, "monitor:probe-pages", () => probeHttp(webProbeUrl, { attempts: 3, delayMs: 5e3 })),
1446
+ pages: timedPhase(timings, "monitor:probe-pages", () => probeHttp(webProbeUrl, pagesProbeOptions)),
1479
1447
  apiHealth: apiSelected && apiMonitorEndpoints.apiHealth ? timedPhase(timings, "monitor:probe-api-health", () => probeHttp(apiMonitorEndpoints.apiHealth, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedApiCheck),
1480
1448
  apiReady: apiSelected && apiMonitorEndpoints.apiReady ? timedPhase(timings, "monitor:probe-api-ready", () => probeHttp(apiMonitorEndpoints.apiReady, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedApiCheck),
1481
1449
  d1Health: apiSelected && apiMonitorEndpoints.d1Health ? timedPhase(timings, "monitor:probe-d1-health", () => probeHttp(apiMonitorEndpoints.d1Health, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedD1Check),
1482
1450
  agentHealth: agentsSelected && apiMonitorEndpoints.agentHealth ? timedPhase(timings, "monitor:probe-agent-health", () => probeHttp(apiMonitorEndpoints.agentHealth, { attempts: 8, delayMs: 1e4 })) : Promise.resolve(skippedAgentCheck),
1483
1451
  r2: options.dryRun ? Promise.resolve({ ok: true, skipped: true, reason: "dry_run" }) : timedPhase(timings, "monitor:probe-r2", () => probeR2(options.tenantRoot, siteConfig, state, target)),
1484
- queue: options.dryRun ? Promise.resolve({ ok: true, skipped: true, reason: "dry_run" }) : timedPhase(timings, "monitor:probe-queue", () => probeQueue(siteConfig, state)),
1485
1452
  scaleProbe: timedPhase(timings, "monitor:probe-scale", () => probeScaleConfiguration(siteConfig, state)),
1486
1453
  railwayResources: Promise.resolve(railwayResourcesPromise),
1487
1454
  readiness: state.readiness,
@@ -1499,7 +1466,6 @@ async function monitorProjectPlatform(options) {
1499
1466
  d1Health: await checks.d1Health,
1500
1467
  agentHealth: await checks.agentHealth,
1501
1468
  r2: await checks.r2,
1502
- queue: await checks.queue,
1503
1469
  scaleProbe: await checks.scaleProbe,
1504
1470
  railwayResources: await checks.railwayResources
1505
1471
  };
@@ -1510,7 +1476,6 @@ async function monitorProjectPlatform(options) {
1510
1476
  resolvedChecks.d1Health,
1511
1477
  resolvedChecks.agentHealth,
1512
1478
  resolvedChecks.r2,
1513
- resolvedChecks.queue,
1514
1479
  resolvedChecks.scaleProbe,
1515
1480
  resolvedChecks.railwayResources
1516
1481
  ].every((check) => check?.ok === true || check?.skipped === true);
@@ -1550,12 +1515,11 @@ async function syncControlPlaneState(options) {
1550
1515
  environment: options.scope,
1551
1516
  deploymentProfile: siteConfig.hosting?.kind ?? "self_hosted_project",
1552
1517
  baseUrl: state.lastDeployedUrl,
1553
- cloudflareAccountId: String(process.env.CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() || null,
1518
+ cloudflareAccountId: String(process.env.TREESEED_CLOUDFLARE_ACCOUNT_ID ?? siteConfig.cloudflare.accountId ?? "").trim() || null,
1554
1519
  pagesProjectName: state.pages?.projectName ?? null,
1555
1520
  workerName: state.workerName,
1556
1521
  r2BucketName: state.content?.bucketName ?? null,
1557
1522
  d1DatabaseName: state.d1Databases?.SITE_DATA_DB?.databaseName ?? null,
1558
- queueName: state.queues?.agentWork?.name ?? null,
1559
1523
  railwayProjectName: state.services.api?.provider === "railway" ? state.services.api?.lastDeployedUrl ?? null : null,
1560
1524
  metadata: { target: deployTargetLabel(target) }
1561
1525
  });
@@ -1565,8 +1529,13 @@ async function runProjectPlatformAction(action, options) {
1565
1529
  const previousWorkflowPlane = process.env.TREESEED_WORKFLOW_PLANE;
1566
1530
  process.env.TREESEED_WORKFLOW_ACTION = action;
1567
1531
  process.env.TREESEED_WORKFLOW_PLANE = previousWorkflowPlane ?? "all";
1532
+ writeWorkflowStatus(`action:start ${action} scope=${options.scope}`);
1533
+ writeWorkflowStatus("action:apply-environment:start");
1568
1534
  applyTreeseedEnvironmentToProcess({ tenantRoot: options.tenantRoot, scope: options.scope, override: true });
1535
+ writeWorkflowStatus("action:apply-environment:done");
1536
+ writeWorkflowStatus("action:resolve-reporter:start");
1569
1537
  const reporter = resolveReporter(options.tenantRoot, options.reporter);
1538
+ writeWorkflowStatus(`action:resolve-reporter:done kind=${reporter.kind} enabled=${reporter.enabled ? "true" : "false"}`);
1570
1539
  try {
1571
1540
  switch (action) {
1572
1541
  case "deploy_web":
@@ -1,5 +1,5 @@
1
- import { type GitHubApiClient } from './github-api.ts';
2
- import type { ProjectDeploymentEnvironment, ProjectWebMonitorResult } from '../../sdk-types.ts';
1
+ import { type GitHubApiClient } from './github-api.js';
2
+ import type { ProjectDeploymentEnvironment, ProjectWebMonitorResult } from '../../sdk-types.js';
3
3
  export declare function buildProjectWebMonitorResult(input: {
4
4
  environment: ProjectDeploymentEnvironment;
5
5
  action?: string | null;
@@ -2,6 +2,10 @@ import {
2
2
  getGitHubWorkflowFileStatus,
3
3
  getLatestGitHubWorkflowRun
4
4
  } from "./github-api.js";
5
+ import {
6
+ contentRuntimeMetadataFromTarget,
7
+ resolveTreeseedContentRuntimeSource
8
+ } from "../../platform/content-runtime-source.js";
5
9
  const FORBIDDEN_MONITOR_FIELDS = /* @__PURE__ */ new Set([
6
10
  "capacityProviderId",
7
11
  "laneId",
@@ -56,7 +60,77 @@ function statusFromChecks(checks) {
56
60
  if (checks.some((entry) => entry.status === "passed")) return "healthy";
57
61
  return "unknown";
58
62
  }
63
+ function architectureFromTarget(target) {
64
+ const architecture = objectValue(target.architecture);
65
+ const source = text(architecture.contentRuntimeSource);
66
+ if (!source) return null;
67
+ return {
68
+ contentRuntimeSource: source,
69
+ contentPublishTarget: objectValue(architecture.contentPublishTarget)
70
+ };
71
+ }
72
+ function fallbackPublishArchitecture(target, treeDxPublish) {
73
+ const metadata = contentRuntimeMetadataFromTarget(target);
74
+ if (treeDxPublish) {
75
+ return {
76
+ architecture: {
77
+ contentRuntimeSource: "treedx_snapshot",
78
+ contentPublishTarget: objectValue(target.contentPublishTarget)
79
+ },
80
+ metadata
81
+ };
82
+ }
83
+ if (metadata.r2.manifestKey || metadata.r2.overlayKey) {
84
+ return {
85
+ architecture: {
86
+ contentRuntimeSource: metadata.r2.overlayKey ? "r2_preview_overlay" : "r2_published_manifest",
87
+ contentPublishTarget: objectValue(target.contentPublishTarget)
88
+ },
89
+ metadata
90
+ };
91
+ }
92
+ return null;
93
+ }
94
+ function contentRuntimeCheck(input) {
95
+ if (!input.resolution) {
96
+ return check({
97
+ key: "content_runtime",
98
+ label: "Content runtime",
99
+ status: "skipped",
100
+ source: "sdk",
101
+ summary: "No project content runtime metadata was reported."
102
+ });
103
+ }
104
+ const status = input.resolution.ready ? "passed" : input.hasRuntimeMetadata ? "warning" : "skipped";
105
+ const source = input.resolution.mode === "r2" ? "r2" : input.resolution.mode === "treedx" ? "treedx" : "sdk";
106
+ const locator = input.resolution.snapshotId ? `snapshot ${input.resolution.snapshotId}` : input.resolution.manifestKey ? `manifest ${input.resolution.manifestKey}` : null;
107
+ return check({
108
+ key: "content_runtime",
109
+ label: "Content runtime",
110
+ status,
111
+ source,
112
+ summary: input.resolution.ready ? `Content runtime will use ${input.resolution.effectiveContentSource}${locator ? ` (${locator})` : ""}.` : input.resolution.diagnostics[0]?.summary ?? "Content runtime metadata is incomplete."
113
+ });
114
+ }
115
+ function summarizeContentPublish(input) {
116
+ if (input.treeDxPublish) {
117
+ return input.contentRuntime?.snapshotId ? `TreeDX content snapshot ${input.contentRuntime.snapshotId} was published to R2 without GitHub Actions.` : "TreeDX content snapshot was published to R2 without GitHub Actions.";
118
+ }
119
+ if (input.action === "publish_content") {
120
+ return input.contentRuntime?.manifestKey ? `Content publish completed for R2 manifest ${input.contentRuntime.manifestKey}.` : "Content publish workflow completed.";
121
+ }
122
+ return "Content publish was not part of this action.";
123
+ }
59
124
  function workflowRunCheck(input) {
125
+ if (input.treeDxPublish) {
126
+ return check({
127
+ key: "latest_workflow",
128
+ label: "Latest workflow",
129
+ status: "skipped",
130
+ source: "treedx",
131
+ summary: "TreeDX content publish does not dispatch a GitHub Actions workflow."
132
+ });
133
+ }
60
134
  const run = input.workflowResult?.runId ? input.workflowResult : input.latestWorkflowRun;
61
135
  if (!run) {
62
136
  return check({
@@ -83,6 +157,15 @@ function workflowRunCheck(input) {
83
157
  });
84
158
  }
85
159
  async function workflowFileCheck(input) {
160
+ if (input.treeDxPublish) {
161
+ return check({
162
+ key: "workflow_file",
163
+ label: "Workflow file",
164
+ status: "skipped",
165
+ source: "treedx",
166
+ summary: "TreeDX content publish uses the Treeseed operations runner and Cloudflare R2 directly."
167
+ });
168
+ }
86
169
  if (!input.repository) {
87
170
  return check({
88
171
  key: "workflow_file",
@@ -179,6 +262,21 @@ async function buildProjectWebMonitorResult(input) {
179
262
  const repository = repositorySlug(input.repository);
180
263
  const workflowFile = text(input.workflowFile ?? input.repository?.workflowFile, "deploy-web.yml");
181
264
  const target = objectValue(input.target);
265
+ const contentPublish = objectValue(target.contentPublish);
266
+ const treeDxPublish = input.action === "publish_content" && contentPublish.provider === "treedx";
267
+ const targetArchitecture = architectureFromTarget(target);
268
+ const fallbackArchitecture = fallbackPublishArchitecture(target, treeDxPublish);
269
+ const contentRuntimeMetadata = fallbackArchitecture?.metadata ?? contentRuntimeMetadataFromTarget(target);
270
+ const runtimeArchitecture = targetArchitecture ?? fallbackArchitecture?.architecture ?? null;
271
+ const contentRuntime = runtimeArchitecture ? resolveTreeseedContentRuntimeSource({
272
+ architecture: runtimeArchitecture,
273
+ r2: contentRuntimeMetadata.r2,
274
+ treeDx: contentRuntimeMetadata.treeDx,
275
+ includeLocalPath: false
276
+ }) : null;
277
+ const hasRuntimeMetadata = Boolean(
278
+ targetArchitecture || contentRuntimeMetadata.r2.manifestKey || contentRuntimeMetadata.r2.overlayKey || contentRuntimeMetadata.treeDx.snapshotId || contentRuntimeMetadata.treeDx.libraryId || contentRuntimeMetadata.treeDx.repositoryId
279
+ );
182
280
  const targetUrl = externalUrl(target.url, target.baseUrl, target.previewUrl, target.lastDeploymentUrl);
183
281
  const latestWorkflowRun = !input.workflowResult && repository && input.githubClient ? await getLatestGitHubWorkflowRun(repository, {
184
282
  client: input.githubClient,
@@ -190,14 +288,16 @@ async function buildProjectWebMonitorResult(input) {
190
288
  workflowResult: input.workflowResult ?? input.externalWorkflow ?? null,
191
289
  latestWorkflowRun,
192
290
  repository,
193
- workflowFile
291
+ workflowFile,
292
+ treeDxPublish
194
293
  }),
195
294
  await workflowFileCheck({
196
295
  repository,
197
296
  workflowFile,
198
297
  githubClient: input.githubClient,
199
298
  mockExternal: input.mockExternal,
200
- dryRun: input.dryRun
299
+ dryRun: input.dryRun,
300
+ treeDxPublish
201
301
  }),
202
302
  check({
203
303
  key: "web_host",
@@ -220,12 +320,13 @@ async function buildProjectWebMonitorResult(input) {
220
320
  mockExternal: input.mockExternal,
221
321
  dryRun: input.dryRun
222
322
  }),
323
+ contentRuntimeCheck({ resolution: contentRuntime, hasRuntimeMetadata }),
223
324
  check({
224
325
  key: "content_publish",
225
326
  label: "Content publish",
226
327
  status: input.action === "publish_content" ? "passed" : "skipped",
227
- source: "sdk",
228
- summary: input.action === "publish_content" ? "Content publish workflow completed." : "Content publish was not part of this action."
328
+ source: treeDxPublish ? "treedx" : "sdk",
329
+ summary: summarizeContentPublish({ action: input.action, treeDxPublish, contentRuntime })
229
330
  }),
230
331
  check({
231
332
  key: "d1_migration",
@@ -251,7 +352,23 @@ async function buildProjectWebMonitorResult(input) {
251
352
  checkedAt: (/* @__PURE__ */ new Date()).toISOString(),
252
353
  checks,
253
354
  urls,
254
- warnings
355
+ warnings,
356
+ ...contentRuntime ? {
357
+ contentRuntime: {
358
+ contentRuntimeSource: contentRuntime.contentRuntimeSource,
359
+ effectiveContentSource: contentRuntime.effectiveContentSource,
360
+ manifestKey: contentRuntime.manifestKey,
361
+ overlayKey: contentRuntime.overlayKey,
362
+ revision: contentRuntime.revision,
363
+ snapshotId: contentRuntime.snapshotId,
364
+ diagnostics: contentRuntime.diagnostics.map((entry) => ({
365
+ code: entry.code,
366
+ status: entry.status,
367
+ source: entry.source,
368
+ summary: entry.summary
369
+ }))
370
+ }
371
+ } : {}
255
372
  };
256
373
  return redact(result);
257
374
  }