@treeseed/sdk 0.11.0 → 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 (473) hide show
  1. package/README.md +9 -4
  2. package/dist/agent-capacity.d.ts +916 -0
  3. package/dist/agent-capacity.js +1600 -0
  4. package/dist/agent-tools.d.ts +37 -0
  5. package/dist/agent-tools.js +301 -0
  6. package/dist/api/app.d.ts +1 -1
  7. package/dist/api/auth/d1-database.d.ts +2 -2
  8. package/dist/api/auth/d1-provider.d.ts +4 -4
  9. package/dist/api/auth/d1-store.d.ts +2 -2
  10. package/dist/api/auth/memory-provider.d.ts +1 -1
  11. package/dist/api/auth/tokens.d.ts +1 -1
  12. package/dist/api/config.d.ts +3 -1
  13. package/dist/api/config.js +34 -10
  14. package/dist/api/http.d.ts +2 -2
  15. package/dist/api/index.d.ts +10 -10
  16. package/dist/api/index.js +4 -2
  17. package/dist/api/operations-routes.d.ts +3 -3
  18. package/dist/api/operations.d.ts +1 -1
  19. package/dist/api/providers.d.ts +1 -1
  20. package/dist/api/providers.js +21 -4
  21. package/dist/api/railway.d.ts +3 -2
  22. package/dist/api/sdk-dispatch.d.ts +4 -4
  23. package/dist/api/sdk-routes.d.ts +2 -2
  24. package/dist/api/templates.d.ts +2 -2
  25. package/dist/api/types.d.ts +3 -2
  26. package/dist/capacity-provider.d.ts +117 -60
  27. package/dist/capacity-provider.js +215 -43
  28. package/dist/capacity.d.ts +2 -2
  29. package/dist/cli-tools.d.ts +1 -1
  30. package/dist/content-operations.d.ts +97 -0
  31. package/dist/content-operations.js +250 -0
  32. package/dist/content-store.d.ts +4 -4
  33. package/dist/control-plane-client.d.ts +13 -18
  34. package/dist/control-plane-client.js +8 -86
  35. package/dist/control-plane.d.ts +2 -2
  36. package/dist/copilot.d.ts +3 -0
  37. package/dist/copilot.js +16 -1
  38. package/dist/d1-http.d.ts +1 -1
  39. package/dist/d1-store.d.ts +32 -57
  40. package/dist/d1-store.js +115 -318
  41. package/dist/db/d1.d.ts +1 -232
  42. package/dist/db/index.d.ts +3 -3
  43. package/dist/db/market-schema.d.ts +49037 -11843
  44. package/dist/db/market-schema.js +1788 -50
  45. package/dist/db/node-sqlite.d.ts +1 -232
  46. package/dist/db/schema.d.ts +0 -462
  47. package/dist/db/schema.js +2 -22
  48. package/dist/dispatch.d.ts +1 -1
  49. package/dist/dispatch.js +0 -11
  50. package/dist/fixture-support.js +52 -4
  51. package/dist/governance.d.ts +133 -0
  52. package/dist/governance.js +285 -0
  53. package/dist/graph/build.d.ts +2 -2
  54. package/dist/graph/context-query-contracts.d.ts +1 -1
  55. package/dist/graph/dsl.d.ts +1 -1
  56. package/dist/graph/query.d.ts +4 -4
  57. package/dist/graph/ranking.d.ts +1 -1
  58. package/dist/graph/schema.d.ts +1 -1
  59. package/dist/graph.d.ts +11 -11
  60. package/dist/guarantees/index.d.ts +425 -0
  61. package/dist/guarantees/index.js +1146 -0
  62. package/dist/hosting/apps.d.ts +1 -1
  63. package/dist/hosting/builtins.d.ts +1 -1
  64. package/dist/hosting/builtins.js +9 -198
  65. package/dist/hosting/contracts.d.ts +3 -2
  66. package/dist/hosting/graph.d.ts +24 -21
  67. package/dist/hosting/graph.js +280 -294
  68. package/dist/hosting/index.d.ts +4 -4
  69. package/dist/index.d.ts +88 -74
  70. package/dist/index.js +81 -10
  71. package/dist/local-dev/managed-dev.d.ts +85 -0
  72. package/dist/local-dev/managed-dev.js +368 -0
  73. package/dist/managed-dependencies.d.ts +9 -0
  74. package/dist/managed-dependencies.js +10 -8
  75. package/dist/market-client.d.ts +265 -7
  76. package/dist/market-client.js +381 -9
  77. package/dist/model-registry.d.ts +1 -1
  78. package/dist/model-registry.js +19 -19
  79. package/dist/operations/agent-tools.d.ts +2 -11
  80. package/dist/operations/agent-tools.js +2 -14
  81. package/dist/operations/providers/default.d.ts +1 -1
  82. package/dist/operations/providers/default.js +20 -37
  83. package/dist/operations/repository-operations.d.ts +26 -2
  84. package/dist/operations/repository-operations.js +159 -1
  85. package/dist/operations/runtime.d.ts +3 -3
  86. package/dist/operations/services/bootstrap-runner.d.ts +1 -1
  87. package/dist/operations/services/build-warning-policy.d.ts +34 -0
  88. package/dist/operations/services/build-warning-policy.js +81 -82
  89. package/dist/operations/services/commit-message-provider.js +4 -4
  90. package/dist/operations/services/config-runtime.d.ts +73 -19
  91. package/dist/operations/services/config-runtime.js +276 -100
  92. package/dist/operations/services/deploy.d.ts +41 -622
  93. package/dist/operations/services/deploy.js +181 -213
  94. package/dist/operations/services/deployment-readiness.d.ts +1 -1
  95. package/dist/operations/services/deployment-readiness.js +38 -7
  96. package/dist/operations/services/git-remote-policy.js +12 -4
  97. package/dist/operations/services/git-runner.d.ts +66 -0
  98. package/dist/operations/services/git-runner.js +479 -0
  99. package/dist/operations/services/git-workflow.d.ts +43 -5
  100. package/dist/operations/services/git-workflow.js +242 -20
  101. package/dist/operations/services/github-actions-verification.d.ts +3 -1
  102. package/dist/operations/services/github-actions-verification.js +11 -3
  103. package/dist/operations/services/github-api.js +21 -5
  104. package/dist/operations/services/github-automation.d.ts +3 -3
  105. package/dist/operations/services/github-automation.js +15 -18
  106. package/dist/operations/services/github-credentials.js +2 -1
  107. package/dist/operations/services/hosted-service-checks.d.ts +19 -1
  108. package/dist/operations/services/hosted-service-checks.js +162 -11
  109. package/dist/operations/services/hosting-audit.d.ts +2 -2
  110. package/dist/operations/services/hosting-audit.js +7 -7
  111. package/dist/operations/services/hub-launch.d.ts +1 -1
  112. package/dist/operations/services/hub-provider-launch.d.ts +5 -5
  113. package/dist/operations/services/hub-provider-launch.js +19 -14
  114. package/dist/operations/services/live-hosted-service-checks.d.ts +2 -1
  115. package/dist/operations/services/live-hosted-service-checks.js +193 -80
  116. package/dist/operations/services/local-dev.js +0 -1
  117. package/dist/operations/services/managed-host-security.d.ts +1 -1
  118. package/dist/operations/services/managed-repositories.d.ts +37 -0
  119. package/dist/operations/services/managed-repositories.js +177 -0
  120. package/dist/operations/services/operations-runner-smoke.d.ts +3 -2
  121. package/dist/operations/services/operations-runner-smoke.js +22 -4
  122. package/dist/operations/services/package-adapters.d.ts +77 -2
  123. package/dist/operations/services/package-adapters.js +627 -56
  124. package/dist/operations/services/package-reference-policy.d.ts +12 -88
  125. package/dist/operations/services/package-reference-policy.js +81 -213
  126. package/dist/operations/services/project-host-operations.d.ts +4 -4
  127. package/dist/operations/services/project-platform.d.ts +19 -193
  128. package/dist/operations/services/project-platform.js +31 -103
  129. package/dist/operations/services/project-web-monitor.d.ts +2 -2
  130. package/dist/operations/services/project-web-monitor.js +97 -2
  131. package/dist/operations/services/railway-api.d.ts +36 -7
  132. package/dist/operations/services/railway-api.js +331 -100
  133. package/dist/operations/services/railway-deploy.d.ts +7 -95
  134. package/dist/operations/services/railway-deploy.js +334 -742
  135. package/dist/operations/services/release-history.js +3 -4
  136. package/dist/operations/services/release-proof-ledger.d.ts +13 -0
  137. package/dist/operations/services/release-proof-ledger.js +81 -0
  138. package/dist/operations/services/release-proof-planner.d.ts +48 -0
  139. package/dist/operations/services/release-proof-planner.js +195 -0
  140. package/dist/operations/services/release-proof-runner.d.ts +16 -0
  141. package/dist/operations/services/release-proof-runner.js +169 -0
  142. package/dist/operations/services/release-proof.d.ts +81 -0
  143. package/dist/operations/services/release-proof.js +79 -0
  144. package/dist/operations/services/repository-save-orchestrator.d.ts +6 -7
  145. package/dist/operations/services/repository-save-orchestrator.js +353 -174
  146. package/dist/operations/services/runtime-paths.d.ts +1 -3
  147. package/dist/operations/services/runtime-paths.js +0 -4
  148. package/dist/operations/services/runtime-tools.d.ts +1 -192
  149. package/dist/operations/services/runtime-tools.js +4 -444
  150. package/dist/operations/services/save-deploy-preflight.js +9 -1
  151. package/dist/operations/services/template-host-bindings.d.ts +2 -2
  152. package/dist/operations/services/template-host-bindings.js +3 -2
  153. package/dist/operations/services/template-registry.d.ts +6 -6
  154. package/dist/operations/services/template-registry.js +33 -14
  155. package/dist/operations/services/template-secret-sync.d.ts +3 -3
  156. package/dist/operations/services/workflow-timing.d.ts +25 -0
  157. package/dist/operations/services/workflow-timing.js +79 -0
  158. package/dist/operations/services/workspace-dependency-mode.js +41 -4
  159. package/dist/operations/services/workspace-preflight.js +8 -8
  160. package/dist/operations/services/workspace-save-script.d.ts +4 -4
  161. package/dist/operations/services/workspace-save.d.ts +1 -0
  162. package/dist/operations/services/workspace-save.js +41 -18
  163. package/dist/operations/services/workspace-tools.js +40 -6
  164. package/dist/operations-registry.d.ts +1 -1
  165. package/dist/operations-registry.js +5 -6
  166. package/dist/operations-types.d.ts +1 -1
  167. package/dist/operations.d.ts +17 -11
  168. package/dist/operations.js +57 -3
  169. package/dist/platform/book-export.js +2 -0
  170. package/dist/platform/books-data.d.ts +1 -1
  171. package/dist/platform/config.d.ts +27 -0
  172. package/dist/platform/config.js +100 -0
  173. package/dist/platform/content-runtime-source.d.ts +54 -0
  174. package/dist/platform/content-runtime-source.js +169 -0
  175. package/dist/platform/contracts.d.ts +6 -1
  176. package/dist/platform/deploy-config.d.ts +1 -1
  177. package/dist/platform/deploy-config.js +7 -1
  178. package/dist/platform/deploy-runtime.d.ts +1 -1
  179. package/dist/platform/desired-state.d.ts +63 -0
  180. package/dist/platform/desired-state.js +1021 -0
  181. package/dist/platform/env.yaml +414 -19
  182. package/dist/platform/environment.d.ts +2 -2
  183. package/dist/platform/environment.js +54 -22
  184. package/dist/platform/local-content-materialization.d.ts +9 -0
  185. package/dist/platform/local-content-materialization.js +212 -0
  186. package/dist/platform/plugin.d.ts +5 -5
  187. package/dist/platform/plugins/runtime.d.ts +3 -3
  188. package/dist/platform/plugins/runtime.js +62 -1
  189. package/dist/platform/plugins.d.ts +6 -6
  190. package/dist/platform/published-content-pipeline.d.ts +3 -3
  191. package/dist/platform/published-content-pipeline.js +5 -1
  192. package/dist/platform/published-content.d.ts +4 -3
  193. package/dist/platform/site-config-schema.d.ts +1 -0
  194. package/dist/platform/site-config-schema.js +4 -1
  195. package/dist/platform/tenant/runtime-config.d.ts +152 -2
  196. package/dist/platform/tenant-config.d.ts +1 -1
  197. package/dist/platform/utils/site-config-schema.d.ts +154 -0
  198. package/dist/platform/utils/site-config-schema.js +400 -461
  199. package/dist/platform-operation-store.d.ts +1 -1
  200. package/dist/plugin-default.d.ts +1 -1
  201. package/dist/plugin-default.js +27 -12
  202. package/dist/project-import.d.ts +91 -0
  203. package/dist/project-import.js +257 -0
  204. package/dist/project-workflow.d.ts +1 -1
  205. package/dist/reconcile/bootstrap-systems.d.ts +2 -2
  206. package/dist/reconcile/bootstrap-systems.js +3 -3
  207. package/dist/reconcile/builtin-adapters.d.ts +7 -1
  208. package/dist/reconcile/builtin-adapters.js +2924 -346
  209. package/dist/reconcile/contracts.d.ts +15 -2
  210. package/dist/reconcile/desired-state.d.ts +2 -193
  211. package/dist/reconcile/desired-state.js +24 -33
  212. package/dist/reconcile/engine.d.ts +60 -397
  213. package/dist/reconcile/engine.js +182 -18
  214. package/dist/reconcile/index.d.ts +10 -10
  215. package/dist/reconcile/live-acceptance.d.ts +22 -1
  216. package/dist/reconcile/live-acceptance.js +456 -44
  217. package/dist/reconcile/providers/docker-private.d.ts +54 -0
  218. package/dist/reconcile/providers/docker-private.js +101 -0
  219. package/dist/reconcile/providers/github-private.d.ts +65 -0
  220. package/dist/reconcile/providers/github-private.js +119 -0
  221. package/dist/reconcile/providers/local-private.d.ts +28 -0
  222. package/dist/reconcile/providers/local-private.js +75 -0
  223. package/dist/reconcile/providers/railway-iac.d.ts +66 -0
  224. package/dist/reconcile/providers/railway-iac.js +275 -0
  225. package/dist/reconcile/providers/release-private.d.ts +92 -0
  226. package/dist/reconcile/providers/release-private.js +152 -0
  227. package/dist/reconcile/registry.d.ts +2 -2
  228. package/dist/reconcile/registry.js +16 -1
  229. package/dist/reconcile/state.d.ts +1 -1
  230. package/dist/reconcile/state.js +3 -40
  231. package/dist/reconcile/units.d.ts +1 -1
  232. package/dist/reconcile/units.js +7 -1
  233. package/dist/remote.d.ts +6 -6
  234. package/dist/scenes/artifacts.d.ts +16 -0
  235. package/dist/scenes/artifacts.js +61 -0
  236. package/dist/scenes/auth.d.ts +2 -0
  237. package/dist/scenes/auth.js +28 -0
  238. package/dist/scenes/base-url.d.ts +12 -0
  239. package/dist/scenes/base-url.js +123 -0
  240. package/dist/scenes/builtin-plugins.d.ts +2 -0
  241. package/dist/scenes/builtin-plugins.js +447 -0
  242. package/dist/scenes/checkpoints.d.ts +14 -0
  243. package/dist/scenes/checkpoints.js +33 -0
  244. package/dist/scenes/device-matrix.d.ts +2 -0
  245. package/dist/scenes/device-matrix.js +97 -0
  246. package/dist/scenes/devices.d.ts +11 -0
  247. package/dist/scenes/devices.js +22 -0
  248. package/dist/scenes/diagnostics.d.ts +5 -0
  249. package/dist/scenes/diagnostics.js +22 -0
  250. package/dist/scenes/diagram-providers.d.ts +2 -0
  251. package/dist/scenes/diagram-providers.js +181 -0
  252. package/dist/scenes/diagram-validation.d.ts +22 -0
  253. package/dist/scenes/diagram-validation.js +74 -0
  254. package/dist/scenes/environment.d.ts +2 -0
  255. package/dist/scenes/environment.js +65 -0
  256. package/dist/scenes/evidence-bundle.d.ts +5 -0
  257. package/dist/scenes/evidence-bundle.js +42 -0
  258. package/dist/scenes/evidence-report.d.ts +10 -0
  259. package/dist/scenes/evidence-report.js +73 -0
  260. package/dist/scenes/evidence.d.ts +16 -0
  261. package/dist/scenes/evidence.js +277 -0
  262. package/dist/scenes/index.d.ts +48 -0
  263. package/dist/scenes/index.js +312 -0
  264. package/dist/scenes/inspect.d.ts +9 -0
  265. package/dist/scenes/inspect.js +64 -0
  266. package/dist/scenes/loader.d.ts +3 -0
  267. package/dist/scenes/loader.js +38 -0
  268. package/dist/scenes/logs.d.ts +2 -0
  269. package/dist/scenes/logs.js +47 -0
  270. package/dist/scenes/operations.d.ts +3 -0
  271. package/dist/scenes/operations.js +128 -0
  272. package/dist/scenes/phase0.d.ts +9 -0
  273. package/dist/scenes/phase0.js +637 -0
  274. package/dist/scenes/planner.d.ts +12 -0
  275. package/dist/scenes/planner.js +166 -0
  276. package/dist/scenes/playwright-adapter.d.ts +2 -0
  277. package/dist/scenes/playwright-adapter.js +63 -0
  278. package/dist/scenes/plugins.d.ts +5 -0
  279. package/dist/scenes/plugins.js +115 -0
  280. package/dist/scenes/progress.d.ts +17 -0
  281. package/dist/scenes/progress.js +24 -0
  282. package/dist/scenes/publish-destinations.d.ts +12 -0
  283. package/dist/scenes/publish-destinations.js +99 -0
  284. package/dist/scenes/publish-plan-report.d.ts +10 -0
  285. package/dist/scenes/publish-plan-report.js +70 -0
  286. package/dist/scenes/publish-plan.d.ts +15 -0
  287. package/dist/scenes/publish-plan.js +248 -0
  288. package/dist/scenes/publish-redaction.d.ts +16 -0
  289. package/dist/scenes/publish-redaction.js +148 -0
  290. package/dist/scenes/publish-release-record.d.ts +13 -0
  291. package/dist/scenes/publish-release-record.js +34 -0
  292. package/dist/scenes/publish-report.d.ts +10 -0
  293. package/dist/scenes/publish-report.js +67 -0
  294. package/dist/scenes/publish.d.ts +16 -0
  295. package/dist/scenes/publish.js +298 -0
  296. package/dist/scenes/registry.d.ts +12 -0
  297. package/dist/scenes/registry.js +65 -0
  298. package/dist/scenes/remotion-adapter.d.ts +3 -0
  299. package/dist/scenes/remotion-adapter.js +94 -0
  300. package/dist/scenes/remotion-composition-registry.d.ts +2 -0
  301. package/dist/scenes/remotion-composition-registry.js +12 -0
  302. package/dist/scenes/remotion-compositions.d.ts +15 -0
  303. package/dist/scenes/remotion-compositions.js +464 -0
  304. package/dist/scenes/remotion-diagrams.d.ts +9 -0
  305. package/dist/scenes/remotion-diagrams.js +188 -0
  306. package/dist/scenes/remotion-input.d.ts +13 -0
  307. package/dist/scenes/remotion-input.js +291 -0
  308. package/dist/scenes/remotion-visuals.d.ts +29 -0
  309. package/dist/scenes/remotion-visuals.js +198 -0
  310. package/dist/scenes/render-media-assets.d.ts +9 -0
  311. package/dist/scenes/render-media-assets.js +117 -0
  312. package/dist/scenes/render-report.d.ts +10 -0
  313. package/dist/scenes/render-report.js +27 -0
  314. package/dist/scenes/render.d.ts +2 -0
  315. package/dist/scenes/render.js +218 -0
  316. package/dist/scenes/reporter.d.ts +3 -0
  317. package/dist/scenes/reporter.js +101 -0
  318. package/dist/scenes/resume.d.ts +2 -0
  319. package/dist/scenes/resume.js +79 -0
  320. package/dist/scenes/runner.d.ts +2 -0
  321. package/dist/scenes/runner.js +674 -0
  322. package/dist/scenes/schema.d.ts +6 -0
  323. package/dist/scenes/schema.js +994 -0
  324. package/dist/scenes/seed.d.ts +2 -0
  325. package/dist/scenes/seed.js +83 -0
  326. package/dist/scenes/segments.d.ts +15 -0
  327. package/dist/scenes/segments.js +79 -0
  328. package/dist/scenes/selectors.d.ts +3 -0
  329. package/dist/scenes/selectors.js +21 -0
  330. package/dist/scenes/timeline.d.ts +11 -0
  331. package/dist/scenes/timeline.js +26 -0
  332. package/dist/scenes/timeouts.d.ts +6 -0
  333. package/dist/scenes/timeouts.js +17 -0
  334. package/dist/scenes/training-captions.d.ts +14 -0
  335. package/dist/scenes/training-captions.js +98 -0
  336. package/dist/scenes/training-report.d.ts +10 -0
  337. package/dist/scenes/training-report.js +78 -0
  338. package/dist/scenes/training-transcript.d.ts +24 -0
  339. package/dist/scenes/training-transcript.js +204 -0
  340. package/dist/scenes/training.d.ts +10 -0
  341. package/dist/scenes/training.js +134 -0
  342. package/dist/scenes/types.d.ts +1872 -0
  343. package/dist/scenes/types.js +8 -0
  344. package/dist/scenes/visual-audit-contact-sheets.d.ts +6 -0
  345. package/dist/scenes/visual-audit-contact-sheets.js +119 -0
  346. package/dist/scenes/visual-audit-fixtures.d.ts +25 -0
  347. package/dist/scenes/visual-audit-fixtures.js +210 -0
  348. package/dist/scenes/visual-audit-report.d.ts +11 -0
  349. package/dist/scenes/visual-audit-report.js +85 -0
  350. package/dist/scenes/visual-audit-review.d.ts +23 -0
  351. package/dist/scenes/visual-audit-review.js +829 -0
  352. package/dist/scenes/visual-audit-routes.d.ts +13 -0
  353. package/dist/scenes/visual-audit-routes.js +308 -0
  354. package/dist/scenes/visual-audit.d.ts +3 -0
  355. package/dist/scenes/visual-audit.js +596 -0
  356. package/dist/scripts/build-dist.js +154 -40
  357. package/dist/scripts/check-build-warnings.js +42 -53
  358. package/dist/scripts/cleanup-markdown.js +1 -1
  359. package/dist/scripts/cli-test-fixtures.js +24 -28
  360. package/dist/scripts/migrate-journey-csv-to-guarantees.js +140 -0
  361. package/dist/scripts/package-tools.js +12 -1
  362. package/dist/scripts/prepare.js +3 -7
  363. package/dist/scripts/release-verify.js +2 -5
  364. package/dist/scripts/run-fixture-astro-command.js +1 -1
  365. package/dist/scripts/template-catalog.test.js +68 -82
  366. package/dist/scripts/tenant-dev.js +0 -10
  367. package/dist/scripts/test-cloudflare-local.js +1 -1
  368. package/dist/scripts/test-scaffold.js +0 -1
  369. package/dist/scripts/test-smoke.js +3 -3
  370. package/dist/scripts/treeseed-build-dist.js +4 -7
  371. package/dist/scripts/treeseed-release-verify.js +1 -1
  372. package/dist/scripts/verify-driver.js +30 -21
  373. package/dist/scripts/workflow-commands.test.js +18 -27
  374. package/dist/scripts/workspace-command-e2e.js +1 -1
  375. package/dist/scripts/workspace-lint.js +6 -0
  376. package/dist/scripts/workspace-release-test.js +90 -1
  377. package/dist/scripts/workspace-test.js +6 -0
  378. package/dist/sdk-dispatch.d.ts +1 -1
  379. package/dist/sdk-dispatch.js +0 -16
  380. package/dist/sdk-fields.d.ts +1 -1
  381. package/dist/sdk-filters.d.ts +1 -1
  382. package/dist/sdk-types.d.ts +1184 -113
  383. package/dist/sdk-types.js +393 -0
  384. package/dist/sdk.d.ts +74 -79
  385. package/dist/sdk.js +27 -36
  386. package/dist/secrets-capability.d.ts +421 -0
  387. package/dist/secrets-capability.js +530 -0
  388. package/dist/seeds/normalize.js +1 -0
  389. package/dist/seeds/planner.js +38 -0
  390. package/dist/seeds/schema.js +293 -4
  391. package/dist/seeds/types.d.ts +60 -0
  392. package/dist/seeds/types.js +9 -1
  393. package/dist/service-credentials.d.ts +54 -0
  394. package/dist/service-credentials.js +112 -0
  395. package/dist/stores/cursor-store.d.ts +2 -2
  396. package/dist/stores/envelopes.d.ts +1 -1
  397. package/dist/stores/helpers.d.ts +1 -1
  398. package/dist/stores/lease-store.d.ts +2 -2
  399. package/dist/stores/message-store.d.ts +2 -2
  400. package/dist/stores/operational-store.d.ts +3 -26
  401. package/dist/stores/operational-store.js +0 -225
  402. package/dist/stores/project-workflow-store.d.ts +2 -2
  403. package/dist/stores/run-store.d.ts +2 -3
  404. package/dist/stores/run-store.js +0 -98
  405. package/dist/stores/subscription-store.d.ts +2 -3
  406. package/dist/stores/subscription-store.js +0 -100
  407. package/dist/template-catalog.d.ts +1 -1
  408. package/dist/template-launch-requirements.d.ts +2 -2
  409. package/dist/template-launch-ui.d.ts +2 -2
  410. package/dist/treedx/adapters.d.ts +6 -6
  411. package/dist/treedx/client.d.ts +1 -1
  412. package/dist/treedx/errors.d.ts +1 -1
  413. package/dist/treedx/federated-client.d.ts +3 -3
  414. package/dist/treedx/graph-adapter.d.ts +2 -2
  415. package/dist/treedx/index.d.ts +14 -14
  416. package/dist/treedx/market-integration.d.ts +1 -1
  417. package/dist/treedx/ports.d.ts +30 -30
  418. package/dist/treedx/query-adapter.d.ts +3 -3
  419. package/dist/treedx/registry-client.d.ts +2 -2
  420. package/dist/treedx/repository-adapter.d.ts +4 -4
  421. package/dist/treedx/repository-adapter.js +14 -3
  422. package/dist/treedx/sdk-integration.d.ts +3 -3
  423. package/dist/treedx/types.d.ts +2 -2
  424. package/dist/treedx/workspace-adapter.d.ts +2 -2
  425. package/dist/treedx-backends.d.ts +13 -11
  426. package/dist/treedx-backends.js +52 -50
  427. package/dist/treedx-client.d.ts +3 -0
  428. package/dist/treedx-client.js +10 -1
  429. package/dist/treeseed/services/compose.yml +2 -3
  430. package/dist/treeseed/template-catalog/catalog.fixture.json +4 -4
  431. package/dist/types/agents.d.ts +256 -0
  432. package/dist/types/agents.js +42 -1
  433. package/dist/verification.d.ts +1 -0
  434. package/dist/verification.js +143 -14
  435. package/dist/workflow/operations.d.ts +510 -559
  436. package/dist/workflow/operations.js +1891 -1342
  437. package/dist/workflow/policy.js +19 -7
  438. package/dist/workflow/runs.d.ts +9 -3
  439. package/dist/workflow/runs.js +66 -26
  440. package/dist/workflow/session.d.ts +4 -1
  441. package/dist/workflow/session.js +50 -10
  442. package/dist/workflow/worktrees.d.ts +6 -2
  443. package/dist/workflow/worktrees.js +98 -15
  444. package/dist/workflow-state.d.ts +5 -5
  445. package/dist/workflow-state.js +27 -17
  446. package/dist/workflow-support.d.ts +26 -25
  447. package/dist/workflow-support.js +27 -31
  448. package/dist/workflow.d.ts +46 -16
  449. package/dist/workflow.js +19 -7
  450. package/drizzle/d1/0000_treeseed_d1.sql +0 -18
  451. package/drizzle/market/0000_market_control_plane.sql +1793 -1499
  452. package/drizzle/market/0005_agent_capacity_coordination.sql +145 -0
  453. package/drizzle/market/0006_provider_assignment_lifecycle.sql +9 -0
  454. package/drizzle/market/0007_agent_architecture_gap_closure.sql +157 -0
  455. package/drizzle/market/0008_agent_capacity_operational_closure.sql +27 -0
  456. package/drizzle/market/0009_agent_capacity_runtime_hardening.sql +29 -0
  457. package/drizzle/market/0010_secrets_capability_persistence.sql +130 -0
  458. package/drizzle/market/0011_github_app_adapter.sql +47 -0
  459. package/drizzle/market/0012_workday_test_runs.sql +44 -0
  460. package/drizzle/market/0013_runtime_task_lifecycle.sql +39 -0
  461. package/drizzle/market/0014_governance_pipeline.sql +189 -0
  462. package/package.json +75 -18
  463. package/scripts/{verify-driver.mjs → verify-driver.ts} +19 -4
  464. package/templates/github/deploy-web.workflow.yml +12 -8
  465. package/dist/operations/services/mailpit-runtime.d.ts +0 -20
  466. package/dist/operations/services/mailpit-runtime.js +0 -67
  467. package/dist/operations/services/release-candidate.d.ts +0 -60
  468. package/dist/operations/services/release-candidate.js +0 -953
  469. package/dist/scripts/ensure-mailpit.js +0 -48
  470. package/dist/scripts/logs-mailpit.js +0 -2
  471. package/dist/scripts/run-ts.js +0 -45
  472. package/dist/scripts/stop-mailpit.js +0 -5
  473. package/dist/scripts/treeseed-run-ts.js +0 -45
