@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
@@ -4,97 +4,83 @@ import { mkdtempSync, mkdirSync, writeFileSync } from 'node:fs';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { join, resolve } from 'node:path';
6
6
  import { listTemplateProducts, resolveTemplateDefinition } from '../dist/scripts/template-registry-lib.js';
7
-
8
7
  function makeMachineConfigRoot(endpoint) {
9
- const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-template-catalog-'));
10
- const configDir = resolve(root, '.treeseed', 'config');
11
- mkdirSync(configDir, { recursive: true });
12
- writeFileSync(resolve(configDir, 'machine.yaml'), [
13
- 'version: 1',
14
- 'settings:',
15
- ' templates:',
16
- ` catalogEndpoint: ${endpoint}`,
17
- '',
18
- ].join('\n'), 'utf8');
19
- return root;
8
+ const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-template-catalog-'));
9
+ const configDir = resolve(root, '.treeseed', 'config');
10
+ mkdirSync(configDir, { recursive: true });
11
+ writeFileSync(resolve(configDir, 'machine.yaml'), [
12
+ 'version: 1',
13
+ 'settings:',
14
+ ' templates:',
15
+ ` catalogEndpoint: ${endpoint}`,
16
+ '',
17
+ ].join('\n'), 'utf8');
18
+ return root;
20
19
  }
21
-
22
20
  function writeCatalogFixture(root, fileName, items) {
23
- const fixturePath = resolve(root, fileName);
24
- writeFileSync(fixturePath, JSON.stringify({ items }, null, 2), 'utf8');
25
- return fixturePath;
21
+ const fixturePath = resolve(root, fileName);
22
+ writeFileSync(fixturePath, JSON.stringify({ items }, null, 2), 'utf8');
23
+ return fixturePath;
26
24
  }
27
-
28
25
  function writeCatalogCache(root, endpoint, items) {
29
- const cacheDir = resolve(root, '.treeseed', 'cache');
30
- mkdirSync(cacheDir, { recursive: true });
31
- writeFileSync(resolve(cacheDir, 'template-catalog.json'), JSON.stringify({
32
- endpoint,
33
- fetchedAt: '2026-04-08T00:00:00.000Z',
34
- items,
35
- }, null, 2), 'utf8');
26
+ const cacheDir = resolve(root, '.treeseed', 'cache');
27
+ mkdirSync(cacheDir, { recursive: true });
28
+ writeFileSync(resolve(cacheDir, 'template-catalog.json'), JSON.stringify({
29
+ endpoint,
30
+ fetchedAt: '2026-04-08T00:00:00.000Z',
31
+ items,
32
+ }, null, 2), 'utf8');
36
33
  }
37
-
38
34
  const starterTemplate = {
39
- id: 'fixture-template',
40
- displayName: 'Fixture Template',
41
- description: 'Starter',
42
- summary: 'Starter summary',
43
- status: 'live',
44
- category: 'starter',
45
- publisher: {
46
- id: 'treeseed',
47
- name: 'TreeSeed',
48
- },
49
- templateVersion: '1.0.0',
50
- templateApiVersion: 1,
51
- minCliVersion: '0.1.1',
52
- minCoreVersion: '0.1.2',
53
- fulfillment: {
54
- source: {
55
- repoUrl: 'https://example.com/repo.git',
56
- directory: 'templates/fixture-template',
57
- ref: 'main',
58
- },
59
- hooksPolicy: 'builtin_only',
60
- supportsReconcile: true,
61
- },
35
+ id: 'fixture-template',
36
+ displayName: 'Fixture Template',
37
+ description: 'Starter',
38
+ summary: 'Starter summary',
39
+ status: 'live',
40
+ category: 'starter',
41
+ publisher: {
42
+ id: 'treeseed',
43
+ name: 'TreeSeed',
44
+ },
45
+ templateVersion: '1.0.0',
46
+ templateApiVersion: 1,
47
+ minCliVersion: '0.1.1',
48
+ minCoreVersion: '0.1.2',
49
+ fulfillment: {
50
+ source: {
51
+ repoUrl: 'https://example.com/repo.git',
52
+ directory: 'templates/fixture-template',
53
+ ref: 'main',
54
+ },
55
+ hooksPolicy: 'builtin_only',
56
+ supportsReconcile: true,
57
+ },
62
58
  };
