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

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