@@ -0,0 +1,464 @@
1
+ import React from "react";
2
+ import {
3
+ AbsoluteFill,
4
+ Composition,
5
+ Img,
6
+ Sequence,
7
+ Video,
8
+ interpolate,
9
+ registerRoot,
10
+ staticFile,
11
+ useCurrentFrame,
12
+ useVideoConfig
13
+ } from "remotion";
14
+ import { renderTreeseedSceneDiagram } from "./remotion-diagrams.js";
15
+ import { interpolateSceneMotion, renderTreeseedVisualObject, resolveVisualRegion, treeseedSceneVideoTheme, visualStyle } from "./remotion-visuals.js";
16
+ function titleCard(input, subtitle) {
17
+ return React.createElement(
18
+ AbsoluteFill,
19
+ {
20
+ style: {
21
+ backgroundColor: "#0f172a",
22
+ color: "white",
23
+ fontFamily: "Inter, Arial, sans-serif",
24
+ justifyContent: "center",
25
+ padding: 96
26
+ }
27
+ },
28
+ React.createElement("div", { style: { fontSize: 56, fontWeight: 700, lineHeight: 1.08 } }, input.scene.title),
29
+ React.createElement("div", { style: { marginTop: 24, fontSize: 26, color: "#bfdbfe", maxWidth: 1200 } }, subtitle),
30
+ React.createElement("div", { style: { marginTop: 48, fontSize: 18, color: "#94a3b8" } }, `Scene ${input.scene.id} \xB7 Run ${input.run.runId ?? "unknown"}`)
31
+ );
32
+ }
33
+ function treeseedSceneRenderLayout(input) {
34
+ const fps = input.render.fps;
35
+ const introFrames = input.render.introFrames ?? Math.min(90, Math.floor(fps * 3));
36
+ const interstitialFrames = input.render.interstitialFrames ?? input.renderDiagrams.filter((entry) => entry.placement !== "overlay").reduce((sum, diagram) => sum + Math.max(1, Math.ceil(diagram.durationSeconds * fps)), 0);
37
+ const evidenceStartFrame = input.render.evidenceStartFrame ?? introFrames + interstitialFrames;
38
+ const evidenceDurationInFrames = input.render.evidenceDurationInFrames ?? Math.max(1, input.render.durationInFrames - evidenceStartFrame);
39
+ return { introFrames, interstitialFrames, evidenceStartFrame, evidenceDurationInFrames };
40
+ }
41
+ function resolveEvidenceViewport(input) {
42
+ const source = input.run.capture?.videoSize ?? input.run.capture?.viewport ?? input.scene.render.remotion?.capture?.video ?? input.scene.render.remotion?.capture?.viewport ?? { width: input.render.width, height: input.render.height };
43
+ const availableWidth = Math.max(1, input.render.width);
44
+ const availableHeight = Math.max(1, input.render.height);
45
+ const scale = Math.min(availableWidth / source.width, availableHeight / source.height);
46
+ const width = Math.round(source.width * scale);
47
+ const height = Math.round(source.height * scale);
48
+ return {
49
+ width,
50
+ height,
51
+ scale,
52
+ left: Math.round((input.render.width - width) / 2),
53
+ top: Math.round((input.render.height - height) / 2)
54
+ };
55
+ }
56
+ function eventStepOffset(input, stepId, type) {
57
+ return input.timeline.find((event) => event.type === type && event.stepId === stepId)?.offsetMs ?? null;
58
+ }
59
+ function stepAtEvidenceMs(input, evidenceMs) {
60
+ let fallback = input.run.steps[0] ?? null;
61
+ for (const step of input.run.steps) {
62
+ const start = eventStepOffset(input, step.id, "step.start");
63
+ const end = eventStepOffset(input, step.id, "step.end");
64
+ if (start !== null && start <= evidenceMs) fallback = step;
65
+ if (start !== null && start <= evidenceMs && (end === null || evidenceMs <= end)) return step;
66
+ }
67
+ return fallback;
68
+ }
69
+ function stepStartMs(input, stepId) {
70
+ const timelineStart = eventStepOffset(input, stepId, "step.start");
71
+ if (timelineStart !== null) return timelineStart;
72
+ const index = input.run.steps.findIndex((step) => step.id === stepId);
73
+ if (index < 0) return null;
74
+ return Math.floor(index / Math.max(1, input.run.steps.length) * Math.max(1, input.run.durationMs));
75
+ }
76
+ function evidenceTimelineOffsetMs(input) {
77
+ if (!input.media.videoRefs?.length && input.media.videos.length === 0) return 0;
78
+ const firstStep = input.run.steps[0];
79
+ if (!firstStep) return 0;
80
+ return eventStepOffset(input, firstStep.id, "step.start") ?? 0;
81
+ }
82
+ function evidenceSourceMs(input, frame) {
83
+ const evidenceMs = Math.floor(frame / Math.max(1, input.render.fps) * 1e3);
84
+ return evidenceMs + evidenceTimelineOffsetMs(input);
85
+ }
86
+ function activeOverlayText(input, evidenceMs) {
87
+ const overlays = input.overlays.filter((overlay) => overlay.text);
88
+ return overlays.find((overlay) => {
89
+ const start = stepStartMs(input, overlay.at);
90
+ return start !== null && evidenceMs >= start && evidenceMs <= start + 6e3;
91
+ }) ?? null;
92
+ }
93
+ function activeOverlayDiagram(input, evidenceMs) {
94
+ const diagrams = input.renderDiagrams.filter((diagram) => diagram.placement === "overlay");
95
+ return diagrams.find((diagram) => {
96
+ const start = diagram.startOffsetMs ?? stepStartMs(input, diagram.at);
97
+ return start !== null && evidenceMs >= start && evidenceMs <= start + diagram.durationSeconds * 1e3;
98
+ }) ?? null;
99
+ }
100
+ function activeInterstitialDiagram(input, frame) {
101
+ let cursor = 0;
102
+ for (const diagram of input.renderDiagrams.filter((entry) => entry.placement !== "overlay")) {
103
+ const duration = Math.max(1, Math.ceil(diagram.durationSeconds * input.render.fps));
104
+ if (frame >= cursor && frame < cursor + duration) {
105
+ return { diagram, frame: frame - cursor };
106
+ }
107
+ cursor += duration;
108
+ }
109
+ return null;
110
+ }
111
+ function EvidenceFrame({ input, durationFrames }) {
112
+ const frame = useCurrentFrame();
113
+ const viewport = resolveEvidenceViewport(input);
114
+ const frameStyle = {
115
+ position: "absolute",
116
+ left: viewport.left,
117
+ top: viewport.top,
118
+ width: viewport.width,
119
+ height: viewport.height,
120
+ overflow: "hidden",
121
+ backgroundColor: "#111827",
122
+ boxShadow: viewport.left === 0 && viewport.top === 0 ? "none" : "0 24px 70px rgba(0,0,0,0.38)"
123
+ };
124
+ const videoFrames = input.media.videoFrames ?? [];
125
+ if (videoFrames.length > 0) {
126
+ const frameEntry = videoFrames[Math.min(videoFrames.length - 1, Math.max(0, frame))] ?? videoFrames[0];
127
+ return React.createElement("div", { style: frameStyle }, React.createElement(Img, {
128
+ src: staticFile(frameEntry.staticPath),
129
+ style: {
130
+ position: "absolute",
131
+ inset: 0,
132
+ display: "block",
133
+ width: "100%",
134
+ height: "100%",
135
+ objectFit: "fill",
136
+ backgroundColor: "#111827"
137
+ }
138
+ }));
139
+ }
140
+ const videoRef = input.media.videoRefs?.[0];
141
+ const videoSrc = videoRef?.staticPath ? staticFile(videoRef.staticPath) : videoRef?.src ?? input.media.videos[0];
142
+ if (videoSrc) {
143
+ return React.createElement("div", { style: frameStyle }, React.createElement(Video, {
144
+ src: videoSrc,
145
+ muted: true,
146
+ style: {
147
+ position: "absolute",
148
+ inset: 0,
149
+ display: "block",
150
+ width: "100%",
151
+ height: "100%",
152
+ minWidth: "100%",
153
+ minHeight: "100%",
154
+ maxWidth: "none",
155
+ maxHeight: "none",
156
+ objectFit: input.run.capture?.evidenceFit === "cover" ? "cover" : "fill",
157
+ backgroundColor: "#111827"
158
+ }
159
+ }));
160
+ }
161
+ const screenshots = [...input.media.screenshots].sort((a, b) => (a.offsetMs ?? Number.MAX_SAFE_INTEGER) - (b.offsetMs ?? Number.MAX_SAFE_INTEGER));
162
+ if (screenshots.length === 0) {
163
+ return React.createElement("div", { style: { color: "white", fontSize: 36 } }, "No browser media available");
164
+ }
165
+ const evidenceMs = evidenceSourceMs(input, frame);
166
+ const timed = screenshots.find((screenshot2, index) => {
167
+ const start = screenshot2.offsetMs ?? null;
168
+ const next = screenshots[index + 1]?.offsetMs ?? Number.MAX_SAFE_INTEGER;
169
+ return start !== null && evidenceMs >= start && evidenceMs < next;
170
+ });
171
+ const screenshotIndex = Math.min(screenshots.length - 1, Math.floor(frame / Math.max(1, durationFrames) * screenshots.length));
172
+ const screenshot = timed ?? screenshots[screenshotIndex];
173
+ const objectFit = screenshot.captureKind === "full-page" ? "cover" : "contain";
174
+ return React.createElement("div", { style: frameStyle }, React.createElement(Img, {
175
+ src: screenshot.src ?? screenshot.path,
176
+ style: {
177
+ width: "100%",
178
+ height: "100%",
179
+ objectFit: screenshot.captureKind === "viewport" ? "fill" : objectFit,
180
+ objectPosition: screenshot.captureKind === "full-page" ? "top center" : "center center",
181
+ backgroundColor: "#111827"
182
+ }
183
+ }));
184
+ }
185
+ function BrowserFrame({ input }) {
186
+ if (input.scene.render.remotion?.browserFrame?.enabled !== true) return null;
187
+ const viewport = resolveEvidenceViewport(input);
188
+ return React.createElement("div", {
189
+ style: {
190
+ position: "absolute",
191
+ left: viewport.left,
192
+ top: viewport.top,
193
+ width: viewport.width,
194
+ height: 34,
195
+ background: "rgba(15,23,42,0.84)",
196
+ borderBottom: "1px solid rgba(148,163,184,0.32)",
197
+ display: "flex",
198
+ alignItems: "center",
199
+ gap: 8,
200
+ padding: "0 12px",
201
+ boxSizing: "border-box",
202
+ fontFamily: "Inter, Arial, sans-serif",
203
+ color: "#cbd5e1",
204
+ fontSize: 13,
205
+ pointerEvents: "none"
206
+ }
207
+ }, React.createElement(
208
+ "div",
209
+ { style: { display: "flex", gap: 6 } },
210
+ React.createElement("span", { style: { width: 9, height: 9, borderRadius: 999, background: "#ef4444", display: "block" } }),
211
+ React.createElement("span", { style: { width: 9, height: 9, borderRadius: 999, background: "#f59e0b", display: "block" } }),
212
+ React.createElement("span", { style: { width: 9, height: 9, borderRadius: 999, background: "#22c55e", display: "block" } })
213
+ ), React.createElement("div", {
214
+ style: {
215
+ flex: 1,
216
+ height: 22,
217
+ borderRadius: 999,
218
+ background: "rgba(255,255,255,0.12)",
219
+ display: "flex",
220
+ alignItems: "center",
221
+ padding: "0 12px",
222
+ overflow: "hidden",
223
+ whiteSpace: "nowrap",
224
+ textOverflow: "ellipsis"
225
+ }
226
+ }, input.scene.render.remotion.browserFrame.title ?? input.run.baseUrl ?? input.scene.target.baseUrl));
227
+ }
228
+ function LowerThird({ input }) {
229
+ const frame = useCurrentFrame();
230
+ const evidenceMs = evidenceSourceMs(input, frame);
231
+ const step = stepAtEvidenceMs(input, evidenceMs);
232
+ if (!step) return null;
233
+ return React.createElement(
234
+ "div",
235
+ {
236
+ style: {
237
+ position: "absolute",
238
+ left: 48,
239
+ bottom: 42,
240
+ background: "rgba(15, 23, 42, 0.86)",
241
+ color: "white",
242
+ borderRadius: 6,
243
+ padding: "16px 20px",
244
+ fontFamily: "Inter, Arial, sans-serif",
245
+ maxWidth: 980,
246
+ boxShadow: "0 16px 40px rgba(0,0,0,0.25)"
247
+ }
248
+ },
249
+ React.createElement("div", { style: { fontSize: 17, color: "#93c5fd", textTransform: "uppercase" } }, step.id),
250
+ React.createElement("div", { style: { fontSize: 26, fontWeight: 700, marginTop: 4 } }, step.title)
251
+ );
252
+ }
253
+ function CaptionOverlay({ input }) {
254
+ const frame = useCurrentFrame();
255
+ if (input.render.mode !== "training" || input.scene.training?.captions?.renderInTrainingVideo === false || input.training.captions.length === 0) return null;
256
+ const ms = evidenceSourceMs(input, frame);
257
+ const cue = input.training.captions.find((entry) => ms >= entry.startMs && ms <= entry.endMs);
258
+ if (!cue) return null;
259
+ return React.createElement(
260
+ "div",
261
+ {
262
+ style: {
263
+ position: "absolute",
264
+ left: "50%",
265
+ bottom: 132,
266
+ transform: "translateX(-50%)",
267
+ width: 1040,
268
+ maxWidth: "82%",
269
+ minHeight: 64,
270
+ background: "rgba(15, 23, 42, 0.88)",
271
+ color: "#f8fafc",
272
+ border: "1px solid rgba(56,189,248,0.36)",
273
+ borderRadius: 8,
274
+ padding: "14px 22px",
275
+ fontFamily: "Inter, Arial, sans-serif",
276
+ fontSize: 26,
277
+ lineHeight: 1.22,
278
+ textAlign: "center",
279
+ boxShadow: "0 18px 42px rgba(0,0,0,0.34)"
280
+ }
281
+ },
282
+ React.createElement("span", { style: { color: "#38bdf8", marginRight: 10 } }, "Training"),
283
+ React.createElement("span", null, cue.text)
284
+ );
285
+ }
286
+ function Callouts({ input }) {
287
+ const frame = useCurrentFrame();
288
+ const evidenceMs = evidenceSourceMs(input, frame);
289
+ const overlay = activeOverlayText(input, evidenceMs);
290
+ if (!overlay?.text) return null;
291
+ const start = stepStartMs(input, overlay.at) ?? evidenceMs;
292
+ const localFrame = Math.max(0, Math.floor((evidenceMs - start) / 1e3 * input.render.fps));
293
+ const durationSeconds = overlay.durationSeconds ?? 6;
294
+ const opacity = overlay.motion ? void 0 : interpolate(localFrame, [0, 20, Math.max(21, durationSeconds * input.render.fps - 20), Math.max(22, durationSeconds * input.render.fps)], [0, 1, 1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
295
+ const regionStyle = overlay.position ? { position: "absolute", left: overlay.position.unit === "percent" ? `${overlay.position.x}%` : overlay.position.x, top: overlay.position.unit === "percent" ? `${overlay.position.y}%` : overlay.position.y } : resolveVisualRegion(overlay.region ?? (overlay.variant === "lower-third" ? "bottom-left" : "top-right"), 48);
296
+ const sizeStyle = overlay.size ? { width: overlay.size.unit === "percent" ? `${overlay.size.width}%` : overlay.size.width, height: overlay.size.unit === "percent" ? `${overlay.size.height}%` : overlay.size.height } : {};
297
+ const variant = overlay.variant ?? (overlay.type === "callout" ? "callout" : "panel");
298
+ const variantStyle = variant === "badge" ? { width: "auto", maxWidth: 520, padding: "10px 14px", borderRadius: 999, fontSize: 18, fontWeight: 800 } : variant === "label" ? { width: 360, padding: "14px 16px", fontSize: 20, fontWeight: 700 } : variant === "lower-third" ? { width: 720, padding: "18px 22px", fontSize: 24, fontWeight: 700 } : { width: 480, padding: 24, fontSize: 24, fontWeight: 500 };
299
+ return React.createElement(
300
+ "div",
301
+ {
302
+ style: {
303
+ ...regionStyle,
304
+ ...variantStyle,
305
+ ...sizeStyle,
306
+ ...visualStyle({ tone: overlay.style?.tone ?? "neutral", ...overlay.style }),
307
+ borderLeftWidth: variant === "callout" || variant === "panel" ? 5 : overlay.style?.borderWidth ?? 1,
308
+ fontFamily: "Inter, Arial, sans-serif",
309
+ lineHeight: 1.3,
310
+ opacity,
311
+ boxSizing: "border-box",
312
+ overflow: "hidden",
313
+ ...interpolateSceneMotion({ motion: overlay.motion, frame: localFrame, fps: input.render.fps, durationSeconds })
314
+ }
315
+ },
316
+ React.createElement("div", {
317
+ style: { color: overlay.style?.color ?? treeseedSceneVideoTheme.text, whiteSpace: "pre-wrap" }
318
+ }, overlay.text),
319
+ ...(overlay.objects ?? []).map((object) => renderTreeseedVisualObject({ object, frame: localFrame, fps: input.render.fps, durationSeconds })).filter(Boolean)
320
+ );
321
+ }
322
+ function OverlayDiagram({ input }) {
323
+ const frame = useCurrentFrame();
324
+ const evidenceMs = evidenceSourceMs(input, frame);
325
+ const diagram = activeOverlayDiagram(input, evidenceMs);
326
+ if (!diagram) return null;
327
+ const start = diagram.startOffsetMs ?? stepStartMs(input, diagram.at) ?? evidenceMs;
328
+ const diagramFrame = Math.max(0, Math.floor((evidenceMs - start) / 1e3 * input.render.fps));
329
+ return React.createElement("div", {
330
+ style: {
331
+ position: "absolute",
332
+ right: 44,
333
+ bottom: 132,
334
+ width: 520,
335
+ height: 292,
336
+ ...visualStyle({ tone: diagram.style?.tone ?? "info", background: "#0f172a", ...diagram.style }),
337
+ border: `${diagram.style?.borderWidth ?? 1}px solid ${diagram.style?.borderColor ?? "rgba(56,189,248,0.45)"}`,
338
+ borderRadius: diagram.style?.radius ?? 8,
339
+ overflow: "hidden",
340
+ ...interpolateSceneMotion({ motion: diagram.motion, frame: diagramFrame, fps: input.render.fps, durationSeconds: diagram.durationSeconds })
341
+ }
342
+ }, renderTreeseedSceneDiagram({ diagram, frame: diagramFrame, fps: input.render.fps, width: 520, height: 292 }));
343
+ }
344
+ function ChapterBanner({ input }) {
345
+ const frame = useCurrentFrame();
346
+ if (input.chapters.length === 0) return null;
347
+ const evidenceMs = evidenceSourceMs(input, frame);
348
+ const step = stepAtEvidenceMs(input, evidenceMs);
349
+ const chapter = step ? input.chapters.find((entry) => entry.stepIds.includes(step.id)) ?? input.chapters[0] : input.chapters[0];
350
+ const viewport = resolveEvidenceViewport(input);
351
+ const hasBrowserFrame = input.scene.render.remotion?.browserFrame?.enabled === true;
352
+ return React.createElement("div", {
353
+ style: {
354
+ position: "absolute",
355
+ left: hasBrowserFrame ? viewport.left + 24 : 48,
356
+ top: hasBrowserFrame ? viewport.top + 48 : 38,
357
+ color: "#e0f2fe",
358
+ fontFamily: "Inter, Arial, sans-serif",
359
+ fontSize: 20,
360
+ fontWeight: 700,
361
+ textShadow: "0 2px 12px rgba(0,0,0,0.5)"
362
+ }
363
+ }, chapter.title);
364
+ }
365
+ function renderShell(input, subtitle) {
366
+ const config = useVideoConfig();
367
+ const layout = treeseedSceneRenderLayout(input);
368
+ return React.createElement(
369
+ AbsoluteFill,
370
+ { style: { backgroundColor: "#111827" } },
371
+ layout.introFrames > 0 ? React.createElement(Sequence, { from: 0, durationInFrames: layout.introFrames }, titleCard(input, subtitle)) : null,
372
+ layout.interstitialFrames > 0 ? React.createElement(Sequence, { from: layout.introFrames, durationInFrames: layout.interstitialFrames }, React.createElement(InterstitialDiagrams, { input, width: config.width, height: config.height })) : null,
373
+ React.createElement(
374
+ Sequence,
375
+ { from: layout.evidenceStartFrame, durationInFrames: layout.evidenceDurationInFrames },
376
+ React.createElement(EvidenceFrame, { input, durationFrames: layout.evidenceDurationInFrames }),
377
+ React.createElement(BrowserFrame, { input }),
378
+ React.createElement(ChapterBanner, { input }),
379
+ React.createElement(LowerThird, { input }),
380
+ React.createElement(CaptionOverlay, { input }),
381
+ React.createElement(Callouts, { input }),
382
+ React.createElement(OverlayDiagram, { input })
383
+ )
384
+ );
385
+ }
386
+ function InterstitialDiagrams({ input, width, height }) {
387
+ const frame = useCurrentFrame();
388
+ const diagram = activeInterstitialDiagram(input, frame);
389
+ if (!diagram) return null;
390
+ return renderTreeseedSceneDiagram({ diagram: diagram.diagram, frame: diagram.frame, fps: input.render.fps, width, height });
391
+ }
392
+ function DemoDefault(input) {
393
+ return renderShell(input, "Workflow evidence rendered from scene timeline artifacts.");
394
+ }
395
+ function TrainingDefault(input) {
396
+ return renderShell(input, input.scene.description ?? "Training walkthrough rendered from reusable scene evidence.");
397
+ }
398
+ function FailureReview(input) {
399
+ const failed = input.run.steps.find((step) => step.id === input.run.failedStep);
400
+ return renderShell(input, failed?.error ? `${failed.id}: ${failed.error.message}` : "Failure review from scene evidence.");
401
+ }
402
+ function DiagramOnly(input) {
403
+ const frame = useCurrentFrame();
404
+ const config = useVideoConfig();
405
+ const diagrams = input.renderDiagrams;
406
+ if (diagrams.length === 0) {
407
+ return React.createElement(AbsoluteFill, { style: { backgroundColor: "#0f172a", color: "#f8fafc", fontFamily: "Inter, Arial, sans-serif", justifyContent: "center", alignItems: "center", fontSize: 34 } }, "No validated diagrams available");
408
+ }
409
+ let cursor = 0;
410
+ for (const diagram of diagrams) {
411
+ const duration = Math.max(1, Math.ceil(diagram.durationSeconds * input.render.fps));
412
+ if (frame >= cursor && frame < cursor + duration) {
413
+ return renderTreeseedSceneDiagram({ diagram, frame: frame - cursor, fps: input.render.fps, width: config.width, height: config.height });
414
+ }
415
+ cursor += duration;
416
+ }
417
+ const last = diagrams[diagrams.length - 1];
418
+ return renderTreeseedSceneDiagram({ diagram: last, frame: Math.max(0, Math.ceil(last.durationSeconds * input.render.fps) - 1), fps: input.render.fps, width: config.width, height: config.height });
419
+ }
420
+ function TreeseedSceneRemotionRoot() {
421
+ const defaultProps = {
422
+ schemaVersion: "treeseed.scene.render-input/v1",
423
+ scene: { id: "treeseed-render-preview", title: "Treeseed Scene Render Preview", description: "", audience: [], workflow: [], chapters: [], overlays: [], diagrams: [], runtime: { mode: "demo" }, render: {} },
424
+ run: { runId: "treeseed-render-preview", steps: [], workflowStatus: "passed", durationMs: 8e3, renderedVideoPaths: [] },
425
+ timeline: [],
426
+ chapters: [],
427
+ segments: [],
428
+ checkpoints: [],
429
+ overlays: [],
430
+ diagrams: [],
431
+ renderDiagrams: [],
432
+ training: { captions: [], transcript: [], narration: [], glossary: [], chapterClips: [] },
433
+ media: { videos: [], screenshots: [] },
434
+ render: { mode: "demo", composition: "treeseed-demo-default", fps: 30, width: 1920, height: 1080, durationInFrames: 240, format: "mp4" }
435
+ };
436
+ const compositions = [
437
+ ["treeseed-demo-default", DemoDefault],
438
+ ["treeseed-training-default", TrainingDefault],
439
+ ["treeseed-failure-review", FailureReview],
440
+ ["treeseed-diagram-only", DiagramOnly]
441
+ ];
442
+ return React.createElement(React.Fragment, null, ...compositions.map(([id, component]) => React.createElement(Composition, {
443
+ key: id,
444
+ id,
445
+ component,
446
+ durationInFrames: defaultProps.render.durationInFrames,
447
+ fps: defaultProps.render.fps,
448
+ width: defaultProps.render.width,
449
+ height: defaultProps.render.height,
450
+ defaultProps,
451
+ calculateMetadata: ({ props }) => ({
452
+ durationInFrames: props.render.durationInFrames,
453
+ fps: props.render.fps,
454
+ width: props.render.width,
455
+ height: props.render.height
456
+ })
457
+ })));
458
+ }
459
+ registerRoot(TreeseedSceneRemotionRoot);
460
+ export {
461
+ TreeseedSceneRemotionRoot,
462
+ resolveEvidenceViewport,
463
+ treeseedSceneRenderLayout
464
+ };
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { TreeseedSceneRenderDiagram } from './types.js';
3
+ export declare function renderTreeseedSceneDiagram(input: {
4
+ diagram: TreeseedSceneRenderDiagram;
5
+ frame: number;
6
+ fps: number;
7
+ width: number;
8
+ height: number;
9
+ }): React.ReactElement;
@@ -0,0 +1,188 @@
1
+ import React from "react";
2
+ import { interpolate } from "remotion";
3
+ import { interpolateSceneMotion, renderTreeseedVisualObject, visualStyle } from "./remotion-visuals.js";
4
+ const colors = {
5
+ bg: "#0f172a",
6
+ panel: "#172033",
7
+ text: "#f8fafc",
8
+ muted: "#cbd5e1",
9
+ accent: "#38bdf8",
10
+ success: "#22c55e",
11
+ warning: "#f59e0b",
12
+ error: "#ef4444",
13
+ line: "#334155"
14
+ };
15
+ function text(value, fallback = "") {
16
+ return typeof value === "string" && value.trim() ? value.trim() : fallback;
17
+ }
18
+ function array(value, fallback) {
19
+ return Array.isArray(value) ? value : fallback;
20
+ }
21
+ function title(value) {
22
+ return React.createElement("div", {
23
+ style: { color: colors.text, fontSize: 46, fontWeight: 800, marginBottom: 40, maxWidth: 1500 }
24
+ }, value);
25
+ }
26
+ function frameShell(children) {
27
+ return React.createElement("div", {
28
+ style: {
29
+ width: "100%",
30
+ height: "100%",
31
+ background: colors.bg,
32
+ color: colors.text,
33
+ fontFamily: "Inter, Arial, sans-serif",
34
+ padding: 80,
35
+ boxSizing: "border-box",
36
+ display: "flex",
37
+ flexDirection: "column",
38
+ justifyContent: "center"
39
+ }
40
+ }, children);
41
+ }
42
+ function diagramShell(diagram, frame, fps, children) {
43
+ return React.createElement(
44
+ "div",
45
+ {
46
+ style: {
47
+ width: "100%",
48
+ height: "100%",
49
+ position: "relative",
50
+ overflow: "hidden",
51
+ ...visualStyle({ background: colors.bg, color: colors.text, borderWidth: 0, shadow: "none", ...diagram.style }),
52
+ ...interpolateSceneMotion({ motion: diagram.motion, frame, fps, durationSeconds: diagram.durationSeconds })
53
+ }
54
+ },
55
+ children,
56
+ ...(diagram.objects ?? []).map((object) => renderTreeseedVisualObject({ object, frame, fps, durationSeconds: diagram.durationSeconds })).filter(Boolean)
57
+ );
58
+ }
59
+ function progress(frame, fps, durationSeconds) {
60
+ return Math.max(0, Math.min(1, frame / Math.max(1, durationSeconds * fps)));
61
+ }
62
+ function OperationLifecycleDiagram(diagram, frame, fps) {
63
+ const props = diagram.props;
64
+ const states = array(props.states, ["queued", "claimed", "running", "verified", "completed"]).map((entry) => String(entry));
65
+ const activeState = text(props.activeState);
66
+ const pct = progress(frame, fps, diagram.durationSeconds);
67
+ const activeIndex = activeState ? Math.max(0, states.indexOf(activeState)) : Math.min(states.length - 1, Math.floor(pct * states.length));
68
+ return frameShell(React.createElement(
69
+ React.Fragment,
70
+ null,
71
+ title(text(props.title, "Operation lifecycle")),
72
+ React.createElement(
73
+ "div",
74
+ { style: { display: "grid", gridTemplateColumns: `repeat(${states.length}, minmax(0, 1fr))`, gap: 18, alignItems: "center" } },
75
+ ...states.map((state, index) => {
76
+ const active = index <= activeIndex;
77
+ return React.createElement(
78
+ "div",
79
+ { key: state, style: { display: "flex", flexDirection: "column", alignItems: "center", gap: 16 } },
80
+ React.createElement("div", { style: { width: 86, height: 86, borderRadius: 43, background: active ? colors.success : colors.panel, border: `4px solid ${active ? colors.success : colors.line}`, display: "flex", alignItems: "center", justifyContent: "center", fontSize: 28, fontWeight: 800 } }, String(index + 1)),
81
+ React.createElement("div", { style: { color: active ? colors.text : colors.muted, fontSize: 24, fontWeight: active ? 800 : 600, textAlign: "center" } }, state)
82
+ );
83
+ })
84
+ ),
85
+ React.createElement(
86
+ "div",
87
+ { style: { marginTop: 46, height: 10, background: colors.line, borderRadius: 6, overflow: "hidden" } },
88
+ React.createElement("div", { style: { width: `${interpolate(pct, [0, 1], [0, 100])}%`, height: "100%", background: colors.accent } })
89
+ )
90
+ ));
91
+ }
92
+ function ReconciliationLifecycleDiagram(diagram, frame, fps) {
93
+ const props = diagram.props;
94
+ const stages = array(props.stages, ["refresh", "diff", "plan", "validate", "apply", "refresh", "verify", "persist"]).map((entry) => String(entry));
95
+ const pct = progress(frame, fps, diagram.durationSeconds);
96
+ const activeIndex = Math.min(stages.length - 1, Math.floor(pct * stages.length));
97
+ return frameShell(React.createElement(
98
+ React.Fragment,
99
+ null,
100
+ title(text(props.title, "Reconciliation lifecycle")),
101
+ React.createElement(
102
+ "div",
103
+ { style: { display: "grid", gridTemplateColumns: "repeat(4, minmax(0, 1fr))", gap: 18 } },
104
+ ...stages.map((stage, index) => {
105
+ const active = index <= activeIndex;
106
+ return React.createElement(
107
+ "div",
108
+ { key: `${stage}-${index}`, style: { minHeight: 132, border: `2px solid ${active ? colors.accent : colors.line}`, borderRadius: 8, padding: 22, background: active ? "#123044" : colors.panel } },
109
+ React.createElement("div", { style: { color: active ? colors.accent : colors.muted, fontSize: 18, fontWeight: 800 } }, `0${index + 1}`.slice(-2)),
110
+ React.createElement("div", { style: { marginTop: 14, fontSize: 28, fontWeight: 800 } }, stage)
111
+ );
112
+ })
113
+ ),
114
+ React.createElement("div", { style: { marginTop: 38, color: colors.muted, fontSize: 24 } }, `Current stage: ${stages[activeIndex] ?? stages[0]}`)
115
+ ));
116
+ }
117
+ function DevRuntimeTopologyDiagram(diagram, frame, fps) {
118
+ const props = diagram.props;
119
+ const surfaces = array(props.surfaces, []).map((entry) => entry && typeof entry === "object" ? entry : {});
120
+ const links = array(props.links, []).map((entry) => entry && typeof entry === "object" ? entry : {});
121
+ const pct = progress(frame, fps, diagram.durationSeconds);
122
+ return frameShell(React.createElement(
123
+ React.Fragment,
124
+ null,
125
+ title(text(props.title, "Managed dev topology")),
126
+ React.createElement(
127
+ "div",
128
+ { style: { display: "grid", gridTemplateColumns: `repeat(${Math.max(1, surfaces.length)}, minmax(0, 1fr))`, gap: 32, alignItems: "center" } },
129
+ ...surfaces.map((surface, index) => React.createElement(
130
+ "div",
131
+ { key: String(surface.id ?? index), style: { border: `3px solid ${colors.accent}`, background: colors.panel, borderRadius: 8, padding: 28, minHeight: 180 } },
132
+ React.createElement("div", { style: { fontSize: 34, fontWeight: 800 } }, text(surface.label, String(surface.id ?? `surface-${index}`))),
133
+ React.createElement("div", { style: { marginTop: 16, fontSize: 22, color: colors.muted } }, text(surface.kind, "service"))
134
+ ))
135
+ ),
136
+ React.createElement(
137
+ "div",
138
+ { style: { marginTop: 42, display: "grid", gap: 14 } },
139
+ ...links.map((link, index) => React.createElement("div", { key: index, style: { color: index / Math.max(1, links.length) <= pct ? colors.success : colors.muted, fontSize: 24 } }, `${text(link.from)} -> ${text(link.to)}${link.label ? ` (${text(link.label)})` : ""}`))
140
+ )
141
+ ));
142
+ }
143
+ function SceneExecutionTimelineDiagram(diagram, frame, fps) {
144
+ const props = diagram.props;
145
+ const steps = array(props.steps, []).map((entry) => entry && typeof entry === "object" ? entry : {});
146
+ const chapters = array(props.chapters, []).map((entry) => entry && typeof entry === "object" ? entry : {});
147
+ const checkpoints = array(props.checkpoints, []).map((entry) => entry && typeof entry === "object" ? entry : {});
148
+ const pct = progress(frame, fps, diagram.durationSeconds);
149
+ const visibleSteps = Math.max(1, Math.ceil(pct * Math.max(1, steps.length)));
150
+ return frameShell(React.createElement(
151
+ React.Fragment,
152
+ null,
153
+ title(text(props.title, "Scene execution timeline")),
154
+ React.createElement(
155
+ "div",
156
+ { style: { display: "grid", gap: 16 } },
157
+ ...steps.slice(0, visibleSteps).map((step, index) => {
158
+ const failed = step.id === props.failedStep || step.status === "failed";
159
+ return React.createElement(
160
+ "div",
161
+ { key: String(step.id ?? index), style: { display: "grid", gridTemplateColumns: "80px 1fr 180px", gap: 18, alignItems: "center", color: colors.text } },
162
+ React.createElement("div", { style: { color: failed ? colors.error : colors.accent, fontSize: 22, fontWeight: 800 } }, `#${index + 1}`),
163
+ React.createElement(
164
+ "div",
165
+ { style: { borderLeft: `5px solid ${failed ? colors.error : colors.success}`, background: colors.panel, borderRadius: 8, padding: 18 } },
166
+ React.createElement("div", { style: { fontSize: 24, fontWeight: 800 } }, text(step.title, String(step.id ?? "step"))),
167
+ React.createElement("div", { style: { marginTop: 8, color: colors.muted, fontSize: 17 } }, String(step.id ?? ""))
168
+ ),
169
+ React.createElement("div", { style: { color: failed ? colors.error : colors.success, fontSize: 20, fontWeight: 800 } }, text(step.status, "planned"))
170
+ );
171
+ })
172
+ ),
173
+ React.createElement(
174
+ "div",
175
+ { style: { marginTop: 30, display: "flex", gap: 28, color: colors.muted, fontSize: 22 } },
176
+ React.createElement("span", null, `${chapters.length} chapters`),
177
+ React.createElement("span", null, `${array(props.segments, []).length} segments`),
178
+ React.createElement("span", null, `${checkpoints.length} checkpoints`)
179
+ )
180
+ ));
181
+ }
182
+ function renderTreeseedSceneDiagram(input) {
183
+ const content = input.diagram.kind === "operation-lifecycle" ? OperationLifecycleDiagram(input.diagram, input.frame, input.fps) : input.diagram.kind === "reconciliation-lifecycle" ? ReconciliationLifecycleDiagram(input.diagram, input.frame, input.fps) : input.diagram.kind === "dev-runtime-topology" ? DevRuntimeTopologyDiagram(input.diagram, input.frame, input.fps) : SceneExecutionTimelineDiagram(input.diagram, input.frame, input.fps);
184
+ return diagramShell(input.diagram, input.frame, input.fps, content);
185
+ }
186
+ export {
187
+ renderTreeseedSceneDiagram
188
+ };
@@ -0,0 +1,13 @@
1
+ import type { TreeseedSceneRenderFormat, TreeseedSceneRenderInputLoadReport, TreeseedSceneRenderMode } from './types.js';
2
+ export declare function defaultTreeseedSceneRemotionComposition(mode: TreeseedSceneRenderMode): "treeseed-demo-default" | "treeseed-training-default" | "treeseed-failure-review" | "treeseed-diagram-only";
3
+ export declare function loadTreeseedSceneRenderInput(input: {
4
+ projectRoot: string;
5
+ scene: string;
6
+ from: string;
7
+ mode?: TreeseedSceneRenderMode;
8
+ composition?: string;
9
+ format?: TreeseedSceneRenderFormat;
10
+ chapterId?: string;
11
+ renderer?: string;
12
+ device?: string;
13
+ }): TreeseedSceneRenderInputLoadReport;