63
-
64
59
  test('template registry reads the remote catalog from a configured file endpoint and falls back to cache', async () => {
65
- const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-template-catalog-fixture-'));
66
- const fixturePath = writeCatalogFixture(root, 'catalog.json', [starterTemplate]);
67
- const fallbackEndpoint = 'https://127.0.0.1:9/search/templates';
68
- const cwd = makeMachineConfigRoot(`file:${fixturePath}`);
69
-
70
- const remoteProducts = await listTemplateProducts({ cwd, env: {} });
71
- assert.equal(remoteProducts.length, 1);
72
- assert.equal(remoteProducts[0]?.id, 'fixture-template');
73
-
74
- writeCatalogCache(cwd, fallbackEndpoint, [starterTemplate]);
75
-
76
- const warnings = [];
77
- const cachedProducts = await listTemplateProducts({
78
- cwd,
79
- env: {
80
- TREESEED_TEMPLATE_CATALOG_URL: fallbackEndpoint,
81
- },
82
- writeWarning: (message) => warnings.push(message),
83
- });
84
-
85
- assert.equal(cachedProducts.length, 1);
86
- assert.equal(cachedProducts[0]?.id, 'fixture-template');
87
- assert.equal(warnings.length, 1);
88
- assert.match(warnings[0], /Using cached template catalog/);
60
+ const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-template-catalog-fixture-'));
61
+ const fixturePath = writeCatalogFixture(root, 'catalog.json', [starterTemplate]);
62
+ const fallbackEndpoint = 'https://127.0.0.1:9/search/templates';
63
+ const cwd = makeMachineConfigRoot(`file:${fixturePath}`);
64
+ const remoteProducts = await listTemplateProducts({ cwd, env: {} });
65
+ assert.equal(remoteProducts.length, 1);
66
+ assert.equal(remoteProducts[0]?.id, 'fixture-template');
67
+ writeCatalogCache(cwd, fallbackEndpoint, [starterTemplate]);
68
+ const warnings = [];
69
+ const cachedProducts = await listTemplateProducts({
70
+ cwd,
71
+ env: {
72
+ TREESEED_TEMPLATE_CATALOG_URL: fallbackEndpoint,
73
+ },
74
+ writeWarning: (message) => warnings.push(message),
75
+ });
76
+ assert.equal(cachedProducts.length, 1);
77
+ assert.equal(cachedProducts[0]?.id, 'fixture-template');
78
+ assert.equal(warnings.length, 1);
79
+ assert.match(warnings[0], /Using cached template catalog/);
89
80
  });
90
-
91
81
  test('template definition resolution rejects templates missing from the remote catalog', async () => {
92
- const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-template-catalog-empty-'));
93
- const fixturePath = writeCatalogFixture(root, 'empty.json', []);
94
- const cwd = makeMachineConfigRoot(`file:${fixturePath}`);
95
-
96
- await assert.rejects(
97
- () => resolveTemplateDefinition('fixture-template', { cwd, env: {} }),
98
- /Unable to resolve remote template product "fixture-template"\./,
99
- );
82
+ const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-template-catalog-empty-'));
83
+ const fixturePath = writeCatalogFixture(root, 'empty.json', []);
84
+ const cwd = makeMachineConfigRoot(`file:${fixturePath}`);
85
+ await assert.rejects(() => resolveTemplateDefinition('fixture-template', { cwd, env: {} }), /Unable to resolve remote template product "fixture-template"\./);
100
86
  });
@@ -2,7 +2,6 @@ import { spawnSync } from 'node:child_process';
2
2
  import { corePackageRoot, packageScriptPath, spawnNodeBinary, resolveWranglerBin } from '../operations/services/runtime-tools.js';
3
3
  import { applyTreeseedEnvironmentToProcess, assertTreeseedCommandEnvironment } from '../operations/services/config-runtime.js';
4
4
  import { ensureGeneratedWranglerConfig } from '../operations/services/deploy.js';
5
- import { loadTreeseedDeployConfig } from '../platform/deploy-config.js';
6
5
  import { createTenantWatchEntries, isEditablePackageWorkspace, startPollingWatch, stopManagedProcess, writeDevReloadStamp, workspaceSdkRoot, } from '../operations/services/watch-dev.js';
7
6
  const tenantRoot = process.cwd();
