@treeseed/sdk 0.11.0 → 0.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/README.md +9 -4
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +117 -60
  27. package/dist/capacity-provider.js +215 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +2 -2
  36. package/dist/copilot.d.ts +3 -0
  37. package/dist/copilot.js +16 -1
  38. package/dist/d1-http.d.ts +1 -1
  39. package/dist/d1-store.d.ts +32 -57
  40. package/dist/d1-store.js +115 -318
  41. package/dist/db/d1.d.ts +1 -232
  42. package/dist/db/index.d.ts +3 -3
  43. package/dist/db/market-schema.d.ts +49037 -11843
  44. package/dist/db/market-schema.js +1788 -50
  45. package/dist/db/node-sqlite.d.ts +1 -232
  46. package/dist/db/schema.d.ts +0 -462
  47. package/dist/db/schema.js +2 -22
  48. package/dist/dispatch.d.ts +1 -1
  49. package/dist/dispatch.js +0 -11
  50. package/dist/fixture-support.js +52 -4
  51. package/dist/governance.d.ts +133 -0
  52. package/dist/governance.js +285 -0
  53. package/dist/graph/build.d.ts +2 -2
  54. package/dist/graph/context-query-contracts.d.ts +1 -1
  55. package/dist/graph/dsl.d.ts +1 -1
  56. package/dist/graph/query.d.ts +4 -4
  57. package/dist/graph/ranking.d.ts +1 -1
  58. package/dist/graph/schema.d.ts +1 -1
  59. package/dist/graph.d.ts +11 -11
  60. package/dist/guarantees/index.d.ts +425 -0
  61. package/dist/guarantees/index.js +1146 -0
  62. package/dist/hosting/apps.d.ts +1 -1
  63. package/dist/hosting/builtins.d.ts +1 -1
  64. package/dist/hosting/builtins.js +9 -198
  65. package/dist/hosting/contracts.d.ts +3 -2
  66. package/dist/hosting/graph.d.ts +24 -21
  67. package/dist/hosting/graph.js +280 -294
  68. package/dist/hosting/index.d.ts +4 -4
  69. package/dist/index.d.ts +88 -74
  70. package/dist/index.js +81 -10
  71. package/dist/local-dev/managed-dev.d.ts +85 -0
  72. package/dist/local-dev/managed-dev.js +368 -0
  73. package/dist/managed-dependencies.d.ts +9 -0
  74. package/dist/managed-dependencies.js +10 -8
  75. package/dist/market-client.d.ts +265 -7
  76. package/dist/market-client.js +381 -9
  77. package/dist/model-registry.d.ts +1 -1
  78. package/dist/model-registry.js +19 -19
  79. package/dist/operations/agent-tools.d.ts +2 -11
  80. package/dist/operations/agent-tools.js +2 -14
  81. package/dist/operations/providers/default.d.ts +1 -1
  82. package/dist/operations/providers/default.js +20 -37
  83. package/dist/operations/repository-operations.d.ts +26 -2
  84. package/dist/operations/repository-operations.js +159 -1
  85. package/dist/operations/runtime.d.ts +3 -3
  86. package/dist/operations/services/bootstrap-runner.d.ts +1 -1
  87. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  88. package/dist/operations/services/build-warning-policy.js +81 -82
  89. package/dist/operations/services/commit-message-provider.js +4 -4
  90. package/dist/operations/services/config-runtime.d.ts +73 -19
  91. package/dist/operations/services/config-runtime.js +276 -100
  92. package/dist/operations/services/deploy.d.ts +41 -622
  93. package/dist/operations/services/deploy.js +181 -213
  94. package/dist/operations/services/deployment-readiness.d.ts +1 -1
  95. package/dist/operations/services/deployment-readiness.js +38 -7
  96. package/dist/operations/services/git-remote-policy.js +12 -4
  97. package/dist/operations/services/git-runner.d.ts +66 -0
  98. package/dist/operations/services/git-runner.js +479 -0
  99. package/dist/operations/services/git-workflow.d.ts +43 -5
  100. package/dist/operations/services/git-workflow.js +242 -20
  101. package/dist/operations/services/github-actions-verification.d.ts +3 -1
  102. package/dist/operations/services/github-actions-verification.js +11 -3
  103. package/dist/operations/services/github-api.js +21 -5
  104. package/dist/operations/services/github-automation.d.ts +3 -3
  105. package/dist/operations/services/github-automation.js +15 -18
  106. package/dist/operations/services/github-credentials.js +2 -1
  107. package/dist/operations/services/hosted-service-checks.d.ts +19 -1
  108. package/dist/operations/services/hosted-service-checks.js +162 -11
  109. package/dist/operations/services/hosting-audit.d.ts +2 -2
  110. package/dist/operations/services/hosting-audit.js +7 -7
  111. package/dist/operations/services/hub-launch.d.ts +1 -1
  112. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  113. package/dist/operations/services/hub-provider-launch.js +19 -14
  114. package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
  115. package/dist/operations/services/live-hosted-service-checks.js +193 -80
  116. package/dist/operations/services/local-dev.js +0 -1
  117. package/dist/operations/services/managed-host-security.d.ts +1 -1
  118. package/dist/operations/services/managed-repositories.d.ts +37 -0
  119. package/dist/operations/services/managed-repositories.js +177 -0
  120. package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
  121. package/dist/operations/services/operations-runner-smoke.js +22 -4
  122. package/dist/operations/services/package-adapters.d.ts +77 -2
  123. package/dist/operations/services/package-adapters.js +629 -56
  124. package/dist/operations/services/package-reference-policy.d.ts +12 -88
  125. package/dist/operations/services/package-reference-policy.js +81 -213
  126. package/dist/operations/services/project-host-operations.d.ts +4 -4
  127. package/dist/operations/services/project-platform.d.ts +19 -193
  128. package/dist/operations/services/project-platform.js +31 -103
  129. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  130. package/dist/operations/services/project-web-monitor.js +97 -2
  131. package/dist/operations/services/railway-api.d.ts +36 -7
  132. package/dist/operations/services/railway-api.js +331 -100
  133. package/dist/operations/services/railway-deploy.d.ts +7 -95
  134. package/dist/operations/services/railway-deploy.js +334 -742
  135. package/dist/operations/services/release-history.js +3 -4
  136. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  137. package/dist/operations/services/release-proof-ledger.js +81 -0
  138. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  139. package/dist/operations/services/release-proof-planner.js +195 -0
  140. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  141. package/dist/operations/services/release-proof-runner.js +169 -0
  142. package/dist/operations/services/release-proof.d.ts +81 -0
  143. package/dist/operations/services/release-proof.js +79 -0
  144. package/dist/operations/services/repository-save-orchestrator.d.ts +6 -7
  145. package/dist/operations/services/repository-save-orchestrator.js +353 -174
  146. package/dist/operations/services/runtime-paths.d.ts +1 -3
  147. package/dist/operations/services/runtime-paths.js +0 -4
  148. package/dist/operations/services/runtime-tools.d.ts +1 -192
  149. package/dist/operations/services/runtime-tools.js +4 -444
  150. package/dist/operations/services/save-deploy-preflight.js +9 -1
  151. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  152. package/dist/operations/services/template-host-bindings.js +3 -2
  153. package/dist/operations/services/template-registry.d.ts +6 -6
  154. package/dist/operations/services/template-registry.js +33 -14
  155. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  156. package/dist/operations/services/workflow-timing.d.ts +25 -0
  157. package/dist/operations/services/workflow-timing.js +79 -0
  158. package/dist/operations/services/workspace-dependency-mode.js +41 -4
  159. package/dist/operations/services/workspace-preflight.js +8 -8
  160. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  161. package/dist/operations/services/workspace-save.d.ts +1 -0
  162. package/dist/operations/services/workspace-save.js +41 -18
  163. package/dist/operations/services/workspace-tools.js +40 -6
  164. package/dist/operations-registry.d.ts +1 -1
  165. package/dist/operations-registry.js +5 -6
  166. package/dist/operations-types.d.ts +1 -1
  167. package/dist/operations.d.ts +17 -11
  168. package/dist/operations.js +57 -3
  169. package/dist/platform/book-export.js +2 -0
  170. package/dist/platform/books-data.d.ts +1 -1
  171. package/dist/platform/config.d.ts +27 -0
  172. package/dist/platform/config.js +100 -0
  173. package/dist/platform/content-runtime-source.d.ts +54 -0
  174. package/dist/platform/content-runtime-source.js +169 -0
  175. package/dist/platform/contracts.d.ts +6 -1
  176. package/dist/platform/deploy-config.d.ts +1 -1
  177. package/dist/platform/deploy-config.js +7 -1
  178. package/dist/platform/deploy-runtime.d.ts +1 -1
  179. package/dist/platform/desired-state.d.ts +66 -0
  180. package/dist/platform/desired-state.js +1052 -0
  181. package/dist/platform/env.yaml +414 -19
  182. package/dist/platform/environment.d.ts +2 -2
  183. package/dist/platform/environment.js +54 -22
  184. package/dist/platform/local-content-materialization.d.ts +9 -0
  185. package/dist/platform/local-content-materialization.js +212 -0
  186. package/dist/platform/plugin.d.ts +5 -5
  187. package/dist/platform/plugins/runtime.d.ts +3 -3
  188. package/dist/platform/plugins/runtime.js +62 -1
  189. package/dist/platform/plugins.d.ts +6 -6
  190. package/dist/platform/published-content-pipeline.d.ts +3 -3
  191. package/dist/platform/published-content-pipeline.js +5 -1
  192. package/dist/platform/published-content.d.ts +4 -3
  193. package/dist/platform/site-config-schema.d.ts +1 -0
  194. package/dist/platform/site-config-schema.js +4 -1
  195. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  196. package/dist/platform/tenant-config.d.ts +1 -1
  197. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  198. package/dist/platform/utils/site-config-schema.js +400 -461
  199. package/dist/platform-operation-store.d.ts +1 -1
  200. package/dist/plugin-default.d.ts +1 -1
  201. package/dist/plugin-default.js +27 -12
  202. package/dist/project-import.d.ts +91 -0
  203. package/dist/project-import.js +257 -0
  204. package/dist/project-workflow.d.ts +1 -1
  205. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  206. package/dist/reconcile/bootstrap-systems.js +3 -3
  207. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  208. package/dist/reconcile/builtin-adapters.js +2924 -346
  209. package/dist/reconcile/contracts.d.ts +15 -2
  210. package/dist/reconcile/desired-state.d.ts +2 -193
  211. package/dist/reconcile/desired-state.js +24 -33
  212. package/dist/reconcile/engine.d.ts +60 -397
  213. package/dist/reconcile/engine.js +182 -18
  214. package/dist/reconcile/index.d.ts +10 -10
  215. package/dist/reconcile/live-acceptance.d.ts +22 -1
  216. package/dist/reconcile/live-acceptance.js +456 -44
  217. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  218. package/dist/reconcile/providers/docker-private.js +101 -0
  219. package/dist/reconcile/providers/github-private.d.ts +65 -0
  220. package/dist/reconcile/providers/github-private.js +119 -0
  221. package/dist/reconcile/providers/local-private.d.ts +28 -0
  222. package/dist/reconcile/providers/local-private.js +75 -0
  223. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  224. package/dist/reconcile/providers/railway-iac.js +275 -0
  225. package/dist/reconcile/providers/release-private.d.ts +92 -0
  226. package/dist/reconcile/providers/release-private.js +152 -0
  227. package/dist/reconcile/registry.d.ts +2 -2
  228. package/dist/reconcile/registry.js +16 -1
  229. package/dist/reconcile/state.d.ts +1 -1
  230. package/dist/reconcile/state.js +3 -40
  231. package/dist/reconcile/units.d.ts +1 -1
  232. package/dist/reconcile/units.js +7 -1
  233. package/dist/remote.d.ts +6 -6
  234. package/dist/scenes/artifacts.d.ts +16 -0
  235. package/dist/scenes/artifacts.js +61 -0
  236. package/dist/scenes/auth.d.ts +2 -0
  237. package/dist/scenes/auth.js +28 -0
  238. package/dist/scenes/base-url.d.ts +12 -0
  239. package/dist/scenes/base-url.js +123 -0
  240. package/dist/scenes/builtin-plugins.d.ts +2 -0
  241. package/dist/scenes/builtin-plugins.js +447 -0
  242. package/dist/scenes/checkpoints.d.ts +14 -0
  243. package/dist/scenes/checkpoints.js +33 -0
  244. package/dist/scenes/device-matrix.d.ts +2 -0
  245. package/dist/scenes/device-matrix.js +97 -0
  246. package/dist/scenes/devices.d.ts +11 -0
  247. package/dist/scenes/devices.js +22 -0
  248. package/dist/scenes/diagnostics.d.ts +5 -0
  249. package/dist/scenes/diagnostics.js +22 -0
  250. package/dist/scenes/diagram-providers.d.ts +2 -0
  251. package/dist/scenes/diagram-providers.js +181 -0
  252. package/dist/scenes/diagram-validation.d.ts +22 -0
  253. package/dist/scenes/diagram-validation.js +74 -0
  254. package/dist/scenes/environment.d.ts +2 -0
  255. package/dist/scenes/environment.js +65 -0
  256. package/dist/scenes/evidence-bundle.d.ts +5 -0
  257. package/dist/scenes/evidence-bundle.js +42 -0
  258. package/dist/scenes/evidence-report.d.ts +10 -0
  259. package/dist/scenes/evidence-report.js +73 -0
  260. package/dist/scenes/evidence.d.ts +16 -0
  261. package/dist/scenes/evidence.js +277 -0
  262. package/dist/scenes/index.d.ts +48 -0
  263. package/dist/scenes/index.js +312 -0
  264. package/dist/scenes/inspect.d.ts +9 -0
  265. package/dist/scenes/inspect.js +64 -0
  266. package/dist/scenes/loader.d.ts +3 -0
  267. package/dist/scenes/loader.js +38 -0
  268. package/dist/scenes/logs.d.ts +2 -0
  269. package/dist/scenes/logs.js +47 -0
  270. package/dist/scenes/operations.d.ts +3 -0
  271. package/dist/scenes/operations.js +128 -0
  272. package/dist/scenes/phase0.d.ts +9 -0
  273. package/dist/scenes/phase0.js +637 -0
  274. package/dist/scenes/planner.d.ts +12 -0
  275. package/dist/scenes/planner.js +166 -0
  276. package/dist/scenes/playwright-adapter.d.ts +2 -0
  277. package/dist/scenes/playwright-adapter.js +63 -0
  278. package/dist/scenes/plugins.d.ts +5 -0
  279. package/dist/scenes/plugins.js +115 -0
  280. package/dist/scenes/progress.d.ts +17 -0
  281. package/dist/scenes/progress.js +24 -0
  282. package/dist/scenes/publish-destinations.d.ts +12 -0
  283. package/dist/scenes/publish-destinations.js +99 -0
  284. package/dist/scenes/publish-plan-report.d.ts +10 -0
  285. package/dist/scenes/publish-plan-report.js +70 -0
  286. package/dist/scenes/publish-plan.d.ts +15 -0
  287. package/dist/scenes/publish-plan.js +248 -0
  288. package/dist/scenes/publish-redaction.d.ts +16 -0
  289. package/dist/scenes/publish-redaction.js +148 -0
  290. package/dist/scenes/publish-release-record.d.ts +13 -0
  291. package/dist/scenes/publish-release-record.js +34 -0
  292. package/dist/scenes/publish-report.d.ts +10 -0
  293. package/dist/scenes/publish-report.js +67 -0
  294. package/dist/scenes/publish.d.ts +16 -0
  295. package/dist/scenes/publish.js +298 -0
  296. package/dist/scenes/registry.d.ts +12 -0
  297. package/dist/scenes/registry.js +65 -0
  298. package/dist/scenes/remotion-adapter.d.ts +3 -0
  299. package/dist/scenes/remotion-adapter.js +94 -0
  300. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  301. package/dist/scenes/remotion-composition-registry.js +12 -0
  302. package/dist/scenes/remotion-compositions.d.ts +15 -0
  303. package/dist/scenes/remotion-compositions.js +464 -0
  304. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  305. package/dist/scenes/remotion-diagrams.js +188 -0
  306. package/dist/scenes/remotion-input.d.ts +13 -0
  307. package/dist/scenes/remotion-input.js +291 -0
  308. package/dist/scenes/remotion-visuals.d.ts +29 -0
  309. package/dist/scenes/remotion-visuals.js +198 -0
  310. package/dist/scenes/render-media-assets.d.ts +9 -0
  311. package/dist/scenes/render-media-assets.js +117 -0
  312. package/dist/scenes/render-report.d.ts +10 -0
  313. package/dist/scenes/render-report.js +27 -0
  314. package/dist/scenes/render.d.ts +2 -0
  315. package/dist/scenes/render.js +218 -0
  316. package/dist/scenes/reporter.d.ts +3 -0
  317. package/dist/scenes/reporter.js +101 -0
  318. package/dist/scenes/resume.d.ts +2 -0
  319. package/dist/scenes/resume.js +79 -0
  320. package/dist/scenes/runner.d.ts +2 -0
  321. package/dist/scenes/runner.js +674 -0
  322. package/dist/scenes/schema.d.ts +6 -0
  323. package/dist/scenes/schema.js +994 -0
  324. package/dist/scenes/seed.d.ts +2 -0
  325. package/dist/scenes/seed.js +83 -0
  326. package/dist/scenes/segments.d.ts +15 -0
  327. package/dist/scenes/segments.js +79 -0
  328. package/dist/scenes/selectors.d.ts +3 -0
  329. package/dist/scenes/selectors.js +21 -0
  330. package/dist/scenes/timeline.d.ts +11 -0
  331. package/dist/scenes/timeline.js +26 -0
  332. package/dist/scenes/timeouts.d.ts +6 -0
  333. package/dist/scenes/timeouts.js +17 -0
  334. package/dist/scenes/training-captions.d.ts +14 -0
  335. package/dist/scenes/training-captions.js +98 -0
  336. package/dist/scenes/training-report.d.ts +10 -0
  337. package/dist/scenes/training-report.js +78 -0
  338. package/dist/scenes/training-transcript.d.ts +24 -0
  339. package/dist/scenes/training-transcript.js +204 -0
  340. package/dist/scenes/training.d.ts +10 -0
  341. package/dist/scenes/training.js +134 -0
  342. package/dist/scenes/types.d.ts +1872 -0
  343. package/dist/scenes/types.js +8 -0
  344. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  345. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  346. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  347. package/dist/scenes/visual-audit-fixtures.js +210 -0
  348. package/dist/scenes/visual-audit-report.d.ts +11 -0
  349. package/dist/scenes/visual-audit-report.js +85 -0
  350. package/dist/scenes/visual-audit-review.d.ts +23 -0
  351. package/dist/scenes/visual-audit-review.js +829 -0
  352. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  353. package/dist/scenes/visual-audit-routes.js +308 -0
  354. package/dist/scenes/visual-audit.d.ts +3 -0
  355. package/dist/scenes/visual-audit.js +596 -0
  356. package/dist/scripts/build-dist.js +154 -40
  357. package/dist/scripts/check-build-warnings.js +42 -53
  358. package/dist/scripts/cleanup-markdown.js +1 -1
  359. package/dist/scripts/cli-test-fixtures.js +24 -28
  360. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  361. package/dist/scripts/package-tools.js +12 -1
  362. package/dist/scripts/prepare.js +3 -7
  363. package/dist/scripts/release-verify.js +2 -5
  364. package/dist/scripts/run-fixture-astro-command.js +1 -1
  365. package/dist/scripts/template-catalog.test.js +68 -82
  366. package/dist/scripts/tenant-dev.js +0 -10
  367. package/dist/scripts/test-cloudflare-local.js +1 -1
  368. package/dist/scripts/test-scaffold.js +0 -1
  369. package/dist/scripts/test-smoke.js +3 -3
  370. package/dist/scripts/treeseed-build-dist.js +4 -7
  371. package/dist/scripts/treeseed-release-verify.js +1 -1
  372. package/dist/scripts/verify-driver.js +30 -21
  373. package/dist/scripts/workflow-commands.test.js +18 -27
  374. package/dist/scripts/workspace-command-e2e.js +1 -1
  375. package/dist/scripts/workspace-lint.js +6 -0
  376. package/dist/scripts/workspace-release-test.js +90 -1
  377. package/dist/scripts/workspace-test.js +6 -0
  378. package/dist/sdk-dispatch.d.ts +1 -1
  379. package/dist/sdk-dispatch.js +0 -16
  380. package/dist/sdk-fields.d.ts +1 -1
  381. package/dist/sdk-filters.d.ts +1 -1
  382. package/dist/sdk-types.d.ts +1184 -113
  383. package/dist/sdk-types.js +393 -0
  384. package/dist/sdk.d.ts +74 -79
  385. package/dist/sdk.js +27 -36
  386. package/dist/secrets-capability.d.ts +421 -0
  387. package/dist/secrets-capability.js +530 -0
  388. package/dist/seeds/normalize.js +1 -0
  389. package/dist/seeds/planner.js +38 -0
  390. package/dist/seeds/schema.js +293 -4
  391. package/dist/seeds/types.d.ts +60 -0
  392. package/dist/seeds/types.js +9 -1
  393. package/dist/service-credentials.d.ts +54 -0
  394. package/dist/service-credentials.js +112 -0
  395. package/dist/stores/cursor-store.d.ts +2 -2
  396. package/dist/stores/envelopes.d.ts +1 -1
  397. package/dist/stores/helpers.d.ts +1 -1
  398. package/dist/stores/lease-store.d.ts +2 -2
  399. package/dist/stores/message-store.d.ts +2 -2
  400. package/dist/stores/operational-store.d.ts +3 -26
  401. package/dist/stores/operational-store.js +0 -225
  402. package/dist/stores/project-workflow-store.d.ts +2 -2
  403. package/dist/stores/run-store.d.ts +2 -3
  404. package/dist/stores/run-store.js +0 -98
  405. package/dist/stores/subscription-store.d.ts +2 -3
  406. package/dist/stores/subscription-store.js +0 -100
  407. package/dist/template-catalog.d.ts +1 -1
  408. package/dist/template-launch-requirements.d.ts +2 -2
  409. package/dist/template-launch-ui.d.ts +2 -2
  410. package/dist/treedx/adapters.d.ts +6 -6
  411. package/dist/treedx/client.d.ts +1 -1
  412. package/dist/treedx/errors.d.ts +1 -1
  413. package/dist/treedx/federated-client.d.ts +3 -3
  414. package/dist/treedx/graph-adapter.d.ts +2 -2
  415. package/dist/treedx/index.d.ts +14 -14
  416. package/dist/treedx/market-integration.d.ts +1 -1
  417. package/dist/treedx/ports.d.ts +30 -30
  418. package/dist/treedx/query-adapter.d.ts +3 -3
  419. package/dist/treedx/registry-client.d.ts +2 -2
  420. package/dist/treedx/repository-adapter.d.ts +4 -4
  421. package/dist/treedx/repository-adapter.js +14 -3
  422. package/dist/treedx/sdk-integration.d.ts +3 -3
  423. package/dist/treedx/types.d.ts +2 -2
  424. package/dist/treedx/workspace-adapter.d.ts +2 -2
  425. package/dist/treedx-backends.d.ts +13 -11
  426. package/dist/treedx-backends.js +52 -50
  427. package/dist/treedx-client.d.ts +3 -0
  428. package/dist/treedx-client.js +10 -1
  429. package/dist/treeseed/services/compose.yml +2 -3
  430. package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
  431. package/dist/types/agents.d.ts +256 -0
  432. package/dist/types/agents.js +42 -1
  433. package/dist/verification.d.ts +1 -0
  434. package/dist/verification.js +143 -14
  435. package/dist/workflow/operations.d.ts +510 -559
  436. package/dist/workflow/operations.js +1891 -1342
  437. package/dist/workflow/policy.js +19 -7
  438. package/dist/workflow/runs.d.ts +9 -3
  439. package/dist/workflow/runs.js +66 -26
  440. package/dist/workflow/session.d.ts +4 -1
  441. package/dist/workflow/session.js +50 -10
  442. package/dist/workflow/worktrees.d.ts +6 -2
  443. package/dist/workflow/worktrees.js +98 -15
  444. package/dist/workflow-state.d.ts +5 -5
  445. package/dist/workflow-state.js +27 -17
  446. package/dist/workflow-support.d.ts +26 -25
  447. package/dist/workflow-support.js +27 -31
  448. package/dist/workflow.d.ts +46 -16
  449. package/dist/workflow.js +19 -7
  450. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  451. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  452. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  453. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  454. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  455. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  456. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  457. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  458. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  459. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  460. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  461. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  462. package/package.json +75 -18
  463. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  464. package/templates/github/deploy-web.workflow.yml +12 -8
  465. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  466. package/dist/operations/services/mailpit-runtime.js +0 -67
  467. package/dist/operations/services/release-candidate.d.ts +0 -60
  468. package/dist/operations/services/release-candidate.js +0 -953
  469. package/dist/scripts/ensure-mailpit.js +0 -48
  470. package/dist/scripts/logs-mailpit.js +0 -2
  471. package/dist/scripts/run-ts.js +0 -45
  472. package/dist/scripts/stop-mailpit.js +0 -5
  473. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -0,0 +1,25 @@
