@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
@@ -0,0 +1,634 @@
1
+ import path from "node:path";
2
+ import { TreeDxApiError, TreeDxClient } from "./treedx-client.js";
3
+ import { parseFrontmatterDocument, serializeFrontmatterDocument } from "./frontmatter.js";
4
+ import { resolveModelDefinition } from "./model-registry.js";
5
+ import { applyFilters, applySort } from "./sdk-filters.js";
6
+ import {
7
+ canonicalizeFrontmatter,
8
+ normalizeFilterFields,
9
+ normalizeMutationData,
10
+ normalizeRecordToCanonicalShape,
11
+ normalizeSortFields,
12
+ readCanonicalFieldValue
13
+ } from "./sdk-fields.js";
14
+ import { assertExpectedVersion } from "./sdk-version.js";
15
+ class TreeDxContentRepositoryConfigError extends Error {
16
+ constructor(message = "TreeDX content repository is required. Configure TREESEED_TREEDX_BASE_URL or TREESEED_TREEDX_URL for content model access.") {
17
+ super(message);
18
+ this.name = "TreeDxContentRepositoryConfigError";
19
+ }
20
+ }
21
+ function compactObject(input) {
22
+ return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
23
+ }
24
+ function stringValue(value) {
25
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
26
+ }
27
+ function arrayFromPayload(value) {
28
+ if (Array.isArray(value)) return value;
29
+ if (value && typeof value === "object") {
30
+ const record = value;
31
+ for (const key of ["items", "repositories", "repos", "data"]) {
32
+ if (Array.isArray(record[key])) return record[key];
33
+ }
34
+ }
35
+ return [];
36
+ }
37
+ function repoIdFromRepository(repository) {
38
+ return stringValue(repository.id) ?? stringValue(repository.repoId) ?? stringValue(repository.repo_id) ?? stringValue(repository.name) ?? stringValue(repository.slug);
39
+ }
40
+ function repositoryMatchesHint(repository, hint) {
41
+ const name = stringValue(repository.name) ?? stringValue(repository.slug);
42
+ const owner = stringValue(repository.owner) ?? stringValue(repository.metadata?.owner);
43
+ const remoteUrl = stringValue(repository.remoteUrl) ?? stringValue(repository.remote_url) ?? stringValue(repository.cloneUrl) ?? stringValue(repository.clone_url) ?? stringValue(repository.url);
44
+ const defaultBranch = stringValue(repository.defaultBranch) ?? stringValue(repository.default_branch) ?? stringValue(repository.branch);
45
+ const metadata = repository.metadata && typeof repository.metadata === "object" ? repository.metadata : {};
46
+ if (hint.purpose && metadata.purpose !== hint.purpose && repository.purpose !== hint.purpose) return false;
47
+ if (hint.name && name !== hint.name) return false;
48
+ if (hint.owner && owner !== hint.owner) return false;
49
+ if (hint.remoteUrl && remoteUrl !== hint.remoteUrl) return false;
50
+ if (hint.defaultBranch && defaultBranch !== hint.defaultBranch) return false;
51
+ return true;
52
+ }
53
+ function normalizePathPattern(pattern) {
54
+ return pattern.replace(/\\/g, "/").replace(/^\.\//, "");
55
+ }
56
+ function segment(value) {
57
+ return encodeURIComponent(value);
58
+ }
59
+ function isMarkdownPath(value) {
60
+ return /\.(md|mdx)$/i.test(value);
61
+ }
62
+ function isGraphNotReadyError(error) {
63
+ return error instanceof TreeDxApiError && error.code === "graph_not_ready";
64
+ }
65
+ function inferSlug(filePath, pathPattern) {
66
+ const normalizedPath = normalizePathPattern(filePath);
67
+ const root = normalizePathPattern(pathPattern).replace(/\*\*.*$/u, "").replace(/\/?$/u, "/");
68
+ const withoutRoot = normalizedPath.startsWith(root) ? normalizedPath.slice(root.length) : normalizedPath;
69
+ return withoutRoot.replace(/\.(md|mdx)$/i, "");
70
+ }
71
+ function pathMatchesPattern(filePath, pathPattern) {
72
+ const normalizedPath = normalizePathPattern(filePath);
73
+ const normalizedPattern = normalizePathPattern(pathPattern);
74
+ const wildcardIndex = normalizedPattern.indexOf("**");
75
+ const root = (wildcardIndex >= 0 ? normalizedPattern.slice(0, wildcardIndex) : normalizedPattern).replace(/\/+$/u, "");
76
+ if (!root) return true;
77
+ return normalizedPath === root || normalizedPath.startsWith(`${root}/`);
78
+ }
79
+ function normalizePathList(value) {
80
+ if (Array.isArray(value)) {
81
+ return value.flatMap((entry) => {
82
+ if (typeof entry === "string") return [entry];
83
+ if (entry && typeof entry === "object") {
84
+ const record = entry;
85
+ const candidate = stringValue(record.path) ?? stringValue(record.file) ?? stringValue(record.key);
86
+ return candidate ? [candidate] : [];
87
+ }
88
+ return [];
89
+ });
90
+ }
91
+ if (value && typeof value === "object") {
92
+ const record = value;
93
+ for (const key of ["paths", "items", "files", "entries", "results", "data"]) {
94
+ const normalized = normalizePathList(record[key]);
95
+ if (normalized.length > 0) return normalized;
96
+ }
97
+ }
98
+ return [];
99
+ }
100
+ function extractTextPayload(value) {
101
+ if (typeof value === "string") return value;
102
+ if (value && typeof value === "object") {
103
+ const record = value;
104
+ for (const key of ["content", "body", "text", "source", "file", "data"]) {
105
+ const candidate = record[key];
106
+ if (typeof candidate === "string") return candidate;
107
+ if (candidate && typeof candidate === "object") {
108
+ const nested = extractTextPayload(candidate);
109
+ if (nested) return nested;
110
+ }
111
+ }
112
+ }
113
+ return "";
114
+ }
115
+ function entryMatchesIdentity(entry, request) {
116
+ return [request.id, request.slug, request.key].filter(Boolean).includes(entry.id) || [request.id, request.slug, request.key].filter(Boolean).includes(entry.slug);
117
+ }
118
+ function sanitizeFrontmatterInput(data) {
119
+ const next = { ...data };
120
+ delete next.body;
121
+ delete next.branchPrefix;
122
+ return next;
123
+ }
124
+ function ensureMutationAllowed(definition, operation) {
125
+ if (!definition.operations.includes(operation)) {
126
+ throw new Error(`Model "${definition.name}" does not allow ${operation}.`);
127
+ }
128
+ }
129
+ function titleForEntry(definition, frontmatter) {
130
+ const titleField = definition.fields.title ? readCanonicalFieldValue(definition, { frontmatter }, "title") : void 0;
131
+ const nameField = definition.fields.name ? readCanonicalFieldValue(definition, { frontmatter }, "name") : void 0;
132
+ return typeof titleField === "string" ? String(titleField) : typeof nameField === "string" ? String(nameField) : void 0;
133
+ }
134
+ function dateForEntry(definition, frontmatter, field) {
135
+ const value = definition.fields[field] ? readCanonicalFieldValue(definition, { frontmatter }, field) : void 0;
136
+ return typeof value === "string" ? String(value) : null;
137
+ }
138
+ function relativeContentDir(repoRoot, definition) {
139
+ if (!definition.contentDir) return void 0;
140
+ return normalizePathPattern(path.relative(repoRoot, definition.contentDir));
141
+ }
142
+ function makeDefaultPathRule(repoRoot, definition) {
143
+ const relative = relativeContentDir(repoRoot, definition) ?? `src/content/${definition.contentCollection ?? definition.name}`;
144
+ return { paths: [`${relative.replace(/\/$/u, "")}/**`] };
145
+ }
146
+ function normalizePathRule(input, fallback) {
147
+ if (!input) return fallback;
148
+ if (typeof input === "string") return { paths: [input] };
149
+ return input;
150
+ }
151
+ function mutationPath(definition, repoRoot, slug) {
152
+ const relative = relativeContentDir(repoRoot, definition) ?? `src/content/${definition.contentCollection ?? definition.name}`;
153
+ const extension = definition.name === "knowledge" ? ".md" : ".mdx";
154
+ return `${relative.replace(/\/$/u, "")}/${slug}${extension}`;
155
+ }
156
+ function resolveTreeDxOptions(input) {
157
+ const baseUrl = stringValue(input?.baseUrl) ?? stringValue(process.env.TREESEED_TREEDX_BASE_URL) ?? stringValue(process.env.TREESEED_TREEDX_URL);
158
+ if (!baseUrl) return null;
159
+ return {
160
+ baseUrl,
161
+ token: stringValue(input?.token) ?? stringValue(process.env.TREESEED_TREEDX_TOKEN),
162
+ repoId: stringValue(input?.repoId) ?? stringValue(process.env.TREESEED_TREEDX_REPO_ID),
163
+ ref: stringValue(input?.ref) ?? stringValue(process.env.TREESEED_TREEDX_REF),
164
+ workspaceId: stringValue(input?.workspaceId) ?? stringValue(process.env.TREESEED_TREEDX_WORKSPACE_ID),
165
+ contentPathMap: input?.contentPathMap,
166
+ repositoryHints: input?.repositoryHints ?? [],
167
+ fetchImpl: input?.fetchImpl
168
+ };
169
+ }
170
+ function createTreeDxClientFromAgentOptions(options) {
171
+ const config = compactObject({
172
+ baseUrl: options.baseUrl,
173
+ token: options.token,
174
+ fetchImpl: options.fetchImpl
175
+ });
176
+ return new TreeDxClient(config);
177
+ }
178
+ class TreeDxPortfolioResolver {
179
+ constructor(options) {
180
+ this.options = options;
181
+ }
182
+ options;
183
+ repositoryCache = null;
184
+ candidateCache = /* @__PURE__ */ new Map();
185
+ async listRepositories() {
186
+ this.repositoryCache ??= this.options.client.repositories.list().then(
187
+ (response) => arrayFromPayload(response).filter((entry) => Boolean(entry && typeof entry === "object" && !Array.isArray(entry)))
188
+ );
189
+ return this.repositoryCache;
190
+ }
191
+ async resolveCandidates(rule) {
192
+ if (this.options.repoId) {
193
+ return rule.paths.map((path2) => ({
194
+ repoId: this.options.repoId,
195
+ ref: this.options.ref,
196
+ path: path2,
197
+ repository: { repoId: this.options.repoId }
198
+ }));
199
+ }
200
+ const cacheKey = JSON.stringify({
201
+ paths: rule.paths,
202
+ hints: [...this.options.repositoryHints ?? [], ...rule.repositoryHints ?? []],
203
+ ref: this.options.ref
204
+ });
205
+ const cached = this.candidateCache.get(cacheKey);
206
+ if (cached) return cached;
207
+ const promise = this.resolveCandidatesUncached(rule);
208
+ this.candidateCache.set(cacheKey, promise);
209
+ return promise;
210
+ }
211
+ async resolveCandidatesUncached(rule) {
212
+ const repositories = await this.listRepositories();
213
+ const hints = [...this.options.repositoryHints ?? [], ...rule.repositoryHints ?? []].filter((hint) => hint.purpose !== "site_code" && hint.purpose !== "optional_project");
214
+ const matching = hints.length > 0 ? repositories.filter((repository) => hints.some((hint) => repositoryMatchesHint(repository, hint))) : repositories.filter((repository) => {
215
+ const metadata = repository.metadata && typeof repository.metadata === "object" ? repository.metadata : {};
216
+ return repository.purpose !== "site_code" && repository.purpose !== "optional_project" && metadata.purpose !== "site_code" && metadata.purpose !== "optional_project";
217
+ });
218
+ return matching.flatMap((repository) => {
219
+ const repoId = repoIdFromRepository(repository);
220
+ if (!repoId) return [];
221
+ return rule.paths.map((rulePath) => ({
222
+ repoId,
223
+ ref: this.options.ref,
224
+ path: normalizePathPattern(rulePath),
225
+ repository
226
+ }));
227
+ });
228
+ }
229
+ }
230
+ class LocalContentBackend {
231
+ constructor(store) {
232
+ this.store = store;
233
+ }
234
+ store;
235
+ list(model) {
236
+ return this.store.list(model);
237
+ }
238
+ get(request) {
239
+ return this.store.get(request);
240
+ }
241
+ search(request) {
242
+ return this.store.search(request);
243
+ }
244
+ follow(request) {
245
+ return this.store.follow(request);
246
+ }
247
+ pick(request) {
248
+ return this.store.pick(request);
249
+ }
250
+ create(request) {
251
+ return this.store.create(request);
252
+ }
253
+ update(request) {
254
+ return this.store.update(request);
255
+ }
256
+ }
257
+ class MissingTreeDxContentBackend {
258
+ fail() {
259
+ throw new TreeDxContentRepositoryConfigError();
260
+ }
261
+ list() {
262
+ this.fail();
263
+ }
264
+ get() {
265
+ this.fail();
266
+ }
267
+ search() {
268
+ this.fail();
269
+ }
270
+ follow() {
271
+ this.fail();
272
+ }
273
+ pick() {
274
+ this.fail();
275
+ }
276
+ create() {
277
+ this.fail();
278
+ }
279
+ update() {
280
+ this.fail();
281
+ }
282
+ }
283
+ class TreeDxContentBackend {
284
+ constructor(options) {
285
+ this.options = options;
286
+ }
287
+ options;
288
+ definition(model) {
289
+ const definition = resolveModelDefinition(model, this.options.models);
290
+ if (definition.storage !== "content") {
291
+ throw new Error(`Model "${model}" is not content-backed.`);
292
+ }
293
+ return definition;
294
+ }
295
+ pathRule(definition) {
296
+ const configured = this.options.contentPathMap?.[definition.name];
297
+ return normalizePathRule(configured, makeDefaultPathRule(this.options.repoRoot, definition));
298
+ }
299
+ async readEntry(definition, candidate, filePath) {
300
+ const payload = await this.options.client.query.readFile(candidate.repoId, compactObject({
301
+ ref: candidate.ref,
302
+ path: filePath
303
+ }));
304
+ const payloadRecord = payload && typeof payload === "object" ? payload : {};
305
+ const payloadFile = payloadRecord.file && typeof payloadRecord.file === "object" ? payloadRecord.file : {};
306
+ const parsed = parseFrontmatterDocument(extractTextPayload(payloadFile) || extractTextPayload(payload));
307
+ const resolvedPath = stringValue(payloadFile.path) ?? stringValue(payloadRecord.path) ?? filePath;
308
+ const slug = inferSlug(resolvedPath, candidate.path);
309
+ return {
310
+ id: slug,
311
+ slug,
312
+ model: definition.name,
313
+ title: titleForEntry(definition, parsed.frontmatter),
314
+ path: resolvedPath,
315
+ body: parsed.body,
316
+ frontmatter: parsed.frontmatter,
317
+ createdAt: dateForEntry(definition, parsed.frontmatter, "created_at"),
318
+ updatedAt: dateForEntry(definition, parsed.frontmatter, "updated_at")
319
+ };
320
+ }
321
+ async list(model) {
322
+ const definition = this.definition(model);
323
+ const rule = this.pathRule(definition);
324
+ const candidates = await this.options.resolver.resolveCandidates(rule);
325
+ const entries = (await Promise.all(candidates.map(async (candidate) => {
326
+ const listPayload = await this.options.client.query.listPaths(candidate.repoId, compactObject({
327
+ ref: candidate.ref,
328
+ path: candidate.path
329
+ }));
330
+ const paths = normalizePathList(listPayload).filter((filePath) => pathMatchesPattern(filePath, candidate.path)).filter(isMarkdownPath);
331
+ return await Promise.all(paths.map((filePath) => this.readEntry(definition, candidate, filePath)));
332
+ }))).flat();
333
+ const deduped = /* @__PURE__ */ new Map();
334
+ for (const entry of entries) {
335
+ const existing = deduped.get(entry.id);
336
+ if (!existing || new Date(entry.updatedAt ?? 0).valueOf() >= new Date(existing.updatedAt ?? 0).valueOf()) {
337
+ deduped.set(entry.id, entry);
338
+ }
339
+ }
340
+ return [...deduped.values()];
341
+ }
342
+ async get(request) {
343
+ if (this.options.directRepoId) {
344
+ const definition = this.definition(request.model);
345
+ const rule = this.pathRule(definition);
346
+ const identities = [request.id, request.slug, request.key].filter((value) => Boolean(value));
347
+ for (const identity of identities) {
348
+ for (const basePath of rule.paths) {
349
+ for (const extension of [".md", ".mdx"]) {
350
+ try {
351
+ return await this.readEntry(definition, {
352
+ repoId: this.options.directRepoId,
353
+ ref: this.options.ref,
354
+ path: basePath,
355
+ repository: { repoId: this.options.directRepoId }
356
+ }, `${basePath.replace(/\/$/u, "")}/${identity}${extension}`);
357
+ } catch {
358
+ }
359
+ }
360
+ }
361
+ }
362
+ return null;
363
+ }
364
+ const entries = await this.list(request.model);
365
+ return entries.find((entry) => entryMatchesIdentity(entry, request)) ?? null;
366
+ }
367
+ async search(request) {
368
+ const definition = this.definition(request.model);
369
+ if (this.options.directRepoId) {
370
+ const items2 = await this.list(definition.name);
371
+ const filtered2 = applyFilters(items2, normalizeFilterFields(definition, request.filters), definition);
372
+ const sorted2 = applySort(filtered2, normalizeSortFields(definition, request.sort), definition);
373
+ return sorted2.slice(0, request.limit ?? sorted2.length);
374
+ }
375
+ const items = await this.list(definition.name);
376
+ const filtered = applyFilters(items, normalizeFilterFields(definition, request.filters), definition);
377
+ const sorted = applySort(filtered, normalizeSortFields(definition, request.sort), definition);
378
+ return sorted.slice(0, request.limit ?? sorted.length);
379
+ }
380
+ async follow(request) {
381
+ const items = await this.search({
382
+ model: request.model,
383
+ filters: [
384
+ ...request.filters ?? [],
385
+ { field: "updatedAt", op: "updated_since", value: request.since }
386
+ ]
387
+ });
388
+ return { items, since: request.since };
389
+ }
390
+ pick(request) {
391
+ return this.options.localLeaseStore.pick(request);
392
+ }
393
+ async resolveWritePath(definition, slug) {
394
+ if (this.options.workspaceId) return mutationPath(definition, this.options.repoRoot, slug);
395
+ const candidates = await this.options.resolver.resolveCandidates(this.pathRule(definition));
396
+ const repositoryIds = new Set(candidates.map((candidate) => candidate.repoId));
397
+ if (repositoryIds.size === 0) {
398
+ throw new Error(`No TreeDX repository candidate found for ${definition.name} content.`);
399
+ }
400
+ if (repositoryIds.size > 1) {
401
+ throw new Error(`Ambiguous TreeDX repository candidates for ${definition.name} content. Configure repositoryHints or provide a workspaceId.`);
402
+ }
403
+ return mutationPath(definition, this.options.repoRoot, slug);
404
+ }
405
+ requireWorkspaceId() {
406
+ if (!this.options.workspaceId) {
407
+ throw new Error("TreeDX content writes require treeDx.workspaceId in Phase 9.");
408
+ }
409
+ return this.options.workspaceId;
410
+ }
411
+ async createDirectWorkspace() {
412
+ if (!this.options.directRepoId) return null;
413
+ const response = await this.options.client.transport.request({
414
+ method: "POST",
415
+ path: `/api/v1/repos/${segment(this.options.directRepoId)}/workspaces`,
416
+ body: { mode: "writable" }
417
+ });
418
+ const payload = response.data;
419
+ return stringValue(payload.workspaceId) ?? stringValue(payload.id) ?? null;
420
+ }
421
+ async commitDirectWorkspace(workspaceId, filePath) {
422
+ await this.options.client.transport.request({
423
+ method: "POST",
424
+ path: `/api/v1/workspaces/${segment(workspaceId)}/commit`,
425
+ body: {
426
+ message: `Update ${filePath}`,
427
+ paths: [filePath]
428
+ }
429
+ });
430
+ }
431
+ async create(request) {
432
+ const definition = this.definition(request.model);
433
+ ensureMutationAllowed(definition, "create");
434
+ const slug = String(request.data.slug ?? request.data.id ?? cryptoRandomId());
435
+ const body = typeof request.data.body === "string" ? request.data.body : "";
436
+ const mutationData = normalizeMutationData(definition, sanitizeFrontmatterInput(request.data));
437
+ const frontmatter = canonicalizeFrontmatter(definition, {}, {
438
+ ...mutationData,
439
+ slug,
440
+ updated_at: mutationData.updated_at ?? (/* @__PURE__ */ new Date()).toISOString()
441
+ });
442
+ const filePath = await this.resolveWritePath(definition, slug);
443
+ const workspaceId = this.options.workspaceId ?? await this.createDirectWorkspace() ?? this.requireWorkspaceId();
444
+ await this.options.client.files.write(workspaceId, {
445
+ path: filePath,
446
+ content: serializeFrontmatterDocument(frontmatter, body)
447
+ });
448
+ if (!this.options.workspaceId && this.options.directRepoId) {
449
+ await this.commitDirectWorkspace(workspaceId, filePath);
450
+ return {
451
+ item: await this.readEntry(definition, {
452
+ repoId: this.options.directRepoId,
453
+ ref: this.options.ref,
454
+ path: this.pathRule(definition).paths[0] ?? "",
455
+ repository: { repoId: this.options.directRepoId }
456
+ }, filePath),
457
+ git: null
458
+ };
459
+ }
460
+ return {
461
+ item: {
462
+ id: slug,
463
+ slug,
464
+ model: definition.name,
465
+ title: titleForEntry(definition, frontmatter),
466
+ path: filePath,
467
+ body,
468
+ frontmatter,
469
+ createdAt: dateForEntry(definition, frontmatter, "created_at"),
470
+ updatedAt: dateForEntry(definition, frontmatter, "updated_at")
471
+ },
472
+ git: null
473
+ };
474
+ }
475
+ async update(request) {
476
+ const definition = this.definition(request.model);
477
+ ensureMutationAllowed(definition, "update");
478
+ const workspaceId = this.requireWorkspaceId();
479
+ const existing = await this.get(request);
480
+ if (!existing) {
481
+ throw new Error(`No ${request.model} entry found for update.`);
482
+ }
483
+ assertExpectedVersion(request.expectedVersion, existing, `${definition.name} "${existing.slug}"`);
484
+ const mutationData = normalizeMutationData(definition, sanitizeFrontmatterInput(request.data));
485
+ const nextFrontmatter = canonicalizeFrontmatter(
486
+ definition,
487
+ normalizeRecordToCanonicalShape(definition, existing.frontmatter),
488
+ {
489
+ ...mutationData,
490
+ updated_at: mutationData.updated_at ?? (/* @__PURE__ */ new Date()).toISOString()
491
+ }
492
+ );
493
+ const nextBody = typeof request.data.body === "string" ? request.data.body : existing.body;
494
+ await this.options.client.files.patch(workspaceId, {
495
+ path: existing.path,
496
+ content: serializeFrontmatterDocument(nextFrontmatter, nextBody)
497
+ });
498
+ return {
499
+ item: {
500
+ ...existing,
501
+ title: titleForEntry(definition, nextFrontmatter),
502
+ body: nextBody,
503
+ frontmatter: nextFrontmatter,
504
+ updatedAt: dateForEntry(definition, nextFrontmatter, "updated_at")
505
+ },
506
+ git: null
507
+ };
508
+ }
509
+ }
510
+ function cryptoRandomId() {
511
+ return globalThis.crypto?.randomUUID?.() ?? `treedx-${Date.now()}`;
512
+ }
513
+ class LocalGraphBackend {
514
+ constructor(runtime) {
515
+ this.runtime = runtime;
516
+ }
517
+ runtime;
518
+ refresh(request) {
519
+ return this.runtime.refresh(request);
520
+ }
521
+ queryGraph(request) {
522
+ return this.runtime.queryGraph(request);
523
+ }
524
+ buildContextPack(request) {
525
+ return this.runtime.buildContextPack(request);
526
+ }
527
+ parseGraphDsl(source) {
528
+ return this.runtime.parseGraphDsl(source);
529
+ }
530
+ }
531
+ class TreeDxGraphBackend {
532
+ constructor(options) {
533
+ this.options = options;
534
+ }
535
+ options;
536
+ async refresh(request) {
537
+ const candidates = await this.options.resolver.resolveCandidates({
538
+ paths: request?.paths?.length ? request.paths : ["**"]
539
+ });
540
+ return Promise.all(candidates.map(
541
+ (candidate) => this.options.client.graph.refresh(candidate.repoId, compactObject({
542
+ ref: candidate.ref ?? this.options.ref,
543
+ paths: request?.paths
544
+ }))
545
+ ));
546
+ }
547
+ async repoIds() {
548
+ const repositories = await this.options.resolver.listRepositories();
549
+ return repositories.flatMap((repository) => {
550
+ const repoId = repoIdFromRepository(repository);
551
+ return repoId ? [repoId] : [];
552
+ });
553
+ }
554
+ async queryGraph(request) {
555
+ if (this.options.directRepoId) {
556
+ return this.options.client.request({
557
+ method: "POST",
558
+ path: `/api/v1/repos/${segment(this.options.directRepoId)}/graph/query`,
559
+ body: compactObject({
560
+ ...request,
561
+ ref: this.options.ref
562
+ })
563
+ });
564
+ }
565
+ return this.options.client.federation.graphQuery({
566
+ ...request,
567
+ repoIds: await this.repoIds(),
568
+ ref: this.options.ref
569
+ });
570
+ }
571
+ async buildContextPack(request) {
572
+ if (this.options.directRepoId) {
573
+ const build = () => this.options.client.request({
574
+ method: "POST",
575
+ path: `/api/v1/repos/${segment(this.options.directRepoId)}/context/build`,
576
+ body: compactObject({
577
+ ...request,
578
+ ref: this.options.ref
579
+ })
580
+ });
581
+ try {
582
+ return await build();
583
+ } catch (error) {
584
+ if (!isGraphNotReadyError(error)) throw error;
585
+ await this.options.client.graph.refresh(this.options.directRepoId, compactObject({
586
+ ref: this.options.ref,
587
+ paths: ["**"]
588
+ }));
589
+ return await build();
590
+ }
591
+ }
592
+ return this.options.client.federation.contextBuild({
593
+ ...request,
594
+ repoIds: await this.repoIds(),
595
+ ref: this.options.ref
596
+ });
597
+ }
598
+ parseGraphDsl(source) {
599
+ return this.options.localRuntime.parseGraphDsl(source);
600
+ }
601
+ }
602
+ class LocalExecBackend {
603
+ async run(input) {
604
+ return input;
605
+ }
606
+ }
607
+ class TreeDxExecBackend {
608
+ constructor(client, workspaceId) {
609
+ this.client = client;
610
+ this.workspaceId = workspaceId;
611
+ }
612
+ client;
613
+ workspaceId;
614
+ run(input) {
615
+ if (!this.workspaceId) {
616
+ throw new Error("TreeDX exec requires treeDx.workspaceId.");
617
+ }
618
+ return this.client.exec.run(this.workspaceId, input);
619
+ }
620
+ }
621
+ export {
622
+ LocalContentBackend,
623
+ LocalExecBackend,
624
+ LocalGraphBackend,
625
+ MissingTreeDxContentBackend,
626
+ TreeDxApiError,
627
+ TreeDxContentBackend,
628
+ TreeDxContentRepositoryConfigError,
629
+ TreeDxExecBackend,
630
+ TreeDxGraphBackend,
631
+ TreeDxPortfolioResolver,
632
+ createTreeDxClientFromAgentOptions,
633
+ resolveTreeDxOptions
634
+ };