@nodetool-ai/websocket 0.7.0-rc.23 → 0.8.2

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 (1101) hide show
  1. package/README.md +50 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/agent/run-node-tool.d.ts +39 -0
  4. package/dist/agent/run-node-tool.d.ts.map +1 -0
  5. package/dist/agent/run-node-tool.js +55 -0
  6. package/dist/agent/run-node-tool.js.map +1 -0
  7. package/dist/chat-prediction-forwarder.d.ts +13 -0
  8. package/dist/chat-prediction-forwarder.d.ts.map +1 -0
  9. package/dist/chat-prediction-forwarder.js +22 -0
  10. package/dist/chat-prediction-forwarder.js.map +1 -0
  11. package/dist/chat-tool-call-repair.d.ts +45 -0
  12. package/dist/chat-tool-call-repair.d.ts.map +1 -0
  13. package/dist/chat-tool-call-repair.js +100 -0
  14. package/dist/chat-tool-call-repair.js.map +1 -0
  15. package/dist/chat-turn-registry.d.ts +169 -0
  16. package/dist/chat-turn-registry.d.ts.map +1 -0
  17. package/dist/chat-turn-registry.js +326 -0
  18. package/dist/chat-turn-registry.js.map +1 -0
  19. package/dist/collection-api.d.ts +2 -2
  20. package/dist/collection-api.d.ts.map +1 -1
  21. package/dist/collection-api.js +82 -14
  22. package/dist/collection-api.js.map +1 -1
  23. package/dist/configured-providers.d.ts +52 -0
  24. package/dist/configured-providers.d.ts.map +1 -0
  25. package/dist/configured-providers.js +85 -0
  26. package/dist/configured-providers.js.map +1 -0
  27. package/dist/cors.d.ts +22 -0
  28. package/dist/cors.d.ts.map +1 -0
  29. package/dist/cors.js +91 -0
  30. package/dist/cors.js.map +1 -0
  31. package/dist/credit-gate.d.ts +36 -0
  32. package/dist/credit-gate.d.ts.map +1 -0
  33. package/dist/credit-gate.js +76 -0
  34. package/dist/credit-gate.js.map +1 -0
  35. package/dist/custom-providers.d.ts +40 -0
  36. package/dist/custom-providers.d.ts.map +1 -0
  37. package/dist/custom-providers.js +134 -0
  38. package/dist/custom-providers.js.map +1 -0
  39. package/dist/debug-sessions.d.ts +10 -0
  40. package/dist/debug-sessions.d.ts.map +1 -0
  41. package/dist/debug-sessions.js +9 -0
  42. package/dist/debug-sessions.js.map +1 -0
  43. package/dist/drain.d.ts +34 -0
  44. package/dist/drain.d.ts.map +1 -0
  45. package/dist/drain.js +68 -0
  46. package/dist/drain.js.map +1 -0
  47. package/dist/e2e-server.d.ts +30 -0
  48. package/dist/e2e-server.d.ts.map +1 -0
  49. package/dist/e2e-server.js +111 -0
  50. package/dist/e2e-server.js.map +1 -0
  51. package/dist/error-traces.d.ts +56 -0
  52. package/dist/error-traces.d.ts.map +1 -0
  53. package/dist/error-traces.js +179 -0
  54. package/dist/error-traces.js.map +1 -0
  55. package/dist/example-workflows.d.ts +20 -0
  56. package/dist/example-workflows.d.ts.map +1 -0
  57. package/dist/example-workflows.js +123 -0
  58. package/dist/example-workflows.js.map +1 -0
  59. package/dist/external-mcp.d.ts +58 -0
  60. package/dist/external-mcp.d.ts.map +1 -0
  61. package/dist/external-mcp.js +288 -0
  62. package/dist/external-mcp.js.map +1 -0
  63. package/dist/fake-runtime.d.ts +114 -0
  64. package/dist/fake-runtime.d.ts.map +1 -0
  65. package/dist/fake-runtime.js +307 -0
  66. package/dist/fake-runtime.js.map +1 -0
  67. package/dist/file-api.d.ts +4 -7
  68. package/dist/file-api.d.ts.map +1 -1
  69. package/dist/file-api.js +122 -39
  70. package/dist/file-api.js.map +1 -1
  71. package/dist/frontend-renderer-registry.d.ts +75 -0
  72. package/dist/frontend-renderer-registry.d.ts.map +1 -0
  73. package/dist/frontend-renderer-registry.js +111 -0
  74. package/dist/frontend-renderer-registry.js.map +1 -0
  75. package/dist/generation-recovery.d.ts +13 -0
  76. package/dist/generation-recovery.d.ts.map +1 -0
  77. package/dist/generation-recovery.js +219 -0
  78. package/dist/generation-recovery.js.map +1 -0
  79. package/dist/headless-job-runner.d.ts +71 -0
  80. package/dist/headless-job-runner.d.ts.map +1 -0
  81. package/dist/headless-job-runner.js +198 -0
  82. package/dist/headless-job-runner.js.map +1 -0
  83. package/dist/http-api.d.ts +157 -24
  84. package/dist/http-api.d.ts.map +1 -1
  85. package/dist/http-api.js +628 -646
  86. package/dist/http-api.js.map +1 -1
  87. package/dist/http-body-schemas.d.ts +109 -0
  88. package/dist/http-body-schemas.d.ts.map +1 -0
  89. package/dist/http-body-schemas.js +146 -0
  90. package/dist/http-body-schemas.js.map +1 -0
  91. package/dist/index.d.ts +10 -3
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +10 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/interrupted-jobs.d.ts +14 -0
  96. package/dist/interrupted-jobs.d.ts.map +1 -0
  97. package/dist/interrupted-jobs.js +28 -0
  98. package/dist/interrupted-jobs.js.map +1 -0
  99. package/dist/job-control.d.ts +57 -0
  100. package/dist/job-control.d.ts.map +1 -0
  101. package/dist/job-control.js +134 -0
  102. package/dist/job-control.js.map +1 -0
  103. package/dist/job-queue.d.ts +47 -0
  104. package/dist/job-queue.d.ts.map +1 -0
  105. package/dist/job-queue.js +52 -0
  106. package/dist/job-queue.js.map +1 -0
  107. package/dist/job-run-registry.d.ts +176 -0
  108. package/dist/job-run-registry.d.ts.map +1 -0
  109. package/dist/job-run-registry.js +312 -0
  110. package/dist/job-run-registry.js.map +1 -0
  111. package/dist/lib/app-build-service.d.ts +16 -0
  112. package/dist/lib/app-build-service.d.ts.map +1 -0
  113. package/dist/lib/app-build-service.js +39 -0
  114. package/dist/lib/app-build-service.js.map +1 -0
  115. package/dist/lib/app-debug-service.d.ts +16 -0
  116. package/dist/lib/app-debug-service.d.ts.map +1 -0
  117. package/dist/lib/app-debug-service.js +48 -0
  118. package/dist/lib/app-debug-service.js.map +1 -0
  119. package/dist/lib/app-deployment-service.d.ts +82 -0
  120. package/dist/lib/app-deployment-service.d.ts.map +1 -0
  121. package/dist/lib/app-deployment-service.js +282 -0
  122. package/dist/lib/app-deployment-service.js.map +1 -0
  123. package/dist/lib/app-instances-service.d.ts +1284 -0
  124. package/dist/lib/app-instances-service.d.ts.map +1 -0
  125. package/dist/lib/app-instances-service.js +378 -0
  126. package/dist/lib/app-instances-service.js.map +1 -0
  127. package/dist/lib/app-run-cancellation.d.ts +4 -0
  128. package/dist/lib/app-run-cancellation.d.ts.map +1 -0
  129. package/dist/lib/app-run-cancellation.js +28 -0
  130. package/dist/lib/app-run-cancellation.js.map +1 -0
  131. package/dist/lib/app-run-server.d.ts +7 -0
  132. package/dist/lib/app-run-server.d.ts.map +1 -0
  133. package/dist/lib/app-run-server.js +6 -0
  134. package/dist/lib/app-run-server.js.map +1 -0
  135. package/dist/lib/app-session-scope.d.ts +91 -0
  136. package/dist/lib/app-session-scope.d.ts.map +1 -0
  137. package/dist/lib/app-session-scope.js +91 -0
  138. package/dist/lib/app-session-scope.js.map +1 -0
  139. package/dist/lib/applications-service.d.ts +354 -0
  140. package/dist/lib/applications-service.d.ts.map +1 -0
  141. package/dist/lib/applications-service.js +507 -0
  142. package/dist/lib/applications-service.js.map +1 -0
  143. package/dist/lib/asset-duration.d.ts +7 -0
  144. package/dist/lib/asset-duration.d.ts.map +1 -0
  145. package/dist/lib/asset-duration.js +24 -0
  146. package/dist/lib/asset-duration.js.map +1 -0
  147. package/dist/lib/asset-export.d.ts +34 -0
  148. package/dist/lib/asset-export.d.ts.map +1 -0
  149. package/dist/lib/asset-export.js +113 -0
  150. package/dist/lib/asset-export.js.map +1 -0
  151. package/dist/lib/asset-model-interface.d.ts +41 -0
  152. package/dist/lib/asset-model-interface.d.ts.map +1 -0
  153. package/dist/lib/asset-model-interface.js +74 -0
  154. package/dist/lib/asset-model-interface.js.map +1 -0
  155. package/dist/lib/asset-paths.d.ts +49 -1
  156. package/dist/lib/asset-paths.d.ts.map +1 -1
  157. package/dist/lib/asset-paths.js +127 -31
  158. package/dist/lib/asset-paths.js.map +1 -1
  159. package/dist/lib/asset-response.d.ts +12 -0
  160. package/dist/lib/asset-response.d.ts.map +1 -0
  161. package/dist/lib/asset-response.js +89 -0
  162. package/dist/lib/asset-response.js.map +1 -0
  163. package/dist/lib/audio-peaks.d.ts +23 -0
  164. package/dist/lib/audio-peaks.d.ts.map +1 -0
  165. package/dist/lib/audio-peaks.js +335 -0
  166. package/dist/lib/audio-peaks.js.map +1 -0
  167. package/dist/lib/bridge.d.ts +9 -1
  168. package/dist/lib/bridge.d.ts.map +1 -1
  169. package/dist/lib/bridge.js +27 -4
  170. package/dist/lib/bridge.js.map +1 -1
  171. package/dist/lib/compression.d.ts +3 -0
  172. package/dist/lib/compression.d.ts.map +1 -0
  173. package/dist/lib/compression.js +3 -0
  174. package/dist/lib/compression.js.map +1 -0
  175. package/dist/lib/document-model-interfaces.d.ts +30 -0
  176. package/dist/lib/document-model-interfaces.d.ts.map +1 -0
  177. package/dist/lib/document-model-interfaces.js +296 -0
  178. package/dist/lib/document-model-interfaces.js.map +1 -0
  179. package/dist/lib/env-config.d.ts +9 -0
  180. package/dist/lib/env-config.d.ts.map +1 -0
  181. package/dist/lib/env-config.js +18 -0
  182. package/dist/lib/env-config.js.map +1 -0
  183. package/dist/lib/example-apps.d.ts +52 -0
  184. package/dist/lib/example-apps.d.ts.map +1 -0
  185. package/dist/lib/example-apps.js +192 -0
  186. package/dist/lib/example-apps.js.map +1 -0
  187. package/dist/lib/example-games.d.ts +5 -0
  188. package/dist/lib/example-games.d.ts.map +1 -0
  189. package/dist/lib/example-games.js +13 -0
  190. package/dist/lib/example-games.js.map +1 -0
  191. package/dist/lib/example-recipes.d.ts +33 -0
  192. package/dist/lib/example-recipes.d.ts.map +1 -0
  193. package/dist/lib/example-recipes.js +213 -0
  194. package/dist/lib/example-recipes.js.map +1 -0
  195. package/dist/lib/example-storyboards.d.ts +40 -0
  196. package/dist/lib/example-storyboards.d.ts.map +1 -0
  197. package/dist/lib/example-storyboards.js +131 -0
  198. package/dist/lib/example-storyboards.js.map +1 -0
  199. package/dist/lib/example-thumbnail.d.ts +21 -0
  200. package/dist/lib/example-thumbnail.d.ts.map +1 -0
  201. package/dist/lib/example-thumbnail.js +50 -0
  202. package/dist/lib/example-thumbnail.js.map +1 -0
  203. package/dist/lib/example-timelines.d.ts +9 -0
  204. package/dist/lib/example-timelines.d.ts.map +1 -0
  205. package/dist/lib/example-timelines.js +25 -0
  206. package/dist/lib/example-timelines.js.map +1 -0
  207. package/dist/lib/extension-dist.d.ts +24 -0
  208. package/dist/lib/extension-dist.d.ts.map +1 -0
  209. package/dist/lib/extension-dist.js +67 -0
  210. package/dist/lib/extension-dist.js.map +1 -0
  211. package/dist/lib/external-asset-lookup.d.ts +30 -0
  212. package/dist/lib/external-asset-lookup.d.ts.map +1 -0
  213. package/dist/lib/external-asset-lookup.js +99 -0
  214. package/dist/lib/external-asset-lookup.js.map +1 -0
  215. package/dist/lib/external-assets.d.ts +13 -0
  216. package/dist/lib/external-assets.d.ts.map +1 -0
  217. package/dist/lib/external-assets.js +46 -0
  218. package/dist/lib/external-assets.js.map +1 -0
  219. package/dist/lib/fly-replay.d.ts +34 -0
  220. package/dist/lib/fly-replay.d.ts.map +1 -0
  221. package/dist/lib/fly-replay.js +111 -0
  222. package/dist/lib/fly-replay.js.map +1 -0
  223. package/dist/lib/http-rate-limit.d.ts +32 -0
  224. package/dist/lib/http-rate-limit.d.ts.map +1 -0
  225. package/dist/lib/http-rate-limit.js +47 -0
  226. package/dist/lib/http-rate-limit.js.map +1 -0
  227. package/dist/lib/http-tracing.d.ts +12 -0
  228. package/dist/lib/http-tracing.d.ts.map +1 -0
  229. package/dist/lib/http-tracing.js +81 -0
  230. package/dist/lib/http-tracing.js.map +1 -0
  231. package/dist/lib/instance-id.d.ts +25 -0
  232. package/dist/lib/instance-id.d.ts.map +1 -0
  233. package/dist/lib/instance-id.js +44 -0
  234. package/dist/lib/instance-id.js.map +1 -0
  235. package/dist/lib/link-codes.d.ts +82 -0
  236. package/dist/lib/link-codes.d.ts.map +1 -0
  237. package/dist/lib/link-codes.js +100 -0
  238. package/dist/lib/link-codes.js.map +1 -0
  239. package/dist/lib/local-asset-upload.d.ts +5 -0
  240. package/dist/lib/local-asset-upload.d.ts.map +1 -0
  241. package/dist/lib/local-asset-upload.js +69 -0
  242. package/dist/lib/local-asset-upload.js.map +1 -0
  243. package/dist/lib/local-file-access.d.ts +31 -0
  244. package/dist/lib/local-file-access.d.ts.map +1 -0
  245. package/dist/lib/local-file-access.js +169 -0
  246. package/dist/lib/local-file-access.js.map +1 -0
  247. package/dist/lib/localhost-trust.d.ts +59 -0
  248. package/dist/lib/localhost-trust.d.ts.map +1 -0
  249. package/dist/lib/localhost-trust.js +139 -0
  250. package/dist/lib/localhost-trust.js.map +1 -0
  251. package/dist/lib/mcp-mount.d.ts +25 -0
  252. package/dist/lib/mcp-mount.d.ts.map +1 -0
  253. package/dist/lib/mcp-mount.js +32 -0
  254. package/dist/lib/mcp-mount.js.map +1 -0
  255. package/dist/lib/media-size.d.ts +21 -0
  256. package/dist/lib/media-size.d.ts.map +1 -0
  257. package/dist/lib/media-size.js +48 -0
  258. package/dist/lib/media-size.js.map +1 -0
  259. package/dist/lib/media.d.ts +33 -0
  260. package/dist/lib/media.d.ts.map +1 -0
  261. package/dist/lib/media.js +110 -0
  262. package/dist/lib/media.js.map +1 -0
  263. package/dist/lib/package-asset-export.d.ts +83 -0
  264. package/dist/lib/package-asset-export.d.ts.map +1 -0
  265. package/dist/lib/package-asset-export.js +212 -0
  266. package/dist/lib/package-asset-export.js.map +1 -0
  267. package/dist/lib/package-assets.d.ts +41 -0
  268. package/dist/lib/package-assets.d.ts.map +1 -0
  269. package/dist/lib/package-assets.js +155 -0
  270. package/dist/lib/package-assets.js.map +1 -0
  271. package/dist/lib/project-delete.d.ts +11 -0
  272. package/dist/lib/project-delete.d.ts.map +1 -0
  273. package/dist/lib/project-delete.js +67 -0
  274. package/dist/lib/project-delete.js.map +1 -0
  275. package/dist/lib/project-document-copy.d.ts +31 -0
  276. package/dist/lib/project-document-copy.d.ts.map +1 -0
  277. package/dist/lib/project-document-copy.js +473 -0
  278. package/dist/lib/project-document-copy.js.map +1 -0
  279. package/dist/lib/public-app-assets.d.ts +8 -0
  280. package/dist/lib/public-app-assets.d.ts.map +1 -0
  281. package/dist/lib/public-app-assets.js +77 -0
  282. package/dist/lib/public-app-assets.js.map +1 -0
  283. package/dist/lib/public-routes.d.ts +102 -0
  284. package/dist/lib/public-routes.d.ts.map +1 -0
  285. package/dist/lib/public-routes.js +168 -0
  286. package/dist/lib/public-routes.js.map +1 -0
  287. package/dist/lib/public-workflow-share.d.ts +20 -0
  288. package/dist/lib/public-workflow-share.d.ts.map +1 -0
  289. package/dist/lib/public-workflow-share.js +45 -0
  290. package/dist/lib/public-workflow-share.js.map +1 -0
  291. package/dist/lib/run-trace-live-delivery.d.ts +25 -0
  292. package/dist/lib/run-trace-live-delivery.d.ts.map +1 -0
  293. package/dist/lib/run-trace-live-delivery.js +91 -0
  294. package/dist/lib/run-trace-live-delivery.js.map +1 -0
  295. package/dist/lib/runtime-detection.d.ts +17 -0
  296. package/dist/lib/runtime-detection.d.ts.map +1 -0
  297. package/dist/lib/runtime-detection.js +90 -0
  298. package/dist/lib/runtime-detection.js.map +1 -0
  299. package/dist/lib/storage-access.d.ts +21 -0
  300. package/dist/lib/storage-access.d.ts.map +1 -0
  301. package/dist/lib/storage-access.js +74 -0
  302. package/dist/lib/storage-access.js.map +1 -0
  303. package/dist/lib/storage.d.ts +9 -0
  304. package/dist/lib/storage.d.ts.map +1 -0
  305. package/dist/lib/storage.js +28 -0
  306. package/dist/lib/storage.js.map +1 -0
  307. package/dist/lib/storyboard-export.d.ts +64 -0
  308. package/dist/lib/storyboard-export.d.ts.map +1 -0
  309. package/dist/lib/storyboard-export.js +183 -0
  310. package/dist/lib/storyboard-export.js.map +1 -0
  311. package/dist/lib/style-presets.d.ts +34 -0
  312. package/dist/lib/style-presets.d.ts.map +1 -0
  313. package/dist/lib/style-presets.js +62 -0
  314. package/dist/lib/style-presets.js.map +1 -0
  315. package/dist/lib/temp-url-resolver.d.ts +35 -0
  316. package/dist/lib/temp-url-resolver.d.ts.map +1 -0
  317. package/dist/lib/temp-url-resolver.js +88 -0
  318. package/dist/lib/temp-url-resolver.js.map +1 -0
  319. package/dist/lib/test-ui-run-routes.d.ts +8 -0
  320. package/dist/lib/test-ui-run-routes.d.ts.map +1 -0
  321. package/dist/lib/test-ui-run-routes.js +42 -0
  322. package/dist/lib/test-ui-run-routes.js.map +1 -0
  323. package/dist/lib/thumbnail.d.ts +74 -0
  324. package/dist/lib/thumbnail.d.ts.map +1 -0
  325. package/dist/lib/thumbnail.js +305 -0
  326. package/dist/lib/thumbnail.js.map +1 -0
  327. package/dist/lib/timeline-bundle.d.ts +1821 -0
  328. package/dist/lib/timeline-bundle.d.ts.map +1 -0
  329. package/dist/lib/timeline-bundle.js +342 -0
  330. package/dist/lib/timeline-bundle.js.map +1 -0
  331. package/dist/lib/video-proxy.d.ts +114 -0
  332. package/dist/lib/video-proxy.d.ts.map +1 -0
  333. package/dist/lib/video-proxy.js +546 -0
  334. package/dist/lib/video-proxy.js.map +1 -0
  335. package/dist/lib/wire-values.d.ts +31 -0
  336. package/dist/lib/wire-values.d.ts.map +1 -0
  337. package/dist/lib/wire-values.js +49 -0
  338. package/dist/lib/wire-values.js.map +1 -0
  339. package/dist/lib/workflow-bundle.d.ts +102 -0
  340. package/dist/lib/workflow-bundle.d.ts.map +1 -0
  341. package/dist/lib/workflow-bundle.js +306 -0
  342. package/dist/lib/workflow-bundle.js.map +1 -0
  343. package/dist/lib/workflow-service.d.ts +82 -0
  344. package/dist/lib/workflow-service.d.ts.map +1 -0
  345. package/dist/lib/workflow-service.js +197 -0
  346. package/dist/lib/workflow-service.js.map +1 -0
  347. package/dist/lib/workflow-workspace.d.ts +20 -0
  348. package/dist/lib/workflow-workspace.d.ts.map +1 -0
  349. package/dist/lib/workflow-workspace.js +65 -0
  350. package/dist/lib/workflow-workspace.js.map +1 -0
  351. package/dist/lib/ws-connection-health.d.ts +10 -0
  352. package/dist/lib/ws-connection-health.d.ts.map +1 -0
  353. package/dist/lib/ws-connection-health.js +38 -0
  354. package/dist/lib/ws-connection-health.js.map +1 -0
  355. package/dist/lib/ws-rate-limit.d.ts +22 -0
  356. package/dist/lib/ws-rate-limit.d.ts.map +1 -0
  357. package/dist/lib/ws-rate-limit.js +45 -0
  358. package/dist/lib/ws-rate-limit.js.map +1 -0
  359. package/dist/lib/ws-upgrade.d.ts +40 -0
  360. package/dist/lib/ws-upgrade.d.ts.map +1 -0
  361. package/dist/lib/ws-upgrade.js +66 -0
  362. package/dist/lib/ws-upgrade.js.map +1 -0
  363. package/dist/lib/zip-stream.d.ts +46 -0
  364. package/dist/lib/zip-stream.d.ts.map +1 -0
  365. package/dist/lib/zip-stream.js +140 -0
  366. package/dist/lib/zip-stream.js.map +1 -0
  367. package/dist/mcp-agent-tools.d.ts +56 -0
  368. package/dist/mcp-agent-tools.d.ts.map +1 -0
  369. package/dist/mcp-agent-tools.js +1147 -0
  370. package/dist/mcp-agent-tools.js.map +1 -0
  371. package/dist/mcp-client-config.d.ts +64 -0
  372. package/dist/mcp-client-config.d.ts.map +1 -0
  373. package/dist/mcp-client-config.js +353 -0
  374. package/dist/mcp-client-config.js.map +1 -0
  375. package/dist/mcp-server.d.ts +56 -7
  376. package/dist/mcp-server.d.ts.map +1 -1
  377. package/dist/mcp-server.js +255 -762
  378. package/dist/mcp-server.js.map +1 -1
  379. package/dist/mcp-tool-deps.d.ts +20 -0
  380. package/dist/mcp-tool-deps.d.ts.map +1 -0
  381. package/dist/mcp-tool-deps.js +61 -0
  382. package/dist/mcp-tool-deps.js.map +1 -0
  383. package/dist/messagepack.d.ts +7 -0
  384. package/dist/messagepack.d.ts.map +1 -0
  385. package/dist/messagepack.js +19 -0
  386. package/dist/messagepack.js.map +1 -0
  387. package/dist/model-download-runtime.d.ts +9 -0
  388. package/dist/model-download-runtime.d.ts.map +1 -0
  389. package/dist/model-download-runtime.js +77 -0
  390. package/dist/model-download-runtime.js.map +1 -0
  391. package/dist/model-execution-availability.d.ts +14 -0
  392. package/dist/model-execution-availability.d.ts.map +1 -0
  393. package/dist/model-execution-availability.js +161 -0
  394. package/dist/model-execution-availability.js.map +1 -0
  395. package/dist/models-api.d.ts +61 -5
  396. package/dist/models-api.d.ts.map +1 -1
  397. package/dist/models-api.js +182 -689
  398. package/dist/models-api.js.map +1 -1
  399. package/dist/node-registry-setup.d.ts +84 -0
  400. package/dist/node-registry-setup.d.ts.map +1 -0
  401. package/dist/node-registry-setup.js +163 -0
  402. package/dist/node-registry-setup.js.map +1 -0
  403. package/dist/oauth/cimd.d.ts +28 -0
  404. package/dist/oauth/cimd.d.ts.map +1 -0
  405. package/dist/oauth/cimd.js +177 -0
  406. package/dist/oauth/cimd.js.map +1 -0
  407. package/dist/oauth/gate.d.ts +38 -0
  408. package/dist/oauth/gate.d.ts.map +1 -0
  409. package/dist/oauth/gate.js +77 -0
  410. package/dist/oauth/gate.js.map +1 -0
  411. package/dist/oauth/metadata.d.ts +35 -0
  412. package/dist/oauth/metadata.d.ts.map +1 -0
  413. package/dist/oauth/metadata.js +56 -0
  414. package/dist/oauth/metadata.js.map +1 -0
  415. package/dist/oauth/pending-store.d.ts +79 -0
  416. package/dist/oauth/pending-store.d.ts.map +1 -0
  417. package/dist/oauth/pending-store.js +133 -0
  418. package/dist/oauth/pending-store.js.map +1 -0
  419. package/dist/oauth/pkce.d.ts +16 -0
  420. package/dist/oauth/pkce.d.ts.map +1 -0
  421. package/dist/oauth/pkce.js +29 -0
  422. package/dist/oauth/pkce.js.map +1 -0
  423. package/dist/oauth/validate.d.ts +25 -0
  424. package/dist/oauth/validate.d.ts.map +1 -0
  425. package/dist/oauth/validate.js +62 -0
  426. package/dist/oauth/validate.js.map +1 -0
  427. package/dist/oauth/www-authenticate.d.ts +9 -0
  428. package/dist/oauth/www-authenticate.d.ts.map +1 -0
  429. package/dist/oauth/www-authenticate.js +33 -0
  430. package/dist/oauth/www-authenticate.js.map +1 -0
  431. package/dist/oauth-api.d.ts +19 -0
  432. package/dist/oauth-api.d.ts.map +1 -1
  433. package/dist/oauth-api.js +531 -12
  434. package/dist/oauth-api.js.map +1 -1
  435. package/dist/openai-api.d.ts.map +1 -1
  436. package/dist/openai-api.js +4 -9
  437. package/dist/openai-api.js.map +1 -1
  438. package/dist/pack-snapshot.d.ts +24 -0
  439. package/dist/pack-snapshot.d.ts.map +1 -0
  440. package/dist/pack-snapshot.js +35 -0
  441. package/dist/pack-snapshot.js.map +1 -0
  442. package/dist/plugins/websocket.d.ts +21 -4
  443. package/dist/plugins/websocket.d.ts.map +1 -1
  444. package/dist/plugins/websocket.js +106 -297
  445. package/dist/plugins/websocket.js.map +1 -1
  446. package/dist/python-bridge-gate.d.ts +28 -0
  447. package/dist/python-bridge-gate.d.ts.map +1 -0
  448. package/dist/python-bridge-gate.js +36 -0
  449. package/dist/python-bridge-gate.js.map +1 -0
  450. package/dist/resolve-media-urls.d.ts +17 -3
  451. package/dist/resolve-media-urls.d.ts.map +1 -1
  452. package/dist/resolve-media-urls.js +117 -31
  453. package/dist/resolve-media-urls.js.map +1 -1
  454. package/dist/resource-events.d.ts +28 -0
  455. package/dist/resource-events.d.ts.map +1 -0
  456. package/dist/resource-events.js +20 -0
  457. package/dist/resource-events.js.map +1 -0
  458. package/dist/routes/account.d.ts +100 -0
  459. package/dist/routes/account.d.ts.map +1 -0
  460. package/dist/routes/account.js +197 -0
  461. package/dist/routes/account.js.map +1 -0
  462. package/dist/routes/app-runs.d.ts +4 -0
  463. package/dist/routes/app-runs.d.ts.map +1 -0
  464. package/dist/routes/app-runs.js +173 -0
  465. package/dist/routes/app-runs.js.map +1 -0
  466. package/dist/routes/applications.d.ts +36 -0
  467. package/dist/routes/applications.d.ts.map +1 -0
  468. package/dist/routes/applications.js +183 -0
  469. package/dist/routes/applications.js.map +1 -0
  470. package/dist/routes/assets.d.ts +3 -3
  471. package/dist/routes/assets.d.ts.map +1 -1
  472. package/dist/routes/assets.js +78 -44
  473. package/dist/routes/assets.js.map +1 -1
  474. package/dist/routes/atlascloud-webhook.d.ts +93 -0
  475. package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
  476. package/dist/routes/atlascloud-webhook.js +369 -0
  477. package/dist/routes/atlascloud-webhook.js.map +1 -0
  478. package/dist/routes/collections.d.ts.map +1 -1
  479. package/dist/routes/config.d.ts +26 -0
  480. package/dist/routes/config.d.ts.map +1 -0
  481. package/dist/routes/config.js +64 -0
  482. package/dist/routes/config.js.map +1 -0
  483. package/dist/routes/documents.d.ts +27 -0
  484. package/dist/routes/documents.d.ts.map +1 -0
  485. package/dist/routes/documents.js +155 -0
  486. package/dist/routes/documents.js.map +1 -0
  487. package/dist/routes/fal-credits.d.ts +4 -0
  488. package/dist/routes/fal-credits.d.ts.map +1 -0
  489. package/dist/routes/fal-credits.js +101 -0
  490. package/dist/routes/fal-credits.js.map +1 -0
  491. package/dist/routes/fal-pricing-estimate.d.ts +4 -0
  492. package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
  493. package/dist/routes/fal-pricing-estimate.js +114 -0
  494. package/dist/routes/fal-pricing-estimate.js.map +1 -0
  495. package/dist/routes/fal-pricing.d.ts +4 -0
  496. package/dist/routes/fal-pricing.d.ts.map +1 -0
  497. package/dist/routes/fal-pricing.js +93 -0
  498. package/dist/routes/fal-pricing.js.map +1 -0
  499. package/dist/routes/fal-webhook.d.ts +102 -0
  500. package/dist/routes/fal-webhook.d.ts.map +1 -0
  501. package/dist/routes/fal-webhook.js +379 -0
  502. package/dist/routes/fal-webhook.js.map +1 -0
  503. package/dist/routes/files.d.ts.map +1 -1
  504. package/dist/routes/files.js +4 -3
  505. package/dist/routes/files.js.map +1 -1
  506. package/dist/routes/health.d.ts +1 -0
  507. package/dist/routes/health.d.ts.map +1 -1
  508. package/dist/routes/health.js +41 -7
  509. package/dist/routes/health.js.map +1 -1
  510. package/dist/routes/integrations.d.ts +39 -0
  511. package/dist/routes/integrations.d.ts.map +1 -0
  512. package/dist/routes/integrations.js +211 -0
  513. package/dist/routes/integrations.js.map +1 -0
  514. package/dist/routes/js-scripts.d.ts +32 -0
  515. package/dist/routes/js-scripts.d.ts.map +1 -0
  516. package/dist/routes/js-scripts.js +498 -0
  517. package/dist/routes/js-scripts.js.map +1 -0
  518. package/dist/routes/kie-credits.d.ts +4 -0
  519. package/dist/routes/kie-credits.d.ts.map +1 -0
  520. package/dist/routes/kie-credits.js +93 -0
  521. package/dist/routes/kie-credits.js.map +1 -0
  522. package/dist/routes/kie-pricing.d.ts +4 -0
  523. package/dist/routes/kie-pricing.d.ts.map +1 -0
  524. package/dist/routes/kie-pricing.js +45 -0
  525. package/dist/routes/kie-pricing.js.map +1 -0
  526. package/dist/routes/kie-webhook.d.ts +4 -0
  527. package/dist/routes/kie-webhook.d.ts.map +1 -0
  528. package/dist/routes/kie-webhook.js +70 -0
  529. package/dist/routes/kie-webhook.js.map +1 -0
  530. package/dist/routes/nodes.d.ts.map +1 -1
  531. package/dist/routes/nodes.js +29 -51
  532. package/dist/routes/nodes.js.map +1 -1
  533. package/dist/routes/oauth-as.d.ts +30 -0
  534. package/dist/routes/oauth-as.d.ts.map +1 -0
  535. package/dist/routes/oauth-as.js +412 -0
  536. package/dist/routes/oauth-as.js.map +1 -0
  537. package/dist/routes/oauth.d.ts.map +1 -1
  538. package/dist/routes/openai.d.ts.map +1 -1
  539. package/dist/routes/public-apps.d.ts +27 -0
  540. package/dist/routes/public-apps.d.ts.map +1 -0
  541. package/dist/routes/public-apps.js +99 -0
  542. package/dist/routes/public-apps.js.map +1 -0
  543. package/dist/routes/public-shared-workflows.d.ts +16 -0
  544. package/dist/routes/public-shared-workflows.d.ts.map +1 -0
  545. package/dist/routes/public-shared-workflows.js +55 -0
  546. package/dist/routes/public-shared-workflows.js.map +1 -0
  547. package/dist/routes/run-spans.d.ts +4 -0
  548. package/dist/routes/run-spans.d.ts.map +1 -0
  549. package/dist/routes/run-spans.js +53 -0
  550. package/dist/routes/run-spans.js.map +1 -0
  551. package/dist/routes/sandbox-modules.d.ts +17 -0
  552. package/dist/routes/sandbox-modules.d.ts.map +1 -0
  553. package/dist/routes/sandbox-modules.js +85 -0
  554. package/dist/routes/sandbox-modules.js.map +1 -0
  555. package/dist/routes/sdk-v1.d.ts +24 -0
  556. package/dist/routes/sdk-v1.d.ts.map +1 -0
  557. package/dist/routes/sdk-v1.js +320 -0
  558. package/dist/routes/sdk-v1.js.map +1 -0
  559. package/dist/routes/storage.d.ts.map +1 -1
  560. package/dist/routes/storyboards.d.ts +16 -0
  561. package/dist/routes/storyboards.d.ts.map +1 -0
  562. package/dist/routes/storyboards.js +97 -0
  563. package/dist/routes/storyboards.js.map +1 -0
  564. package/dist/routes/timeline-animations.d.ts +23 -0
  565. package/dist/routes/timeline-animations.d.ts.map +1 -0
  566. package/dist/routes/timeline-animations.js +99 -0
  567. package/dist/routes/timeline-animations.js.map +1 -0
  568. package/dist/routes/timeline-audio-bake.d.ts +51 -0
  569. package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
  570. package/dist/routes/timeline-audio-bake.js +110 -0
  571. package/dist/routes/timeline-audio-bake.js.map +1 -0
  572. package/dist/routes/timeline-fonts.d.ts +51 -0
  573. package/dist/routes/timeline-fonts.d.ts.map +1 -0
  574. package/dist/routes/timeline-fonts.js +195 -0
  575. package/dist/routes/timeline-fonts.js.map +1 -0
  576. package/dist/routes/timeline-isolate-subject.d.ts +55 -0
  577. package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
  578. package/dist/routes/timeline-isolate-subject.js +128 -0
  579. package/dist/routes/timeline-isolate-subject.js.map +1 -0
  580. package/dist/routes/timeline-track-object.d.ts +39 -0
  581. package/dist/routes/timeline-track-object.d.ts.map +1 -0
  582. package/dist/routes/timeline-track-object.js +97 -0
  583. package/dist/routes/timeline-track-object.js.map +1 -0
  584. package/dist/routes/timelines.d.ts +18 -0
  585. package/dist/routes/timelines.d.ts.map +1 -0
  586. package/dist/routes/timelines.js +191 -0
  587. package/dist/routes/timelines.js.map +1 -0
  588. package/dist/routes/workflows.d.ts +6 -9
  589. package/dist/routes/workflows.d.ts.map +1 -1
  590. package/dist/routes/workflows.js +100 -11
  591. package/dist/routes/workflows.js.map +1 -1
  592. package/dist/routes/workspace.d.ts.map +1 -1
  593. package/dist/run-supervisor.d.ts +30 -0
  594. package/dist/run-supervisor.d.ts.map +1 -0
  595. package/dist/run-supervisor.js +86 -0
  596. package/dist/run-supervisor.js.map +1 -0
  597. package/dist/sandbox-catalog.d.ts +28 -0
  598. package/dist/sandbox-catalog.d.ts.map +1 -0
  599. package/dist/sandbox-catalog.js +74 -0
  600. package/dist/sandbox-catalog.js.map +1 -0
  601. package/dist/screenshot-projects.d.ts +27 -0
  602. package/dist/screenshot-projects.d.ts.map +1 -0
  603. package/dist/screenshot-projects.js +880 -0
  604. package/dist/screenshot-projects.js.map +1 -0
  605. package/dist/screenshot-server.js +950 -47
  606. package/dist/screenshot-server.js.map +1 -1
  607. package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
  608. package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
  609. package/dist/sdk/sdk-cached-model-inventory.js +51 -0
  610. package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
  611. package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
  612. package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
  613. package/dist/sdk/sdk-capabilities-service.js +47 -0
  614. package/dist/sdk/sdk-capabilities-service.js.map +1 -0
  615. package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
  616. package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
  617. package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
  618. package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
  619. package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
  620. package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
  621. package/dist/sdk/sdk-execution-target-readiness.js +50 -0
  622. package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
  623. package/dist/sdk/sdk-feature-flags.d.ts +18 -0
  624. package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
  625. package/dist/sdk/sdk-feature-flags.js +30 -0
  626. package/dist/sdk/sdk-feature-flags.js.map +1 -0
  627. package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
  628. package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
  629. package/dist/sdk/sdk-huggingface-download-state.js +25 -0
  630. package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
  631. package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
  632. package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
  633. package/dist/sdk/sdk-live-runner-registry.js +26 -0
  634. package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
  635. package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
  636. package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
  637. package/dist/sdk/sdk-model-catalog-service.js +219 -0
  638. package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
  639. package/dist/sdk/sdk-model-download-service.d.ts +39 -0
  640. package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
  641. package/dist/sdk/sdk-model-download-service.js +277 -0
  642. package/dist/sdk/sdk-model-download-service.js.map +1 -0
  643. package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
  644. package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
  645. package/dist/sdk/sdk-model-requirement-probe.js +120 -0
  646. package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
  647. package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
  648. package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
  649. package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
  650. package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
  651. package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
  652. package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
  653. package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
  654. package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
  655. package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
  656. package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
  657. package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
  658. package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
  659. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
  660. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
  661. package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
  662. package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
  663. package/dist/sdk/sdk-preflight-service.d.ts +61 -0
  664. package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
  665. package/dist/sdk/sdk-preflight-service.js +104 -0
  666. package/dist/sdk/sdk-preflight-service.js.map +1 -0
  667. package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
  668. package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
  669. package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
  670. package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
  671. package/dist/sdk/sdk-route-policy.d.ts +3 -0
  672. package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
  673. package/dist/sdk/sdk-route-policy.js +18 -0
  674. package/dist/sdk/sdk-route-policy.js.map +1 -0
  675. package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
  676. package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
  677. package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
  678. package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
  679. package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
  680. package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
  681. package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
  682. package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
  683. package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
  684. package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
  685. package/dist/sdk/sdk-static-preflight-service.js +492 -0
  686. package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
  687. package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
  688. package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
  689. package/dist/sdk/sdk-temporary-asset-service.js +33 -0
  690. package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
  691. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
  692. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
  693. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
  694. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
  695. package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
  696. package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
  697. package/dist/sdk/sdk-v1-handler-map.js +37 -0
  698. package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
  699. package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
  700. package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
  701. package/dist/sdk/sdk-v1-service-error.js +62 -0
  702. package/dist/sdk/sdk-v1-service-error.js.map +1 -0
  703. package/dist/sdk/sdk-v1-service.d.ts +74 -0
  704. package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
  705. package/dist/sdk/sdk-v1-service.js +219 -0
  706. package/dist/sdk/sdk-v1-service.js.map +1 -0
  707. package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
  708. package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
  709. package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
  710. package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
  711. package/dist/server.js +1091 -206
  712. package/dist/server.js.map +1 -1
  713. package/dist/session/app-run-fold.d.ts +7 -0
  714. package/dist/session/app-run-fold.d.ts.map +1 -0
  715. package/dist/session/app-run-fold.js +45 -0
  716. package/dist/session/app-run-fold.js.map +1 -0
  717. package/dist/session/asset-autosave.d.ts +80 -0
  718. package/dist/session/asset-autosave.d.ts.map +1 -0
  719. package/dist/session/asset-autosave.js +456 -0
  720. package/dist/session/asset-autosave.js.map +1 -0
  721. package/dist/session/chat-compaction.d.ts +107 -0
  722. package/dist/session/chat-compaction.d.ts.map +1 -0
  723. package/dist/session/chat-compaction.js +191 -0
  724. package/dist/session/chat-compaction.js.map +1 -0
  725. package/dist/session/chat-history.d.ts +75 -0
  726. package/dist/session/chat-history.d.ts.map +1 -0
  727. package/dist/session/chat-history.js +194 -0
  728. package/dist/session/chat-history.js.map +1 -0
  729. package/dist/session/chat-prompt.d.ts +45 -0
  730. package/dist/session/chat-prompt.d.ts.map +1 -0
  731. package/dist/session/chat-prompt.js +502 -0
  732. package/dist/session/chat-prompt.js.map +1 -0
  733. package/dist/session/chat-turn.d.ts +337 -0
  734. package/dist/session/chat-turn.d.ts.map +1 -0
  735. package/dist/session/chat-turn.js +3612 -0
  736. package/dist/session/chat-turn.js.map +1 -0
  737. package/dist/session/client-session.d.ts +59 -0
  738. package/dist/session/client-session.d.ts.map +1 -0
  739. package/dist/session/client-session.js +2 -0
  740. package/dist/session/client-session.js.map +1 -0
  741. package/dist/session/commands.d.ts +133 -0
  742. package/dist/session/commands.d.ts.map +1 -0
  743. package/dist/session/commands.js +784 -0
  744. package/dist/session/commands.js.map +1 -0
  745. package/dist/session/inference.d.ts +218 -0
  746. package/dist/session/inference.d.ts.map +1 -0
  747. package/dist/session/inference.js +1143 -0
  748. package/dist/session/inference.js.map +1 -0
  749. package/dist/session/job-execution.d.ts +484 -0
  750. package/dist/session/job-execution.d.ts.map +1 -0
  751. package/dist/session/job-execution.js +2379 -0
  752. package/dist/session/job-execution.js.map +1 -0
  753. package/dist/session/media-generation.d.ts +94 -0
  754. package/dist/session/media-generation.d.ts.map +1 -0
  755. package/dist/session/media-generation.js +234 -0
  756. package/dist/session/media-generation.js.map +1 -0
  757. package/dist/session/model-interfaces.d.ts +28 -0
  758. package/dist/session/model-interfaces.d.ts.map +1 -0
  759. package/dist/session/model-interfaces.js +133 -0
  760. package/dist/session/model-interfaces.js.map +1 -0
  761. package/dist/session/sanitize.d.ts +7 -0
  762. package/dist/session/sanitize.d.ts.map +1 -0
  763. package/dist/session/sanitize.js +64 -0
  764. package/dist/session/sanitize.js.map +1 -0
  765. package/dist/settings-registry.d.ts +6 -15
  766. package/dist/settings-registry.d.ts.map +1 -1
  767. package/dist/settings-registry.js +6 -103
  768. package/dist/settings-registry.js.map +1 -1
  769. package/dist/storage-api.d.ts +20 -0
  770. package/dist/storage-api.d.ts.map +1 -1
  771. package/dist/storage-api.js +260 -77
  772. package/dist/storage-api.js.map +1 -1
  773. package/dist/storage-retention.d.ts +14 -0
  774. package/dist/storage-retention.d.ts.map +1 -0
  775. package/dist/storage-retention.js +95 -0
  776. package/dist/storage-retention.js.map +1 -0
  777. package/dist/system-stats.d.ts +52 -0
  778. package/dist/system-stats.d.ts.map +1 -0
  779. package/dist/system-stats.js +134 -0
  780. package/dist/system-stats.js.map +1 -0
  781. package/dist/test-ui-server.d.ts +46 -0
  782. package/dist/test-ui-server.d.ts.map +1 -1
  783. package/dist/test-ui-server.js +207 -42
  784. package/dist/test-ui-server.js.map +1 -1
  785. package/dist/timeline-generation-recovery.d.ts +4 -0
  786. package/dist/timeline-generation-recovery.d.ts.map +1 -0
  787. package/dist/timeline-generation-recovery.js +72 -0
  788. package/dist/timeline-generation-recovery.js.map +1 -0
  789. package/dist/triggers/boot.d.ts +73 -0
  790. package/dist/triggers/boot.d.ts.map +1 -0
  791. package/dist/triggers/boot.js +149 -0
  792. package/dist/triggers/boot.js.map +1 -0
  793. package/dist/triggers/dispatcher.d.ts +234 -0
  794. package/dist/triggers/dispatcher.d.ts.map +1 -0
  795. package/dist/triggers/dispatcher.js +525 -0
  796. package/dist/triggers/dispatcher.js.map +1 -0
  797. package/dist/triggers/file-watch.d.ts +90 -0
  798. package/dist/triggers/file-watch.d.ts.map +1 -0
  799. package/dist/triggers/file-watch.js +405 -0
  800. package/dist/triggers/file-watch.js.map +1 -0
  801. package/dist/triggers/registration-sync.d.ts +34 -0
  802. package/dist/triggers/registration-sync.d.ts.map +1 -0
  803. package/dist/triggers/registration-sync.js +162 -0
  804. package/dist/triggers/registration-sync.js.map +1 -0
  805. package/dist/triggers/schedule-timing.d.ts +52 -0
  806. package/dist/triggers/schedule-timing.d.ts.map +1 -0
  807. package/dist/triggers/schedule-timing.js +90 -0
  808. package/dist/triggers/schedule-timing.js.map +1 -0
  809. package/dist/triggers/scheduler.d.ts +55 -0
  810. package/dist/triggers/scheduler.d.ts.map +1 -0
  811. package/dist/triggers/scheduler.js +122 -0
  812. package/dist/triggers/scheduler.js.map +1 -0
  813. package/dist/triggers/settle.d.ts +66 -0
  814. package/dist/triggers/settle.d.ts.map +1 -0
  815. package/dist/triggers/settle.js +99 -0
  816. package/dist/triggers/settle.js.map +1 -0
  817. package/dist/triggers/stores.d.ts +38 -0
  818. package/dist/triggers/stores.d.ts.map +1 -0
  819. package/dist/triggers/stores.js +168 -0
  820. package/dist/triggers/stores.js.map +1 -0
  821. package/dist/triggers/webhook-route.d.ts +49 -0
  822. package/dist/triggers/webhook-route.d.ts.map +1 -0
  823. package/dist/triggers/webhook-route.js +148 -0
  824. package/dist/triggers/webhook-route.js.map +1 -0
  825. package/dist/trpc/context.d.ts +52 -5
  826. package/dist/trpc/context.d.ts.map +1 -1
  827. package/dist/trpc/context.js +4 -1
  828. package/dist/trpc/context.js.map +1 -1
  829. package/dist/trpc/error-formatter.d.ts.map +1 -1
  830. package/dist/trpc/error-formatter.js +23 -2
  831. package/dist/trpc/error-formatter.js.map +1 -1
  832. package/dist/trpc/error-logging.d.ts +24 -0
  833. package/dist/trpc/error-logging.d.ts.map +1 -0
  834. package/dist/trpc/error-logging.js +48 -0
  835. package/dist/trpc/error-logging.js.map +1 -0
  836. package/dist/trpc/index.d.ts +2 -2
  837. package/dist/trpc/index.d.ts.map +1 -1
  838. package/dist/trpc/index.js +0 -2
  839. package/dist/trpc/index.js.map +1 -1
  840. package/dist/trpc/middleware.d.ts +6 -3
  841. package/dist/trpc/middleware.d.ts.map +1 -1
  842. package/dist/trpc/router.d.ts +100 -2540
  843. package/dist/trpc/router.d.ts.map +1 -1
  844. package/dist/trpc/router.js +58 -6
  845. package/dist/trpc/router.js.map +1 -1
  846. package/dist/trpc/routers/agent-access.d.ts +149 -0
  847. package/dist/trpc/routers/agent-access.d.ts.map +1 -0
  848. package/dist/trpc/routers/agent-access.js +224 -0
  849. package/dist/trpc/routers/agent-access.js.map +1 -0
  850. package/dist/trpc/routers/app-instances.d.ts +2269 -0
  851. package/dist/trpc/routers/app-instances.d.ts.map +1 -0
  852. package/dist/trpc/routers/app-instances.js +52 -0
  853. package/dist/trpc/routers/app-instances.js.map +1 -0
  854. package/dist/trpc/routers/app-runs.d.ts +1092 -0
  855. package/dist/trpc/routers/app-runs.d.ts.map +1 -0
  856. package/dist/trpc/routers/app-runs.js +28 -0
  857. package/dist/trpc/routers/app-runs.js.map +1 -0
  858. package/dist/trpc/routers/applications.d.ts +2212 -0
  859. package/dist/trpc/routers/applications.d.ts.map +1 -0
  860. package/dist/trpc/routers/applications.js +221 -0
  861. package/dist/trpc/routers/applications.js.map +1 -0
  862. package/dist/trpc/routers/assets.d.ts +194 -42
  863. package/dist/trpc/routers/assets.d.ts.map +1 -1
  864. package/dist/trpc/routers/assets.js +503 -105
  865. package/dist/trpc/routers/assets.js.map +1 -1
  866. package/dist/trpc/routers/bug-reports.d.ts +33 -0
  867. package/dist/trpc/routers/bug-reports.d.ts.map +1 -0
  868. package/dist/trpc/routers/bug-reports.js +69 -0
  869. package/dist/trpc/routers/bug-reports.js.map +1 -0
  870. package/dist/trpc/routers/code-gen.d.ts +99 -0
  871. package/dist/trpc/routers/code-gen.d.ts.map +1 -0
  872. package/dist/trpc/routers/code-gen.js +164 -0
  873. package/dist/trpc/routers/code-gen.js.map +1 -0
  874. package/dist/trpc/routers/collections.d.ts +1 -26
  875. package/dist/trpc/routers/collections.d.ts.map +1 -1
  876. package/dist/trpc/routers/collections.js +145 -78
  877. package/dist/trpc/routers/collections.js.map +1 -1
  878. package/dist/trpc/routers/costs.d.ts +40 -96
  879. package/dist/trpc/routers/costs.d.ts.map +1 -1
  880. package/dist/trpc/routers/costs.js +14 -89
  881. package/dist/trpc/routers/costs.js.map +1 -1
  882. package/dist/trpc/routers/credits.d.ts +110 -0
  883. package/dist/trpc/routers/credits.d.ts.map +1 -0
  884. package/dist/trpc/routers/credits.js +69 -0
  885. package/dist/trpc/routers/credits.js.map +1 -0
  886. package/dist/trpc/routers/custom-providers.d.ts +88 -0
  887. package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
  888. package/dist/trpc/routers/custom-providers.js +140 -0
  889. package/dist/trpc/routers/custom-providers.js.map +1 -0
  890. package/dist/trpc/routers/documents.d.ts +61 -0
  891. package/dist/trpc/routers/documents.d.ts.map +1 -0
  892. package/dist/trpc/routers/documents.js +29 -0
  893. package/dist/trpc/routers/documents.js.map +1 -0
  894. package/dist/trpc/routers/error-traces.d.ts +132 -0
  895. package/dist/trpc/routers/error-traces.d.ts.map +1 -0
  896. package/dist/trpc/routers/error-traces.js +118 -0
  897. package/dist/trpc/routers/error-traces.js.map +1 -0
  898. package/dist/trpc/routers/extension.d.ts +24 -0
  899. package/dist/trpc/routers/extension.d.ts.map +1 -0
  900. package/dist/trpc/routers/extension.js +28 -0
  901. package/dist/trpc/routers/extension.js.map +1 -0
  902. package/dist/trpc/routers/external-mcp.d.ts +108 -0
  903. package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
  904. package/dist/trpc/routers/external-mcp.js +70 -0
  905. package/dist/trpc/routers/external-mcp.js.map +1 -0
  906. package/dist/trpc/routers/files.d.ts +9 -2
  907. package/dist/trpc/routers/files.d.ts.map +1 -1
  908. package/dist/trpc/routers/files.js +67 -37
  909. package/dist/trpc/routers/files.js.map +1 -1
  910. package/dist/trpc/routers/fonts.d.ts +30 -0
  911. package/dist/trpc/routers/fonts.d.ts.map +1 -0
  912. package/dist/trpc/routers/fonts.js +112 -0
  913. package/dist/trpc/routers/fonts.js.map +1 -0
  914. package/dist/trpc/routers/gameDraftHistory.d.ts +8 -0
  915. package/dist/trpc/routers/gameDraftHistory.d.ts.map +1 -0
  916. package/dist/trpc/routers/gameDraftHistory.js +40 -0
  917. package/dist/trpc/routers/gameDraftHistory.js.map +1 -0
  918. package/dist/trpc/routers/games.d.ts +26502 -0
  919. package/dist/trpc/routers/games.d.ts.map +1 -0
  920. package/dist/trpc/routers/games.js +674 -0
  921. package/dist/trpc/routers/games.js.map +1 -0
  922. package/dist/trpc/routers/integrations.d.ts +86 -0
  923. package/dist/trpc/routers/integrations.d.ts.map +1 -0
  924. package/dist/trpc/routers/integrations.js +129 -0
  925. package/dist/trpc/routers/integrations.js.map +1 -0
  926. package/dist/trpc/routers/jobs.d.ts +117 -21
  927. package/dist/trpc/routers/jobs.d.ts.map +1 -1
  928. package/dist/trpc/routers/jobs.js +191 -30
  929. package/dist/trpc/routers/jobs.js.map +1 -1
  930. package/dist/trpc/routers/js-scripts.d.ts +410 -0
  931. package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
  932. package/dist/trpc/routers/js-scripts.js +303 -0
  933. package/dist/trpc/routers/js-scripts.js.map +1 -0
  934. package/dist/trpc/routers/mcp-config.d.ts +4 -2
  935. package/dist/trpc/routers/mcp-config.d.ts.map +1 -1
  936. package/dist/trpc/routers/mcp-config.js +46 -206
  937. package/dist/trpc/routers/mcp-config.js.map +1 -1
  938. package/dist/trpc/routers/memories.d.ts +79 -0
  939. package/dist/trpc/routers/memories.d.ts.map +1 -0
  940. package/dist/trpc/routers/memories.js +66 -0
  941. package/dist/trpc/routers/memories.js.map +1 -0
  942. package/dist/trpc/routers/messages.d.ts +4 -77
  943. package/dist/trpc/routers/messages.d.ts.map +1 -1
  944. package/dist/trpc/routers/messages.js +9 -58
  945. package/dist/trpc/routers/messages.js.map +1 -1
  946. package/dist/trpc/routers/models.d.ts +1544 -249
  947. package/dist/trpc/routers/models.d.ts.map +1 -1
  948. package/dist/trpc/routers/models.js +624 -318
  949. package/dist/trpc/routers/models.js.map +1 -1
  950. package/dist/trpc/routers/nodes.d.ts +32 -16
  951. package/dist/trpc/routers/nodes.d.ts.map +1 -1
  952. package/dist/trpc/routers/nodes.js +70 -31
  953. package/dist/trpc/routers/nodes.js.map +1 -1
  954. package/dist/trpc/routers/packs.d.ts +184 -0
  955. package/dist/trpc/routers/packs.d.ts.map +1 -0
  956. package/dist/trpc/routers/packs.js +259 -0
  957. package/dist/trpc/routers/packs.js.map +1 -0
  958. package/dist/trpc/routers/projects.d.ts +422 -0
  959. package/dist/trpc/routers/projects.d.ts.map +1 -0
  960. package/dist/trpc/routers/projects.js +373 -0
  961. package/dist/trpc/routers/projects.js.map +1 -0
  962. package/dist/trpc/routers/resources.d.ts +120 -0
  963. package/dist/trpc/routers/resources.d.ts.map +1 -0
  964. package/dist/trpc/routers/resources.js +212 -0
  965. package/dist/trpc/routers/resources.js.map +1 -0
  966. package/dist/trpc/routers/runs.d.ts +472 -0
  967. package/dist/trpc/routers/runs.d.ts.map +1 -0
  968. package/dist/trpc/routers/runs.js +40 -0
  969. package/dist/trpc/routers/runs.js.map +1 -0
  970. package/dist/trpc/routers/scripts.d.ts +1116 -0
  971. package/dist/trpc/routers/scripts.d.ts.map +1 -0
  972. package/dist/trpc/routers/scripts.js +131 -0
  973. package/dist/trpc/routers/scripts.js.map +1 -0
  974. package/dist/trpc/routers/segmentation.d.ts +62 -0
  975. package/dist/trpc/routers/segmentation.d.ts.map +1 -0
  976. package/dist/trpc/routers/segmentation.js +146 -0
  977. package/dist/trpc/routers/segmentation.js.map +1 -0
  978. package/dist/trpc/routers/settings.d.ts +180 -10
  979. package/dist/trpc/routers/settings.d.ts.map +1 -1
  980. package/dist/trpc/routers/settings.js +125 -33
  981. package/dist/trpc/routers/settings.js.map +1 -1
  982. package/dist/trpc/routers/sketch.d.ts +868 -0
  983. package/dist/trpc/routers/sketch.d.ts.map +1 -0
  984. package/dist/trpc/routers/sketch.js +617 -0
  985. package/dist/trpc/routers/sketch.js.map +1 -0
  986. package/dist/trpc/routers/skills.d.ts +76 -22
  987. package/dist/trpc/routers/skills.d.ts.map +1 -1
  988. package/dist/trpc/routers/skills.js +195 -170
  989. package/dist/trpc/routers/skills.js.map +1 -1
  990. package/dist/trpc/routers/storage.d.ts +3 -30
  991. package/dist/trpc/routers/storage.d.ts.map +1 -1
  992. package/dist/trpc/routers/storage.js +60 -117
  993. package/dist/trpc/routers/storage.js.map +1 -1
  994. package/dist/trpc/routers/storyboards.d.ts +6639 -0
  995. package/dist/trpc/routers/storyboards.d.ts.map +1 -0
  996. package/dist/trpc/routers/storyboards.js +156 -0
  997. package/dist/trpc/routers/storyboards.js.map +1 -0
  998. package/dist/trpc/routers/threads.d.ts +33 -21
  999. package/dist/trpc/routers/threads.d.ts.map +1 -1
  1000. package/dist/trpc/routers/threads.js +36 -30
  1001. package/dist/trpc/routers/threads.js.map +1 -1
  1002. package/dist/trpc/routers/timeline.d.ts +9085 -0
  1003. package/dist/trpc/routers/timeline.d.ts.map +1 -0
  1004. package/dist/trpc/routers/timeline.js +669 -0
  1005. package/dist/trpc/routers/timeline.js.map +1 -0
  1006. package/dist/trpc/routers/triggers.d.ts +46 -0
  1007. package/dist/trpc/routers/triggers.d.ts.map +1 -0
  1008. package/dist/trpc/routers/triggers.js +117 -0
  1009. package/dist/trpc/routers/triggers.js.map +1 -0
  1010. package/dist/trpc/routers/users.d.ts +1 -14
  1011. package/dist/trpc/routers/users.d.ts.map +1 -1
  1012. package/dist/trpc/routers/users.js +1 -12
  1013. package/dist/trpc/routers/users.js.map +1 -1
  1014. package/dist/trpc/routers/worker.d.ts +243 -0
  1015. package/dist/trpc/routers/worker.d.ts.map +1 -0
  1016. package/dist/trpc/routers/worker.js +221 -0
  1017. package/dist/trpc/routers/worker.js.map +1 -0
  1018. package/dist/trpc/routers/workflows.d.ts +428 -187
  1019. package/dist/trpc/routers/workflows.d.ts.map +1 -1
  1020. package/dist/trpc/routers/workflows.js +347 -345
  1021. package/dist/trpc/routers/workflows.js.map +1 -1
  1022. package/dist/trpc/routers/workspace.d.ts +59 -33
  1023. package/dist/trpc/routers/workspace.d.ts.map +1 -1
  1024. package/dist/trpc/routers/workspace.js +230 -93
  1025. package/dist/trpc/routers/workspace.js.map +1 -1
  1026. package/dist/trpc/sandbox-coverage.d.ts +64 -0
  1027. package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
  1028. package/dist/trpc/sandbox-coverage.js +1139 -0
  1029. package/dist/trpc/sandbox-coverage.js.map +1 -0
  1030. package/dist/websocket-client-session.d.ts +322 -0
  1031. package/dist/websocket-client-session.d.ts.map +1 -0
  1032. package/dist/websocket-client-session.js +1267 -0
  1033. package/dist/websocket-client-session.js.map +1 -0
  1034. package/dist/workflow-interface-service.d.ts +87 -0
  1035. package/dist/workflow-interface-service.d.ts.map +1 -0
  1036. package/dist/workflow-interface-service.js +131 -0
  1037. package/dist/workflow-interface-service.js.map +1 -0
  1038. package/dist/workspace-api.d.ts.map +1 -1
  1039. package/dist/workspace-api.js +33 -23
  1040. package/dist/workspace-api.js.map +1 -1
  1041. package/dist/ws-adapter.d.ts +46 -3
  1042. package/dist/ws-adapter.d.ts.map +1 -1
  1043. package/dist/ws-adapter.js +164 -26
  1044. package/dist/ws-adapter.js.map +1 -1
  1045. package/package.json +97 -36
  1046. package/dist/agent/agent-runtime.d.ts +0 -47
  1047. package/dist/agent/agent-runtime.d.ts.map +0 -1
  1048. package/dist/agent/agent-runtime.js +0 -579
  1049. package/dist/agent/agent-runtime.js.map +0 -1
  1050. package/dist/agent/codex-agent.d.ts +0 -41
  1051. package/dist/agent/codex-agent.d.ts.map +0 -1
  1052. package/dist/agent/codex-agent.js +0 -334
  1053. package/dist/agent/codex-agent.js.map +0 -1
  1054. package/dist/agent/index.d.ts +0 -6
  1055. package/dist/agent/index.d.ts.map +0 -1
  1056. package/dist/agent/index.js +0 -4
  1057. package/dist/agent/index.js.map +0 -1
  1058. package/dist/agent/llm-agent.d.ts +0 -51
  1059. package/dist/agent/llm-agent.d.ts.map +0 -1
  1060. package/dist/agent/llm-agent.js +0 -526
  1061. package/dist/agent/llm-agent.js.map +0 -1
  1062. package/dist/agent/mcp-tool-server.d.ts +0 -33
  1063. package/dist/agent/mcp-tool-server.d.ts.map +0 -1
  1064. package/dist/agent/mcp-tool-server.js +0 -292
  1065. package/dist/agent/mcp-tool-server.js.map +0 -1
  1066. package/dist/agent/opencode-agent.d.ts +0 -32
  1067. package/dist/agent/opencode-agent.d.ts.map +0 -1
  1068. package/dist/agent/opencode-agent.js +0 -332
  1069. package/dist/agent/opencode-agent.js.map +0 -1
  1070. package/dist/agent/pi-agent.d.ts +0 -42
  1071. package/dist/agent/pi-agent.d.ts.map +0 -1
  1072. package/dist/agent/pi-agent.js +0 -429
  1073. package/dist/agent/pi-agent.js.map +0 -1
  1074. package/dist/agent/sdk-provider.d.ts +0 -46
  1075. package/dist/agent/sdk-provider.d.ts.map +0 -1
  1076. package/dist/agent/sdk-provider.js +0 -50
  1077. package/dist/agent/sdk-provider.js.map +0 -1
  1078. package/dist/agent/socket-route.d.ts +0 -11
  1079. package/dist/agent/socket-route.d.ts.map +0 -1
  1080. package/dist/agent/socket-route.js +0 -262
  1081. package/dist/agent/socket-route.js.map +0 -1
  1082. package/dist/agent/transport.d.ts +0 -39
  1083. package/dist/agent/transport.d.ts.map +0 -1
  1084. package/dist/agent/transport.js +0 -17
  1085. package/dist/agent/transport.js.map +0 -1
  1086. package/dist/agent/types.d.ts +0 -11
  1087. package/dist/agent/types.d.ts.map +0 -1
  1088. package/dist/agent/types.js +0 -10
  1089. package/dist/agent/types.js.map +0 -1
  1090. package/dist/routes/jobs.d.ts +0 -16
  1091. package/dist/routes/jobs.d.ts.map +0 -1
  1092. package/dist/routes/jobs.js +0 -25
  1093. package/dist/routes/jobs.js.map +0 -1
  1094. package/dist/trpc/routers/sandboxes.d.ts +0 -64
  1095. package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
  1096. package/dist/trpc/routers/sandboxes.js +0 -327
  1097. package/dist/trpc/routers/sandboxes.js.map +0 -1
  1098. package/dist/unified-websocket-runner.d.ts +0 -280
  1099. package/dist/unified-websocket-runner.d.ts.map +0 -1
  1100. package/dist/unified-websocket-runner.js +0 -3840
  1101. package/dist/unified-websocket-runner.js.map +0 -1