8
7
  const cliArgs = process.argv.slice(2);
@@ -12,12 +11,6 @@ let wranglerChild = null;
12
11
  let stopWatching = null;
13
12
  let isStoppingForRebuild = false;
14
13
  let shuttingDown = false;
15
- function shouldEnsureMailpit() {
16
- if (process.env.TREESEED_DEV_FORCE_MAILPIT === '1') {
17
- return true;
18
- }
19
- return loadTreeseedDeployConfig().smtp?.enabled === true;
20
- }
21
14
  function runStep(command, args, { cwd = tenantRoot, env = {}, fatal = true } = {}) {
22
15
  const result = spawnSync(command, args, {
23
16
  stdio: 'inherit',
@@ -63,9 +56,6 @@ function runTenantBuildCycle({ includePackageBuild = false, includeSdkBuild = fa
63
56
  ['aggregate-book', []],
64
57
  ['tenant-d1-migrate-local', []],
65
58
  ];
66
- if (shouldEnsureMailpit()) {
67
- buildScripts.splice(2, 0, ['ensure-mailpit', []]);
68
- }
69
59
  for (const [scriptName, args] of buildScripts) {
70
60
  const ok = runNodeScript(packageScriptPath(scriptName), args, { fatal });
71
61
  if (!ok) {
@@ -107,7 +107,7 @@ async function submitSubscribeForm({ formToken, sessionId, cookieHeader }, email
107
107
  });
108
108
  }
109
109
  async function querySubscribers() {
110
- const query = `SELECT lookup_key AS email, status, json_extract(payload_json, '$.source') AS source FROM runtime_records WHERE record_type = 'subscription' AND lookup_key = '${TEST_EMAIL}'`;
110
+ const query = `SELECT email, created_at FROM subscribers WHERE email = '${TEST_EMAIL}'`;
111
111
  const child = spawnProcess('wrangler', [
112
112
  'd1',
113
113
  'execute',
@@ -173,7 +173,6 @@ function linkTreeseedBins(siteRoot) {
173
173
  for (const [name, relativeTarget] of [
174
174
  ['treeseed', '../@treeseed/cli/dist/cli/main.js'],
175
175
  ['treeseed-agents', '../@treeseed/agent/dist/agents/cli.js'],
176
- ['treeseed-agent-api', '../@treeseed/agent/dist/scripts/treeseed-agent-api.js'],
177
176
  ['treeseed-agent-service', '../@treeseed/agent/dist/scripts/treeseed-agent-service.js'],
178
177
  ]) {
179
178
  symlinkSync(relativeTarget, resolve(binRoot, name));
@@ -123,9 +123,9 @@ try {
123
123
  private: true,
124
124
  type: 'module',
125
125
  scripts: {
126
- 'verify:direct': 'node --input-type=module -e "console.log(\'treeseed-sdk-smoke-verify\')"',
127
- 'verify:local': 'node --input-type=module -e "process.env.TREESEED_VERIFY_DRIVER=\'direct\'; console.log(\'treeseed-sdk-smoke-verify-local\')"',
128
- 'verify:action': 'node --input-type=module -e "process.env.TREESEED_VERIFY_DRIVER=\'act\'; console.log(\'treeseed-sdk-smoke-verify-action\')"',
126
+ 'verify:direct': 'tsx -e "console.log(\'treeseed-sdk-smoke-verify\')"',
127
+ 'verify:local': 'tsx -e "process.env.TREESEED_VERIFY_DRIVER=\'direct\'; console.log(\'treeseed-sdk-smoke-verify-local\')"',
128
+ 'verify:action': 'tsx -e "process.env.TREESEED_VERIFY_DRIVER=\'act\'; console.log(\'treeseed-sdk-smoke-verify-action\')"',
129
129
  },
130
130
  }, null, 2)}\n`, 'utf8');
131
131
  run(process.execPath, ['--input-type=module', '-e', 'await import("@treeseed/sdk/verification");'], installRoot);
@@ -1,5 +1,5 @@
1
1
  import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync, chmodSync } from 'node:fs';
2
- import { basename, dirname, extname, join, relative, resolve } from 'node:path';
2
+ import { dirname, extname, join, relative, resolve } from 'node:path';
3
3
  import { build } from 'esbuild';
4
4
  import ts from 'typescript';
5
5
  import { packageRoot } from './package-tools.js';
@@ -44,7 +44,7 @@ function isTypeScriptSource(filePath) {
44
44
  }
45
45
  async function compileModule(filePath, sourceRoot, outputRoot) {
46
46
  const relativePath = relative(sourceRoot, filePath);
47
- const outputFile = resolve(outputRoot, relativePath.replace(/\.(mjs|ts)$/u, '.js'));
47
+ const outputFile = resolve(outputRoot, relativePath.replace(/\.ts$/u, '.js'));
48
48
  ensureDir(outputFile);
49
49
  await build({
50
50
  entryPoints: [filePath],
@@ -71,12 +71,9 @@ function copyAssetTree(sourceRoot, outputRoot) {
71
71
  }
72
72
  }
73
73
  function transpileScript(filePath) {
74
- if (basename(filePath).startsWith('.ts-run-')) {
75
- return;
76
- }
77
74
  const source = readFileSync(filePath, 'utf8');
78
75
  const relativePath = relative(scriptsRoot, filePath);
79
- const outputFile = resolve(distRoot, 'scripts', relativePath.replace(/\.(mjs|ts)$/u, '.js'));
76
+ const outputFile = resolve(distRoot, 'scripts', relativePath.replace(/\.ts$/u, '.js'));
80
77
  const transformed = extname(filePath) === '.ts'
81
78
  ? ts.transpileModule(source, {
82
79
  compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022 },
@@ -125,7 +122,7 @@ if (existsSync(templateCatalogSourceRoot)) {
125
122
  }
126
123
  for (const filePath of walkFiles(scriptsRoot)) {
127
124
  const extension = extname(filePath);
128
- if (extension === '.ts' || extension === '.mjs')
125
+ if (extension === '.ts')
129
126
  transpileScript(filePath);
130
127
  }
131
128
  emitDeclarations();
@@ -4,7 +4,7 @@ import { tmpdir } from 'node:os';
4
4
  import { dirname, extname, join, resolve } from 'node:path';
5
5
  import { spawnSync } from 'node:child_process';
6
6
  import { corePackageRoot, packageRoot, sdkPackageRoot } from '../operations/services/runtime-tools.js';
7
- const textExtensions = new Set(['.js', '.ts', '.mjs', '.cjs', '.d.js', '.json', '.md']);
7
+ const textExtensions = new Set(['.js', '.ts', '.d.js', '.json', '.md']);
8
8
  const forbiddenPatterns = [
9
9
  /['"`]workspace:[^'"`\n]+['"`]/,
10
10
  /['"`](?:\.\.\/|\.\/)[^'"`\n]*src\/[^'"`\n]*\.(?:[cm]?js|ts|tsx|json|astro|css)['"`]/,
@@ -1,36 +1,45 @@
1
1
  #!/usr/bin/env node
2
-
3
2
  import { existsSync } from 'node:fs';
4
3
  import { spawnSync } from 'node:child_process';
5
4
  import { dirname, resolve } from 'node:path';
5
+ import { tmpdir } from 'node:os';
6
6
  import { fileURLToPath } from 'node:url';
7
-
8
7
  const scriptRoot = dirname(fileURLToPath(import.meta.url));
9
8
  const packageRoot = resolve(scriptRoot, '..');
10
- const sourceRunner = resolve(packageRoot, 'scripts', 'run-ts.mjs');
11
9
  const sourceEntry = resolve(packageRoot, 'src', 'verification.ts');
12
10
  const publishedEntry = resolve(packageRoot, 'dist', 'verification.js');
13
11
  const entrypointCheckOnly = process.env.TREESEED_VERIFY_ENTRYPOINT_CHECK === 'true';
14
-
15
- if (existsSync(sourceRunner) && existsSync(sourceEntry)) {
16
- if (entrypointCheckOnly) {
17
- process.exit(0);
18
- }
19
- const result = spawnSync(process.execPath, [sourceRunner, sourceEntry], {
20
- cwd: process.cwd(),
21
- env: process.env,
22
- stdio: 'inherit',
23
- });
24
- process.exit(result.status ?? 1);
12
+ function withShortTempEnv() {
13
+ if (process.platform === 'win32') {
14
+ return process.env;
15
+ }
16
+ const env = { ...process.env };
17
+ const shortTemp = tmpdir();
18
+ for (const key of ['TMPDIR', 'TMP', 'TEMP']) {
19
+ const value = env[key];
20
+ if (value && value.length > shortTemp.length) {
21
+ env[key] = shortTemp;
22
+ }
23
+ }
24
+ return env;
25
+ }
26
+ if (existsSync(sourceEntry)) {
27
+ if (entrypointCheckOnly) {
28
+ process.exit(0);
29
+ }
30
+ const result = spawnSync('tsx', [sourceEntry], {
31
+ cwd: process.cwd(),
32
+ env: withShortTempEnv(),
33
+ stdio: 'inherit',
34
+ });
35
+ process.exit(result.status ?? 1);
25
36
  }
26
-
27
37
  if (existsSync(publishedEntry)) {
28
- if (entrypointCheckOnly) {
29
- process.exit(0);
30
- }
31
- const { runTreeseedVerifyDriver } = await import('../dist/verification.js');
32
- process.exit(runTreeseedVerifyDriver({ packageRoot: process.cwd() }));
38
+ if (entrypointCheckOnly) {
39
+ process.exit(0);
40
+ }
41
+ const { runTreeseedVerifyDriver } = await import('../dist/verification.js');
42
+ process.exit(runTreeseedVerifyDriver({ packageRoot: process.cwd() }));
33
43
  }
34
-
35
44
  process.stderr.write(`Unable to locate Treeseed SDK verification runtime from ${packageRoot}.\n`);
36
45
  process.exit(1);
@@ -1,40 +1,31 @@
1
1
  import test from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
- import {
4
- createBranchPreviewDeployTarget,
5
- createPersistentDeployTarget,
6
- deployTargetLabel,
7
- loadDeployState,
8
- } from '../dist/scripts/deploy-lib.js';
3
+ import { createBranchPreviewDeployTarget, createPersistentDeployTarget, deployTargetLabel, loadDeployState, } from '../dist/scripts/deploy-lib.js';
9
4
  import { renderDeployWebWorkflow } from '../dist/operations/services/github-automation.js';
10
5
  import { incrementVersion } from '../dist/scripts/workspace-save-lib.js';
11
6
  import { makeTenantRoot } from './cli-test-fixtures.js';
12
-
13
7
  test('persistent and branch targets produce distinct labels', () => {
14
- assert.equal(deployTargetLabel(createPersistentDeployTarget('staging')), 'staging');
15
- assert.equal(deployTargetLabel(createBranchPreviewDeployTarget('feature/one')), 'branch:feature/one');
8
+ assert.equal(deployTargetLabel(createPersistentDeployTarget('staging')), 'staging');
9
+ assert.equal(deployTargetLabel(createBranchPreviewDeployTarget('feature/one')), 'branch:feature/one');
16
10
  });
17
-
18
11
  test('branch preview state derives branch-specific worker names', () => {
19
- const tenantRoot = makeTenantRoot();
20
- const deployConfig = {
21
- cloudflare: { accountId: 'fixture-cloudflare-account-id', workerName: 'treeseed-working-site' },
22
- };
23
- const state = loadDeployState(tenantRoot, deployConfig, { target: createBranchPreviewDeployTarget('feature/preview') });
24
- assert.match(state.workerName, /^treeseed-working-site-feature-preview/);
25
- assert.equal(state.previewEnabled, true);
12
+ const tenantRoot = makeTenantRoot();
13
+ const deployConfig = {
14
+ cloudflare: { accountId: 'fixture-cloudflare-account-id', workerName: 'treeseed-working-site' },
15
+ };
16
+ const state = loadDeployState(tenantRoot, deployConfig, { target: createBranchPreviewDeployTarget('feature/preview') });
17
+ assert.match(state.workerName, /^treeseed-working-site-feature-preview/);
18
+ assert.equal(state.previewEnabled, true);
26
19
  });
27
-
28
20
  test('deploy workflow exposes final web actions only', () => {
29
- const webWorkflow = renderDeployWebWorkflow({ workingDirectory: '.' });
30
- assert.match(webWorkflow, /default: deploy_web/);
31
- assert.match(webWorkflow, /- publish_content/);
32
- assert.doesNotMatch(webWorkflow, /RAILWAY_API_TOKEN/);
33
- assert.doesNotMatch(webWorkflow, /deploy_processing/);
21
+ const webWorkflow = renderDeployWebWorkflow({ workingDirectory: '.' });
22
+ assert.match(webWorkflow, /default: deploy_web/);
23
+ assert.match(webWorkflow, /- publish_content/);
24
+ assert.doesNotMatch(webWorkflow, /RAILWAY_API_TOKEN/);
25
+ assert.doesNotMatch(webWorkflow, /deploy_processing/);
34
26
  });
35
-
36
27
  test('version bump utility supports major, minor, and patch', () => {
37
- assert.equal(incrementVersion('1.2.3', 'patch'), '1.2.4');
38
- assert.equal(incrementVersion('1.2.3', 'minor'), '1.3.0');
39
- assert.equal(incrementVersion('1.2.3', 'major'), '2.0.0');
28
+ assert.equal(incrementVersion('1.2.3', 'patch'), '1.2.4');
29
+ assert.equal(incrementVersion('1.2.3', 'minor'), '1.3.0');
30
+ assert.equal(incrementVersion('1.2.3', 'major'), '2.0.0');
40
31
  });
@@ -388,7 +388,7 @@ function resolveRepositorySlug(repoDir) {
388
388
  function isProductionLikeTarget(repository, siteUrl) {
389
389
  const productionRepositories = new Set(['knowledge-coop/market', 'treeseed-ai/market']);
390
390
  const normalizedSiteUrl = String(siteUrl ?? '').replace(/\/+$/u, '').toLowerCase();
391
- return productionRepositories.has(repository) || ['https://treeseed.ai', 'https://www.treeseed.ai'].includes(normalizedSiteUrl);
391
+ return productionRepositories.has(repository) || ['https://treeseed.dev', 'https://www.treeseed.dev'].includes(normalizedSiteUrl);
392
392
  }
393
393
  async function waitForGitHubWorkflow(repository, headSha, { timeoutMs = 900000 } = {}) {
394
394
  const startedAt = Date.now();
@@ -1,9 +1,15 @@
1
1
  import { packageScriptPath } from '../operations/services/runtime-tools.js';
2
2
  import { packagesWithScript, run, workspaceRoot } from '../operations/services/workspace-tools.js';
3
3
  const root = workspaceRoot();
4
+ process.stderr.write('[workspace-lint] markdown cleanup check start\n');
5
+ const markdownStartedAt = Date.now();
4
6
  run(process.execPath, [packageScriptPath('cleanup-markdown'), '--check'], {
5
7
  cwd: root,
6
8
  });
9
+ process.stderr.write(`[workspace-lint] markdown cleanup check complete after ${((Date.now() - markdownStartedAt) / 1000).toFixed(1)}s\n`);
7
10
  for (const pkg of packagesWithScript('lint', root)) {
11
+ const startedAt = Date.now();
12
+ process.stderr.write(`[workspace-lint] ${pkg.name ?? pkg.dir} lint start\n`);
8
13
  run('npm', ['run', 'lint'], { cwd: pkg.dir });
14
+ process.stderr.write(`[workspace-lint] ${pkg.name ?? pkg.dir} lint complete after ${((Date.now() - startedAt) / 1000).toFixed(1)}s\n`);
9
15
  }
@@ -1,5 +1,90 @@
1
- import { sortWorkspacePackages, workspacePackages, run } from '../operations/services/workspace-tools.js';
1
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
2
+ import { spawnSync } from 'node:child_process';
3
+ import { resolve } from 'node:path';
4
+ import { sortWorkspacePackages, workspacePackages, workspaceRoot, run } from '../operations/services/workspace-tools.js';
2
5
  const packages = sortWorkspacePackages(workspacePackages());
6
+ const root = workspaceRoot();
7
+ function readProcessCommand(pid) {
8
+ try {
9
+ return readFileSync(`/proc/${pid}/cmdline`, 'utf8').replace(/\0/g, ' ').trim()
10
+ || readFileSync(`/proc/${pid}/comm`, 'utf8').trim();
11
+ }
12
+ catch {
13
+ return '';
14
+ }
15
+ }
16
+ function processFdCount(pid) {
17
+ try {
18
+ return readdirSync(`/proc/${pid}/fd`).length;
19
+ }
20
+ catch {
21
+ return null;
22
+ }
23
+ }
24
+ function runningProcesses() {
25
+ if (!existsSync('/proc')) {
26
+ return [];
27
+ }
28
+ return readdirSync('/proc')
29
+ .filter((entry) => /^\d+$/u.test(entry))
30
+ .map((pid) => ({
31
+ pid: Number(pid),
32
+ fdCount: processFdCount(pid),
33
+ command: readProcessCommand(pid),
34
+ }))
35
+ .filter((entry) => entry.command.length > 0);
36
+ }
37
+ function terminate(pid, signal) {
38
+ try {
39
+ process.kill(pid, signal);
40
+ return true;
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ function cleanupStaleWorkspaceVerificationProcesses() {
47
+ const normalizedRoot = resolve(root);
48
+ const stale = runningProcesses().filter((entry) => {
49
+ const command = entry.command;
50
+ if (!command.includes('/.treeseed/worktrees/') || command.includes(normalizedRoot)) {
51
+ return false;
52
+ }
53
+ return /(vitest|release-verify|src\/verification\.ts|workspace-release-test)/u.test(command);
54
+ });
55
+ if (stale.length === 0) {
56
+ return;
57
+ }
58
+ process.stderr.write(`[workspace-release-test] stopping ${stale.length} stale sibling worktree verification process(es) before release tests\n`);
59
+ for (const entry of stale) {
60
+ process.stderr.write(`[workspace-release-test] SIGTERM stale pid ${entry.pid}: ${entry.command.slice(0, 180)}\n`);
61
+ terminate(entry.pid, 'SIGTERM');
62
+ }
63
+ spawnSync(process.execPath, ['-e', 'setTimeout(() => {}, 1000)'], { stdio: 'ignore' });
64
+ for (const entry of stale) {
65
+ try {
66
+ process.kill(entry.pid, 0);
67
+ process.stderr.write(`[workspace-release-test] SIGKILL stale pid ${entry.pid}: ${entry.command.slice(0, 180)}\n`);
68
+ terminate(entry.pid, 'SIGKILL');
69
+ }
70
+ catch {
71
+ // Process exited after SIGTERM.
72
+ }
73
+ }
74
+ }
75
+ function writeFdDiagnostic(label) {
76
+ const rows = runningProcesses()
77
+ .filter((entry) => (entry.fdCount ?? 0) >= 80)
78
+ .sort((left, right) => (right.fdCount ?? 0) - (left.fdCount ?? 0))
79
+ .slice(0, 10);
80
+ if (rows.length === 0) {
81
+ process.stderr.write(`[workspace-release-test] fd ${label}: no process with >=80 open descriptors\n`);
82
+ return;
83
+ }
84
+ process.stderr.write(`[workspace-release-test] fd ${label}: ${rows.map((entry) => `${entry.pid}:${entry.fdCount}:${entry.command.slice(0, 80)}`).join(' | ')}\n`);
85
+ }
86
+ cleanupStaleWorkspaceVerificationProcesses();
87
+ writeFdDiagnostic('before');
3
88
  for (const pkg of packages) {
4
89
  const scripts = pkg.packageJson.scripts ?? {};
5
90
  const scriptName = typeof scripts['test:release'] === 'string'
@@ -10,6 +95,10 @@ for (const pkg of packages) {
10
95
  ? 'test'
11
96
  : null;
12
97
  if (scriptName) {
98
+ const startedAt = Date.now();
99
+ process.stderr.write(`[workspace-release-test] ${pkg.name ?? pkg.dir} ${scriptName} start\n`);
13
100
  run('npm', ['run', scriptName], { cwd: pkg.dir });
101
+ process.stderr.write(`[workspace-release-test] ${pkg.name ?? pkg.dir} ${scriptName} complete after ${((Date.now() - startedAt) / 1000).toFixed(1)}s\n`);
102
+ writeFdDiagnostic(`after ${pkg.name ?? pkg.dir}`);
14
103
  }
15
104
  }
@@ -2,10 +2,16 @@ import { sortWorkspacePackages, workspacePackages, run } from '../operations/ser
2
2
  const packages = sortWorkspacePackages(workspacePackages());
3
3
  for (const pkg of packages) {
4
4
  if (typeof pkg.packageJson.scripts?.['test:unit'] === 'string') {
5
+ const startedAt = Date.now();
6
+ process.stderr.write(`[workspace-test] ${pkg.name ?? pkg.dir} test:unit start\n`);
5
7
  run('npm', ['run', 'test:unit'], { cwd: pkg.dir });
8
+ process.stderr.write(`[workspace-test] ${pkg.name ?? pkg.dir} test:unit complete after ${((Date.now() - startedAt) / 1000).toFixed(1)}s\n`);
6
9
  continue;
7
10
  }
8
11
  if (typeof pkg.packageJson.scripts?.test === 'string') {
12
+ const startedAt = Date.now();
13
+ process.stderr.write(`[workspace-test] ${pkg.name ?? pkg.dir} test start\n`);
9
14
  run('npm', ['run', 'test'], { cwd: pkg.dir });
15
+ process.stderr.write(`[workspace-test] ${pkg.name ?? pkg.dir} test complete after ${((Date.now() - startedAt) / 1000).toFixed(1)}s\n`);
10
16
  }
11
17
  }
@@ -1,4 +1,4 @@
1
- import type { AgentSdk } from './sdk.ts';
1
+ import type { AgentSdk } from './sdk.js';
2
2
  type JsonRecord = Record<string, unknown>;
3
3
  type SdkOperationHandler = (sdk: AgentSdk, input: JsonRecord) => Promise<unknown> | unknown;
4
4
  interface SdkOperationSpec {
@@ -23,22 +23,6 @@ const SDK_OPERATION_SPECS = [
23
23
  },
24
24
  { name: "startWorkDay", aliases: ["start-work-day"], handler: passthrough("startWorkDay") },
25
25
  { name: "closeWorkDay", aliases: ["close-work-day"], handler: passthrough("closeWorkDay") },
26
- { name: "createTask", aliases: ["create-task"], handler: passthrough("createTask") },
27
- { name: "claimTask", aliases: ["claim-task"], handler: passthrough("claimTask") },
28
- {
29
- name: "recordTaskProgress",
30
- aliases: ["record-task-progress"],
31
- handler: passthrough("recordTaskProgress")
32
- },
33
- { name: "completeTask", aliases: ["complete-task"], handler: passthrough("completeTask") },
34
- { name: "failTask", aliases: ["fail-task"], handler: passthrough("failTask") },
35
- { name: "appendTaskEvent", aliases: ["append-task-event"], handler: passthrough("appendTaskEvent") },
36
- { name: "searchTasks", aliases: ["search-tasks"], handler: passthrough("searchTasks") },
37
- {
38
- name: "getManagerContext",
39
- aliases: ["get-manager-context"],
40
- handler: (sdk, input) => sdk.getManagerContext(String(input.taskId ?? input.id ?? ""))
41
- },
42
26
  { name: "createReport", aliases: ["create-report"], handler: passthrough("createReport") },
43
27
  {
44
28
  name: "listAgentSpecs",
@@ -1,4 +1,4 @@
1
- import type { SdkModelDefinition, SdkModelFieldBinding, SdkSortSpec, SdkFilterCondition } from './sdk-types.ts';
1
+ import type { SdkModelDefinition, SdkModelFieldBinding, SdkSortSpec, SdkFilterCondition } from './sdk-types.js';
2
2
  export declare function validateModelFieldAliases(definition: SdkModelDefinition): void;
3
3
  export declare function resolveModelField(definition: SdkModelDefinition, requestedField: string): SdkModelFieldBinding;
4
4
  export declare function readCanonicalFieldValue(definition: SdkModelDefinition, record: Record<string, unknown>, canonicalField: string): unknown;
@@ -1,4 +1,4 @@
1
- import type { SdkContentEntry, SdkFilterCondition, SdkModelDefinition, SdkSortSpec } from './sdk-types.ts';
1
+ import type { SdkContentEntry, SdkFilterCondition, SdkModelDefinition, SdkSortSpec } from './sdk-types.js';
2
2
  export declare function matchesFilter(entry: SdkContentEntry | Record<string, unknown>, filter: SdkFilterCondition, definition?: SdkModelDefinition): boolean;
3
3
  export declare function applyFilters<T extends SdkContentEntry | Record<string, unknown>>(items: T[], filters?: SdkFilterCondition[], definition?: SdkModelDefinition): T[];
4
4
  export declare function applySort<T extends SdkContentEntry | Record<string, unknown>>(items: T[], sort?: SdkSortSpec[], definition?: SdkModelDefinition): T[];