@treeseed/sdk 0.11.0 → 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 (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 +627 -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 +63 -0
  180. package/dist/platform/desired-state.js +1021 -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
@@ -22,7 +22,7 @@
22
22
  "publisher": {
23
23
  "id": "treeseed",
24
24
  "name": "TreeSeed",
25
- "url": "https://treeseed.ai"
25
+ "url": "https://treeseed.dev"
26
26
  },
27
27
  "publisherVerified": true,
28
28
  "templateVersion": "1.0.0",
@@ -206,7 +206,7 @@
206
206
  "publisher": {
207
207
  "id": "treeseed",
208
208
  "name": "TreeSeed",
209
- "url": "https://treeseed.ai"
209
+ "url": "https://treeseed.dev"
210
210
  },
211
211
  "publisherVerified": true,
212
212
  "templateVersion": "1.0.0",
@@ -390,7 +390,7 @@
390
390
  "publisher": {
391
391
  "id": "treeseed",
392
392
  "name": "TreeSeed",
393
- "url": "https://treeseed.ai"
393
+ "url": "https://treeseed.dev"
394
394
  },
395
395
  "publisherVerified": true,
396
396
  "templateVersion": "1.0.0",
@@ -574,7 +574,7 @@
574
574
  "publisher": {
575
575
  "id": "treeseed",
576
576
  "name": "TreeSeed",
577
- "url": "https://treeseed.ai"
577
+ "url": "https://treeseed.dev"
578
578
  },
579
579
  "publisherVerified": true,
580
580
  "templateVersion": "0.1.0",
@@ -4,12 +4,22 @@ export declare const AGENT_MESSAGE_STATUSES: readonly ["pending", "claimed", "co
4
4
  export declare const AGENT_RUN_STATUSES: readonly ["running", "completed", "failed", "waiting"];
5
5
  export declare const AGENT_HANDLER_KINDS: readonly ["planner", "architect", "engineer", "notifier", "researcher", "reviewer", "releaser"];
6
6
  export declare const AGENT_CLI_ALLOW_TOOLS: readonly ["shell(git)", "shell(npm)", "web"];
7
+ export declare const EXECUTION_RESOURCE_NEED_KINDS: readonly ["repository", "treedx_workspace", "workflow", "secret", "external_issue", "external_job"];
8
+ export declare const EXECUTION_PROVIDER_KINDS: readonly ["ai_model", "human_issue_queue", "deterministic_workflow", "local_process"];
9
+ export declare const EXECUTION_RUN_STATUSES: readonly ["accepted", "running", "waiting", "blocked", "completed", "returned", "failed", "cancelled"];
10
+ export declare const EXECUTION_PROVIDER_PRESSURE_STATES: readonly ["idle", "normal", "busy", "throttled", "exhausted"];
11
+ export declare const EXECUTION_PROVIDER_QUOTA_VISIBILITIES: readonly ["opaque", "partial", "exact"];
7
12
  export type AgentTriggerKind = (typeof AGENT_TRIGGER_KINDS)[number];
8
13
  export type AgentPermissionOperation = (typeof AGENT_PERMISSION_OPERATIONS)[number];
9
14
  export type AgentMessageStatus = (typeof AGENT_MESSAGE_STATUSES)[number];
10
15
  export type AgentRunStatus = (typeof AGENT_RUN_STATUSES)[number];
11
16
  export type AgentHandlerKind = string;
12
17
  export type AgentCliAllowTool = (typeof AGENT_CLI_ALLOW_TOOLS)[number];
18
+ export type ExecutionResourceNeedKind = (typeof EXECUTION_RESOURCE_NEED_KINDS)[number] | string;
19
+ export type ExecutionProviderKind = (typeof EXECUTION_PROVIDER_KINDS)[number] | string;
20
+ export type ExecutionRunStatus = (typeof EXECUTION_RUN_STATUSES)[number];
21
+ export type ExecutionProviderPressure = (typeof EXECUTION_PROVIDER_PRESSURE_STATES)[number];
22
+ export type ExecutionProviderQuotaVisibility = (typeof EXECUTION_PROVIDER_QUOTA_VISIBILITIES)[number];
13
23
  export interface AgentTriggerConfig {
14
24
  type: AgentTriggerKind;
15
25
  cron?: string;
@@ -22,10 +32,58 @@ export interface AgentPermissionConfig {
22
32
  model: string;
23
33
  operations: AgentPermissionOperation[];
24
34
  }
35
+ export interface AgentContentPermission {
36
+ model: string;
37
+ operations: Array<'read' | 'create' | 'update' | 'link' | 'comment' | string>;
38
+ filters?: Record<string, unknown>;
39
+ }
40
+ export interface AgentModePermissionPolicy {
41
+ content?: {
42
+ read?: AgentContentPermission[];
43
+ write?: AgentContentPermission[];
44
+ };
45
+ repository?: {
46
+ readPaths?: string[];
47
+ writePaths?: string[];
48
+ allowCodeMutation?: boolean;
49
+ };
50
+ network?: {
51
+ allowWeb?: boolean;
52
+ allowedDomains?: string[];
53
+ };
54
+ shell?: {
55
+ allowCommands?: boolean;
56
+ allowedCommands?: string[];
57
+ deniedCommands?: string[];
58
+ };
59
+ }
60
+ export interface AgentPermissionPolicy {
61
+ modes?: {
62
+ planning?: AgentModePermissionPolicy;
63
+ acting?: AgentModePermissionPolicy;
64
+ };
65
+ }
25
66
  export interface AgentOutputContract {
26
67
  messageTypes: string[];
27
68
  modelMutations: string[];
28
69
  }
70
+ export interface AgentToolPolicy {
71
+ allowed: string[];
72
+ }
73
+ export interface AgentContentScope {
74
+ models: string[];
75
+ actions?: import('../content-operations.js').TreeseedContentAction[];
76
+ books?: string[];
77
+ paths?: string[];
78
+ relations?: string[];
79
+ }
80
+ export interface AgentContentAccessPolicy {
81
+ read?: AgentContentScope;
82
+ write?: AgentContentScope;
83
+ commit?: {
84
+ allowed: boolean;
85
+ };
86
+ }
29
87
  export interface AgentExecutionConfig {
30
88
  provider?: string;
31
89
  model?: string;
@@ -73,6 +131,195 @@ export interface AgentProviderProfile {
73
131
  disallowedRegions?: string[];
74
132
  fallbackPolicy: AgentProviderFallbackPolicy;
75
133
  }
134
+ export interface ExecutionResourceNeed {
135
+ kind: ExecutionResourceNeedKind;
136
+ operations: string[];
137
+ paths?: string[];
138
+ required?: boolean;
139
+ metadata?: Record<string, unknown>;
140
+ }
141
+ export interface ExecutionCapabilityDemand {
142
+ required: string[];
143
+ preferred?: string[];
144
+ mode: 'planning' | 'acting';
145
+ resourceNeeds?: ExecutionResourceNeed[];
146
+ outputTypes?: string[];
147
+ metadata?: Record<string, unknown>;
148
+ }
149
+ export interface ExecutionCapabilitySupply {
150
+ capacityProviderId: string;
151
+ executionProviderId: string;
152
+ kind: ExecutionProviderKind;
153
+ capabilities: string[];
154
+ aliases?: string[];
155
+ grants: string[];
156
+ availability?: Record<string, unknown>;
157
+ pressure?: ExecutionProviderPressure;
158
+ maxConcurrentAssignments?: number;
159
+ nativeUnit?: string;
160
+ quotaVisibility?: ExecutionProviderQuotaVisibility;
161
+ metadata?: Record<string, unknown>;
162
+ }
163
+ export interface AgentExpectedOutput {
164
+ type: string;
165
+ required: boolean;
166
+ description?: string;
167
+ schema?: Record<string, unknown>;
168
+ }
169
+ export interface AgentWorkPackageConstraints {
170
+ mode: 'planning' | 'acting';
171
+ requiredCapabilities: string[];
172
+ allowedPaths?: string[];
173
+ forbiddenPaths?: string[];
174
+ allowedOperations?: string[];
175
+ deadline?: string | null;
176
+ maxAttempts?: number | null;
177
+ metadata?: Record<string, unknown>;
178
+ }
179
+ export type AgentHandlerAlgorithmKind = 'plan' | 'research' | 'act' | 'review' | 'report';
180
+ export type AgentWorkPackageKind = AgentHandlerAlgorithmKind | string;
181
+ export interface AgentInputSelector {
182
+ source: string;
183
+ path?: string;
184
+ required?: boolean;
185
+ metadata?: Record<string, unknown>;
186
+ }
187
+ export interface AgentOutputTemplate {
188
+ type: string;
189
+ template?: string;
190
+ required?: boolean;
191
+ metadata?: Record<string, unknown>;
192
+ }
193
+ export interface AgentReviewCriterion {
194
+ id: string;
195
+ description: string;
196
+ required?: boolean;
197
+ metadata?: Record<string, unknown>;
198
+ }
199
+ export interface AgentPlanningPolicy {
200
+ prioritization?: string;
201
+ maxCandidates?: number;
202
+ metadata?: Record<string, unknown>;
203
+ }
204
+ export interface AgentReportTemplate {
205
+ kind: string;
206
+ title?: string;
207
+ sections?: string[];
208
+ metadata?: Record<string, unknown>;
209
+ }
210
+ export interface AgentHandlerConfig {
211
+ workPackageKind?: AgentWorkPackageKind;
212
+ domain?: string;
213
+ inputSelectors?: AgentInputSelector[];
214
+ outputTemplates?: AgentOutputTemplate[];
215
+ reviewCriteria?: AgentReviewCriterion[];
216
+ planningPolicy?: AgentPlanningPolicy;
217
+ reportTemplate?: AgentReportTemplate;
218
+ delegation?: {
219
+ required?: boolean;
220
+ allowedProviderKinds?: string[];
221
+ reason?: string;
222
+ };
223
+ resourceNeeds?: ExecutionResourceNeed[];
224
+ metadata?: Record<string, unknown>;
225
+ }
226
+ export interface AgentWorkPackage {
227
+ kind: AgentWorkPackageKind;
228
+ title: string;
229
+ summary: string;
230
+ instructions: string;
231
+ context: Record<string, unknown>;
232
+ expectedOutputs: AgentExpectedOutput[];
233
+ constraints: AgentWorkPackageConstraints;
234
+ metadata?: Record<string, unknown>;
235
+ }
236
+ export interface ExecutionProviderDescriptor {
237
+ id: string;
238
+ kind: ExecutionProviderKind;
239
+ capabilities: string[];
240
+ capabilityAliases?: string[];
241
+ nativeUnit: string;
242
+ quotaVisibility: ExecutionProviderQuotaVisibility;
243
+ maxConcurrentAssignments: number;
244
+ supportsAsync: boolean;
245
+ supportsCancel: boolean;
246
+ supportsResume: boolean;
247
+ supportsUsage: boolean;
248
+ supportsArtifacts: boolean;
249
+ metadata?: Record<string, unknown>;
250
+ }
251
+ export interface ExecutionProviderObserveInput {
252
+ capacityProviderId?: string | null;
253
+ executionProviderId?: string | null;
254
+ runnerId?: string | null;
255
+ activeAssignmentIds?: string[];
256
+ metadata?: Record<string, unknown>;
257
+ }
258
+ export interface ExecutionProviderObservation {
259
+ descriptor?: ExecutionProviderDescriptor;
260
+ supply?: ExecutionCapabilitySupply;
261
+ pressure?: ExecutionProviderPressure;
262
+ available?: boolean;
263
+ activeAssignmentCount?: number;
264
+ blockedReason?: string | null;
265
+ metadata?: Record<string, unknown>;
266
+ }
267
+ export interface ExecutionPreparationResult {
268
+ accepted: boolean;
269
+ summary: string;
270
+ retryable?: boolean;
271
+ code?: string | null;
272
+ metadata?: Record<string, unknown>;
273
+ }
274
+ export interface ExecutionRunRef {
275
+ assignmentId: string;
276
+ executionProviderId?: string | null;
277
+ runId: string;
278
+ externalRef?: string | null;
279
+ externalUrl?: string | null;
280
+ leaseToken?: string | null;
281
+ runnerId?: string | null;
282
+ metadata?: Record<string, unknown>;
283
+ }
284
+ export interface ExecutionUsageActual {
285
+ kind: string;
286
+ unit: string;
287
+ amount: number;
288
+ source?: string | null;
289
+ partial?: boolean;
290
+ metadata?: Record<string, unknown>;
291
+ }
292
+ export interface ExecutionArtifactRef {
293
+ kind: string;
294
+ name?: string | null;
295
+ uri?: string | null;
296
+ externalUrl?: string | null;
297
+ mediaType?: string | null;
298
+ digest?: string | null;
299
+ metadata?: Record<string, unknown>;
300
+ }
301
+ export interface ExecutionWorkspaceContext {
302
+ repoRoot?: string | null;
303
+ workspaceId?: string | null;
304
+ accessMode?: string | null;
305
+ allowedPaths?: string[];
306
+ forbiddenPaths?: string[];
307
+ capabilityHandleIds?: string[];
308
+ metadata?: Record<string, unknown>;
309
+ }
310
+ export interface ExecutionRunSnapshot {
311
+ status: ExecutionRunStatus;
312
+ summary: string;
313
+ runId?: string | null;
314
+ externalRef?: string | null;
315
+ externalUrl?: string | null;
316
+ outputs?: Record<string, unknown>;
317
+ usage?: ExecutionUsageActual[];
318
+ artifacts?: ExecutionArtifactRef[];
319
+ retryable?: boolean;
320
+ code?: string | null;
321
+ metadata?: Record<string, unknown>;
322
+ }
76
323
  export interface AgentTriggerPolicy {
77
324
  maxRunsPerCycle?: number;
78
325
  messageBatchSize?: number;
@@ -85,6 +332,9 @@ export interface AgentCliOptions {
85
332
  export interface AgentRuntimeSpec {
86
333
  slug: string;
87
334
  handler: AgentHandlerKind;
335
+ projectAgentClassId?: string;
336
+ projectAgentClassSlug?: string;
337
+ handlerConfig?: AgentHandlerConfig;
88
338
  enabled: boolean;
89
339
  systemPrompt: string;
90
340
  persona: string;
@@ -92,6 +342,12 @@ export interface AgentRuntimeSpec {
92
342
  triggers: AgentTriggerConfig[];
93
343
  triggerPolicy?: AgentTriggerPolicy;
94
344
  permissions: AgentPermissionConfig[];
345
+ permissionPolicy?: AgentPermissionPolicy;
346
+ tools: AgentToolPolicy;
347
+ contentAccess?: AgentContentAccessPolicy;
348
+ context?: {
349
+ queries?: import('../graph/context-query-contracts.js').DeclarativeContextQuery[];
350
+ };
95
351
  execution: AgentExecutionConfig;
96
352
  outputs: AgentOutputContract;
97
353
  }
@@ -30,11 +30,52 @@ const AGENT_CLI_ALLOW_TOOLS = [
30
30
  "shell(npm)",
31
31
  "web"
32
32
  ];
33
+ const EXECUTION_RESOURCE_NEED_KINDS = [
34
+ "repository",
35
+ "treedx_workspace",
36
+ "workflow",
37
+ "secret",
38
+ "external_issue",
39
+ "external_job"
40
+ ];
41
+ const EXECUTION_PROVIDER_KINDS = [
42
+ "ai_model",
43
+ "human_issue_queue",
44
+ "deterministic_workflow",
45
+ "local_process"
46
+ ];
47
+ const EXECUTION_RUN_STATUSES = [
48
+ "accepted",
49
+ "running",
50
+ "waiting",
51
+ "blocked",
52
+ "completed",
53
+ "returned",
54
+ "failed",
55
+ "cancelled"
56
+ ];
57
+ const EXECUTION_PROVIDER_PRESSURE_STATES = [
58
+ "idle",
59
+ "normal",
60
+ "busy",
61
+ "throttled",
62
+ "exhausted"
63
+ ];
64
+ const EXECUTION_PROVIDER_QUOTA_VISIBILITIES = [
65
+ "opaque",
66
+ "partial",
67
+ "exact"
68
+ ];
33
69
  export {
34
70
  AGENT_CLI_ALLOW_TOOLS,
35
71
  AGENT_HANDLER_KINDS,
36
72
  AGENT_MESSAGE_STATUSES,
37
73
  AGENT_PERMISSION_OPERATIONS,
38
74
  AGENT_RUN_STATUSES,
39
- AGENT_TRIGGER_KINDS
75
+ AGENT_TRIGGER_KINDS,
76
+ EXECUTION_PROVIDER_KINDS,
77
+ EXECUTION_PROVIDER_PRESSURE_STATES,
78
+ EXECUTION_PROVIDER_QUOTA_VISIBILITIES,
79
+ EXECUTION_RESOURCE_NEED_KINDS,
80
+ EXECUTION_RUN_STATUSES
40
81
  };
@@ -3,6 +3,7 @@ export type TreeseedVerifyDriverOptions = {
3
3
  packageRoot?: string;
4
4
  driver?: TreeseedVerifyDriver;
5
5
  eventName?: string;
6
+ localTreeseedExtraSiblingDependencies?: string[];
6
7
  write?: (message: string, stream?: 'stdout' | 'stderr') => void;
7
8
  runCommand?: (command: string, args: string[], cwd: string) => number;
8
9
  checkCommand?: (command: string, args: string[], cwd: string) => {
@@ -1,10 +1,13 @@
1
- import { existsSync, mkdtempSync, readdirSync, readFileSync, writeFileSync } from "node:fs";
1
+ #!/usr/bin/env node
2
+ import { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
2
3
  import * as childProcess from "node:child_process";
3
4
  import { basename, relative, resolve } from "node:path";
4
5
  import { tmpdir } from "node:os";
5
6
  import { fileURLToPath } from "node:url";
6
7
  import { createTreeseedManagedToolEnv, resolveTreeseedToolBinary } from "./managed-dependencies.js";
7
8
  const defaultActUbuntuLatestImage = "catthehacker/ubuntu:act-latest";
9
+ const actLockStaleAfterMs = 2 * 60 * 60 * 1e3;
10
+ const actLockPollMs = 500;
8
11
  function defaultWrite(message, stream = "stdout") {
9
12
  if (!message) return;
10
13
  (stream === "stderr" ? process.stderr : process.stdout).write(`${message}
@@ -41,14 +44,116 @@ function readPackageManifest(packageJsonPath) {
41
44
  return null;
42
45
  }
43
46
  }
47
+ function allocateActServerPorts() {
48
+ const result = childProcess.spawnSync(process.execPath, [
49
+ "-e",
50
+ `const net = require('node:net');
51
+ const servers = [net.createServer(), net.createServer()];
52
+ const ports = [];
53
+ let remaining = servers.length;
54
+ function fail(error) {
55
+ console.error(error && error.stack ? error.stack : String(error));
56
+ process.exit(1);
57
+ }
58
+ for (const server of servers) {
59
+ server.once('error', fail);
60
+ server.listen(0, '127.0.0.1', () => {
61
+ const address = server.address();
62
+ if (!address || typeof address === 'string') fail(new Error('Unable to allocate TCP port.'));
63
+ ports.push(address.port);
64
+ server.close(() => {
65
+ remaining -= 1;
66
+ if (remaining === 0) {
67
+ console.log(JSON.stringify(ports));
68
+ }
69
+ });
70
+ });
71
+ }`
72
+ ], {
73
+ encoding: "utf8",
74
+ stdio: ["ignore", "pipe", "pipe"]
75
+ });
76
+ if (result.status !== 0) {
77
+ const detail = `${result.stderr ?? ""}
78
+ ${result.stdout ?? ""}`.trim();
79
+ throw new Error(`Unable to allocate local act server ports.${detail ? `
80
+ ${detail}` : ""}`);
81
+ }
82
+ const ports = JSON.parse(result.stdout.trim());
83
+ if (!Array.isArray(ports) || ports.length !== 2 || ports.some((port) => !Number.isInteger(port) || port <= 0)) {
84
+ throw new Error(`Unable to allocate local act server ports: ${result.stdout.trim()}`);
85
+ }
86
+ return {
87
+ artifactServerPort: String(ports[0]),
88
+ cacheServerPort: String(ports[1])
89
+ };
90
+ }
44
91
  function createActArgs(eventName, workflowPath) {
45
92
  const image = process.env.TREESEED_VERIFY_ACT_UBUNTU_LATEST_IMAGE?.trim() || defaultActUbuntuLatestImage;
46
- const args = ["act", eventName, "-W", workflowPath, "-j", "verify"];
93
+ const ports = allocateActServerPorts();
94
+ const args = [
95
+ "act",
96
+ eventName,
97
+ "-W",
98
+ workflowPath,
99
+ "-j",
100
+ "verify",
101
+ "--artifact-server-port",
102
+ ports.artifactServerPort,
103
+ "--cache-server-port",
104
+ ports.cacheServerPort
105
+ ];
47
106
  if (image) {
48
107
  args.push("-P", `ubuntu-latest=${image}`);
49
108
  }
50
109
  return args;
51
110
  }
111
+ function sleepSync(ms) {
112
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
113
+ }
114
+ function acquireActLock() {
115
+ const lockDir = resolve(tmpdir(), "treeseed-verify-act.lock");
116
+ const owner = `${process.pid}:${Date.now()}`;
117
+ while (true) {
118
+ try {
119
+ mkdirSync(lockDir);
120
+ writeFileSync(resolve(lockDir, "owner"), owner, "utf8");
121
+ return () => {
122
+ try {
123
+ const currentOwner = readFileSync(resolve(lockDir, "owner"), "utf8");
124
+ if (currentOwner === owner) {
125
+ rmSync(lockDir, { recursive: true, force: true });
126
+ }
127
+ } catch {
128
+ }
129
+ };
130
+ } catch (error) {
131
+ const code = error.code;
132
+ if (code !== "EEXIST") {
133
+ throw error;
134
+ }
135
+ try {
136
+ const ageMs = Date.now() - statSync(lockDir).mtimeMs;
137
+ if (ageMs > actLockStaleAfterMs) {
138
+ rmSync(lockDir, { recursive: true, force: true });
139
+ continue;
140
+ }
141
+ } catch {
142
+ rmSync(lockDir, { recursive: true, force: true });
143
+ continue;
144
+ }
145
+ sleepSync(actLockPollMs);
146
+ }
147
+ }
148
+ }
149
+ function runActCommand(runCommand, command, args, cwd) {
150
+ const releaseLock = acquireActLock();
151
+ try {
152
+ return runCommand(command, args, cwd);
153
+ } finally {
154
+ releaseLock();
155
+ }
156
+ }
52
157
  function createWorkspaceActWorkflow(options) {
53
158
  const relativePackageRoot = relative(options.workspaceRoot, options.packageRoot).replace(/\\/g, "/");
54
159
  const siblingLinkCommands = options.localTreeseedSiblingDependencies.map((packageName) => {
@@ -66,6 +171,20 @@ function createWorkspaceActWorkflow(options) {
66
171
  `ln -s ${linkTarget} ${linkParent}/${packageShortName}`
67
172
  ].join("\n");
68
173
  }).join("\n");
174
+ const npmRetryFunction = [
175
+ "treeseed_npm_retry() {",
176
+ " attempt=1",
177
+ ' until npm "$@"; do',
178
+ " status=$?",
179
+ ' if test "$attempt" -ge 3; then',
180
+ ' return "$status"',
181
+ " fi",
182
+ ' echo "npm $* failed with $status; retrying in $((attempt * 5))s" >&2',
183
+ " sleep $((attempt * 5))",
184
+ " attempt=$((attempt + 1))",
185
+ " done",
186
+ "}"
187
+ ].join("\n");
69
188
  const siblingPreparationCommands = options.localTreeseedSiblingDependencies.map((packageName) => {
70
189
  const packageDir = `packages/${packageName.split("/")[1]}`;
71
190
  const manifest = readPackageManifest(resolve(options.workspaceRoot, packageDir, "package.json"));
@@ -74,9 +193,9 @@ function createWorkspaceActWorkflow(options) {
74
193
  }
75
194
  const commands = [
76
195
  `if test -f ${packageDir}/package-lock.json; then`,
77
- ` npm --prefix ${packageDir} ci --workspaces=false`,
196
+ ` treeseed_npm_retry --prefix ${packageDir} ci --workspaces=false`,
78
197
  "else",
79
- ` npm --prefix ${packageDir} install --workspaces=false --no-audit --no-fund`,
198
+ ` treeseed_npm_retry --prefix ${packageDir} install --workspaces=false --no-audit --no-fund`,
80
199
  "fi"
81
200
  ];
82
201
  if (manifest.scripts?.["build:dist"]) {
@@ -86,6 +205,7 @@ function createWorkspaceActWorkflow(options) {
86
205
  }).filter((command) => Boolean(command)).join("\n");
87
206
  const workflowRoot = mkdtempSync(resolve(tmpdir(), "treeseed-verify-act-"));
88
207
  const workflowPath = resolve(workflowRoot, "verify.yml");
208
+ const isolatedPackageVerifyEnv = process.env.TREESEED_VERIFY_PACKAGE_ISOLATED === "1" ? ' TREESEED_VERIFY_PACKAGE_ISOLATED: "1"\n' : "";
89
209
  writeFileSync(
90
210
  workflowPath,
91
211
  `name: Treeseed Local Verify
@@ -104,7 +224,7 @@ jobs:
104
224
  TREESEED_STAGE_WAIT_MODE: skip
105
225
  TREESEED_AGENT_DISABLE_GIT: "true"
106
226
  TREESEED_FIXTURE_ID: treeseed-working-site
107
- steps:
227
+ ${isolatedPackageVerifyEnv} steps:
108
228
  - name: Checkout
109
229
  uses: actions/checkout@v4
110
230
  with:
@@ -121,17 +241,21 @@ jobs:
121
241
  ${siblingPreparationCommands ? ` - name: Prepare sibling packages
122
242
  working-directory: .
123
243
  run: |
244
+ ${npmRetryFunction.split("\n").map((line) => ` ${line}`).join("\n")}
124
245
  ${siblingPreparationCommands.split("\n").map((line) => ` ${line}`).join("\n")}
125
246
 
126
247
  ` : ""} - name: Install dependencies
127
248
  run: |
249
+ ${npmRetryFunction.split("\n").map((line) => ` ${line}`).join("\n")}
128
250
  node -e "const fs = require('fs'); const p = JSON.parse(fs.readFileSync('package.json', 'utf8')); if (p.scripts) delete p.scripts.prepare; fs.writeFileSync('package.json', JSON.stringify(p, null, '\\t') + '\\n');"
129
251
  if test -f package-lock.json; then
130
- npm ci --workspaces=false
252
+ treeseed_npm_retry ci --workspaces=false
131
253
  else
132
- npm install --workspaces=false --no-audit --no-fund
254
+ treeseed_npm_retry install --workspaces=false --no-audit --no-fund
255
+ fi
256
+ if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
257
+ git checkout -- package.json
133
258
  fi
134
- git checkout -- package.json || true
135
259
 
136
260
  ${siblingLinkCommands ? ` - name: Link local Treeseed dependencies
137
261
  run: |
@@ -167,7 +291,7 @@ function findWorkspaceRoot(packageRoot) {
167
291
  current = parent;
168
292
  }
169
293
  }
170
- function resolveLocalWorkspaceContext(packageRoot) {
294
+ function resolveLocalWorkspaceContext(packageRoot, extraSiblingDependencies = []) {
171
295
  const currentManifest = readPackageManifest(resolve(packageRoot, "package.json"));
172
296
  const currentPackageName = typeof currentManifest?.name === "string" ? currentManifest.name : null;
173
297
  const workspace = findWorkspaceRoot(packageRoot);
@@ -199,7 +323,12 @@ function resolveLocalWorkspaceContext(packageRoot) {
199
323
  ...currentPackage.manifest.devDependencies ?? {},
200
324
  ...currentPackage.manifest.peerDependencies ?? {}
201
325
  };
202
- const localTreeseedSiblingDependencies = Object.keys(declaredDependencies).filter((name) => name.startsWith("@treeseed/")).filter((name) => localTreeseedPackageSet.has(name)).sort();
326
+ const declaredLocalTreeseedSiblingDependencies = Object.keys(declaredDependencies).filter((name) => name.startsWith("@treeseed/")).filter((name) => localTreeseedPackageSet.has(name)).sort();
327
+ const extraLocalTreeseedSiblingDependencies = extraSiblingDependencies.filter((name) => name.startsWith("@treeseed/")).filter((name) => localTreeseedPackageSet.has(name)).sort();
328
+ const localTreeseedSiblingDependencies = [
329
+ ...declaredLocalTreeseedSiblingDependencies,
330
+ ...extraLocalTreeseedSiblingDependencies.filter((name) => !declaredLocalTreeseedSiblingDependencies.includes(name))
331
+ ];
203
332
  return {
204
333
  workspaceRoot: workspace.workspaceRoot,
205
334
  currentPackageName: currentPackage.manifest.name ?? currentPackageName,
@@ -214,7 +343,7 @@ function getTreeseedVerifyDriverStatus(options = {}) {
214
343
  const eventName = options.eventName ?? process.env.TREESEED_VERIFY_EVENT ?? "workflow_dispatch";
215
344
  const inGitHubActions = process.env.GITHUB_ACTIONS === "true";
216
345
  const workflowPresent = existsSync(workflowPath);
217
- const workspace = resolveLocalWorkspaceContext(packageRoot);
346
+ const workspace = resolveLocalWorkspaceContext(packageRoot, options.localTreeseedExtraSiblingDependencies ?? []);
218
347
  const checkCommand = options.checkCommand ?? check;
219
348
  const gh = options.checkCommand ? "gh" : resolveTreeseedToolBinary("gh") ?? "gh";
220
349
  const ghAct = checkCommand(gh, ["act", "--version"], packageRoot);
@@ -268,15 +397,15 @@ function runTreeseedVerifyDriver(options = {}) {
268
397
  eventName: status.eventName,
269
398
  localTreeseedSiblingDependencies: status.localTreeseedSiblingDependencies
270
399
  });
271
- return runCommand(gh, workspaceAct.args, workspaceAct.cwd);
400
+ return runActCommand(runCommand, gh, workspaceAct.args, workspaceAct.cwd);
272
401
  }
273
- return runCommand(gh, createActArgs(status.eventName, ".github/workflows/verify.yml"), status.packageRoot);
402
+ return runActCommand(runCommand, gh, createActArgs(status.eventName, ".github/workflows/verify.yml"), status.packageRoot);
274
403
  }
275
404
  if (status.prefersDirectForLocalWorkspace) {
276
405
  return runCommand("npm", ["run", "verify:direct"], status.packageRoot);
277
406
  }
278
407
  if (status.canUseAct) {
279
- return runCommand(gh, createActArgs(status.eventName, ".github/workflows/verify.yml"), status.packageRoot);
408
+ return runActCommand(runCommand, gh, createActArgs(status.eventName, ".github/workflows/verify.yml"), status.packageRoot);
280
409
  }
281
410
  if (!status.workflowPresent) {
282
411
  write("Treeseed verify warning: package-local verify workflow is missing; falling back to verify:direct.", "stderr");