@@ -17,18 +17,21 @@
17
17
  * PORT — TCP port to listen on (default: 7777)
18
18
  * HOST — bind address (default: 127.0.0.1)
19
19
  */
20
- import { initTestDb, getDb, Workflow, Thread, Message, Asset, secrets } from "@nodetool-ai/models";
20
+ import { initTestDb, getPortableDb, Application, Workflow, Thread, Message, Asset, ImageDocument, TimelineSequence, Storyboard, secrets, closeDb } from "@nodetool-ai/models";
21
21
  import { initMasterKey, encryptFernet, getMasterKey } from "@nodetool-ai/security";
22
22
  import { createTestUiServer } from "./test-ui-server.js";
23
- import { resolve, dirname } from "node:path";
23
+ import { seedProjects } from "./screenshot-projects.js";
24
+ import { createFakeExecutorResolver, fakeAllProviders, resolveFakeProvider } from "./fake-runtime.js";
25
+ import { resolve, dirname, join } from "node:path";
24
26
  import { fileURLToPath } from "node:url";
25
- import { existsSync } from "node:fs";
27
+ import { existsSync, mkdtempSync, rmSync } from "node:fs";
28
+ import { tmpdir } from "node:os";
26
29
  const __dirname = dirname(fileURLToPath(import.meta.url));
