@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
@@ -1,6 +1,6 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
- import { spawnSync } from "node:child_process";
3
+ import { runTreeseedGit } from "./git-runner.js";
4
4
  const SECTION_ORDER = [
5
5
  "Added",
6
6
  "Changed",
@@ -10,10 +10,9 @@ const SECTION_ORDER = [
10
10
  "Dependencies"
11
11
  ];
12
12
  function runGit(repoDir, args) {
13
- const result = spawnSync("git", args, {
13
+ const result = runTreeseedGit(args, {
14
14
  cwd: repoDir,
15
- stdio: "pipe",
16
- encoding: "utf8"
15
+ mode: "read"
17
16
  });
18
17
  if (result.status !== 0) {
19
18
  throw new Error(result.stderr?.trim() || result.stdout?.trim() || `git ${args.join(" ")} failed`);
@@ -0,0 +1,13 @@
1
+ import { type TreeseedProofDriver, type TreeseedProofInput, type TreeseedProofRecord } from './release-proof.js';
2
+ export declare function readProofLedger(root: string): TreeseedProofRecord[];
3
+ export declare function writeProofRecord(root: string, record: TreeseedProofRecord): void;
4
+ export declare function findReusableProof(root: string, input: TreeseedProofInput & {
5
+ requiredDriver?: TreeseedProofDriver;
6
+ }): TreeseedProofRecord | null;
7
+ export declare function invalidateProofs(root: string, predicate: (record: TreeseedProofRecord) => boolean): void;
8
+ export declare function cleanProofLedger(root: string, options: {
9
+ olderThanMs: number;
10
+ now?: number;
11
+ }): {
12
+ removed: number;
13
+ };
@@ -0,0 +1,81 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import {
4
+ computeProofInputHash,
5
+ proofIdFor
6
+ } from "./release-proof.js";
7
+ const PROOF_DIR = ".treeseed/workflow/proofs";
8
+ function proofRoot(root) {
9
+ return resolve(root, PROOF_DIR);
10
+ }
11
+ function proofPath(root, proofId) {
12
+ return resolve(proofRoot(root), `${proofId}.json`);
13
+ }
14
+ function isProofRecord(value) {
15
+ return Boolean(value && typeof value === "object" && value.schemaVersion === 1 && typeof value.proofId === "string" && typeof value.status === "string");
16
+ }
17
+ function readProofLedger(root) {
18
+ const dir = proofRoot(root);
19
+ if (!existsSync(dir)) return [];
20
+ const records = [];
21
+ for (const entry of readdirSync(dir)) {
22
+ if (!entry.endsWith(".json")) continue;
23
+ try {
24
+ const parsed = JSON.parse(readFileSync(resolve(dir, entry), "utf8"));
25
+ if (isProofRecord(parsed)) records.push(parsed);
26
+ } catch {
27
+ }
28
+ }
29
+ return records.sort((left, right) => String(right.finishedAt ?? "").localeCompare(String(left.finishedAt ?? "")));
30
+ }
31
+ function writeProofRecord(root, record) {
32
+ const filePath = proofPath(root, record.proofId);
33
+ mkdirSync(dirname(filePath), { recursive: true });
34
+ writeFileSync(filePath, `${JSON.stringify(record, null, 2)}
35
+ `, "utf8");
36
+ }
37
+ function findReusableProof(root, input) {
38
+ const inputHash = input.inputs.inputHash || computeProofInputHash({
39
+ subject: input.subject,
40
+ driver: input.driver,
41
+ inputs: {
42
+ ...input.inputs,
43
+ dependencyProofIds: [...input.inputs.dependencyProofIds].sort(),
44
+ inputHash: void 0
45
+ }
46
+ });
47
+ const proofId = proofIdFor({
48
+ subject: input.subject,
49
+ driver: input.driver,
50
+ inputs: {
51
+ ...input.inputs,
52
+ inputHash,
53
+ dependencyProofIds: [...input.inputs.dependencyProofIds].sort()
54
+ }
55
+ });
56
+ return readProofLedger(root).find((record) => record.proofId === proofId && record.status === "passed" && record.reusable === true && record.inputs.inputHash === inputHash && record.driver === (input.requiredDriver ?? input.driver)) ?? null;
57
+ }
58
+ function invalidateProofs(root, predicate) {
59
+ for (const record of readProofLedger(root)) {
60
+ if (!predicate(record)) continue;
61
+ rmSync(proofPath(root, record.proofId), { force: true });
62
+ }
63
+ }
64
+ function cleanProofLedger(root, options) {
65
+ const now = options.now ?? Date.now();
66
+ let removed = 0;
67
+ for (const record of readProofLedger(root)) {
68
+ const finished = Date.parse(record.finishedAt ?? record.startedAt);
69
+ if (!Number.isFinite(finished) || now - finished < options.olderThanMs) continue;
70
+ rmSync(proofPath(root, record.proofId), { force: true });
71
+ removed += 1;
72
+ }
73
+ return { removed };
74
+ }
75
+ export {
76
+ cleanProofLedger,
77
+ findReusableProof,
78
+ invalidateProofs,
79
+ readProofLedger,
80
+ writeProofRecord
81
+ };
@@ -0,0 +1,48 @@
1
+ import { type TreeseedPackageAdapter, type TreeseedPackageCommand } from './package-adapters.js';
2
+ import { type TreeseedProofDriver, type TreeseedProofInput, type TreeseedProofRecord } from './release-proof.js';
3
+ export type TreeseedProofTarget = 'local' | 'staging' | 'prod';
4
+ export type TreeseedProofPlanMode = 'plan' | 'run' | 'status' | 'failures' | 'explain';
5
+ export type TreeseedProofPlanSubject = TreeseedProofInput & {
6
+ workflow: string | null;
7
+ command: string | null;
8
+ commandSpec: TreeseedPackageCommand | null;
9
+ authority: 'authoritative' | 'advisory';
10
+ reusableProof: TreeseedProofRecord | null;
11
+ rerunReasons: string[];
12
+ };
13
+ export type TreeseedProofPlan = {
14
+ target: TreeseedProofTarget;
15
+ driver: TreeseedProofDriver;
16
+ subjects: TreeseedProofPlanSubject[];
17
+ summary: {
18
+ subjects: number;
19
+ reusable: number;
20
+ pending: number;
21
+ };
22
+ };
23
+ export declare function hostedWorkflowForPackage(adapter: TreeseedPackageAdapter): string;
24
+ export declare function buildTreeseedProofPlan(input: {
25
+ root: string;
26
+ target?: TreeseedProofTarget;
27
+ driver?: TreeseedProofDriver;
28
+ subject?: string | null;
29
+ }): TreeseedProofPlan;
30
+ export declare function summarizeTreeseedProofLedger(root: string): {
31
+ records: TreeseedProofRecord[];
32
+ latest: TreeseedProofRecord;
33
+ failures: TreeseedProofRecord[];
34
+ slowest: {
35
+ subject: string;
36
+ driver: TreeseedProofDriver;
37
+ durationMs: number | null;
38
+ status: import("./release-proof.js").TreeseedProofStatus;
39
+ reason: string;
40
+ }[];
41
+ summary: {
42
+ records: number;
43
+ passed: number;
44
+ failed: number;
45
+ pending: number;
46
+ reusable: number;
47
+ };
48
+ };
@@ -0,0 +1,195 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { basename, resolve } from "node:path";
4
+ import { discoverTreeseedPackageAdapters } from "./package-adapters.js";
5
+ import { classifyTreeseedGitMode, runTreeseedGitText } from "./git-runner.js";
6
+ import {
7
+ computeProofInputHash
8
+ } from "./release-proof.js";
9
+ import { findReusableProof, readProofLedger } from "./release-proof-ledger.js";
10
+ function runGit(args, cwd) {
11
+ try {
12
+ return runTreeseedGitText(args, {
13
+ cwd,
14
+ mode: classifyTreeseedGitMode(args),
15
+ timeoutMs: 12e4,
16
+ maxBuffer: 1024 * 1024 * 8
17
+ }).trim();
18
+ } catch {
19
+ return null;
20
+ }
21
+ }
22
+ function fileSha256(filePath) {
23
+ if (!existsSync(filePath)) return null;
24
+ return createHash("sha256").update(readFileSync(filePath)).digest("hex");
25
+ }
26
+ function repositoryFor(adapter) {
27
+ const repository = adapter.metadata.repository;
28
+ if (typeof repository === "string" && repository.trim()) return repository.trim();
29
+ if (repository && typeof repository === "object" && !Array.isArray(repository)) {
30
+ const url = repository.url;
31
+ if (typeof url === "string") {
32
+ return url.replace(/^git\+/u, "").replace(/^ssh:\/\/git@github\.com[:/]/u, "").replace(/^git@github\.com:/u, "").replace(/^https:\/\/github\.com\//u, "").replace(/\.git$/u, "").replace(/\/$/u, "");
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ function hostedWorkflowForPackage(adapter) {
38
+ const configured = adapter.metadata.hostedVerifyWorkflow;
39
+ if (typeof configured === "string" && configured.trim()) return configured.trim().replace(/^\.github\/workflows\//u, "");
40
+ const workflowCheck = adapter.releaseChecks.find((check) => check.kind === "github-workflow");
41
+ if (workflowCheck?.detail) return basename(workflowCheck.detail);
42
+ if (adapter.id === "treedx" || adapter.kind === "beam-elixir-rust") return "release-gate.yml";
43
+ return "verify.yml";
44
+ }
45
+ function commandForPackage(adapter, driver) {
46
+ const command = commandSpecForPackage(adapter, driver);
47
+ return command ? [command.command, ...command.args].join(" ") : null;
48
+ }
49
+ function commandSpecForPackage(adapter, driver) {
50
+ if (driver === "act") return adapter.verifyCommands.local ? {
51
+ ...adapter.verifyCommands.local,
52
+ label: "verify:action",
53
+ command: "npm",
54
+ args: ["run", "verify:action"]
55
+ } : null;
56
+ if (driver !== "local") return null;
57
+ return adapter.verifyCommands.release ?? adapter.verifyCommands.local ?? adapter.verifyCommands.fast;
58
+ }
59
+ function subjectForPackage(adapter) {
60
+ return {
61
+ kind: "package",
62
+ id: `package:${adapter.id}`,
63
+ name: adapter.id,
64
+ repoPath: adapter.dir,
65
+ repository: repositoryFor(adapter),
66
+ branch: runGit(["branch", "--show-current"], adapter.dir),
67
+ headSha: runGit(["rev-parse", "HEAD"], adapter.dir)
68
+ };
69
+ }
70
+ function internalDependencyHeadShas(adapter, adaptersByName) {
71
+ const packageJsonPath = resolve(adapter.dir, "package.json");
72
+ if (!existsSync(packageJsonPath)) return {};
73
+ const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8"));
74
+ const sections = ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"];
75
+ const heads = {};
76
+ for (const section of sections) {
77
+ const entries = parsed[section] && typeof parsed[section] === "object" && !Array.isArray(parsed[section]) ? parsed[section] : {};
78
+ for (const name of Object.keys(entries)) {
79
+ const dependency = adaptersByName.get(name);
80
+ if (!dependency) continue;
81
+ heads[name] = runGit(["rev-parse", "HEAD"], dependency.dir);
82
+ }
83
+ }
84
+ return heads;
85
+ }
86
+ function proofInputForPackage(root, adapter, driver, dependencyProofIds, adaptersByName) {
87
+ const workflow = hostedWorkflowForPackage(adapter);
88
+ const dockerfile = adapter.artifacts.find((artifact) => artifact.dockerfile)?.dockerfile;
89
+ const sourceHashes = {
90
+ head: runGit(["rev-parse", "HEAD"], adapter.dir),
91
+ ...Object.fromEntries(Object.entries(internalDependencyHeadShas(adapter, adaptersByName)).map(([name, sha]) => [`dependency:${name}`, sha]))
92
+ };
93
+ const baseInputs = {
94
+ topologyHash: computeProofInputHash({
95
+ packageId: adapter.id,
96
+ kind: adapter.kind,
97
+ workflow,
98
+ command: commandForPackage(adapter, driver),
99
+ artifacts: adapter.artifacts,
100
+ dependencyProofIds
101
+ }),
102
+ packageJsonHash: fileSha256(resolve(adapter.dir, "package.json")),
103
+ lockfileHash: adapter.kind === "node-typescript" ? fileSha256(resolve(adapter.dir, "package-lock.json")) : fileSha256(resolve(adapter.dir, "Cargo.lock")) ?? fileSha256(resolve(adapter.dir, "mix.lock")),
104
+ manifestHash: fileSha256(adapter.manifestPath ?? resolve(adapter.dir, "treeseed.package.yaml")),
105
+ workflowHash: fileSha256(resolve(adapter.dir, ".github", "workflows", workflow)),
106
+ dockerfileHash: dockerfile ? fileSha256(resolve(adapter.dir, dockerfile)) : null,
107
+ sourceHashes,
108
+ dependencyProofIds
109
+ };
110
+ return {
111
+ subject: subjectForPackage(adapter),
112
+ driver,
113
+ inputs: {
114
+ ...baseInputs,
115
+ inputHash: computeProofInputHash({
116
+ root,
117
+ subject: subjectForPackage(adapter),
118
+ driver,
119
+ ...baseInputs
120
+ })
121
+ }
122
+ };
123
+ }
124
+ function selectAdapters(root, subject) {
125
+ const adapters = discoverTreeseedPackageAdapters(root);
126
+ if (!subject) return adapters;
127
+ const normalized = subject.replace(/^package:/u, "");
128
+ return adapters.filter((adapter) => adapter.id === normalized || adapter.name === normalized || `package:${adapter.id}` === subject);
129
+ }
130
+ function buildTreeseedProofPlan(input) {
131
+ const target = input.target ?? "staging";
132
+ const driver = input.driver ?? "github-hosted";
133
+ const subjects = [];
134
+ const proofIds = /* @__PURE__ */ new Map();
135
+ const selectedAdapters = selectAdapters(input.root, input.subject);
136
+ const adaptersByName = new Map(discoverTreeseedPackageAdapters(input.root).flatMap((adapter) => [[adapter.id, adapter], [adapter.name, adapter]]));
137
+ for (const adapter of selectedAdapters) {
138
+ const dependencyProofIds = [];
139
+ const proofInput = proofInputForPackage(input.root, adapter, driver, dependencyProofIds, adaptersByName);
140
+ const reusableProof = findReusableProof(input.root, proofInput);
141
+ if (reusableProof) proofIds.set(adapter.id, reusableProof.proofId);
142
+ const workflow = driver === "github-hosted" ? hostedWorkflowForPackage(adapter) : null;
143
+ const command = driver === "github-hosted" ? null : commandForPackage(adapter, driver);
144
+ const commandSpec = driver === "github-hosted" ? null : commandSpecForPackage(adapter, driver);
145
+ subjects.push({
146
+ ...proofInput,
147
+ workflow,
148
+ command,
149
+ commandSpec,
150
+ authority: driver === "github-hosted" ? "authoritative" : "advisory",
151
+ reusableProof,
152
+ rerunReasons: reusableProof ? [] : ["No reusable passed proof record matches this subject, driver, and input hash."]
153
+ });
154
+ }
155
+ return {
156
+ target,
157
+ driver,
158
+ subjects,
159
+ summary: {
160
+ subjects: subjects.length,
161
+ reusable: subjects.filter((subject) => subject.reusableProof).length,
162
+ pending: subjects.filter((subject) => !subject.reusableProof).length
163
+ }
164
+ };
165
+ }
166
+ function summarizeTreeseedProofLedger(root) {
167
+ const records = readProofLedger(root);
168
+ const failures = records.filter((record) => record.status === "failed" || record.status === "blocked");
169
+ const latest = records[0] ?? null;
170
+ const slowest = [...records].filter((record) => typeof record.durationMs === "number").sort((left, right) => (right.durationMs ?? 0) - (left.durationMs ?? 0)).slice(0, 10).map((record) => ({
171
+ subject: record.subject.id,
172
+ driver: record.driver,
173
+ durationMs: record.durationMs,
174
+ status: record.status,
175
+ reason: record.invalidationReasons[0] ?? (record.reusable ? "Proof record is reusable." : "Proof record is not reusable.")
176
+ }));
177
+ return {
178
+ records,
179
+ latest,
180
+ failures,
181
+ slowest,
182
+ summary: {
183
+ records: records.length,
184
+ passed: records.filter((record) => record.status === "passed").length,
185
+ failed: failures.length,
186
+ pending: records.filter((record) => record.status === "pending").length,
187
+ reusable: records.filter((record) => record.reusable).length
188
+ }
189
+ };
190
+ }
191
+ export {
192
+ buildTreeseedProofPlan,
193
+ hostedWorkflowForPackage,
194
+ summarizeTreeseedProofLedger
195
+ };
@@ -0,0 +1,16 @@
1
+ import { type TreeseedProofDriver, type TreeseedProofRecord } from './release-proof.js';
2
+ import { type TreeseedProofPlan, type TreeseedProofTarget } from './release-proof-planner.js';
3
+ export type TreeseedProofRunResult = {
4
+ plan: TreeseedProofPlan;
5
+ records: TreeseedProofRecord[];
6
+ reused: TreeseedProofRecord[];
7
+ failures: TreeseedProofRecord[];
8
+ ok: boolean;
9
+ };
10
+ export declare function runTreeseedProof(input: {
11
+ root: string;
12
+ target?: TreeseedProofTarget;
13
+ driver?: TreeseedProofDriver;
14
+ subject?: string | null;
15
+ write?: (line: string, stream?: 'stdout' | 'stderr') => void;
16
+ }): Promise<TreeseedProofRunResult>;
@@ -0,0 +1,169 @@
1
+ import {
2
+ createProofRecord
3
+ } from "./release-proof.js";
4
+ import { spawnSync } from "node:child_process";
5
+ import { maybeResolveGitHubRepositorySlug } from "./github-automation.js";
6
+ import { writeProofRecord } from "./release-proof-ledger.js";
7
+ import { buildTreeseedProofPlan } from "./release-proof-planner.js";
8
+ import { inspectGitHubActionsVerification } from "./github-actions-verification.js";
9
+ function workflowRecordFromInspection(input) {
10
+ const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
11
+ return createProofRecord({
12
+ subject: input.subject.subject,
13
+ inputs: input.subject.inputs,
14
+ driver: input.subject.driver,
15
+ status: input.status,
16
+ startedAt: input.startedAt,
17
+ finishedAt,
18
+ reusable: input.status === "passed",
19
+ invalidationReasons: input.status === "passed" ? [] : [input.workflow?.message ?? "Hosted GitHub workflow did not pass."],
20
+ result: input.workflow && input.subject.subject.repository ? {
21
+ workflow: {
22
+ repository: input.subject.subject.repository,
23
+ workflow: input.workflow.workflow,
24
+ runId: input.workflow.runId,
25
+ url: input.workflow.url,
26
+ conclusion: input.workflow.conclusion,
27
+ failedJobs: input.workflow.failedJobs.map((job) => ({
28
+ id: job.id,
29
+ name: job.name,
30
+ url: job.url,
31
+ failedSteps: job.failedSteps.map((step) => step.name),
32
+ ...job.logExcerpt ? { logExcerpt: job.logExcerpt } : {}
33
+ }))
34
+ }
35
+ } : {}
36
+ });
37
+ }
38
+ async function runHostedProof(root, subject) {
39
+ const startedAt = (/* @__PURE__ */ new Date()).toISOString();
40
+ if (!subject.subject.repository && maybeResolveGitHubRepositorySlug(subject.subject.repoPath) == null) {
41
+ return createProofRecord({
42
+ subject: subject.subject,
43
+ inputs: subject.inputs,
44
+ driver: subject.driver,
45
+ status: "skipped",
46
+ startedAt,
47
+ reusable: false,
48
+ invalidationReasons: ["Proof subject is not backed by a GitHub repository in this local test workspace."]
49
+ });
50
+ }
51
+ if (!subject.subject.repository || !subject.subject.branch || !subject.subject.headSha || !subject.workflow) {
52
+ return createProofRecord({
53
+ subject: subject.subject,
54
+ inputs: subject.inputs,
55
+ driver: subject.driver,
56
+ status: "blocked",
57
+ startedAt,
58
+ reusable: false,
59
+ invalidationReasons: ["Repository, branch, head SHA, or workflow is unavailable for hosted proof."]
60
+ });
61
+ }
62
+ const report = await inspectGitHubActionsVerification([{
63
+ name: subject.subject.name,
64
+ repoPath: subject.subject.repoPath,
65
+ repository: subject.subject.repository,
66
+ branch: subject.subject.branch,
67
+ headSha: subject.subject.headSha,
68
+ workflows: [subject.workflow],
69
+ kind: subject.subject.kind === "root" ? "root" : "package",
70
+ missingIsFailure: true
71
+ }], {
72
+ includeLogs: true,
73
+ logLines: 120
74
+ });
75
+ const workflow = report.repositories[0]?.workflows[0] ?? null;
76
+ const status = workflow?.state === "success" ? "passed" : workflow?.state === "pending" ? "pending" : "failed";
77
+ return workflowRecordFromInspection({ root, subject, workflow, startedAt, status });
78
+ }
79
+ function advisorySkippedProof(subject) {
80
+ const now = (/* @__PURE__ */ new Date()).toISOString();
81
+ return createProofRecord({
82
+ subject: subject.subject,
83
+ inputs: subject.inputs,
84
+ driver: subject.driver,
85
+ status: "skipped",
86
+ startedAt: now,
87
+ finishedAt: now,
88
+ reusable: false,
89
+ invalidationReasons: [
90
+ subject.driver === "act" ? "Local action simulation is advisory and cannot satisfy authoritative hosted proof." : "Only github-hosted proof execution is enabled for this proof runner slice."
91
+ ],
92
+ result: subject.command ? {
93
+ command: { command: subject.command, cwd: subject.subject.repoPath, exitCode: null }
94
+ } : {}
95
+ });
96
+ }
97
+ function runLocalProof(subject) {
98
+ const startedAt = (/* @__PURE__ */ new Date()).toISOString();
99
+ if (!subject.commandSpec) {
100
+ return createProofRecord({
101
+ subject: subject.subject,
102
+ inputs: subject.inputs,
103
+ driver: subject.driver,
104
+ status: "blocked",
105
+ startedAt,
106
+ reusable: false,
107
+ invalidationReasons: ["No local proof command is declared for this subject."]
108
+ });
109
+ }
110
+ const result = spawnSync(subject.commandSpec.command, subject.commandSpec.args, {
111
+ cwd: subject.commandSpec.cwd || subject.subject.repoPath,
112
+ env: {
113
+ ...process.env,
114
+ TREESEED_VERIFY_DRIVER: "direct",
115
+ TMPDIR: process.env.TMPDIR ?? "/tmp"
116
+ },
117
+ stdio: "inherit",
118
+ shell: false
119
+ });
120
+ const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
121
+ const exitCode = typeof result.status === "number" ? result.status : null;
122
+ const errorMessage = result.error instanceof Error ? result.error.message : null;
123
+ return createProofRecord({
124
+ subject: subject.subject,
125
+ inputs: subject.inputs,
126
+ driver: subject.driver,
127
+ status: exitCode === 0 ? "passed" : "failed",
128
+ startedAt,
129
+ finishedAt,
130
+ reusable: exitCode === 0,
131
+ invalidationReasons: exitCode === 0 ? [] : [`Local proof command failed${errorMessage ? `: ${errorMessage}` : exitCode == null ? "." : ` with exit code ${exitCode}.`}`],
132
+ result: {
133
+ command: {
134
+ command: [subject.commandSpec.command, ...subject.commandSpec.args].join(" "),
135
+ cwd: subject.commandSpec.cwd || subject.subject.repoPath,
136
+ exitCode
137
+ }
138
+ }
139
+ });
140
+ }
141
+ async function runTreeseedProof(input) {
142
+ const plan = buildTreeseedProofPlan(input);
143
+ const records = [];
144
+ const reused = [];
145
+ for (const subject of plan.subjects) {
146
+ if (subject.reusableProof) {
147
+ reused.push(subject.reusableProof);
148
+ continue;
149
+ }
150
+ input.write?.(`[proof] Proving ${subject.subject.id} with ${subject.driver}${subject.workflow ? ` (${subject.workflow})` : ""}.`);
151
+ const record = subject.driver === "github-hosted" ? await runHostedProof(input.root, subject) : subject.driver === "local" ? runLocalProof(subject) : advisorySkippedProof(subject);
152
+ writeProofRecord(input.root, record);
153
+ records.push(record);
154
+ if (record.status === "failed" || record.status === "blocked") {
155
+ break;
156
+ }
157
+ }
158
+ const failures = [...records, ...reused].filter((record) => record.status === "failed" || record.status === "blocked" || record.driver === "github-hosted" && record.status === "pending");
159
+ return {
160
+ plan,
161
+ records,
162
+ reused,
163
+ failures,
164
+ ok: failures.length === 0 && records.every((record) => record.status === "passed" || record.status === "skipped")
165
+ };
166
+ }
167
+ export {
168
+ runTreeseedProof
169
+ };
@@ -0,0 +1,81 @@
1
+ export type TreeseedProofSubjectKind = 'package' | 'root' | 'hosted-app' | 'provider-resource' | 'workflow' | 'scene';
2
+ export type TreeseedProofStatus = 'passed' | 'failed' | 'pending' | 'blocked' | 'skipped';
3
+ export type TreeseedProofDriver = 'local' | 'act' | 'github-hosted' | 'railway-live' | 'cloudflare-live' | 'reconcile-live';
4
+ export type TreeseedProofSubject = {
5
+ kind: TreeseedProofSubjectKind;
6
+ id: string;
7
+ name: string;
8
+ repoPath: string;
9
+ repository: string | null;
10
+ branch: string | null;
11
+ headSha: string | null;
12
+ };
13
+ export type TreeseedProofInputs = {
14
+ inputHash: string;
15
+ topologyHash: string;
16
+ packageJsonHash?: string | null;
17
+ lockfileHash?: string | null;
18
+ manifestHash?: string | null;
19
+ workflowHash?: string | null;
20
+ dockerfileHash?: string | null;
21
+ sourceHashes?: Record<string, string | null>;
22
+ dependencyProofIds: string[];
23
+ };
24
+ export type TreeseedProofRecord = {
25
+ schemaVersion: 1;
26
+ proofId: string;
27
+ subject: TreeseedProofSubject;
28
+ inputs: TreeseedProofInputs;
29
+ driver: TreeseedProofDriver;
30
+ status: TreeseedProofStatus;
31
+ startedAt: string;
32
+ finishedAt: string | null;
33
+ durationMs: number | null;
34
+ result: {
35
+ workflow?: {
36
+ repository: string;
37
+ workflow: string;
38
+ runId: number | null;
39
+ url: string | null;
40
+ conclusion: string | null;
41
+ failedJobs: Array<{
42
+ id: number;
43
+ name: string;
44
+ url: string | null;
45
+ failedSteps: string[];
46
+ logExcerpt?: string | null;
47
+ }>;
48
+ };
49
+ command?: {
50
+ command: string;
51
+ cwd: string;
52
+ exitCode: number | null;
53
+ };
54
+ liveVerification?: Record<string, unknown>;
55
+ };
56
+ reusable: boolean;
57
+ invalidationReasons: string[];
58
+ };
59
+ export type TreeseedProofInput = {
60
+ subject: TreeseedProofSubject;
61
+ inputs: Omit<TreeseedProofInputs, 'inputHash'> & {
62
+ inputHash?: string;
63
+ };
64
+ driver: TreeseedProofDriver;
65
+ };
66
+ export declare function sha256(value: string): string;
67
+ export declare function computeProofInputHash(input: TreeseedProofInput | Record<string, unknown>): string;
68
+ export declare function proofIdFor(input: TreeseedProofInput): string;
69
+ export declare function createProofRecord(input: {
70
+ subject: TreeseedProofSubject;
71
+ inputs: Omit<TreeseedProofInputs, 'inputHash'> & {
72
+ inputHash?: string;
73
+ };
74
+ driver: TreeseedProofDriver;
75
+ status: TreeseedProofStatus;
76
+ startedAt: string;
77
+ finishedAt?: string | null;
78
+ result?: TreeseedProofRecord['result'];
79
+ reusable?: boolean;
80
+ invalidationReasons?: string[];
81
+ }): TreeseedProofRecord;