@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
@@ -26,17 +26,84 @@ function formatVerificationFailure(verification) {
26
26
  ].filter(Boolean);
27
27
  return details.length > 0 ? `Verification failed (${details.join(" | ")})` : "Verification failed.";
28
28
  }
29
- function createRunContext(tenantRoot, target, launchEnv, write) {
29
+ function createRunContext(tenantRoot, target, launchEnv, write, dryRun = false, session) {
30
30
  const { deployConfig } = deriveTreeseedDesiredUnits({ tenantRoot, target });
31
31
  return {
32
32
  tenantRoot,
33
33
  target,
34
34
  deployConfig,
35
35
  launchEnv,
36
+ dryRun,
36
37
  write,
37
- session: /* @__PURE__ */ new Map()
38
+ session: session ?? /* @__PURE__ */ new Map()
38
39
  };
39
40
  }
41
+ function normalizeSelectorValues(values) {
42
+ return new Set((values ?? []).map((value) => value.trim()).filter(Boolean));
43
+ }
44
+ function unitSelectorValues(unit) {
45
+ const metadata = unit.metadata ?? {};
46
+ const spec = unit.spec ?? {};
47
+ const serviceKey = typeof metadata.serviceKey === "string" ? metadata.serviceKey : null;
48
+ const placement = typeof metadata.placement === "string" ? metadata.placement : null;
49
+ const appId = typeof metadata.applicationId === "string" ? metadata.applicationId : typeof metadata.appId === "string" ? metadata.appId : typeof spec.applicationId === "string" ? spec.applicationId : null;
50
+ const packageId = typeof metadata.packageId === "string" ? metadata.packageId : appId;
51
+ const serviceName = typeof spec.serviceName === "string" ? spec.serviceName : null;
52
+ const serviceId = typeof metadata.serviceId === "string" ? metadata.serviceId : typeof spec.serviceId === "string" ? spec.serviceId : null;
53
+ return {
54
+ provider: unit.provider,
55
+ unitType: unit.unitType,
56
+ unitId: unit.unitId,
57
+ serviceIds: [
58
+ unit.logicalName,
59
+ serviceId,
60
+ serviceKey,
61
+ serviceName,
62
+ unit.unitType.startsWith("railway-service:") ? unit.unitType.slice("railway-service:".length) : null,
63
+ unit.unitType.endsWith("-runtime") ? unit.logicalName : null
64
+ ].filter((value) => Boolean(value)),
65
+ serviceTypes: [unit.unitType],
66
+ placements: [placement].filter((value) => Boolean(value)),
67
+ appIds: [appId].filter((value) => Boolean(value)),
68
+ packageIds: [packageId].filter((value) => Boolean(value))
69
+ };
70
+ }
71
+ function unitMatchesSelector(unit, selector) {
72
+ if (!selector) return true;
73
+ const values = unitSelectorValues(unit);
74
+ const provider = normalizeSelectorValues(selector.provider ?? selector.host);
75
+ const unitIds = normalizeSelectorValues(selector.unitId);
76
+ const unitTypes = normalizeSelectorValues([
77
+ ...selector.unitType ?? [],
78
+ ...selector.resourceKind ?? []
79
+ ]);
80
+ const serviceIds = normalizeSelectorValues(selector.serviceId);
81
+ const serviceTypes = normalizeSelectorValues(selector.serviceType);
82
+ const placements = normalizeSelectorValues(selector.placement);
83
+ const appIds = normalizeSelectorValues(selector.appId);
84
+ const packageIds = normalizeSelectorValues(selector.packageId);
85
+ const has = (needle, haystack) => needle.size === 0 || haystack.some((entry) => needle.has(entry));
86
+ return has(provider, [values.provider]) && has(unitIds, [values.unitId]) && has(unitTypes, [values.unitType]) && has(serviceIds, values.serviceIds) && has(serviceTypes, values.serviceTypes) && has(placements, values.placements) && has(appIds, values.appIds) && has(packageIds, values.packageIds);
87
+ }
88
+ function includeDependencies(units, selected) {
89
+ const byId = new Map(units.map((unit) => [unit.unitId, unit]));
90
+ const included = new Map(selected.map((unit) => [unit.unitId, unit]));
91
+ const visit = (unit) => {
92
+ for (const dependencyId of unit.dependencies) {
93
+ const dependency = byId.get(dependencyId);
94
+ if (!dependency || included.has(dependency.unitId)) continue;
95
+ included.set(dependency.unitId, dependency);
96
+ visit(dependency);
97
+ }
98
+ };
99
+ for (const unit of selected) visit(unit);
100
+ return units.filter((unit) => included.has(unit.unitId));
101
+ }
102
+ function filterUnitsBySelector(units, selector) {
103
+ if (!selector) return units;
104
+ const selected = units.filter((unit) => unitMatchesSelector(unit, selector));
105
+ return includeDependencies(units, selected);
106
+ }
40
107
  function dependencyLevels(units) {
41
108
  const remaining = new Map(units.map((unit) => [unit.unitId, unit]));
42
109
  const completed = /* @__PURE__ */ new Set();
@@ -123,33 +190,36 @@ async function verifyPlanUnits({
123
190
  }
124
191
  return verificationResults;
125
192
  }
126
- async function observeTreeseedUnits({
193
+ async function refreshTreeseedUnits({
127
194
  tenantRoot,
128
195
  target,
129
196
  env = process.env,
130
197
  systems,
198
+ selector,
199
+ units: explicitUnits,
131
200
  write
132
201
  }) {
133
202
  const derived = deriveTreeseedDesiredUnits({ tenantRoot, target });
134
- const units = filterTreeseedDesiredUnitsByBootstrapSystems(derived.units, systems);
203
+ const baseUnits = explicitUnits ?? filterTreeseedDesiredUnitsByBootstrapSystems(derived.units, systems);
204
+ const units = filterUnitsBySelector(baseUnits, selector);
135
205
  const deployConfig = derived.deployConfig;
136
206
  const registry = createTreeseedReconcileRegistry(deployConfig);
137
207
  const reconcileState = loadTreeseedReconcileState(tenantRoot, target);
138
208
  const context = createRunContext(tenantRoot, target, env, write);
139
209
  const observations = /* @__PURE__ */ new Map();
140
210
  await runByDependencyLevel(topologicallySortDesiredUnits(units), async (unit) => {
141
- write?.(`Observing ${unit.provider}:${unit.unitType}...`);
211
+ write?.(`Refreshing ${unit.provider}:${unit.unitType}...`);
142
212
  const adapter = registry.get(unit.unitType, unit.provider);
143
213
  const persisted = ensureTreeseedPersistedUnitState(reconcileState, unit);
144
214
  let observed;
145
215
  try {
146
- observed = await Promise.resolve(adapter.observe({
216
+ observed = await Promise.resolve(adapter.refresh({
147
217
  context,
148
218
  unit,
149
219
  persistedState: persisted
150
220
  }));
151
221
  } catch (error) {
152
- wrapAdapterFailure("observe", unit.provider, unit.unitType, unit.unitId, error);
222
+ wrapAdapterFailure("refresh", unit.provider, unit.unitType, unit.unitId, error);
153
223
  }
154
224
  observations.set(unit.unitId, observed);
155
225
  });
@@ -165,9 +235,11 @@ async function planTreeseedReconciliation({
165
235
  target,
166
236
  env = process.env,
167
237
  systems,
238
+ selector,
239
+ units,
168
240
  write
169
241
  }) {
170
- const observed = await observeTreeseedUnits({ tenantRoot, target, env, systems, write });
242
+ const observed = await refreshTreeseedUnits({ tenantRoot, target, env, systems, selector, units, write });
171
243
  const registry = createTreeseedReconcileRegistry(observed.deployConfig);
172
244
  const context = createRunContext(tenantRoot, target, env, write);
173
245
  const plans = [];
@@ -177,14 +249,14 @@ async function planTreeseedReconciliation({
177
249
  const observation = observed.observations.get(unit.unitId);
178
250
  let diff;
179
251
  try {
180
- diff = await Promise.resolve(adapter.plan({
252
+ diff = await Promise.resolve(adapter.diff({
181
253
  context,
182
254
  unit,
183
255
  persistedState: persisted,
184
256
  observed: observation
185
257
  }));
186
258
  } catch (error) {
187
- wrapAdapterFailure("plan", unit.provider, unit.unitType, unit.unitId, error);
259
+ wrapAdapterFailure("diff", unit.provider, unit.unitType, unit.unitId, error);
188
260
  }
189
261
  plans.push({
190
262
  unit,
@@ -203,11 +275,15 @@ async function reconcileTreeseedTarget({
203
275
  target,
204
276
  env = process.env,
205
277
  systems,
206
- write
278
+ selector,
279
+ units,
280
+ write,
281
+ dryRun = false,
282
+ session
207
283
  }) {
208
- const planned = await planTreeseedReconciliation({ tenantRoot, target, env, systems, write });
284
+ const planned = await planTreeseedReconciliation({ tenantRoot, target, env, systems, selector, units, write });
209
285
  const registry = createTreeseedReconcileRegistry(planned.deployConfig);
210
- const context = createRunContext(tenantRoot, target, env, write);
286
+ const context = createRunContext(tenantRoot, target, env, write, dryRun, session);
211
287
  const results = [];
212
288
  const verificationMap = /* @__PURE__ */ new Map();
213
289
  const timingEntries = [];
@@ -225,7 +301,7 @@ async function reconcileTreeseedTarget({
225
301
  await runByDependencyLevel(topologicallySortDesiredUnits(planned.units), async (unit) => {
226
302
  const plan = planByUnitId.get(unit.unitId);
227
303
  const unitTiming = {
228
- name: `reconcile:${plan.unit.provider}:${plan.unit.unitType}:${plan.unit.logicalName}`,
304
+ name: `apply:${plan.unit.provider}:${plan.unit.unitType}:${plan.unit.logicalName}`,
229
305
  durationMs: 0,
230
306
  status: "running",
231
307
  children: [],
@@ -233,7 +309,7 @@ async function reconcileTreeseedTarget({
233
309
  };
234
310
  const unitStartMs = performance.now();
235
311
  timingEntries.push(unitTiming);
236
- write?.(`Reconciling ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName})...`);
312
+ write?.(`Applying ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName})...`);
237
313
  const adapter = registry.get(plan.unit.unitType, plan.unit.provider);
238
314
  const persisted = ensureTreeseedPersistedUnitState(planned.state, plan.unit);
239
315
  try {
@@ -261,27 +337,69 @@ async function reconcileTreeseedTarget({
261
337
  let result;
262
338
  try {
263
339
  const stageStartMs = performance.now();
264
- result = await Promise.resolve(adapter.reconcile({
265
- context,
266
- unit: plan.unit,
267
- persistedState: persisted,
268
- observed: plan.observed,
269
- diff: plan.diff
270
- }));
340
+ if (dryRun) {
341
+ result = {
342
+ unit: plan.unit,
343
+ observed: plan.observed,
344
+ diff: plan.diff,
345
+ action: plan.diff.action,
346
+ warnings: [...plan.observed.warnings, "dry run: apply skipped"],
347
+ resourceLocators: plan.observed.locators,
348
+ state: plan.observed.live,
349
+ verification: null
350
+ };
351
+ } else {
352
+ result = await Promise.resolve(adapter.apply({
353
+ context,
354
+ unit: plan.unit,
355
+ persistedState: persisted,
356
+ observed: plan.observed,
357
+ diff: plan.diff
358
+ }));
359
+ }
271
360
  unitTiming.children?.push({
272
- name: `${unitTiming.name}:reconcile`,
361
+ name: `${unitTiming.name}:apply`,
273
362
  durationMs: elapsedMs(stageStartMs),
274
- status: "success"
363
+ status: dryRun ? "skipped" : "success"
275
364
  });
276
365
  } catch (error) {
277
366
  unitTiming.children?.push({
278
- name: `${unitTiming.name}:reconcile`,
367
+ name: `${unitTiming.name}:apply`,
279
368
  durationMs: elapsedMs(unitStartMs),
280
369
  status: "failed"
281
370
  });
282
371
  unitTiming.durationMs = elapsedMs(unitStartMs);
283
372
  unitTiming.status = "failed";
284
- wrapAdapterFailure("reconcile", plan.unit.provider, plan.unit.unitType, plan.unit.unitId, error);
373
+ wrapAdapterFailure("apply", plan.unit.provider, plan.unit.unitType, plan.unit.unitId, error);
374
+ }
375
+ let refreshedObserved = result.observed;
376
+ if (!dryRun) {
377
+ try {
378
+ const stageStartMs = performance.now();
379
+ refreshedObserved = await Promise.resolve(adapter.refresh({
380
+ context,
381
+ unit: plan.unit,
382
+ persistedState: persisted
383
+ }));
384
+ result = {
385
+ ...result,
386
+ observed: refreshedObserved
387
+ };
388
+ unitTiming.children?.push({
389
+ name: `${unitTiming.name}:refresh-after-apply`,
390
+ durationMs: elapsedMs(stageStartMs),
391
+ status: "success"
392
+ });
393
+ } catch (error) {
394
+ unitTiming.children?.push({
395
+ name: `${unitTiming.name}:refresh-after-apply`,
396
+ durationMs: elapsedMs(unitStartMs),
397
+ status: "failed"
398
+ });
399
+ unitTiming.durationMs = elapsedMs(unitStartMs);
400
+ unitTiming.status = "failed";
401
+ wrapAdapterFailure("refresh", plan.unit.provider, plan.unit.unitType, plan.unit.unitId, error);
402
+ }
285
403
  }
286
404
  write?.(`Verifying ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName})...`);
287
405
  const postconditions = await Promise.resolve(adapter.requiredPostconditions?.({
@@ -296,7 +414,7 @@ async function reconcileTreeseedTarget({
296
414
  context,
297
415
  unit: plan.unit,
298
416
  persistedState: persisted,
299
- observed: result.observed,
417
+ observed: refreshedObserved,
300
418
  diff: plan.diff,
301
419
  result,
302
420
  postconditions
@@ -329,13 +447,19 @@ async function reconcileTreeseedTarget({
329
447
  unitTiming.status = verification.verified ? "success" : "failed";
330
448
  write?.(`Finished ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.logicalName}) in ${formatDurationMs(unitTiming.durationMs)}.`);
331
449
  if (!verification.verified) {
332
- await persistVerifiedResult(persisted, verifiedResult);
450
+ if (!dryRun) {
451
+ await persistVerifiedResult(persisted, verifiedResult);
452
+ }
333
453
  throw new Error(`Treeseed reconcile verification failed for ${plan.unit.provider}:${plan.unit.unitType} (${plan.unit.unitId}): ${formatVerificationFailure(verification)}`);
334
454
  }
335
- await persistVerifiedResult(persisted, verifiedResult);
455
+ if (!dryRun) {
456
+ await persistVerifiedResult(persisted, verifiedResult);
457
+ }
336
458
  results.push(verifiedResult);
337
459
  });
338
- writeTreeseedReconcileState(tenantRoot, planned.state);
460
+ if (!dryRun) {
461
+ writeTreeseedReconcileState(tenantRoot, planned.state);
462
+ }
339
463
  return {
340
464
  target,
341
465
  units: planned.units,
@@ -349,9 +473,12 @@ async function destroyTreeseedTargetUnits({
349
473
  tenantRoot,
350
474
  target,
351
475
  env = process.env,
476
+ selector,
477
+ units: explicitUnits,
352
478
  write
353
479
  }) {
354
- const { units, deployConfig } = deriveTreeseedDesiredUnits({ tenantRoot, target });
480
+ const { units: allUnits, deployConfig } = deriveTreeseedDesiredUnits({ tenantRoot, target });
481
+ const units = filterUnitsBySelector(explicitUnits ?? allUnits, selector);
355
482
  const registry = createTreeseedReconcileRegistry(deployConfig);
356
483
  const reconcileState = loadTreeseedReconcileState(tenantRoot, target);
357
484
  const context = createRunContext(tenantRoot, target, env, write);
@@ -365,13 +492,13 @@ async function destroyTreeseedTargetUnits({
365
492
  const persisted = ensureTreeseedPersistedUnitState(reconcileState, unit);
366
493
  let observed;
367
494
  try {
368
- observed = await Promise.resolve(adapter.observe({
495
+ observed = await Promise.resolve(adapter.refresh({
369
496
  context,
370
497
  unit,
371
498
  persistedState: persisted
372
499
  }));
373
500
  } catch (error) {
374
- wrapAdapterFailure("observe", unit.provider, unit.unitType, unit.unitId, error);
501
+ wrapAdapterFailure("refresh", unit.provider, unit.unitType, unit.unitId, error);
375
502
  }
376
503
  let result;
377
504
  try {
@@ -392,16 +519,19 @@ async function collectTreeseedReconcileStatus({
392
519
  tenantRoot,
393
520
  target,
394
521
  env = process.env,
395
- systems
522
+ systems,
523
+ selector,
524
+ units,
525
+ session
396
526
  }) {
397
- const observed = await observeTreeseedUnits({ tenantRoot, target, env, systems });
527
+ const observed = await refreshTreeseedUnits({ tenantRoot, target, env, systems, selector, units });
398
528
  const registry = createTreeseedReconcileRegistry(observed.deployConfig);
399
- const context = createRunContext(tenantRoot, target, env);
529
+ const context = createRunContext(tenantRoot, target, env, void 0, false, session);
400
530
  const plans = await Promise.all(observed.units.map(async (unit) => {
401
531
  const adapter = registry.get(unit.unitType, unit.provider);
402
532
  const persisted = ensureTreeseedPersistedUnitState(observed.state, unit);
403
533
  const observation = observed.observations.get(unit.unitId);
404
- const diff = await Promise.resolve(adapter.plan({
534
+ const diff = await Promise.resolve(adapter.diff({
405
535
  context,
406
536
  unit,
407
537
  persistedState: persisted,
@@ -420,7 +550,7 @@ async function collectTreeseedReconcileStatus({
420
550
  context,
421
551
  state: observed.state
422
552
  });
423
- const units = observed.units.map((unit) => {
553
+ const unitStatuses = observed.units.map((unit) => {
424
554
  const observation = observed.observations.get(unit.unitId);
425
555
  const verification = verificationResults.get(unit.unitId)?.verification ?? null;
426
556
  return {
@@ -434,21 +564,76 @@ async function collectTreeseedReconcileStatus({
434
564
  verification
435
565
  };
436
566
  });
437
- const ready = units.every((unit) => unit.verification?.verified === true);
438
- const blockers = units.filter((unit) => unit.verification?.verified !== true).map((unit) => `Reconcile unit ${unit.provider}:${unit.unitType} is unverified: ${formatVerificationFailure(unit.verification)}.`);
439
- const warnings = units.flatMap((unit) => unit.warnings);
567
+ const ready = unitStatuses.every((unit) => unit.verification?.verified === true);
568
+ const blockers = unitStatuses.filter((unit) => unit.verification?.verified !== true).map((unit) => `Reconcile unit ${unit.provider}:${unit.unitType} is unverified: ${formatVerificationFailure(unit.verification)}.`);
569
+ const warnings = unitStatuses.flatMap((unit) => unit.warnings);
440
570
  return {
441
571
  target,
442
572
  ready,
443
573
  blockers,
444
574
  warnings,
445
- units
575
+ units: unitStatuses
446
576
  };
447
577
  }
578
+ async function reconcileTreeseedNestedTarget({
579
+ parentContext,
580
+ selector,
581
+ target,
582
+ dryRun
583
+ }) {
584
+ const previousVerificationResults = parentContext.session.get("treeseed:verification-results");
585
+ const previousTimings = parentContext.session.get("treeseed:timings");
586
+ try {
587
+ return await reconcileTreeseedTarget({
588
+ tenantRoot: parentContext.tenantRoot,
589
+ target,
590
+ env: parentContext.launchEnv,
591
+ selector,
592
+ write: parentContext.write,
593
+ dryRun,
594
+ session: parentContext.session
595
+ });
596
+ } finally {
597
+ if (previousVerificationResults === void 0) {
598
+ parentContext.session.delete("treeseed:verification-results");
599
+ } else {
600
+ parentContext.session.set("treeseed:verification-results", previousVerificationResults);
601
+ }
602
+ if (previousTimings === void 0) {
603
+ parentContext.session.delete("treeseed:timings");
604
+ } else {
605
+ parentContext.session.set("treeseed:timings", previousTimings);
606
+ }
607
+ }
608
+ }
609
+ async function verifyTreeseedNestedTarget({
610
+ parentContext,
611
+ selector,
612
+ target
613
+ }) {
614
+ const previousVerificationResults = parentContext.session.get("treeseed:verification-results");
615
+ try {
616
+ return await collectTreeseedReconcileStatus({
617
+ tenantRoot: parentContext.tenantRoot,
618
+ target,
619
+ env: parentContext.launchEnv,
620
+ selector,
621
+ session: parentContext.session
622
+ });
623
+ } finally {
624
+ if (previousVerificationResults === void 0) {
625
+ parentContext.session.delete("treeseed:verification-results");
626
+ } else {
627
+ parentContext.session.set("treeseed:verification-results", previousVerificationResults);
628
+ }
629
+ }
630
+ }
448
631
  export {
449
632
  collectTreeseedReconcileStatus,
450
633
  destroyTreeseedTargetUnits,
451
- observeTreeseedUnits,
452
634
  planTreeseedReconciliation,
453
- reconcileTreeseedTarget
635
+ reconcileTreeseedNestedTarget,
636
+ reconcileTreeseedTarget,
637
+ refreshTreeseedUnits,
638
+ verifyTreeseedNestedTarget
454
639
  };
@@ -1,8 +1,10 @@
1
- export * from './contracts.ts';
2
- export * from './bootstrap-systems.ts';
3
- export * from './desired-state.ts';
4
- export * from './engine.ts';
5
- export * from './errors.ts';
6
- export * from './registry.ts';
7
- export * from './state.ts';
8
- export * from './units.ts';
1
+ export * from './contracts.js';
2
+ export * from './platform.js';
3
+ export * from './bootstrap-systems.js';
4
+ export * from './desired-state.js';
5
+ export * from './engine.js';
6
+ export * from './errors.js';
7
+ export * from './live-acceptance.js';
8
+ export * from './registry.js';
9
+ export * from './state.js';
10
+ export * from './units.js';
@@ -1,8 +1,10 @@
1
1
  export * from "./contracts.js";
2
+ export * from "./platform.js";
2
3
  export * from "./bootstrap-systems.js";
3
4
  export * from "./desired-state.js";
4
5
  export * from "./engine.js";
5
6
  export * from "./errors.js";
7
+ export * from "./live-acceptance.js";
6
8
  export * from "./registry.js";
7
9
  export * from "./state.js";
8
10
  export * from "./units.js";
@@ -0,0 +1,100 @@
1
+ import { type TreeseedCanonicalAction, type TreeseedCanonicalDrift, type TreeseedCanonicalGraphNode, type TreeseedCanonicalReconcileReport } from './platform.js';
2
+ import type { TreeseedDesiredResource } from '../platform/desired-state.js';
3
+ import type { TreeseedReconcileSelector } from './contracts.js';
4
+ export type TreeseedLiveReconcileProvider = 'railway' | 'cloudflare' | 'github' | 'local';
5
+ export type TreeseedLiveReconcileMode = 'smoke' | 'acceptance' | 'cleanup';
6
+ export type TreeseedLiveReconcileEnvironment = 'local' | 'staging' | 'prod';
7
+ export interface TreeseedLiveReconcileScenarioResult {
8
+ id: string;
9
+ provider: TreeseedLiveReconcileProvider;
10
+ capability: string;
11
+ mode: TreeseedLiveReconcileMode;
12
+ ok: boolean;
13
+ phase: 'smoke' | 'validate' | 'create' | 'update' | 'replace' | 'verify' | 'destroy' | 'cleanup' | 'blocked';
14
+ action: TreeseedCanonicalAction['kind'];
15
+ reason: string;
16
+ startedAt: string;
17
+ completedAt: string;
18
+ durationMs: number;
19
+ locators: Record<string, string | null>;
20
+ createdResources: TreeseedCanonicalGraphNode[];
21
+ updatedResources: TreeseedCanonicalGraphNode[];
22
+ replacedResources: TreeseedCanonicalGraphNode[];
23
+ destroyedResources: TreeseedCanonicalGraphNode[];
24
+ retainedResources: TreeseedCanonicalGraphNode[];
25
+ issues: string[];
26
+ }
27
+ export interface TreeseedLiveReconcileProviderReport {
28
+ provider: TreeseedLiveReconcileProvider;
29
+ mode: TreeseedLiveReconcileMode;
30
+ runId: string;
31
+ resourcePrefix: string;
32
+ scenarioResults: TreeseedLiveReconcileScenarioResult[];
33
+ coverage: {
34
+ total: number;
35
+ passed: number;
36
+ failed: number;
37
+ capabilities: string[];
38
+ };
39
+ createdResources: TreeseedCanonicalGraphNode[];
40
+ updatedResources: TreeseedCanonicalGraphNode[];
41
+ replacedResources: TreeseedCanonicalGraphNode[];
42
+ destroyedResources: TreeseedCanonicalGraphNode[];
43
+ retainedResources: TreeseedCanonicalGraphNode[];
44
+ cleanupDrift: TreeseedCanonicalDrift[];
45
+ report: TreeseedCanonicalReconcileReport;
46
+ ok: boolean;
47
+ }
48
+ export interface TreeseedLiveReconcileRunResult {
49
+ command: 'reconcile test-live';
50
+ mode: TreeseedLiveReconcileMode;
51
+ environment: TreeseedLiveReconcileEnvironment;
52
+ runId: string;
53
+ resourcePrefix: string;
54
+ providers: TreeseedLiveReconcileProviderReport[];
55
+ ok: boolean;
56
+ }
57
+ export interface TreeseedLiveAcceptanceScenario {
58
+ id: string;
59
+ provider: TreeseedLiveReconcileProvider;
60
+ capability: string;
61
+ desiredResources: TreeseedDesiredResource[];
62
+ selector: TreeseedReconcileSelector;
63
+ expectedActions: TreeseedCanonicalAction['kind'][];
64
+ cleanupSelector: TreeseedReconcileSelector;
65
+ required: boolean;
66
+ probeOnly?: boolean;
67
+ cleanupRequired: boolean;
68
+ }
69
+ export interface TreeseedLiveReconcileProgressEvent {
70
+ provider: TreeseedLiveReconcileProvider;
71
+ mode: TreeseedLiveReconcileMode;
72
+ environment: TreeseedLiveReconcileEnvironment;
73
+ runId: string;
74
+ resourcePrefix: string;
75
+ capability?: string;
76
+ phase: 'start' | 'cleanup' | 'create' | 'verify' | 'destroy' | 'complete' | 'blocked';
77
+ message: string;
78
+ elapsedMs?: number;
79
+ }
80
+ export interface RunTreeseedLiveReconcileTestsOptions {
81
+ cwd: string;
82
+ environment: TreeseedLiveReconcileEnvironment;
83
+ providers: TreeseedLiveReconcileProvider[];
84
+ mode?: TreeseedLiveReconcileMode;
85
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
86
+ runId?: string;
87
+ now?: Date;
88
+ fetchImpl?: typeof fetch;
89
+ onProgress?: (event: TreeseedLiveReconcileProgressEvent) => void;
90
+ }
91
+ export declare function compileTreeseedLiveAcceptanceScenarios(input: {
92
+ tenantRoot: string;
93
+ environment: TreeseedLiveReconcileEnvironment;
94
+ provider: TreeseedLiveReconcileProvider | 'all';
95
+ mode: TreeseedLiveReconcileMode;
96
+ runId: string;
97
+ }): TreeseedLiveAcceptanceScenario[];
98
+ export declare function treeseedLiveReconcileProviderCapabilities(provider: TreeseedLiveReconcileProvider): string[];
99
+ export declare function treeseedLiveReconcileResourcePrefix(environment: TreeseedLiveReconcileEnvironment, provider: TreeseedLiveReconcileProvider, runId: string): string;
100
+ export declare function runTreeseedLiveReconcileTests(options: RunTreeseedLiveReconcileTestsOptions): Promise<TreeseedLiveReconcileRunResult>;