@treeseed/sdk 0.10.28 → 0.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (509) hide show
  1. package/README.md +213 -7
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +118 -59
  27. package/dist/capacity-provider.js +235 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +3 -2
  36. package/dist/control-plane.js +38 -13
  37. package/dist/copilot.d.ts +3 -0
  38. package/dist/copilot.js +16 -1
  39. package/dist/d1-http.d.ts +1 -1
  40. package/dist/d1-store.d.ts +32 -57
  41. package/dist/d1-store.js +115 -318
  42. package/dist/db/d1.d.ts +1 -232
  43. package/dist/db/index.d.ts +3 -3
  44. package/dist/db/market-schema.d.ts +50900 -11018
  45. package/dist/db/market-schema.js +2313 -467
  46. package/dist/db/node-sqlite.d.ts +1 -232
  47. package/dist/db/node-sqlite.js +7 -2
  48. package/dist/db/schema.d.ts +0 -462
  49. package/dist/db/schema.js +2 -22
  50. package/dist/dispatch.d.ts +1 -1
  51. package/dist/dispatch.js +0 -11
  52. package/dist/fixture-support.js +52 -4
  53. package/dist/governance.d.ts +133 -0
  54. package/dist/governance.js +285 -0
  55. package/dist/graph/build.d.ts +2 -2
  56. package/dist/graph/context-query-contracts.d.ts +1 -1
  57. package/dist/graph/dsl.d.ts +1 -1
  58. package/dist/graph/query.d.ts +4 -4
  59. package/dist/graph/ranking.d.ts +1 -1
  60. package/dist/graph/schema.d.ts +1 -1
  61. package/dist/graph.d.ts +11 -11
  62. package/dist/guarantees/index.d.ts +425 -0
  63. package/dist/guarantees/index.js +1146 -0
  64. package/dist/hosting/apps.d.ts +12 -0
  65. package/dist/hosting/apps.js +107 -0
  66. package/dist/hosting/builtins.d.ts +25 -0
  67. package/dist/hosting/builtins.js +602 -0
  68. package/dist/hosting/contracts.d.ts +208 -0
  69. package/dist/hosting/contracts.js +0 -0
  70. package/dist/hosting/graph.d.ts +195 -0
  71. package/dist/hosting/graph.js +1092 -0
  72. package/dist/hosting/index.d.ts +4 -0
  73. package/dist/hosting/index.js +4 -0
  74. package/dist/index.d.ts +88 -67
  75. package/dist/index.js +142 -14
  76. package/dist/local-dev/managed-dev.d.ts +85 -0
  77. package/dist/local-dev/managed-dev.js +368 -0
  78. package/dist/managed-dependencies.d.ts +9 -0
  79. package/dist/managed-dependencies.js +10 -9
  80. package/dist/market-client.d.ts +327 -9
  81. package/dist/market-client.js +464 -20
  82. package/dist/model-registry.d.ts +1 -1
  83. package/dist/model-registry.js +19 -19
  84. package/dist/operations/agent-tools.d.ts +2 -11
  85. package/dist/operations/agent-tools.js +2 -14
  86. package/dist/operations/providers/default.d.ts +1 -1
  87. package/dist/operations/providers/default.js +20 -37
  88. package/dist/operations/repository-operations.d.ts +26 -2
  89. package/dist/operations/repository-operations.js +159 -1
  90. package/dist/operations/runtime.d.ts +3 -3
  91. package/dist/operations/services/bootstrap-runner.d.ts +4 -2
  92. package/dist/operations/services/bootstrap-runner.js +22 -2
  93. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  94. package/dist/operations/services/build-warning-policy.js +81 -82
  95. package/dist/operations/services/commit-message-provider.js +4 -4
  96. package/dist/operations/services/config-runtime.d.ts +83 -24
  97. package/dist/operations/services/config-runtime.js +449 -130
  98. package/dist/operations/services/deploy.d.ts +106 -624
  99. package/dist/operations/services/deploy.js +746 -263
  100. package/dist/operations/services/deployment-readiness.d.ts +30 -0
  101. package/dist/operations/services/deployment-readiness.js +206 -0
  102. package/dist/operations/services/git-remote-policy.js +12 -4
  103. package/dist/operations/services/git-runner.d.ts +66 -0
  104. package/dist/operations/services/git-runner.js +479 -0
  105. package/dist/operations/services/git-workflow.d.ts +45 -6
  106. package/dist/operations/services/git-workflow.js +251 -23
  107. package/dist/operations/services/github-actions-verification.d.ts +4 -1
  108. package/dist/operations/services/github-actions-verification.js +12 -3
  109. package/dist/operations/services/github-api.js +22 -6
  110. package/dist/operations/services/github-automation.d.ts +4 -4
  111. package/dist/operations/services/github-automation.js +19 -21
  112. package/dist/operations/services/github-credentials.d.ts +13 -0
  113. package/dist/operations/services/github-credentials.js +59 -0
  114. package/dist/operations/services/hosted-service-checks.d.ts +81 -0
  115. package/dist/operations/services/hosted-service-checks.js +478 -0
  116. package/dist/operations/services/hosting-audit.d.ts +2 -2
  117. package/dist/operations/services/hosting-audit.js +7 -7
  118. package/dist/operations/services/hub-launch.d.ts +1 -1
  119. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  120. package/dist/operations/services/hub-provider-launch.js +22 -17
  121. package/dist/operations/services/live-hosted-service-checks.d.ts +26 -0
  122. package/dist/operations/services/live-hosted-service-checks.js +463 -0
  123. package/dist/operations/services/local-dev.js +0 -1
  124. package/dist/operations/services/managed-host-security.d.ts +1 -1
  125. package/dist/operations/services/managed-host-security.js +1 -1
  126. package/dist/operations/services/managed-repositories.d.ts +37 -0
  127. package/dist/operations/services/managed-repositories.js +177 -0
  128. package/dist/operations/services/operations-runner-smoke.d.ts +31 -0
  129. package/dist/operations/services/operations-runner-smoke.js +198 -0
  130. package/dist/operations/services/package-adapters.d.ts +170 -0
  131. package/dist/operations/services/package-adapters.js +859 -0
  132. package/dist/operations/services/package-reference-policy.d.ts +13 -88
  133. package/dist/operations/services/package-reference-policy.js +96 -215
  134. package/dist/operations/services/project-host-operations.d.ts +4 -4
  135. package/dist/operations/services/project-platform.d.ts +57 -173
  136. package/dist/operations/services/project-platform.js +80 -111
  137. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  138. package/dist/operations/services/project-web-monitor.js +122 -5
  139. package/dist/operations/services/railway-api.d.ts +117 -5
  140. package/dist/operations/services/railway-api.js +915 -93
  141. package/dist/operations/services/railway-deploy.d.ts +30 -112
  142. package/dist/operations/services/railway-deploy.js +521 -961
  143. package/dist/operations/services/release-history.js +3 -4
  144. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  145. package/dist/operations/services/release-proof-ledger.js +81 -0
  146. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  147. package/dist/operations/services/release-proof-planner.js +195 -0
  148. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  149. package/dist/operations/services/release-proof-runner.js +169 -0
  150. package/dist/operations/services/release-proof.d.ts +81 -0
  151. package/dist/operations/services/release-proof.js +79 -0
  152. package/dist/operations/services/repository-save-orchestrator.d.ts +8 -7
  153. package/dist/operations/services/repository-save-orchestrator.js +604 -212
  154. package/dist/operations/services/runtime-paths.d.ts +1 -3
  155. package/dist/operations/services/runtime-paths.js +0 -4
  156. package/dist/operations/services/runtime-tools.d.ts +1 -191
  157. package/dist/operations/services/runtime-tools.js +4 -443
  158. package/dist/operations/services/save-deploy-preflight.js +9 -1
  159. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  160. package/dist/operations/services/template-host-bindings.js +3 -2
  161. package/dist/operations/services/template-registry.d.ts +6 -6
  162. package/dist/operations/services/template-registry.js +33 -14
  163. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  164. package/dist/operations/services/verification-cache.d.ts +25 -0
  165. package/dist/operations/services/verification-cache.js +71 -0
  166. package/dist/operations/services/workflow-timing.d.ts +25 -0
  167. package/dist/operations/services/workflow-timing.js +79 -0
  168. package/dist/operations/services/workspace-dependency-mode.js +50 -5
  169. package/dist/operations/services/workspace-preflight.js +8 -8
  170. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  171. package/dist/operations/services/workspace-save.d.ts +1 -0
  172. package/dist/operations/services/workspace-save.js +42 -19
  173. package/dist/operations/services/workspace-tools.js +42 -7
  174. package/dist/operations-registry.d.ts +1 -1
  175. package/dist/operations-registry.js +5 -6
  176. package/dist/operations-types.d.ts +1 -1
  177. package/dist/operations.d.ts +17 -11
  178. package/dist/operations.js +57 -3
  179. package/dist/platform/book-export.js +2 -0
  180. package/dist/platform/books-data.d.ts +1 -1
  181. package/dist/platform/config.d.ts +27 -0
  182. package/dist/platform/config.js +100 -0
  183. package/dist/platform/content-runtime-source.d.ts +54 -0
  184. package/dist/platform/content-runtime-source.js +169 -0
  185. package/dist/platform/contracts.d.ts +38 -2
  186. package/dist/platform/deploy-config.d.ts +1 -1
  187. package/dist/platform/deploy-config.js +80 -9
  188. package/dist/platform/deploy-runtime.d.ts +1 -1
  189. package/dist/platform/desired-state.d.ts +63 -0
  190. package/dist/platform/desired-state.js +1021 -0
  191. package/dist/platform/env.yaml +568 -45
  192. package/dist/platform/environment.d.ts +3 -2
  193. package/dist/platform/environment.js +122 -21
  194. package/dist/platform/local-content-materialization.d.ts +9 -0
  195. package/dist/platform/local-content-materialization.js +212 -0
  196. package/dist/platform/plugin.d.ts +13 -4
  197. package/dist/platform/plugins/runtime.d.ts +3 -3
  198. package/dist/platform/plugins/runtime.js +62 -1
  199. package/dist/platform/plugins.d.ts +6 -6
  200. package/dist/platform/published-content-pipeline.d.ts +3 -3
  201. package/dist/platform/published-content-pipeline.js +5 -1
  202. package/dist/platform/published-content.d.ts +4 -3
  203. package/dist/platform/site-config-schema.d.ts +1 -0
  204. package/dist/platform/site-config-schema.js +4 -1
  205. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  206. package/dist/platform/tenant-config.d.ts +1 -1
  207. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  208. package/dist/platform/utils/site-config-schema.js +400 -461
  209. package/dist/platform-operation-store.d.ts +1 -1
  210. package/dist/platform-operation-store.js +2 -2
  211. package/dist/platform-operations.js +1 -1
  212. package/dist/plugin-default.d.ts +1 -1
  213. package/dist/plugin-default.js +27 -12
  214. package/dist/project-import.d.ts +91 -0
  215. package/dist/project-import.js +257 -0
  216. package/dist/project-workflow.d.ts +1 -1
  217. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  218. package/dist/reconcile/bootstrap-systems.js +5 -5
  219. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  220. package/dist/reconcile/builtin-adapters.js +3190 -429
  221. package/dist/reconcile/contracts.d.ts +23 -6
  222. package/dist/reconcile/desired-state.d.ts +2 -192
  223. package/dist/reconcile/desired-state.js +29 -38
  224. package/dist/reconcile/engine.d.ts +61 -395
  225. package/dist/reconcile/engine.js +229 -44
  226. package/dist/reconcile/index.d.ts +10 -8
  227. package/dist/reconcile/index.js +2 -0
  228. package/dist/reconcile/live-acceptance.d.ts +100 -0
  229. package/dist/reconcile/live-acceptance.js +2027 -0
  230. package/dist/reconcile/platform.d.ts +104 -0
  231. package/dist/reconcile/platform.js +100 -0
  232. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  233. package/dist/reconcile/providers/docker-private.js +101 -0
  234. package/dist/reconcile/providers/github-private.d.ts +65 -0
  235. package/dist/reconcile/providers/github-private.js +119 -0
  236. package/dist/reconcile/providers/local-private.d.ts +28 -0
  237. package/dist/reconcile/providers/local-private.js +75 -0
  238. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  239. package/dist/reconcile/providers/railway-iac.js +275 -0
  240. package/dist/reconcile/providers/release-private.d.ts +92 -0
  241. package/dist/reconcile/providers/release-private.js +152 -0
  242. package/dist/reconcile/registry.d.ts +2 -2
  243. package/dist/reconcile/registry.js +16 -1
  244. package/dist/reconcile/state.d.ts +1 -1
  245. package/dist/reconcile/state.js +7 -44
  246. package/dist/reconcile/units.d.ts +1 -1
  247. package/dist/reconcile/units.js +9 -3
  248. package/dist/remote.d.ts +6 -6
  249. package/dist/scenes/artifacts.d.ts +16 -0
  250. package/dist/scenes/artifacts.js +61 -0
  251. package/dist/scenes/auth.d.ts +2 -0
  252. package/dist/scenes/auth.js +28 -0
  253. package/dist/scenes/base-url.d.ts +12 -0
  254. package/dist/scenes/base-url.js +123 -0
  255. package/dist/scenes/builtin-plugins.d.ts +2 -0
  256. package/dist/scenes/builtin-plugins.js +447 -0
  257. package/dist/scenes/checkpoints.d.ts +14 -0
  258. package/dist/scenes/checkpoints.js +33 -0
  259. package/dist/scenes/device-matrix.d.ts +2 -0
  260. package/dist/scenes/device-matrix.js +97 -0
  261. package/dist/scenes/devices.d.ts +11 -0
  262. package/dist/scenes/devices.js +22 -0
  263. package/dist/scenes/diagnostics.d.ts +5 -0
  264. package/dist/scenes/diagnostics.js +22 -0
  265. package/dist/scenes/diagram-providers.d.ts +2 -0
  266. package/dist/scenes/diagram-providers.js +181 -0
  267. package/dist/scenes/diagram-validation.d.ts +22 -0
  268. package/dist/scenes/diagram-validation.js +74 -0
  269. package/dist/scenes/environment.d.ts +2 -0
  270. package/dist/scenes/environment.js +65 -0
  271. package/dist/scenes/evidence-bundle.d.ts +5 -0
  272. package/dist/scenes/evidence-bundle.js +42 -0
  273. package/dist/scenes/evidence-report.d.ts +10 -0
  274. package/dist/scenes/evidence-report.js +73 -0
  275. package/dist/scenes/evidence.d.ts +16 -0
  276. package/dist/scenes/evidence.js +277 -0
  277. package/dist/scenes/index.d.ts +48 -0
  278. package/dist/scenes/index.js +312 -0
  279. package/dist/scenes/inspect.d.ts +9 -0
  280. package/dist/scenes/inspect.js +64 -0
  281. package/dist/scenes/loader.d.ts +3 -0
  282. package/dist/scenes/loader.js +38 -0
  283. package/dist/scenes/logs.d.ts +2 -0
  284. package/dist/scenes/logs.js +47 -0
  285. package/dist/scenes/operations.d.ts +3 -0
  286. package/dist/scenes/operations.js +128 -0
  287. package/dist/scenes/phase0.d.ts +9 -0
  288. package/dist/scenes/phase0.js +637 -0
  289. package/dist/scenes/planner.d.ts +12 -0
  290. package/dist/scenes/planner.js +166 -0
  291. package/dist/scenes/playwright-adapter.d.ts +2 -0
  292. package/dist/scenes/playwright-adapter.js +63 -0
  293. package/dist/scenes/plugins.d.ts +5 -0
  294. package/dist/scenes/plugins.js +115 -0
  295. package/dist/scenes/progress.d.ts +17 -0
  296. package/dist/scenes/progress.js +24 -0
  297. package/dist/scenes/publish-destinations.d.ts +12 -0
  298. package/dist/scenes/publish-destinations.js +99 -0
  299. package/dist/scenes/publish-plan-report.d.ts +10 -0
  300. package/dist/scenes/publish-plan-report.js +70 -0
  301. package/dist/scenes/publish-plan.d.ts +15 -0
  302. package/dist/scenes/publish-plan.js +248 -0
  303. package/dist/scenes/publish-redaction.d.ts +16 -0
  304. package/dist/scenes/publish-redaction.js +148 -0
  305. package/dist/scenes/publish-release-record.d.ts +13 -0
  306. package/dist/scenes/publish-release-record.js +34 -0
  307. package/dist/scenes/publish-report.d.ts +10 -0
  308. package/dist/scenes/publish-report.js +67 -0
  309. package/dist/scenes/publish.d.ts +16 -0
  310. package/dist/scenes/publish.js +298 -0
  311. package/dist/scenes/registry.d.ts +12 -0
  312. package/dist/scenes/registry.js +65 -0
  313. package/dist/scenes/remotion-adapter.d.ts +3 -0
  314. package/dist/scenes/remotion-adapter.js +94 -0
  315. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  316. package/dist/scenes/remotion-composition-registry.js +12 -0
  317. package/dist/scenes/remotion-compositions.d.ts +15 -0
  318. package/dist/scenes/remotion-compositions.js +464 -0
  319. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  320. package/dist/scenes/remotion-diagrams.js +188 -0
  321. package/dist/scenes/remotion-input.d.ts +13 -0
  322. package/dist/scenes/remotion-input.js +291 -0
  323. package/dist/scenes/remotion-visuals.d.ts +29 -0
  324. package/dist/scenes/remotion-visuals.js +198 -0
  325. package/dist/scenes/render-media-assets.d.ts +9 -0
  326. package/dist/scenes/render-media-assets.js +117 -0
  327. package/dist/scenes/render-report.d.ts +10 -0
  328. package/dist/scenes/render-report.js +27 -0
  329. package/dist/scenes/render.d.ts +2 -0
  330. package/dist/scenes/render.js +218 -0
  331. package/dist/scenes/reporter.d.ts +3 -0
  332. package/dist/scenes/reporter.js +101 -0
  333. package/dist/scenes/resume.d.ts +2 -0
  334. package/dist/scenes/resume.js +79 -0
  335. package/dist/scenes/runner.d.ts +2 -0
  336. package/dist/scenes/runner.js +674 -0
  337. package/dist/scenes/schema.d.ts +6 -0
  338. package/dist/scenes/schema.js +994 -0
  339. package/dist/scenes/seed.d.ts +2 -0
  340. package/dist/scenes/seed.js +83 -0
  341. package/dist/scenes/segments.d.ts +15 -0
  342. package/dist/scenes/segments.js +79 -0
  343. package/dist/scenes/selectors.d.ts +3 -0
  344. package/dist/scenes/selectors.js +21 -0
  345. package/dist/scenes/timeline.d.ts +11 -0
  346. package/dist/scenes/timeline.js +26 -0
  347. package/dist/scenes/timeouts.d.ts +6 -0
  348. package/dist/scenes/timeouts.js +17 -0
  349. package/dist/scenes/training-captions.d.ts +14 -0
  350. package/dist/scenes/training-captions.js +98 -0
  351. package/dist/scenes/training-report.d.ts +10 -0
  352. package/dist/scenes/training-report.js +78 -0
  353. package/dist/scenes/training-transcript.d.ts +24 -0
  354. package/dist/scenes/training-transcript.js +204 -0
  355. package/dist/scenes/training.d.ts +10 -0
  356. package/dist/scenes/training.js +134 -0
  357. package/dist/scenes/types.d.ts +1872 -0
  358. package/dist/scenes/types.js +8 -0
  359. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  360. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  361. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  362. package/dist/scenes/visual-audit-fixtures.js +210 -0
  363. package/dist/scenes/visual-audit-report.d.ts +11 -0
  364. package/dist/scenes/visual-audit-report.js +85 -0
  365. package/dist/scenes/visual-audit-review.d.ts +23 -0
  366. package/dist/scenes/visual-audit-review.js +829 -0
  367. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  368. package/dist/scenes/visual-audit-routes.js +308 -0
  369. package/dist/scenes/visual-audit.d.ts +3 -0
  370. package/dist/scenes/visual-audit.js +596 -0
  371. package/dist/scripts/build-dist.js +154 -40
  372. package/dist/scripts/check-build-warnings.js +42 -53
  373. package/dist/scripts/cleanup-markdown.js +1 -1
  374. package/dist/scripts/cli-test-fixtures.js +24 -28
  375. package/dist/scripts/deployment-readiness.js +20 -0
  376. package/dist/scripts/generate-treedx-openapi-types.js +186 -0
  377. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  378. package/dist/scripts/operations-runner-smoke.js +16 -0
  379. package/dist/scripts/package-tools.js +12 -1
  380. package/dist/scripts/prepare.js +3 -7
  381. package/dist/scripts/release-verify.js +6 -6
  382. package/dist/scripts/run-fixture-astro-command.js +1 -1
  383. package/dist/scripts/template-catalog.test.js +68 -82
  384. package/dist/scripts/tenant-dev.js +0 -10
  385. package/dist/scripts/tenant-workflow-action.js +10 -1
  386. package/dist/scripts/test-cloudflare-local.js +1 -1
  387. package/dist/scripts/test-scaffold.js +0 -1
  388. package/dist/scripts/test-smoke.js +3 -3
  389. package/dist/scripts/treeseed-build-dist.js +4 -7
  390. package/dist/scripts/treeseed-release-verify.js +1 -1
  391. package/dist/scripts/verify-driver.js +30 -21
  392. package/dist/scripts/workflow-commands.test.js +18 -27
  393. package/dist/scripts/workspace-command-e2e.js +1 -1
  394. package/dist/scripts/workspace-lint.js +6 -0
  395. package/dist/scripts/workspace-release-test.js +90 -1
  396. package/dist/scripts/workspace-test.js +6 -0
  397. package/dist/sdk-dispatch.d.ts +1 -1
  398. package/dist/sdk-dispatch.js +0 -16
  399. package/dist/sdk-fields.d.ts +1 -1
  400. package/dist/sdk-filters.d.ts +1 -1
  401. package/dist/sdk-types.d.ts +1352 -116
  402. package/dist/sdk-types.js +413 -2
  403. package/dist/sdk.d.ts +106 -100
  404. package/dist/sdk.js +211 -51
  405. package/dist/secrets-capability.d.ts +421 -0
  406. package/dist/secrets-capability.js +530 -0
  407. package/dist/seeds/normalize.js +1 -0
  408. package/dist/seeds/planner.js +38 -0
  409. package/dist/seeds/schema.js +293 -4
  410. package/dist/seeds/types.d.ts +60 -0
  411. package/dist/seeds/types.js +9 -1
  412. package/dist/service-credentials.d.ts +54 -0
  413. package/dist/service-credentials.js +112 -0
  414. package/dist/stores/cursor-store.d.ts +2 -2
  415. package/dist/stores/envelopes.d.ts +1 -1
  416. package/dist/stores/helpers.d.ts +1 -1
  417. package/dist/stores/lease-store.d.ts +2 -2
  418. package/dist/stores/message-store.d.ts +2 -2
  419. package/dist/stores/operational-store.d.ts +3 -26
  420. package/dist/stores/operational-store.js +0 -225
  421. package/dist/stores/project-workflow-store.d.ts +2 -2
  422. package/dist/stores/run-store.d.ts +2 -3
  423. package/dist/stores/run-store.js +0 -98
  424. package/dist/stores/subscription-store.d.ts +2 -3
  425. package/dist/stores/subscription-store.js +0 -100
  426. package/dist/template-catalog.d.ts +1 -1
  427. package/dist/template-launch-requirements.d.ts +2 -2
  428. package/dist/template-launch-requirements.js +9 -0
  429. package/dist/template-launch-ui.d.ts +2 -2
  430. package/dist/treedx/adapters.d.ts +6 -0
  431. package/dist/treedx/adapters.js +36 -0
  432. package/dist/treedx/client.d.ts +222 -0
  433. package/dist/treedx/client.js +871 -0
  434. package/dist/treedx/errors.d.ts +13 -0
  435. package/dist/treedx/errors.js +17 -0
  436. package/dist/treedx/federated-client.d.ts +27 -0
  437. package/dist/treedx/federated-client.js +158 -0
  438. package/dist/treedx/generated/openapi-types.d.ts +3558 -0
  439. package/dist/treedx/generated/openapi-types.js +0 -0
  440. package/dist/treedx/graph-adapter.d.ts +33 -0
  441. package/dist/treedx/graph-adapter.js +156 -0
  442. package/dist/treedx/index.d.ts +14 -0
  443. package/dist/treedx/index.js +48 -0
  444. package/dist/treedx/market-integration.d.ts +27 -0
  445. package/dist/treedx/market-integration.js +131 -0
  446. package/dist/treedx/ports.d.ts +166 -0
  447. package/dist/treedx/ports.js +231 -0
  448. package/dist/treedx/query-adapter.d.ts +19 -0
  449. package/dist/treedx/query-adapter.js +62 -0
  450. package/dist/treedx/registry-client.d.ts +11 -0
  451. package/dist/treedx/registry-client.js +19 -0
  452. package/dist/treedx/repository-adapter.d.ts +45 -0
  453. package/dist/treedx/repository-adapter.js +319 -0
  454. package/dist/treedx/sdk-integration.d.ts +27 -0
  455. package/dist/treedx/sdk-integration.js +63 -0
  456. package/dist/treedx/types.d.ts +1084 -0
  457. package/dist/treedx/types.js +8 -0
  458. package/dist/treedx/workspace-adapter.d.ts +27 -0
  459. package/dist/treedx/workspace-adapter.js +65 -0
  460. package/dist/treedx-backends.d.ts +220 -0
  461. package/dist/treedx-backends.js +634 -0
  462. package/dist/treedx-client.d.ts +89 -0
  463. package/dist/treedx-client.js +184 -0
  464. package/dist/treeseed/services/compose.yml +2 -3
  465. package/dist/treeseed/template-catalog/catalog.fixture.json +27 -27
  466. package/dist/types/agents.d.ts +256 -0
  467. package/dist/types/agents.js +42 -1
  468. package/dist/verification.d.ts +1 -0
  469. package/dist/verification.js +143 -14
  470. package/dist/workflow/operations.d.ts +580 -523
  471. package/dist/workflow/operations.js +2084 -1279
  472. package/dist/workflow/policy.js +19 -7
  473. package/dist/workflow/runs.d.ts +9 -3
  474. package/dist/workflow/runs.js +66 -26
  475. package/dist/workflow/session.d.ts +4 -1
  476. package/dist/workflow/session.js +50 -10
  477. package/dist/workflow/worktrees.d.ts +6 -2
  478. package/dist/workflow/worktrees.js +98 -15
  479. package/dist/workflow-state.d.ts +17 -4
  480. package/dist/workflow-state.js +68 -41
  481. package/dist/workflow-support.d.ts +26 -17
  482. package/dist/workflow-support.js +84 -24
  483. package/dist/workflow.d.ts +51 -16
  484. package/dist/workflow.js +19 -7
  485. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  486. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  487. package/drizzle/market/0004_treedx_market_integration.sql +99 -0
  488. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  489. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  490. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  491. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  492. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  493. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  494. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  495. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  496. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  497. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  498. package/package.json +106 -18
  499. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  500. package/templates/github/deploy-web.workflow.yml +49 -12
  501. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  502. package/dist/operations/services/mailpit-runtime.js +0 -67
  503. package/dist/operations/services/release-candidate.d.ts +0 -41
  504. package/dist/operations/services/release-candidate.js +0 -616
  505. package/dist/scripts/ensure-mailpit.js +0 -48
  506. package/dist/scripts/logs-mailpit.js +0 -2
  507. package/dist/scripts/run-ts.js +0 -45
  508. package/dist/scripts/stop-mailpit.js +0 -5
  509. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -1,13 +1,65 @@