1
+ export type TreeseedWorkflowPhaseStatus = 'passed' | 'failed' | 'skipped';
2
+ export type TreeseedWorkflowTimingPhase = {
3
+ id: string;
4
+ label: string;
5
+ startedAt: string;
6
+ finishedAt: string;
7
+ durationMs: number;
8
+ status: TreeseedWorkflowPhaseStatus;
9
+ };
10
+ export type TreeseedWorkflowTiming = {
11
+ startedAt: string;
12
+ finishedAt: string;
13
+ durationMs: number;
14
+ phases: TreeseedWorkflowTimingPhase[];
15
+ };
16
+ export type TreeseedWorkflowTimer = {
17
+ readonly startedAt: string;
18
+ phase<T>(id: string, label: string, action: () => T): T;
19
+ phaseAsync<T>(id: string, label: string, action: () => Promise<T>): Promise<T>;
20
+ skip(id: string, label: string): void;
21
+ finish(): TreeseedWorkflowTiming;
22
+ };
23
+ export declare function createTreeseedWorkflowTimer(startedAt?: string): TreeseedWorkflowTimer;
24
+ export declare function formatTreeseedDuration(durationMs: number): string;
25
+ export declare function slowestTreeseedWorkflowPhases(timing: TreeseedWorkflowTiming, limit?: number): TreeseedWorkflowTimingPhase[];
@@ -0,0 +1,79 @@
1
+ function nowIso() {
2
+ return (/* @__PURE__ */ new Date()).toISOString();
3
+ }
4
+ function durationSince(startMs) {
5
+ return Math.max(0, Date.now() - startMs);
6
+ }
7
+ function createTreeseedWorkflowTimer(startedAt = nowIso()) {
8
+ const startMs = Date.parse(startedAt);
9
+ const phases = [];
10
+ function record(id, label, started, startedMs, status) {
11
+ const finishedAt = nowIso();
12
+ phases.push({
13
+ id,
14
+ label,
15
+ startedAt: started,
16
+ finishedAt,
17
+ durationMs: durationSince(startedMs),
18
+ status
19
+ });
20
+ }
21
+ return {
22
+ startedAt,
23
+ phase(id, label, action) {
24
+ const phaseStartedAt = nowIso();
25
+ const phaseStartedMs = Date.now();
26
+ try {
27
+ const result = action();
28
+ record(id, label, phaseStartedAt, phaseStartedMs, "passed");
29
+ return result;
30
+ } catch (error) {
31
+ record(id, label, phaseStartedAt, phaseStartedMs, "failed");
32
+ throw error;
33
+ }
34
+ },
35
+ async phaseAsync(id, label, action) {
36
+ const phaseStartedAt = nowIso();
37
+ const phaseStartedMs = Date.now();
38
+ try {
39
+ const result = await action();
40
+ record(id, label, phaseStartedAt, phaseStartedMs, "passed");
41
+ return result;
42
+ } catch (error) {
43
+ record(id, label, phaseStartedAt, phaseStartedMs, "failed");
44
+ throw error;
45
+ }
46
+ },
47
+ skip(id, label) {
48
+ const phaseStartedAt = nowIso();
49
+ record(id, label, phaseStartedAt, Date.now(), "skipped");
50
+ },
51
+ finish() {
52
+ const finishedAt = nowIso();
53
+ return {
54
+ startedAt,
55
+ finishedAt,
56
+ durationMs: Math.max(0, Date.parse(finishedAt) - startMs),
57
+ phases: [...phases]
58
+ };
59
+ }
60
+ };
61
+ }
62
+ function formatTreeseedDuration(durationMs) {
63
+ const totalSeconds = Math.max(0, Math.round(durationMs / 1e3));
64
+ if (totalSeconds < 60) return `${totalSeconds}s`;
65
+ const minutes = Math.floor(totalSeconds / 60);
66
+ const seconds = totalSeconds % 60;
67
+ if (minutes < 60) return seconds === 0 ? `${minutes}m` : `${minutes}m${seconds}s`;
68
+ const hours = Math.floor(minutes / 60);
69
+ const remainingMinutes = minutes % 60;
70
+ return remainingMinutes === 0 ? `${hours}h` : `${hours}h${remainingMinutes}m`;
71
+ }
72
+ function slowestTreeseedWorkflowPhases(timing, limit = 5) {
73
+ return [...timing.phases].sort((left, right) => right.durationMs - left.durationMs).slice(0, Math.max(0, limit));
74
+ }
75
+ export {
76
+ createTreeseedWorkflowTimer,
77
+ formatTreeseedDuration,
78
+ slowestTreeseedWorkflowPhases
79
+ };
@@ -1,6 +1,6 @@
1
1
  import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, readlinkSync, rmSync, symlinkSync, unlinkSync, writeFileSync } from "node:fs";
