@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
@@ -0,0 +1,177 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { basename, relative, resolve } from "node:path";
3
+ import { parse as parseYaml } from "yaml";
4
+ import { currentBranch, gitStatusPorcelain, originRemoteUrl, repoRoot } from "./workspace-save.js";
5
+ import { hasCompleteTreeseedPackageCheckout, sortWorkspacePackages, workspacePackages } from "./workspace-tools.js";
6
+ import { discoverTreeseedPackageAdapters } from "./package-adapters.js";
7
+ function readJsonFile(filePath) {
8
+ try {
9
+ return JSON.parse(readFileSync(filePath, "utf8"));
10
+ } catch {
11
+ return null;
12
+ }
13
+ }
14
+ function readStructuredFile(filePath) {
15
+ try {
16
+ const source = readFileSync(filePath, "utf8");
17
+ return filePath.endsWith(".yaml") || filePath.endsWith(".yml") ? parseYaml(source) : JSON.parse(source);
18
+ } catch {
19
+ return null;
20
+ }
21
+ }
22
+ function stringValue(value) {
23
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
24
+ }
25
+ function parseGitmodulesPaths(root) {
26
+ const gitmodulesPath = resolve(root, ".gitmodules");
27
+ if (!existsSync(gitmodulesPath)) return [];
28
+ const source = readFileSync(gitmodulesPath, "utf8");
29
+ return [...source.matchAll(/^\s*path\s*=\s*(.+?)\s*$/gmu)].map((match) => match[1].replaceAll("\\", "/").trim()).filter(Boolean);
30
+ }
31
+ function isIndependentGitRepo(repoDir) {
32
+ try {
33
+ return resolve(repoRoot(repoDir)) === resolve(repoDir);
34
+ } catch {
35
+ return false;
36
+ }
37
+ }
38
+ function branchName(repoDir) {
39
+ return currentBranch(repoDir) || null;
40
+ }
41
+ function hasOriginRemote(repoDir) {
42
+ try {
43
+ originRemoteUrl(repoDir);
44
+ return true;
45
+ } catch {
46
+ return false;
47
+ }
48
+ }
49
+ function remoteUrl(repoDir) {
50
+ try {
51
+ return originRemoteUrl(repoDir);
52
+ } catch {
53
+ return null;
54
+ }
55
+ }
56
+ function templateManifestPath(repoDir) {
57
+ for (const name of ["treeseed.template.yaml", "treeseed.template.yml", "treeseed.template.json"]) {
58
+ const candidate = resolve(repoDir, name);
59
+ if (existsSync(candidate)) return candidate;
60
+ }
61
+ return null;
62
+ }
63
+ function defaultTemplateConfigPath(repoDir) {
64
+ const candidate = resolve(repoDir, "template.config.json");
65
+ return existsSync(candidate) ? candidate : null;
66
+ }
67
+ function templateVersion(repoDir, manifest, config) {
68
+ const versionSource = stringValue(manifest?.versionSource) ?? "template.config.json";
69
+ const configured = stringValue(manifest?.version) ?? stringValue(config?.templateVersion);
70
+ if (configured) return { version: configured, versionSource };
71
+ const sourcePath = resolve(repoDir, versionSource);
72
+ const source = readJsonFile(sourcePath);
73
+ return {
74
+ version: stringValue(source?.templateVersion) ?? stringValue(source?.version),
75
+ versionSource
76
+ };
77
+ }
78
+ function readTreeseedTemplateRepositoryManifest(repoDir) {
79
+ const manifestPath = templateManifestPath(repoDir);
80
+ const configPath = defaultTemplateConfigPath(repoDir);
81
+ const manifest = manifestPath ? readStructuredFile(manifestPath) : null;
82
+ const config = configPath ? readStructuredFile(configPath) : null;
83
+ if (!manifest && !config) return null;
84
+ const id = stringValue(manifest?.id) ?? stringValue(config?.id) ?? basename(repoDir);
85
+ const release = manifest?.release && typeof manifest.release === "object" && !Array.isArray(manifest.release) ? manifest.release : {};
86
+ const verify = manifest?.verify && typeof manifest.verify === "object" && !Array.isArray(manifest.verify) ? manifest.verify : {};
87
+ const version = templateVersion(repoDir, manifest, config);
88
+ return {
89
+ id,
90
+ name: stringValue(manifest?.name) ?? stringValue(config?.displayName) ?? id,
91
+ category: stringValue(manifest?.category) ?? stringValue(config?.category) ?? "starter",
92
+ repository: stringValue(manifest?.repository) ?? remoteUrl(repoDir),
93
+ version: version.version,
94
+ versionSource: version.versionSource,
95
+ manifestPath: manifestPath ?? configPath,
96
+ verify: {
97
+ fast: stringValue(verify.fast),
98
+ local: stringValue(verify.local) ?? stringValue(config?.testing?.buildCommand),
99
+ release: stringValue(verify.release) ?? stringValue(verify.local) ?? stringValue(config?.testing?.buildCommand)
100
+ },
101
+ release: {
102
+ tagPrefix: stringValue(release.tagPrefix) ?? "template/",
103
+ recordPath: stringValue(release.recordPath) ?? `.treeseed/templates/${id}/latest-release.json`
104
+ }
105
+ };
106
+ }
107
+ function classifyManagedRepo(root, relativeDir, repoDir) {
108
+ if (relativeDir === ".") return "root";
109
+ if (/^starters\/[^/]+$/u.test(relativeDir) || readTreeseedTemplateRepositoryManifest(repoDir)) return "template";
110
+ if (/(^|\/)\.fixtures\/treeseed-fixtures$/u.test(relativeDir)) return "fixture";
111
+ if (/^packages\/[^/]+$/u.test(relativeDir)) return "package";
112
+ return "project";
113
+ }
114
+ function addRecursiveSubmodules(root, relativeDir, repoDir, repos) {
115
+ for (const submodulePath of parseGitmodulesPaths(repoDir)) {
116
+ const childDir = resolve(repoDir, submodulePath);
117
+ const childRelativeDir = relative(root, childDir).replaceAll("\\", "/") || ".";
118
+ if (!existsSync(childDir) || !isIndependentGitRepo(childDir)) continue;
119
+ if (!repos.has(childRelativeDir)) {
120
+ repos.set(childRelativeDir, childDir);
121
+ }
122
+ addRecursiveSubmodules(root, childRelativeDir, childDir, repos);
123
+ }
124
+ }
125
+ function discoverTreeseedManagedRepositories(root) {
126
+ const gitRoot = repoRoot(root);
127
+ const repos = /* @__PURE__ */ new Map();
128
+ repos.set(".", gitRoot);
129
+ if (hasCompleteTreeseedPackageCheckout(root)) {
130
+ for (const pkg of workspacePackages(root).filter((pkg2) => pkg2.name?.startsWith("@treeseed/"))) {
131
+ if (existsSync(resolve(pkg.dir, ".git")) && isIndependentGitRepo(pkg.dir)) {
132
+ repos.set(pkg.relativeDir, pkg.dir);
133
+ }
134
+ }
135
+ }
136
+ for (const adapter of discoverTreeseedPackageAdapters(root)) {
137
+ if (existsSync(resolve(adapter.dir, ".git")) && isIndependentGitRepo(adapter.dir)) {
138
+ repos.set(adapter.relativeDir, adapter.dir);
139
+ }
140
+ }
141
+ addRecursiveSubmodules(root, ".", gitRoot, repos);
142
+ return [...repos.entries()].map(([relativeDir, dir]) => {
143
+ const kind = classifyManagedRepo(root, relativeDir, dir);
144
+ const templateManifest = kind === "template" ? readTreeseedTemplateRepositoryManifest(dir) : null;
145
+ const name = kind === "root" ? "@treeseed/market" : kind === "template" ? `template:${templateManifest?.id ?? basename(dir)}` : kind === "fixture" ? `fixture:${relativeDir}` : readJsonFile(resolve(dir, "package.json"))?.name ?? basename(dir);
146
+ const branch = branchName(dir);
147
+ return {
148
+ id: relativeDir,
149
+ name,
150
+ kind,
151
+ dir,
152
+ relativeDir,
153
+ branchName: branch,
154
+ dirty: gitStatusPorcelain(dir).length > 0,
155
+ detached: branch == null,
156
+ hasOriginRemote: hasOriginRemote(dir),
157
+ remoteUrl: remoteUrl(dir),
158
+ templateManifest
159
+ };
160
+ }).sort((left, right) => sortWorkspacePackages([
161
+ { name: left.name, dir: left.dir, relativeDir: left.relativeDir, packageJson: {} },
162
+ { name: right.name, dir: right.dir, relativeDir: right.relativeDir, packageJson: {} }
163
+ ])[0]?.name === left.name ? -1 : 1);
164
+ }
165
+ function checkedOutManagedWorkflowRepos(root) {
166
+ return discoverTreeseedManagedRepositories(root).filter((repo) => repo.kind !== "root");
167
+ }
168
+ function checkedOutTemplateRepositories(root) {
169
+ return discoverTreeseedManagedRepositories(root).filter((repo) => repo.kind === "template" && repo.templateManifest);
170
+ }
171
+ export {
172
+ checkedOutManagedWorkflowRepos,
173
+ checkedOutTemplateRepositories,
174
+ discoverTreeseedManagedRepositories,
175
+ parseGitmodulesPaths,
176
+ readTreeseedTemplateRepositoryManifest
177
+ };
@@ -0,0 +1,31 @@
1
+ export type TreeseedOperationsRunnerSmokeEnvironment = 'local' | 'staging' | 'prod';
2
+ export interface TreeseedOperationsRunnerSmokeReport {
3
+ environment: TreeseedOperationsRunnerSmokeEnvironment;
4
+ ok: boolean;
5
+ baseUrl: string;
6
+ operationId?: string;
7
+ finalStatus?: string;
8
+ runnerId?: string | null;
9
+ timings: Array<{
10
+ phase: string;
11
+ durationMs: number;
12
+ }>;
13
+ events: Array<{
14
+ kind: string;
15
+ createdAt: string;
16
+ }>;
17
+ issues: string[];
18
+ remediation?: string;
19
+ }
20
+ export interface TreeseedOperationsRunnerSmokeOptions {
21
+ tenantRoot: string;
22
+ environment: TreeseedOperationsRunnerSmokeEnvironment;
23
+ baseUrl?: string | null;
24
+ serviceId?: string | null;
25
+ serviceSecret?: string | null;
26
+ timeoutMs?: number;
27
+ pollMs?: number;
28
+ fetchImpl?: typeof fetch;
29
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
30
+ }
31
+ export declare function runTreeseedOperationsRunnerSmoke(options: TreeseedOperationsRunnerSmokeOptions): Promise<TreeseedOperationsRunnerSmokeReport>;
@@ -0,0 +1,198 @@
1
+ import { existsSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { loadTreeseedDeployConfigFromPath } from "../../platform/deploy-config.js";
4
+ import { resolveTreeseedMachineEnvironmentValues } from "./config-runtime.js";
5
+ function sleep(ms) {
6
+ return new Promise((resolve2) => setTimeout(resolve2, ms));
7
+ }
8
+ function normalizedBaseUrl(value2) {
9
+ return value2.trim().replace(/\/+$/u, "");
10
+ }
11
+ function value(name, values, env) {
12
+ const candidate = env[name] ?? values[name];
13
+ return typeof candidate === "string" && candidate.trim() ? candidate.trim() : null;
14
+ }
15
+ function envValue(name, env) {
16
+ const candidate = env[name];
17
+ return typeof candidate === "string" && candidate.trim() ? candidate.trim() : null;
18
+ }
19
+ function manifestApiBaseUrl(tenantRoot, environment) {
20
+ const candidates = [
21
+ resolve(tenantRoot, "treeseed.site.yaml"),
22
+ resolve(tenantRoot, "..", "..", "treeseed.site.yaml")
23
+ ];
24
+ for (const candidate of candidates) {
25
+ if (!existsSync(candidate)) continue;
26
+ try {
27
+ const config = loadTreeseedDeployConfigFromPath(candidate);
28
+ const connectionUrl = config.connections?.api?.environments?.[environment]?.baseUrl;
29
+ const serviceUrl = config.services?.api?.environments?.[environment]?.baseUrl;
30
+ const baseUrl = connectionUrl ?? serviceUrl;
31
+ if (typeof baseUrl === "string" && baseUrl.trim()) {
32
+ return baseUrl.trim();
33
+ }
34
+ } catch {
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ function defaultBaseUrl(environment) {
40
+ if (environment === "local") return "http://127.0.0.1:3000";
41
+ return environment === "prod" ? "https://api.treeseed.dev" : "https://api.preview.treeseed.dev";
42
+ }
43
+ function localManagedDevServiceSecret(environment) {
44
+ return environment === "local" ? "treeseed-web-service-dev-secret" : null;
45
+ }
46
+ async function timed(timings, phase, action) {
47
+ const started = Date.now();
48
+ try {
49
+ return await action();
50
+ } finally {
51
+ timings.push({ phase, durationMs: Date.now() - started });
52
+ }
53
+ }
54
+ async function requestJson(fetchImpl, url, options = {}) {
55
+ const response = await fetchImpl(url, {
56
+ ...options,
57
+ headers: {
58
+ accept: "application/json",
59
+ ...options.body ? { "content-type": "application/json" } : {},
60
+ ...options.headers ?? {}
61
+ }
62
+ });
63
+ const text = await response.text();
64
+ const payload = text ? JSON.parse(text) : {};
65
+ if (!response.ok) {
66
+ const message = typeof payload?.error === "string" ? payload.error : typeof payload?.error?.message === "string" ? payload.error.message : typeof payload?.message === "string" ? payload.message : `HTTP ${response.status}`;
67
+ throw new Error(`${options.method ?? "GET"} ${url} failed: ${message}`);
68
+ }
69
+ return payload;
70
+ }
71
+ function operationFrom(payload) {
72
+ return payload?.operation ?? payload?.payload?.operation ?? null;
73
+ }
74
+ function eventsFrom(payload) {
75
+ const events = Array.isArray(payload?.events) ? payload.events : Array.isArray(payload?.payload?.events) ? payload.payload.events : [];
76
+ return events.map((event) => ({
77
+ kind: String(event?.kind ?? "unknown"),
78
+ createdAt: String(event?.createdAt ?? event?.created_at ?? "")
79
+ }));
80
+ }
81
+ function isSuccessfulOperationStatus(status) {
82
+ return ["completed", "succeeded"].includes(String(status ?? "").toLowerCase());
83
+ }
84
+ function remediationFor(environment) {
85
+ if (environment === "local") {
86
+ return "Verify managed local dev is running with `npx trsd dev start --web-runtime local --json`, then check API and runner readiness with `npx trsd dev status --json`.";
87
+ }
88
+ return "Verify the API service, Treeseed database, and operationsRunner Railway service, then run `npx trsd hosting verify --service operationsRunner --live --json`.";
89
+ }
90
+ function failure(baseUrl, environment, issues, timings, extra = {}) {
91
+ return {
92
+ environment,
93
+ ok: false,
94
+ baseUrl,
95
+ timings,
96
+ events: [],
97
+ issues,
98
+ remediation: remediationFor(environment),
99
+ ...extra
100
+ };
101
+ }
102
+ async function runTreeseedOperationsRunnerSmoke(options) {
103
+ const env = options.env ?? process.env;
104
+ let values = {};
105
+ try {
106
+ values = resolveTreeseedMachineEnvironmentValues(options.tenantRoot, options.environment);
107
+ } catch {
108
+ values = {};
109
+ }
110
+ const baseUrl = normalizedBaseUrl(
111
+ options.baseUrl ?? manifestApiBaseUrl(options.tenantRoot, options.environment) ?? value("TREESEED_API_BASE_URL", values, env) ?? value("TREESEED_CENTRAL_MARKET_API_BASE_URL", values, env) ?? defaultBaseUrl(options.environment)
112
+ );
113
+ const serviceId = options.serviceId ?? value("TREESEED_ACCEPTANCE_SERVICE_ID", values, env) ?? value("TREESEED_WEB_SERVICE_ID", values, env) ?? value("TREESEED_API_WEB_SERVICE_ID", values, env) ?? "web";
114
+ const localServiceSecret = options.environment === "local" ? envValue("TREESEED_ACCEPTANCE_SERVICE_SECRET", env) ?? envValue("TREESEED_WEB_SERVICE_SECRET", env) ?? envValue("TREESEED_API_WEB_SERVICE_SECRET", env) ?? localManagedDevServiceSecret(options.environment) : null;
115
+ const serviceSecret = options.serviceSecret ?? localServiceSecret ?? value("TREESEED_ACCEPTANCE_SERVICE_SECRET", values, env) ?? value("TREESEED_WEB_SERVICE_SECRET", values, env) ?? value("TREESEED_API_WEB_SERVICE_SECRET", values, env);
116
+ const timings = [];
117
+ const fetchImpl = options.fetchImpl ?? fetch;
118
+ const timeoutMs = Math.max(1e3, Math.floor(options.timeoutMs ?? (options.environment === "prod" ? 12e4 : 9e4)));
119
+ const pollMs = Math.max(1e3, Math.floor(options.pollMs ?? 3e3));
120
+ if (!serviceSecret) {
121
+ return failure(baseUrl, options.environment, ["Missing API service credential for runner smoke."], timings);
122
+ }
123
+ const headers = {
124
+ "x-treeseed-service-id": serviceId,
125
+ "x-treeseed-service-secret": serviceSecret
126
+ };
127
+ try {
128
+ await timed(timings, "healthz", () => requestJson(fetchImpl, `${baseUrl}/healthz`));
129
+ await timed(timings, "healthz-deep", () => requestJson(fetchImpl, `${baseUrl}/healthz/deep`));
130
+ const idempotencyKey = `smoke:${options.environment}:${Date.now()}`;
131
+ const created = await timed(timings, "operation-create", () => requestJson(fetchImpl, `${baseUrl}/v1/platform/operations`, {
132
+ method: "POST",
133
+ headers,
134
+ body: JSON.stringify({
135
+ namespace: "market",
136
+ operation: "diagnostic",
137
+ target: "market_operations_runner",
138
+ idempotencyKey,
139
+ input: {
140
+ source: "trsd.operations.smoke",
141
+ environment: options.environment
142
+ }
143
+ })
144
+ }));
145
+ const operation = operationFrom(created);
146
+ const operationId = typeof operation?.id === "string" ? operation.id : null;
147
+ if (!operationId) {
148
+ return failure(baseUrl, options.environment, ["API did not return a diagnostic operation id."], timings);
149
+ }
150
+ const deadline = Date.now() + timeoutMs;
151
+ let current = operation;
152
+ while (Date.now() < deadline) {
153
+ current = operationFrom(await timed(timings, "operation-poll", () => requestJson(fetchImpl, `${baseUrl}/v1/platform/operations/${encodeURIComponent(operationId)}`, { headers }))) ?? current;
154
+ if (isSuccessfulOperationStatus(current?.status)) {
155
+ const eventPayload = await timed(timings, "operation-events", () => requestJson(fetchImpl, `${baseUrl}/v1/platform/operations/${encodeURIComponent(operationId)}/events`, { headers }));
156
+ const events = eventsFrom(eventPayload);
157
+ const sawRunnerEvent = events.some((event) => /checkpoint|complete|runner|market\.noop/iu.test(event.kind));
158
+ if (!sawRunnerEvent) {
159
+ return failure(baseUrl, options.environment, ["Diagnostic operation completed but no runner checkpoint/completion event was recorded."], timings, {
160
+ operationId,
161
+ finalStatus: String(current?.status ?? "completed"),
162
+ runnerId: current?.assignedRunnerId ?? null,
163
+ events
164
+ });
165
+ }
166
+ return {
167
+ environment: options.environment,
168
+ ok: true,
169
+ baseUrl,
170
+ operationId,
171
+ finalStatus: String(current?.status ?? "completed"),
172
+ runnerId: current?.assignedRunnerId ?? null,
173
+ timings,
174
+ events,
175
+ issues: []
176
+ };
177
+ }
178
+ if (["failed", "cancelled", "timed_out"].includes(String(current?.status ?? ""))) {
179
+ return failure(baseUrl, options.environment, [`Diagnostic operation ended with status ${current.status}.`], timings, {
180
+ operationId,
181
+ finalStatus: current.status,
182
+ runnerId: current?.assignedRunnerId ?? null
183
+ });
184
+ }
185
+ await sleep(pollMs);
186
+ }
187
+ return failure(baseUrl, options.environment, [`Diagnostic operation was not completed within ${timeoutMs}ms.`], timings, {
188
+ operationId,
189
+ finalStatus: current?.status ?? "unknown",
190
+ runnerId: current?.assignedRunnerId ?? null
191
+ });
192
+ } catch (error) {
193
+ return failure(baseUrl, options.environment, [error instanceof Error ? error.message : String(error)], timings);
194
+ }
195
+ }
196
+ export {
197
+ runTreeseedOperationsRunnerSmoke
198
+ };
@@ -0,0 +1,170 @@
1
+ import type { SeedProjectResource } from '../../seeds/types.js';
2
+ export type TreeseedPackageKind = 'node-typescript' | 'beam-elixir-rust';
3
+ export type TreeseedPackageCommand = {
4
+ label: string;
5
+ command: string;
6
+ args: string[];
7
+ cwd: string;
8
+ };
9
+ export type TreeseedPackageAdapter = {
10
+ id: string;
11
+ name: string;
12
+ kind: TreeseedPackageKind;
13
+ dir: string;
14
+ relativeDir: string;
15
+ version: string | null;
16
+ publishTarget: string | null;
17
+ manifestPath: string | null;
18
+ versionSource: string | null;
19
+ verifyCommands: {
20
+ fast: TreeseedPackageCommand | null;
21
+ local: TreeseedPackageCommand | null;
22
+ release: TreeseedPackageCommand | null;
23
+ };
24
+ artifacts: Array<{
25
+ provider: 'npm' | 'docker';
26
+ name: string;
27
+ tags?: string[];
28
+ dockerfile?: string | null;
29
+ context?: string | null;
30
+ target?: string | null;
31
+ role?: string | null;
32
+ architectures?: string[];
33
+ }>;
34
+ releaseChecks: Array<{
35
+ kind: 'npm-pack-dry-run' | 'github-workflow' | 'docker-manifest';
36
+ name: string;
37
+ detail: string;
38
+ }>;
39
+ metadata: Record<string, unknown>;
40
+ };
41
+ export type TreeseedPackageManifestValidation = {
42
+ packageId: string;
43
+ path: string;
44
+ manifestPath: string | null;
45
+ ok: boolean;
46
+ errors: string[];
47
+ warnings: string[];
48
+ };
49
+ export type TreeseedPackageDevelopmentImagePlan = {
50
+ package: {
51
+ id: string;
52
+ name: string;
53
+ path: string;
54
+ kind: TreeseedPackageKind;
55
+ version: string | null;
56
+ publishTarget: string | null;
57
+ metadata: Record<string, unknown>;
58
+ };
59
+ repository: string;
60
+ workflow: string;
61
+ branch: string;
62
+ refs: {
63
+ imageName: string;
64
+ branch: string;
65
+ branchSlug: string;
66
+ sha: string;
67
+ shortSha: string;
68
+ immutableTag: string | null;
69
+ movingTag: string | null;
70
+ imageRef: string | null;
71
+ movingImageRef: string | null;
72
+ archImageRefs: string[];
73
+ roleImages?: Array<{
74
+ role: string;
75
+ imageName: string;
76
+ target: string | null;
77
+ immutableRef: string | null;
78
+ movingRef: string | null;
79
+ archImageRefs: string[];
80
+ }>;
81
+ };
82
+ hosting: {
83
+ app: string;
84
+ environment: string;
85
+ overrideEnvVar: string;
86
+ override: Record<string, string>;
87
+ command: string;
88
+ } | null;
89
+ deploymentSource: {
90
+ environment: string;
91
+ mode: 'git' | 'image';
92
+ repository: string;
93
+ commitSha: string;
94
+ imagePublicationRequired: boolean;
95
+ };
96
+ };
97
+ export type TreeseedPackageImageWorkflowOptions = {
98
+ root?: string;
99
+ packageId: string;
100
+ branch?: string | null;
101
+ workflow?: string | null;
102
+ execute?: boolean;
103
+ syncConfig?: boolean;
104
+ env?: NodeJS.ProcessEnv;
105
+ };
106
+ export type TreeseedPackageWorkflowTemplateKind = 'npm-publish' | 'docker-image' | 'release-gate';
107
+ export type TreeseedPackageWorkflowSyncResult = {
108
+ packageId: string;
109
+ path: string;
110
+ workflow: string;
111
+ template: TreeseedPackageWorkflowTemplateKind;
112
+ exists: boolean;
113
+ changed: boolean;
114
+ written: boolean;
115
+ };
116
+ export declare function readMixProjectVersion(filePath: string): string | null;
117
+ export declare function planTreeseedPackageDevelopmentImage(root: any, idOrName: string, { branch }?: {
118
+ branch?: string | null;
119
+ }): TreeseedPackageDevelopmentImagePlan;
120
+ export declare function discoverTreeseedPackageAdapters(root?: any): TreeseedPackageAdapter[];
121
+ export declare function findTreeseedPackageAdapter(root: string, idOrName: string): TreeseedPackageAdapter | null;
122
+ export declare function packageAdapterPlanSummary(root?: any): {
123
+ id: string;
124
+ name: string;
125
+ kind: TreeseedPackageKind;
126
+ path: string;
127
+ version: string | null;
128
+ publishTarget: string | null;
129
+ verify: {
130
+ [k: string]: string | null;
131
+ };
132
+ artifacts: {
133
+ provider: "npm" | "docker";
134
+ name: string;
135
+ tags?: string[];
136
+ dockerfile?: string | null;
137
+ context?: string | null;
138
+ target?: string | null;
139
+ role?: string | null;
140
+ architectures?: string[];
141
+ }[];
142
+ releaseChecks: {
143
+ kind: "npm-pack-dry-run" | "github-workflow" | "docker-manifest";
144
+ name: string;
145
+ detail: string;
146
+ }[];
147
+ metadata: Record<string, unknown>;
148
+ }[];
149
+ export declare function runTreeseedPackageImageWorkflow(options: TreeseedPackageImageWorkflowOptions): Promise<{
150
+ imagePlan: TreeseedPackageDevelopmentImagePlan;
151
+ selectedWorkflow: string;
152
+ dockerHub: {
153
+ usernameConfigured: boolean;
154
+ tokenConfigured: boolean;
155
+ requiredSecrets: string[];
156
+ requiredVariables: string[];
157
+ };
158
+ credential: import("./github-credentials.js").TreeseedGitHubCredentialResolution;
159
+ report: Record<string, unknown>;
160
+ }>;
161
+ export declare function validateTreeseedPackageManifests(root?: any): TreeseedPackageManifestValidation[];
162
+ export declare function deriveTreeseedPackageProjectResources(root?: any, options?: {
163
+ team?: string;
164
+ }): SeedProjectResource[];
165
+ export declare function renderTreeseedPackageWorkflow(adapter: TreeseedPackageAdapter, template: TreeseedPackageWorkflowTemplateKind): string;
166
+ export declare function syncTreeseedPackageWorkflows({ root, packageId, execute, }?: {
167
+ root?: string;
168
+ packageId?: string | null;
169
+ execute?: boolean;
170
+ }): TreeseedPackageWorkflowSyncResult[];