@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
@@ -1,8 +1,8 @@
1
1
  import { existsSync, mkdtempSync, mkdirSync, readdirSync, readFileSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
2
2
  import { spawnSync } from "node:child_process";
3
3
  import { join, relative, resolve } from "node:path";
4
- import { tmpdir } from "node:os";
5
4
  import { RemoteTreeseedAuthClient, RemoteTreeseedClient } from "../../remote.js";
5
+ import { classifyTreeseedGitMode, runTreeseedGitText } from "../../operations/services/git-runner.js";
6
6
  import {
7
7
  findTreeseedOperation,
8
8
  TRESEED_OPERATION_SPECS
@@ -28,11 +28,6 @@ import {
28
28
  finalizeDeploymentState,
29
29
  loadDeployState
30
30
  } from "../../operations/services/deploy.js";
31
- import {
32
- dockerIsAvailable,
33
- findRunningMailpitContainer,
34
- stopKnownMailpitContainers
35
- } from "../../operations/services/mailpit-runtime.js";
36
31
  import {
37
32
  loadCliDeployConfig,
38
33
  packageScriptPath,
@@ -67,7 +62,6 @@ import {
67
62
  parseProjectLaunchHostBindingSpecs,
68
63
  resolveProjectLaunchHostBindings
69
64
  } from "../../template-launch-requirements.js";
70
- import { run } from "../../operations/services/workspace-tools.js";
71
65
  import { resolveTreeseedWorkflowState } from "../../workflow-state.js";
72
66
  import { TreeseedWorkflowError, TreeseedWorkflowSdk } from "../../workflow.js";
73
67
  import {
@@ -75,6 +69,14 @@ import {
75
69
  formatTreeseedDependencyReport,
76
70
  installTreeseedDependencies
77
71
  } from "../../managed-dependencies.js";
72
+ function runGit(args, options) {
73
+ return runTreeseedGitText(args, {
74
+ cwd: options.cwd,
75
+ mode: classifyTreeseedGitMode(args),
76
+ timeoutMs: options.timeoutMs,
77
+ maxBuffer: options.maxBuffer
78
+ });
79
+ }
78
80
  function operationResult(metadata, payload, options = {}) {
79
81
  return {
80
82
  operation: metadata.id,
@@ -184,12 +186,17 @@ function copyFileIfExists(sourceFile, targetFile) {
184
186
  mkdirSync(resolve(targetFile, ".."), { recursive: true });
185
187
  writeFileSync(targetFile, readFileSync(sourceFile));
186
188
  }
189
+ function providerTempRoot(tenantRoot, scope) {
190
+ const base = resolve(tenantRoot, ".treeseed", "tmp", scope);
191
+ mkdirSync(base, { recursive: true });
192
+ return base;
193
+ }
187
194
  function prepareContentPublishRoot(tenantRoot, contentRepositoryRoot) {
188
195
  if (!contentRepositoryRoot || resolve(contentRepositoryRoot) === resolve(tenantRoot)) {
189
196
  return { root: tenantRoot, cleanup: () => {
190
197
  } };
191
198
  }
192
- const tempRoot = mkdtempSync(join(tmpdir(), "treeseed-content-repo-publish-"));
199
+ const tempRoot = mkdtempSync(join(providerTempRoot(tenantRoot, "content-repo-publish"), "treeseed-content-repo-publish-"));
193
200
  copyFileIfExists(resolve(tenantRoot, "treeseed.site.yaml"), resolve(tempRoot, "treeseed.site.yaml"));
194
201
  copyFileIfExists(resolve(tenantRoot, "package.json"), resolve(tempRoot, "package.json"));
195
202
  copyFileIfExists(resolve(tenantRoot, "src", "manifest.yaml"), resolve(tempRoot, "src", "manifest.yaml"));
@@ -1092,12 +1099,13 @@ class RollbackOperation extends BaseOperation {
1092
1099
  }
1093
1100
  const gitRoot = repoRoot(tenantRoot);
1094
1101
  const tenantRelativePath = relative(gitRoot, tenantRoot);
1095
- const tempRoot = mkdtempSync(join(tmpdir(), "treeseed-rollback-"));
1102
+ const rollbackBase = providerTempRoot(tenantRoot, "rollback");
1103
+ const tempRoot = mkdtempSync(join(rollbackBase, "treeseed-rollback-"));
1096
1104
  const tempTenantRoot = resolve(tempRoot, tenantRelativePath);
1097
1105
  const currentNodeModules = resolve(tenantRoot, "node_modules");
1098
1106
  let finalizedState = null;
1099
1107
  try {
1100
- run("git", ["worktree", "add", "--detach", tempRoot, rollbackCommit], { cwd: gitRoot, capture: true });
1108
+ runGit(["worktree", "add", "--detach", tempRoot, rollbackCommit], { cwd: gitRoot, capture: true });
1101
1109
  copyTreeseedOperationalState(tenantRoot, tempTenantRoot);
1102
1110
  if (existsSync(currentNodeModules) && !existsSync(resolve(tempTenantRoot, "node_modules"))) {
1103
1111
  symlinkSync(currentNodeModules, resolve(tempTenantRoot, "node_modules"), "dir");
@@ -1129,7 +1137,7 @@ class RollbackOperation extends BaseOperation {
1129
1137
  }
1130
1138
  } finally {
1131
1139
  try {
1132
- run("git", ["worktree", "remove", "--force", tempRoot], { cwd: gitRoot, capture: true });
1140
+ runGit(["worktree", "remove", "--force", tempRoot], { cwd: gitRoot, capture: true });
1133
1141
  } catch {
1134
1142
  }
1135
1143
  }
@@ -1142,29 +1150,6 @@ class RollbackOperation extends BaseOperation {
1142
1150
  });
1143
1151
  }
1144
1152
  }
1145
- class MailpitUpOperation extends BaseOperation {
1146
- async execute(_input, context) {
1147
- if (!dockerIsAvailable()) {
1148
- return failureResult(this.metadata, "Docker is required for Treeseed form email testing.");
1149
- }
1150
- const existing = findRunningMailpitContainer();
1151
- if (existing) {
1152
- return operationResult(this.metadata, { reused: true, container: existing });
1153
- }
1154
- return runNodeScript(this.metadata, "ensure-mailpit", [], context);
1155
- }
1156
- }
1157
- class MailpitDownOperation extends BaseOperation {
1158
- async execute(_input, _context) {
1159
- const stopped = stopKnownMailpitContainers();
1160
- return operationResult(this.metadata, { stopped }, { ok: stopped, exitCode: stopped ? 0 : 1 });
1161
- }
1162
- }
1163
- class MailpitLogsOperation extends BaseOperation {
1164
- async execute(_input, context) {
1165
- return runNodeScript(this.metadata, "logs-mailpit", [], context);
1166
- }
1167
- }
1168
1153
  class DefaultTreeseedOperationsProvider {
1169
1154
  id = "default";
1170
1155
  operations;
@@ -1175,6 +1160,7 @@ class DefaultTreeseedOperationsProvider {
1175
1160
  new WorkflowOperation("tasks"),
1176
1161
  new WorkflowOperation("switch", "switch"),
1177
1162
  new WorkflowOperation("save"),
1163
+ new WorkflowOperation("update"),
1178
1164
  new WorkflowOperation("close"),
1179
1165
  new WorkflowOperation("stage"),
1180
1166
  new WorkflowOperation("resume"),
@@ -1231,9 +1217,6 @@ class DefaultTreeseedOperationsProvider {
1231
1217
  new ScriptOperation("test:release:full", "workspace-release-verify", ["--full-smoke"]),
1232
1218
  new ScriptOperation("release:publish:changed", "workspace-publish-changed-packages"),
1233
1219
  new ScriptOperation("astro", "tenant-astro-command"),
1234
- new MailpitUpOperation("mailpit:up"),
1235
- new MailpitDownOperation("mailpit:down"),
1236
- new MailpitLogsOperation("mailpit:logs"),
1237
1220
  new ScriptOperation("d1:migrate:local", "tenant-d1-migrate-local"),
1238
1221
  new ScriptOperation("cleanup:markdown", "cleanup-markdown", ["--write"]),
1239
1222
  new ScriptOperation("cleanup:markdown:check", "cleanup-markdown", ["--check"]),
@@ -1,4 +1,4 @@
1
- import { type ApplyProjectLaunchHostBindingConfigOptions } from './services/template-host-bindings.ts';
1
+ import { type ApplyProjectLaunchHostBindingConfigOptions } from './services/template-host-bindings.js';
2
2
  export declare const PLATFORM_CONTENT_COLLECTIONS: readonly ["objectives", "questions", "notes", "proposals", "decisions", "agents"];
3
3
  export declare const PLATFORM_WORK_CONTENT_COLLECTIONS: readonly ["objectives", "questions", "notes", "proposals", "decisions"];
4
4
  export type PlatformContentCollection = (typeof PLATFORM_CONTENT_COLLECTIONS)[number];
@@ -50,11 +50,30 @@ export interface PlatformRepositoryOperationInput {
50
50
  teamId?: string;
51
51
  createdBy?: string;
52
52
  repository: PlatformRepositoryDescriptor;
53
+ architecture?: Record<string, unknown>;
54
+ scaffoldFiles?: PlatformRepositoryScaffoldFile[];
53
55
  collection?: string;
54
56
  parentCollection?: string;
55
57
  parentSlug?: string;
56
58
  targetCollection?: string;
57
59
  proposalSlugs?: string[];
60
+ proposalSlug?: string;
61
+ proposalId?: string;
62
+ proposalVersion?: number;
63
+ proposalContentHash?: string;
64
+ proposalSnapshot?: Record<string, unknown>;
65
+ contentProposalSlug?: string;
66
+ contentDecisionSlug?: string;
67
+ governanceDecision?: Record<string, unknown>;
68
+ governanceDecisionId?: string;
69
+ governanceProviderId?: string;
70
+ governanceRule?: Record<string, unknown>;
71
+ electorateSnapshot?: Record<string, unknown>;
72
+ voteResult?: Record<string, unknown>;
73
+ voterReasons?: Record<string, unknown>[];
74
+ decidedAt?: string;
75
+ decisionSnapshotHash?: string;
76
+ authority?: string;
58
77
  decisionType?: string;
59
78
  reason?: string;
60
79
  title?: string;
@@ -69,6 +88,11 @@ export interface PlatformRepositoryOperationInput {
69
88
  launchInput?: ApplyProjectLaunchHostBindingConfigOptions['launchInput'];
70
89
  derived?: ApplyProjectLaunchHostBindingConfigOptions['derived'];
71
90
  }
91
+ export interface PlatformRepositoryScaffoldFile {
92
+ path: string;
93
+ content: string;
94
+ overwrite?: boolean;
95
+ }
72
96
  export interface PlatformRepositoryOperationOptions {
73
97
  workspaceRoot: string;
74
98
  environment?: string;
@@ -131,4 +155,4 @@ export declare function normalizePlatformContentInput(collection: string, body:
131
155
  export declare function derivePlatformRepositoryKey(repository: PlatformRepositoryDescriptor): string;
132
156
  export declare function resolvePlatformRepositoryWorkspacePath(workspaceRoot: string, repository: PlatformRepositoryDescriptor): string;
133
157
  export declare function createPlatformRepositoryClaim(input: PlatformRepositoryClaimInput): PlatformRepositoryClaim;
134
- export declare function executePlatformRepositoryOperation(operation: 'write_content_record' | 'create_related_content' | 'create_decision_from_proposals' | 'apply_host_binding_config' | 'audit_host_binding_config' | string, input: PlatformRepositoryOperationInput, options: PlatformRepositoryOperationOptions): Promise<PlatformRepositoryOperationResult>;
158
+ export declare function executePlatformRepositoryOperation(operation: 'write_content_record' | 'create_related_content' | 'create_decision_from_proposals' | 'create_decision_from_governance_proposal' | 'apply_host_binding_config' | 'audit_host_binding_config' | string, input: PlatformRepositoryOperationInput, options: PlatformRepositoryOperationOptions): Promise<PlatformRepositoryOperationResult>;
@@ -51,7 +51,7 @@ const CONTENT_DEFAULTS = {
51
51
  extension: "mdx",
52
52
  fields: {
53
53
  name: "",
54
- handler: "planner",
54
+ handler: "plan",
55
55
  enabled: true,
56
56
  operator: "TreeSeed platform",
57
57
  runtimeStatus: "active",
@@ -182,6 +182,14 @@ function normalizePlatformContentInput(collection, body) {
182
182
  frontmatter.relatedQuestions = normalizePlatformRelationArray(body.relatedQuestions);
183
183
  frontmatter.relatedNotes = normalizePlatformRelationArray(body.relatedNotes);
184
184
  frontmatter.decision = optionalTrimmedString(body.decision) ?? void 0;
185
+ frontmatter.governanceId = optionalTrimmedString(body.governanceId) ?? void 0;
186
+ frontmatter.governanceProviderId = optionalTrimmedString(body.governanceProviderId) ?? void 0;
187
+ frontmatter.governancePolicyId = optionalTrimmedString(body.governancePolicyId) ?? void 0;
188
+ frontmatter.governanceStatus = optionalTrimmedString(body.governanceStatus) ?? void 0;
189
+ frontmatter.proposalVersion = Number.isInteger(Number(body.proposalVersion)) ? Number(body.proposalVersion) : void 0;
190
+ frontmatter.proposalContentHash = optionalTrimmedString(body.proposalContentHash) ?? void 0;
191
+ frontmatter.votingStartsAt = optionalTrimmedString(body.votingStartsAt) ?? void 0;
192
+ frontmatter.votingEndsAt = optionalTrimmedString(body.votingEndsAt) ?? void 0;
185
193
  } else if (collection === "decisions") {
186
194
  frontmatter.primaryContributor = optionalTrimmedString(body.primaryContributor) ?? frontmatter.primaryContributor;
187
195
  frontmatter.decisionType = enumValue(body.decisionType, DECISION_TYPE_VALUES, String(frontmatter.decisionType));
@@ -191,6 +199,18 @@ function normalizePlatformContentInput(collection, body) {
191
199
  frontmatter.relatedQuestions = normalizePlatformRelationArray(body.relatedQuestions);
192
200
  frontmatter.relatedNotes = normalizePlatformRelationArray(body.relatedNotes);
193
201
  frontmatter.relatedProposals = normalizePlatformRelationArray(body.relatedProposals);
202
+ frontmatter.immutable = body.immutable === true ? true : void 0;
203
+ frontmatter.governanceDecisionId = optionalTrimmedString(body.governanceDecisionId) ?? void 0;
204
+ frontmatter.governanceProviderId = optionalTrimmedString(body.governanceProviderId) ?? void 0;
205
+ frontmatter.sourceProposalGovernanceId = optionalTrimmedString(body.sourceProposalGovernanceId) ?? void 0;
206
+ frontmatter.sourceProposalVersion = Number.isInteger(Number(body.sourceProposalVersion)) ? Number(body.sourceProposalVersion) : void 0;
207
+ frontmatter.sourceProposalHash = optionalTrimmedString(body.sourceProposalHash) ?? void 0;
208
+ frontmatter.governanceRule = body.governanceRule && typeof body.governanceRule === "object" && !Array.isArray(body.governanceRule) ? body.governanceRule : void 0;
209
+ frontmatter.electorateSnapshot = body.electorateSnapshot && typeof body.electorateSnapshot === "object" && !Array.isArray(body.electorateSnapshot) ? body.electorateSnapshot : void 0;
210
+ frontmatter.voteResult = body.voteResult && typeof body.voteResult === "object" && !Array.isArray(body.voteResult) ? body.voteResult : void 0;
211
+ frontmatter.voterReasons = Array.isArray(body.voterReasons) ? body.voterReasons : void 0;
212
+ frontmatter.decidedAt = optionalTrimmedString(body.decidedAt) ?? void 0;
213
+ frontmatter.decisionSnapshotHash = optionalTrimmedString(body.decisionSnapshotHash) ?? void 0;
194
214
  }
195
215
  return {
196
216
  slug,
@@ -283,6 +303,54 @@ function assertAllowedPath(repoPath, targetPath) {
283
303
  }
284
304
  return relativePath;
285
305
  }
306
+ function safeRepositoryRelativePath(repoPath, rawPath) {
307
+ const value = typeof rawPath === "string" ? rawPath.trim() : "";
308
+ if (!value || value.startsWith("/") || value.includes("\0")) {
309
+ throw new Error("Repository initialization scaffold path must be repository-relative.");
310
+ }
311
+ const target = resolve(repoPath, value);
312
+ const relativePath = relative(repoPath, target);
313
+ if (relativePath.startsWith("..") || relativePath.includes("..") || relativePath.startsWith("/")) {
314
+ throw new Error(`Repository initialization scaffold path is outside the repository: ${value}`);
315
+ }
316
+ return { target, relativePath };
317
+ }
318
+ function secretLookingText(value) {
319
+ return /(?:ghp_|github_pat_|sk-[A-Za-z0-9]|xox[baprs]-|BEGIN (?:RSA |OPENSSH |EC )?PRIVATE KEY|TREESEED_GITHUB_TOKEN\s*=|password\s*=|passphrase\s*=|secretValue|rawSecret|unencrypted)/iu.test(value);
320
+ }
321
+ async function initializeLinkedRepository(repoPath, input) {
322
+ const architecture = input.architecture && typeof input.architecture === "object" && !Array.isArray(input.architecture) ? {
323
+ topology: input.architecture.topology ?? null,
324
+ rootPath: input.architecture.rootPath ?? ".",
325
+ sitePath: input.architecture.sitePath ?? null,
326
+ contentPath: input.architecture.contentPath ?? null,
327
+ contentRuntimeSource: input.architecture.contentRuntimeSource ?? null,
328
+ localContentMaterialization: input.architecture.localContentMaterialization ?? null
329
+ } : null;
330
+ const scaffoldFiles = Array.isArray(input.scaffoldFiles) ? input.scaffoldFiles : [];
331
+ const scaffoldedPaths = [];
332
+ for (const file of scaffoldFiles) {
333
+ if (!file || typeof file !== "object") throw new Error("Repository initialization scaffold files must be objects.");
334
+ const content = typeof file.content === "string" ? file.content : null;
335
+ if (content == null) throw new Error("Repository initialization scaffold file content must be a string.");
336
+ if (secretLookingText(content) || secretLookingText(file.path)) {
337
+ throw new Error("Repository initialization scaffold files must not contain token-like or plaintext secret material.");
338
+ }
339
+ const { target, relativePath } = safeRepositoryRelativePath(repoPath, file.path);
340
+ if (existsSync(target) && file.overwrite !== true) continue;
341
+ await mkdir(dirname(target), { recursive: true });
342
+ await writeFile(target, content, "utf8");
343
+ scaffoldedPaths.push(relativePath);
344
+ }
345
+ return {
346
+ kind: "linked_repository_initialization",
347
+ projectId: input.projectId ?? null,
348
+ teamId: input.teamId ?? null,
349
+ mode: scaffoldedPaths.length > 0 ? "template_scaffold" : "adopt_existing",
350
+ architecture,
351
+ scaffoldedPaths
352
+ };
353
+ }
286
354
  async function readContentRecord(repoPath, collection, slug) {
287
355
  if (!WORK_CONTENT_COLLECTION_SET.has(collection)) throw new Error("Unsupported content collection.");
288
356
  const target = safeContentPath(repoPath, collection, slug);
@@ -463,6 +531,92 @@ async function createDecisionFromProposals(repoPath, input) {
463
531
  changedPaths: changedPaths2
464
532
  };
465
533
  }
534
+ async function createDecisionFromGovernanceProposal(repoPath, input) {
535
+ const proposalSnapshot = input.proposalSnapshot && typeof input.proposalSnapshot === "object" ? input.proposalSnapshot : {};
536
+ const governanceDecision = input.governanceDecision && typeof input.governanceDecision === "object" ? input.governanceDecision : {};
537
+ const proposalSlug = slugifyPlatformContent(
538
+ input.contentProposalSlug ?? input.proposalSlug ?? proposalSnapshot.slug ?? proposalSnapshot.contentProposalSlug ?? governanceDecision.contentProposalSlug ?? ""
539
+ );
540
+ if (!proposalSlug) throw new Error("A safe source proposal slug is required.");
541
+ const sourceHash = optionalTrimmedString(input.proposalContentHash) ?? optionalTrimmedString(proposalSnapshot.contentHash) ?? optionalTrimmedString(proposalSnapshot.proposalContentHash);
542
+ if (!sourceHash) throw new Error("Accepted proposal content hash is required.");
543
+ const proposalVersion = Number(input.proposalVersion ?? proposalSnapshot.version ?? proposalSnapshot.proposalVersion ?? 1);
544
+ if (!Number.isInteger(proposalVersion) || proposalVersion < 1) throw new Error("Accepted proposal version is invalid.");
545
+ const title = optionalTrimmedString(input.title) ?? optionalTrimmedString(governanceDecision.title) ?? optionalTrimmedString(proposalSnapshot.title) ?? `Decision for ${proposalSlug}`;
546
+ const summary = optionalTrimmedString(input.summary) ?? optionalTrimmedString(governanceDecision.summary) ?? optionalTrimmedString(proposalSnapshot.summary) ?? "Accepted governance decision.";
547
+ const decisionSlug = slugifyPlatformContent(input.slug || input.contentDecisionSlug || governanceDecision.contentDecisionSlug || title);
548
+ if (!decisionSlug) throw new Error("A safe decision slug is required.");
549
+ const decisionTarget = safeContentPath(repoPath, "decisions", decisionSlug, "mdx");
550
+ if (existsSync(decisionTarget)) throw new Error("A decision with that slug already exists.");
551
+ let proposal = null;
552
+ try {
553
+ proposal = await readContentRecord(repoPath, "proposals", proposalSlug);
554
+ } catch {
555
+ throw new Error(`Proposal ${proposalSlug} was not found.`);
556
+ }
557
+ const voteResult = input.voteResult && typeof input.voteResult === "object" ? input.voteResult : governanceDecision.voteResult ?? {};
558
+ const voterReasons = Array.isArray(input.voterReasons) ? input.voterReasons : Array.isArray(governanceDecision.voterReasons) ? governanceDecision.voterReasons : [];
559
+ const decidedAt = optionalTrimmedString(input.decidedAt) ?? (/* @__PURE__ */ new Date()).toISOString();
560
+ const body = optionalTrimmedString(input.payload?.body) ?? [
561
+ "## Accepted Proposal Snapshot",
562
+ optionalTrimmedString(proposalSnapshot.body) ?? proposal.body.trim(),
563
+ "",
564
+ "## Governance Result",
565
+ JSON.stringify(voteResult, null, 2)
566
+ ].join("\n");
567
+ const decision = await writeContentRecord(repoPath, "decisions", {
568
+ ...input.payload ?? {},
569
+ projectId: input.projectId,
570
+ teamId: input.teamId,
571
+ slug: decisionSlug,
572
+ title,
573
+ status: "live",
574
+ decisionType: "approved",
575
+ description: optionalTrimmedString(input.payload?.description) ?? summary,
576
+ summary,
577
+ rationale: optionalTrimmedString(input.reason) ?? "Accepted by governance.",
578
+ authority: optionalTrimmedString(input.authority) ?? "governance",
579
+ relatedProposals: [proposalSlug],
580
+ immutable: true,
581
+ governanceDecisionId: optionalTrimmedString(input.governanceDecisionId) ?? optionalTrimmedString(governanceDecision.id),
582
+ governanceProviderId: optionalTrimmedString(input.governanceProviderId) ?? optionalTrimmedString(governanceDecision.governanceProviderId),
583
+ sourceProposalGovernanceId: optionalTrimmedString(input.proposalId) ?? optionalTrimmedString(governanceDecision.proposalId),
584
+ sourceProposalVersion: proposalVersion,
585
+ sourceProposalHash: sourceHash,
586
+ governanceRule: input.governanceRule ?? governanceDecision.governanceRule ?? {},
587
+ electorateSnapshot: input.electorateSnapshot ?? governanceDecision.electorateSnapshot ?? {},
588
+ voteResult,
589
+ voterReasons,
590
+ decidedAt,
591
+ decisionSnapshotHash: optionalTrimmedString(input.decisionSnapshotHash),
592
+ body
593
+ });
594
+ const originalProposal = {
595
+ ...proposal,
596
+ frontmatter: { ...proposal.frontmatter },
597
+ body: proposal.body
598
+ };
599
+ const changedPaths2 = [decision.path];
600
+ try {
601
+ proposal.frontmatter.decision = decisionSlug;
602
+ proposal.frontmatter.governanceStatus = "accepted";
603
+ proposal.frontmatter.proposalVersion = proposalVersion;
604
+ proposal.frontmatter.proposalContentHash = sourceHash;
605
+ changedPaths2.push(await writeParsedRecord(repoPath, proposal));
606
+ } catch (error) {
607
+ await rm(decisionTarget, { force: true }).catch(() => {
608
+ });
609
+ await writeParsedRecord(repoPath, originalProposal).catch(() => {
610
+ });
611
+ throw error;
612
+ }
613
+ return {
614
+ decision,
615
+ proposal: { collection: "proposals", slug: proposalSlug, href: `/app/work/proposals/${encodeURIComponent(proposalSlug)}` },
616
+ href: decision.href,
617
+ changedPaths: changedPaths2
618
+ };
619
+ }
466
620
  async function changedPaths(repoPath) {
467
621
  const output = await runGit(["status", "--porcelain", "--untracked-files=all"], repoPath).catch(() => "");
468
622
  return output.split("\n").map((line) => line.slice(3).trim()).filter(Boolean);
@@ -609,6 +763,8 @@ async function executePlatformRepositoryOperation(operation, input, options) {
609
763
  output = await createRelatedContent(repoPath, input);
610
764
  } else if (operation === "create_decision_from_proposals") {
611
765
  output = await createDecisionFromProposals(repoPath, input);
766
+ } else if (operation === "create_decision_from_governance_proposal") {
767
+ output = await createDecisionFromGovernanceProposal(repoPath, input);
612
768
  } else if (operation === "apply_host_binding_config") {
613
769
  const hostBindingConfig = applyProjectLaunchHostBindingConfig({
614
770
  projectRoot: repoPath,
@@ -633,6 +789,8 @@ async function executePlatformRepositoryOperation(operation, input, options) {
633
789
  hostBindingAudit,
634
790
  changedPaths: []
635
791
  };
792
+ } else if (operation === "initialize_linked_repository") {
793
+ output = await initializeLinkedRepository(repoPath, input);
636
794
  } else {
637
795
  throw new Error(`Unsupported repository operation "${operation}".`);
638
796
  }
@@ -1,7 +1,7 @@
1
- import { type TreeseedOperationContext, type TreeseedOperationRequest } from '../operations-types.ts';
1
+ import { type TreeseedOperationContext, type TreeseedOperationRequest } from '../operations-types.js';
2
2
  export declare class TreeseedOperationsSdk {
3
- listOperations(): import("../operations-types.ts").TreeseedOperationMetadata[];
4
- findOperation(name: string | null | undefined): import("../operations-types.ts").TreeseedOperationMetadata | null;
3
+ listOperations(): import("../operations-types.js").TreeseedOperationMetadata[];
4
+ findOperation(name: string | null | undefined): import("../operations-types.js").TreeseedOperationMetadata | null;
5
5
  resolveProvider(cwd?: string): any;
6
6
  execute(request: TreeseedOperationRequest, contextOverrides?: Partial<TreeseedOperationContext>): Promise<any>;
7
7
  }
@@ -1,4 +1,4 @@
1
- import { type TreeseedTimingEntry } from '../../timing.ts';
1
+ import { type TreeseedTimingEntry } from '../../timing.js';
2
2
  export type TreeseedBootstrapExecution = 'parallel' | 'sequential';
3
3
  export type TreeseedBootstrapStream = 'stdout' | 'stderr';
4
4
  export type TreeseedBootstrapWriter = (line: string, stream?: TreeseedBootstrapStream) => void;
@@ -0,0 +1,34 @@
1
+ export interface BuildWarningRule {
2
+ label: string;
3
+ pattern: RegExp;
4
+ }
5
+ export interface BuildWarningScanOptions {
6
+ useDefaultPolicy?: boolean;
7
+ allow?: Array<string | RegExp>;
8
+ }
9
+ export type BuildWarningClassification = {
10
+ kind: 'not-warning';
11
+ } | {
12
+ kind: 'allowed';
13
+ label: string;
14
+ } | {
15
+ kind: 'unexpected';
16
+ line: string;
17
+ };
18
+ export interface BuildWarningSummary {
19
+ allowedWarnings: Map<string, number>;
20
+ unexpectedWarnings: string[];
21
+ record(line: unknown, options?: BuildWarningScanOptions): BuildWarningClassification;
22
+ }
23
+ export declare const DEFAULT_BUILD_WARNING_RULES: BuildWarningRule[];
24
+ export declare function normalizeBuildWarningLine(line: unknown): string;
25
+ export declare function createBuildWarningRules(options?: BuildWarningScanOptions): BuildWarningRule[];
26
+ export declare function classifyBuildWarningLine(line: unknown, options?: BuildWarningScanOptions): BuildWarningClassification;
27
+ export declare function createBuildWarningSummary(): BuildWarningSummary;
28
+ export declare function mergeAllowedBuildWarnings(target: Map<string, number>, source: Map<string, number>): Map<string, number>;
29
+ export declare function countAllowedBuildWarnings(allowedWarnings: Map<string, number>): number;
30
+ export declare function formatAllowedBuildWarnings(allowedWarnings: Map<string, number>): string[];
31
+ export declare function scanBuildWarningText(text: unknown, options?: BuildWarningScanOptions): {
32
+ allowedWarnings: Map<string, number>;
33
+ unexpectedWarnings: string[];
34
+ };
@@ -1,92 +1,91 @@
1
- export const DEFAULT_BUILD_WARNING_RULES = [
2
- {
3
- label: 'vite-browser-external-libsodium-url',
4
- pattern:
5
- /(?:Module "url" has been externalized for browser compatibility, imported by|Automatically externalized node built-in module "url" imported from) ".*libsodium-sumo.*"/u,
6
- },
1
+ const DEFAULT_BUILD_WARNING_RULES = [
2
+ {
3
+ label: "vite-browser-external-libsodium-url",
4
+ pattern: /(?:Module "url" has been externalized for browser compatibility, imported by|Automatically externalized node built-in module "url" imported from) ".*libsodium-sumo.*"/u
5
+ }
7
6
  ];
8
-
9
7
  const ANSI_CONTROL_SEQUENCE_PATTERN = /\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/gu;
10
-
11
- export function normalizeBuildWarningLine(line) {
12
- return String(line ?? '').replace(ANSI_CONTROL_SEQUENCE_PATTERN, '');
8
+ function normalizeBuildWarningLine(line) {
9
+ return String(line ?? "").replace(ANSI_CONTROL_SEQUENCE_PATTERN, "");
13
10
  }
14
-
15
- export function createBuildWarningRules(options = {}) {
16
- const useDefaultPolicy = options.useDefaultPolicy !== false;
17
- const customAllow = Array.isArray(options.allow) ? options.allow : [];
18
- return [
19
- ...(useDefaultPolicy ? DEFAULT_BUILD_WARNING_RULES : []),
20
- ...customAllow.map((pattern) => ({
21
- label: `custom:${pattern}`,
22
- pattern: pattern instanceof RegExp ? pattern : new RegExp(String(pattern)),
23
- })),
24
- ];
11
+ function createBuildWarningRules(options = {}) {
12
+ const useDefaultPolicy = options.useDefaultPolicy !== false;
13
+ const customAllow = Array.isArray(options.allow) ? options.allow : [];
14
+ return [
15
+ ...useDefaultPolicy ? DEFAULT_BUILD_WARNING_RULES : [],
16
+ ...customAllow.map((pattern) => ({
17
+ label: `custom:${pattern}`,
18
+ pattern: pattern instanceof RegExp ? pattern : new RegExp(String(pattern))
19
+ }))
20
+ ];
25
21
  }
26
-
27
- export function classifyBuildWarningLine(line, options = {}) {
28
- const value = normalizeBuildWarningLine(line);
29
- if (!value.includes('[WARN]')) {
30
- return { kind: 'not-warning' };
31
- }
32
- const allowed = createBuildWarningRules(options).find((rule) => rule.pattern.test(value));
33
- if (allowed) {
34
- return { kind: 'allowed', label: allowed.label };
35
- }
36
- return { kind: 'unexpected', line: value };
22
+ function classifyBuildWarningLine(line, options = {}) {
23
+ const value = normalizeBuildWarningLine(line);
24
+ if (!value.includes("[WARN]")) {
25
+ return { kind: "not-warning" };
26
+ }
27
+ const allowed = createBuildWarningRules(options).find((rule) => rule.pattern.test(value));
28
+ if (allowed) {
29
+ return { kind: "allowed", label: allowed.label };
30
+ }
31
+ return { kind: "unexpected", line: value };
37
32
  }
38
-
39
- export function createBuildWarningSummary() {
40
- const allowedWarnings = new Map();
41
- const unexpectedWarnings = [];
42
- return {
43
- allowedWarnings,
44
- unexpectedWarnings,
45
- record(line, options = {}) {
46
- const classified = classifyBuildWarningLine(line, options);
47
- if (classified.kind === 'allowed') {
48
- allowedWarnings.set(classified.label, (allowedWarnings.get(classified.label) ?? 0) + 1);
49
- return classified;
50
- }
51
- if (classified.kind === 'unexpected') {
52
- unexpectedWarnings.push(classified.line);
53
- }
54
- return classified;
55
- },
56
- };
33
+ function createBuildWarningSummary() {
34
+ const allowedWarnings = /* @__PURE__ */ new Map();
35
+ const unexpectedWarnings = [];
36
+ return {
37
+ allowedWarnings,
38
+ unexpectedWarnings,
39
+ record(line, options = {}) {
40
+ const classified = classifyBuildWarningLine(line, options);
41
+ if (classified.kind === "allowed") {
42
+ allowedWarnings.set(classified.label, (allowedWarnings.get(classified.label) ?? 0) + 1);
43
+ return classified;
44
+ }
45
+ if (classified.kind === "unexpected") {
46
+ unexpectedWarnings.push(classified.line);
47
+ }
48
+ return classified;
49
+ }
50
+ };
57
51
  }
58
-
59
- export function mergeAllowedBuildWarnings(target, source) {
60
- for (const [label, count] of source.entries()) {
61
- target.set(label, (target.get(label) ?? 0) + count);
62
- }
63
- return target;
52
+ function mergeAllowedBuildWarnings(target, source) {
53
+ for (const [label, count] of source.entries()) {
54
+ target.set(label, (target.get(label) ?? 0) + count);
55
+ }
56
+ return target;
64
57
  }
65
-
66
- export function countAllowedBuildWarnings(allowedWarnings) {
67
- return [...allowedWarnings.values()].reduce((sum, count) => sum + count, 0);
58
+ function countAllowedBuildWarnings(allowedWarnings) {
59
+ return [...allowedWarnings.values()].reduce((sum, count) => sum + count, 0);
68
60
  }
69
-
70
- export function formatAllowedBuildWarnings(allowedWarnings) {
71
- const total = countAllowedBuildWarnings(allowedWarnings);
72
- if (total === 0) {
73
- return [];
74
- }
75
- return [
76
- `Allowed build warnings: ${total}`,
77
- ...[...allowedWarnings.entries()]
78
- .sort(([left], [right]) => left.localeCompare(right))
79
- .map(([label, count]) => `- ${label}: ${count}`),
80
- ];
61
+ function formatAllowedBuildWarnings(allowedWarnings) {
62
+ const total = countAllowedBuildWarnings(allowedWarnings);
63
+ if (total === 0) {
64
+ return [];
65
+ }
66
+ return [
67
+ `Allowed build warnings: ${total}`,
68
+ ...[...allowedWarnings.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([label, count]) => `- ${label}: ${count}`)
69
+ ];
81
70
  }
82
-
83
- export function scanBuildWarningText(text, options = {}) {
84
- const summary = createBuildWarningSummary();
85
- for (const line of String(text ?? '').split(/\r?\n/u)) {
86
- summary.record(line, options);
87
- }
88
- return {
89
- allowedWarnings: summary.allowedWarnings,
90
- unexpectedWarnings: summary.unexpectedWarnings,
91
- };
71
+ function scanBuildWarningText(text, options = {}) {
72
+ const summary = createBuildWarningSummary();
73
+ for (const line of String(text ?? "").split(/\r?\n/u)) {
74
+ summary.record(line, options);
75
+ }
76
+ return {
77
+ allowedWarnings: summary.allowedWarnings,
78
+ unexpectedWarnings: summary.unexpectedWarnings
79
+ };
92
80
  }
81
+ export {
82
+ DEFAULT_BUILD_WARNING_RULES,
83
+ classifyBuildWarningLine,
84
+ countAllowedBuildWarnings,
85
+ createBuildWarningRules,
86
+ createBuildWarningSummary,
87
+ formatAllowedBuildWarnings,
88
+ mergeAllowedBuildWarnings,
89
+ normalizeBuildWarningLine,
90
+ scanBuildWarningText
91
+ };
@@ -412,11 +412,11 @@ function extractCloudflareText(payload) {
412
412
  return null;
413
413
  }
414
414
  async function generateCloudflareCommitMessage(context, env, fetchImpl) {
415
- const token = envValue(env, "CLOUDFLARE_API_TOKEN");
416
- const accountId = envValue(env, "CLOUDFLARE_ACCOUNT_ID");
415
+ const token = envValue(env, "TREESEED_CLOUDFLARE_API_TOKEN");
416
+ const accountId = envValue(env, "TREESEED_CLOUDFLARE_ACCOUNT_ID");
417
417
  const model = envValue(env, "TREESEED_COMMIT_AI_MODEL") ?? DEFAULT_COMMIT_AI_MODEL;
418
418
  if (!token || !accountId) {
419
- throw new Error("Cloudflare commit AI requires CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID.");
419
+ throw new Error("Cloudflare commit AI requires TREESEED_CLOUDFLARE_API_TOKEN and TREESEED_CLOUDFLARE_ACCOUNT_ID.");
420
420
  }
421
421
  const timeoutMs = parseNumber(envValue(env, "TREESEED_COMMIT_AI_TIMEOUT_MS"), defaultTimeoutMs);
422
422
  const maxDiffChars = parseNumber(envValue(env, "TREESEED_COMMIT_AI_MAX_DIFF_CHARS"), defaultMaxDiffChars);
@@ -469,7 +469,7 @@ async function generateRepositoryCommitMessage(context, options = {}) {
469
469
  return { message: fallback(), provider: "fallback", fallbackUsed: true, error: error instanceof Error ? error.message : String(error) };
470
470
  }
471
471
  }
472
- const hasCloudflareConfig = Boolean(envValue(env, "CLOUDFLARE_API_TOKEN") && envValue(env, "CLOUDFLARE_ACCOUNT_ID"));
472
+ const hasCloudflareConfig = Boolean(envValue(env, "TREESEED_CLOUDFLARE_API_TOKEN") && envValue(env, "TREESEED_CLOUDFLARE_ACCOUNT_ID"));
473
473
  if ((mode === "auto" || mode === "generated") && !hasCloudflareConfig) {
474
474
  return { message: fallback(), provider: "fallback", fallbackUsed: false, error: null };
475
475
  }