1
- import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
- import { basename, dirname, extname, join, relative, resolve } from 'node:path';
1
+ import { chmodSync, copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, rmdirSync, statSync, writeFileSync } from 'node:fs';
2
+ import { dirname, extname, join, relative, resolve } from 'node:path';
3
3
  import { build } from 'esbuild';
4
4
  import ts from 'typescript';
5
5
  import { packageRoot } from './package-tools.js';
6
6
  const srcRoot = resolve(packageRoot, 'src');
7
7
  const scriptsRoot = resolve(packageRoot, 'scripts');
8
8
  const distRoot = resolve(packageRoot, 'dist');
9
+ const distBuildRoot = resolve(packageRoot, `.treeseed-dist-build-${process.pid}`);
10
+ const buildLockRoot = resolve(packageRoot, '.treeseed-build-dist.lock');
9
11
  const treeseedTemplateCatalogSourceRoot = resolve(srcRoot, 'treeseed', 'template-catalog');
10
12
  const treeseedServicesSourceRoot = resolve(srcRoot, 'treeseed', 'services');
13
+ const BIN_ENTRYPOINTS = new Set(['verification.ts']);
14
+ const BUILD_LOCK_TIMEOUT_MS = 15 * 60 * 1000;
15
+ const BUILD_LOCK_STALE_MS = 20 * 60 * 1000;
16
+ function sleep(ms) {
17
+ return new Promise((resolvePromise) => setTimeout(resolvePromise, ms));
18
+ }
19
+ function lockOwnerIsRunning() {
20
+ let owner;
21
+ try {
22
+ owner = JSON.parse(readFileSync(resolve(buildLockRoot, 'owner.json'), 'utf8'));
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ if (typeof owner.pid !== 'number') {
28
+ return false;
29
+ }
30
+ try {
31
+ process.kill(owner.pid, 0);
32
+ return true;
33
+ }
34
+ catch (error) {
35
+ const code = typeof error === 'object' && error && 'code' in error ? error.code : null;
36
+ return code === 'EPERM';
37
+ }
38
+ }
39
+ async function acquireBuildLock() {
40
+ const startedAt = Date.now();
41
+ while (true) {
42
+ try {
43
+ mkdirSync(buildLockRoot);
44
+ writeFileSync(resolve(buildLockRoot, 'owner.json'), JSON.stringify({
45
+ pid: process.pid,
46
+ startedAt: new Date().toISOString(),
47
+ }, null, 2));
48
+ return () => rmSync(buildLockRoot, { recursive: true, force: true });
49
+ }
50
+ catch (error) {
51
+ const ageMs = existsSync(buildLockRoot) ? Date.now() - statSync(buildLockRoot).mtimeMs : 0;
52
+ if (!lockOwnerIsRunning() || ageMs > BUILD_LOCK_STALE_MS) {
53
+ rmSync(buildLockRoot, { recursive: true, force: true });
54
+ continue;
55
+ }
56
+ if (Date.now() - startedAt > BUILD_LOCK_TIMEOUT_MS) {
57
+ throw new Error(`Timed out waiting for SDK dist build lock at ${buildLockRoot}.`);
58
+ }
59
+ await sleep(250);
60
+ }
61
+ }
62
+ }
11
63
  const COPY_EXTENSIONS = new Set(['.json', '.md', '.js', '.d.js', '.yaml', '.yml']);
12
64
  function walkFiles(root) {
13
65
  const files = [];
@@ -40,7 +92,7 @@ function isDeclarationAsset(filePath) {
40
92
  }
41
93
  async function compileModule(filePath, sourceRoot, outputRoot) {
42
94
  const relativePath = relative(sourceRoot, filePath);
43
- const outputFile = resolve(outputRoot, relativePath.replace(/\.(mjs|ts)$/u, '.js'));
95
+ const outputFile = resolve(outputRoot, relativePath.replace(/\.ts$/u, '.js'));
44
96
  ensureDir(outputFile);
45
97
  await build({
46
98
  entryPoints: [filePath],
@@ -51,7 +103,14 @@ async function compileModule(filePath, sourceRoot, outputRoot) {
51
103
  logLevel: 'silent',
52
104
  });
53
105
  const builtSource = readFileSync(outputFile, 'utf8');
54
- writeFileSync(outputFile, rewriteRuntimeSpecifiers(builtSource), 'utf8');
106
+ const rewritten = rewriteRuntimeSpecifiers(builtSource);
107
+ const executableSource = BIN_ENTRYPOINTS.has(relativePath)
108
+ ? `${rewritten.startsWith('#!') ? '' : '#!/usr/bin/env node\n'}${rewritten}`
109
+ : rewritten;
110
+ writeFileSync(outputFile, executableSource, 'utf8');
111
+ if (BIN_ENTRYPOINTS.has(relativePath)) {
112
+ chmodSync(outputFile, 0o755);
113
+ }
55
114
  }
56
115
  function copyAsset(filePath, sourceRoot, outputRoot) {
57
116
  const outputFile = resolve(outputRoot, relative(sourceRoot, filePath));
@@ -67,16 +126,54 @@ function copyAssetTree(sourceRoot, outputRoot) {
67
126
  copyAsset(filePath, sourceRoot, outputRoot);
68
127
  }
69
128
  }
70
- function transpileScript(filePath) {
71
- if (basename(filePath).startsWith('.ts-run-')) {
129
+ function listRelativeFiles(root) {
130
+ if (!existsSync(root)) {
131
+ return [];
132
+ }
133
+ return walkFiles(root).map((filePath) => relative(root, filePath));
134
+ }
135
+ function removeEmptyDirectories(root) {
136
+ if (!existsSync(root)) {
137
+ return;
138
+ }
139
+ const entries = readdirSync(root, { withFileTypes: true });
140
+ for (const entry of entries) {
141
+ if (!entry.isDirectory()) {
142
+ continue;
143
+ }
144
+ removeEmptyDirectories(resolve(root, entry.name));
145
+ }
146
+ if (root !== distRoot && readdirSync(root).length === 0) {
147
+ rmdirSync(root);
148
+ }
149
+ }
150
+ function publishDistBuild() {
151
+ if (!existsSync(distRoot)) {
152
+ renameSync(distBuildRoot, distRoot);
72
153
  return;
73
154
  }
155
+ const nextFiles = new Set(listRelativeFiles(distBuildRoot));
156
+ for (const relativeFile of nextFiles) {
157
+ const sourceFile = resolve(distBuildRoot, relativeFile);
158
+ const targetFile = resolve(distRoot, relativeFile);
159
+ ensureDir(targetFile);
160
+ renameSync(sourceFile, targetFile);
161
+ }
162
+ for (const relativeFile of listRelativeFiles(distRoot)) {
163
+ if (nextFiles.has(relativeFile)) {
164
+ continue;
165
+ }
166
+ rmSync(resolve(distRoot, relativeFile), { force: true });
167
+ }
168
+ removeEmptyDirectories(distRoot);
169
+ }
170
+ function transpileScript(filePath, outputRoot) {
74
171
  const source = readFileSync(filePath, 'utf8');
75
172
  const relativePath = relative(scriptsRoot, filePath);
76
173
  if (relativePath === 'fixture-tools.ts') {
77
174
  return;
78
175
  }
79
- const outputFile = resolve(distRoot, 'scripts', relativePath.replace(/\.(mjs|ts)$/u, '.js'));
176
+ const outputFile = resolve(outputRoot, 'scripts', relativePath.replace(/\.ts$/u, '.js'));
80
177
  const transformed = extname(filePath) === '.ts'
81
178
  ? ts.transpileModule(source, {
82
179
  compilerOptions: {
@@ -88,7 +185,7 @@ function transpileScript(filePath) {
88
185
  ensureDir(outputFile);
89
186
  writeFileSync(outputFile, rewriteScriptRuntimeSpecifiers(transformed), 'utf8');
90
187
  }
91
- function emitDeclarations() {
188
+ function emitDeclarations(outputRoot) {
92
189
  const rootNames = walkFiles(srcRoot).filter(isTypeScriptSource);
93
190
  const program = ts.createProgram({
94
191
  rootNames,
@@ -102,7 +199,7 @@ function emitDeclarations() {
102
199
  types: ['node'],
103
200
  declaration: true,
104
201
  emitDeclarationOnly: true,
105
- declarationDir: distRoot,
202
+ declarationDir: outputRoot,
106
203
  rootDir: srcRoot,
107
204
  noEmit: false,
108
205
  },
@@ -117,42 +214,59 @@ function emitDeclarations() {
117
214
  throw new Error(`Declaration build failed.\n${diagnostics}`);
118
215
  }
119
216
  }
120
- rmSync(distRoot, { recursive: true, force: true });
121
- for (const filePath of walkFiles(srcRoot)) {
122
- if (filePath.startsWith(`${treeseedTemplateCatalogSourceRoot}/`)) {
123
- continue;
217
+ function rewriteDeclarations(outputRoot) {
218
+ for (const filePath of walkFiles(outputRoot)) {
219
+ if (!filePath.endsWith('.d.js'))
220
+ continue;
221
+ const contents = readFileSync(filePath, 'utf8');
222
+ writeFileSync(filePath, rewriteRuntimeSpecifiers(contents), 'utf8');
124
223
  }
125
- const extension = extname(filePath);
126
- if (isDeclarationAsset(filePath)) {
127
- copyAsset(filePath, srcRoot, distRoot);
128
- continue;
224
+ }
225
+ const releaseBuildLock = await acquireBuildLock();
226
+ try {
227
+ rmSync(distBuildRoot, { recursive: true, force: true });
228
+ for (const filePath of walkFiles(srcRoot)) {
229
+ if (filePath.startsWith(`${treeseedTemplateCatalogSourceRoot}/`)) {
230
+ continue;
231
+ }
232
+ const extension = extname(filePath);
233
+ if (isDeclarationAsset(filePath)) {
234
+ copyAsset(filePath, srcRoot, distBuildRoot);
235
+ continue;
236
+ }
237
+ if (isTypeScriptSource(filePath)) {
238
+ await compileModule(filePath, srcRoot, distBuildRoot);
239
+ continue;
240
+ }
241
+ if (COPY_EXTENSIONS.has(extension)) {
242
+ copyAsset(filePath, srcRoot, distBuildRoot);
243
+ }
129
244
  }
130
- if (isTypeScriptSource(filePath)) {
131
- await compileModule(filePath, srcRoot, distRoot);
132
- continue;
245
+ if (existsSync(treeseedTemplateCatalogSourceRoot)) {
246
+ copyAssetTree(treeseedTemplateCatalogSourceRoot, resolve(distBuildRoot, 'treeseed', 'template-catalog'));
133
247
  }
134
- if (COPY_EXTENSIONS.has(extension)) {
135
- copyAsset(filePath, srcRoot, distRoot);
248
+ if (existsSync(treeseedServicesSourceRoot)) {
249
+ copyAssetTree(treeseedServicesSourceRoot, resolve(distBuildRoot, 'treeseed', 'services'));
136
250
  }
137
- }
138
- if (existsSync(treeseedTemplateCatalogSourceRoot)) {
139
- copyAssetTree(treeseedTemplateCatalogSourceRoot, resolve(distRoot, 'treeseed', 'template-catalog'));
140
- }
141
- if (existsSync(treeseedServicesSourceRoot)) {
142
- copyAssetTree(treeseedServicesSourceRoot, resolve(distRoot, 'treeseed', 'services'));
143
- }
144
- for (const filePath of walkFiles(scriptsRoot)) {
145
- const extension = extname(filePath);
146
- if (extension === '.ts' || extension === '.mjs') {
147
- transpileScript(filePath);
251
+ for (const filePath of walkFiles(scriptsRoot)) {
252
+ const extension = extname(filePath);
253
+ if (extension === '.ts') {
254
+ transpileScript(filePath, distBuildRoot);
255
+ }
148
256
  }
149
- }
150
- emitDeclarations();
151
- for (const filePath of walkFiles(distRoot)) {
152
- if (filePath.endsWith('.d.js')) {
153
- rmSync(filePath, { force: true });
257
+ emitDeclarations(distBuildRoot);
258
+ rewriteDeclarations(distBuildRoot);
259
+ for (const filePath of walkFiles(distBuildRoot)) {
260
+ if (filePath.endsWith('.d.js')) {
261
+ rmSync(filePath, { force: true });
262
+ }
263
+ }
264
+ if (existsSync(resolve(packageRoot, 'README.md'))) {
265
+ copyFileSync(resolve(packageRoot, 'README.md'), resolve(distBuildRoot, '..', 'README.md'));
154
266
  }
267
+ publishDistBuild();
155
268
  }
156
- if (existsSync(resolve(packageRoot, 'README.md'))) {
157
- copyFileSync(resolve(packageRoot, 'README.md'), resolve(distRoot, '..', 'README.md'));
269
+ finally {
270
+ rmSync(distBuildRoot, { recursive: true, force: true });
271
+ releaseBuildLock();
158
272
  }
@@ -1,62 +1,51 @@
1
1
  #!/usr/bin/env node
2
-
3
2
  import { readFileSync } from 'node:fs';
4
- import { resolve } from 'node:path';
5
- import {
6
- formatAllowedBuildWarnings,
7
- scanBuildWarningText,
8
- } from '../operations/services/build-warning-policy.js';
9
-
10
- const args = process.argv.slice(2);
11
- const allowlisted = [];
12
- const files = [];
13
- let useDefaultPolicy = true;
14
-
15
- for (let index = 0; index < args.length; index += 1) {
16
- const arg = args[index];
17
- if (arg === '--no-default-policy') {
18
- useDefaultPolicy = false;
19
- continue;
20
- }
21
- if (arg === '--allow') {
22
- const pattern = args[index + 1];
23
- if (!pattern) {
24
- throw new Error('Missing value for --allow.');
25
- }
26
- allowlisted.push(pattern);
27
- index += 1;
28
- continue;
29
- }
30
- files.push(arg);
3
+ import { formatAllowedBuildWarnings, mergeAllowedBuildWarnings, scanBuildWarningText, } from '../operations/services/build-warning-policy.js';
4
+ function parseArgs(argv) {
5
+ const files = [];
6
+ const allow = [];
7
+ let useDefaultPolicy = true;
8
+ for (let index = 0; index < argv.length; index += 1) {
9
+ const arg = argv[index];
10
+ if (arg === '--allow') {
11
+ const pattern = argv[index + 1];
12
+ if (!pattern)
13
+ throw new Error('--allow requires a regular expression.');
14
+ allow.push(pattern);
15
+ index += 1;
16
+ continue;
17
+ }
18
+ if (arg === '--no-default-policy') {
19
+ useDefaultPolicy = false;
20
+ continue;
21
+ }
22
+ files.push(arg);
23
+ }
24
+ return { files, allow, useDefaultPolicy };
31
25
  }
32
-
33
- if (files.length === 0) {
34
- throw new Error('Usage: node check-build-warnings.mjs <log-file> [<log-file> ...] [--allow <regex>] [--no-default-policy]');
26
+ const args = parseArgs(process.argv.slice(2));
27
+ if (args.files.length === 0) {
28
+ throw new Error('Usage: tsx scripts/check-build-warnings.ts <log-file> [<log-file> ...] [--allow <regex>] [--no-default-policy]');
35
29
  }
36
-
37
- const warningLines = [];
38
30
  const allowedWarnings = new Map();
39
- for (const file of files) {
40
- const contents = readFileSync(resolve(process.cwd(), file), 'utf8');
41
- const scan = scanBuildWarningText(contents, {
42
- useDefaultPolicy,
43
- allow: allowlisted,
44
- });
45
- for (const [label, count] of scan.allowedWarnings.entries()) {
46
- allowedWarnings.set(label, (allowedWarnings.get(label) ?? 0) + count);
47
- }
48
- warningLines.push(...scan.unexpectedWarnings);
31
+ const unexpectedWarnings = [];
32
+ for (const file of args.files) {
33
+ const result = scanBuildWarningText(readFileSync(file, 'utf8'), {
34
+ allow: args.allow,
35
+ useDefaultPolicy: args.useDefaultPolicy,
36
+ });
37
+ mergeAllowedBuildWarnings(allowedWarnings, result.allowedWarnings);
38
+ unexpectedWarnings.push(...result.unexpectedWarnings);
49
39
  }
50
-
51
- if (warningLines.length > 0) {
52
- console.error('Unexpected build warnings detected:');
53
- for (const line of warningLines) {
54
- console.error(`- ${line}`);
55
- }
56
- process.exit(1);
40
+ const allowedLines = formatAllowedBuildWarnings(allowedWarnings);
41
+ if (allowedLines.length > 0) {
42
+ console.log(allowedLines.join('\n'));
57
43
  }
58
-
59
- for (const line of formatAllowedBuildWarnings(allowedWarnings)) {
60
- console.log(line);
44
+ if (unexpectedWarnings.length > 0) {
45
+ console.error('Unexpected build warnings detected:');
46
+ for (const warning of unexpectedWarnings) {
47
+ console.error(`- ${warning}`);
48
+ }
49
+ process.exit(1);
61
50
  }
62
51
  console.log('No unexpected build warnings detected.');
@@ -314,7 +314,7 @@ function parseArgs(argv) {
314
314
  return args;
315
315
  }
316
316
  function printHelp() {
317
- console.log(`Usage: node scripts/cleanup-markdown.mjs [--check|--write] [paths...]
317
+ console.log(`Usage: tsx scripts/cleanup-markdown.ts [--check|--write] [paths...]
318
318
 
319
319
  Normalizes Markdown/MDX files for public docs readability.
320
320
 
@@ -3,46 +3,42 @@ import { spawnSync } from 'node:child_process';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { dirname, join, resolve } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
-
7
6
  const scriptsRoot = dirname(fileURLToPath(import.meta.url));
8
7
  const cliRoot = resolve(scriptsRoot, '..');
9
8
  const sharedFixtureRoot = resolve(cliRoot, '.fixtures', 'treeseed-fixtures', 'sites', 'working-site');
10
-
11
9
  export function makeWorkspaceRoot() {
12
- const root = mkdtempSync(join(tmpdir(), 'treeseed-help-workspace-'));
13
- writeFileSync(resolve(root, 'package.json'), JSON.stringify({
14
- name: 'help-test',
15
- private: true,
16
- workspaces: ['packages/*'],
17
- }, null, 2));
18
- writeFileSync(resolve(root, 'treeseed.site.yaml'), `name: Help Test
10
+ const root = mkdtempSync(join(tmpdir(), 'treeseed-help-workspace-'));
11
+ writeFileSync(resolve(root, 'package.json'), JSON.stringify({
12
+ name: 'help-test',
13
+ private: true,
14
+ workspaces: ['packages/*'],
15
+ }, null, 2));
16
+ writeFileSync(resolve(root, 'treeseed.site.yaml'), `name: Help Test
19
17
  slug: help-test
20
18
  siteUrl: https://example.com
21
19
  contactEmail: hello@example.com
22
20
  cloudflare:
23
21
  accountId: account-123
24
22
  `, 'utf8');
25
- return root;
23
+ return root;
26
24
  }
27
-
28
25
  export function makeTenantWorkspace(branch = 'staging') {
29
- const root = makeWorkspaceRoot();
30
- cpSync(sharedFixtureRoot, root, { recursive: true });
31
- mkdirSync(resolve(root, 'packages', 'placeholder'), { recursive: true });
32
- writeFileSync(resolve(root, 'packages', 'placeholder', 'package.json'), JSON.stringify({
33
- name: '@test/placeholder',
34
- version: '0.0.1',
35
- }, null, 2));
36
- spawnSync('git', ['init', '-b', branch], { cwd: root, stdio: 'ignore' });
37
- spawnSync('git', ['config', 'user.name', 'Treeseed Test'], { cwd: root, stdio: 'ignore' });
38
- spawnSync('git', ['config', 'user.email', 'treeseed@example.com'], { cwd: root, stdio: 'ignore' });
39
- spawnSync('git', ['add', '-A'], { cwd: root, stdio: 'ignore' });
40
- spawnSync('git', ['commit', '-m', 'init'], { cwd: root, stdio: 'ignore' });
41
- return root;
26
+ const root = makeWorkspaceRoot();
27
+ cpSync(sharedFixtureRoot, root, { recursive: true });
28
+ mkdirSync(resolve(root, 'packages', 'placeholder'), { recursive: true });
29
+ writeFileSync(resolve(root, 'packages', 'placeholder', 'package.json'), JSON.stringify({
30
+ name: '@test/placeholder',
31
+ version: '0.0.1',
32
+ }, null, 2));
33
+ spawnSync('git', ['init', '-b', branch], { cwd: root, stdio: 'ignore' });
34
+ spawnSync('git', ['config', 'user.name', 'Treeseed Test'], { cwd: root, stdio: 'ignore' });
35
+ spawnSync('git', ['config', 'user.email', 'treeseed@example.com'], { cwd: root, stdio: 'ignore' });
36
+ spawnSync('git', ['add', '-A'], { cwd: root, stdio: 'ignore' });
37
+ spawnSync('git', ['commit', '-m', 'init'], { cwd: root, stdio: 'ignore' });
38
+ return root;
42
39
  }
43
-
44
40
  export function makeTenantRoot() {
45
- const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-test-'));
46
- cpSync(sharedFixtureRoot, root, { recursive: true });
47
- return root;
41
+ const root = mkdtempSync(join(tmpdir(), 'treeseed-cli-test-'));
42
+ cpSync(sharedFixtureRoot, root, { recursive: true });
43
+ return root;
48
44
  }
@@ -0,0 +1,20 @@
1
+ import { collectTreeseedDeploymentReadiness, formatTreeseedReadinessReport } from '../operations/services/deployment-readiness.js';
2
+ function arg(name) {
3
+ const index = process.argv.indexOf(name);
4
+ return index >= 0 ? process.argv[index + 1] : null;
5
+ }
6
+ const environment = (arg('--environment') ?? 'staging');
7
+ const strict = process.argv.includes('--strict');
8
+ const report = collectTreeseedDeploymentReadiness({
9
+ tenantRoot: process.cwd(),
10
+ environment,
11
+ });
12
+ if (process.argv.includes('--json')) {
13
+ console.log(JSON.stringify(report, null, 2));
14
+ }
15
+ else {
16
+ console.log(formatTreeseedReadinessReport(report));
17
+ }
18
+ if (strict && !report.ok) {
19
+ process.exitCode = 1;
20
+ }
@@ -0,0 +1,186 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname, relative, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { parse, stringify } from 'yaml';
5
+ const check = process.argv.includes('--check');
6
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..');
7
+ const workspaceRoot = resolve(packageRoot, '../..');
8
+ const workspaceOpenApiPath = resolve(workspaceRoot, 'docs/api/openapi.yaml');
9
+ const packageOpenApiPath = resolve(packageRoot, 'docs/api/openapi.yaml');
10
+ const openApiPath = existsSync(workspaceOpenApiPath) ? workspaceOpenApiPath : packageOpenApiPath;
11
+ const workspaceOpenApiJsonPath = resolve(workspaceRoot, 'docs/api/openapi.json');
12
+ const packageOpenApiJsonPath = resolve(packageRoot, 'docs/api/openapi.json');
13
+ const outPath = resolve(packageRoot, 'src/treedx/generated/openapi-types.ts');
14
+ const openApi = parse(readFileSync(openApiPath, 'utf8'));
15
+ function refName(ref) {
16
+ return ref.split('/').pop() ?? ref;
17
+ }
18
+ function schemaRefType(ref) {
19
+ return `components['schemas']['${refName(ref)}']`;
20
+ }
21
+ function literal(value) {
22
+ return JSON.stringify(value);
23
+ }
24
+ function key(name) {
25
+ return /^[A-Za-z_$][\w$]*$/u.test(name) ? name : JSON.stringify(name);
26
+ }
27
+ function typeForSchema(schema) {
28
+ if (!schema || typeof schema !== 'object')
29
+ return 'unknown';
30
+ const s = schema;
31
+ if (typeof s.$ref === 'string')
32
+ return schemaRefType(s.$ref);
33
+ if ('const' in s)
34
+ return literal(s.const);
35
+ if (Array.isArray(s.enum))
36
+ return s.enum.map(literal).join(' | ') || 'never';
37
+ if (Array.isArray(s.oneOf))
38
+ return s.oneOf.map(typeForSchema).join(' | ') || 'unknown';
39
+ if (Array.isArray(s.anyOf))
40
+ return s.anyOf.map(typeForSchema).join(' | ') || 'unknown';
41
+ if (Array.isArray(s.allOf))
42
+ return s.allOf.map(typeForSchema).join(' & ') || 'unknown';
43
+ if (s.nullable === true)
44
+ return `${typeForSchema({ ...s, nullable: undefined })} | null`;
45
+ if (s.type === 'string')
46
+ return 'string';
47
+ if (s.type === 'integer' || s.type === 'number')
48
+ return 'number';
49
+ if (s.type === 'boolean')
50
+ return 'boolean';
51
+ if (s.type === 'null')
52
+ return 'null';
53
+ if (s.type === 'array')
54
+ return `${typeForSchema(s.items)}[]`;
55
+ if (s.type === 'object' || s.properties || s.additionalProperties !== undefined) {
56
+ const properties = (s.properties ?? {});
57
+ const required = new Set(Array.isArray(s.required) ? s.required.map(String) : []);
58
+ const parts = Object.entries(properties).map(([name, prop]) => {
59
+ const optional = required.has(name) ? '' : '?';
60
+ return `${key(name)}${optional}: ${typeForSchema(prop)};`;
61
+ });
62
+ if (s.additionalProperties === true) {
63
+ parts.push('[key: string]: unknown;');
64
+ }
65
+ else if (s.additionalProperties && typeof s.additionalProperties === 'object') {
66
+ parts.push(`[key: string]: ${typeForSchema(s.additionalProperties)};`);
67
+ }
68
+ return parts.length > 0 ? `{ ${parts.join(' ')} }` : 'Record<string, never>';
69
+ }
70
+ return 'unknown';
71
+ }
72
+ function parametersFor(operation, location) {
73
+ const params = Array.isArray(operation.parameters) ? operation.parameters : [];
74
+ const entries = params
75
+ .filter((param) => typeof param === 'object' && param !== null && param.in === location)
76
+ .map((param) => {
77
+ const name = String(param.name);
78
+ const optional = param.required === true ? '' : '?';
79
+ return `${key(name)}${optional}: ${typeForSchema(param.schema)};`;
80
+ });
81
+ return entries.length > 0 ? `{ ${entries.join(' ')} }` : 'never';
82
+ }
83
+ function requestBodyFor(operation) {
84
+ const body = operation.requestBody;
85
+ const content = body?.content ?? {};
86
+ const json = content['application/json']?.schema;
87
+ if (json)
88
+ return typeForSchema(json);
89
+ const octets = content['application/octet-stream']?.schema;
90
+ if (octets)
91
+ return 'ArrayBuffer | Uint8Array | Blob';
92
+ return 'never';
93
+ }
94
+ function responseFor(response) {
95
+ if (!response || typeof response !== 'object')
96
+ return 'unknown';
97
+ if (typeof response.$ref === 'string') {
98
+ const name = refName(response.$ref);
99
+ if (name === 'Error')
100
+ return "components['schemas']['TreeDxErrorEnvelope']";
101
+ if (name === 'Ok')
102
+ return "components['schemas']['TreeDxOkEnvelope']";
103
+ }
104
+ const r = response;
105
+ const content = r.content ?? {};
106
+ const json = content['application/json']?.schema;
107
+ if (json)
108
+ return typeForSchema(json);
109
+ const octets = content['application/octet-stream']?.schema;
110
+ if (octets)
111
+ return 'ArrayBuffer';
112
+ return 'unknown';
113
+ }
114
+ function operationType(operation) {
115
+ const responses = operation.responses ?? {};
116
+ const responseEntries = Object.entries(responses).map(([status, response]) => `${JSON.stringify(status)}: ${responseFor(response)};`);
117
+ return [
118
+ '{',
119
+ `parameters: { path: ${parametersFor(operation, 'path')}; query: ${parametersFor(operation, 'query')}; header: ${parametersFor(operation, 'header')}; };`,
120
+ `requestBody: ${requestBodyFor(operation)};`,
121
+ `responses: { ${responseEntries.join(' ')} };`,
122
+ '}',
123
+ ].join(' ');
124
+ }
125
+ const schemas = openApi.components?.schemas ?? {};
126
+ const schemaLines = Object.entries(schemas)
127
+ .sort(([a], [b]) => a.localeCompare(b))
128
+ .map(([name, schema]) => `${key(name)}: ${typeForSchema(schema)};`);
129
+ const operationEntries = [];
130
+ const pathLines = [];
131
+ for (const [path, methods] of Object.entries(openApi.paths ?? {}).sort(([a], [b]) => a.localeCompare(b))) {
132
+ const methodLines = [];
133
+ for (const [method, operation] of Object.entries(methods).sort(([a], [b]) => a.localeCompare(b))) {
134
+ if (!operation?.operationId)
135
+ continue;
136
+ operationEntries.push([operation.operationId, operation]);
137
+ methodLines.push(`${method}: operations['${operation.operationId}'];`);
138
+ }
139
+ pathLines.push(`${JSON.stringify(path)}: { ${methodLines.join(' ')} };`);
140
+ }
141
+ const operationLines = operationEntries
142
+ .sort(([a], [b]) => a.localeCompare(b))
143
+ .map(([id, operation]) => `${key(id)}: ${operationType(operation)};`);
144
+ const generated = `// Generated from docs/api/openapi.yaml. Do not edit by hand.
145
+
146
+ export interface paths {
147
+ ${pathLines.map((line) => `\t${line}`).join('\n')}
148
+ }
149
+
150
+ export interface components {
151
+ \tschemas: {
152
+ ${schemaLines.map((line) => `\t\t${line}`).join('\n')}
153
+ \t};
154
+ }
155
+
156
+ export interface operations {
157
+ ${operationLines.map((line) => `\t${line}`).join('\n')}
158
+ }
159
+ `;
160
+ const current = (() => {
161
+ try {
162
+ return readFileSync(outPath, 'utf8');
163
+ }
164
+ catch {
165
+ return null;
166
+ }
167
+ })();
168
+ if (check && current !== generated) {
169
+ console.error(`${relative(process.cwd(), outPath)} is not up to date. Run npm run treedx:generate-types.`);
170
+ process.exit(1);
171
+ }
172
+ if (!check) {
173
+ mkdirSync(dirname(outPath), { recursive: true });
174
+ writeFileSync(outPath, generated, 'utf8');
175
+ for (const target of [workspaceOpenApiJsonPath, packageOpenApiJsonPath]) {
176
+ mkdirSync(dirname(target), { recursive: true });
177
+ writeFileSync(target, `${JSON.stringify(openApi, null, 2)}\n`, 'utf8');
178
+ }
179
+ if (openApiPath === workspaceOpenApiPath) {
180
+ mkdirSync(dirname(packageOpenApiPath), { recursive: true });
181
+ writeFileSync(packageOpenApiPath, stringify(openApi), 'utf8');
182
+ }
183
+ console.log(`Wrote ${relative(process.cwd(), outPath)}`);
184
+ console.log(`Wrote ${relative(process.cwd(), workspaceOpenApiJsonPath)}`);
185
+ console.log(`Wrote ${relative(process.cwd(), packageOpenApiJsonPath)}`);
186
+ }