@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,5 +1,5 @@
1
- import type { TreeseedDeployConfig, TreeseedTenantConfig } from './contracts.ts';
2
- import { type LoadedTreeseedPluginEntry } from './plugins.ts';
1
+ import type { TreeseedDeployConfig, TreeseedTenantConfig } from './contracts.js';
2
+ import { type LoadedTreeseedPluginEntry } from './plugins.js';
3
3
  export declare const TREESEED_ENVIRONMENT_SCOPES: readonly ["local", "staging", "prod"];
4
4
  export declare const TREESEED_ENVIRONMENT_REQUIREMENTS: readonly ["required", "conditional", "optional", "generated"];
5
5
  export declare const TREESEED_ENVIRONMENT_TARGETS: readonly ["local-runtime", "local-cloudflare", "github-secret", "github-variable", "cloudflare-secret", "cloudflare-var", "railway-secret", "railway-var", "config-file"];
@@ -75,6 +75,7 @@ export type TreeseedEnvironmentEntry = {
75
75
  howToGet: string;
76
76
  sensitivity: TreeseedEnvironmentSensitivity;
77
77
  targets: TreeseedEnvironmentTarget[];
78
+ appTargets?: string[];
78
79
  serviceTargets?: string[];
79
80
  scopes: TreeseedEnvironmentScope[];
80
81
  requirement: TreeseedEnvironmentRequirement;
@@ -1,9 +1,12 @@
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";
6
6
  import { parse as parseYaml } from "yaml";
7
+ import { discoverTreeseedApplications } from "../hosting/apps.js";
8
+ import { githubRepositoryCredentialEnvName } from "../operations/services/github-credentials.js";
9
+ import { discoverTreeseedPackageAdapters } from "../operations/services/package-adapters.js";
7
10
  import { loadTreeseedDeployConfig } from "./deploy-config.js";
8
11
  import { loadTreeseedPlugins } from "./plugins.js";
9
12
  import { loadTreeseedManifest } from "./tenant-config.js";
@@ -32,6 +35,8 @@ function firstExistingPath(candidates) {
32
35
  function resolveSdkEnvironmentPath() {
33
36
  const candidates = [
34
37
  resolve(moduleDir, "env.yaml"),
38
+ resolve(moduleDir, "../../src/platform/env.yaml"),
39
+ resolve(moduleDir, "../../dist/platform/env.yaml"),
35
40
  resolve(moduleDir, "../src/platform/env.yaml"),
36
41
  resolve(moduleDir, "../dist/platform/env.yaml")
37
42
  ];
@@ -45,11 +50,8 @@ function resolveSiblingPackageEnvironmentPath(packageDir) {
45
50
  resolve(moduleDir, `../../${packageDir}/dist/env.yaml`)
46
51
  ]);
47
52
  }
48
- const SDK_ENVIRONMENT_PATH = resolveSdkEnvironmentPath();
49
- const CORE_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("core");
50
- const AGENT_ENVIRONMENT_PATH = resolveSiblingPackageEnvironmentPath("agent");
51
53
  const TENANT_ENVIRONMENT_OVERLAY_PATH = "src/env.yaml";
52
- const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.ai";
54
+ const DEFAULT_TREESEED_MARKET_BASE_URL = "https://api.treeseed.dev";
53
55
  function loadOptionalTenantConfig() {
54
56
  try {
55
57
  return loadTreeseedManifest();
@@ -113,6 +115,9 @@ function codexExecutionSelected(context) {
113
115
  const execution = context.deployConfig.providers?.agents?.execution ?? "codex";
114
116
  return execution === "codex" || execution === "codex_subscription";
115
117
  }
118
+ function copilotExecutionSelected(context) {
119
+ return context.deployConfig.providers?.agents?.execution === "github_copilot";
120
+ }
116
121
  function railwayManagedEnabled(context) {
117
122
  if (!workflowPlaneAllows("processing")) {
118
123
  return false;
@@ -146,7 +151,7 @@ function resolveHostingRegistration(context) {
146
151
  return context.deployConfig.hosting?.registration ?? "none";
147
152
  }
148
153
  function marketControlPlaneEnabled(context) {
149
- return resolveHostingKind(context) === "market_control_plane";
154
+ return resolveHostingKind(context) === "treeseed_control_plane";
150
155
  }
151
156
  function hostedProjectEnabled(context) {
152
157
  return resolveHostingKind(context) === "hosted_project";
@@ -175,6 +180,13 @@ function contactEmailDefault(context) {
175
180
  function workdayWindowsDefault() {
176
181
  return JSON.stringify([{ days: [1, 2, 3, 4, 5], startTime: "09:00", endTime: "17:00" }]);
177
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
+ }
178
190
  function normalizeUrl(value) {
179
191
  return value.trim().replace(/\/$/u, "");
180
192
  }
@@ -204,6 +216,15 @@ function deriveApiDomainFromProjectDomain(domain) {
204
216
  }
205
217
  return `api.${segments.slice(1).join(".")}`;
206
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
+ }
207
228
  function resolveConfiguredApiBaseUrl(context, scope, values = {}) {
208
229
  const localBaseUrl = context.deployConfig.services?.api?.environments?.local?.baseUrl ?? context.deployConfig.surfaces?.api?.localBaseUrl ?? "http://127.0.0.1:3000";
209
230
  if (scope === "local") {
@@ -235,7 +256,7 @@ function resolvePagesProjectName(context) {
235
256
  return context.deployConfig.slug;
236
257
  }
237
258
  function resolvePagesPreviewProjectName(context, _scope, values = {}) {
238
- return values.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME?.trim() || `${context.deployConfig.slug}-staging`;
259
+ return values.TREESEED_CLOUDFLARE_PAGES_PROJECT_NAME?.trim() || context.deployConfig.cloudflare.pages?.projectName?.trim() || context.deployConfig.slug;
239
260
  }
240
261
  function resolveContentBucketName(context) {
241
262
  return `${context.deployConfig.slug}-content`;
@@ -244,13 +265,13 @@ function resolveContentBucketBinding(context) {
244
265
  return context.deployConfig.cloudflare.r2?.binding?.trim() || "TREESEED_CONTENT_BUCKET";
245
266
  }
246
267
  function resolveMarketBaseUrl(context, _scope, values = {}) {
247
- return values.TREESEED_MARKET_API_BASE_URL?.trim() || values.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || process.env.TREESEED_MARKET_API_BASE_URL?.trim() || process.env.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || context.deployConfig.runtime?.marketBaseUrl?.trim() || context.deployConfig.hosting?.marketBaseUrl?.trim() || DEFAULT_TREESEED_MARKET_BASE_URL;
268
+ return values.TREESEED_API_BASE_URL?.trim() || values.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || process.env.TREESEED_API_BASE_URL?.trim() || process.env.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || context.deployConfig.runtime?.marketBaseUrl?.trim() || context.deployConfig.hosting?.marketBaseUrl?.trim() || DEFAULT_TREESEED_MARKET_BASE_URL;
248
269
  }
249
270
  function resolveCentralMarketBaseUrl(context, scope, values = {}) {
250
271
  return values.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || process.env.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || resolveMarketBaseUrl(context, scope, values) || DEFAULT_TREESEED_MARKET_BASE_URL;
251
272
  }
252
273
  function resolveCatalogMarketBaseUrls(context, scope, values = {}) {
253
- return values.TREESEED_CATALOG_MARKET_API_BASE_URLS?.trim() || values.TREESEED_MARKET_API_BASE_URL?.trim() || values.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || process.env.TREESEED_CATALOG_MARKET_API_BASE_URLS?.trim() || resolveCentralMarketBaseUrl(context, scope, values);
274
+ return values.TREESEED_CATALOG_MARKET_API_BASE_URLS?.trim() || values.TREESEED_API_BASE_URL?.trim() || values.TREESEED_CENTRAL_MARKET_API_BASE_URL?.trim() || process.env.TREESEED_CATALOG_MARKET_API_BASE_URLS?.trim() || resolveCentralMarketBaseUrl(context, scope, values);
254
275
  }
255
276
  function resolveHostedTeamId(context) {
256
277
  return context.deployConfig.slug;
@@ -262,7 +283,7 @@ function resolveRailwayWorkspaceDefault() {
262
283
  return "knowledge-coop";
263
284
  }
264
285
  function resolvePlatformRunnerIdDefault(_context, scope) {
265
- return scope === "prod" ? "market-ops-prod-1" : scope === "staging" ? "market-ops-staging-1" : "market-ops-local-1";
286
+ return scope === "prod" ? "treeseed-ops-prod-1" : scope === "staging" ? "treeseed-ops-staging-1" : "treeseed-ops-local-1";
266
287
  }
267
288
  function resolvePlatformRunnerEnvironmentDefault(_context, scope) {
268
289
  return scope === "prod" ? "production" : scope;
@@ -280,10 +301,18 @@ function parseGitHubRepositorySlugFromRemote(remoteUrl) {
280
301
  return null;
281
302
  }
282
303
  function resolveGitHubOriginRepository(context) {
283
- const result = spawnSync("git", ["remote", "get-url", "origin"], {
304
+ const rootResult = runTreeseedGit(["rev-parse", "--show-toplevel"], {
284
305
  cwd: context.tenantRoot,
285
- stdio: "pipe",
286
- encoding: "utf8"
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"], {
313
+ cwd: context.tenantRoot,
314
+ mode: "read",
315
+ allowFailure: true
287
316
  });
288
317
  if (result.status !== 0) {
289
318
  return null;
@@ -301,8 +330,9 @@ const VALUE_RESOLVERS = {
301
330
  localFormsBypassDefault: () => "true",
302
331
  localSmtpHostDefault: () => localSmtpHostDefault(),
303
332
  localSmtpPortDefault: () => localSmtpPortDefault(),
333
+ localApiDatabaseUrlDefault: (context, scope, values) => localApiDatabaseUrlDefault(context, scope, values),
304
334
  contactEmailDefault: (context) => contactEmailDefault(context),
305
- projectDomainsDefault: (context) => primaryHostFromUrl(context.deployConfig.siteUrl),
335
+ projectDomainsDefault: (context, scope) => projectDomainsDefault(context, scope),
306
336
  apiBaseUrlDefault: (context, scope, values) => resolveConfiguredApiBaseUrl(context, scope, values),
307
337
  webServiceIdDefault: (_context, _scope, values) => resolveWebServiceId(values),
308
338
  apiWebServiceIdDefault: (_context, _scope, values) => resolveApiWebServiceId(values),
@@ -324,6 +354,7 @@ const VALUE_RESOLVERS = {
324
354
  platformRunnerIdDefault: (context, scope) => resolvePlatformRunnerIdDefault(context, scope),
325
355
  platformRunnerEnvironmentDefault: (context, scope) => resolvePlatformRunnerEnvironmentDefault(context, scope),
326
356
  platformRunnerDataDirDefault: () => "/data",
357
+ treedxDockerImageDefault: () => "treeseed/treedx:latest",
327
358
  githubOwnerDefault: (context) => resolveGitHubOwnerDefault(context),
328
359
  githubRepositoryNameDefault: (context) => resolveGitHubRepositoryNameDefault(context),
329
360
  githubRepositoryVisibilityDefault: () => "private",
@@ -350,6 +381,7 @@ const PREDICATES = {
350
381
  processingPlaneEnabled: (context) => processingPlaneEnabled(context),
351
382
  formsEnabled: (context) => formsEnabled(context),
352
383
  codexExecutionSelected: (context) => codexExecutionSelected(context),
384
+ copilotExecutionSelected: (context) => copilotExecutionSelected(context),
353
385
  railwayManagedEnabled: (context) => railwayManagedEnabled(context),
354
386
  hubTreeseedHosted: (context) => resolveHubMode(context) === "treeseed_hosted",
355
387
  hubCustomerHosted: (context) => resolveHubMode(context) === "customer_hosted",
@@ -413,6 +445,44 @@ function readPluginEnvironmentOverlay(baseDir) {
413
445
  }
414
446
  return null;
415
447
  }
448
+ function packageRepositoryCredentialOverlay(tenantRoot) {
449
+ const entries = {};
450
+ let packages = [];
451
+ try {
452
+ packages = discoverTreeseedPackageAdapters(tenantRoot);
453
+ } catch {
454
+ packages = [];
455
+ }
456
+ for (const pkg of packages) {
457
+ const repository = typeof pkg.metadata.repository === "string" && pkg.metadata.repository.trim() ? pkg.metadata.repository.trim() : null;
458
+ if (!repository) continue;
459
+ let id = "";
460
+ try {
461
+ id = githubRepositoryCredentialEnvName(repository);
462
+ } catch {
463
+ continue;
464
+ }
465
+ entries[id] = {
466
+ label: `${pkg.name} GitHub token`,
467
+ group: "github",
468
+ cluster: `github:${repository}`,
469
+ description: `GitHub token used by Treeseed package workflows for ${pkg.name} in ${repository}.`,
470
+ howToGet: `Create a GitHub token with Actions workflow and environment secret permissions for ${repository}, then store it as ${id}.`,
471
+ sensitivity: "secret",
472
+ targets: ["local-runtime"],
473
+ scopes: ["staging", "prod"],
474
+ storage: "shared",
475
+ requirement: "optional",
476
+ purposes: ["deploy", "config"],
477
+ validation: {
478
+ kind: "nonempty",
479
+ minLength: 8
480
+ },
481
+ sourcePriority: ["machine-config", "process-env"]
482
+ };
483
+ }
484
+ return { entries };
485
+ }
416
486
  function loadTreeseedEnvironmentOverlay(tenantRoot) {
417
487
  const overlayPath = resolve(tenantRoot, TENANT_ENVIRONMENT_OVERLAY_PATH);
418
488
  return {
@@ -460,23 +530,54 @@ function mergeEntryYaml(baseEntry, id, override) {
460
530
  }
461
531
  function collectOverlaySources(context) {
462
532
  const sources = [];
463
- const sdkOverlay = readYamlOverlayIfPresent(SDK_ENVIRONMENT_PATH);
533
+ const sdkEnvironmentPath = resolveSdkEnvironmentPath();
534
+ const sdkOverlay = readYamlOverlayIfPresent(sdkEnvironmentPath);
464
535
  if (!sdkOverlay) {
465
- 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}.`);
466
537
  }
467
- sources.push({ label: SDK_ENVIRONMENT_PATH, overlay: sdkOverlay });
538
+ sources.push({ label: sdkEnvironmentPath, overlay: sdkOverlay });
468
539
  if (webSurfaceEnabled(context)) {
469
- const coreOverlay = readYamlOverlayIfPresent(CORE_ENVIRONMENT_PATH);
540
+ const coreEnvironmentPath = resolveSiblingPackageEnvironmentPath("core");
541
+ const coreOverlay = readYamlOverlayIfPresent(coreEnvironmentPath);
470
542
  if (coreOverlay) {
471
- sources.push({ label: CORE_ENVIRONMENT_PATH, overlay: coreOverlay });
543
+ sources.push({ label: coreEnvironmentPath, overlay: coreOverlay });
472
544
  }
473
545
  }
474
546
  if (apiSurfaceEnabled(context) || processingPlaneEnabled(context)) {
475
- const agentOverlay = readYamlOverlayIfPresent(AGENT_ENVIRONMENT_PATH);
547
+ const apiEnvironmentPath = resolveSiblingPackageEnvironmentPath("api");
548
+ const apiOverlay = readYamlOverlayIfPresent(apiEnvironmentPath);
549
+ if (apiOverlay) {
550
+ sources.push({ label: apiEnvironmentPath, overlay: apiOverlay });
551
+ }
552
+ const agentEnvironmentPath = resolveSiblingPackageEnvironmentPath("agent");
553
+ const agentOverlay = readYamlOverlayIfPresent(agentEnvironmentPath);
476
554
  if (agentOverlay) {
477
- sources.push({ label: AGENT_ENVIRONMENT_PATH, overlay: agentOverlay });
555
+ sources.push({ label: agentEnvironmentPath, overlay: agentOverlay });
478
556
  }
479
557
  }
558
+ let discoveredApiApps = [];
559
+ try {
560
+ discoveredApiApps = discoverTreeseedApplications(context.tenantRoot).filter((application) => application.root !== context.tenantRoot && application.roles.some((role) => role === "api" || role === "operations-runner" || role === "treeseed-control-plane"));
561
+ } catch {
562
+ discoveredApiApps = [];
563
+ }
564
+ const discoveredApiEnvironmentPath = resolveSiblingPackageEnvironmentPath("api");
565
+ if (discoveredApiApps.length > 0 && !sources.some((source) => source.label === discoveredApiEnvironmentPath)) {
566
+ const apiOverlay = readYamlOverlayIfPresent(discoveredApiEnvironmentPath);
567
+ if (apiOverlay) {
568
+ sources.push({ label: discoveredApiEnvironmentPath, overlay: apiOverlay });
569
+ }
570
+ }
571
+ for (const application of discoveredApiApps) {
572
+ const overlay = readYamlOverlayIfPresent(resolve(application.root, "src/env.yaml"));
573
+ if (overlay) {
574
+ sources.push({ label: resolve(application.root, "src/env.yaml"), overlay });
575
+ }
576
+ }
577
+ const packageCredentialOverlay = packageRepositoryCredentialOverlay(context.tenantRoot);
578
+ if (Object.keys(packageCredentialOverlay.entries ?? {}).length > 0) {
579
+ sources.push({ label: "discovered package repository credentials", overlay: packageCredentialOverlay });
580
+ }
480
581
  for (const pluginEntry of context.plugins) {
481
582
  const fileOverlay = readPluginEnvironmentOverlay(pluginEntry.baseDir);
482
583
  if (fileOverlay) {
@@ -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,7 +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';
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';
5
6
  export type TreeseedSiteLayerDefinition = TreeseedPlatformLayerDefinition & {
6
7
  kinds?: Array<'pages' | 'styles' | 'components'>;
7
8
  };
@@ -65,6 +66,13 @@ export type TreeseedContentProviderContext = TreeseedPluginEnvironmentContext &
65
66
  tenantConfig: TreeseedTenantConfig;
66
67
  };
67
68
  export type TreeseedGraphRankingProviderContribution = SdkGraphRankingProvider | ((context: TreeseedPluginEnvironmentContext) => SdkGraphRankingProvider | undefined);
69
+ export type TreeseedHostingContribution = {
70
+ hostAdapters?: Record<string, TreeseedHostAdapter>;
71
+ serviceTypeAdapters?: Record<string, TreeseedServiceTypeAdapter>;
72
+ profiles?: TreeseedApplicationHostingProfile[];
73
+ uiPlacements?: Record<string, unknown>;
74
+ environmentDefaults?: Record<string, unknown>;
75
+ };
68
76
  export interface TreeseedPlugin {
69
77
  id?: string;
70
78
  provides?: Record<string, any> & {
@@ -88,6 +96,7 @@ export interface TreeseedPlugin {
88
96
  platformLayers?: TreeseedPlatformLayerContribution[] | ((context: TreeseedPluginPlatformContext) => TreeseedPlatformLayerContribution[] | undefined);
89
97
  environmentRegistry?: TreeseedEnvironmentRegistryOverlay | ((context: TreeseedPluginEnvironmentContext) => TreeseedEnvironmentRegistryOverlay | undefined);
90
98
  reconcileAdapters?: Record<string, TreeseedReconcileAdapter | ((context: TreeseedPluginEnvironmentContext) => TreeseedReconcileAdapter | undefined)> | ((context: TreeseedPluginEnvironmentContext) => Record<string, TreeseedReconcileAdapter | ((context: TreeseedPluginEnvironmentContext) => TreeseedReconcileAdapter | undefined)> | undefined);
99
+ hosting?: TreeseedHostingContribution | ((context: TreeseedPluginEnvironmentContext) => TreeseedHostingContribution | undefined);
91
100
  graphRankingProviders?: Record<string, TreeseedGraphRankingProviderContribution>;
92
101
  [key: string]: unknown;
93
102
  }
@@ -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';