2
2
  import { dirname, relative, resolve } from "node:path";
3
- import { spawnSync } from "node:child_process";
3
+ import { runTreeseedGit } from "./git-runner.js";
4
4
  import { workspacePackages, workspaceRoot } from "./workspace-tools.js";
5
5
  const METADATA_VERSION = 1;
6
6
  const INTERNAL_DEPENDENCY_FIELDS = ["dependencies", "optionalDependencies", "peerDependencies", "devDependencies"];
@@ -65,10 +65,10 @@ function writeMetadata(root, links) {
65
65
  `, "utf8");
66
66
  }
67
67
  function gitInfoExcludePath(repoPath) {
68
- const result = spawnSync("git", ["rev-parse", "--git-common-dir"], {
68
+ const result = runTreeseedGit(["rev-parse", "--git-common-dir"], {
69
69
  cwd: repoPath,
70
- stdio: "pipe",
71
- encoding: "utf8"
70
+ mode: "read",
71
+ allowFailure: true
72
72
  });
73
73
  if (result.status !== 0) return null;
74
74
  const gitDir = result.stdout.trim();
@@ -268,6 +268,40 @@ function createLink(link) {
268
268
  const relativeTarget = relative(dirname(link.linkPath), link.targetPath) || ".";
269
269
  symlinkSync(relativeTarget, link.linkPath, process.platform === "win32" ? "junction" : "dir");
270
270
  }
271
+ function packageBinEntries(packageJson) {
272
+ const bin = packageJson.bin;
273
+ if (typeof bin === "string" && typeof packageJson.name === "string") {
274
+ return [[packageDirName(packageJson.name), bin]];
275
+ }
276
+ if (!bin || typeof bin !== "object" || Array.isArray(bin)) return [];
277
+ return Object.entries(bin).filter((entry) => typeof entry[1] === "string");
278
+ }
279
+ function syncPackageBinLinks(link) {
280
+ const packageJson = readJson(resolve(link.targetPath, "package.json"));
281
+ const binEntries = packageBinEntries(packageJson);
282
+ if (binEntries.length === 0) return [];
283
+ const binDir = resolve(link.ownerPath, "node_modules", ".bin");
284
+ mkdirSync(binDir, { recursive: true });
285
+ const created = [];
286
+ for (const [binName, binTarget] of binEntries) {
287
+ const linkPath = resolve(binDir, binName);
288
+ const targetPath = resolve(link.linkPath, binTarget);
289
+ const relativeTarget = relative(dirname(linkPath), targetPath) || targetPath;
290
+ const stat = safeLstat(linkPath);
291
+ if (stat?.isSymbolicLink()) {
292
+ const currentTarget = readlinkSync(linkPath);
293
+ if (currentTarget === relativeTarget || resolve(dirname(linkPath), currentTarget) === targetPath) {
294
+ continue;
295
+ }
296
+ unlinkSync(linkPath);
297
+ } else if (stat) {
298
+ continue;
299
+ }
300
+ symlinkSync(relativeTarget, linkPath);
301
+ created.push(linkPath);
302
+ }
303
+ return created;
304
+ }
271
305
  function ensureLocalWorkspaceLinks(root = workspaceRoot(), options = {}) {
272
306
  const enabled = workspaceLinksEnabled(options.mode, options.env);
273
307
  const links = discoverWorkspaceLinks(root);
@@ -284,6 +318,9 @@ function ensureLocalWorkspaceLinks(root = workspaceRoot(), options = {}) {
284
318
  createLink(link);
285
319
  created.push(link.linkPath);
286
320
  }
321
+ for (const link of links) {
322
+ created.push(...syncPackageBinLinks(link));
323
+ }
287
324
  writeMetadata(root, links);
288
325
  return {
289
326
  ...inspectWorkspaceDependencyMode(root, { mode: options.mode, env: options.env }),
@@ -51,27 +51,27 @@ function envTokenStatus(keys, label, values = process.env) {
51
51
  }
52
52
  function parseGitHubAuthStatus(values = process.env) {
53
53
  return {
54
- authenticated: envTokenStatus(["GH_TOKEN"], "GitHub", values).ready,
55
- detail: envTokenStatus(["GH_TOKEN"], "GitHub", values).detail
54
+ authenticated: envTokenStatus(["TREESEED_GITHUB_TOKEN"], "GitHub", values).ready,
55
+ detail: envTokenStatus(["TREESEED_GITHUB_TOKEN"], "GitHub", values).detail
56
56
  };
57
57
  }
58
58
  function parseWranglerWhoAmI(values = process.env) {
59
59
  return {
60
- authenticated: envTokenStatus(["CLOUDFLARE_API_TOKEN"], "Cloudflare", values).ready,
61
- detail: envTokenStatus(["CLOUDFLARE_API_TOKEN"], "Cloudflare", values).detail
60
+ authenticated: envTokenStatus(["TREESEED_CLOUDFLARE_API_TOKEN"], "Cloudflare", values).ready,
61
+ detail: envTokenStatus(["TREESEED_CLOUDFLARE_API_TOKEN"], "Cloudflare", values).detail
62
62
  };
63
63
  }
64
64
  function parseRailwayWhoAmI(values = process.env) {
65
65
  return {
66
- authenticated: envTokenStatus(["RAILWAY_API_TOKEN"], "Railway", values).ready,
67
- detail: envTokenStatus(["RAILWAY_API_TOKEN"], "Railway", values).detail
66
+ authenticated: envTokenStatus(["TREESEED_RAILWAY_API_TOKEN"], "Railway", values).ready,
67
+ detail: envTokenStatus(["TREESEED_RAILWAY_API_TOKEN"], "Railway", values).detail
68
68
  };
69
69
  }
70
70
  function parseCopilotSessionStatus(values = process.env) {
71
- const status = envTokenStatus(["GH_TOKEN"], "GitHub", values);
71
+ const status = envTokenStatus(["TREESEED_GITHUB_COPILOT_TOKEN", "TREESEED_GITHUB_TOKEN"], "GitHub Copilot", values);
72
72
  return {
73
73
  configured: status.ready,
74
- detail: status.ready ? "GitHub token detected from configured Treeseed environment for Copilot-backed workflows." : "GitHub token is not configured. Set GH_TOKEN for Copilot-backed workflows."
74
+ detail: status.ready ? "GitHub Copilot token detected from configured Treeseed environment for Copilot-backed workflows." : "GitHub Copilot token is not configured. Set TREESEED_GITHUB_COPILOT_TOKEN for Copilot-backed workflows. TREESEED_GITHUB_TOKEN is accepted as a compatibility fallback."
75
75
  };
76
76
  }
77
77
  function collectCliPreflight({ cwd = process.cwd(), requireAuth = false } = {}) {
@@ -1,4 +1,4 @@
1
- import type { TreeseedWorkflowResult } from '../../workflow.ts';
1
+ import type { TreeseedWorkflowResult } from '../../workflow.js';
2
2
  export type SaveScriptArgs = {
3
3
  hotfix: boolean;
4
4
  message: string;
@@ -7,12 +7,12 @@ export declare function parseWorkspaceSaveScriptArgs(argv: string[]): SaveScript
7
7
  export declare function formatWorkspaceSaveSuccessReport(result: TreeseedWorkflowResult<Record<string, unknown>>): {
8
8
  ok: boolean;
9
9
  kind: string;
10
- operation: import("../../workflow.ts").TreeseedWorkflowOperationId;
10
+ operation: import("../../workflow.js").TreeseedWorkflowOperationId;
11
11
  };
12
12
  export declare function formatWorkspaceSaveFailureReport(error: unknown): {
13
13
  ok: boolean;
14
- kind: import("../../workflow.ts").TreeseedWorkflowErrorCode;
15
- operation: import("../../workflow.ts").TreeseedWorkflowOperationId;
14
+ kind: import("../../workflow.js").TreeseedWorkflowErrorCode;
15
+ operation: import("../../workflow.js").TreeseedWorkflowOperationId;
16
16
  message: string;
17
17
  details: Record<string, unknown> | null;
18
18
  exitCode: number;
@@ -59,6 +59,7 @@ export declare function countConflictMarkers(source: any): {
59
59
  };
60
60
  export declare function collectMergeConflictReport(repoDir: any): {
61
61
  branch: string;
62
+ mergeInProgress: boolean;
62
63
  rebaseInProgress: boolean;
63
64
  conflictedFiles: string[];
64
65
  status: string;
@@ -1,6 +1,15 @@
1
- import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
- import { resolve } from "node:path";
3
- import { changedWorkspacePackages, publishableWorkspacePackages, run, sortWorkspacePackages, workspacePackages, workspaceRoot } from "./workspace-tools.js";
1
+ import { existsSync, lstatSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { isAbsolute, resolve } from "node:path";
3
+ import { changedWorkspacePackages, publishableWorkspacePackages, sortWorkspacePackages, workspacePackages, workspaceRoot } from "./workspace-tools.js";
4
+ import { classifyTreeseedGitMode, runTreeseedGitText } from "./git-runner.js";
5
+ function runGit(args, options) {
6
+ return runTreeseedGitText(args, {
7
+ cwd: options.cwd,
8
+ mode: classifyTreeseedGitMode(args),
9
+ timeoutMs: options.timeoutMs,
10
+ maxBuffer: options.maxBuffer
11
+ });
12
+ }
4
13
  const MERGE_CONFLICT_EXIT_CODE = 12;
5
14
  const TREESEED_PUBLIC_RELEASE_PACKAGE_NAMES = ["@treeseed/sdk", "@treeseed/ui", "@treeseed/core", "@treeseed/admin", "@treeseed/cli", "@treeseed/agent"];
6
15
  function parseSemver(version) {
@@ -60,7 +69,7 @@ function versionForLine(line, patch = 0) {
60
69
  }
61
70
  function localGitTagExists(repoDir, tagName) {
62
71
  try {
63
- return run("git", ["tag", "--list", tagName], { cwd: repoDir, capture: true }).trim() === tagName;
72
+ return runGit(["tag", "--list", tagName], { cwd: repoDir, capture: true }).trim() === tagName;
64
73
  } catch {
65
74
  return false;
66
75
  }
@@ -68,7 +77,7 @@ function localGitTagExists(repoDir, tagName) {
68
77
  function highestStableGitTagOnLine(repoDir, lineLabel) {
69
78
  const line = parseVersionLine(lineLabel);
70
79
  try {
71
- const tags = run("git", ["tag", "--list", `${line.label}.*`], { cwd: repoDir, capture: true }).split(/\r?\n/u).map((tag) => tag.trim()).filter(Boolean).map((tag) => {
80
+ const tags = runGit(["tag", "--list", `${line.label}.*`], { cwd: repoDir, capture: true }).split(/\r?\n/u).map((tag) => tag.trim()).filter(Boolean).map((tag) => {
72
81
  try {
73
82
  const parsed = parseSemver(tag);
74
83
  if (parsed.prerelease || parsed.major !== line.major || parsed.minor !== line.minor) return null;
@@ -340,16 +349,16 @@ function assertWorkspaceVersionConsistency(root = workspaceRoot()) {
340
349
  );
341
350
  }
342
351
  function repoRoot(cwd = workspaceRoot()) {
343
- return run("git", ["rev-parse", "--show-toplevel"], { cwd, capture: true }).trim();
352
+ return runGit(["rev-parse", "--show-toplevel"], { cwd, capture: true }).trim();
344
353
  }
345
354
  function currentBranch(repoDir) {
346
- return run("git", ["branch", "--show-current"], { cwd: repoDir, capture: true }).trim();
355
+ return runGit(["branch", "--show-current"], { cwd: repoDir, capture: true }).trim();
347
356
  }
348
357
  function originRemoteUrl(repoDir) {
349
- return run("git", ["remote", "get-url", "origin"], { cwd: repoDir, capture: true }).trim();
358
+ return runGit(["remote", "get-url", "origin"], { cwd: repoDir, capture: true }).trim();
350
359
  }
351
360
  function gitStatusPorcelain(repoDir) {
352
- return run("git", ["status", "--porcelain"], { cwd: repoDir, capture: true }).trim();
361
+ return runGit(["status", "--porcelain"], { cwd: repoDir, capture: true }).trim();
353
362
  }
354
363
  function hasMeaningfulChanges(repoDir) {
355
364
  return gitStatusPorcelain(repoDir).length > 0;
@@ -361,25 +370,38 @@ function countConflictMarkers(source) {
361
370
  end: (source.match(/^>{7} /gm) ?? []).length
362
371
  };
363
372
  }
373
+ function gitPathExists(repoDir, gitPath) {
374
+ try {
375
+ const resolved = runGit(["rev-parse", "--git-path", gitPath], {
376
+ cwd: repoDir,
377
+ capture: true
378
+ }).trim();
379
+ const fullPath = resolved && (isAbsolute(resolved) ? resolved : resolve(repoDir, resolved));
380
+ return Boolean(fullPath) && existsSync(fullPath);
381
+ } catch {
382
+ return false;
383
+ }
384
+ }
364
385
  function collectMergeConflictReport(repoDir) {
365
386
  const branch = currentBranch(repoDir);
366
- const conflictedFiles = run("git", ["diff", "--name-only", "--diff-filter=U"], {
387
+ const conflictedFiles = runGit(["diff", "--name-only", "--diff-filter=U"], {
367
388
  cwd: repoDir,
368
389
  capture: true
369
390
  }).split("\n").map((line) => line.trim()).filter(Boolean);
370
- const status = run("git", ["status", "--short"], { cwd: repoDir, capture: true });
391
+ const status = runGit(["status", "--short"], { cwd: repoDir, capture: true });
371
392
  const perFile = conflictedFiles.map((filePath) => {
372
393
  const fullPath = resolve(repoDir, filePath);
373
- const source = existsSync(fullPath) ? readFileSync(fullPath, "utf8") : "";
394
+ const source = existsSync(fullPath) && !lstatSync(fullPath).isDirectory() ? readFileSync(fullPath, "utf8") : "";
374
395
  return {
375
396
  filePath,
376
397
  markers: countConflictMarkers(source),
377
- diff: run("git", ["diff", "--", filePath], { cwd: repoDir, capture: true })
398
+ diff: runGit(["diff", "--", filePath], { cwd: repoDir, capture: true })
378
399
  };
379
400
  });
380
401
  return {
381
402
  branch,
382
- rebaseInProgress: true,
403
+ mergeInProgress: gitPathExists(repoDir, "MERGE_HEAD"),
404
+ rebaseInProgress: gitPathExists(repoDir, "rebase-merge") || gitPathExists(repoDir, "rebase-apply"),
383
405
  conflictedFiles,
384
406
  status,
385
407
  perFile
@@ -387,9 +409,10 @@ function collectMergeConflictReport(repoDir) {
387
409
  }
388
410
  function formatMergeConflictReport(report, repoDir, targetBranch = "main") {
389
411
  const lines = [
390
- `Treeseed save failed due to merge conflicts during \`git pull --rebase --recurse-submodules=no origin ${targetBranch}\`.`,
412
+ `Treeseed workflow failed due to Git integration conflicts while updating ${targetBranch}.`,
391
413
  `Repository root: ${repoDir}`,
392
414
  `Branch: ${report.branch}`,
415
+ `Merge in progress: ${report.mergeInProgress ? "yes" : "no"}`,
393
416
  `Rebase in progress: ${report.rebaseInProgress ? "yes" : "no"}`,
394
417
  "Git status:",
395
418
  report.status || "(no git status output)",
@@ -402,9 +425,9 @@ function formatMergeConflictReport(report, repoDir, targetBranch = "main") {
402
425
  lines.push(file.diff || " (no diff output)");
403
426
  }
404
427
  lines.push("Next steps:");
405
- lines.push("- Inspect conflicted files and reconcile local vs remote changes.");
406
- lines.push("- After resolving files, run `git add <files>` and `git rebase --continue`.");
407
- lines.push("- Or abort with `git rebase --abort` if you need to restart the save flow.");
428
+ lines.push("- Inspect conflicted files and reconcile local vs target-branch changes on your task branch.");
429
+ lines.push("- Save the resolved task branch, then retry the interrupted Treeseed workflow.");
430
+ lines.push("- If a Git merge or rebase is still active, abort it before retrying.");
408
431
  return lines.join("\n");
409
432
  }
