@treeseed/sdk 0.10.28 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +213 -7
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +118 -59
  27. package/dist/capacity-provider.js +235 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +3 -2
  36. package/dist/control-plane.js +38 -13
  37. package/dist/copilot.d.ts +3 -0
  38. package/dist/copilot.js +16 -1
  39. package/dist/d1-http.d.ts +1 -1
  40. package/dist/d1-store.d.ts +32 -57
  41. package/dist/d1-store.js +115 -318
  42. package/dist/db/d1.d.ts +1 -232
  43. package/dist/db/index.d.ts +3 -3
  44. package/dist/db/market-schema.d.ts +50900 -11018
  45. package/dist/db/market-schema.js +2313 -467
  46. package/dist/db/node-sqlite.d.ts +1 -232
  47. package/dist/db/node-sqlite.js +7 -2
  48. package/dist/db/schema.d.ts +0 -462
  49. package/dist/db/schema.js +2 -22
  50. package/dist/dispatch.d.ts +1 -1
  51. package/dist/dispatch.js +0 -11
  52. package/dist/fixture-support.js +52 -4
  53. package/dist/governance.d.ts +133 -0
  54. package/dist/governance.js +285 -0
  55. package/dist/graph/build.d.ts +2 -2
  56. package/dist/graph/context-query-contracts.d.ts +1 -1
  57. package/dist/graph/dsl.d.ts +1 -1
  58. package/dist/graph/query.d.ts +4 -4
  59. package/dist/graph/ranking.d.ts +1 -1
  60. package/dist/graph/schema.d.ts +1 -1
  61. package/dist/graph.d.ts +11 -11
  62. package/dist/guarantees/index.d.ts +425 -0
  63. package/dist/guarantees/index.js +1146 -0
  64. package/dist/hosting/apps.d.ts +12 -0
  65. package/dist/hosting/apps.js +107 -0
  66. package/dist/hosting/builtins.d.ts +25 -0
  67. package/dist/hosting/builtins.js +602 -0
  68. package/dist/hosting/contracts.d.ts +208 -0
  69. package/dist/hosting/contracts.js +0 -0
  70. package/dist/hosting/graph.d.ts +195 -0
  71. package/dist/hosting/graph.js +1092 -0
  72. package/dist/hosting/index.d.ts +4 -0
  73. package/dist/hosting/index.js +4 -0
  74. package/dist/index.d.ts +88 -67
  75. package/dist/index.js +142 -14
  76. package/dist/local-dev/managed-dev.d.ts +85 -0
  77. package/dist/local-dev/managed-dev.js +368 -0
  78. package/dist/managed-dependencies.d.ts +9 -0
  79. package/dist/managed-dependencies.js +10 -9
  80. package/dist/market-client.d.ts +327 -9
  81. package/dist/market-client.js +464 -20
  82. package/dist/model-registry.d.ts +1 -1
  83. package/dist/model-registry.js +19 -19
  84. package/dist/operations/agent-tools.d.ts +2 -11
  85. package/dist/operations/agent-tools.js +2 -14
  86. package/dist/operations/providers/default.d.ts +1 -1
  87. package/dist/operations/providers/default.js +20 -37
  88. package/dist/operations/repository-operations.d.ts +26 -2
  89. package/dist/operations/repository-operations.js +159 -1
  90. package/dist/operations/runtime.d.ts +3 -3
  91. package/dist/operations/services/bootstrap-runner.d.ts +4 -2
  92. package/dist/operations/services/bootstrap-runner.js +22 -2
  93. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  94. package/dist/operations/services/build-warning-policy.js +81 -82
  95. package/dist/operations/services/commit-message-provider.js +4 -4
  96. package/dist/operations/services/config-runtime.d.ts +83 -24
  97. package/dist/operations/services/config-runtime.js +449 -130
  98. package/dist/operations/services/deploy.d.ts +106 -624
  99. package/dist/operations/services/deploy.js +746 -263
  100. package/dist/operations/services/deployment-readiness.d.ts +30 -0
  101. package/dist/operations/services/deployment-readiness.js +206 -0
  102. package/dist/operations/services/git-remote-policy.js +12 -4
  103. package/dist/operations/services/git-runner.d.ts +66 -0
  104. package/dist/operations/services/git-runner.js +479 -0
  105. package/dist/operations/services/git-workflow.d.ts +45 -6
  106. package/dist/operations/services/git-workflow.js +251 -23
  107. package/dist/operations/services/github-actions-verification.d.ts +4 -1
  108. package/dist/operations/services/github-actions-verification.js +12 -3
  109. package/dist/operations/services/github-api.js +22 -6
  110. package/dist/operations/services/github-automation.d.ts +4 -4
  111. package/dist/operations/services/github-automation.js +19 -21
  112. package/dist/operations/services/github-credentials.d.ts +13 -0
  113. package/dist/operations/services/github-credentials.js +59 -0
  114. package/dist/operations/services/hosted-service-checks.d.ts +81 -0
  115. package/dist/operations/services/hosted-service-checks.js +478 -0
  116. package/dist/operations/services/hosting-audit.d.ts +2 -2
  117. package/dist/operations/services/hosting-audit.js +7 -7
  118. package/dist/operations/services/hub-launch.d.ts +1 -1
  119. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  120. package/dist/operations/services/hub-provider-launch.js +22 -17
  121. package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
  122. package/dist/operations/services/live-hosted-service-checks.js +463 -0
  123. package/dist/operations/services/local-dev.js +0 -1
  124. package/dist/operations/services/managed-host-security.d.ts +1 -1
  125. package/dist/operations/services/managed-host-security.js +1 -1
  126. package/dist/operations/services/managed-repositories.d.ts +37 -0
  127. package/dist/operations/services/managed-repositories.js +177 -0
  128. package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
  129. package/dist/operations/services/operations-runner-smoke.js +198 -0
  130. package/dist/operations/services/package-adapters.d.ts +170 -0
  131. package/dist/operations/services/package-adapters.js +859 -0
  132. package/dist/operations/services/package-reference-policy.d.ts +13 -88
  133. package/dist/operations/services/package-reference-policy.js +96 -215
  134. package/dist/operations/services/project-host-operations.d.ts +4 -4
  135. package/dist/operations/services/project-platform.d.ts +57 -173
  136. package/dist/operations/services/project-platform.js +80 -111
  137. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  138. package/dist/operations/services/project-web-monitor.js +122 -5
  139. package/dist/operations/services/railway-api.d.ts +117 -5
  140. package/dist/operations/services/railway-api.js +915 -93
  141. package/dist/operations/services/railway-deploy.d.ts +30 -112
  142. package/dist/operations/services/railway-deploy.js +521 -961
  143. package/dist/operations/services/release-history.js +3 -4
  144. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  145. package/dist/operations/services/release-proof-ledger.js +81 -0
  146. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  147. package/dist/operations/services/release-proof-planner.js +195 -0
  148. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  149. package/dist/operations/services/release-proof-runner.js +169 -0
  150. package/dist/operations/services/release-proof.d.ts +81 -0
  151. package/dist/operations/services/release-proof.js +79 -0
  152. package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
  153. package/dist/operations/services/repository-save-orchestrator.js +604 -212
  154. package/dist/operations/services/runtime-paths.d.ts +1 -3
  155. package/dist/operations/services/runtime-paths.js +0 -4
  156. package/dist/operations/services/runtime-tools.d.ts +1 -191
  157. package/dist/operations/services/runtime-tools.js +4 -443
  158. package/dist/operations/services/save-deploy-preflight.js +9 -1
  159. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  160. package/dist/operations/services/template-host-bindings.js +3 -2
  161. package/dist/operations/services/template-registry.d.ts +6 -6
  162. package/dist/operations/services/template-registry.js +33 -14
  163. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  164. package/dist/operations/services/verification-cache.d.ts +25 -0
  165. package/dist/operations/services/verification-cache.js +71 -0
  166. package/dist/operations/services/workflow-timing.d.ts +25 -0
  167. package/dist/operations/services/workflow-timing.js +79 -0
  168. package/dist/operations/services/workspace-dependency-mode.js +50 -5
  169. package/dist/operations/services/workspace-preflight.js +8 -8
  170. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  171. package/dist/operations/services/workspace-save.d.ts +1 -0
  172. package/dist/operations/services/workspace-save.js +42 -19
  173. package/dist/operations/services/workspace-tools.js +42 -7
  174. package/dist/operations-registry.d.ts +1 -1
  175. package/dist/operations-registry.js +5 -6
  176. package/dist/operations-types.d.ts +1 -1
  177. package/dist/operations.d.ts +17 -11
  178. package/dist/operations.js +57 -3
  179. package/dist/platform/book-export.js +2 -0
  180. package/dist/platform/books-data.d.ts +1 -1
  181. package/dist/platform/config.d.ts +27 -0
  182. package/dist/platform/config.js +100 -0
  183. package/dist/platform/content-runtime-source.d.ts +54 -0
  184. package/dist/platform/content-runtime-source.js +169 -0
  185. package/dist/platform/contracts.d.ts +38 -2
  186. package/dist/platform/deploy-config.d.ts +1 -1
  187. package/dist/platform/deploy-config.js +80 -9
  188. package/dist/platform/deploy-runtime.d.ts +1 -1
  189. package/dist/platform/desired-state.d.ts +63 -0
  190. package/dist/platform/desired-state.js +1021 -0
  191. package/dist/platform/env.yaml +568 -45
  192. package/dist/platform/environment.d.ts +3 -2
  193. package/dist/platform/environment.js +122 -21
  194. package/dist/platform/local-content-materialization.d.ts +9 -0
  195. package/dist/platform/local-content-materialization.js +212 -0
  196. package/dist/platform/plugin.d.ts +13 -4
  197. package/dist/platform/plugins/runtime.d.ts +3 -3
  198. package/dist/platform/plugins/runtime.js +62 -1
  199. package/dist/platform/plugins.d.ts +6 -6
  200. package/dist/platform/published-content-pipeline.d.ts +3 -3
  201. package/dist/platform/published-content-pipeline.js +5 -1
  202. package/dist/platform/published-content.d.ts +4 -3
  203. package/dist/platform/site-config-schema.d.ts +1 -0
  204. package/dist/platform/site-config-schema.js +4 -1
  205. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  206. package/dist/platform/tenant-config.d.ts +1 -1
  207. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  208. package/dist/platform/utils/site-config-schema.js +400 -461
  209. package/dist/platform-operation-store.d.ts +1 -1
  210. package/dist/platform-operation-store.js +2 -2
  211. package/dist/platform-operations.js +1 -1
  212. package/dist/plugin-default.d.ts +1 -1
  213. package/dist/plugin-default.js +27 -12
  214. package/dist/project-import.d.ts +91 -0
  215. package/dist/project-import.js +257 -0
  216. package/dist/project-workflow.d.ts +1 -1
  217. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  218. package/dist/reconcile/bootstrap-systems.js +5 -5
  219. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  220. package/dist/reconcile/builtin-adapters.js +3190 -429
  221. package/dist/reconcile/contracts.d.ts +23 -6
  222. package/dist/reconcile/desired-state.d.ts +2 -192
  223. package/dist/reconcile/desired-state.js +29 -38
  224. package/dist/reconcile/engine.d.ts +61 -395
  225. package/dist/reconcile/engine.js +229 -44
  226. package/dist/reconcile/index.d.ts +10 -8
  227. package/dist/reconcile/index.js +2 -0
  228. package/dist/reconcile/live-acceptance.d.ts +100 -0
  229. package/dist/reconcile/live-acceptance.js +2027 -0
  230. package/dist/reconcile/platform.d.ts +104 -0
  231. package/dist/reconcile/platform.js +100 -0
  232. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  233. package/dist/reconcile/providers/docker-private.js +101 -0
  234. package/dist/reconcile/providers/github-private.d.ts +65 -0
  235. package/dist/reconcile/providers/github-private.js +119 -0
  236. package/dist/reconcile/providers/local-private.d.ts +28 -0
  237. package/dist/reconcile/providers/local-private.js +75 -0
  238. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  239. package/dist/reconcile/providers/railway-iac.js +275 -0
  240. package/dist/reconcile/providers/release-private.d.ts +92 -0
  241. package/dist/reconcile/providers/release-private.js +152 -0
  242. package/dist/reconcile/registry.d.ts +2 -2
  243. package/dist/reconcile/registry.js +16 -1
  244. package/dist/reconcile/state.d.ts +1 -1
  245. package/dist/reconcile/state.js +7 -44
  246. package/dist/reconcile/units.d.ts +1 -1
  247. package/dist/reconcile/units.js +9 -3
  248. package/dist/remote.d.ts +6 -6
  249. package/dist/scenes/artifacts.d.ts +16 -0
  250. package/dist/scenes/artifacts.js +61 -0
  251. package/dist/scenes/auth.d.ts +2 -0
  252. package/dist/scenes/auth.js +28 -0
  253. package/dist/scenes/base-url.d.ts +12 -0
  254. package/dist/scenes/base-url.js +123 -0
  255. package/dist/scenes/builtin-plugins.d.ts +2 -0
  256. package/dist/scenes/builtin-plugins.js +447 -0
  257. package/dist/scenes/checkpoints.d.ts +14 -0
  258. package/dist/scenes/checkpoints.js +33 -0
  259. package/dist/scenes/device-matrix.d.ts +2 -0
  260. package/dist/scenes/device-matrix.js +97 -0
  261. package/dist/scenes/devices.d.ts +11 -0
  262. package/dist/scenes/devices.js +22 -0
  263. package/dist/scenes/diagnostics.d.ts +5 -0
  264. package/dist/scenes/diagnostics.js +22 -0
  265. package/dist/scenes/diagram-providers.d.ts +2 -0
  266. package/dist/scenes/diagram-providers.js +181 -0
  267. package/dist/scenes/diagram-validation.d.ts +22 -0
  268. package/dist/scenes/diagram-validation.js +74 -0
  269. package/dist/scenes/environment.d.ts +2 -0
  270. package/dist/scenes/environment.js +65 -0
  271. package/dist/scenes/evidence-bundle.d.ts +5 -0
  272. package/dist/scenes/evidence-bundle.js +42 -0
  273. package/dist/scenes/evidence-report.d.ts +10 -0
  274. package/dist/scenes/evidence-report.js +73 -0
  275. package/dist/scenes/evidence.d.ts +16 -0
  276. package/dist/scenes/evidence.js +277 -0
  277. package/dist/scenes/index.d.ts +48 -0
  278. package/dist/scenes/index.js +312 -0
  279. package/dist/scenes/inspect.d.ts +9 -0
  280. package/dist/scenes/inspect.js +64 -0
  281. package/dist/scenes/loader.d.ts +3 -0
  282. package/dist/scenes/loader.js +38 -0
  283. package/dist/scenes/logs.d.ts +2 -0
  284. package/dist/scenes/logs.js +47 -0
  285. package/dist/scenes/operations.d.ts +3 -0
  286. package/dist/scenes/operations.js +128 -0
  287. package/dist/scenes/phase0.d.ts +9 -0
  288. package/dist/scenes/phase0.js +637 -0
  289. package/dist/scenes/planner.d.ts +12 -0
  290. package/dist/scenes/planner.js +166 -0
  291. package/dist/scenes/playwright-adapter.d.ts +2 -0
  292. package/dist/scenes/playwright-adapter.js +63 -0
  293. package/dist/scenes/plugins.d.ts +5 -0
  294. package/dist/scenes/plugins.js +115 -0
  295. package/dist/scenes/progress.d.ts +17 -0
  296. package/dist/scenes/progress.js +24 -0
  297. package/dist/scenes/publish-destinations.d.ts +12 -0
  298. package/dist/scenes/publish-destinations.js +99 -0
  299. package/dist/scenes/publish-plan-report.d.ts +10 -0
  300. package/dist/scenes/publish-plan-report.js +70 -0
  301. package/dist/scenes/publish-plan.d.ts +15 -0
  302. package/dist/scenes/publish-plan.js +248 -0
  303. package/dist/scenes/publish-redaction.d.ts +16 -0
  304. package/dist/scenes/publish-redaction.js +148 -0
  305. package/dist/scenes/publish-release-record.d.ts +13 -0
  306. package/dist/scenes/publish-release-record.js +34 -0
  307. package/dist/scenes/publish-report.d.ts +10 -0
  308. package/dist/scenes/publish-report.js +67 -0
  309. package/dist/scenes/publish.d.ts +16 -0
  310. package/dist/scenes/publish.js +298 -0
  311. package/dist/scenes/registry.d.ts +12 -0
  312. package/dist/scenes/registry.js +65 -0
  313. package/dist/scenes/remotion-adapter.d.ts +3 -0
  314. package/dist/scenes/remotion-adapter.js +94 -0
  315. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  316. package/dist/scenes/remotion-composition-registry.js +12 -0
  317. package/dist/scenes/remotion-compositions.d.ts +15 -0
  318. package/dist/scenes/remotion-compositions.js +464 -0
  319. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  320. package/dist/scenes/remotion-diagrams.js +188 -0
  321. package/dist/scenes/remotion-input.d.ts +13 -0
  322. package/dist/scenes/remotion-input.js +291 -0
  323. package/dist/scenes/remotion-visuals.d.ts +29 -0
  324. package/dist/scenes/remotion-visuals.js +198 -0
  325. package/dist/scenes/render-media-assets.d.ts +9 -0
  326. package/dist/scenes/render-media-assets.js +117 -0
  327. package/dist/scenes/render-report.d.ts +10 -0
  328. package/dist/scenes/render-report.js +27 -0
  329. package/dist/scenes/render.d.ts +2 -0
  330. package/dist/scenes/render.js +218 -0
  331. package/dist/scenes/reporter.d.ts +3 -0
  332. package/dist/scenes/reporter.js +101 -0
  333. package/dist/scenes/resume.d.ts +2 -0
  334. package/dist/scenes/resume.js +79 -0
  335. package/dist/scenes/runner.d.ts +2 -0
  336. package/dist/scenes/runner.js +674 -0
  337. package/dist/scenes/schema.d.ts +6 -0
  338. package/dist/scenes/schema.js +994 -0
  339. package/dist/scenes/seed.d.ts +2 -0
  340. package/dist/scenes/seed.js +83 -0
  341. package/dist/scenes/segments.d.ts +15 -0
  342. package/dist/scenes/segments.js +79 -0
  343. package/dist/scenes/selectors.d.ts +3 -0
  344. package/dist/scenes/selectors.js +21 -0
  345. package/dist/scenes/timeline.d.ts +11 -0
  346. package/dist/scenes/timeline.js +26 -0
  347. package/dist/scenes/timeouts.d.ts +6 -0
  348. package/dist/scenes/timeouts.js +17 -0
  349. package/dist/scenes/training-captions.d.ts +14 -0
  350. package/dist/scenes/training-captions.js +98 -0
  351. package/dist/scenes/training-report.d.ts +10 -0
  352. package/dist/scenes/training-report.js +78 -0
  353. package/dist/scenes/training-transcript.d.ts +24 -0
  354. package/dist/scenes/training-transcript.js +204 -0
  355. package/dist/scenes/training.d.ts +10 -0
  356. package/dist/scenes/training.js +134 -0
  357. package/dist/scenes/types.d.ts +1872 -0
  358. package/dist/scenes/types.js +8 -0
  359. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  360. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  361. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  362. package/dist/scenes/visual-audit-fixtures.js +210 -0
  363. package/dist/scenes/visual-audit-report.d.ts +11 -0
  364. package/dist/scenes/visual-audit-report.js +85 -0
  365. package/dist/scenes/visual-audit-review.d.ts +23 -0
  366. package/dist/scenes/visual-audit-review.js +829 -0
  367. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  368. package/dist/scenes/visual-audit-routes.js +308 -0
  369. package/dist/scenes/visual-audit.d.ts +3 -0
  370. package/dist/scenes/visual-audit.js +596 -0
  371. package/dist/scripts/build-dist.js +154 -40
  372. package/dist/scripts/check-build-warnings.js +42 -53
  373. package/dist/scripts/cleanup-markdown.js +1 -1
  374. package/dist/scripts/cli-test-fixtures.js +24 -28
  375. package/dist/scripts/deployment-readiness.js +20 -0
  376. package/dist/scripts/generate-treedx-openapi-types.js +186 -0
  377. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  378. package/dist/scripts/operations-runner-smoke.js +16 -0
  379. package/dist/scripts/package-tools.js +12 -1
  380. package/dist/scripts/prepare.js +3 -7
  381. package/dist/scripts/release-verify.js +6 -6
  382. package/dist/scripts/run-fixture-astro-command.js +1 -1
  383. package/dist/scripts/template-catalog.test.js +68 -82
  384. package/dist/scripts/tenant-dev.js +0 -10
  385. package/dist/scripts/tenant-workflow-action.js +10 -1
  386. package/dist/scripts/test-cloudflare-local.js +1 -1
  387. package/dist/scripts/test-scaffold.js +0 -1
  388. package/dist/scripts/test-smoke.js +3 -3
  389. package/dist/scripts/treeseed-build-dist.js +4 -7
  390. package/dist/scripts/treeseed-release-verify.js +1 -1
  391. package/dist/scripts/verify-driver.js +30 -21
  392. package/dist/scripts/workflow-commands.test.js +18 -27
  393. package/dist/scripts/workspace-command-e2e.js +1 -1
  394. package/dist/scripts/workspace-lint.js +6 -0
  395. package/dist/scripts/workspace-release-test.js +90 -1
  396. package/dist/scripts/workspace-test.js +6 -0
  397. package/dist/sdk-dispatch.d.ts +1 -1
  398. package/dist/sdk-dispatch.js +0 -16
  399. package/dist/sdk-fields.d.ts +1 -1
  400. package/dist/sdk-filters.d.ts +1 -1
  401. package/dist/sdk-types.d.ts +1352 -116
  402. package/dist/sdk-types.js +413 -2
  403. package/dist/sdk.d.ts +106 -100
  404. package/dist/sdk.js +211 -51
  405. package/dist/secrets-capability.d.ts +421 -0
  406. package/dist/secrets-capability.js +530 -0
  407. package/dist/seeds/normalize.js +1 -0
  408. package/dist/seeds/planner.js +38 -0
  409. package/dist/seeds/schema.js +293 -4
  410. package/dist/seeds/types.d.ts +60 -0
  411. package/dist/seeds/types.js +9 -1
  412. package/dist/service-credentials.d.ts +54 -0
  413. package/dist/service-credentials.js +112 -0
  414. package/dist/stores/cursor-store.d.ts +2 -2
  415. package/dist/stores/envelopes.d.ts +1 -1
  416. package/dist/stores/helpers.d.ts +1 -1
  417. package/dist/stores/lease-store.d.ts +2 -2
  418. package/dist/stores/message-store.d.ts +2 -2
  419. package/dist/stores/operational-store.d.ts +3 -26
  420. package/dist/stores/operational-store.js +0 -225
  421. package/dist/stores/project-workflow-store.d.ts +2 -2
  422. package/dist/stores/run-store.d.ts +2 -3
  423. package/dist/stores/run-store.js +0 -98
  424. package/dist/stores/subscription-store.d.ts +2 -3
  425. package/dist/stores/subscription-store.js +0 -100
  426. package/dist/template-catalog.d.ts +1 -1
  427. package/dist/template-launch-requirements.d.ts +2 -2
  428. package/dist/template-launch-requirements.js +9 -0
  429. package/dist/template-launch-ui.d.ts +2 -2
  430. package/dist/treedx/adapters.d.ts +6 -0
  431. package/dist/treedx/adapters.js +36 -0
  432. package/dist/treedx/client.d.ts +222 -0
  433. package/dist/treedx/client.js +871 -0
  434. package/dist/treedx/errors.d.ts +13 -0
  435. package/dist/treedx/errors.js +17 -0
  436. package/dist/treedx/federated-client.d.ts +27 -0
  437. package/dist/treedx/federated-client.js +158 -0
  438. package/dist/treedx/generated/openapi-types.d.ts +3558 -0
  439. package/dist/treedx/generated/openapi-types.js +0 -0
  440. package/dist/treedx/graph-adapter.d.ts +33 -0
  441. package/dist/treedx/graph-adapter.js +156 -0
  442. package/dist/treedx/index.d.ts +14 -0
  443. package/dist/treedx/index.js +48 -0
  444. package/dist/treedx/market-integration.d.ts +27 -0
  445. package/dist/treedx/market-integration.js +131 -0
  446. package/dist/treedx/ports.d.ts +166 -0
  447. package/dist/treedx/ports.js +231 -0
  448. package/dist/treedx/query-adapter.d.ts +19 -0
  449. package/dist/treedx/query-adapter.js +62 -0
  450. package/dist/treedx/registry-client.d.ts +11 -0
  451. package/dist/treedx/registry-client.js +19 -0
  452. package/dist/treedx/repository-adapter.d.ts +45 -0
  453. package/dist/treedx/repository-adapter.js +319 -0
  454. package/dist/treedx/sdk-integration.d.ts +27 -0
  455. package/dist/treedx/sdk-integration.js +63 -0
  456. package/dist/treedx/types.d.ts +1084 -0
  457. package/dist/treedx/types.js +8 -0
  458. package/dist/treedx/workspace-adapter.d.ts +27 -0
  459. package/dist/treedx/workspace-adapter.js +65 -0
  460. package/dist/treedx-backends.d.ts +220 -0
  461. package/dist/treedx-backends.js +634 -0
  462. package/dist/treedx-client.d.ts +89 -0
  463. package/dist/treedx-client.js +184 -0
  464. package/dist/treeseed/services/compose.yml +2 -3
  465. package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
  466. package/dist/types/agents.d.ts +256 -0
  467. package/dist/types/agents.js +42 -1
  468. package/dist/verification.d.ts +1 -0
  469. package/dist/verification.js +143 -14
  470. package/dist/workflow/operations.d.ts +580 -523
  471. package/dist/workflow/operations.js +2084 -1279
  472. package/dist/workflow/policy.js +19 -7
  473. package/dist/workflow/runs.d.ts +9 -3
  474. package/dist/workflow/runs.js +66 -26
  475. package/dist/workflow/session.d.ts +4 -1
  476. package/dist/workflow/session.js +50 -10
  477. package/dist/workflow/worktrees.d.ts +6 -2
  478. package/dist/workflow/worktrees.js +98 -15
  479. package/dist/workflow-state.d.ts +17 -4
  480. package/dist/workflow-state.js +68 -41
  481. package/dist/workflow-support.d.ts +26 -17
  482. package/dist/workflow-support.js +84 -24
  483. package/dist/workflow.d.ts +51 -16
  484. package/dist/workflow.js +19 -7
  485. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  486. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  487. package/drizzle/market/0004_treedx_market_integration.sql +99 -0
  488. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  489. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  490. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  491. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  492. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  493. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  494. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  495. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  496. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  497. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  498. package/package.json +106 -18
  499. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  500. package/templates/github/deploy-web.workflow.yml +49 -12
  501. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  502. package/dist/operations/services/mailpit-runtime.js +0 -67
  503. package/dist/operations/services/release-candidate.d.ts +0 -41
  504. package/dist/operations/services/release-candidate.js +0 -616
  505. package/dist/scripts/ensure-mailpit.js +0 -48
  506. package/dist/scripts/logs-mailpit.js +0 -2
  507. package/dist/scripts/run-ts.js +0 -45
  508. package/dist/scripts/stop-mailpit.js +0 -5
  509. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -1,13 +1,8 @@