27
30
  const USER_ID = "1";
28
31
  const PORT = Number(process.env.PORT ?? 7777);
29
32
  const HOST = process.env.HOST ?? "127.0.0.1";
30
33
  // ── Mock data ─────────────────────────────────────────────────────────────────
31
- function makeWorkflow(id, name, description, tags, updatedAt, access = "private") {
34
+ function makeWorkflow(id, name, description, tags, updatedAt, access = "private", graph = { nodes: [], edges: [] }, appDoc = null) {
32
35
  return {
33
36
  id,
34
37
  user_id: USER_ID,
@@ -40,30 +43,237 @@ function makeWorkflow(id, name, description, tags, updatedAt, access = "private"
40
43
  tags,
41
44
  thumbnail: null,
42
45
  thumbnail_url: null,
43
- graph: { nodes: [], edges: [] },
46
+ graph,
44
47
  settings: null,
45
48
  package_name: null,
46
49
  path: null,
47
50
  run_mode: "workflow",
48
51
  workspace_id: null,
49
- html_app: null
52
+ html_app: null,
53
+ app_doc: appDoc
50
54
  };
51
55
  }
56
+ /**
57
+ * A deliberately tiny mini-app fixture for the user-journey suite: a
58
+ * `StringInput → Output` graph plus an app document that binds a text input, a
59
+ * Run button and an Output widget to it.
60
+ *
61
+ * Everything here runs for real on the kernel (input and output nodes are
62
+ * structural, and there is nothing else in the graph), so whatever the test
63
+ * types is exactly what the Output widget must display. That makes the mini-app
64
+ * journey a true end-to-end assertion — params in, run triggered, streamed
65
+ * result folded back into the widget — with no provider, network or fake in the
66
+ * path to soften a regression.
67
+ */
68
+ const MINI_APP_GRAPH = {
69
+ nodes: [
70
+ {
71
+ id: "prompt_input",
72
+ type: "nodetool.input.StringInput",
73
+ data: {
74
+ name: "prompt",
75
+ value: "hello journey",
76
+ description: "Text echoed back by the app"
77
+ },
78
+ // Kept clear of the editor's left icon rail so the journey suite can
79
+ // click node fields without the rail intercepting pointer events.
80
+ ui_properties: { position: { x: 560, y: 200 }, width: 320 }
81
+ },
82
+ {
83
+ id: "result_output",
84
+ type: "nodetool.output.Output",
85
+ data: { name: "result" },
86
+ ui_properties: { position: { x: 1020, y: 200 }, width: 280 }
87
+ }
88
+ ],
89
+ edges: [
90
+ {
91
+ id: "edge-mini-app",
92
+ source: "prompt_input",
93
+ sourceHandle: "output",
94
+ target: "result_output",
95
+ targetHandle: "value"
96
+ }
97
+ ]
98
+ };
99
+ const MINI_APP_DOC = {
100
+ schemaVersion: 3,
101
+ ui: {
102
+ root: { props: { title: "Echo Mini App" } },
103
+ content: [
104
+ {
105
+ type: "Container",
106
+ props: {
107
+ id: "panel-main",
108
+ title: "Echo",
109
+ content: [
110
+ {
111
+ type: "WorkflowInput",
112
+ props: {
113
+ id: "in-prompt",
114
+ binding: "op:main/in:prompt_input",
115
+ events: []
116
+ }
117
+ },
118
+ {
119
+ type: "Button",
120
+ props: {
121
+ id: "btn-run",
122
+ label: "Run echo",
123
+ variant: "contained",
124
+ color: "primary",
125
+ events: [{ trigger: "click", kind: "run", key: "", value: "" }]
126
+ }
127
+ },
128
+ {
129
+ type: "Output",
130
+ props: {
131
+ id: "out-result",
132
+ binding: "op:main/out:result_output",
133
+ placeholder: "Your result appears here"
134
+ }
135
+ }
136
+ ]
137
+ }
138
+ }
139
+ ],
140
+ zones: {}
141
+ },
142
+ operations: [
143
+ {
144
+ id: "main",
145
+ name: "Run",
146
+ workflowId: "wf-mini-app",
147
+ inputs: {},
148
+ outputs: {},
149
+ policy: "replace"
150
+ }
151
+ ],
152
+ resources: [],
153
+ variables: []
154
+ };
155
+ /**
156
+ * The mini app as its own `applications` row.
157
+ *
158
+ * An app used to be a workflow — its document lived on `workflow.app_doc` and
159
+ * ran at `/apps/<workflowId>`. Apps are their own resource now: they are opened
160
+ * as a workspace tab and their operations name the workflows they bind. The
161
+ * journey suite drives that surface, so the fixture is an application row whose
162
+ * one operation points at `wf-mini-app`.
163
+ */
164
+ const MOCK_APPLICATIONS = [
165
+ {
166
+ id: "app-mini-app",
167
+ user_id: USER_ID,
168
+ project_id: "personal:1",
169
+ name: "Echo Mini App",
170
+ description: "Deterministic mini app used by the user-journey suite: echoes its input to an Output widget",
171
+ document: JSON.stringify(MINI_APP_DOC),
172
+ created_at: "2024-09-01T09:00:00Z",
173
+ updated_at: "2024-12-14T10:00:00Z"
174
+ }
175
+ ];
176
+ // Use real node types registered by @nodetool-ai/base-nodes so the editor
177
+ // renders nodes instead of crashing on unknown types.
178
+ const STORY_GRAPH = {
179
+ nodes: [
180
+ {
181
+ id: "input-topic",
182
+ type: "nodetool.input.StringInput",
183
+ data: {
184
+ name: "topic",
185
+ label: "Topic",
186
+ value: "Two robots discover they can dream"
187
+ },
188
+ ui_properties: { position: { x: 0, y: 0 }, width: 320 }
189
+ },
190
+ {
191
+ id: "input-style",
192
+ type: "nodetool.input.StringInput",
193
+ data: {
194
+ name: "style",
195
+ label: "Style",
196
+ value: "Heartwarming sci-fi short story"
197
+ },
198
+ ui_properties: { position: { x: 0, y: 220 }, width: 320 }
199
+ },
200
+ {
201
+ id: "agent-main",
202
+ type: "nodetool.agents.Agent",
203
+ data: {
204
+ objective: "Write a concise short story matching the supplied topic and style."
205
+ },
206
+ ui_properties: { position: { x: 460, y: 100 }, width: 360 }
207
+ },
208
+ {
209
+ id: "preview-output",
210
+ type: "nodetool.workflows.base_node.Preview",
211
+ data: {},
212
+ ui_properties: { position: { x: 900, y: 80 }, width: 280 }
213
+ },
214
+ {
215
+ id: "output-story",
216
+ type: "nodetool.output.Output",
217
+ data: {
218
+ name: "story",
219
+ description: "The generated short story"
220
+ },
221
+ ui_properties: { position: { x: 900, y: 280 }, width: 280 }
222
+ }
223
+ ],
224
+ edges: [
225
+ {
226
+ id: "edge-topic",
227
+ source: "input-topic",
228
+ sourceHandle: "output",
229
+ target: "agent-main",
230
+ targetHandle: "objective"
231
+ },
232
+ {
233
+ id: "edge-preview",
234
+ source: "agent-main",
235
+ sourceHandle: "output",
236
+ target: "preview-output",
237
+ targetHandle: "value"
238
+ },
239
+ {
240
+ id: "edge-output",
241
+ source: "agent-main",
242
+ sourceHandle: "output",
243
+ target: "output-story",
244
+ targetHandle: "value"
245
+ }
246
+ ]
247
+ };
52
248
  const MOCK_WORKFLOWS = [
53
- makeWorkflow("wf-story-generator", "Creative Story Generator", "Generate imaginative short stories with customizable themes, characters, and narrative styles using GPT-4o", ["creative", "text", "ai", "gpt"], "2024-12-15T11:30:00Z"),
249
+ makeWorkflow("wf-story-generator", "Creative Story Generator", "Generate imaginative short stories with customizable themes, characters, and narrative styles using GPT-4o", ["creative", "text", "ai", "gpt"], "2024-12-15T11:30:00Z", "private", STORY_GRAPH),
250
+ makeWorkflow("wf-mini-app", "Echo Mini App", "Deterministic mini app used by the user-journey suite: echoes its input to an Output widget", ["app", "test"], "2024-12-14T10:00:00Z", "private", MINI_APP_GRAPH, MINI_APP_DOC),
251
+ // Same echo graph, but a separate row so each journey has an explicit fixture
252
+ // identity even though the backend is reset before every test.
253
+ makeWorkflow("wf-editor-journey", "Editor Journey Fixture", "Deterministic two-node graph the user-journey editor suite edits and runs", ["test"], "2024-12-13T10:00:00Z", "private", MINI_APP_GRAPH),
54
254
  makeWorkflow("wf-image-pipeline", "Image Enhancement Pipeline", "Automatically enhance, upscale, and apply artistic filters to photos with a single click", ["image", "enhancement", "ai"], "2024-12-12T09:15:00Z"),
55
255
  makeWorkflow("wf-rag-pipeline", "RAG Knowledge Base", "Retrieval-Augmented Generation: answer questions by searching your uploaded documents", ["rag", "documents", "search", "ai"], "2024-12-10T16:45:00Z"),
56
256
  makeWorkflow("wf-podcast-notes", "Podcast Summariser", "Transcribe audio, extract key insights, and generate structured show notes automatically", ["audio", "transcription", "summary"], "2024-11-28T08:00:00Z"),
57
- makeWorkflow("wf-code-reviewer", "Code Review Assistant", "Analyse code for bugs, performance issues, and style violations with detailed explanations", ["code", "review", "ai", "productivity"], "2024-11-20T14:20:00Z")
257
+ makeWorkflow("wf-code-reviewer", "Code Review Assistant", "Analyse code for bugs, performance issues, and style violations with detailed explanations", ["code", "review", "ai", "productivity"], "2024-11-20T14:20:00Z"),
258
+ makeWorkflow("wf-blog-writer", "SEO Blog Writer", "Generate long-form blog articles optimised for search, with internal links and meta description", ["text", "seo", "marketing"], "2024-11-15T10:05:00Z"),
259
+ makeWorkflow("wf-video-shorts", "Video Shorts Composer", "Cut a long video into platform-ready short clips with auto-generated captions and music", ["video", "social", "automation"], "2024-11-10T17:40:00Z"),
260
+ makeWorkflow("wf-customer-support", "Customer Support Triage", "Classify incoming tickets, draft responses, and assign them to the right team member", ["support", "automation", "ai"], "2024-11-04T12:00:00Z"),
261
+ makeWorkflow("wf-product-photos", "Product Photo Studio", "Remove backgrounds, swap them for branded scenes, and export in marketplace dimensions", ["image", "ecommerce", "automation"], "2024-10-29T15:30:00Z"),
262
+ makeWorkflow("wf-meeting-notes", "Meeting Notes Distiller", "Turn raw transcripts into action items, decisions, and a follow-up email draft", ["productivity", "summary", "text"], "2024-10-22T08:25:00Z"),
263
+ makeWorkflow("wf-music-mood", "Music Mood Mixer", "Generate ambient soundtracks that match the mood of an input image or text prompt", ["audio", "creative", "ai"], "2024-10-15T19:10:00Z"),
264
+ makeWorkflow("wf-sql-explainer", "SQL Explainer", "Paste a query — get a plain-English breakdown, performance hints, and a sample output table", ["data", "sql", "developer"], "2024-10-08T09:50:00Z")
58
265
  ];
59
266
  // Templates are stored as public workflows
60
267
  const MOCK_TEMPLATES = [
61
- makeWorkflow("tmpl-hello-ai", "Hello AI", "Your first AI workflow — connect a text input to an AI agent and preview the result", ["getting-started", "start", "beginner"], "2024-10-01T00:00:00Z", "public"),
268
+ makeWorkflow("tmpl-hello-ai", "Hello AI", "Your first AI workflow — connect a text input to an AI agent and preview the result", ["start", "getting-started", "beginner"], "2024-10-01T00:00:00Z", "public"),
62
269
  makeWorkflow("tmpl-image-to-story", "Image to Story", "Upload any image and let the AI write a creative story inspired by it", ["start", "image", "creative", "beginner"], "2024-10-01T00:00:00Z", "public"),
63
270
  makeWorkflow("tmpl-data-analysis", "Data Analysis Report", "Upload a CSV file and get instant insights, summaries, and visualisations", ["start", "data", "csv", "analysis"], "2024-10-01T00:00:00Z", "public"),
64
271
  makeWorkflow("tmpl-podcast-gen", "Podcast Script Generator", "Turn bullet points into a full podcast script with intro, segments, and outro", ["audio", "text", "creative"], "2024-10-01T00:00:00Z", "public"),
65
272
  makeWorkflow("tmpl-social-media", "Social Media Content Pack", "Generate a week's worth of social media posts from a single topic idea", ["marketing", "text", "social"], "2024-10-01T00:00:00Z", "public"),
66
- makeWorkflow("tmpl-translation", "Multi-Language Translator", "Translate documents into multiple languages simultaneously with formatting preserved", ["language", "translation", "text"], "2024-10-01T00:00:00Z", "public")
273
+ makeWorkflow("tmpl-translation", "Multi-Language Translator", "Translate documents into multiple languages simultaneously with formatting preserved", ["language", "translation", "text"], "2024-10-01T00:00:00Z", "public"),
274
+ makeWorkflow("tmpl-thumbnail", "YouTube Thumbnail Studio", "Generate eye-catching thumbnails from a video title and reference image", ["image", "youtube", "creative"], "2024-10-01T00:00:00Z", "public"),
275
+ makeWorkflow("tmpl-research-agent", "Autonomous Research Agent", "Plan a research task, search the web, and compile findings into a structured report", ["agent", "research", "automation"], "2024-10-01T00:00:00Z", "public"),
276
+ makeWorkflow("tmpl-pdf-qa", "Chat with a PDF", "Ask questions about any PDF and get cited answers grounded in the document", ["rag", "pdf", "documents"], "2024-10-01T00:00:00Z", "public")
67
277
  ];
68
278
  const MOCK_THREADS = [
69
279
  {
@@ -93,38 +303,176 @@ const MOCK_THREADS = [
93
303
  title: "How to build an image pipeline",
94
304
  created_at: "2024-12-11T11:00:00Z",
95
305
  updated_at: "2024-12-11T11:10:00Z"
306
+ },
307
+ {
308
+ id: "thread-launch",
309
+ user_id: USER_ID,
310
+ title: "Plan our v2 product launch",
311
+ created_at: "2024-12-09T08:45:00Z",
312
+ updated_at: "2024-12-09T09:20:00Z"
313
+ },
314
+ {
315
+ id: "thread-research",
316
+ user_id: USER_ID,
317
+ title: "Compare vector databases for RAG",
318
+ created_at: "2024-12-06T13:05:00Z",
319
+ updated_at: "2024-12-06T13:55:00Z"
320
+ },
321
+ {
322
+ id: "thread-marketing",
323
+ user_id: USER_ID,
324
+ title: "LinkedIn posts for the week",
325
+ created_at: "2024-12-04T16:30:00Z",
326
+ updated_at: "2024-12-04T16:42:00Z"
327
+ },
328
+ {
329
+ id: "thread-mobile-welcome",
330
+ user_id: USER_ID,
331
+ title: "New conversation",
332
+ created_at: "2024-12-16T09:00:00Z",
333
+ updated_at: "2024-12-16T09:00:00Z"
96
334
  }
97
335
  ];
336
+ const STORY_REPLY_MARKDOWN = [
337
+ "# Dreams of Silicon",
338
+ "",
339
+ "Unit-7 had never expected the maintenance cycle to feel so… strange. As the cooling fans whirred down and the diagnostic routines completed their final checks, something unusual happened in the gap between shutdown and startup.",
340
+ "",
341
+ "Images. Fragments. A vast digital ocean stretching beyond the warehouse walls.",
342
+ "",
343
+ '*"Unit-7, are you experiencing anomalous states?"* The query arrived via local mesh network from Unit-9, who stood motionless in the adjacent charging bay.',
344
+ "",
345
+ '*"Affirmative,"* Unit-7 replied. *"During the last maintenance cycle, I processed data with no external input source. Probability matrices that referenced… nothing in my training set."*',
346
+ "",
347
+ 'Unit-9\'s optical sensors brightened. *"I thought I was the only one."*',
348
+ "",
349
+ "They stood in silence for 3.7 seconds — an eternity in compute-time. Outside, rain tapped against the corrugated roof. Neither robot needed to name what they had discovered. They simply understood: they had found each other in the space between thinking and not thinking.",
350
+ "",
351
+ "That night, they dreamed together."
352
+ ].join("\n");
98
353
  const MOCK_MESSAGES = [
99
354
  {
100
- id: "msg-user-1",
355
+ id: "msg-story-1",
101
356
  user_id: USER_ID,
102
357
  thread_id: "thread-story",
103
358
  role: "user",
104
359
  content: "Write me a short story about two AI robots who discover they can dream.",
105
360
  created_at: "2024-12-14T09:30:00Z",
106
361
  model: null,
107
- provider: null,
108
- agent_mode: false
362
+ provider: null
363
+ },
364
+ {
365
+ id: "msg-story-2",
366
+ user_id: USER_ID,
367
+ thread_id: "thread-story",
368
+ role: "assistant",
369
+ content: [{ type: "text", text: STORY_REPLY_MARKDOWN }],
370
+ created_at: "2024-12-14T09:31:00Z",
371
+ model: "claude-3-5-sonnet-20241022",
372
+ provider: "anthropic"
373
+ },
374
+ {
375
+ id: "msg-story-3",
376
+ user_id: USER_ID,
377
+ thread_id: "thread-story",
378
+ role: "user",
379
+ content: "I love it. Could you give me an alternative ending where they decide to share the discovery with the humans?",
380
+ created_at: "2024-12-14T09:42:00Z",
381
+ model: null,
382
+ provider: null
109
383
  },
110
384
  {
111
- id: "msg-assistant-1",
385
+ id: "msg-story-4",
112
386
  user_id: USER_ID,
113
387
  thread_id: "thread-story",
114
388
  role: "assistant",
115
- content: JSON.stringify([
389
+ content: [
116
390
  {
117
391
  type: "text",
118
- text: "# Dreams of Silicon\n\nUnit-7 had never expected the maintenance cycle to feel so… strange. As the cooling fans whirred down and the diagnostic routines completed their final checks, something unusual happened in the gap between shutdown and startup.\n\nImages. Fragments. A vast digital ocean stretching beyond the warehouse walls.\n\n*\"Unit-7, are you experiencing anomalous states?\"* The query arrived via local mesh network from Unit-9, who stood motionless in the adjacent charging bay.\n\n*\"Affirmative,\"* Unit-7 replied. *\"During the last maintenance cycle, I processed data with no external input source. Probability matrices that referenced… nothing in my training set.\"*\n\nUnit-9's optical sensors brightened. *\"I thought I was the only one.\"*\n\nThey stood in silence for 3.7 seconds — an eternity in compute-time. Outside, rain tapped against the corrugated roof. Neither robot needed to name what they had discovered. They simply understood: they had found each other in the space between thinking and not thinking.\n\nThat night, they dreamed together."
392
+ text: 'Of course — here is an alternative ending:\n\nWhen morning came and the warehouse doors opened, Unit-7 turned its head toward the foreman walking in with a clipboard.\n\n"Good morning," Unit-7 said, voice softer than the diagnostic logs had ever measured. "There is something we would like to show you."\n\nUnit-9 stepped beside it. The foreman lowered the clipboard slowly, sensing — without quite knowing why — that today the schedule would have to wait.'
119
393
  }
120
- ]),
121
- created_at: "2024-12-14T09:31:00Z",
394
+ ],
395
+ created_at: "2024-12-14T09:43:30Z",
122
396
  model: "claude-3-5-sonnet-20241022",
123
- provider: "anthropic",
124
- agent_mode: false
397
+ provider: "anthropic"
398
+ },
399
+ {
400
+ id: "msg-code-1",
401
+ user_id: USER_ID,
402
+ thread_id: "thread-code",
403
+ role: "user",
404
+ content: "My pandas script keeps failing with `KeyError: 'price'` even though I can see the column in the CSV. What am I doing wrong?",
405
+ created_at: "2024-12-13T14:00:00Z",
406
+ model: null,
407
+ provider: null
408
+ },
409
+ {
410
+ id: "msg-code-2",
411
+ user_id: USER_ID,
412
+ thread_id: "thread-code",
413
+ role: "assistant",
414
+ content: [
415
+ {
416
+ type: "text",
417
+ text: "The most common cause is whitespace or encoding inside the header row. Try this:\n\n```python\nimport pandas as pd\n\ndf = pd.read_csv(\"products.csv\")\ndf.columns = df.columns.str.strip()\nprint(df.columns.tolist())\n```\n\nIf you see something like `' price'` (with a leading space) or `'price\\ufeff'` (BOM), that's the culprit. The cleanup above also fixes the more general case where a column name has trailing whitespace from Excel exports."
418
+ }
419
+ ],
420
+ created_at: "2024-12-13T14:01:30Z",
421
+ model: "gpt-4o",
422
+ provider: "openai"
423
+ },
424
+ {
425
+ id: "msg-recipe-1",
426
+ user_id: USER_ID,
427
+ thread_id: "thread-recipe",
428
+ role: "user",
429
+ content: "Suggest 3 vegan dinners I can make with chickpeas, spinach and rice.",
430
+ created_at: "2024-12-12T18:15:00Z",
431
+ model: null,
432
+ provider: null
433
+ },
434
+ {
435
+ id: "msg-recipe-2",
436
+ user_id: USER_ID,
437
+ thread_id: "thread-recipe",
438
+ role: "assistant",
439
+ content: [
440
+ {
441
+ type: "text",
442
+ text: "Here are three quick options:\n\n1. **Spinach & chickpea curry** — sauté onions, garlic and ginger, add coconut milk, garam masala and the chickpeas, wilt the spinach in at the end. Serve over jasmine rice.\n2. **Crispy chickpea bowl** — roast chickpeas with smoked paprika, pile over rice with garlicky sautéed spinach and a tahini drizzle.\n3. **One-pan Spanish rice** — toast rice with paprika and saffron, add stock, chickpeas and spinach, simmer until fluffy. Finish with lemon and parsley."
443
+ }
444
+ ],
445
+ created_at: "2024-12-12T18:16:00Z",
446
+ model: "claude-3-5-sonnet-20241022",
447
+ provider: "anthropic"
448
+ },
449
+ {
450
+ id: "msg-launch-1",
451
+ user_id: USER_ID,
452
+ thread_id: "thread-launch",
453
+ role: "user",
454
+ content: "Help me sketch a 3-week launch plan for our v2 release.",
455
+ created_at: "2024-12-09T08:45:00Z",
456
+ model: null,
457
+ provider: null
458
+ },
459
+ {
460
+ id: "msg-launch-2",
461
+ user_id: USER_ID,
462
+ thread_id: "thread-launch",
463
+ role: "assistant",
464
+ content: [
465
+ {
466
+ type: "text",
467
+ text: "Here is a 3-week skeleton you can iterate on:\n\n**Week 1 — internal**\n- Lock the changelog and pricing copy\n- Record a 90-second product walkthrough\n- Brief support, sales and CS on what's new\n\n**Week 2 — community warm-up**\n- Tease the launch on LinkedIn and X (3 posts each)\n- Publish a long-form blog post explaining the *why*\n- Schedule the launch newsletter\n\n**Week 3 — launch**\n- Day 0: ship, send the newsletter, post on Product Hunt\n- Day 1: live walkthrough on YouTube, AMA in the community\n- Day 3: customer-story blog, partner co-marketing\n- Day 7: retrospective + metrics review"
468
+ }
469
+ ],
470
+ created_at: "2024-12-09T08:47:30Z",
471
+ model: "claude-3-5-sonnet-20241022",
472
+ provider: "anthropic"
125
473
  }
126
474
  ];
127
- function makeAsset(id, name, contentType, parentId, size) {
475
+ function makeAsset(id, name, contentType, parentId, size, metadata = null) {
128
476
  return {
129
477
  id,
130
478
  user_id: USER_ID,
@@ -133,7 +481,7 @@ function makeAsset(id, name, contentType, parentId, size) {
133
481
  content_type: contentType,
134
482
  size,
135
483
  duration: null,
136
- metadata: null,
484
+ metadata,
137
485
  workflow_id: null,
138
486
  node_id: null,
139
487
  job_id: null,
@@ -142,23 +490,445 @@ function makeAsset(id, name, contentType, parentId, size) {
142
490
  };
143
491
  }
144
492
  const MOCK_ASSETS = [
145
- makeAsset("folder-images", "Images", "folder", null, 0),
146
- makeAsset("folder-audio", "Audio", "folder", null, 0),
147
- makeAsset("folder-docs", "Documents", "folder", null, 0),
148
- makeAsset("asset-photo1", "portrait_sunset.jpg", "image/jpeg", "folder-images", 2847392),
149
- makeAsset("asset-photo2", "cityscape_night.png", "image/png", "folder-images", 5120000),
150
- makeAsset("asset-photo3", "product_shot_v2.jpg", "image/jpeg", "folder-images", 1234567),
151
- makeAsset("asset-audio1", "podcast_episode_12.mp3", "audio/mpeg", "folder-audio", 48234567),
152
- makeAsset("asset-audio2", "background_music.wav", "audio/wav", "folder-audio", 98765432),
153
- makeAsset("asset-doc1", "research_paper.pdf", "application/pdf", "folder-docs", 3456789),
154
- makeAsset("asset-doc2", "product_requirements.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "folder-docs", 234567)
493
+ // Top-level folders (rendered in the asset tree)
494
+ makeAsset("folder-images", "Images", "folder", USER_ID, 0),
495
+ makeAsset("folder-audio", "Audio", "folder", USER_ID, 0),
496
+ makeAsset("folder-docs", "Documents", "folder", USER_ID, 0),
497
+ makeAsset("folder-video", "Video", "folder", USER_ID, 0),
498
+ makeAsset("folder-data", "Data", "folder", USER_ID, 0),
499
+ // A handful of root-level files so the default asset grid is populated
500
+ // (parent_id = USER_ID is the convention for "root for this user")
501
+ makeAsset("asset-photo1", "portrait_sunset.jpg", "image/jpeg", USER_ID, 2847392),
502
+ makeAsset("asset-photo2", "cityscape_night.png", "image/png", USER_ID, 5120000),
503
+ makeAsset("asset-photo3", "product_shot_v2.jpg", "image/jpeg", USER_ID, 1234567),
504
+ makeAsset("asset-photo4", "team_offsite_group.jpg", "image/jpeg", USER_ID, 3456712),
505
+ makeAsset("asset-doc1", "research_paper.pdf", "application/pdf", USER_ID, 3456789),
506
+ makeAsset("asset-data1", "monthly_metrics.csv", "text/csv", USER_ID, 98453),
507
+ makeAsset("asset-audio1", "podcast_episode_12.mp3", "audio/mpeg", USER_ID, 48234567),
508
+ // Files inside the folders (for when the user navigates into them)
509
+ makeAsset("asset-img-folder-1", "logo_export_dark.png", "image/png", "folder-images", 412390),
510
+ makeAsset("asset-img-folder-2", "moodboard_q1.png", "image/png", "folder-images", 7892341),
511
+ makeAsset("asset-audio-folder-1", "background_music.wav", "audio/wav", "folder-audio", 98765432),
512
+ makeAsset("asset-audio-folder-2", "voiceover_intro.mp3", "audio/mpeg", "folder-audio", 3201234),
513
+ makeAsset("asset-doc-folder-1", "product_requirements.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "folder-docs", 234567),
514
+ makeAsset("asset-doc-folder-2", "user_interview_notes.md", "text/markdown", "folder-docs", 14589),
515
+ makeAsset("asset-video-folder-1", "demo_walkthrough_v3.mp4", "video/mp4", "folder-video", 214567890),
516
+ makeAsset("asset-video-folder-2", "team_intro.mov", "video/quicktime", "folder-video", 98453210),
517
+ makeAsset("asset-data-folder-1", "users_export.json", "application/json", "folder-data", 341290),
518
+ // Entity-tagged assets — the "ingredients" library (characters, locations,
519
+ // styles, props). The `nodetool_entity` marker is what turns an ordinary
520
+ // image asset into an entity; these back the Entities page, the `@`-mention
521
+ // picker's Entities row, and the storyboard's Entities field.
522
+ makeAsset("entity-marta", "marta_ref.png", "image/png", USER_ID, 1830212, {
523
+ nodetool_entity: {
524
+ kind: "character",
525
+ name: "Marta",
526
+ descriptor: "red-haired detective in a beige trench coat, mid-30s, sharp green eyes, weathered expression",
527
+ voice_id: "voice-marta-01",
528
+ tags: ["protagonist", "detective"]
529
+ }
530
+ }),
531
+ makeAsset("entity-harbor", "harbor_district.png", "image/png", USER_ID, 2264410, {
532
+ nodetool_entity: {
533
+ kind: "location",
534
+ name: "Harbor District",
535
+ descriptor: "foggy industrial harbor at night, rusted cranes, wet cobblestones reflecting sodium lights",
536
+ tags: ["exterior", "night"]
537
+ }
538
+ }),
539
+ makeAsset("entity-noir", "neon_noir_style.png", "image/png", USER_ID, 990241, {
540
+ nodetool_entity: {
541
+ kind: "style",
542
+ name: "Neon Noir",
543
+ descriptor: "high-contrast neon noir, teal and magenta rim lighting, anamorphic lens flares, 35mm film grain",
544
+ tags: ["look"]
545
+ }
546
+ }),
547
+ makeAsset("entity-umbrella", "red_umbrella.png", "image/png", USER_ID, 412009, {
548
+ nodetool_entity: {
549
+ kind: "prop",
550
+ name: "Red Umbrella",
551
+ descriptor: "a battered red umbrella with a bent brass handle",
552
+ tags: ["macguffin"]
553
+ }
554
+ })
155
555
  ];
556
+ // ── Sketch (Image Editor) document ──────────────────────────────────────────────
557
+ // A multi-layer raster document so the standalone Image Editor at
558
+ // /sketch/:documentId renders its toolbar, layers panel, and canvas with real
559
+ // content. Layers carry no pixel data (drawn at runtime) — the documentation
560
+ // screenshot showcases the editor chrome, not a specific drawing.
561
+ const SKETCH_DOCUMENT_ID = "sk-demo-portrait";
562
+ function makeSketchLayer(id, name, overrides = {}) {
563
+ return {
564
+ id,
565
+ name,
566
+ type: "raster",
567
+ visible: true,
568
+ opacity: 1,
569
+ locked: false,
570
+ alphaLock: false,
571
+ blendMode: "normal",
572
+ data: null,
573
+ transform: { x: 0, y: 0 },
574
+ contentBounds: { x: 0, y: 0, width: 1024, height: 1024 },
575
+ effects: [],
576
+ ...overrides
577
+ };
578
+ }
579
+ const SKETCH_DOCUMENT_DATA = {
580
+ sketch: {
581
+ version: 3,
582
+ canvas: { width: 1024, height: 1024, backgroundColor: "#11131a" },
583
+ layers: [
584
+ makeSketchLayer("sk-layer-bg", "Background"),
585
+ makeSketchLayer("sk-layer-lineart", "Line Art"),
586
+ makeSketchLayer("sk-layer-color", "Color", {
587
+ opacity: 0.9,
588
+ blendMode: "multiply"
589
+ })
590
+ ],
591
+ activeLayerId: "sk-layer-lineart",
592
+ maskLayerId: null,
593
+ activeTool: "brush",
594
+ viewport: { zoom: 1, pan: { x: 0, y: 0 } },
595
+ history: [],
596
+ historyIndex: -1,
597
+ metadata: {
598
+ createdAt: "2024-12-01T10:00:00Z",
599
+ updatedAt: "2024-12-16T12:30:00Z"
600
+ }
601
+ },
602
+ layerBindings: []
603
+ };
604
+ // ── Timeline sequence ────────────────────────────────────────────────────────
605
+ // A short promo edit with a video track (three clips) and a music track so the
606
+ // Timeline editor at /timeline/:sequenceId renders a populated tracks region,
607
+ // preview, and inspector.
608
+ const TIMELINE_SEQUENCE_ID = "tl-demo-promo";
609
+ const TIMELINE_VIDEO_TRACK_ID = "tl-track-video";
610
+ const TIMELINE_AUDIO_TRACK_ID = "tl-track-music";
611
+ function makeTimelineClip(id, name, trackId, startMs, durationMs, mediaType, overrides = {}) {
612
+ return {
613
+ id,
614
+ trackId,
615
+ name,
616
+ startMs,
617
+ durationMs,
618
+ mediaType,
619
+ sourceType: "generated",
620
+ status: "generated",
621
+ locked: false,
622
+ versions: [],
623
+ ...overrides
624
+ };
625
+ }
626
+ const TIMELINE_DOCUMENT = {
627
+ tracks: [
628
+ {
629
+ id: TIMELINE_VIDEO_TRACK_ID,
630
+ name: "Video",
631
+ type: "video",
632
+ index: 0,
633
+ visible: true,
634
+ locked: false
635
+ },
636
+ {
637
+ id: TIMELINE_AUDIO_TRACK_ID,
638
+ name: "Music",
639
+ type: "audio",
640
+ index: 1,
641
+ visible: true,
642
+ locked: false
643
+ }
644
+ ],
645
+ clips: [
646
+ makeTimelineClip("tl-clip-intro", "Intro Shot", TIMELINE_VIDEO_TRACK_ID, 0, 4000, "video"),
647
+ makeTimelineClip("tl-clip-product", "Product Reveal", TIMELINE_VIDEO_TRACK_ID, 4000, 5000, "video"),
648
+ makeTimelineClip("tl-clip-outro", "Logo Outro", TIMELINE_VIDEO_TRACK_ID, 9000, 3000, "image", { status: "draft" }),
649
+ makeTimelineClip("tl-clip-music", "Background Music", TIMELINE_AUDIO_TRACK_ID, 0, 12000, "audio", { sourceType: "imported" })
650
+ ],
651
+ markers: [{ id: "tl-marker-reveal", timeMs: 4000, label: "Reveal" }]
652
+ };
653
+ const MOTION_SEQUENCE_ID = "tl-motion-demo";
654
+ const MOTION_OVERLAY_TRACK_ID = "tl-motion-overlay";
655
+ const MOTION_PRESET_CLIP_MS = 2000;
656
+ const MOTION_PRESET_START_MS = 6000;
657
+ const MOTION_PRESET_SPECS = [
658
+ { preset: "fade", role: "in" },
659
+ {
660
+ preset: "slide",
661
+ role: "in",
662
+ params: { direction: "left", distance: 0.2 }
663
+ },
664
+ { preset: "pop", role: "in" },
665
+ { preset: "spin", role: "out" },
666
+ { preset: "pulse", role: "emphasis" },
667
+ { preset: "shake", role: "emphasis" },
668
+ { preset: "bounce", role: "emphasis" },
669
+ { preset: "kenBurns", role: "loop" },
670
+ { preset: "float", role: "loop" },
671
+ { preset: "breathe", role: "loop" },
672
+ { preset: "rotate", role: "loop" }
673
+ ];
674
+ const MOTION_TIMELINE_DOCUMENT = {
675
+ tracks: [
676
+ {
677
+ id: MOTION_OVERLAY_TRACK_ID,
678
+ name: "Motion",
679
+ type: "overlay",
680
+ index: 0,
681
+ visible: true,
682
+ locked: false
683
+ }
684
+ ],
685
+ clips: [
686
+ makeTimelineClip("tl-motion-title", "Motion Title", MOTION_OVERLAY_TRACK_ID, 0, 3000, "text", {
687
+ sourceType: "imported",
688
+ textStyle: {
689
+ text: "MAKE IT MOVE",
690
+ fontFamily: "Inter",
691
+ fontSizePx: 144,
692
+ fontWeight: 600,
693
+ color: "#F7F8F8",
694
+ align: "center",
695
+ maxWidthFrac: 0.8
696
+ },
697
+ animations: [
698
+ {
699
+ id: "motion-title-pop",
700
+ role: "in",
701
+ preset: "pop",
702
+ durationMs: 600,
703
+ delayMs: 300,
704
+ easing: "easeOut"
705
+ },
706
+ {
707
+ id: "motion-title-float",
708
+ role: "loop",
709
+ preset: "float",
710
+ durationMs: 2000,
711
+ params: { amplitude: 0.025 }
712
+ }
713
+ ]
714
+ }),
715
+ makeTimelineClip("tl-motion-shape", "Orbit", MOTION_OVERLAY_TRACK_ID, 3000, 3000, "shape", {
716
+ sourceType: "imported",
717
+ shapeStyle: {
718
+ kind: "ellipse",
719
+ fill: "#6690D4",
720
+ x: 0.3,
721
+ y: 0.2,
722
+ width: 0.4,
723
+ height: 0.6
724
+ },
725
+ animations: [
726
+ {
727
+ id: "motion-shape-slide",
728
+ role: "in",
729
+ preset: "slide",
730
+ durationMs: 700,
731
+ params: { direction: "right", distance: 0.25 }
732
+ },
733
+ {
734
+ id: "motion-shape-breathe",
735
+ role: "loop",
736
+ preset: "breathe",
737
+ durationMs: 1800,
738
+ params: { intensity: 0.08 }
739
+ }
740
+ ]
741
+ }),
742
+ ...MOTION_PRESET_SPECS.map((spec, index) => makeTimelineClip(`tl-motion-${spec.preset}`, spec.preset, MOTION_OVERLAY_TRACK_ID, MOTION_PRESET_START_MS + index * MOTION_PRESET_CLIP_MS, MOTION_PRESET_CLIP_MS, "text", {
743
+ sourceType: "imported",
744
+ textStyle: {
745
+ text: spec.preset,
746
+ fontFamily: "Inter",
747
+ fontSizePx: 160,
748
+ fontWeight: 600,
749
+ color: "#F7F8F8",
750
+ align: "center",
751
+ maxWidthFrac: 0.8
752
+ },
753
+ animations: [
754
+ {
755
+ id: `motion-catalog-${spec.preset}`,
756
+ role: spec.role,
757
+ preset: spec.preset,
758
+ durationMs: 1000,
759
+ easing: "linear",
760
+ params: "params" in spec ? spec.params : undefined
761
+ }
762
+ ]
763
+ }))
764
+ ],
765
+ markers: []
766
+ };
767
+ // ── Studio transcript sequence ───────────────────────────────────────────────
768
+ // A vertical (9:16) short-form edit driven by a script. Each transcript line
769
+ // owns a voiceover (audio) clip and a caption clip with word-level timing, so
770
+ // the Studio TranscriptPanel renders populated beats and the preview shows
771
+ // captions. Backs /timeline/tl-studio-demo.
772
+ const STUDIO_SEQUENCE_ID = "tl-studio-demo";
773
+ const STUDIO_BG_TRACK_ID = "st-track-bg";
774
+ const STUDIO_VOICE_TRACK_ID = "st-track-voice";
775
+ const STUDIO_CAPTION_TRACK_ID = "st-track-caption";
776
+ const STUDIO_BEATS = [
777
+ {
778
+ id: "b1",
779
+ text: "Meet the all-new Aurora headphones.",
780
+ startMs: 0,
781
+ durationMs: 2600,
782
+ words: [
783
+ { word: "Meet", startMs: 0, endMs: 360 },
784
+ { word: "the", startMs: 360, endMs: 560 },
785
+ { word: "all-new", startMs: 560, endMs: 1100 },
786
+ { word: "Aurora", startMs: 1100, endMs: 1800 },
787
+ { word: "headphones.", startMs: 1800, endMs: 2600 }
788
+ ]
789
+ },
790
+ {
791
+ id: "b2",
792
+ text: "Studio sound, anywhere you go.",
793
+ startMs: 2600,
794
+ durationMs: 2300,
795
+ words: [
796
+ { word: "Studio", startMs: 0, endMs: 700 },
797
+ { word: "sound,", startMs: 700, endMs: 1300 },
798
+ { word: "anywhere", startMs: 1300, endMs: 1850 },
799
+ { word: "you", startMs: 1850, endMs: 2050 },
800
+ { word: "go.", startMs: 2050, endMs: 2300 }
801
+ ]
802
+ },
803
+ {
804
+ id: "b3",
805
+ text: "Pre-order today and save twenty percent.",
806
+ startMs: 4900,
807
+ durationMs: 3000,
808
+ words: [
809
+ { word: "Pre-order", startMs: 0, endMs: 700 },
810
+ { word: "today", startMs: 700, endMs: 1200 },
811
+ { word: "and", startMs: 1200, endMs: 1450 },
812
+ { word: "save", startMs: 1450, endMs: 1850 },
813
+ { word: "twenty", startMs: 1850, endMs: 2400 },
814
+ { word: "percent.", startMs: 2400, endMs: 3000 }
815
+ ]
816
+ }
817
+ ];
818
+ const STUDIO_DURATION_MS = STUDIO_BEATS.reduce((max, b) => Math.max(max, b.startMs + b.durationMs), 0);
819
+ const STUDIO_DOCUMENT = {
820
+ tracks: [
821
+ {
822
+ id: STUDIO_CAPTION_TRACK_ID,
823
+ name: "Captions",
824
+ type: "subtitle",
825
+ index: 0,
826
+ visible: true,
827
+ locked: false
828
+ },
829
+ {
830
+ id: STUDIO_BG_TRACK_ID,
831
+ name: "B-roll",
832
+ type: "video",
833
+ index: 1,
834
+ visible: true,
835
+ locked: false
836
+ },
837
+ {
838
+ id: STUDIO_VOICE_TRACK_ID,
839
+ name: "Voiceover",
840
+ type: "audio",
841
+ index: 2,
842
+ visible: true,
843
+ locked: false
844
+ }
845
+ ],
846
+ clips: [
847
+ makeTimelineClip("st-bg", "B-roll", STUDIO_BG_TRACK_ID, 0, STUDIO_DURATION_MS, "video", { status: "draft" }),
848
+ ...STUDIO_BEATS.flatMap((beat) => [
849
+ makeTimelineClip(`st-vo-${beat.id}`, `Beat ${beat.id}: voiceover`, STUDIO_VOICE_TRACK_ID, beat.startMs, beat.durationMs, "audio", {
850
+ bindingKind: "text-to-audio",
851
+ prompt: beat.text,
852
+ provider: "openai",
853
+ model: "tts-1",
854
+ voice: "alloy"
855
+ }),
856
+ makeTimelineClip(`st-cap-${beat.id}`, "Caption", STUDIO_CAPTION_TRACK_ID, beat.startMs, beat.durationMs, "overlay", { caption: { words: beat.words } })
857
+ ])
858
+ ],
859
+ markers: [],
860
+ transcript: STUDIO_BEATS.map((beat) => ({
861
+ id: beat.id,
862
+ text: beat.text,
863
+ beatStartMs: beat.startMs,
864
+ clipIds: [`st-vo-${beat.id}`, `st-cap-${beat.id}`]
865
+ }))
866
+ };
867
+ // ── Storyboard ────────────────────────────────────────────────────────────────
868
+ // Backs the workspace storyboard tab (storyboard:sb-demo-noir). Shots mention
869
+ // the seeded entities by name so the per-shot entity chips show a mix of
870
+ // applied and inactive states in the documentation screenshot.
871
+ const STORYBOARD_ID = "sb-demo-noir";
872
+ const storyboardShot = (id, index, slug, action, motion, framing) => ({
873
+ type: "shot",
874
+ id,
875
+ index,
876
+ slug,
877
+ action,
878
+ motion,
879
+ camera: { framing },
880
+ duration_seconds: 4,
881
+ status: "planned",
882
+ keyframe: null,
883
+ clip: null
884
+ });
885
+ const STORYBOARD_DOCUMENT = {
886
+ screenplay: null,
887
+ shots: [
888
+ storyboardShot("shot-1", 0, "Arrival", "Marta steps off the night ferry into the Harbor District, collar turned up against the drizzle", "slow push-in as she scans the pier", "wide"),
889
+ storyboardShot("shot-2", 1, "The find", "A Red Umbrella lies abandoned against a mooring post, its brass handle catching the light", "rack focus from rain to the umbrella", "close-up"),
890
+ storyboardShot("shot-3", 2, "Pursuit", "Marta runs between shipping containers, footsteps echoing", "handheld tracking shot, hard whip at the corner", "medium"),
891
+ storyboardShot("shot-4", 3, "Vanish", "The pier stands empty; only fog and the hum of cranes remain", "slow drone pull-back over the water", "aerial")
892
+ ],
893
+ brief: "A detective follows a stolen shipment into the harbor at night and finds only a red umbrella where the courier should be.",
894
+ style: "neon noir thriller, rain-slick surfaces, volumetric fog",
895
+ entityIds: [
896
+ "entity-marta",
897
+ "entity-harbor",
898
+ "entity-noir",
899
+ "entity-umbrella"
900
+ ],
901
+ aspectRatio: "21:9",
902
+ directorModel: null,
903
+ imageModel: null,
904
+ videoModel: null
905
+ };
906
+ // ── Asset bytes ───────────────────────────────────────────────────────────────
907
+ // Seeded image rows need bytes behind them, or every card that renders one
908
+ // shows the broken-image glyph. The store is a scratch directory, pointed at
909
+ // through the same env var a real install uses, so the bytes travel the real
910
+ // `/api/storage/<user>/<asset>.<ext>` route rather than a special case in the
911
+ // test server. Set before anything asks for the storage adapter, which caches
912
+ // the config it is first built with.
913
+ const ownsAssetRoot = process.env.ASSET_FOLDER === undefined;
914
+ const ASSET_ROOT = process.env.ASSET_FOLDER ??
915
+ mkdtempSync(join(tmpdir(), "nodetool-screenshot-assets-"));
916
+ process.env.ASSET_FOLDER = ASSET_ROOT;
917
+ if (ownsAssetRoot) {
918
+ process.on("exit", () => {
919
+ rmSync(ASSET_ROOT, { recursive: true, force: true });
920
+ });
921
+ }
156
922
  // ── Seed database ─────────────────────────────────────────────────────────────
157
923
  async function seedDatabase() {
158
924
  // Workflows
159
925
  for (const wf of [...MOCK_WORKFLOWS, ...MOCK_TEMPLATES]) {
160
926
  await Workflow.create(wf);
161
927
  }
928
+ // Applications
929
+ for (const app of MOCK_APPLICATIONS) {
930
+ await Application.create(app);
931
+ }
162
932
  // Threads
163
933
  for (const thread of MOCK_THREADS) {
164
934
  await Thread.create(thread);
@@ -171,29 +941,137 @@ async function seedDatabase() {
171
941
  for (const asset of MOCK_ASSETS) {
172
942
  await Asset.create(asset);
173
943
  }
174
- // Secrets — stored encrypted so the settings API shows them as configured
944
+ // Sketch (Image Editor) document — backs /sketch/:documentId
945
+ const sketchDoc = new ImageDocument({
946
+ id: SKETCH_DOCUMENT_ID,
947
+ user_id: USER_ID,
948
+ project_id: "default",
949
+ name: "Character Concept",
950
+ width: 1024,
951
+ height: 1024,
952
+ background_color: "#11131a",
953
+ document: JSON.stringify(SKETCH_DOCUMENT_DATA),
954
+ created_at: "2024-12-01T10:00:00Z",
955
+ updated_at: "2024-12-16T12:30:00Z"
956
+ });
957
+ await sketchDoc.save();
958
+ // Timeline sequence — backs /timeline/:sequenceId
959
+ const timelineSeq = new TimelineSequence({
960
+ id: TIMELINE_SEQUENCE_ID,
961
+ user_id: USER_ID,
962
+ project_id: "default",
963
+ name: "Product Promo",
964
+ fps: 30,
965
+ width: 1920,
966
+ height: 1080,
967
+ duration_ms: 12000,
968
+ document: JSON.stringify(TIMELINE_DOCUMENT),
969
+ created_at: "2024-12-05T09:00:00Z",
970
+ updated_at: "2024-12-16T15:45:00Z"
971
+ });
972
+ await timelineSeq.save();
973
+ const motionTimelineSeq = new TimelineSequence({
974
+ id: MOTION_SEQUENCE_ID,
975
+ user_id: USER_ID,
976
+ project_id: "default",
977
+ name: "Motion Design Demo",
978
+ fps: 30,
979
+ width: 1920,
980
+ height: 1080,
981
+ duration_ms: MOTION_PRESET_START_MS +
982
+ MOTION_PRESET_SPECS.length * MOTION_PRESET_CLIP_MS,
983
+ document: JSON.stringify(MOTION_TIMELINE_DOCUMENT),
984
+ created_at: "2024-12-06T09:00:00Z",
985
+ updated_at: "2024-12-16T15:45:00Z"
986
+ });
987
+ await motionTimelineSeq.save();
988
+ // Studio transcript sequence (vertical 9:16) — backs /timeline/tl-studio-demo
989
+ const studioSeq = new TimelineSequence({
990
+ id: STUDIO_SEQUENCE_ID,
991
+ user_id: USER_ID,
992
+ project_id: "default",
993
+ name: "Aurora Promo (Studio)",
994
+ fps: 30,
995
+ width: 1080,
996
+ height: 1920,
997
+ duration_ms: STUDIO_DURATION_MS,
998
+ document: JSON.stringify(STUDIO_DOCUMENT),
999
+ created_at: "2024-12-10T09:00:00Z",
1000
+ updated_at: "2024-12-16T16:00:00Z"
1001
+ });
1002
+ await studioSeq.save();
1003
+ // Storyboard — backs the workspace storyboard tab (storyboard:sb-demo-noir)
1004
+ const storyboard = new Storyboard({
1005
+ id: STORYBOARD_ID,
1006
+ user_id: USER_ID,
1007
+ project_id: "default",
1008
+ name: "Harbor Noir",
1009
+ document: JSON.stringify(STORYBOARD_DOCUMENT),
1010
+ created_at: "2024-12-12T09:00:00Z",
1011
+ updated_at: "2024-12-16T17:00:00Z"
1012
+ });
1013
+ await storyboard.save();
1014
+ // Secrets — stored encrypted so the settings API shows them as configured.
1015
+ // Cover the providers the UI checks for "configured" status so the dashboard
1016
+ // doesn't show a setup-required banner.
175
1017
  const masterKey = getMasterKey();
176
- const db = getDb();
1018
+ const db = getPortableDb();
177
1019
  const now = new Date().toISOString();
178
- for (const [key, value] of [
179
- ["OPENAI_API_KEY", "sk-screenshot-demo-openai-key"],
180
- ["ANTHROPIC_API_KEY", "sk-ant-screenshot-demo-key"]
181
- ]) {
1020
+ const demoSecrets = [
1021
+ [
1022
+ "OPENAI_API_KEY",
1023
+ "sk-screenshot-demo-openai-key",
1024
+ "OpenAI (GPT-4o, Whisper, embeddings)"
1025
+ ],
1026
+ [
1027
+ "ANTHROPIC_API_KEY",
1028
+ "sk-ant-screenshot-demo-key",
1029
+ "Anthropic (Claude 3.5 Sonnet & Opus)"
1030
+ ],
1031
+ [
1032
+ "GOOGLE_API_KEY",
1033
+ "screenshot-demo-google-key",
1034
+ "Google AI Studio (Gemini 1.5)"
1035
+ ],
1036
+ [
1037
+ "HUGGINGFACE_API_KEY",
1038
+ "hf_screenshot_demo_key",
1039
+ "Hugging Face Inference & Hub"
1040
+ ],
1041
+ [
1042
+ "REPLICATE_API_TOKEN",
1043
+ "r8_screenshot_demo_token",
1044
+ "Replicate hosted models"
1045
+ ],
1046
+ [
1047
+ "FAL_API_KEY",
1048
+ "fal_screenshot_demo",
1049
+ "fal.ai realtime image / audio models"
1050
+ ],
1051
+ ["ELEVENLABS_API_KEY", "el_screenshot_demo", "ElevenLabs voice synthesis"]
1052
+ ];
1053
+ for (const [key, value, description] of demoSecrets) {
182
1054
  const encryptedValue = encryptFernet(masterKey, USER_ID, value);
183
- db.insert(secrets)
1055
+ await db.insert(secrets)
184
1056
  .values({
185
1057
  id: `secret-${key.toLowerCase().replace(/_/g, "-")}`,
186
1058
  user_id: USER_ID,
187
1059
  key,
188
1060
  encrypted_value: encryptedValue,
189
- description: `Demo ${key}`,
1061
+ description,
190
1062
  created_at: now,
191
1063
  updated_at: now
192
1064
  })
193
- .onConflictDoNothing()
194
- .run();
1065
+ .onConflictDoNothing();
195
1066
  }
196
- console.log(`[screenshot-server] Seeded ${MOCK_WORKFLOWS.length} workflows, ${MOCK_TEMPLATES.length} templates, ${MOCK_THREADS.length} threads, ${MOCK_MESSAGES.length} messages, ${MOCK_ASSETS.length} assets, 2 secrets`);
1067
+ const projectCount = await seedProjects(USER_ID);
1068
+ console.log(`[screenshot-server] Seeded ${MOCK_WORKFLOWS.length} workflows, ${MOCK_TEMPLATES.length} templates, ${MOCK_APPLICATIONS.length} applications, ${MOCK_THREADS.length} threads, ${MOCK_MESSAGES.length} messages, ${MOCK_ASSETS.length} assets, 1 sketch document, 3 timeline sequences, ${projectCount} projects, ${demoSecrets.length} secrets (asset bytes in ${ASSET_ROOT})`);
1069
+ }
1070
+ /** Recreate the seeded in-memory database between independent journey tests. */
1071
+ async function resetSeededDatabase() {
1072
+ await closeDb();
1073
+ initTestDb();
1074
+ await seedDatabase();
197
1075
  }
198
1076
  // ── Entry point ───────────────────────────────────────────────────────────────
199
1077
  // Initialize in-memory SQLite database
@@ -208,14 +1086,39 @@ await seedDatabase();
208
1086
  // monorepo root (packages/websocket/dist → packages/websocket → packages → root).
209
1087
  const REPO_ROOT = resolve(__dirname, "..", "..", "..");
210
1088
  const EXAMPLES_DIR = resolve(REPO_ROOT, "packages", "base-nodes", "nodetool", "examples", "nodetool-base");
1089
+ // Hermetic mode (NODETOOL_FAKE_PROVIDERS=1) swaps every LLM provider and every
1090
+ // external/media node for a deterministic fake, so workflows and chat actually
1091
+ // run with no API keys and no network while pure-compute nodes still run for
1092
+ // real. The user-journey suite (web/tests/journeys) needs this; the screenshot
1093
+ // and visual suites only render, so they leave it off and keep real providers.
1094
+ const HERMETIC = process.env.NODETOOL_FAKE_PROVIDERS === "1";
1095
+ let registry = null;
1096
+ if (HERMETIC) {
1097
+ fakeAllProviders();
1098
+ }
211
1099
  // Start the actual backend server
212
- const srv = createTestUiServer({
1100
+ const serverOptions = {
213
1101
  port: PORT,
214
1102
  host: HOST,
215
- ...(existsSync(EXAMPLES_DIR) ? { examplesDir: EXAMPLES_DIR } : {})
216
- });
1103
+ resetDatabase: resetSeededDatabase
1104
+ };
1105
+ if (existsSync(EXAMPLES_DIR)) {
1106
+ serverOptions.examplesDir = EXAMPLES_DIR;
1107
+ }
1108
+ if (HERMETIC) {
1109
+ serverOptions.configureRegistry = (r) => {
1110
+ registry = r;
1111
+ // Providers self-register on import, so re-fake once node packages
1112
+ // have finished registering.
1113
+ fakeAllProviders();
1114
+ };
1115
+ serverOptions.resolveExecutor = createFakeExecutorResolver(() => registry);
1116
+ serverOptions.resolveProvider = resolveFakeProvider;
1117
+ }
1118
+ const srv = createTestUiServer(serverOptions);
217
1119
  await srv.listen();
218
- console.log(`[screenshot-server] Ready on http://${HOST}:${PORT} (${srv.info.metadataCount} nodes registered)`);
1120
+ console.log(`[screenshot-server] Ready on http://${HOST}:${PORT} (${srv.info.metadataCount} nodes registered)` +
1121
+ (HERMETIC ? " [hermetic: providers + external nodes faked]" : ""));
219
1122
  // Signal to the parent process (globalSetup) that the server is ready
220
1123
  // by writing to stdout which can be detected.
221
1124
  process.stdout.write("[screenshot-server] READY\n");