@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
@@ -0,0 +1,1143 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { createLogger } from "@nodetool-ai/config";
3
+ import { getModelUnitPrice } from "@nodetool-ai/model-pricing";
4
+ import { Asset, Prediction, Project, TimelineSequence, findFinishResourceIds, assertStoryboardClipGenerationAllowed } from "@nodetool-ai/models";
5
+ import { extractPricingParams } from "@nodetool-ai/node-sdk/pricing-params";
6
+ import { resolveNodetoolDelegate } from "@nodetool-ai/protocol";
7
+ import { GenerationAlreadyAcceptedError } from "@nodetool-ai/runtime";
8
+ import { calculateChatCost, detectImageMime, expandEntitiesForGeneration, generateStructured, isToolCall, IMAGE_MIME_TO_EXT, messageText } from "@nodetool-ai/runtime";
9
+ import { linkGenerationAssets } from "@nodetool-ai/execution";
10
+ import { admitSpend, releaseSpend, reserveSpend } from "../credit-gate.js";
11
+ import { retrieveAssetBytes } from "../lib/asset-paths.js";
12
+ import { trimVideoWindow } from "../lib/media.js";
13
+ import { resolveImageSize } from "../lib/media-size.js";
14
+ import { getAssetAdapter } from "../lib/storage.js";
15
+ import { isFiniteNumber, isRecord, isString } from "../lib/wire-values.js";
16
+ import { createGenerationRun, generateSpeechBytes, generateMusicBytes } from "./media-generation.js";
17
+ const log = createLogger("nodetool.websocket.runner");
18
+ /**
19
+ * Strip sentence punctuation after an `entity://` id. A loop, not `/\.+$/`:
20
+ * the regex backtracks quadratically on a long dot run followed by another
21
+ * character, and the prompt is user input.
22
+ */
23
+ function trimTrailingDots(value) {
24
+ let end = value.length;
25
+ while (end > 0 && value[end - 1] === ".")
26
+ end -= 1;
27
+ return value.slice(0, end);
28
+ }
29
+ async function resolveVideoEditReferenceIds(userId, req) {
30
+ const ownedResolver = entityRefResolver(userId);
31
+ const assets = new Map();
32
+ const requestedEntities = new Set([
33
+ ...(req.entityIds ?? []),
34
+ ...Array.from(req.prompt.matchAll(/entity:\/\/([A-Za-z0-9._~-]+)/g), (match) => trimTrailingDots(match[1]))
35
+ ]);
36
+ const resolvedEntityIds = new Set();
37
+ const resolver = {
38
+ getAssetInfo: async (id) => {
39
+ let pending = assets.get(id);
40
+ if (!pending) {
41
+ pending = ownedResolver.getAssetInfo(id);
42
+ assets.set(id, pending);
43
+ }
44
+ const asset = await pending;
45
+ const marker = asset?.metadata?.nodetool_entity;
46
+ if (requestedEntities.has(id) && isRecord(marker) && isString(marker.name) && marker.name.trim()) {
47
+ resolvedEntityIds.add(id);
48
+ }
49
+ return asset;
50
+ }
51
+ };
52
+ const entityIds = [...new Set(req.entityIds ?? [])];
53
+ const entityReferenceAssetIds = [];
54
+ for (const id of entityIds) {
55
+ const asset = await resolver.getAssetInfo(id);
56
+ const marker = asset?.metadata?.nodetool_entity;
57
+ if (!isRecord(marker) || !isString(marker.name) || !marker.name.trim()) {
58
+ throw new Error(`Entity reference ${id} was not found`);
59
+ }
60
+ const referenceAssetId = isString(marker.reference_asset_id)
61
+ ? marker.reference_asset_id.trim()
62
+ : "";
63
+ entityReferenceAssetIds.push(referenceAssetId || id);
64
+ }
65
+ const expanded = await expandEntitiesForGeneration([req.prompt, ...entityIds.map((id) => `entity://${id}`)].join(" "), resolver);
66
+ const assetIds = [...new Set([
67
+ ...(req.referenceAssetIds ?? []),
68
+ ...(req.referenceImages ?? []).map((ref) => referenceAssetId(ref, "image")),
69
+ ...entityReferenceAssetIds,
70
+ ...expanded.referenceImages.map((ref) => ref.uri.slice("asset://".length, ref.uri.lastIndexOf(".")))
71
+ ])];
72
+ return { prompt: expanded.prompt, assetIds, entityIds: [...resolvedEntityIds] };
73
+ }
74
+ /**
75
+ * Chars per token for the up-front spend estimate. Deliberately low (real
76
+ * English averages nearer 4) so the estimate over-books rather than under.
77
+ */
78
+ const ESTIMATE_CHARS_PER_TOKEN = 3;
79
+ /** Output budget assumed when a request names no `max_tokens`. */
80
+ const ESTIMATE_DEFAULT_OUTPUT_TOKENS = 4096;
81
+ /**
82
+ * What one image block is worth to the estimate. A reference image costs on
83
+ * the order of a thousand tokens across the providers that take them; the
84
+ * estimate only has to over-book, and the real token cost is recorded when the
85
+ * call returns.
86
+ */
87
+ const IMAGE_ESTIMATE_CHARS = 4000;
88
+ /** Characters a message contributes to the estimate, text blocks included. */
89
+ function messageChars(content) {
90
+ if (typeof content === "string") {
91
+ return content.length;
92
+ }
93
+ // A block's shape is only checked as `{ type: string }` + passthrough on the
94
+ // wire, so a `{ type: "text" }` with no `text` reaches here. Reading `.length`
95
+ // off it threw before the spend estimate was taken — a crash on the admission
96
+ // path, not a refusal.
97
+ return content.reduce((sum, block) => sum +
98
+ (block.type === "text" && typeof block.text === "string"
99
+ ? block.text.length
100
+ : IMAGE_ESTIMATE_CHARS), 0);
101
+ }
102
+ /**
103
+ * A conservative up-front price for one text generation, in USD: every
104
+ * character the messages carry counted as input tokens, plus the request's
105
+ * whole output budget as output tokens, at the delegate model's rate.
106
+ *
107
+ * It over-estimates on purpose. The figure is what gets *reserved* for the
108
+ * duration of the call, and the real cost replaces it afterwards — an
109
+ * over-booking that is released beats letting concurrent calls each admit
110
+ * against a balance none of them has spent yet.
111
+ */
112
+ export function estimateDirectTextSpend(req) {
113
+ const delegate = req.provider === "nodetool" ? resolveNodetoolDelegate(req.model) : null;
114
+ const modelId = delegate?.model ?? req.model;
115
+ const providerId = delegate?.provider ?? req.provider;
116
+ const chars = req.messages.reduce((sum, m) => sum + messageChars(m.content), 0);
117
+ const inputTokens = Math.ceil(chars / ESTIMATE_CHARS_PER_TOKEN);
118
+ const outputTokens = req.maxTokens ?? ESTIMATE_DEFAULT_OUTPUT_TOKENS;
119
+ try {
120
+ return calculateChatCost(modelId, inputTokens, outputTokens, 0, providerId);
121
+ }
122
+ catch {
123
+ // An unpriced model estimates at zero: the gate still admits against the
124
+ // balance, and the real cost is recorded when the call returns.
125
+ return 0;
126
+ }
127
+ }
128
+ /**
129
+ * Entity-mention resolver over the Asset model, scoped to one user. Backs
130
+ * `expandEntitiesForGeneration` on every direct-generation surface.
131
+ */
132
+ export function entityRefResolver(userId) {
133
+ return {
134
+ getAssetInfo: async (assetId) => {
135
+ const asset = await Asset.find(userId, assetId);
136
+ if (!asset)
137
+ return null;
138
+ return {
139
+ id: asset.id,
140
+ content_type: asset.content_type,
141
+ name: asset.name,
142
+ metadata: asset.metadata ?? null
143
+ };
144
+ }
145
+ };
146
+ }
147
+ /**
148
+ * Resolve entity-derived reference images to provider input bytes. A ref
149
+ * whose asset is gone (or reads back empty) contributes nothing — the same
150
+ * drop rule as an unresolvable mention.
151
+ */
152
+ export async function resolveEntityReferenceImages(userId, refs) {
153
+ const out = [];
154
+ for (const ref of refs) {
155
+ const bare = ref.uri.slice("asset://".length);
156
+ const assetId = bare.slice(0, bare.lastIndexOf("."));
157
+ if (!assetId)
158
+ continue;
159
+ const asset = await Asset.find(userId, assetId);
160
+ if (!asset)
161
+ continue;
162
+ const bytes = await retrieveAssetBytes(getAssetAdapter(), userId, asset.id, asset.content_type);
163
+ if (!bytes || bytes.length === 0)
164
+ continue;
165
+ out.push(bytes);
166
+ }
167
+ return out;
168
+ }
169
+ /**
170
+ * Read one owned asset's bytes, with the descriptive errors the generation
171
+ * paths surface verbatim to callers.
172
+ */
173
+ export async function retrieveSourceAssetBytes(userId, assetId) {
174
+ const asset = await Asset.find(userId, assetId);
175
+ if (!asset) {
176
+ throw new Error(`Source asset not found: ${assetId}`);
177
+ }
178
+ const bytes = await retrieveAssetBytes(getAssetAdapter(), userId, assetId, asset.content_type);
179
+ if (!bytes) {
180
+ throw new Error(`Source asset bytes not found: ${assetId}`);
181
+ }
182
+ return bytes;
183
+ }
184
+ async function resolveReferenceAssets(userId, refs, kind) {
185
+ const resolved = [];
186
+ for (const ref of refs) {
187
+ const assetId = referenceAssetId(ref, kind);
188
+ const asset = await Asset.find(userId, assetId);
189
+ if (!asset)
190
+ throw new Error(`Reference ${kind} asset ${assetId} was not found`);
191
+ if (!asset.content_type.startsWith(`${kind}/`)) {
192
+ throw new Error(`Reference ${kind} asset ${assetId} is not ${kind === "image" ? "an image" : "a video"}`);
193
+ }
194
+ const bytes = await retrieveAssetBytes(getAssetAdapter(), userId, asset.id, asset.content_type);
195
+ if (!bytes || bytes.length === 0) {
196
+ throw new Error(`Reference ${kind} asset ${assetId} is empty`);
197
+ }
198
+ resolved.push(bytes);
199
+ }
200
+ return resolved;
201
+ }
202
+ function referenceAssetId(ref, kind) {
203
+ if (!isRecord(ref) || (ref.type !== undefined && ref.type !== kind)) {
204
+ throw new Error(`Expected reference ${kind} objects`);
205
+ }
206
+ const assetId = isString(ref.asset_id) && ref.asset_id.length > 0
207
+ ? ref.asset_id
208
+ : isString(ref.uri) && ref.uri.startsWith("asset://")
209
+ ? ref.uri.slice("asset://".length).split(".")[0]
210
+ : "";
211
+ if (!assetId) {
212
+ throw new Error(`Reference ${kind} is missing an asset id`);
213
+ }
214
+ return assetId;
215
+ }
216
+ /**
217
+ * Refuse a bare prompt for a model the catalog lists as editing-only. Such a
218
+ * model needs an input image, and its provider rejects the request with an
219
+ * error that names neither the cause nor the fix (AtlasCloud's edit
220
+ * endpoints answer "index 0 out of range"). An unlisted model, or one with
221
+ * no declared tasks, is left to the provider.
222
+ */
223
+ async function assertTextToImageModel(provider, modelId) {
224
+ if (typeof provider.getAvailableImageModels !== "function") {
225
+ return;
226
+ }
227
+ const model = (await provider.getAvailableImageModels()).find((candidate) => candidate.id === modelId);
228
+ const tasks = model?.supportedTasks;
229
+ if (model && tasks?.length && !tasks.includes("text_to_image")) {
230
+ throw new Error(`${model.name || modelId} only edits images and needs an input image. ` +
231
+ "Choose a model that creates images from text.");
232
+ }
233
+ }
234
+ /**
235
+ * One-shot model calls that skip the chat thread and the workflow runner:
236
+ * the streamed `inference` command, and the direct text / media / speech
237
+ * generation the sketch, timeline and Studio surfaces drive over RPC.
238
+ */
239
+ export class DirectInferenceHandler {
240
+ session;
241
+ deps;
242
+ constructor(session, deps) {
243
+ this.session = session;
244
+ this.deps = deps;
245
+ }
246
+ async handleInference(data, requestSeq, signal) {
247
+ const providerId = isString(data.provider)
248
+ ? data.provider
249
+ : this.deps.defaults.provider;
250
+ const model = isString(data.model) ? data.model : this.deps.defaults.model;
251
+ const rawMessages = Array.isArray(data.messages) ? data.messages : [];
252
+ log.debug("Inference request", {
253
+ model,
254
+ provider: providerId,
255
+ messages: rawMessages.length
256
+ });
257
+ const messages = rawMessages.map((m) => {
258
+ const msg = m;
259
+ return {
260
+ role: (isString(msg.role)
261
+ ? msg.role
262
+ : "user"),
263
+ content: isString(msg.content)
264
+ ? msg.content
265
+ : Array.isArray(msg.content)
266
+ ? msg.content
267
+ : "",
268
+ toolCallId: isString(msg.toolCallId) ? msg.toolCallId : null,
269
+ toolCalls: Array.isArray(msg.toolCalls)
270
+ ? msg.toolCalls
271
+ : null,
272
+ threadId: null
273
+ };
274
+ });
275
+ if (!this.session.resolveProvider) {
276
+ await this.session.send({
277
+ type: "error",
278
+ message: "No provider resolver configured"
279
+ });
280
+ return;
281
+ }
282
+ const rawTools = Array.isArray(data.tools) ? data.tools : [];
283
+ const tools = rawTools
284
+ .map((t) => {
285
+ const tool = t;
286
+ return {
287
+ name: isString(tool.name) ? tool.name : "",
288
+ description: isString(tool.description)
289
+ ? tool.description
290
+ : undefined,
291
+ inputSchema: typeof tool.inputSchema === "object"
292
+ ? tool.inputSchema
293
+ : undefined
294
+ };
295
+ })
296
+ .filter((t) => t.name.length > 0);
297
+ const provider = await this.session.resolveProvider(providerId, this.session.requireUserId());
298
+ for await (const item of provider.generateMessagesTraced({
299
+ messages,
300
+ model,
301
+ tools: tools.length > 0 ? tools : undefined,
302
+ signal
303
+ })) {
304
+ if (requestSeq !== this.deps.currentRequestSeq())
305
+ break; // cancelled
306
+ if (isToolCall(item)) {
307
+ log.info("Tool call", { tool: item.name, args: item.args });
308
+ await this.session.send({
309
+ type: "tool_call",
310
+ id: item.id,
311
+ name: item.name,
312
+ args: item.args,
313
+ seq: requestSeq
314
+ });
315
+ }
316
+ else if (item.type === "chunk") {
317
+ await this.session.send({ ...item, seq: requestSeq });
318
+ }
319
+ }
320
+ if (requestSeq === this.deps.currentRequestSeq()) {
321
+ log.debug("Inference complete");
322
+ await this.session.send({ type: "inference_done", seq: requestSeq });
323
+ }
324
+ }
325
+ /**
326
+ * Run a one-shot text generation and return the answer — no chat thread, no
327
+ * job row, no workflow. The text twin of `runDirectMediaGeneration`, and
328
+ * what a surface calls when it needs a model to write or decide one thing.
329
+ *
330
+ * With a schema the call is structured output: the model is forced through
331
+ * one tool whose input schema is that shape, and the parsed object comes
332
+ * back in `data`. `generateStructured` owns that mechanism, shared with the
333
+ * Director node and the agent nodes, so a schema answered here and a schema
334
+ * answered in a workflow are answered the same way.
335
+ */
336
+ async runDirectTextGeneration(req) {
337
+ if (!this.session.resolveProvider) {
338
+ throw new Error("No provider resolver configured");
339
+ }
340
+ if (!req.model) {
341
+ throw new Error("model is required");
342
+ }
343
+ if (req.messages.length === 0) {
344
+ throw new Error("prompt or messages is required");
345
+ }
346
+ const userId = this.session.requireUserId();
347
+ const provider = await this.session.resolveProvider(req.provider, userId);
348
+ if (req.provider !== "nodetool") {
349
+ // BYOK: the user's own keys, never metered.
350
+ return this.runDirectTextGenerationInner(req, provider);
351
+ }
352
+ // NodeTool's managed provider: admit against the balance (including
353
+ // in-flight reservations), hold the estimate for the duration of the call
354
+ // so concurrent requests admit against each other, and record the real
355
+ // token cost as a prediction row so the balance decrements.
356
+ const estimatedUsd = estimateDirectTextSpend(req);
357
+ const decision = await admitSpend(userId, estimatedUsd, [req.model]);
358
+ if (!decision.allowed) {
359
+ throw new Error(decision.reason);
360
+ }
361
+ const reservationKey = `text:${randomUUID()}`;
362
+ reserveSpend(userId, reservationKey, estimatedUsd);
363
+ try {
364
+ const result = await this.runDirectTextGenerationInner(req, provider);
365
+ // The estimate deliberately over-books, so the tracked token cost is
366
+ // the charge — never the reservation.
367
+ const cost = provider.getTotalCost();
368
+ if (cost > 0) {
369
+ try {
370
+ await Prediction.create({
371
+ user_id: userId,
372
+ provider: "nodetool",
373
+ model: req.model,
374
+ node_type: req.schema ? "direct.structured" : "direct.text",
375
+ cost,
376
+ currency: "USD",
377
+ billing_unit: "tokens",
378
+ quantity: 1,
379
+ workflow_id: null,
380
+ node_id: "",
381
+ status: "completed"
382
+ });
383
+ }
384
+ catch (err) {
385
+ this.session.logError("direct text cost persistence failed", err);
386
+ }
387
+ }
388
+ return result;
389
+ }
390
+ finally {
391
+ releaseSpend(userId, reservationKey);
392
+ }
393
+ }
394
+ /**
395
+ * The provider call itself. Runs under an abort signal registered on the
396
+ * connection, so a `stop` command or a dropped socket interrupts a model
397
+ * that is still generating instead of billing for an answer nobody reads.
398
+ */
399
+ async runDirectTextGenerationInner(req, provider) {
400
+ const messages = req.messages.map((m) => ({
401
+ role: (m.role === "system" || m.role === "assistant" || m.role === "tool"
402
+ ? m.role
403
+ : "user"),
404
+ content: m.content,
405
+ toolCallId: null,
406
+ toolCalls: null,
407
+ threadId: null
408
+ }));
409
+ const abort = new AbortController();
410
+ const deregister = this.deps.registerAbort(abort);
411
+ try {
412
+ if (req.schema) {
413
+ const data = await generateStructured(provider, {
414
+ messages,
415
+ model: req.model,
416
+ maxTokens: req.maxTokens,
417
+ toolName: req.schemaName,
418
+ toolDescription: req.schemaDescription,
419
+ schema: req.schema,
420
+ signal: abort.signal
421
+ });
422
+ return { text: "", data };
423
+ }
424
+ const result = await provider.generateMessageTraced({
425
+ messages,
426
+ model: req.model,
427
+ maxTokens: req.maxTokens,
428
+ signal: abort.signal
429
+ });
430
+ return { text: messageText(result.content), data: null };
431
+ }
432
+ finally {
433
+ deregister();
434
+ }
435
+ }
436
+ /**
437
+ * Run a one-shot media-generation request (text-to-image, image-to-image,
438
+ * text-to-video, or text-to-audio) and return the produced asset ids.
439
+ * Mirrors the image / image_edit / video / audio branches of
440
+ * `handleMediaGenerationMessage` but skips the chat-thread machinery —
441
+ * the caller wants asset ids, not a streamed Message row.
442
+ *
443
+ * Used by the `generate_media` RPC for the sketch editor's direct-gen
444
+ * image layers and the timeline's direct-gen video / audio clips; the
445
+ * chat-path equivalents stay in `handleMediaGenerationMessage` for now.
446
+ */
447
+ async runDirectMediaGeneration(req) {
448
+ if (!this.session.resolveProvider) {
449
+ throw new Error("No provider resolver configured");
450
+ }
451
+ if (!req.model) {
452
+ throw new Error("model is required");
453
+ }
454
+ if (!req.prompt || !req.prompt.trim()) {
455
+ throw new Error("prompt is required");
456
+ }
457
+ if (req.mode !== "video_edit" && (req.referenceAssetIds?.length || req.entityIds?.length)) {
458
+ throw new Error("Entity and reference asset ids require video_edit mode");
459
+ }
460
+ if (req.capability === "reference_to_video") {
461
+ if (req.mode !== "video") {
462
+ throw new Error("reference_to_video requires video mode");
463
+ }
464
+ if (req.sourceAssetId) {
465
+ throw new Error("reference_to_video uses reference_images and reference_videos, not source_asset_id");
466
+ }
467
+ if (!req.referenceImages?.length && !req.referenceVideos?.length) {
468
+ throw new Error("reference_to_video requires at least one reference image or video");
469
+ }
470
+ if (req.useReferenceVideoAudio && !req.referenceVideos?.length) {
471
+ throw new Error("Reference video audio requires at least one reference video");
472
+ }
473
+ }
474
+ else if ((req.referenceImages?.length && req.mode !== "video_edit") ||
475
+ req.referenceVideos?.length ||
476
+ req.useReferenceVideoAudio !== undefined) {
477
+ throw new Error("Reference inputs require the reference_to_video capability");
478
+ }
479
+ const userId = this.session.requireUserId();
480
+ if (req.projectId && req.projectId !== "default") {
481
+ await Project.requireOwned(userId, req.projectId);
482
+ }
483
+ await assertTimelineGenerationAllowed(userId, req);
484
+ const videoEditReferenceIds = req.mode === "video_edit"
485
+ ? await resolveVideoEditReferenceIds(userId, req)
486
+ : undefined;
487
+ if (videoEditReferenceIds) {
488
+ await assertTimelineGenerationAllowed(userId, req, videoEditReferenceIds.assetIds);
489
+ }
490
+ const provider = await this.session.resolveProvider(req.provider, userId);
491
+ const videoEditReferences = videoEditReferenceIds ? {
492
+ ...videoEditReferenceIds,
493
+ images: await resolveReferenceAssets(userId, videoEditReferenceIds.assetIds.map(asset_id => ({ asset_id })), "image")
494
+ } : undefined;
495
+ if (req.mode === "video_edit" || req.mode === "video_extend") {
496
+ const extension = req.mode === "video_extend";
497
+ const task = extension ? "extend_video" : "video_to_video";
498
+ const context = req.sourceContext;
499
+ if (!req.sourceAssetId) {
500
+ throw new Error(`source_asset_id is required for ${req.mode}`);
501
+ }
502
+ if (extension &&
503
+ (!context ||
504
+ (req.extensionMode !== "start" && req.extensionMode !== "end") ||
505
+ !Number.isFinite(req.durationSeconds) ||
506
+ (req.durationSeconds ?? 0) <= 0 ||
507
+ (req.variations !== undefined && req.variations !== 1))) {
508
+ throw new Error("video_extend requires source_context, start/end extension_mode, a positive duration and one variation");
509
+ }
510
+ if (context && context.sourceAssetId !== req.sourceAssetId) {
511
+ throw new Error("source_context does not match source_asset_id");
512
+ }
513
+ if (context &&
514
+ (!Number.isFinite(context.sourceStartMs) ||
515
+ !Number.isFinite(context.sourceEndMs) ||
516
+ context.sourceStartMs < 0 ||
517
+ context.sourceEndMs <= context.sourceStartMs ||
518
+ !Number.isFinite(context.timelineDurationMs) ||
519
+ context.timelineDurationMs <= 0 ||
520
+ !Number.isFinite(context.speedMultiplier) ||
521
+ context.speedMultiplier <= 0 ||
522
+ (!extension && context.speedMultiplier !== 1) ||
523
+ Math.abs(context.sourceEndMs -
524
+ (context.sourceStartMs +
525
+ context.timelineDurationMs * context.speedMultiplier)) > 0.5)) {
526
+ throw new Error("source_context contains an invalid constant-speed window");
527
+ }
528
+ if (typeof provider.getCapabilities === "function" &&
529
+ !provider.getCapabilities().includes(task)) {
530
+ throw new Error(`Provider ${req.provider} does not support the ${task} task`);
531
+ }
532
+ if (typeof provider.getAvailableVideoModels === "function") {
533
+ const model = (await provider.getAvailableVideoModels()).find((candidate) => candidate.id === req.model);
534
+ if (!model?.supportedTasks?.includes(task)) {
535
+ throw new Error(`Model ${req.model} does not support the ${task} task`);
536
+ }
537
+ if (videoEditReferences?.assetIds.length &&
538
+ !model.supportedTasks.includes("video_to_video_reference")) {
539
+ throw new Error(`Model ${req.model} does not support video edit reference images`);
540
+ }
541
+ if (extension &&
542
+ model.durations?.length &&
543
+ !model.durations.includes(req.durationSeconds ?? 0)) {
544
+ throw new Error("Choose a supported extension duration.");
545
+ }
546
+ }
547
+ else if (videoEditReferences?.assetIds.length) {
548
+ throw new Error(`Model ${req.model} has no video edit reference capabilities`);
549
+ }
550
+ }
551
+ if (req.provider !== "nodetool") {
552
+ // BYOK: the user's own keys, never metered.
553
+ try {
554
+ return await this.runDirectMediaGenerationInner(req, provider, undefined, videoEditReferences);
555
+ }
556
+ catch (error) {
557
+ if (error instanceof GenerationAlreadyAcceptedError) {
558
+ return {
559
+ asset_ids: [],
560
+ existing_generation_id: error.generationId
561
+ };
562
+ }
563
+ throw error;
564
+ }
565
+ }
566
+ // NodeTool's managed provider: admit against the balance (including
567
+ // in-flight reservations), reserve the unit-price estimate for the
568
+ // duration of the call, and record the spend as a prediction row so the
569
+ // balance actually decrements. Cost is the larger of the delegate's own
570
+ // tracked cost and the unit-price estimate — fal-style delegates bill
571
+ // per unit and track nothing themselves.
572
+ const variations = Math.max(1, Math.min(Number(req.variations ?? 1), 8));
573
+ const effectiveDurationSeconds = req.mode === "video_extend"
574
+ ? req.durationSeconds
575
+ : req.sourceContext
576
+ ? req.sourceContext.timelineDurationMs / 1000
577
+ : req.durationSeconds;
578
+ // What the request states about the job, in the vocabulary the catalogs
579
+ // bill in — a per-second video model prices the clip asked for, not one
580
+ // second of it.
581
+ const priceParams = extractPricingParams({
582
+ resolution: req.resolution,
583
+ duration_seconds: effectiveDurationSeconds,
584
+ width: req.width,
585
+ height: req.height
586
+ });
587
+ const unit = getModelUnitPrice({ id: req.model, provider: "nodetool" }, priceParams);
588
+ const unitPrice = unit && !unit.declined && isFiniteNumber(unit.unit_price)
589
+ ? unit.unit_price
590
+ : 0;
591
+ const estimatedUsd = unitPrice * variations;
592
+ const decision = await admitSpend(userId, estimatedUsd, [req.model]);
593
+ if (!decision.allowed) {
594
+ throw new Error(decision.reason);
595
+ }
596
+ const reservationKey = `media:${randomUUID()}`;
597
+ reserveSpend(userId, reservationKey, estimatedUsd);
598
+ try {
599
+ // The generation seam writes the row (docs/media-generation-tracking-
600
+ // design.md § 8, S5). The managed provider's charge is the larger of the
601
+ // delegate's own tracked cost and the unit-price estimate — fal-style
602
+ // delegates bill per unit and track nothing themselves — and reaches the
603
+ // row as the receipt, which wins over the catalog.
604
+ const generationIds = [];
605
+ let result;
606
+ try {
607
+ result = await this.runDirectMediaGenerationInner(req, provider, {
608
+ generationIds,
609
+ statedCost: (tracked) => {
610
+ const cost = Math.max(tracked, estimatedUsd);
611
+ return cost > 0
612
+ ? {
613
+ amount: cost,
614
+ currency: "USD",
615
+ billing_unit: unit?.billing_unit ?? null,
616
+ quantity: variations,
617
+ unit_price: cost / variations
618
+ }
619
+ : null;
620
+ }
621
+ }, videoEditReferences);
622
+ }
623
+ catch (error) {
624
+ if (error instanceof GenerationAlreadyAcceptedError) {
625
+ return {
626
+ asset_ids: [],
627
+ existing_generation_id: error.generationId
628
+ };
629
+ }
630
+ throw error;
631
+ }
632
+ // The tracker writes best-effort and says so in its own log; the
633
+ // managed path is the one that decrements a balance, so a row that did
634
+ // not land is reported on the session as well.
635
+ for (const id of generationIds) {
636
+ try {
637
+ const row = await Prediction.findForUser(userId, id);
638
+ if (!row || row.status !== "completed") {
639
+ throw new Error(`generation ${id} has no completed row`);
640
+ }
641
+ }
642
+ catch (err) {
643
+ this.session.logError("direct media cost persistence failed", err);
644
+ break;
645
+ }
646
+ }
647
+ return result;
648
+ }
649
+ finally {
650
+ releaseSpend(userId, reservationKey);
651
+ }
652
+ }
653
+ async runDirectMediaGenerationInner(req, provider, metering, videoEditReferences) {
654
+ const userId = this.session.requireUserId();
655
+ const variations = Math.max(1, Math.min(Number(req.variations ?? 1), 8));
656
+ const { generate, seamAssetId, storeAsset } = createGenerationRun({
657
+ userId,
658
+ providerId: req.provider,
659
+ modelId: req.model,
660
+ provider,
661
+ origin: { surface: "rpc", request_id: req.requestId ?? null },
662
+ workflowId: null,
663
+ projectId: req.projectId ?? null,
664
+ assetNamePrefix: req.mode,
665
+ destination: req.destination,
666
+ // The row names the RPC mode the way it always did.
667
+ nodeType: () => `direct.${req.mode}`,
668
+ // The delegate's running total, read once the assets are stored, as the
669
+ // row always recorded it: a fal-style delegate tracks nothing and the
670
+ // estimate wins. A test double may be a bare object; only a real
671
+ // provider tracks.
672
+ receiptAfterPersist: () => {
673
+ if (!metering)
674
+ return null;
675
+ const tracked = typeof provider.getTotalCost === "function"
676
+ ? provider.getTotalCost()
677
+ : 0;
678
+ const stated = metering.statedCost(tracked);
679
+ return stated ? { cost: stated } : null;
680
+ },
681
+ onGenerationId: (id) => metering?.generationIds.push(id)
682
+ });
683
+ // Entity mentions in the prompt (`entity://<id>`, written by @-mention
684
+ // pickers) expand against the library here: name inline, descriptor into
685
+ // a Consistency references block, reference image routed into the
686
+ // generation inputs below — the same rule node prompts get through
687
+ // mapPromptAssetsToInputs. A mention that resolves to no entity drops.
688
+ const { prompt, referenceImages } = videoEditReferences
689
+ ? { prompt: videoEditReferences.prompt, referenceImages: [] }
690
+ : await expandEntitiesForGeneration(req.prompt, entityRefResolver(userId));
691
+ const entityImageBytes = await resolveEntityReferenceImages(userId, referenceImages);
692
+ // Image modes are pixel-addressed on several providers (GPT Image's
693
+ // `size`): derive explicit dimensions from the resolution tier + aspect
694
+ // ratio when the caller sent none — the same numbers the generation nodes
695
+ // always computed. Caller-supplied pixels win.
696
+ const imageSize = req.mode === "image" || req.mode === "image_edit"
697
+ ? (resolveImageSize(req.resolution, req.aspectRatio) ?? undefined)
698
+ : undefined;
699
+ const width = req.width ?? imageSize?.width;
700
+ const height = req.height ?? imageSize?.height;
701
+ if (req.mode === "video") {
702
+ const videoModel = {
703
+ id: req.model,
704
+ name: req.model,
705
+ provider: req.provider
706
+ };
707
+ const videoParams = {
708
+ prompt,
709
+ aspect_ratio: req.aspectRatio ?? null,
710
+ resolution: req.resolution ?? null,
711
+ duration_seconds: req.durationSeconds ?? null
712
+ };
713
+ let generated;
714
+ if (req.capability === "reference_to_video") {
715
+ const referenceImages = await resolveReferenceAssets(userId, req.referenceImages ?? [], "image");
716
+ const referenceVideos = await resolveReferenceAssets(userId, req.referenceVideos ?? [], "video");
717
+ generated = await generate("reference_to_video", {
718
+ ...videoParams,
719
+ reference_images: referenceImages,
720
+ reference_videos: referenceVideos,
721
+ use_reference_video_audio: req.useReferenceVideoAudio
722
+ }, { mime: "video/mp4" }, (abort) => provider.referenceToVideo({ images: referenceImages, videos: referenceVideos }, {
723
+ model: videoModel,
724
+ prompt,
725
+ durationSeconds: req.durationSeconds ?? null,
726
+ aspectRatio: req.aspectRatio ?? null,
727
+ resolution: req.resolution ?? null,
728
+ useReferenceVideoAudio: req.useReferenceVideoAudio,
729
+ signal: abort
730
+ }));
731
+ }
732
+ else if (req.sourceAssetId) {
733
+ // A source image turns the request into image-to-video: the image is
734
+ // the frame the animation starts from.
735
+ const sourceBytes = await retrieveSourceAssetBytes(userId, req.sourceAssetId);
736
+ const i2vParams = {
737
+ model: videoModel,
738
+ prompt,
739
+ aspectRatio: req.aspectRatio ?? null,
740
+ resolution: req.resolution ?? null,
741
+ durationSeconds: req.durationSeconds ?? null
742
+ };
743
+ generated = await generate("image_to_video", { ...videoParams, images: [sourceBytes] }, { mime: "video/mp4" }, (abort) => provider.imageToVideo(sourceBytes, { ...i2vParams, signal: abort }));
744
+ }
745
+ else {
746
+ const params = {
747
+ model: videoModel,
748
+ prompt,
749
+ durationSeconds: req.durationSeconds ?? null
750
+ };
751
+ generated = await generate("text_to_video", videoParams, { mime: "video/mp4" }, (abort) => provider.textToVideo({ ...params, signal: abort }));
752
+ }
753
+ const assetId = seamAssetId(generated) ??
754
+ (await storeAsset(generated.output, "video/mp4", "mp4"));
755
+ return { asset_ids: [assetId] };
756
+ }
757
+ if (req.mode === "video_edit" || req.mode === "video_extend") {
758
+ if (!req.sourceAssetId) {
759
+ throw new Error(`source_asset_id is required for ${req.mode}`);
760
+ }
761
+ const sourceBytes = await retrieveSourceAssetBytes(userId, req.sourceAssetId);
762
+ const editSource = req.sourceContext
763
+ ? await trimVideoWindow(sourceBytes, req.sourceContext.sourceStartMs, req.sourceContext.sourceEndMs)
764
+ : sourceBytes;
765
+ const videoModel = {
766
+ id: req.model,
767
+ name: req.model,
768
+ provider: req.provider
769
+ };
770
+ if (req.mode === "video_extend") {
771
+ if (!req.extensionMode || !req.durationSeconds) {
772
+ throw new Error("Extension mode and duration are required.");
773
+ }
774
+ const params = {
775
+ model: videoModel,
776
+ prompt,
777
+ mode: req.extensionMode,
778
+ durationSeconds: req.durationSeconds
779
+ };
780
+ const generated = await generate("extend_video", {
781
+ prompt,
782
+ video: editSource,
783
+ mode: params.mode,
784
+ duration_seconds: params.durationSeconds,
785
+ source_context: req.sourceContext
786
+ }, { mime: "video/mp4" }, () => provider.extendVideo(editSource, params));
787
+ const assetId = seamAssetId(generated) ??
788
+ (await storeAsset(generated.output, "video/mp4", "mp4"));
789
+ return { asset_ids: [assetId] };
790
+ }
791
+ const editParams = {
792
+ prompt,
793
+ strength: req.strength ?? null,
794
+ duration_seconds: req.sourceContext
795
+ ? req.sourceContext.timelineDurationMs / 1000
796
+ : (req.durationSeconds ?? null),
797
+ resolution: req.resolution ?? null,
798
+ video: editSource
799
+ };
800
+ if (req.sourceContext) {
801
+ editParams.source_context = req.sourceContext;
802
+ }
803
+ const references = videoEditReferences?.assetIds.length
804
+ ? {
805
+ referenceImages: videoEditReferences.images,
806
+ referenceAssetIds: videoEditReferences.assetIds
807
+ }
808
+ : {};
809
+ if (videoEditReferences?.assetIds.length) {
810
+ editParams.reference_images = videoEditReferences.images;
811
+ editParams.reference_asset_ids = videoEditReferences.assetIds;
812
+ }
813
+ const referenceProvenance = {
814
+ referenceAssetIds: videoEditReferences?.assetIds ?? [],
815
+ entityIds: videoEditReferences?.entityIds ?? []
816
+ };
817
+ editParams.entity_ids = referenceProvenance.entityIds;
818
+ editParams.media_edit_references = referenceProvenance;
819
+ const generated = await generate("video_to_video", editParams, { mime: "video/mp4" }, (signal) => provider.videoToVideo(editSource, {
820
+ ...references,
821
+ signal,
822
+ model: videoModel,
823
+ prompt,
824
+ strength: req.strength ?? null,
825
+ durationSeconds: req.sourceContext
826
+ ? req.sourceContext.timelineDurationMs / 1000
827
+ : (req.durationSeconds ?? null),
828
+ resolution: req.resolution ?? null
829
+ }));
830
+ const assetId = seamAssetId(generated) ??
831
+ (await storeAsset(generated.output, "video/mp4", "mp4"));
832
+ const result = { asset_ids: [assetId] };
833
+ if (referenceProvenance.referenceAssetIds.length || referenceProvenance.entityIds.length) {
834
+ result.media_edit_references = referenceProvenance;
835
+ }
836
+ return result;
837
+ }
838
+ if (req.mode === "audio" || req.mode === "music") {
839
+ const supportedFormats = new Set([
840
+ "mp3",
841
+ "wav",
842
+ "flac",
843
+ "ogg",
844
+ "aac",
845
+ "pcm"
846
+ ]);
847
+ const requestedFormat = req.audioFormat && supportedFormats.has(req.audioFormat)
848
+ ? req.audioFormat
849
+ : null;
850
+ const audioGenerationId = randomUUID();
851
+ const generated = await generate(req.mode === "music" ? "text_to_music" : "text_to_speech", req.mode === "music"
852
+ ? { prompt, duration_seconds: req.durationSeconds }
853
+ : {
854
+ text: prompt,
855
+ voice: req.voice,
856
+ speed: req.speed,
857
+ language: req.language,
858
+ instructions: req.instructions,
859
+ audio_format: requestedFormat
860
+ }, null, async () => {
861
+ const speech = req.mode === "music"
862
+ ? await generateMusicBytes(provider, {
863
+ model: {
864
+ id: req.model,
865
+ name: req.model,
866
+ provider: req.provider
867
+ },
868
+ prompt,
869
+ durationSeconds: req.durationSeconds
870
+ })
871
+ : await generateSpeechBytes(provider, {
872
+ text: prompt,
873
+ model: req.model,
874
+ voice: req.voice,
875
+ speed: req.speed,
876
+ language: req.language,
877
+ instructions: req.instructions,
878
+ audioFormat: requestedFormat
879
+ });
880
+ if (!speech)
881
+ throw new Error("Provider returned no audio data");
882
+ return storeAsset(speech.bytes, speech.mimeType, speech.ext);
883
+ }, audioGenerationId);
884
+ await linkGenerationAssets([audioGenerationId], [generated.output]);
885
+ return { asset_ids: [generated.output] };
886
+ }
887
+ const imageModel = {
888
+ id: req.model,
889
+ name: req.model,
890
+ provider: req.provider
891
+ };
892
+ let generated;
893
+ if (req.mode === "image" && entityImageBytes.length > 0) {
894
+ // A mentioned entity carries a reference image: the generation becomes
895
+ // an edit against those images, mirroring how node prompts with
896
+ // entity images route through ImageToImage. The provider throws when
897
+ // the chosen model cannot take input images.
898
+ const params = {
899
+ model: imageModel,
900
+ prompt,
901
+ targetWidth: width ?? null,
902
+ targetHeight: height ?? null,
903
+ aspectRatio: req.aspectRatio ?? null,
904
+ resolution: req.resolution ?? null,
905
+ strength: req.strength ?? null,
906
+ numInferenceSteps: req.numInferenceSteps ?? null
907
+ };
908
+ generated = await generate("image_to_image", {
909
+ prompt,
910
+ target_width: width ?? null,
911
+ target_height: height ?? null,
912
+ aspect_ratio: req.aspectRatio ?? null,
913
+ resolution: req.resolution ?? null,
914
+ strength: req.strength ?? null,
915
+ num_images: variations,
916
+ images: entityImageBytes
917
+ }, {}, (abort) => provider.imageToImages(entityImageBytes, { ...params, signal: abort }, variations));
918
+ }
919
+ else if (req.mode === "image") {
920
+ await assertTextToImageModel(provider, req.model);
921
+ const params = {
922
+ model: imageModel,
923
+ prompt,
924
+ width,
925
+ height,
926
+ aspectRatio: req.aspectRatio ?? null,
927
+ resolution: req.resolution ?? null,
928
+ seed: req.seed ?? null
929
+ };
930
+ generated = await generate("text_to_image", {
931
+ prompt,
932
+ width,
933
+ height,
934
+ aspect_ratio: req.aspectRatio ?? null,
935
+ resolution: req.resolution ?? null,
936
+ seed: req.seed ?? null,
937
+ num_images: variations
938
+ }, {}, (abort) => provider.textToImages({ ...params, signal: abort }, variations));
939
+ }
940
+ else if (req.mode === "inpaint") {
941
+ if (!req.sourceAssetId) {
942
+ throw new Error("source_asset_id is required for inpaint");
943
+ }
944
+ if (!req.maskAssetId) {
945
+ throw new Error("mask_asset_id is required for inpaint");
946
+ }
947
+ const adapter = getAssetAdapter();
948
+ const [sourceAsset, maskAsset] = await Promise.all([
949
+ Asset.find(userId, req.sourceAssetId),
950
+ Asset.find(userId, req.maskAssetId)
951
+ ]);
952
+ if (!sourceAsset)
953
+ throw new Error(`Source asset not found: ${req.sourceAssetId}`);
954
+ if (!maskAsset)
955
+ throw new Error(`Mask asset not found: ${req.maskAssetId}`);
956
+ const [sourceBytes, maskBytes] = await Promise.all([
957
+ retrieveAssetBytes(adapter, userId, req.sourceAssetId, sourceAsset.content_type),
958
+ retrieveAssetBytes(adapter, userId, req.maskAssetId, maskAsset.content_type)
959
+ ]);
960
+ if (!sourceBytes)
961
+ throw new Error(`Source asset bytes not found: ${req.sourceAssetId}`);
962
+ if (!maskBytes)
963
+ throw new Error(`Mask asset bytes not found: ${req.maskAssetId}`);
964
+ const params = {
965
+ model: imageModel,
966
+ prompt,
967
+ targetWidth: req.width ?? null,
968
+ targetHeight: req.height ?? null,
969
+ aspectRatio: req.aspectRatio ?? null,
970
+ resolution: req.resolution ?? null,
971
+ strength: req.strength ?? null,
972
+ numInferenceSteps: req.numInferenceSteps ?? null,
973
+ mask: maskBytes
974
+ };
975
+ generated = await generate("inpainting", {
976
+ prompt,
977
+ target_width: req.width ?? null,
978
+ target_height: req.height ?? null,
979
+ strength: req.strength ?? null,
980
+ num_images: variations,
981
+ images: [sourceBytes],
982
+ mask: maskBytes
983
+ }, {}, (abort) => provider.inpaintImages([sourceBytes], { ...params, signal: abort }, variations));
984
+ }
985
+ else {
986
+ if (!req.sourceAssetId) {
987
+ throw new Error("source_asset_id is required for image_edit");
988
+ }
989
+ const sourceAsset = await Asset.find(userId, req.sourceAssetId);
990
+ if (!sourceAsset) {
991
+ throw new Error(`Source asset not found: ${req.sourceAssetId}`);
992
+ }
993
+ const sourceBytes = await retrieveAssetBytes(getAssetAdapter(), userId, req.sourceAssetId, sourceAsset.content_type);
994
+ if (!sourceBytes) {
995
+ throw new Error(`Source asset bytes not found: ${req.sourceAssetId}`);
996
+ }
997
+ const params = {
998
+ model: imageModel,
999
+ prompt,
1000
+ targetWidth: width ?? null,
1001
+ targetHeight: height ?? null,
1002
+ aspectRatio: req.aspectRatio ?? null,
1003
+ resolution: req.resolution ?? null,
1004
+ strength: req.strength ?? null,
1005
+ numInferenceSteps: req.numInferenceSteps ?? null
1006
+ };
1007
+ generated = await generate("image_to_image", {
1008
+ prompt,
1009
+ target_width: width ?? null,
1010
+ target_height: height ?? null,
1011
+ aspect_ratio: req.aspectRatio ?? null,
1012
+ resolution: req.resolution ?? null,
1013
+ strength: req.strength ?? null,
1014
+ num_inference_steps: req.numInferenceSteps ?? null,
1015
+ num_images: variations,
1016
+ images: [sourceBytes, ...entityImageBytes]
1017
+ }, {}, (abort) => provider.imageToImages([sourceBytes, ...entityImageBytes], { ...params, signal: abort }, variations));
1018
+ }
1019
+ const assetIds = [];
1020
+ for (const [index, bytes] of generated.output.entries()) {
1021
+ const mimeType = detectImageMime(bytes);
1022
+ assetIds.push(seamAssetId(generated, index) ??
1023
+ (await storeAsset(bytes, mimeType, IMAGE_MIME_TO_EXT[mimeType] ?? "png")));
1024
+ }
1025
+ return { asset_ids: assetIds };
1026
+ }
1027
+ /**
1028
+ * Transcribe a stored audio asset to word-level caption timing. Mirrors the
1029
+ * provider path used by the ASR node but skips the workflow machinery — the
1030
+ * caller (Studio transcript beats) wants `{ word, startMs, endMs }[]` back in
1031
+ * one shot. Timestamps are returned in milliseconds relative to the start of
1032
+ * the audio.
1033
+ */
1034
+ async runDirectTranscription(req) {
1035
+ if (!this.session.resolveProvider) {
1036
+ throw new Error("No provider resolver configured");
1037
+ }
1038
+ if (!req.model) {
1039
+ throw new Error("model is required");
1040
+ }
1041
+ if (!req.assetId) {
1042
+ throw new Error("asset_id is required");
1043
+ }
1044
+ const userId = this.session.requireUserId();
1045
+ if (req.provider === "nodetool") {
1046
+ const creditDecision = await admitSpend(userId, 0, [req.model]);
1047
+ if (!creditDecision.allowed) {
1048
+ throw new Error(creditDecision.reason);
1049
+ }
1050
+ }
1051
+ const asset = await Asset.find(userId, req.assetId);
1052
+ if (!asset) {
1053
+ throw new Error(`Audio asset not found: ${req.assetId}`);
1054
+ }
1055
+ const bytes = await retrieveAssetBytes(getAssetAdapter(), userId, req.assetId, asset.content_type);
1056
+ if (!bytes) {
1057
+ throw new Error(`Audio asset bytes not found: ${req.assetId}`);
1058
+ }
1059
+ const provider = await this.session.resolveProvider(req.provider, userId);
1060
+ const result = await provider.automaticSpeechRecognition({
1061
+ audio: bytes,
1062
+ model: req.model,
1063
+ language: req.language,
1064
+ word_timestamps: true
1065
+ });
1066
+ // Metered provider: record what the delegate tracked so the spend lands
1067
+ // in the ledger the balance is computed from. Best-effort, never throws.
1068
+ if (req.provider === "nodetool" && provider.getTotalCost() > 0) {
1069
+ try {
1070
+ await Prediction.create({
1071
+ user_id: userId,
1072
+ provider: "nodetool",
1073
+ model: req.model,
1074
+ node_type: "direct.transcription",
1075
+ cost: provider.getTotalCost(),
1076
+ currency: "USD",
1077
+ workflow_id: null,
1078
+ node_id: "",
1079
+ status: "completed"
1080
+ });
1081
+ }
1082
+ catch (err) {
1083
+ this.session.logError("direct transcription cost persistence failed", err);
1084
+ }
1085
+ }
1086
+ const words = (result.chunks ?? [])
1087
+ .map((chunk) => ({
1088
+ word: chunk.text.trim(),
1089
+ startMs: Math.round(chunk.timestamp[0] * 1000),
1090
+ endMs: Math.round(chunk.timestamp[1] * 1000)
1091
+ }))
1092
+ .filter((w) => w.word.length > 0);
1093
+ return { text: result.text, words };
1094
+ }
1095
+ }
1096
+ /** Resolve protection from authorized persisted documents, never client-reported policy. */
1097
+ async function assertTimelineGenerationAllowed(userId, req, resolvedReferenceIds = []) {
1098
+ const context = req.timelineContext ?? (req.sourceContext ? { sequenceId: req.sourceContext.sequenceId, sourceClipId: req.sourceContext.clipId } : undefined);
1099
+ if (!context) {
1100
+ return;
1101
+ }
1102
+ const sequenceIds = await findFinishResourceIds("timeline", context.sequenceId, userId, req.projectId ?? undefined);
1103
+ if (!req.timelineContext && sequenceIds.length === 0) {
1104
+ return;
1105
+ }
1106
+ if (sequenceIds.length !== 1) {
1107
+ throw new Error("Timeline generation context was not found uniquely in the caller's project.");
1108
+ }
1109
+ const sequence = await TimelineSequence.findById(sequenceIds[0]);
1110
+ if (!sequence || sequence.user_id !== userId || (req.projectId && req.projectId !== sequence.project_id)) {
1111
+ throw new Error("Timeline generation context was not found in the caller's project.");
1112
+ }
1113
+ const clips = sequence.toDocument().clips;
1114
+ const resolveClip = (id) => {
1115
+ const matches = clips.filter(clip => clip.id === id || (/^[a-f0-9]{12}$/.test(id) && clip.id.startsWith(id)));
1116
+ if (matches.length > 1) {
1117
+ throw new Error("Timeline generation clip prefix is ambiguous.");
1118
+ }
1119
+ return matches[0];
1120
+ };
1121
+ const source = context.sourceClipId ? resolveClip(context.sourceClipId) : undefined;
1122
+ if (context.sourceClipId && (!source || source.currentAssetId !== req.sourceAssetId)) {
1123
+ throw new Error("Timeline generation source changed or was not found. Save and retry.");
1124
+ }
1125
+ const target = context.targetClipId ? resolveClip(context.targetClipId) : undefined;
1126
+ const referencedAssets = new Set([
1127
+ ...(req.referenceAssetIds ?? []),
1128
+ ...resolvedReferenceIds,
1129
+ ...(req.referenceImages ?? []).map(ref => referenceAssetId(ref, "image")),
1130
+ ...(req.referenceVideos ?? []).map(ref => referenceAssetId(ref, "video"))
1131
+ ]);
1132
+ const referencedClips = clips.filter(clip => clip.currentAssetId && referencedAssets.has(clip.currentAssetId));
1133
+ for (const clip of [source, target, ...referencedClips]) {
1134
+ if (!clip?.storyboardBoardId) {
1135
+ continue;
1136
+ }
1137
+ const capability = req.mode === "video" ? (req.capability ?? (req.sourceAssetId ? "image_to_video" : "text_to_video"))
1138
+ : req.mode === "video_edit" || req.mode === "video_extend" ? "video_to_video"
1139
+ : req.mode === "image_edit" || req.mode === "inpaint" ? "image_to_image" : "text_to_image";
1140
+ await assertStoryboardClipGenerationAllowed(userId, sequence.project_id, clip, capability);
1141
+ }
1142
+ }
1143
+ //# sourceMappingURL=inference.js.map