@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,25 @@
1
+ export interface TreeseedVerificationCacheEntry {
2
+ key: string;
3
+ repoName: string;
4
+ repoPath: string;
5
+ headSha: string;
6
+ command: string;
7
+ status: 'passed' | 'failed';
8
+ createdAt: string;
9
+ durationMs: number;
10
+ logsPath?: string | null;
11
+ }
12
+ export interface TreeseedVerificationCacheInput {
13
+ workspaceRoot: string;
14
+ repoName: string;
15
+ repoPath: string;
16
+ command: string;
17
+ verifyMode: string;
18
+ env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
19
+ }
20
+ export declare function treeseedVerificationCacheKey(input: TreeseedVerificationCacheInput): {
21
+ key: string;
22
+ headSha: string;
23
+ };
24
+ export declare function readTreeseedVerificationCache(input: TreeseedVerificationCacheInput): TreeseedVerificationCacheEntry | null;
25
+ export declare function writeTreeseedVerificationCache(input: TreeseedVerificationCacheInput, durationMs: number): TreeseedVerificationCacheEntry | null;
@@ -0,0 +1,71 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
+ import { headCommit } from "./git-workflow.js";
5
+ function sha256(value) {
6
+ return createHash("sha256").update(value).digest("hex");
7
+ }
8
+ function fileHash(path) {
9
+ if (!existsSync(path)) return null;
10
+ return sha256(readFileSync(path));
11
+ }
12
+ function cacheEnabled(env = process.env) {
13
+ const value = String(env.TREESEED_VERIFY_CACHE ?? "").trim().toLowerCase();
14
+ if (value === "0" || value === "false" || value === "off") return false;
15
+ if (env.GITHUB_ACTIONS === "true") return value === "1" || value === "true" || value === "on";
16
+ return true;
17
+ }
18
+ function treeseedVerificationCacheKey(input) {
19
+ const headSha = headCommit(input.repoPath);
20
+ const payload = {
21
+ repoPath: resolve(input.repoPath),
22
+ headSha,
23
+ packageJson: fileHash(resolve(input.repoPath, "package.json")),
24
+ packageLock: fileHash(resolve(input.repoPath, "package-lock.json")),
25
+ command: input.command,
26
+ nodeMajor: process.versions.node.split(".")[0],
27
+ verifyMode: input.verifyMode
28
+ };
29
+ return { key: sha256(JSON.stringify(payload)), headSha };
30
+ }
31
+ function cachePath(input, key) {
32
+ return resolve(input.workspaceRoot, ".treeseed", "cache", "verification", `${key}.json`);
33
+ }
34
+ function readTreeseedVerificationCache(input) {
35
+ if (!cacheEnabled(input.env)) return null;
36
+ const { key, headSha } = treeseedVerificationCacheKey(input);
37
+ const path = cachePath(input, key);
38
+ if (!existsSync(path)) return null;
39
+ try {
40
+ const entry = JSON.parse(readFileSync(path, "utf8"));
41
+ if (entry.key !== key || entry.headSha !== headSha || entry.status !== "passed") return null;
42
+ return entry;
43
+ } catch {
44
+ return null;
45
+ }
46
+ }
47
+ function writeTreeseedVerificationCache(input, durationMs) {
48
+ if (!cacheEnabled(input.env)) return null;
49
+ const { key, headSha } = treeseedVerificationCacheKey(input);
50
+ const path = cachePath(input, key);
51
+ const entry = {
52
+ key,
53
+ repoName: input.repoName,
54
+ repoPath: resolve(input.repoPath),
55
+ headSha,
56
+ command: input.command,
57
+ status: "passed",
58
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
59
+ durationMs,
60
+ logsPath: null
61
+ };
62
+ mkdirSync(dirname(path), { recursive: true });
63
+ writeFileSync(path, `${JSON.stringify(entry, null, 2)}
64
+ `, "utf8");
65
+ return entry;
66
+ }
67
+ export {
68
+ readTreeseedVerificationCache,
69
+ treeseedVerificationCacheKey,
70
+ writeTreeseedVerificationCache
71
+ };
@@ -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();
@@ -128,6 +128,14 @@ function dependencySpec(packageJson, field, packageName) {
128
128
  const value = deps[packageName];
129
129
  return typeof value === "string" ? value : null;
130
130
  }
