@treeseed/sdk 0.11.0 → 0.12.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/README.md +9 -4
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +117 -60
  27. package/dist/capacity-provider.js +215 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +2 -2
  36. package/dist/copilot.d.ts +3 -0
  37. package/dist/copilot.js +16 -1
  38. package/dist/d1-http.d.ts +1 -1
  39. package/dist/d1-store.d.ts +32 -57
  40. package/dist/d1-store.js +115 -318
  41. package/dist/db/d1.d.ts +1 -232
  42. package/dist/db/index.d.ts +3 -3
  43. package/dist/db/market-schema.d.ts +49037 -11843
  44. package/dist/db/market-schema.js +1788 -50
  45. package/dist/db/node-sqlite.d.ts +1 -232
  46. package/dist/db/schema.d.ts +0 -462
  47. package/dist/db/schema.js +2 -22
  48. package/dist/dispatch.d.ts +1 -1
  49. package/dist/dispatch.js +0 -11
  50. package/dist/fixture-support.js +52 -4
  51. package/dist/governance.d.ts +133 -0
  52. package/dist/governance.js +285 -0
  53. package/dist/graph/build.d.ts +2 -2
  54. package/dist/graph/context-query-contracts.d.ts +1 -1
  55. package/dist/graph/dsl.d.ts +1 -1
  56. package/dist/graph/query.d.ts +4 -4
  57. package/dist/graph/ranking.d.ts +1 -1
  58. package/dist/graph/schema.d.ts +1 -1
  59. package/dist/graph.d.ts +11 -11
  60. package/dist/guarantees/index.d.ts +425 -0
  61. package/dist/guarantees/index.js +1146 -0
  62. package/dist/hosting/apps.d.ts +1 -1
  63. package/dist/hosting/builtins.d.ts +1 -1
  64. package/dist/hosting/builtins.js +9 -198
  65. package/dist/hosting/contracts.d.ts +3 -2
  66. package/dist/hosting/graph.d.ts +24 -21
  67. package/dist/hosting/graph.js +280 -294
  68. package/dist/hosting/index.d.ts +4 -4
  69. package/dist/index.d.ts +88 -74
  70. package/dist/index.js +81 -10
  71. package/dist/local-dev/managed-dev.d.ts +85 -0
  72. package/dist/local-dev/managed-dev.js +368 -0
  73. package/dist/managed-dependencies.d.ts +9 -0
  74. package/dist/managed-dependencies.js +10 -8
  75. package/dist/market-client.d.ts +265 -7
  76. package/dist/market-client.js +381 -9
  77. package/dist/model-registry.d.ts +1 -1
  78. package/dist/model-registry.js +19 -19
  79. package/dist/operations/agent-tools.d.ts +2 -11
  80. package/dist/operations/agent-tools.js +2 -14
  81. package/dist/operations/providers/default.d.ts +1 -1
  82. package/dist/operations/providers/default.js +20 -37
  83. package/dist/operations/repository-operations.d.ts +26 -2
  84. package/dist/operations/repository-operations.js +159 -1
  85. package/dist/operations/runtime.d.ts +3 -3
  86. package/dist/operations/services/bootstrap-runner.d.ts +1 -1
  87. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  88. package/dist/operations/services/build-warning-policy.js +81 -82
  89. package/dist/operations/services/commit-message-provider.js +4 -4
  90. package/dist/operations/services/config-runtime.d.ts +73 -19
  91. package/dist/operations/services/config-runtime.js +276 -100
  92. package/dist/operations/services/deploy.d.ts +41 -622
  93. package/dist/operations/services/deploy.js +181 -213
  94. package/dist/operations/services/deployment-readiness.d.ts +1 -1
  95. package/dist/operations/services/deployment-readiness.js +38 -7
  96. package/dist/operations/services/git-remote-policy.js +12 -4
  97. package/dist/operations/services/git-runner.d.ts +66 -0
  98. package/dist/operations/services/git-runner.js +479 -0
  99. package/dist/operations/services/git-workflow.d.ts +43 -5
  100. package/dist/operations/services/git-workflow.js +242 -20
  101. package/dist/operations/services/github-actions-verification.d.ts +3 -1
  102. package/dist/operations/services/github-actions-verification.js +11 -3
  103. package/dist/operations/services/github-api.js +21 -5
  104. package/dist/operations/services/github-automation.d.ts +3 -3
  105. package/dist/operations/services/github-automation.js +15 -18
  106. package/dist/operations/services/github-credentials.js +2 -1
  107. package/dist/operations/services/hosted-service-checks.d.ts +19 -1
  108. package/dist/operations/services/hosted-service-checks.js +162 -11
  109. package/dist/operations/services/hosting-audit.d.ts +2 -2
  110. package/dist/operations/services/hosting-audit.js +7 -7
  111. package/dist/operations/services/hub-launch.d.ts +1 -1
  112. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  113. package/dist/operations/services/hub-provider-launch.js +19 -14
  114. package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
  115. package/dist/operations/services/live-hosted-service-checks.js +193 -80
  116. package/dist/operations/services/local-dev.js +0 -1
  117. package/dist/operations/services/managed-host-security.d.ts +1 -1
  118. package/dist/operations/services/managed-repositories.d.ts +37 -0
  119. package/dist/operations/services/managed-repositories.js +177 -0
  120. package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
  121. package/dist/operations/services/operations-runner-smoke.js +22 -4
  122. package/dist/operations/services/package-adapters.d.ts +77 -2
  123. package/dist/operations/services/package-adapters.js +629 -56
  124. package/dist/operations/services/package-reference-policy.d.ts +12 -88
  125. package/dist/operations/services/package-reference-policy.js +81 -213
  126. package/dist/operations/services/project-host-operations.d.ts +4 -4
  127. package/dist/operations/services/project-platform.d.ts +19 -193
  128. package/dist/operations/services/project-platform.js +31 -103
  129. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  130. package/dist/operations/services/project-web-monitor.js +97 -2
  131. package/dist/operations/services/railway-api.d.ts +36 -7
  132. package/dist/operations/services/railway-api.js +331 -100
  133. package/dist/operations/services/railway-deploy.d.ts +7 -95
  134. package/dist/operations/services/railway-deploy.js +334 -742
  135. package/dist/operations/services/release-history.js +3 -4
  136. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  137. package/dist/operations/services/release-proof-ledger.js +81 -0
  138. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  139. package/dist/operations/services/release-proof-planner.js +195 -0
  140. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  141. package/dist/operations/services/release-proof-runner.js +169 -0
  142. package/dist/operations/services/release-proof.d.ts +81 -0
  143. package/dist/operations/services/release-proof.js +79 -0
  144. package/dist/operations/services/repository-save-orchestrator.d.ts +6 -7
  145. package/dist/operations/services/repository-save-orchestrator.js +353 -174
  146. package/dist/operations/services/runtime-paths.d.ts +1 -3
  147. package/dist/operations/services/runtime-paths.js +0 -4
  148. package/dist/operations/services/runtime-tools.d.ts +1 -192
  149. package/dist/operations/services/runtime-tools.js +4 -444
  150. package/dist/operations/services/save-deploy-preflight.js +9 -1
  151. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  152. package/dist/operations/services/template-host-bindings.js +3 -2
  153. package/dist/operations/services/template-registry.d.ts +6 -6
  154. package/dist/operations/services/template-registry.js +33 -14
  155. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  156. package/dist/operations/services/workflow-timing.d.ts +25 -0
  157. package/dist/operations/services/workflow-timing.js +79 -0
  158. package/dist/operations/services/workspace-dependency-mode.js +41 -4
  159. package/dist/operations/services/workspace-preflight.js +8 -8
  160. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  161. package/dist/operations/services/workspace-save.d.ts +1 -0
  162. package/dist/operations/services/workspace-save.js +41 -18
  163. package/dist/operations/services/workspace-tools.js +40 -6
  164. package/dist/operations-registry.d.ts +1 -1
  165. package/dist/operations-registry.js +5 -6
  166. package/dist/operations-types.d.ts +1 -1
  167. package/dist/operations.d.ts +17 -11
  168. package/dist/operations.js +57 -3
  169. package/dist/platform/book-export.js +2 -0
  170. package/dist/platform/books-data.d.ts +1 -1
  171. package/dist/platform/config.d.ts +27 -0
  172. package/dist/platform/config.js +100 -0
  173. package/dist/platform/content-runtime-source.d.ts +54 -0
  174. package/dist/platform/content-runtime-source.js +169 -0
  175. package/dist/platform/contracts.d.ts +6 -1
  176. package/dist/platform/deploy-config.d.ts +1 -1
  177. package/dist/platform/deploy-config.js +7 -1
  178. package/dist/platform/deploy-runtime.d.ts +1 -1
  179. package/dist/platform/desired-state.d.ts +66 -0
  180. package/dist/platform/desired-state.js +1052 -0
  181. package/dist/platform/env.yaml +414 -19
  182. package/dist/platform/environment.d.ts +2 -2
  183. package/dist/platform/environment.js +54 -22
  184. package/dist/platform/local-content-materialization.d.ts +9 -0
  185. package/dist/platform/local-content-materialization.js +212 -0
  186. package/dist/platform/plugin.d.ts +5 -5
  187. package/dist/platform/plugins/runtime.d.ts +3 -3
  188. package/dist/platform/plugins/runtime.js +62 -1
  189. package/dist/platform/plugins.d.ts +6 -6
  190. package/dist/platform/published-content-pipeline.d.ts +3 -3
  191. package/dist/platform/published-content-pipeline.js +5 -1
  192. package/dist/platform/published-content.d.ts +4 -3
  193. package/dist/platform/site-config-schema.d.ts +1 -0
  194. package/dist/platform/site-config-schema.js +4 -1
  195. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  196. package/dist/platform/tenant-config.d.ts +1 -1
  197. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  198. package/dist/platform/utils/site-config-schema.js +400 -461
  199. package/dist/platform-operation-store.d.ts +1 -1
  200. package/dist/plugin-default.d.ts +1 -1
  201. package/dist/plugin-default.js +27 -12
  202. package/dist/project-import.d.ts +91 -0
  203. package/dist/project-import.js +257 -0
  204. package/dist/project-workflow.d.ts +1 -1
  205. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  206. package/dist/reconcile/bootstrap-systems.js +3 -3
  207. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  208. package/dist/reconcile/builtin-adapters.js +2924 -346
  209. package/dist/reconcile/contracts.d.ts +15 -2
  210. package/dist/reconcile/desired-state.d.ts +2 -193
  211. package/dist/reconcile/desired-state.js +24 -33
  212. package/dist/reconcile/engine.d.ts +60 -397
  213. package/dist/reconcile/engine.js +182 -18
  214. package/dist/reconcile/index.d.ts +10 -10
  215. package/dist/reconcile/live-acceptance.d.ts +22 -1
  216. package/dist/reconcile/live-acceptance.js +456 -44
  217. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  218. package/dist/reconcile/providers/docker-private.js +101 -0
  219. package/dist/reconcile/providers/github-private.d.ts +65 -0
  220. package/dist/reconcile/providers/github-private.js +119 -0
  221. package/dist/reconcile/providers/local-private.d.ts +28 -0
  222. package/dist/reconcile/providers/local-private.js +75 -0
  223. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  224. package/dist/reconcile/providers/railway-iac.js +275 -0
  225. package/dist/reconcile/providers/release-private.d.ts +92 -0
  226. package/dist/reconcile/providers/release-private.js +152 -0
  227. package/dist/reconcile/registry.d.ts +2 -2
  228. package/dist/reconcile/registry.js +16 -1
  229. package/dist/reconcile/state.d.ts +1 -1
  230. package/dist/reconcile/state.js +3 -40
  231. package/dist/reconcile/units.d.ts +1 -1
  232. package/dist/reconcile/units.js +7 -1
  233. package/dist/remote.d.ts +6 -6
  234. package/dist/scenes/artifacts.d.ts +16 -0
  235. package/dist/scenes/artifacts.js +61 -0
  236. package/dist/scenes/auth.d.ts +2 -0
  237. package/dist/scenes/auth.js +28 -0
  238. package/dist/scenes/base-url.d.ts +12 -0
  239. package/dist/scenes/base-url.js +123 -0
  240. package/dist/scenes/builtin-plugins.d.ts +2 -0
  241. package/dist/scenes/builtin-plugins.js +447 -0
  242. package/dist/scenes/checkpoints.d.ts +14 -0
  243. package/dist/scenes/checkpoints.js +33 -0
  244. package/dist/scenes/device-matrix.d.ts +2 -0
  245. package/dist/scenes/device-matrix.js +97 -0
  246. package/dist/scenes/devices.d.ts +11 -0
  247. package/dist/scenes/devices.js +22 -0
  248. package/dist/scenes/diagnostics.d.ts +5 -0
  249. package/dist/scenes/diagnostics.js +22 -0
  250. package/dist/scenes/diagram-providers.d.ts +2 -0
  251. package/dist/scenes/diagram-providers.js +181 -0
  252. package/dist/scenes/diagram-validation.d.ts +22 -0
  253. package/dist/scenes/diagram-validation.js +74 -0
  254. package/dist/scenes/environment.d.ts +2 -0
  255. package/dist/scenes/environment.js +65 -0
  256. package/dist/scenes/evidence-bundle.d.ts +5 -0
  257. package/dist/scenes/evidence-bundle.js +42 -0
  258. package/dist/scenes/evidence-report.d.ts +10 -0
  259. package/dist/scenes/evidence-report.js +73 -0
  260. package/dist/scenes/evidence.d.ts +16 -0
  261. package/dist/scenes/evidence.js +277 -0
  262. package/dist/scenes/index.d.ts +48 -0
  263. package/dist/scenes/index.js +312 -0
  264. package/dist/scenes/inspect.d.ts +9 -0
  265. package/dist/scenes/inspect.js +64 -0
  266. package/dist/scenes/loader.d.ts +3 -0
  267. package/dist/scenes/loader.js +38 -0
  268. package/dist/scenes/logs.d.ts +2 -0
  269. package/dist/scenes/logs.js +47 -0
  270. package/dist/scenes/operations.d.ts +3 -0
  271. package/dist/scenes/operations.js +128 -0
  272. package/dist/scenes/phase0.d.ts +9 -0
  273. package/dist/scenes/phase0.js +637 -0
  274. package/dist/scenes/planner.d.ts +12 -0
  275. package/dist/scenes/planner.js +166 -0
  276. package/dist/scenes/playwright-adapter.d.ts +2 -0
  277. package/dist/scenes/playwright-adapter.js +63 -0
  278. package/dist/scenes/plugins.d.ts +5 -0
  279. package/dist/scenes/plugins.js +115 -0
  280. package/dist/scenes/progress.d.ts +17 -0
  281. package/dist/scenes/progress.js +24 -0
  282. package/dist/scenes/publish-destinations.d.ts +12 -0
  283. package/dist/scenes/publish-destinations.js +99 -0
  284. package/dist/scenes/publish-plan-report.d.ts +10 -0
  285. package/dist/scenes/publish-plan-report.js +70 -0
  286. package/dist/scenes/publish-plan.d.ts +15 -0
  287. package/dist/scenes/publish-plan.js +248 -0
  288. package/dist/scenes/publish-redaction.d.ts +16 -0
  289. package/dist/scenes/publish-redaction.js +148 -0
  290. package/dist/scenes/publish-release-record.d.ts +13 -0
  291. package/dist/scenes/publish-release-record.js +34 -0
  292. package/dist/scenes/publish-report.d.ts +10 -0
  293. package/dist/scenes/publish-report.js +67 -0
  294. package/dist/scenes/publish.d.ts +16 -0
  295. package/dist/scenes/publish.js +298 -0
  296. package/dist/scenes/registry.d.ts +12 -0
  297. package/dist/scenes/registry.js +65 -0
  298. package/dist/scenes/remotion-adapter.d.ts +3 -0
  299. package/dist/scenes/remotion-adapter.js +94 -0
  300. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  301. package/dist/scenes/remotion-composition-registry.js +12 -0
  302. package/dist/scenes/remotion-compositions.d.ts +15 -0
  303. package/dist/scenes/remotion-compositions.js +464 -0
  304. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  305. package/dist/scenes/remotion-diagrams.js +188 -0
  306. package/dist/scenes/remotion-input.d.ts +13 -0
  307. package/dist/scenes/remotion-input.js +291 -0
  308. package/dist/scenes/remotion-visuals.d.ts +29 -0
  309. package/dist/scenes/remotion-visuals.js +198 -0
  310. package/dist/scenes/render-media-assets.d.ts +9 -0
  311. package/dist/scenes/render-media-assets.js +117 -0
  312. package/dist/scenes/render-report.d.ts +10 -0
  313. package/dist/scenes/render-report.js +27 -0
  314. package/dist/scenes/render.d.ts +2 -0
  315. package/dist/scenes/render.js +218 -0
  316. package/dist/scenes/reporter.d.ts +3 -0
  317. package/dist/scenes/reporter.js +101 -0
  318. package/dist/scenes/resume.d.ts +2 -0
  319. package/dist/scenes/resume.js +79 -0
  320. package/dist/scenes/runner.d.ts +2 -0
  321. package/dist/scenes/runner.js +674 -0
  322. package/dist/scenes/schema.d.ts +6 -0
  323. package/dist/scenes/schema.js +994 -0
  324. package/dist/scenes/seed.d.ts +2 -0
  325. package/dist/scenes/seed.js +83 -0
  326. package/dist/scenes/segments.d.ts +15 -0
  327. package/dist/scenes/segments.js +79 -0
  328. package/dist/scenes/selectors.d.ts +3 -0
  329. package/dist/scenes/selectors.js +21 -0
  330. package/dist/scenes/timeline.d.ts +11 -0
  331. package/dist/scenes/timeline.js +26 -0
  332. package/dist/scenes/timeouts.d.ts +6 -0
  333. package/dist/scenes/timeouts.js +17 -0
  334. package/dist/scenes/training-captions.d.ts +14 -0
  335. package/dist/scenes/training-captions.js +98 -0
  336. package/dist/scenes/training-report.d.ts +10 -0
  337. package/dist/scenes/training-report.js +78 -0
  338. package/dist/scenes/training-transcript.d.ts +24 -0
  339. package/dist/scenes/training-transcript.js +204 -0
  340. package/dist/scenes/training.d.ts +10 -0
  341. package/dist/scenes/training.js +134 -0
  342. package/dist/scenes/types.d.ts +1872 -0
  343. package/dist/scenes/types.js +8 -0
  344. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  345. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  346. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  347. package/dist/scenes/visual-audit-fixtures.js +210 -0
  348. package/dist/scenes/visual-audit-report.d.ts +11 -0
  349. package/dist/scenes/visual-audit-report.js +85 -0
  350. package/dist/scenes/visual-audit-review.d.ts +23 -0
  351. package/dist/scenes/visual-audit-review.js +829 -0
  352. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  353. package/dist/scenes/visual-audit-routes.js +308 -0
  354. package/dist/scenes/visual-audit.d.ts +3 -0
  355. package/dist/scenes/visual-audit.js +596 -0
  356. package/dist/scripts/build-dist.js +154 -40
  357. package/dist/scripts/check-build-warnings.js +42 -53
  358. package/dist/scripts/cleanup-markdown.js +1 -1
  359. package/dist/scripts/cli-test-fixtures.js +24 -28
  360. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  361. package/dist/scripts/package-tools.js +12 -1
  362. package/dist/scripts/prepare.js +3 -7
  363. package/dist/scripts/release-verify.js +2 -5
  364. package/dist/scripts/run-fixture-astro-command.js +1 -1
  365. package/dist/scripts/template-catalog.test.js +68 -82
  366. package/dist/scripts/tenant-dev.js +0 -10
  367. package/dist/scripts/test-cloudflare-local.js +1 -1
  368. package/dist/scripts/test-scaffold.js +0 -1
  369. package/dist/scripts/test-smoke.js +3 -3
  370. package/dist/scripts/treeseed-build-dist.js +4 -7
  371. package/dist/scripts/treeseed-release-verify.js +1 -1
  372. package/dist/scripts/verify-driver.js +30 -21
  373. package/dist/scripts/workflow-commands.test.js +18 -27
  374. package/dist/scripts/workspace-command-e2e.js +1 -1
  375. package/dist/scripts/workspace-lint.js +6 -0
  376. package/dist/scripts/workspace-release-test.js +90 -1
  377. package/dist/scripts/workspace-test.js +6 -0
  378. package/dist/sdk-dispatch.d.ts +1 -1
  379. package/dist/sdk-dispatch.js +0 -16
  380. package/dist/sdk-fields.d.ts +1 -1
  381. package/dist/sdk-filters.d.ts +1 -1
  382. package/dist/sdk-types.d.ts +1184 -113
  383. package/dist/sdk-types.js +393 -0
  384. package/dist/sdk.d.ts +74 -79
  385. package/dist/sdk.js +27 -36
  386. package/dist/secrets-capability.d.ts +421 -0
  387. package/dist/secrets-capability.js +530 -0
  388. package/dist/seeds/normalize.js +1 -0
  389. package/dist/seeds/planner.js +38 -0
  390. package/dist/seeds/schema.js +293 -4
  391. package/dist/seeds/types.d.ts +60 -0
  392. package/dist/seeds/types.js +9 -1
  393. package/dist/service-credentials.d.ts +54 -0
  394. package/dist/service-credentials.js +112 -0
  395. package/dist/stores/cursor-store.d.ts +2 -2
  396. package/dist/stores/envelopes.d.ts +1 -1
  397. package/dist/stores/helpers.d.ts +1 -1
  398. package/dist/stores/lease-store.d.ts +2 -2
  399. package/dist/stores/message-store.d.ts +2 -2
  400. package/dist/stores/operational-store.d.ts +3 -26
  401. package/dist/stores/operational-store.js +0 -225
  402. package/dist/stores/project-workflow-store.d.ts +2 -2
  403. package/dist/stores/run-store.d.ts +2 -3
  404. package/dist/stores/run-store.js +0 -98
  405. package/dist/stores/subscription-store.d.ts +2 -3
  406. package/dist/stores/subscription-store.js +0 -100
  407. package/dist/template-catalog.d.ts +1 -1
  408. package/dist/template-launch-requirements.d.ts +2 -2
  409. package/dist/template-launch-ui.d.ts +2 -2
  410. package/dist/treedx/adapters.d.ts +6 -6
  411. package/dist/treedx/client.d.ts +1 -1
  412. package/dist/treedx/errors.d.ts +1 -1
  413. package/dist/treedx/federated-client.d.ts +3 -3
  414. package/dist/treedx/graph-adapter.d.ts +2 -2
  415. package/dist/treedx/index.d.ts +14 -14
  416. package/dist/treedx/market-integration.d.ts +1 -1
  417. package/dist/treedx/ports.d.ts +30 -30
  418. package/dist/treedx/query-adapter.d.ts +3 -3
  419. package/dist/treedx/registry-client.d.ts +2 -2
  420. package/dist/treedx/repository-adapter.d.ts +4 -4
  421. package/dist/treedx/repository-adapter.js +14 -3
  422. package/dist/treedx/sdk-integration.d.ts +3 -3
  423. package/dist/treedx/types.d.ts +2 -2
  424. package/dist/treedx/workspace-adapter.d.ts +2 -2
  425. package/dist/treedx-backends.d.ts +13 -11
  426. package/dist/treedx-backends.js +52 -50
  427. package/dist/treedx-client.d.ts +3 -0
  428. package/dist/treedx-client.js +10 -1
  429. package/dist/treeseed/services/compose.yml +2 -3
  430. package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
  431. package/dist/types/agents.d.ts +256 -0
  432. package/dist/types/agents.js +42 -1
  433. package/dist/verification.d.ts +1 -0
  434. package/dist/verification.js +143 -14
  435. package/dist/workflow/operations.d.ts +510 -559
  436. package/dist/workflow/operations.js +1891 -1342
  437. package/dist/workflow/policy.js +19 -7
  438. package/dist/workflow/runs.d.ts +9 -3
  439. package/dist/workflow/runs.js +66 -26
  440. package/dist/workflow/session.d.ts +4 -1
  441. package/dist/workflow/session.js +50 -10
  442. package/dist/workflow/worktrees.d.ts +6 -2
  443. package/dist/workflow/worktrees.js +98 -15
  444. package/dist/workflow-state.d.ts +5 -5
  445. package/dist/workflow-state.js +27 -17
  446. package/dist/workflow-support.d.ts +26 -25
  447. package/dist/workflow-support.js +27 -31
  448. package/dist/workflow.d.ts +46 -16
  449. package/dist/workflow.js +19 -7
  450. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  451. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  452. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  453. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  454. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  455. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  456. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  457. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  458. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  459. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  460. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  461. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  462. package/package.json +75 -18
  463. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  464. package/templates/github/deploy-web.workflow.yml +12 -8
  465. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  466. package/dist/operations/services/mailpit-runtime.js +0 -67
  467. package/dist/operations/services/release-candidate.d.ts +0 -60
  468. package/dist/operations/services/release-candidate.js +0 -953
  469. package/dist/scripts/ensure-mailpit.js +0 -48
  470. package/dist/scripts/logs-mailpit.js +0 -2
  471. package/dist/scripts/run-ts.js +0 -45
  472. package/dist/scripts/stop-mailpit.js +0 -5
  473. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -1,5 +1,5 @@