1
- export declare const AGENT_OPERATION_NAMES: readonly ["switch", "dev", "verify", "save", "stage", "merge_to_staging", "close", "release"];
1
+ export declare const AGENT_OPERATION_NAMES: readonly ["switch", "dev", "verify", "save", "update", "stage", "close", "release"];
2
2
  export declare const AGENT_OPERATION_MODES: readonly ["dry_run", "read_only", "mutating"];
3
3
  export type AgentOperationName = (typeof AGENT_OPERATION_NAMES)[number];
4
4
  export type AgentOperationMode = (typeof AGENT_OPERATION_MODES)[number];
5
5
  export type AgentOperationStatus = 'completed' | 'waiting' | 'failed' | 'skipped' | 'retry_created';
6
- export interface AgentOperationApprovalRef {
7
- id: string;
8
- kind?: string;
9
- state: 'pending' | 'approved' | 'rejected' | 'expired' | 'superseded';
10
- }
11
6
  export interface AgentOperationRequest {
12
7
  operation: AgentOperationName;
13
8
  mode: AgentOperationMode;
@@ -22,8 +17,6 @@ export interface AgentOperationRequest {
22
17
  worktreeRoot?: string;
23
18
  featureBranch?: string;
24
19
  stagingBranch?: string;
25
- approvalId?: string;
26
- approval?: AgentOperationApprovalRef;
27
20
  permissionGrantId?: string;
28
21
  allowedPaths?: string[];
29
22
  forbiddenPaths?: string[];
@@ -48,8 +41,6 @@ export interface AgentOperationGrant {
48
41
  environments?: string[];
49
42
  allowedPaths?: string[];
50
43
  forbiddenPaths?: string[];
51
- requiresApproval?: boolean;
52
- approvalIds?: string[];
53
44
  expiresAt?: string;
54
45
  metadata?: Record<string, unknown>;
55
46
  }
@@ -80,7 +71,7 @@ export interface AgentOperationResult {
80
71
  };
81
72
  metadata: Record<string, unknown>;
82
73
  }
83
- export type AgentOperationPermissionCode = 'allowed' | 'invalid_operation' | 'operation_permission_required' | 'operation_grant_inactive' | 'operation_grant_expired' | 'operation_mode_not_granted' | 'operation_role_not_granted' | 'operation_task_kind_not_granted' | 'operation_project_not_granted' | 'operation_environment_not_granted' | 'operation_approval_required' | 'operation_release_approval_required' | 'operation_worktree_required' | 'operation_allowed_paths_required' | 'operation_path_not_allowed' | 'operation_path_forbidden';
74
+ export type AgentOperationPermissionCode = 'allowed' | 'invalid_operation' | 'operation_permission_required' | 'operation_grant_inactive' | 'operation_grant_expired' | 'operation_mode_not_granted' | 'operation_role_not_granted' | 'operation_task_kind_not_granted' | 'operation_project_not_granted' | 'operation_environment_not_granted' | 'operation_worktree_required' | 'operation_allowed_paths_required' | 'operation_path_not_allowed' | 'operation_path_forbidden';
84
75
  export interface AgentOperationPermissionDecision {
85
76
  allowed: boolean;
86
77
  status: 'completed' | 'waiting' | 'failed';
@@ -3,8 +3,8 @@ const AGENT_OPERATION_NAMES = [
3
3
  "dev",
4
4
  "verify",
5
5
  "save",
6
+ "update",
6
7
  "stage",
7
- "merge_to_staging",
8
8
  "close",
9
9
  "release"
10
10
  ];
@@ -73,12 +73,6 @@ function decideAgentOperationPermission(input) {
73
73
  if (!isAgentOperationName(request.operation)) {
74
74
  return deny("invalid_operation", `Unsupported agent operation "${String(request.operation)}".`, { status: "failed" });
75
75
  }
76
- if (request.operation === "release") {
77
- const approval = request.approval;
78
- if (!approval || approval.state !== "approved" || request.approvalId && approval.id !== request.approvalId) {
79
- return deny("operation_release_approval_required", "Release requires an explicit approved release approval.");
80
- }
81
- }
82
76
  const grant = resolveAgentOperationGrant(request, input.grants, now);
83
77
  if (!grant) {
84
78
  return deny("operation_permission_required", `No operation grant allows ${request.agentRole} to run ${request.operation}.`);
@@ -102,19 +96,13 @@ function decideAgentOperationPermission(input) {
102
96
  if (!listMatches(request.environment, grant.environments)) {
103
97
  return deny("operation_environment_not_granted", `Operation grant ${grant.id} does not allow environment ${request.environment}.`, { grant });
104
98
  }
105
- if (grant.requiresApproval && (!request.approval || request.approval.state !== "approved")) {
106
- return deny("operation_approval_required", `Operation grant ${grant.id} requires approval.`, { grant });
107
- }
108
- if (grant.approvalIds?.length && (!request.approval || !grant.approvalIds.includes(request.approval.id) || request.approval.state !== "approved")) {
109
- return deny("operation_approval_required", `Operation grant ${grant.id} requires one of its approved approval ids.`, { grant });
110
- }
111
99
  if (request.mode === "mutating" && !request.worktreeRoot && request.operation !== "release") {
112
100
  return deny("operation_worktree_required", `Mutating operation ${request.operation} requires an assigned worktree root.`, { grant });
113
101
  }
114
102
  const allowedPaths = request.allowedPaths?.length ? request.allowedPaths : grant.allowedPaths ?? [];
115
103
  const forbiddenPaths = [...grant.forbiddenPaths ?? [], ...request.forbiddenPaths ?? []];
116
104
  const changedPaths = request.changedPaths ?? [];
117
- if ((request.operation === "stage" || request.operation === "merge_to_staging") && allowedPaths.length === 0) {
105
+ if (request.operation === "stage" && allowedPaths.length === 0) {
118
106
  return deny("operation_allowed_paths_required", `${request.operation} requires allowed paths.`, { grant });
119
107
  }
120
108
  for (const changedPath of changedPaths) {
@@ -1,4 +1,4 @@
1
- import type { TreeseedOperationImplementation, TreeseedOperationMetadata, TreeseedOperationProvider } from '../../operations-types.ts';
1
+ import type { TreeseedOperationImplementation, TreeseedOperationMetadata, TreeseedOperationProvider } from '../../operations-types.js';
2
2
  export declare class DefaultTreeseedOperationsProvider implements TreeseedOperationProvider {
3
3
  readonly id = "default";
4
4
  private readonly operations;
@@ -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;
@@ -24,14 +24,16 @@ export declare function runTreeseedBootstrapDag<TResult = unknown>({ nodes, exec
24
24
  timings?: TreeseedTimingEntry[];
25
25
  }): Promise<Map<string, TResult>>;
26
26
  export declare function sleep(milliseconds: number): Promise<void>;
27
- export declare function runPrefixedCommand(command: string, args: string[], { cwd, env, input, write, prefix, }: {
27
+ export declare function runPrefixedCommand(command: string, args: string[], { cwd, env, input, write, prefix, timeoutMs, }: {
28
28
  cwd: string;
29
29
  env?: NodeJS.ProcessEnv | Record<string, string | undefined>;
30
30
  input?: string;
31
31
  write?: TreeseedBootstrapWriter;
32
32
  prefix: TreeseedBootstrapTaskPrefix;
33
+ timeoutMs?: number;
33
34
  }): Promise<{
34
35
  status: number | null;
35
36
  stdout: string;
36
37
  stderr: string;
38
+ timedOut?: boolean;
37
39
  }>;
@@ -99,7 +99,8 @@ async function runPrefixedCommand(command, args, {
99
99
  env = process.env,
100
100
  input,
101
101
  write,
102
- prefix
102
+ prefix,
103
+ timeoutMs
103
104
  }) {
104
105
  return await new Promise((resolvePromise, reject) => {
105
106
  const childEnv = {};
@@ -117,6 +118,19 @@ async function runPrefixedCommand(command, args, {
117
118
  let stderr = "";
118
119
  let stdoutBuffer = "";
119
120
  let stderrBuffer = "";
121
+ let timedOut = false;
122
+ let forceKillTimer = null;
123
+ const timeoutTimer = Number.isFinite(timeoutMs) && Number(timeoutMs) > 0 ? setTimeout(() => {
124
+ timedOut = true;
125
+ const message = `Command timed out after ${Math.round(Number(timeoutMs) / 1e3)}s: ${command} ${args.join(" ")}`;
126
+ stderr += `${stderr.endsWith("\n") || stderr.length === 0 ? "" : "\n"}${message}
127
+ `;
128
+ stderrBuffer += `${stderrBuffer.endsWith("\n") || stderrBuffer.length === 0 ? "" : "\n"}${message}
129
+ `;
130
+ flush("stderr");
131
+ child.kill("SIGTERM");
132
+ forceKillTimer = setTimeout(() => child.kill("SIGKILL"), 5e3);
133
+ }, Number(timeoutMs)) : null;
120
134
  const flush = (stream, force = false) => {
121
135
  let buffer = stream === "stdout" ? stdoutBuffer : stderrBuffer;
122
136
  let newlineIndex = buffer.search(/\r?\n/u);
@@ -150,9 +164,15 @@ async function runPrefixedCommand(command, args, {
150
164
  });
151
165
  child.on("error", reject);
152
166
  child.on("close", (status) => {
167
+ if (timeoutTimer) {
168
+ clearTimeout(timeoutTimer);
169
+ }
170
+ if (forceKillTimer) {
171
+ clearTimeout(forceKillTimer);
172
+ }
153
173
  flush("stdout", true);
154
174
  flush("stderr", true);
155
- resolvePromise({ status, stdout, stderr });
175
+ resolvePromise({ status, stdout, stderr, ...timedOut ? { timedOut: true } : {} });
156
176
  });
157
177
  if (input !== void 0) {
158
178
  child.stdin.end(input);
@@ -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
+ };