131
+ function dependencySpecsMatch(manifestSpec, lockSpec) {
132
+ if (lockSpec === manifestSpec) return true;
133
+ const manifestVersion = manifestSpec.replace(/^[~^]/u, "");
134
+ const lockRef = lockSpec.includes("#") ? lockSpec.slice(lockSpec.lastIndexOf("#") + 1) : null;
135
+ return Boolean(
136
+ lockRef && manifestVersion.includes("-dev.") && lockRef === manifestVersion && /^(?:github:|git\+https:\/\/github\.com\/|git\+ssh:\/\/git@github\.com[:/])/u.test(lockSpec)
137
+ );
138
+ }
131
139
  function normalizedPathValue(value) {
132
140
  return value.replaceAll("\\", "/").replace(/^\.\//u, "").replace(/\/$/u, "");
133
141
  }
@@ -175,7 +183,7 @@ function collectPackageLockConsistencyIssues(filePath, packageJson, packages, wo
175
183
  const manifestSpec = dependencySpec(packageJson, field, packageName);
176
184
  if (!manifestSpec) continue;
177
185
  const lockSpec = dependencySpec(rootLockEntry ?? {}, field, packageName);
178
- if (lockSpec !== manifestSpec) {
186
+ if (!lockSpec || !dependencySpecsMatch(manifestSpec, lockSpec)) {
179
187
  issues.push({
180
188
  filePath,
181
189
  packageName,
@@ -260,6 +268,40 @@ function createLink(link) {
260
268
  const relativeTarget = relative(dirname(link.linkPath), link.targetPath) || ".";
261
269
  symlinkSync(relativeTarget, link.linkPath, process.platform === "win32" ? "junction" : "dir");
262
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
+ }
263
305
  function ensureLocalWorkspaceLinks(root = workspaceRoot(), options = {}) {
264
306
  const enabled = workspaceLinksEnabled(options.mode, options.env);
265
307
  const links = discoverWorkspaceLinks(root);
@@ -276,6 +318,9 @@ function ensureLocalWorkspaceLinks(root = workspaceRoot(), options = {}) {
276
318
  createLink(link);
277
319
  created.push(link.linkPath);
278
320
  }
321
+ for (const link of links) {
322
+ created.push(...syncPackageBinLinks(link));
323
+ }
279
324
  writeMetadata(root, links);
280
325
  return {
281
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,8 +1,17 @@
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
- const TREESEED_PUBLIC_RELEASE_PACKAGE_NAMES = ["@treeseed/sdk", "@treeseed/core", "@treeseed/cli", "@treeseed/agent"];
14
+ const TREESEED_PUBLIC_RELEASE_PACKAGE_NAMES = ["@treeseed/sdk", "@treeseed/ui", "@treeseed/core", "@treeseed/admin", "@treeseed/cli", "@treeseed/agent"];
6
15
  function parseSemver(version) {
7
16
  const match = String(version).trim().match(/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/);
8
17
  if (!match) {
@@ -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,12 +190,29 @@ 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 ?? {} },
178
212
  stdio: options.capture ? "pipe" : "inherit",
179
213
  encoding: "utf8",
180
- timeout: options.timeoutMs
214
+ timeout: options.timeoutMs,
215
+ maxBuffer: options.maxBuffer ?? 1024 * 1024 * 32
181
216
  });
182
217
  if (result.status !== 0) {
183
218
  const message = (result.error?.message ? `${result.error.message}
@@ -187,10 +222,10 @@ function run(command, args, options = {}) {
187
222
  return (result.stdout ?? "").trim();
188
223
  }
189
224
  function canResolveGitRef(baseRef, cwd = workspaceRoot()) {
190
- const result = spawnSync("git", ["rev-parse", "--verify", baseRef], {
225
+ const result = runTreeseedGit(["rev-parse", "--verify", baseRef], {
191
226
  cwd,
192
- stdio: "pipe",
193
- encoding: "utf8"
227
+ mode: "read",
228
+ allowFailure: true
194
229
  });
195
230
  return result.status === 0;
196
231
  }
@@ -212,7 +247,7 @@ function changedWorkspaceFiles(baseRef, cwd = workspaceRoot()) {
212
247
  diffCommands.unshift(["diff", "--name-only", resolvedBaseRef, "HEAD"]);
213
248
  }
214
249
  for (const args of diffCommands) {
215
- const output = run("git", args, { cwd, capture: true });
250
+ const output = runGit(args, { cwd, capture: true });
216
251
  for (const line of output.split("\n").map((entry) => entry.trim()).filter(Boolean)) {
217
252
  changedFiles.add(line);
218
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" }),