1
1
  import { randomBytes } from "node:crypto";
2
- import { spawnSync } from "node:child_process";
2
+ import { runTreeseedGit } from "../operations/services/git-runner.js";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { dirname, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
@@ -35,6 +35,8 @@ function firstExistingPath(candidates) {
35
35
  function resolveSdkEnvironmentPath() {
36
36
  const candidates = [
37
37
  resolve(moduleDir, "env.yaml"),
38
+ resolve(moduleDir, "../../src/platform/env.yaml"),
39
+ resolve(moduleDir, "../../dist/platform/env.yaml"),
38
40
  resolve(moduleDir, "../src/platform/env.yaml"),
39
41
  resolve(moduleDir, "../dist/platform/env.yaml")
40
42
  ];
@@ -48,12 +50,8 @@ function resolveSiblingPackageEnvironmentPath(packageDir) {
48
50
  resolve(moduleDir, `../../${packageDir}/dist/env.yaml`)
49
51
  ]);
50
52
  }
51
- const SDK_ENVIRONMENT_PATH = resolveSdkEnvironmentPath();
52
- const CORE_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("core");
53
- const API_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("api");
54
- const AGENT_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("agent");
55
53
  const TENANT_ENVIRONMENT_OVERLAY_PATH = "src/env.yaml";
56
- const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.ai";
54
+ const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.dev";
57
55
  function loadOptionalTenantConfig() {
58
56
  try {
59
57
  return loadTreeseedManifest();
@@ -117,6 +115,9 @@ function codexExecutionSelected(context) {
117
115
  const execution = context.deployConfig.providers?.agents?.execution ?? "codex";
118
116
  return execution === "codex" || execution === "codex_subscription";
119
117
  }
118
+ function copilotExecutionSelected(context) {
119
+ return context.deployConfig.providers?.agents?.execution === "github_copilot";
120
+ }
120
121
  function railwayManagedEnabled(context) {
121
122
  if (!workflowPlaneAllows("processing")) {
122
123
  return false;
@@ -179,6 +180,13 @@ function contactEmailDefault(context) {
179
180
  function workdayWindowsDefault() {
180
181
  return JSON.stringify([{ days: [1, 2, 3, 4, 5], startTime: "09:00", endTime: "17:00" }]);
181
182
  }
183
+ function localApiDatabaseUrlDefault(_context, _scope, values = {}) {
184
+ const port = values.TREESEED_MARKET_LOCAL_POSTGRES_PORT?.trim() || values.TREESEED_API_LOCAL_POSTGRES_PORT?.trim() || process.env.TREESEED_MARKET_LOCAL_POSTGRES_PORT?.trim() || "54329";
185
+ const database = values.TREESEED_MARKET_LOCAL_POSTGRES_DATABASE?.trim() || values.TREESEED_API_LOCAL_POSTGRES_DATABASE?.trim() || "treeseed_api";
186
+ const user = values.TREESEED_MARKET_LOCAL_POSTGRES_USER?.trim() || values.TREESEED_API_LOCAL_POSTGRES_USER?.trim() || "treeseed";
187
+ const password = values.TREESEED_MARKET_LOCAL_POSTGRES_PASSWORD?.trim() || values.TREESEED_API_LOCAL_POSTGRES_PASSWORD?.trim() || "treeseed-local-dev";
188
+ return `postgres://${encodeURIComponent(user)}:${encodeURIComponent(password)}@127.0.0.1:${port}/${encodeURIComponent(database)}`;
189
+ }
182
190
  function normalizeUrl(value) {
183
191
  return value.trim().replace(/\/$/u, "");
184
192
  }
@@ -208,6 +216,15 @@ function deriveApiDomainFromProjectDomain(domain) {
208
216
  }
209
217
  return `api.${segments.slice(1).join(".")}`;
210
218
  }
219
+ function projectDomainsDefault(context, scope) {
220
+ if (scope === "staging") {
221
+ return context.deployConfig.surfaces?.web?.environments?.staging?.domain ?? primaryHostFromUrl(context.deployConfig.surfaces?.web?.environments?.staging?.baseUrl) ?? primaryHostFromUrl(context.deployConfig.siteUrl);
222
+ }
223
+ if (scope === "prod") {
224
+ return context.deployConfig.surfaces?.web?.environments?.prod?.domain ?? primaryHostFromUrl(context.deployConfig.surfaces?.web?.environments?.prod?.baseUrl) ?? primaryHostFromUrl(context.deployConfig.surfaces?.web?.publicBaseUrl) ?? primaryHostFromUrl(context.deployConfig.siteUrl);
225
+ }
226
+ return primaryHostFromUrl(context.deployConfig.siteUrl);
227
+ }
211
228
  function resolveConfiguredApiBaseUrl(context, scope, values = {}) {
212
229
  const localBaseUrl = context.deployConfig.services?.api?.environments?.local?.baseUrl ?? context.deployConfig.surfaces?.api?.localBaseUrl ?? "http://127.0.0.1:3000";
213
230
  if (scope === "local") {
@@ -284,10 +301,18 @@ function parseGitHubRepositorySlugFromRemote(remoteUrl) {
284
301
  return null;
285
302
  }
286
303
  function resolveGitHubOriginRepository(context) {
287
- const result = spawnSync("git", ["remote", "get-url", "origin"], {
304
+ const rootResult = runTreeseedGit(["rev-parse", "--show-toplevel"], {
305
+ cwd: context.tenantRoot,
306
+ mode: "read",
307
+ allowFailure: true
308
+ });
309
+ if (rootResult.status !== 0 || resolve(rootResult.stdout.trim()) !== resolve(context.tenantRoot)) {
310
+ return null;
311
+ }
312
+ const result = runTreeseedGit(["remote", "get-url", "origin"], {
288
313
  cwd: context.tenantRoot,
289
- stdio: "pipe",
290
- encoding: "utf8"
314
+ mode: "read",
315
+ allowFailure: true
291
316
  });
292
317
  if (result.status !== 0) {
293
318
  return null;
@@ -305,8 +330,9 @@ const VALUE_RESOLVERS = {
305
330
  localFormsBypassDefault: () => "true",
306
331
  localSmtpHostDefault: () => localSmtpHostDefault(),
307
332
  localSmtpPortDefault: () => localSmtpPortDefault(),
333
+ localApiDatabaseUrlDefault: (context, scope, values) => localApiDatabaseUrlDefault(context, scope, values),
308
334
  contactEmailDefault: (context) => contactEmailDefault(context),
309
- projectDomainsDefault: (context) => primaryHostFromUrl(context.deployConfig.siteUrl),
335
+ projectDomainsDefault: (context, scope) => projectDomainsDefault(context, scope),
310
336
  apiBaseUrlDefault: (context, scope, values) => resolveConfiguredApiBaseUrl(context, scope, values),
311
337
  webServiceIdDefault: (_context, _scope, values) => resolveWebServiceId(values),
312
338
  apiWebServiceIdDefault: (_context, _scope, values) => resolveApiWebServiceId(values),
@@ -355,6 +381,7 @@ const PREDICATES = {
355
381
  processingPlaneEnabled: (context) => processingPlaneEnabled(context),
356
382
  formsEnabled: (context) => formsEnabled(context),
357
383
  codexExecutionSelected: (context) => codexExecutionSelected(context),
384
+ copilotExecutionSelected: (context) => copilotExecutionSelected(context),
358
385
  railwayManagedEnabled: (context) => railwayManagedEnabled(context),
359
386
  hubTreeseedHosted: (context) => resolveHubMode(context) === "treeseed_hosted",
360
387
  hubCustomerHosted: (context) => resolveHubMode(context) === "customer_hosted",
@@ -503,25 +530,29 @@ function mergeEntryYaml(baseEntry, id, override) {
503
530
  }
504
531
  function collectOverlaySources(context) {
505
532
  const sources = [];
506
- const sdkOverlay = readYamlOverlayIfPresent(SDK_ENVIRONMENT_PATH);
533
+ const sdkEnvironmentPath = resolveSdkEnvironmentPath();
534
+ const sdkOverlay = readYamlOverlayIfPresent(sdkEnvironmentPath);
507
535
  if (!sdkOverlay) {
508
- throw new Error(`Treeseed SDK environment registry file was not found at ${SDK_ENVIRONMENT_PATH}.`);
536
+ throw new Error(`Treeseed SDK environment registry file was not found at ${sdkEnvironmentPath}.`);
509
537
  }
510
- sources.push({ label: SDK_ENVIRONMENT_PATH, overlay: sdkOverlay });
538
+ sources.push({ label: sdkEnvironmentPath, overlay: sdkOverlay });
511
539
  if (webSurfaceEnabled(context)) {
512
- const coreOverlay = readYamlOverlayIfPresent(CORE_ENVIRONMENT_PATH);
540
+ const coreEnvironmentPath = resolveSiblingPackageEnvironmentPath("core");
541
+ const coreOverlay = readYamlOverlayIfPresent(coreEnvironmentPath);
513
542
  if (coreOverlay) {
514
- sources.push({ label: CORE_ENVIRONMENT_PATH, overlay: coreOverlay });
543
+ sources.push({ label: coreEnvironmentPath, overlay: coreOverlay });
515
544
  }
516
545
  }
517
546
  if (apiSurfaceEnabled(context) || processingPlaneEnabled(context)) {
518
- const apiOverlay = readYamlOverlayIfPresent(API_ENVIRONMENT_PATH);
547
+ const apiEnvironmentPath = resolveSiblingPackageEnvironmentPath("api");
548
+ const apiOverlay = readYamlOverlayIfPresent(apiEnvironmentPath);
519
549
  if (apiOverlay) {
520
- sources.push({ label: API_ENVIRONMENT_PATH, overlay: apiOverlay });
550
+ sources.push({ label: apiEnvironmentPath, overlay: apiOverlay });
521
551
  }
522
- const agentOverlay = readYamlOverlayIfPresent(AGENT_ENVIRONMENT_PATH);
552
+ const agentEnvironmentPath = resolveSiblingPackageEnvironmentPath("agent");
553
+ const agentOverlay = readYamlOverlayIfPresent(agentEnvironmentPath);
523
554
  if (agentOverlay) {
524
- sources.push({ label: AGENT_ENVIRONMENT_PATH, overlay: agentOverlay });
555
+ sources.push({ label: agentEnvironmentPath, overlay: agentOverlay });
525
556
  }
526
557
  }
527
558
  let discoveredApiApps = [];
@@ -530,10 +561,11 @@ function collectOverlaySources(context) {
530
561
  } catch {
531
562
  discoveredApiApps = [];
532
563
  }
533
- if (discoveredApiApps.length > 0 && !sources.some((source) => source.label === API_ENVIRONMENT_PATH)) {
534
- const apiOverlay = readYamlOverlayIfPresent(API_ENVIRONMENT_PATH);
564
+ const discoveredApiEnvironmentPath = resolveSiblingPackageEnvironmentPath("api");
565
+ if (discoveredApiApps.length > 0 && !sources.some((source) => source.label === discoveredApiEnvironmentPath)) {
566
+ const apiOverlay = readYamlOverlayIfPresent(discoveredApiEnvironmentPath);
535
567
  if (apiOverlay) {
536
- sources.push({ label: API_ENVIRONMENT_PATH, overlay: apiOverlay });
568
+ sources.push({ label: discoveredApiEnvironmentPath, overlay: apiOverlay });
537
569
  }
538
570
  }
539
571
  for (const application of discoveredApiApps) {
@@ -0,0 +1,9 @@
1
+ import type { TreeseedDesiredEnvironment, TreeseedDesiredResource } from './desired-state.js';
2
+ export declare const TREESEED_LOCAL_CONTENT_MODES: readonly ["auto", "none", "preview", "edit"];
3
+ export type TreeseedLocalContentMode = typeof TREESEED_LOCAL_CONTENT_MODES[number];
4
+ export type TreeseedLocalContentMaterializationStatus = 'not_requested' | 'existing_path_ready' | 'existing_path_missing' | 'managed_clone_ready' | 'managed_clone_missing' | 'submodule_ready' | 'submodule_missing' | 'site_not_prepared' | 'blocked';
5
+ export declare function buildProjectLocalContentResources({ tenantRoot, environment, localContent, }: {
6
+ tenantRoot: string;
7
+ environment: TreeseedDesiredEnvironment;
8
+ localContent?: TreeseedLocalContentMode;
9
+ }): TreeseedDesiredResource[];
@@ -0,0 +1,212 @@
1
+ import { existsSync, statSync } from "node:fs";
2
+ import { basename, resolve } from "node:path";
3
+ import { loadAndPlanSeed } from "../seeds/index.js";
4
+ const TREESEED_LOCAL_CONTENT_MODES = ["auto", "none", "preview", "edit"];
5
+ function isRecord(value) {
6
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
7
+ }
8
+ function stringValue(value, fallback = "") {
9
+ return typeof value === "string" && value.trim() ? value.trim() : fallback;
10
+ }
11
+ function safeSegment(value) {
12
+ return value.toLowerCase().replace(/[^a-z0-9]+/gu, "-").replace(/^-+|-+$/gu, "") || "project";
13
+ }
14
+ function normalizeRelativePath(value, fallback = ".") {
15
+ const raw = stringValue(value, fallback).replace(/\\/gu, "/").replace(/^\/+/u, "");
16
+ const parts = raw.split("/").filter((part) => part && part !== ".");
17
+ if (parts.some((part) => part === "..")) {
18
+ return fallback;
19
+ }
20
+ return parts.length === 0 ? "." : parts.join("/");
21
+ }
22
+ function pathFrom(root, ...parts) {
23
+ const clean = parts.filter((part) => Boolean(part && part !== "."));
24
+ return resolve(root, ...clean);
25
+ }
26
+ function isPreparedSitePath(path) {
27
+ if (!existsSync(path)) return false;
28
+ const stat = statSync(path);
29
+ if (!stat.isDirectory()) return false;
30
+ return [
31
+ "treeseed.site.yaml",
32
+ "astro.config.ts",
33
+ "astro.config.ts",
34
+ "package.json",
35
+ "src"
36
+ ].some((entry) => existsSync(resolve(path, entry)));
37
+ }
38
+ function contentSourceMode(source) {
39
+ if (source === "local_directory") return "local_directory";
40
+ if (source === "treedx_snapshot") return "treedx";
41
+ return "r2";
42
+ }
43
+ function projectRepository(value) {
44
+ if (!isRecord(value)) return null;
45
+ const provider = stringValue(value.provider);
46
+ const owner = stringValue(value.owner);
47
+ const name = stringValue(value.name);
48
+ const gitUrl = stringValue(value.gitUrl);
49
+ const role = stringValue(value.role, "software");
50
+ if (!provider || !owner || !name || !gitUrl) return null;
51
+ return {
52
+ role,
53
+ provider,
54
+ owner,
55
+ name,
56
+ gitUrl,
57
+ defaultBranch: stringValue(value.defaultBranch, "main"),
58
+ checkoutPath: stringValue(value.checkoutPath) || void 0,
59
+ submodulePath: stringValue(value.submodulePath) || void 0,
60
+ webUrl: stringValue(value.webUrl) || void 0
61
+ };
62
+ }
63
+ function projectArchitecture(value) {
64
+ if (!isRecord(value)) return null;
65
+ const topology = stringValue(value.topology);
66
+ const contentRuntimeSource = stringValue(value.contentRuntimeSource);
67
+ const localContentMaterialization = stringValue(value.localContentMaterialization);
68
+ if (!topology || !contentRuntimeSource || !localContentMaterialization) return null;
69
+ return {
70
+ topology,
71
+ rootPath: normalizeRelativePath(value.rootPath),
72
+ sitePath: normalizeRelativePath(value.sitePath),
73
+ contentPath: stringValue(value.contentPath) ? normalizeRelativePath(value.contentPath) : void 0,
74
+ contentRuntimeSource,
75
+ localContentMaterialization,
76
+ contentPublishTarget: isRecord(value.contentPublishTarget) ? value.contentPublishTarget : void 0,
77
+ requiresLocalContentForCi: value.requiresLocalContentForCi === true,
78
+ requiresLocalContentForDeploy: value.requiresLocalContentForDeploy === true
79
+ };
80
+ }
81
+ function hubRepository(value) {
82
+ if (!isRecord(value)) return null;
83
+ const payload = value;
84
+ const projectKey = stringValue(payload.projectKey);
85
+ const role = stringValue(payload.role);
86
+ const provider = stringValue(payload.provider);
87
+ const owner = stringValue(payload.owner);
88
+ const name = stringValue(payload.name);
89
+ const gitUrl = stringValue(payload.gitUrl);
90
+ if (!projectKey || role !== "content" || !provider || !owner || !name || !gitUrl) return null;
91
+ return {
92
+ projectKey,
93
+ role,
94
+ provider,
95
+ owner,
96
+ name,
97
+ gitUrl,
98
+ defaultBranch: stringValue(payload.defaultBranch) || stringValue(payload.currentBranch) || "main",
99
+ submodulePath: stringValue(payload.submodulePath) || void 0
100
+ };
101
+ }
102
+ function requestedMaterialization(architecture, mode) {
103
+ if (mode === "none") return "none";
104
+ if (mode === "preview" || mode === "edit") {
105
+ if (architecture.localContentMaterialization === "none" && architecture.contentRuntimeSource !== "local_directory") {
106
+ return "managed_clone";
107
+ }
108
+ return architecture.localContentMaterialization === "none" ? "managed_clone" : architecture.localContentMaterialization;
109
+ }
110
+ return architecture.localContentMaterialization;
111
+ }
112
+ function buildProjectLocalContentResources({
113
+ tenantRoot,
114
+ environment,
115
+ localContent = "auto"
116
+ }) {
117
+ if (environment !== "local") return [];
118
+ const seed = loadAndPlanSeed({
119
+ projectRoot: tenantRoot,
120
+ seedName: "treeseed",
121
+ environments: "local",
122
+ mode: "plan"
123
+ });
124
+ if (!seed.ok || !seed.plan) return [];
125
+ const contentRepositories = /* @__PURE__ */ new Map();
126
+ for (const action of seed.plan.actions) {
127
+ if (action.kind !== "hubRepository") continue;
128
+ const repo = hubRepository(action.payload);
129
+ if (repo) contentRepositories.set(repo.projectKey, repo);
130
+ }
131
+ return seed.plan.actions.flatMap((action) => {
132
+ if (action.kind !== "project") return [];
133
+ const payload = action.payload;
134
+ const architecture = projectArchitecture(payload.architecture);
135
+ const repository = projectRepository(payload.repository);
136
+ const slug = stringValue(payload.slug, safeSegment(action.key));
137
+ const teamSlug = stringValue(payload.teamKey, "team:treeseed").replace(/^team:/u, "") || "treeseed";
138
+ if (!architecture || !repository) return [];
139
+ const contentRepository = contentRepositories.get(action.key) ?? repository;
140
+ const materialization = requestedMaterialization(architecture, localContent);
141
+ const rootPath = normalizeRelativePath(architecture.rootPath);
142
+ const sitePath = normalizeRelativePath(architecture.sitePath);
143
+ const contentPath = architecture.contentPath ? normalizeRelativePath(architecture.contentPath) : null;
144
+ const repositoryCheckoutPath = normalizeRelativePath(repository.checkoutPath, ".");
145
+ const sourceRepoSlug = `${contentRepository.owner}/${contentRepository.name}`;
146
+ const managedTarget = pathFrom(tenantRoot, ".treeseed", "local-content", safeSegment(teamSlug), safeSegment(slug), "content");
147
+ const existingRoot = pathFrom(tenantRoot, repositoryCheckoutPath, rootPath);
148
+ const effectiveLocalPath = materialization === "managed_clone" ? managedTarget : materialization === "submodule" ? pathFrom(tenantRoot, repositoryCheckoutPath, normalizeRelativePath(contentRepository.submodulePath ?? repository.submodulePath ?? contentPath ?? sitePath)) : materialization === "existing_path" ? pathFrom(existingRoot, contentPath ?? sitePath) : null;
149
+ const siteLocalPath = materialization === "managed_clone" ? pathFrom(managedTarget, sitePath) : pathFrom(existingRoot, sitePath);
150
+ const siteReady = isPreparedSitePath(siteLocalPath);
151
+ const exists = effectiveLocalPath ? existsSync(effectiveLocalPath) : false;
152
+ const materializationStatus = materialization === "none" ? "not_requested" : materialization === "existing_path" ? exists ? siteReady ? "existing_path_ready" : "site_not_prepared" : "existing_path_missing" : materialization === "managed_clone" ? exists ? siteReady ? "managed_clone_ready" : "site_not_prepared" : "managed_clone_missing" : exists ? siteReady ? "submodule_ready" : "site_not_prepared" : "submodule_missing";
153
+ const executeRequested = (localContent === "preview" || localContent === "edit") && (materialization === "managed_clone" || materialization === "submodule");
154
+ return [{
155
+ id: `local-content-materialization:${safeSegment(teamSlug)}:${safeSegment(slug)}:content`,
156
+ kind: "local-content-materialization",
157
+ provider: "local",
158
+ environment,
159
+ packageId: "@treeseed/market",
160
+ serviceId: `content:${slug}`,
161
+ logicalName: `${stringValue(payload.name, slug)} local content materialization`,
162
+ dependencies: architecture.contentRuntimeSource === "treedx_snapshot" && !executeRequested ? ["local-treedx:team-primary"] : [],
163
+ spec: {
164
+ teamKey: stringValue(payload.teamKey, "team:treeseed"),
165
+ teamSlug,
166
+ projectKey: action.key,
167
+ projectSlug: slug,
168
+ projectName: stringValue(payload.name, slug),
169
+ topology: architecture.topology,
170
+ rootPath,
171
+ sitePath,
172
+ contentPath,
173
+ contentRuntimeSource: architecture.contentRuntimeSource,
174
+ contentSourceMode: contentSourceMode(architecture.contentRuntimeSource),
175
+ localContentMaterialization: materialization,
176
+ configuredLocalContentMaterialization: architecture.localContentMaterialization,
177
+ requestedLocalContentMode: localContent,
178
+ executeRequested,
179
+ repository: {
180
+ provider: repository.provider,
181
+ owner: repository.owner,
182
+ name: repository.name,
183
+ gitUrl: repository.gitUrl,
184
+ defaultBranch: repository.defaultBranch ?? "main",
185
+ checkoutPath: repository.checkoutPath ?? null,
186
+ submodulePath: repository.submodulePath ?? null
187
+ },
188
+ contentRepository: {
189
+ provider: contentRepository.provider,
190
+ owner: contentRepository.owner,
191
+ name: contentRepository.name,
192
+ gitUrl: contentRepository.gitUrl,
193
+ defaultBranch: contentRepository.defaultBranch ?? repository.defaultBranch ?? "main",
194
+ submodulePath: contentRepository.submodulePath ?? null
195
+ },
196
+ sourceRepoSlug,
197
+ effectiveLocalPath,
198
+ siteLocalPath,
199
+ docsSiteReadiness: siteReady ? "ready" : "site_not_prepared",
200
+ materializationStatus,
201
+ targetRelativePath: effectiveLocalPath ? effectiveLocalPath.replace(`${tenantRoot}/`, "") : null,
202
+ managedCloneRoot: resolve(tenantRoot, ".treeseed", "local-content"),
203
+ defaultDirectoryName: basename(effectiveLocalPath ?? slug)
204
+ },
205
+ source: { type: "package-adapter", id: `project-architecture:${action.key}` }
206
+ }];
207
+ });
208
+ }
209
+ export {
210
+ TREESEED_LOCAL_CONTENT_MODES,
211
+ buildProjectLocalContentResources
212
+ };
@@ -1,8 +1,8 @@
1
- import type { TreeseedDeployConfig, TreeseedPlatformLayerDefinition, TreeseedPlatformResourceKind, TreeseedPlatformSurfaceName, TreeseedTenantConfig } from './contracts.ts';
2
- import type { TreeseedEnvironmentRegistryOverlay } from './environment.ts';
3
- import type { SdkGraphRankingProvider } from '../sdk-types.ts';
4
- import type { TreeseedReconcileAdapter } from '../reconcile/contracts.ts';
5
- import type { TreeseedApplicationHostingProfile, TreeseedHostAdapter, TreeseedServiceTypeAdapter } from '../hosting/contracts.ts';
1
+ import type { TreeseedDeployConfig, TreeseedPlatformLayerDefinition, TreeseedPlatformResourceKind, TreeseedPlatformSurfaceName, TreeseedTenantConfig } from './contracts.js';
2
+ import type { TreeseedEnvironmentRegistryOverlay } from './environment.js';
3
+ import type { SdkGraphRankingProvider } from '../sdk-types.js';
4
+ import type { TreeseedReconcileAdapter } from '../reconcile/contracts.js';
5
+ import type { TreeseedApplicationHostingProfile, TreeseedHostAdapter, TreeseedServiceTypeAdapter } from '../hosting/contracts.js';
6
6
  export type TreeseedSiteLayerDefinition = TreeseedPlatformLayerDefinition & {
7
7
  kinds?: Array<'pages' | 'styles' | 'components'>;
8
8
  };
@@ -1,6 +1,6 @@
1
- import type { TreeseedDeployConfig } from '../contracts.ts';
2
- import type { TreeseedPluginEnvironmentContext } from '../plugin.ts';
3
- import type { SdkGraphRankingProvider } from '../../sdk-types.ts';
1
+ import type { TreeseedDeployConfig } from '../contracts.js';
2
+ import type { TreeseedPluginEnvironmentContext } from '../plugin.js';
3
+ import type { SdkGraphRankingProvider } from '../../sdk-types.js';
4
4
  type LoadedPluginEntry = {
5
5
  package: string;
6
6
  config: Record<string, unknown>;
@@ -1,4 +1,5 @@
1
- import { existsSync } from "node:fs";
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { spawnSync } from "node:child_process";
2
3
  import { createRequire } from "node:module";
3
4
  import path from "node:path";
4
5
  import { fileURLToPath } from "node:url";
@@ -52,6 +53,59 @@ function resolveInstalledPluginPath(packageName, tenantRoot) {
52
53
  paths: [tenantRoot, process.cwd()]
53
54
  });
54
55
  }
56
+ function parseTreeseedPackageReference(packageName) {
57
+ const match = packageName.match(/^@treeseed\/([^/]+)(?:\/(.+))?$/u);
58
+ if (!match) return null;
59
+ return {
60
+ packageId: match[1],
61
+ subpath: match[2] ?? "index"
62
+ };
63
+ }
64
+ function buildWorkspacePluginArtifacts(packageDir, packageName) {
65
+ const packageJsonPath = path.resolve(packageDir, "package.json");
66
+ let packageJson;
67
+ try {
68
+ packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
69
+ } catch {
70
+ return false;
71
+ }
72
+ const scripts = packageJson.scripts && typeof packageJson.scripts === "object" && !Array.isArray(packageJson.scripts) ? packageJson.scripts : {};
73
+ const buildScript = typeof scripts["build:dist"] === "string" && scripts["build:dist"].trim() ? "build:dist" : typeof scripts.build === "string" && scripts.build.trim() ? "build" : null;
74
+ if (!buildScript) return false;
75
+ const result = spawnSync("npm", ["--prefix", packageDir, "run", buildScript], {
76
+ cwd: path.resolve(packageDir, "..", ".."),
77
+ stdio: "inherit",
78
+ env: process.env
79
+ });
80
+ if (result.status !== 0) {
81
+ throw new Error(`Failed to build ${packageName} workspace plugin artifacts with npm run ${buildScript}.`);
82
+ }
83
+ return true;
84
+ }
85
+ function resolveLocalWorkspacePluginPath(packageName, tenantRoot) {
86
+ const parsed = parseTreeseedPackageReference(packageName);
87
+ if (!parsed) return null;
88
+ const packageDir = path.resolve(tenantRoot, "packages", parsed.packageId);
89
+ const packageJsonPath = path.resolve(packageDir, "package.json");
90
+ if (!existsSync(packageJsonPath)) return null;
91
+ try {
92
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
93
+ if (packageJson?.name !== `@treeseed/${parsed.packageId}`) return null;
94
+ } catch {
95
+ return null;
96
+ }
97
+ const normalizedSubpath = parsed.subpath.replace(/^\.\//u, "").replace(/\.js$/u, "");
98
+ const candidates = [
99
+ path.resolve(packageDir, "dist", `${normalizedSubpath}.js`),
100
+ path.resolve(packageDir, `${normalizedSubpath}.js`)
101
+ ];
102
+ const existing = candidates.find((candidate) => existsSync(candidate));
103
+ if (existing) return existing;
104
+ if (buildWorkspacePluginArtifacts(packageDir, packageName)) {
105
+ return candidates.find((candidate) => existsSync(candidate)) ?? null;
106
+ }
107
+ return null;
108
+ }
55
109
  function loadPluginModule(packageName, tenantRoot) {
56
110
  if (packageName === TREESEED_DEFAULT_PLUGIN_PACKAGE) {
57
111
  const localDefaultPluginPath = resolveLocalDefaultPluginPath();
@@ -68,6 +122,13 @@ function loadPluginModule(packageName, tenantRoot) {
68
122
  baseDir: path.dirname(resolvedPath2)
69
123
  };
70
124
  }
125
+ const localWorkspacePluginPath = resolveLocalWorkspacePluginPath(packageName, tenantRoot);
126
+ if (localWorkspacePluginPath) {
127
+ return {
128
+ moduleExports: require2(localWorkspacePluginPath),
129
+ baseDir: path.dirname(localWorkspacePluginPath)
130
+ };
131
+ }
71
132
  const resolvedPath = resolveInstalledPluginPath(packageName, tenantRoot);
72
133
  return {
73
134
  moduleExports: require2(resolvedPath),
@@ -1,6 +1,6 @@
1
- export { TREESEED_DEFAULT_PLUGIN_PACKAGE, TREESEED_DEFAULT_PLUGIN_REFERENCES, TREESEED_DEFAULT_PROVIDER_SELECTIONS, } from './plugins/constants.ts';
2
- export { getTreeseedAgentProviderSelections, getTreeseedContentPublishProvider, getTreeseedContentRuntimeProvider, getTreeseedDeployConfig, getTreeseedDeployProvider, getTreeseedDocsProvider, getTreeseedFormsProvider, getTreeseedOperationsProvider, getTreeseedSiteProvider, isTreeseedSmtpEnabled, isTreeseedTurnstileEnabled, resetTreeseedDeployConfigForTests, } from './deploy-runtime.ts';
3
- export { defineTreeseedPlugin } from './plugin.ts';
4
- export type * from './plugin.ts';
5
- export { loadTreeseedPluginRuntime, loadTreeseedPlugins, resolveTreeseedGraphRankingProvider } from './plugins/runtime.ts';
6
- export type { LoadedTreeseedPluginEntry } from './plugins/runtime.ts';
1
+ export { TREESEED_DEFAULT_PLUGIN_PACKAGE, TREESEED_DEFAULT_PLUGIN_REFERENCES, TREESEED_DEFAULT_PROVIDER_SELECTIONS, } from './plugins/constants.js';
2
+ export { getTreeseedAgentProviderSelections, getTreeseedContentPublishProvider, getTreeseedContentRuntimeProvider, getTreeseedDeployConfig, getTreeseedDeployProvider, getTreeseedDocsProvider, getTreeseedFormsProvider, getTreeseedOperationsProvider, getTreeseedSiteProvider, isTreeseedSmtpEnabled, isTreeseedTurnstileEnabled, resetTreeseedDeployConfigForTests, } from './deploy-runtime.js';
3
+ export { defineTreeseedPlugin } from './plugin.js';
4
+ export type * from './plugin.js';
5
+ export { loadTreeseedPluginRuntime, loadTreeseedPlugins, resolveTreeseedGraphRankingProvider } from './plugins/runtime.js';
6
+ export type { LoadedTreeseedPluginEntry } from './plugins/runtime.js';
@@ -1,6 +1,6 @@
1
- import type { TreeseedDeployConfig, TreeseedTenantConfig } from './contracts.ts';
2
- import { type PublishContentObjectInput, type PublishedArtifactVersion, type PublishedCollectionIndex, type PublishedContentEntry, type PublishedContentManifest, type PublishedOverlayManifest, type PublishedRuntimePointers, type PublishedContentVisibility } from './published-content.ts';
3
- import type { CatalogIndexEntry } from './published-content.ts';
1
+ import type { TreeseedDeployConfig, TreeseedTenantConfig } from './contracts.js';
2
+ import { type PublishContentObjectInput, type PublishedArtifactVersion, type PublishedCollectionIndex, type PublishedContentEntry, type PublishedContentManifest, type PublishedOverlayManifest, type PublishedRuntimePointers, type PublishedContentVisibility } from './published-content.js';
3
+ import type { CatalogIndexEntry } from './published-content.js';
4
4
  export interface ContentSourceEntry {
5
5
  model: string;
6
6
  id: string;
@@ -7,11 +7,15 @@ import { toString } from "mdast-util-to-string";
7
7
  import { parseFrontmatterDocument } from "../frontmatter.js";
8
8
  import { buildTenantBookRuntime } from "./books-data.js";
9
9
  import { exportBookLibrary, exportBookPackage } from "./book-export.js";
10
+ import { COMMERCE_OFFER_MODES } from "../sdk-types.js";
10
11
  import {
11
12
  PUBLISHED_CONTENT_MANIFEST_SCHEMA_VERSION,
12
13
  resolvePublishedContentPreviewTtlHours,
13
14
  resolveTeamScopedContentLocator
14
15
  } from "./published-content.js";
16
+ function resolveCommerceOfferMode(value) {
17
+ return typeof value === "string" && COMMERCE_OFFER_MODES.includes(value) ? value : "free";
18
+ }
15
19
  function stableHash(value) {
16
20
  return createHash("sha256").update(value).digest("hex");
17
21
  }
@@ -370,7 +374,7 @@ class DefaultArtifactBuilder {
370
374
  summary: entry.summary,
371
375
  visibility: entry.visibility,
372
376
  listingEnabled: entry.metadata?.listingEnabled !== false,
373
- offerMode: typeof entry.metadata?.offer?.priceModel === "string" ? entry.metadata.offer.priceModel : "free",
377
+ offerMode: resolveCommerceOfferMode(entry.metadata?.offer?.priceModel),
374
378
  manifestKey: resolveTeamScopedContentLocator(context.siteConfig, context.teamId).manifestKey,
375
379
  artifactKey: void 0,
376
380
  updatedAt: context.generatedAt,
@@ -1,5 +1,6 @@
1
- import type { TreeseedDeployConfig } from './contracts.ts';
2
- import type { CloudflareRuntime, R2BucketLike } from '../types/cloudflare.ts';
1
+ import type { TreeseedDeployConfig } from './contracts.js';
2
+ import type { CommerceOfferMode } from '../sdk-types.js';
3
+ import type { CloudflareRuntime, R2BucketLike } from '../types/cloudflare.js';
3
4
  export declare const PUBLISHED_CONTENT_MANIFEST_SCHEMA_VERSION = 2;
4
5
  export declare const EDITORIAL_PREVIEW_COOKIE = "treeseed-content-preview";
5
6
  export type PublishedContentVisibility = 'public' | 'authenticated' | 'team' | 'private';
@@ -67,7 +68,7 @@ export interface CatalogIndexEntry {
67
68
  summary?: string;
68
69
  visibility?: PublishedContentVisibility;
69
70
  listingEnabled?: boolean;
70
- offerMode?: 'free' | 'paid' | 'contact' | 'one_time_current_version' | 'subscription_updates' | 'private';
71
+ offerMode?: CommerceOfferMode;
71
72
  manifestKey?: string;
72
73
  artifactKey?: string;
73
74
  updatedAt: string;
@@ -0,0 +1 @@
1
+ export { parseSiteConfig } from './utils/site-config-schema.js';
@@ -1 +1,4 @@
1
- export { parseSiteConfig } from './utils/site-config-schema.js';
1
+ import { parseSiteConfig } from "./utils/site-config-schema.js";
2
+ export {
3
+ parseSiteConfig
4
+ };