410
433
  export {
@@ -1,7 +1,8 @@
1
1
  import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync } from "node:fs";
2
2
  import { spawnSync } from "node:child_process";
3
+ import { classifyTreeseedGitMode, runTreeseedGit, runTreeseedGitText } from "./git-runner.js";
3
4
  import { join, relative, resolve } from "node:path";
4
- const TREESEED_WORKSPACE_PACKAGE_DIRS = ["sdk", "core", "cli", "agent"];
5
+ const TREESEED_WORKSPACE_PACKAGE_DIRS = ["sdk", "ui", "core", "admin", "cli", "agent", "api", "treedx"];
5
6
  function packageSortWeight(pkg) {
6
7
  const relativeDir = String(pkg.relativeDir ?? "");
7
8
  const dirName = relativeDir.split("/").pop() ?? "";
@@ -19,6 +20,14 @@ function compareWorkspacePackages(left, right) {
19
20
  function escapeRegex(source) {
20
21
  return source.replace(/[|\\{}()[\]^$+?.]/g, "\\$&");
21
22
  }
23
+ function runGit(args, options) {
24
+ return runTreeseedGitText(args, {
25
+ cwd: options.cwd,
26
+ mode: classifyTreeseedGitMode(args),
27
+ timeoutMs: options.timeoutMs,
28
+ maxBuffer: options.maxBuffer
29
+ });
30
+ }
22
31
  function segmentPatternToRegex(pattern) {
23
32
  return new RegExp(`^${escapeRegex(pattern).replaceAll("*", ".*")}$`);
24
33
  }
@@ -76,7 +85,10 @@ function isWorkspaceRoot(root = process.cwd()) {
76
85
  }
77
86
  }
78
87
  function hasCompleteTreeseedPackageCheckout(root = process.cwd()) {
79
- return TREESEED_WORKSPACE_PACKAGE_DIRS.every((dirName) => existsSync(resolve(root, "packages", dirName, "package.json")));
88
+ return TREESEED_WORKSPACE_PACKAGE_DIRS.every((dirName) => {
89
+ const packageDir = resolve(root, "packages", dirName);
90
+ return existsSync(resolve(packageDir, "package.json")) || existsSync(resolve(packageDir, "treeseed.package.yaml"));
91
+ });
80
92
  }
81
93
  function findNearestTreeseedWorkspaceRoot(startCwd = process.cwd()) {
82
94
  const tenantRoot = findNearestTreeseedRoot(startCwd);
@@ -89,9 +101,15 @@ function readJson(filePath) {
89
101
  return JSON.parse(readFileSync(filePath, "utf8"));
90
102
  }
91
103
  function workspacePackageJson(root = workspaceRoot()) {
104
+ if (!existsSync(resolve(root, "package.json"))) {
105
+ return {};
106
+ }
92
107
  return readJson(resolve(root, "package.json"));
93
108
  }
94
109
  function workspacePatterns(root = workspaceRoot()) {
110
+ if (!existsSync(resolve(root, "package.json"))) {
111
+ return hasCompleteTreeseedPackageCheckout(root) ? ["packages/*"] : [];
112
+ }
95
113
  const packageJson = workspacePackageJson(root);
96
114
  const workspaces = Array.isArray(packageJson.workspaces) ? packageJson.workspaces : Array.isArray(packageJson.workspaces?.packages) ? packageJson.workspaces.packages : [];
97
115
  const patterns = workspaces.filter((value) => typeof value === "string" && value.trim().length > 0);
@@ -172,6 +190,22 @@ function packagesWithScript(scriptName, root = workspaceRoot()) {
172
190
  );
173
191
  }
174
192
  function run(command, args, options = {}) {
193
+ if (command === "git") {
194
+ const result2 = runTreeseedGit(args, {
195
+ cwd: options.cwd ?? workspaceRoot(),
196
+ mode: classifyTreeseedGitMode(args),
197
+ allowFailure: false,
198
+ timeoutMs: options.timeoutMs,
199
+ maxBuffer: options.maxBuffer
200
+ });
201
+ if (!options.capture && result2.stdout) {
202
+ process.stdout.write(result2.stdout);
203
+ }
204
+ if (!options.capture && result2.stderr) {
205
+ process.stderr.write(result2.stderr);
206
+ }
207
+ return (result2.stdout ?? "").trim();
208
+ }
175
209
  const result = spawnSync(command, args, {
176
210
  cwd: options.cwd ?? workspaceRoot(),
177
211
  env: { ...process.env, ...options.env ?? {} },
@@ -188,10 +222,10 @@ function run(command, args, options = {}) {
188
222
  return (result.stdout ?? "").trim();
189
223
  }
190
224
  function canResolveGitRef(baseRef, cwd = workspaceRoot()) {
191
- const result = spawnSync("git", ["rev-parse", "--verify", baseRef], {
225
+ const result = runTreeseedGit(["rev-parse", "--verify", baseRef], {
192
226
  cwd,
193
- stdio: "pipe",
194
- encoding: "utf8"
227
+ mode: "read",
228
+ allowFailure: true
195
229
  });
196
230
  return result.status === 0;
197
231
  }
@@ -213,7 +247,7 @@ function changedWorkspaceFiles(baseRef, cwd = workspaceRoot()) {
213
247
  diffCommands.unshift(["diff", "--name-only", resolvedBaseRef, "HEAD"]);
214
248
  }
215
249
  for (const args of diffCommands) {
216
- const output = run("git", args, { cwd, capture: true });
250
+ const output = runGit(args, { cwd, capture: true });
217
251
  for (const line of output.split("\n").map((entry) => entry.trim()).filter(Boolean)) {
218
252
  changedFiles.add(line);
219
253
  }
@@ -1,4 +1,4 @@
1
- import type { TreeseedOperationMetadata } from './operations-types.ts';
1
+ import type { TreeseedOperationMetadata } from './operations-types.js';
2
2
  export declare const TRESEED_OPERATION_SPECS: TreeseedOperationMetadata[];
3
3
  export declare const TRESEED_OPERATION_INDEX: Map<string, TreeseedOperationMetadata>;
4
4
  export declare function findTreeseedOperation(name: string | null | undefined): TreeseedOperationMetadata | null;
@@ -8,9 +8,11 @@ const TRESEED_OPERATION_SPECS = [
8
8
  operation({ id: "branch.tasks", name: "tasks", aliases: [], group: "Workflow", summary: "List task branches plus package branch alignment.", description: "List task branches from market and checked-out package repos, including preview metadata and branch/pointer alignment state.", provider: "default", related: ["status", "switch", "close"] }),
9
9
  operation({ id: "branch.switch", name: "switch", aliases: [], group: "Workflow", summary: "Create or resume a recursive task branch.", description: "Create or resume the task branch in market and any checked-out package repos, with optional preview provisioning.", provider: "default", related: ["tasks", "dev", "save"] }),
10
10
  operation({ id: "branch.save", name: "save", aliases: [], group: "Workflow", summary: "Recursively verify, commit, and push the current task checkpoint.", description: "Save dirty package repos in dependency order, then verify, commit, push, and optionally refresh preview for market.", provider: "default", related: ["switch", "stage", "status"] }),
11
- operation({ id: "branch.close", name: "close", aliases: [], group: "Workflow", summary: "Recursively archive and delete a task branch.", description: "Auto-save if needed, clean preview resources, create deprecated tags, and remove the task branch across market and checked-out package repos.", provider: "default", related: ["tasks", "switch", "stage"] }),
12
- operation({ id: "branch.stage", name: "stage", aliases: [], group: "Workflow", summary: "Squash a task branch into staging across market and packages.", description: "Auto-save if needed, squash-merge package task branches into staging first, update market submodule pointers, then squash-merge market into staging and clean up the task branch.", provider: "default", related: ["save", "release", "close"] }),
13
- operation({ id: "workspace.tags.cleanup", name: "tags:cleanup", aliases: [], group: "Utilities", summary: "Clean stale Treeseed-managed package dev tags.", description: "Plan or delete stale staging and preview package dev tags that are older than each package current version line while preserving active references and non-Treeseed tags.", provider: "default", related: ["release", "status"] }),
11
+ operation({ id: "branch.update", name: "update", aliases: [], group: "Workflow", summary: "Merge staging into the current task branch.", description: "Merge the selected upstream branch, staging by default, into the current task branch across market and checked-out package repos.", provider: "default", related: ["status", "save", "stage", "switch"] }),
12
+ operation({ id: "branch.close", name: "close", aliases: [], group: "Workflow", summary: "Recursively archive and delete a task branch.", description: "Auto-save if needed, clean preview resources, and remove the task branch across market and checked-out package repos.", provider: "default", related: ["tasks", "switch", "stage"] }),
13
+ operation({ id: "branch.stage", name: "stage", aliases: [], group: "Workflow", summary: "Promote a locally verified task branch to staging across market and packages.", description: "Merge staging down into the task branch first, run local proof, promote exact verified root and package refs to staging, verify remote staging refs, and clean up only after promotion succeeds.", provider: "default", related: ["save", "release", "close"] }),
14
+ operation({ id: "release.candidate", name: "release-candidate", aliases: [], group: "Validation", summary: "Plan and run reusable release proof records for staging promotion.", description: "Build the exact-SHA proof graph for package, hosted workflow, and provider verification. GitHub-hosted workflow proof is authoritative; local and action-simulation proof is reusable but not a hosted CI substitute.", provider: "default", related: ["stage", "release", "save"] }),
15
+ operation({ id: "release.proof", name: "proof", aliases: [], group: "Validation", summary: "Plan, run, and inspect reusable release proof records.", description: "Manage exact-SHA release proof records for packages, hosted workflows, and provider verification. GitHub-hosted workflow proof is authoritative; local action simulation is advisory.", provider: "default", related: ["save", "release-candidate", "ci"] }),
14
16
  operation({ id: "workspace.resume", name: "resume", aliases: [], group: "Workflow", summary: "Resume an interrupted workflow run.", description: "Continue a failed journaled workflow run from its next incomplete step after validating current workspace preconditions.", provider: "default", related: ["recover", "status"] }),
15
17
  operation({ id: "workspace.recover", name: "recover", aliases: [], group: "Workflow", summary: "Inspect active workflow locks and interrupted runs.", description: "List active workflow locks, resumable interrupted runs, and the exact commands needed to continue or recover the workspace state.", provider: "default", related: ["resume", "status"] }),
16
18
  operation({ id: "workspace.links.status", name: workspaceCommand("status"), aliases: [], group: "Utilities", summary: "Inspect local workspace dependency links.", description: "Inspect whether Treeseed package dependencies are linked to local package checkouts or resolved through deployment references.", provider: "default", related: ["dev", "save"] }),
@@ -68,9 +70,6 @@ const TRESEED_OPERATION_SPECS = [
68
70
  operation({ id: "release.verify", name: "test:release:full", aliases: ["release:verify"], group: "Release Utilities", summary: "Run the full release verification path.", description: "Run the full release verification path.", provider: "default" }),
69
71
  operation({ id: "release.publishChanged", name: "release:publish:changed", aliases: [], group: "Release Utilities", summary: "Publish changed Treeseed workspace packages.", description: "Publish changed Treeseed workspace packages.", provider: "default" }),
70
72
  operation({ id: "tools.astro", name: "astro", aliases: [], group: "Passthrough", summary: "Pass through to the packaged Astro CLI wrapper.", description: "Pass through to the packaged Astro CLI wrapper.", provider: "default" }),
71
- operation({ id: "services.mailpitUp", name: "mailpit:up", aliases: [], group: "Utilities", summary: "Start the package-managed Mailpit service.", description: "Start the package-managed Mailpit service.", provider: "default" }),
72
- operation({ id: "services.mailpitDown", name: "mailpit:down", aliases: [], group: "Utilities", summary: "Stop the package-managed Mailpit service.", description: "Stop the package-managed Mailpit service.", provider: "default" }),
73
- operation({ id: "services.mailpitLogs", name: "mailpit:logs", aliases: [], group: "Utilities", summary: "Show Mailpit logs.", description: "Show Mailpit logs.", provider: "default" }),
74
73
  operation({ id: "data.d1MigrateLocal", name: "d1:migrate:local", aliases: [], group: "Utilities", summary: "Apply local D1 migrations.", description: "Apply local D1 migrations.", provider: "default" }),
75
74
  operation({ id: "content.cleanupMarkdown", name: "cleanup:markdown", aliases: [], group: "Utilities", summary: "Normalize Markdown and MDX files.", description: "Normalize Markdown and MDX files.", provider: "default" }),
76
75
  operation({ id: "content.cleanupMarkdownCheck", name: "cleanup:markdown:check", aliases: [], group: "Utilities", summary: "Check Markdown and MDX formatting without rewriting files.", description: "Check Markdown and MDX formatting without rewriting files.", provider: "default" }),
@@ -1,5 +1,5 @@
1
1
  export type TreeseedOperationGroup = 'Workflow' | 'Local Development' | 'Validation' | 'Release Utilities' | 'Utilities' | 'Passthrough';
2
- export type TreeseedOperationId = 'workspace.status' | 'workspace.doctor' | 'branch.tasks' | 'branch.switch' | 'branch.save' | 'branch.close' | 'branch.stage' | 'deploy.release' | 'deploy.rollback' | 'deploy.destroy' | 'workspace.resume' | 'workspace.recover' | 'template.list' | 'template.show' | 'template.validate' | 'template.sync' | 'project.init' | 'project.config' | 'local.dev' | 'local.devWatch' | 'local.build' | 'local.check' | 'local.preview' | 'local.lint' | 'local.test' | 'validation.testUnit' | 'validation.preflight' | 'validation.authCheck' | 'auth.login' | 'auth.logout' | 'auth.whoami' | 'release.testE2e' | 'release.testE2eLocal' | 'release.testE2eStaging' | 'release.testE2eFull' | 'release.testFast' | 'release.verify' | 'release.publishChanged' | 'services.mailpitUp' | 'services.mailpitDown' | 'services.mailpitLogs' | 'data.d1MigrateLocal' | 'content.cleanupMarkdown' | 'content.cleanupMarkdownCheck' | 'project.export' | 'tools.astro' | 'tools.syncDevvars' | 'tools.starlightPatch' | 'agents.run';
2
+ export type TreeseedOperationId = 'workspace.status' | 'workspace.doctor' | 'branch.tasks' | 'branch.switch' | 'branch.save' | 'branch.close' | 'branch.stage' | 'deploy.release' | 'deploy.rollback' | 'deploy.destroy' | 'workspace.resume' | 'workspace.recover' | 'template.list' | 'template.show' | 'template.validate' | 'template.sync' | 'project.init' | 'project.config' | 'local.dev' | 'local.devWatch' | 'local.build' | 'local.check' | 'local.preview' | 'local.lint' | 'local.test' | 'validation.testUnit' | 'validation.preflight' | 'validation.authCheck' | 'auth.login' | 'auth.logout' | 'auth.whoami' | 'release.testE2e' | 'release.testE2eLocal' | 'release.testE2eStaging' | 'release.testE2eFull' | 'release.testFast' | 'release.verify' | 'release.publishChanged' | 'data.d1MigrateLocal' | 'content.cleanupMarkdown' | 'content.cleanupMarkdownCheck' | 'project.export' | 'tools.astro' | 'tools.syncDevvars' | 'tools.starlightPatch' | 'agents.run';
3
3
  export type TreeseedOperationProviderId = 'default';
4
4
  export type TreeseedOperationMetadata = {
5
5
  id: TreeseedOperationId;
@@ -1,11 +1,17 @@
1
- export { TRESEED_OPERATION_SPECS, findTreeseedOperation, listTreeseedOperationNames, } from './operations-registry.ts';
2
- export { collectTreeseedConfigSeedValues } from './operations/services/config-runtime.ts';
3
- export { createKnowledgeHubRepositories, defaultHubContentResolutionPolicy, executeKnowledgeHubLaunch, normalizeKnowledgeHubLaunchIntent, planKnowledgeHubLaunch, planKnowledgeHubRepositories, validateRepositoryHost, } from './operations/services/hub-launch.ts';
4
- export { TreeseedOperationsSdk } from './operations/runtime.ts';
5
- export { cancelGitHubWorkflowRun, dispatchGitHubWorkflowRun, formatGitHubWorkflowFailure, waitForGitHubWorkflowRunCompletion, type GitHubWorkflowCancellationResult, type GitHubWorkflowDispatchResult, type GitHubWorkflowFailureSummary, type GitHubWorkflowFailureSummaryInput, type GitHubWorkflowProgressEvent, } from './operations/services/github-api.ts';
6
- export type { HubContentResolutionPolicy, KnowledgeHubLaunchIntent, KnowledgeHubLaunchPhase, KnowledgeHubLaunchPlan, KnowledgeHubLaunchResult, KnowledgeHubRepositoryPlan, RepositoryHost, } from './operations/services/hub-launch.ts';
7
- export type { TreeseedOperationContext, TreeseedOperationImplementation, TreeseedOperationId, TreeseedOperationMetadata, TreeseedOperationProvider, TreeseedOperationProviderId, TreeseedOperationRequest, TreeseedOperationResult, TreeseedOperationGroup, } from './operations-types.ts';
8
- export { TreeseedOperationError } from './operations-types.ts';
9
- export { AGENT_OPERATION_MODES, AGENT_OPERATION_NAMES, createAgentOperationEvent, decideAgentOperationPermission, deniedAgentOperationResult, isAgentOperationName, resolveAgentOperationGrant, type AgentDeterministicOperationStep, type AgentOperationApprovalRef, type AgentOperationEvent, type AgentOperationGrant, type AgentOperationMergeFailure, type AgentOperationMode, type AgentOperationName, type AgentOperationPermissionCode, type AgentOperationPermissionDecision, type AgentOperationRequest, type AgentOperationResult, type AgentOperationStatus, } from './operations/agent-tools.ts';
10
- export { TreeseedWorkflowSdk } from './workflow.ts';
11
- export type * from './workflow.ts';
1
+ export { TRESEED_OPERATION_SPECS, findTreeseedOperation, listTreeseedOperationNames, } from './operations-registry.js';
2
+ export { collectTreeseedConfigSeedValues } from './operations/services/config-runtime.js';
3
+ export { createKnowledgeHubRepositories, defaultHubContentResolutionPolicy, executeKnowledgeHubLaunch, normalizeKnowledgeHubLaunchIntent, planKnowledgeHubLaunch, planKnowledgeHubRepositories, validateRepositoryHost, } from './operations/services/hub-launch.js';
4
+ export { TreeseedOperationsSdk } from './operations/runtime.js';
5
+ export { cancelGitHubWorkflowRun, formatGitHubWorkflowFailure, waitForGitHubWorkflowRunCompletion, type GitHubWorkflowCancellationResult, type GitHubWorkflowFailureSummary, type GitHubWorkflowFailureSummaryInput, type GitHubWorkflowProgressEvent, } from './operations/services/github-api.js';
6
+ export { computeProofInputHash, createProofRecord, proofIdFor, type TreeseedProofDriver, type TreeseedProofInput, type TreeseedProofRecord, type TreeseedProofStatus, type TreeseedProofSubject, type TreeseedProofSubjectKind, } from './operations/services/release-proof.js';
7
+ export { cleanProofLedger, findReusableProof, invalidateProofs, readProofLedger, writeProofRecord, } from './operations/services/release-proof-ledger.js';
8
+ export { buildTreeseedProofPlan, summarizeTreeseedProofLedger, type TreeseedProofPlan, type TreeseedProofPlanSubject, type TreeseedProofTarget, } from './operations/services/release-proof-planner.js';
9
+ export { runTreeseedProof, type TreeseedProofRunResult, } from './operations/services/release-proof-runner.js';
10
+ export { createTreeseedWorkflowTimer, formatTreeseedDuration, slowestTreeseedWorkflowPhases, type TreeseedWorkflowTiming, type TreeseedWorkflowTimingPhase, } from './operations/services/workflow-timing.js';
11
+ export { classifyTreeseedGitMode, inspectTreeseedGitLocks, inspectTreeseedWorkspaceGitLocks, recoverTreeseedGitLocks, runTreeseedGit, runTreeseedGitBatch, runTreeseedGitOk, runTreeseedGitText, type TreeseedGitBatchOperation, type TreeseedGitLockDiagnostic, type TreeseedGitRunnerMode, type TreeseedGitRunnerResult, type TreeseedGitWorkspaceLockDiagnostics, } from './operations/services/git-runner.js';
12
+ export type { HubContentResolutionPolicy, KnowledgeHubLaunchIntent, KnowledgeHubLaunchPhase, KnowledgeHubLaunchPlan, KnowledgeHubLaunchResult, KnowledgeHubRepositoryPlan, RepositoryHost, } from './operations/services/hub-launch.js';
13
+ export type { TreeseedOperationContext, TreeseedOperationImplementation, TreeseedOperationId, TreeseedOperationMetadata, TreeseedOperationProvider, TreeseedOperationProviderId, TreeseedOperationRequest, TreeseedOperationResult, TreeseedOperationGroup, } from './operations-types.js';
14
+ export { TreeseedOperationError } from './operations-types.js';
15
+ export { AGENT_OPERATION_MODES, AGENT_OPERATION_NAMES, createAgentOperationEvent, decideAgentOperationPermission, deniedAgentOperationResult, isAgentOperationName, resolveAgentOperationGrant, type AgentDeterministicOperationStep, type AgentOperationEvent, type AgentOperationGrant, type AgentOperationMergeFailure, type AgentOperationMode, type AgentOperationName, type AgentOperationPermissionCode, type AgentOperationPermissionDecision, type AgentOperationRequest, type AgentOperationResult, type AgentOperationStatus, } from './operations/agent-tools.js';
16
+ export { TreeseedWorkflowSdk } from './workflow.js';
17
+ export type * from './workflow.js';