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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1101) hide show
  1. package/README.md +50 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/agent/run-node-tool.d.ts +39 -0
  4. package/dist/agent/run-node-tool.d.ts.map +1 -0
  5. package/dist/agent/run-node-tool.js +55 -0
  6. package/dist/agent/run-node-tool.js.map +1 -0
  7. package/dist/chat-prediction-forwarder.d.ts +13 -0
  8. package/dist/chat-prediction-forwarder.d.ts.map +1 -0
  9. package/dist/chat-prediction-forwarder.js +22 -0
  10. package/dist/chat-prediction-forwarder.js.map +1 -0
  11. package/dist/chat-tool-call-repair.d.ts +45 -0
  12. package/dist/chat-tool-call-repair.d.ts.map +1 -0
  13. package/dist/chat-tool-call-repair.js +100 -0
  14. package/dist/chat-tool-call-repair.js.map +1 -0
  15. package/dist/chat-turn-registry.d.ts +169 -0
  16. package/dist/chat-turn-registry.d.ts.map +1 -0
  17. package/dist/chat-turn-registry.js +326 -0
  18. package/dist/chat-turn-registry.js.map +1 -0
  19. package/dist/collection-api.d.ts +2 -2
  20. package/dist/collection-api.d.ts.map +1 -1
  21. package/dist/collection-api.js +82 -14
  22. package/dist/collection-api.js.map +1 -1
  23. package/dist/configured-providers.d.ts +52 -0
  24. package/dist/configured-providers.d.ts.map +1 -0
  25. package/dist/configured-providers.js +85 -0
  26. package/dist/configured-providers.js.map +1 -0
  27. package/dist/cors.d.ts +22 -0
  28. package/dist/cors.d.ts.map +1 -0
  29. package/dist/cors.js +91 -0
  30. package/dist/cors.js.map +1 -0
  31. package/dist/credit-gate.d.ts +36 -0
  32. package/dist/credit-gate.d.ts.map +1 -0
  33. package/dist/credit-gate.js +76 -0
  34. package/dist/credit-gate.js.map +1 -0
  35. package/dist/custom-providers.d.ts +40 -0
  36. package/dist/custom-providers.d.ts.map +1 -0
  37. package/dist/custom-providers.js +134 -0
  38. package/dist/custom-providers.js.map +1 -0
  39. package/dist/debug-sessions.d.ts +10 -0
  40. package/dist/debug-sessions.d.ts.map +1 -0
  41. package/dist/debug-sessions.js +9 -0
  42. package/dist/debug-sessions.js.map +1 -0
  43. package/dist/drain.d.ts +34 -0
  44. package/dist/drain.d.ts.map +1 -0
  45. package/dist/drain.js +68 -0
  46. package/dist/drain.js.map +1 -0
  47. package/dist/e2e-server.d.ts +30 -0
  48. package/dist/e2e-server.d.ts.map +1 -0
  49. package/dist/e2e-server.js +111 -0
  50. package/dist/e2e-server.js.map +1 -0
  51. package/dist/error-traces.d.ts +56 -0
  52. package/dist/error-traces.d.ts.map +1 -0
  53. package/dist/error-traces.js +179 -0
  54. package/dist/error-traces.js.map +1 -0
  55. package/dist/example-workflows.d.ts +20 -0
  56. package/dist/example-workflows.d.ts.map +1 -0
  57. package/dist/example-workflows.js +123 -0
  58. package/dist/example-workflows.js.map +1 -0
  59. package/dist/external-mcp.d.ts +58 -0
  60. package/dist/external-mcp.d.ts.map +1 -0
  61. package/dist/external-mcp.js +288 -0
  62. package/dist/external-mcp.js.map +1 -0
  63. package/dist/fake-runtime.d.ts +114 -0
  64. package/dist/fake-runtime.d.ts.map +1 -0
  65. package/dist/fake-runtime.js +307 -0
  66. package/dist/fake-runtime.js.map +1 -0
  67. package/dist/file-api.d.ts +4 -7
  68. package/dist/file-api.d.ts.map +1 -1
  69. package/dist/file-api.js +122 -39
  70. package/dist/file-api.js.map +1 -1
  71. package/dist/frontend-renderer-registry.d.ts +75 -0
  72. package/dist/frontend-renderer-registry.d.ts.map +1 -0
  73. package/dist/frontend-renderer-registry.js +111 -0
  74. package/dist/frontend-renderer-registry.js.map +1 -0
  75. package/dist/generation-recovery.d.ts +13 -0
  76. package/dist/generation-recovery.d.ts.map +1 -0
  77. package/dist/generation-recovery.js +219 -0
  78. package/dist/generation-recovery.js.map +1 -0
  79. package/dist/headless-job-runner.d.ts +71 -0
  80. package/dist/headless-job-runner.d.ts.map +1 -0
  81. package/dist/headless-job-runner.js +198 -0
  82. package/dist/headless-job-runner.js.map +1 -0
  83. package/dist/http-api.d.ts +157 -24
  84. package/dist/http-api.d.ts.map +1 -1
  85. package/dist/http-api.js +628 -646
  86. package/dist/http-api.js.map +1 -1
  87. package/dist/http-body-schemas.d.ts +109 -0
  88. package/dist/http-body-schemas.d.ts.map +1 -0
  89. package/dist/http-body-schemas.js +146 -0
  90. package/dist/http-body-schemas.js.map +1 -0
  91. package/dist/index.d.ts +10 -3
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +10 -3
  94. package/dist/index.js.map +1 -1
  95. package/dist/interrupted-jobs.d.ts +14 -0
  96. package/dist/interrupted-jobs.d.ts.map +1 -0
  97. package/dist/interrupted-jobs.js +28 -0
  98. package/dist/interrupted-jobs.js.map +1 -0
  99. package/dist/job-control.d.ts +57 -0
  100. package/dist/job-control.d.ts.map +1 -0
  101. package/dist/job-control.js +134 -0
  102. package/dist/job-control.js.map +1 -0
  103. package/dist/job-queue.d.ts +47 -0
  104. package/dist/job-queue.d.ts.map +1 -0
  105. package/dist/job-queue.js +52 -0
  106. package/dist/job-queue.js.map +1 -0
  107. package/dist/job-run-registry.d.ts +176 -0
  108. package/dist/job-run-registry.d.ts.map +1 -0
  109. package/dist/job-run-registry.js +312 -0
  110. package/dist/job-run-registry.js.map +1 -0
  111. package/dist/lib/app-build-service.d.ts +16 -0
  112. package/dist/lib/app-build-service.d.ts.map +1 -0
  113. package/dist/lib/app-build-service.js +39 -0
  114. package/dist/lib/app-build-service.js.map +1 -0
  115. package/dist/lib/app-debug-service.d.ts +16 -0
  116. package/dist/lib/app-debug-service.d.ts.map +1 -0
  117. package/dist/lib/app-debug-service.js +48 -0
  118. package/dist/lib/app-debug-service.js.map +1 -0
  119. package/dist/lib/app-deployment-service.d.ts +82 -0
  120. package/dist/lib/app-deployment-service.d.ts.map +1 -0
  121. package/dist/lib/app-deployment-service.js +282 -0
  122. package/dist/lib/app-deployment-service.js.map +1 -0
  123. package/dist/lib/app-instances-service.d.ts +1284 -0
  124. package/dist/lib/app-instances-service.d.ts.map +1 -0
  125. package/dist/lib/app-instances-service.js +378 -0
  126. package/dist/lib/app-instances-service.js.map +1 -0
  127. package/dist/lib/app-run-cancellation.d.ts +4 -0
  128. package/dist/lib/app-run-cancellation.d.ts.map +1 -0
  129. package/dist/lib/app-run-cancellation.js +28 -0
  130. package/dist/lib/app-run-cancellation.js.map +1 -0
  131. package/dist/lib/app-run-server.d.ts +7 -0
  132. package/dist/lib/app-run-server.d.ts.map +1 -0
  133. package/dist/lib/app-run-server.js +6 -0
  134. package/dist/lib/app-run-server.js.map +1 -0
  135. package/dist/lib/app-session-scope.d.ts +91 -0
  136. package/dist/lib/app-session-scope.d.ts.map +1 -0
  137. package/dist/lib/app-session-scope.js +91 -0
  138. package/dist/lib/app-session-scope.js.map +1 -0
  139. package/dist/lib/applications-service.d.ts +354 -0
  140. package/dist/lib/applications-service.d.ts.map +1 -0
  141. package/dist/lib/applications-service.js +507 -0
  142. package/dist/lib/applications-service.js.map +1 -0
  143. package/dist/lib/asset-duration.d.ts +7 -0
  144. package/dist/lib/asset-duration.d.ts.map +1 -0
  145. package/dist/lib/asset-duration.js +24 -0
  146. package/dist/lib/asset-duration.js.map +1 -0
  147. package/dist/lib/asset-export.d.ts +34 -0
  148. package/dist/lib/asset-export.d.ts.map +1 -0
  149. package/dist/lib/asset-export.js +113 -0
  150. package/dist/lib/asset-export.js.map +1 -0
  151. package/dist/lib/asset-model-interface.d.ts +41 -0
  152. package/dist/lib/asset-model-interface.d.ts.map +1 -0
  153. package/dist/lib/asset-model-interface.js +74 -0
  154. package/dist/lib/asset-model-interface.js.map +1 -0
  155. package/dist/lib/asset-paths.d.ts +49 -1
  156. package/dist/lib/asset-paths.d.ts.map +1 -1
  157. package/dist/lib/asset-paths.js +127 -31
  158. package/dist/lib/asset-paths.js.map +1 -1
  159. package/dist/lib/asset-response.d.ts +12 -0
  160. package/dist/lib/asset-response.d.ts.map +1 -0
  161. package/dist/lib/asset-response.js +89 -0
  162. package/dist/lib/asset-response.js.map +1 -0
  163. package/dist/lib/audio-peaks.d.ts +23 -0
  164. package/dist/lib/audio-peaks.d.ts.map +1 -0
  165. package/dist/lib/audio-peaks.js +335 -0
  166. package/dist/lib/audio-peaks.js.map +1 -0
  167. package/dist/lib/bridge.d.ts +9 -1
  168. package/dist/lib/bridge.d.ts.map +1 -1
  169. package/dist/lib/bridge.js +27 -4
  170. package/dist/lib/bridge.js.map +1 -1
  171. package/dist/lib/compression.d.ts +3 -0
  172. package/dist/lib/compression.d.ts.map +1 -0
  173. package/dist/lib/compression.js +3 -0
  174. package/dist/lib/compression.js.map +1 -0
  175. package/dist/lib/document-model-interfaces.d.ts +30 -0
  176. package/dist/lib/document-model-interfaces.d.ts.map +1 -0
  177. package/dist/lib/document-model-interfaces.js +296 -0
  178. package/dist/lib/document-model-interfaces.js.map +1 -0
  179. package/dist/lib/env-config.d.ts +9 -0
  180. package/dist/lib/env-config.d.ts.map +1 -0
  181. package/dist/lib/env-config.js +18 -0
  182. package/dist/lib/env-config.js.map +1 -0
  183. package/dist/lib/example-apps.d.ts +52 -0
  184. package/dist/lib/example-apps.d.ts.map +1 -0
  185. package/dist/lib/example-apps.js +192 -0
  186. package/dist/lib/example-apps.js.map +1 -0
  187. package/dist/lib/example-games.d.ts +5 -0
  188. package/dist/lib/example-games.d.ts.map +1 -0
  189. package/dist/lib/example-games.js +13 -0
  190. package/dist/lib/example-games.js.map +1 -0
  191. package/dist/lib/example-recipes.d.ts +33 -0
  192. package/dist/lib/example-recipes.d.ts.map +1 -0
  193. package/dist/lib/example-recipes.js +213 -0
  194. package/dist/lib/example-recipes.js.map +1 -0
  195. package/dist/lib/example-storyboards.d.ts +40 -0
  196. package/dist/lib/example-storyboards.d.ts.map +1 -0
  197. package/dist/lib/example-storyboards.js +131 -0
  198. package/dist/lib/example-storyboards.js.map +1 -0
  199. package/dist/lib/example-thumbnail.d.ts +21 -0
  200. package/dist/lib/example-thumbnail.d.ts.map +1 -0
  201. package/dist/lib/example-thumbnail.js +50 -0
  202. package/dist/lib/example-thumbnail.js.map +1 -0
  203. package/dist/lib/example-timelines.d.ts +9 -0
  204. package/dist/lib/example-timelines.d.ts.map +1 -0
  205. package/dist/lib/example-timelines.js +25 -0
  206. package/dist/lib/example-timelines.js.map +1 -0
  207. package/dist/lib/extension-dist.d.ts +24 -0
  208. package/dist/lib/extension-dist.d.ts.map +1 -0
  209. package/dist/lib/extension-dist.js +67 -0
  210. package/dist/lib/extension-dist.js.map +1 -0
  211. package/dist/lib/external-asset-lookup.d.ts +30 -0
  212. package/dist/lib/external-asset-lookup.d.ts.map +1 -0
  213. package/dist/lib/external-asset-lookup.js +99 -0
  214. package/dist/lib/external-asset-lookup.js.map +1 -0
  215. package/dist/lib/external-assets.d.ts +13 -0
  216. package/dist/lib/external-assets.d.ts.map +1 -0
  217. package/dist/lib/external-assets.js +46 -0
  218. package/dist/lib/external-assets.js.map +1 -0
  219. package/dist/lib/fly-replay.d.ts +34 -0
  220. package/dist/lib/fly-replay.d.ts.map +1 -0
  221. package/dist/lib/fly-replay.js +111 -0
  222. package/dist/lib/fly-replay.js.map +1 -0
  223. package/dist/lib/http-rate-limit.d.ts +32 -0
  224. package/dist/lib/http-rate-limit.d.ts.map +1 -0
  225. package/dist/lib/http-rate-limit.js +47 -0
  226. package/dist/lib/http-rate-limit.js.map +1 -0
  227. package/dist/lib/http-tracing.d.ts +12 -0
  228. package/dist/lib/http-tracing.d.ts.map +1 -0
  229. package/dist/lib/http-tracing.js +81 -0
  230. package/dist/lib/http-tracing.js.map +1 -0
  231. package/dist/lib/instance-id.d.ts +25 -0
  232. package/dist/lib/instance-id.d.ts.map +1 -0
  233. package/dist/lib/instance-id.js +44 -0
  234. package/dist/lib/instance-id.js.map +1 -0
  235. package/dist/lib/link-codes.d.ts +82 -0
  236. package/dist/lib/link-codes.d.ts.map +1 -0
  237. package/dist/lib/link-codes.js +100 -0
  238. package/dist/lib/link-codes.js.map +1 -0
  239. package/dist/lib/local-asset-upload.d.ts +5 -0
  240. package/dist/lib/local-asset-upload.d.ts.map +1 -0
  241. package/dist/lib/local-asset-upload.js +69 -0
  242. package/dist/lib/local-asset-upload.js.map +1 -0
  243. package/dist/lib/local-file-access.d.ts +31 -0
  244. package/dist/lib/local-file-access.d.ts.map +1 -0
  245. package/dist/lib/local-file-access.js +169 -0
  246. package/dist/lib/local-file-access.js.map +1 -0
  247. package/dist/lib/localhost-trust.d.ts +59 -0
  248. package/dist/lib/localhost-trust.d.ts.map +1 -0
  249. package/dist/lib/localhost-trust.js +139 -0
  250. package/dist/lib/localhost-trust.js.map +1 -0
  251. package/dist/lib/mcp-mount.d.ts +25 -0
  252. package/dist/lib/mcp-mount.d.ts.map +1 -0
  253. package/dist/lib/mcp-mount.js +32 -0
  254. package/dist/lib/mcp-mount.js.map +1 -0
  255. package/dist/lib/media-size.d.ts +21 -0
  256. package/dist/lib/media-size.d.ts.map +1 -0
  257. package/dist/lib/media-size.js +48 -0
  258. package/dist/lib/media-size.js.map +1 -0
  259. package/dist/lib/media.d.ts +33 -0
  260. package/dist/lib/media.d.ts.map +1 -0
  261. package/dist/lib/media.js +110 -0
  262. package/dist/lib/media.js.map +1 -0
  263. package/dist/lib/package-asset-export.d.ts +83 -0
  264. package/dist/lib/package-asset-export.d.ts.map +1 -0
  265. package/dist/lib/package-asset-export.js +212 -0
  266. package/dist/lib/package-asset-export.js.map +1 -0
  267. package/dist/lib/package-assets.d.ts +41 -0
  268. package/dist/lib/package-assets.d.ts.map +1 -0
  269. package/dist/lib/package-assets.js +155 -0
  270. package/dist/lib/package-assets.js.map +1 -0
  271. package/dist/lib/project-delete.d.ts +11 -0
  272. package/dist/lib/project-delete.d.ts.map +1 -0
  273. package/dist/lib/project-delete.js +67 -0
  274. package/dist/lib/project-delete.js.map +1 -0
  275. package/dist/lib/project-document-copy.d.ts +31 -0
  276. package/dist/lib/project-document-copy.d.ts.map +1 -0
  277. package/dist/lib/project-document-copy.js +473 -0
  278. package/dist/lib/project-document-copy.js.map +1 -0
  279. package/dist/lib/public-app-assets.d.ts +8 -0
  280. package/dist/lib/public-app-assets.d.ts.map +1 -0
  281. package/dist/lib/public-app-assets.js +77 -0
  282. package/dist/lib/public-app-assets.js.map +1 -0
  283. package/dist/lib/public-routes.d.ts +102 -0
  284. package/dist/lib/public-routes.d.ts.map +1 -0
  285. package/dist/lib/public-routes.js +168 -0
  286. package/dist/lib/public-routes.js.map +1 -0
  287. package/dist/lib/public-workflow-share.d.ts +20 -0
  288. package/dist/lib/public-workflow-share.d.ts.map +1 -0
  289. package/dist/lib/public-workflow-share.js +45 -0
  290. package/dist/lib/public-workflow-share.js.map +1 -0
  291. package/dist/lib/run-trace-live-delivery.d.ts +25 -0
  292. package/dist/lib/run-trace-live-delivery.d.ts.map +1 -0
  293. package/dist/lib/run-trace-live-delivery.js +91 -0
  294. package/dist/lib/run-trace-live-delivery.js.map +1 -0
  295. package/dist/lib/runtime-detection.d.ts +17 -0
  296. package/dist/lib/runtime-detection.d.ts.map +1 -0
  297. package/dist/lib/runtime-detection.js +90 -0
  298. package/dist/lib/runtime-detection.js.map +1 -0
  299. package/dist/lib/storage-access.d.ts +21 -0
  300. package/dist/lib/storage-access.d.ts.map +1 -0
  301. package/dist/lib/storage-access.js +74 -0
  302. package/dist/lib/storage-access.js.map +1 -0
  303. package/dist/lib/storage.d.ts +9 -0
  304. package/dist/lib/storage.d.ts.map +1 -0
  305. package/dist/lib/storage.js +28 -0
  306. package/dist/lib/storage.js.map +1 -0
  307. package/dist/lib/storyboard-export.d.ts +64 -0
  308. package/dist/lib/storyboard-export.d.ts.map +1 -0
  309. package/dist/lib/storyboard-export.js +183 -0
  310. package/dist/lib/storyboard-export.js.map +1 -0
  311. package/dist/lib/style-presets.d.ts +34 -0
  312. package/dist/lib/style-presets.d.ts.map +1 -0
  313. package/dist/lib/style-presets.js +62 -0
  314. package/dist/lib/style-presets.js.map +1 -0
  315. package/dist/lib/temp-url-resolver.d.ts +35 -0
  316. package/dist/lib/temp-url-resolver.d.ts.map +1 -0
  317. package/dist/lib/temp-url-resolver.js +88 -0
  318. package/dist/lib/temp-url-resolver.js.map +1 -0
  319. package/dist/lib/test-ui-run-routes.d.ts +8 -0
  320. package/dist/lib/test-ui-run-routes.d.ts.map +1 -0
  321. package/dist/lib/test-ui-run-routes.js +42 -0
  322. package/dist/lib/test-ui-run-routes.js.map +1 -0
  323. package/dist/lib/thumbnail.d.ts +74 -0
  324. package/dist/lib/thumbnail.d.ts.map +1 -0
  325. package/dist/lib/thumbnail.js +305 -0
  326. package/dist/lib/thumbnail.js.map +1 -0
  327. package/dist/lib/timeline-bundle.d.ts +1821 -0
  328. package/dist/lib/timeline-bundle.d.ts.map +1 -0
  329. package/dist/lib/timeline-bundle.js +342 -0
  330. package/dist/lib/timeline-bundle.js.map +1 -0
  331. package/dist/lib/video-proxy.d.ts +114 -0
  332. package/dist/lib/video-proxy.d.ts.map +1 -0
  333. package/dist/lib/video-proxy.js +546 -0
  334. package/dist/lib/video-proxy.js.map +1 -0
  335. package/dist/lib/wire-values.d.ts +31 -0
  336. package/dist/lib/wire-values.d.ts.map +1 -0
  337. package/dist/lib/wire-values.js +49 -0
  338. package/dist/lib/wire-values.js.map +1 -0
  339. package/dist/lib/workflow-bundle.d.ts +102 -0
  340. package/dist/lib/workflow-bundle.d.ts.map +1 -0
  341. package/dist/lib/workflow-bundle.js +306 -0
  342. package/dist/lib/workflow-bundle.js.map +1 -0
  343. package/dist/lib/workflow-service.d.ts +82 -0
  344. package/dist/lib/workflow-service.d.ts.map +1 -0
  345. package/dist/lib/workflow-service.js +197 -0
  346. package/dist/lib/workflow-service.js.map +1 -0
  347. package/dist/lib/workflow-workspace.d.ts +20 -0
  348. package/dist/lib/workflow-workspace.d.ts.map +1 -0
  349. package/dist/lib/workflow-workspace.js +65 -0
  350. package/dist/lib/workflow-workspace.js.map +1 -0
  351. package/dist/lib/ws-connection-health.d.ts +10 -0
  352. package/dist/lib/ws-connection-health.d.ts.map +1 -0
  353. package/dist/lib/ws-connection-health.js +38 -0
  354. package/dist/lib/ws-connection-health.js.map +1 -0
  355. package/dist/lib/ws-rate-limit.d.ts +22 -0
  356. package/dist/lib/ws-rate-limit.d.ts.map +1 -0
  357. package/dist/lib/ws-rate-limit.js +45 -0
  358. package/dist/lib/ws-rate-limit.js.map +1 -0
  359. package/dist/lib/ws-upgrade.d.ts +40 -0
  360. package/dist/lib/ws-upgrade.d.ts.map +1 -0
  361. package/dist/lib/ws-upgrade.js +66 -0
  362. package/dist/lib/ws-upgrade.js.map +1 -0
  363. package/dist/lib/zip-stream.d.ts +46 -0
  364. package/dist/lib/zip-stream.d.ts.map +1 -0
  365. package/dist/lib/zip-stream.js +140 -0
  366. package/dist/lib/zip-stream.js.map +1 -0
  367. package/dist/mcp-agent-tools.d.ts +56 -0
  368. package/dist/mcp-agent-tools.d.ts.map +1 -0
  369. package/dist/mcp-agent-tools.js +1147 -0
  370. package/dist/mcp-agent-tools.js.map +1 -0
  371. package/dist/mcp-client-config.d.ts +64 -0
  372. package/dist/mcp-client-config.d.ts.map +1 -0
  373. package/dist/mcp-client-config.js +353 -0
  374. package/dist/mcp-client-config.js.map +1 -0
  375. package/dist/mcp-server.d.ts +56 -7
  376. package/dist/mcp-server.d.ts.map +1 -1
  377. package/dist/mcp-server.js +255 -762
  378. package/dist/mcp-server.js.map +1 -1
  379. package/dist/mcp-tool-deps.d.ts +20 -0
  380. package/dist/mcp-tool-deps.d.ts.map +1 -0
  381. package/dist/mcp-tool-deps.js +61 -0
  382. package/dist/mcp-tool-deps.js.map +1 -0
  383. package/dist/messagepack.d.ts +7 -0
  384. package/dist/messagepack.d.ts.map +1 -0
  385. package/dist/messagepack.js +19 -0
  386. package/dist/messagepack.js.map +1 -0
  387. package/dist/model-download-runtime.d.ts +9 -0
  388. package/dist/model-download-runtime.d.ts.map +1 -0
  389. package/dist/model-download-runtime.js +77 -0
  390. package/dist/model-download-runtime.js.map +1 -0
  391. package/dist/model-execution-availability.d.ts +14 -0
  392. package/dist/model-execution-availability.d.ts.map +1 -0
  393. package/dist/model-execution-availability.js +161 -0
  394. package/dist/model-execution-availability.js.map +1 -0
  395. package/dist/models-api.d.ts +61 -5
  396. package/dist/models-api.d.ts.map +1 -1
  397. package/dist/models-api.js +182 -689
  398. package/dist/models-api.js.map +1 -1
  399. package/dist/node-registry-setup.d.ts +84 -0
  400. package/dist/node-registry-setup.d.ts.map +1 -0
  401. package/dist/node-registry-setup.js +163 -0
  402. package/dist/node-registry-setup.js.map +1 -0
  403. package/dist/oauth/cimd.d.ts +28 -0
  404. package/dist/oauth/cimd.d.ts.map +1 -0
  405. package/dist/oauth/cimd.js +177 -0
  406. package/dist/oauth/cimd.js.map +1 -0
  407. package/dist/oauth/gate.d.ts +38 -0
  408. package/dist/oauth/gate.d.ts.map +1 -0
  409. package/dist/oauth/gate.js +77 -0
  410. package/dist/oauth/gate.js.map +1 -0
  411. package/dist/oauth/metadata.d.ts +35 -0
  412. package/dist/oauth/metadata.d.ts.map +1 -0
  413. package/dist/oauth/metadata.js +56 -0
  414. package/dist/oauth/metadata.js.map +1 -0
  415. package/dist/oauth/pending-store.d.ts +79 -0
  416. package/dist/oauth/pending-store.d.ts.map +1 -0
  417. package/dist/oauth/pending-store.js +133 -0
  418. package/dist/oauth/pending-store.js.map +1 -0
  419. package/dist/oauth/pkce.d.ts +16 -0
  420. package/dist/oauth/pkce.d.ts.map +1 -0
  421. package/dist/oauth/pkce.js +29 -0
  422. package/dist/oauth/pkce.js.map +1 -0
  423. package/dist/oauth/validate.d.ts +25 -0
  424. package/dist/oauth/validate.d.ts.map +1 -0
  425. package/dist/oauth/validate.js +62 -0
  426. package/dist/oauth/validate.js.map +1 -0
  427. package/dist/oauth/www-authenticate.d.ts +9 -0
  428. package/dist/oauth/www-authenticate.d.ts.map +1 -0
  429. package/dist/oauth/www-authenticate.js +33 -0
  430. package/dist/oauth/www-authenticate.js.map +1 -0
  431. package/dist/oauth-api.d.ts +19 -0
  432. package/dist/oauth-api.d.ts.map +1 -1
  433. package/dist/oauth-api.js +531 -12
  434. package/dist/oauth-api.js.map +1 -1
  435. package/dist/openai-api.d.ts.map +1 -1
  436. package/dist/openai-api.js +4 -9
  437. package/dist/openai-api.js.map +1 -1
  438. package/dist/pack-snapshot.d.ts +24 -0
  439. package/dist/pack-snapshot.d.ts.map +1 -0
  440. package/dist/pack-snapshot.js +35 -0
  441. package/dist/pack-snapshot.js.map +1 -0
  442. package/dist/plugins/websocket.d.ts +21 -4
  443. package/dist/plugins/websocket.d.ts.map +1 -1
  444. package/dist/plugins/websocket.js +106 -297
  445. package/dist/plugins/websocket.js.map +1 -1
  446. package/dist/python-bridge-gate.d.ts +28 -0
  447. package/dist/python-bridge-gate.d.ts.map +1 -0
  448. package/dist/python-bridge-gate.js +36 -0
  449. package/dist/python-bridge-gate.js.map +1 -0
  450. package/dist/resolve-media-urls.d.ts +17 -3
  451. package/dist/resolve-media-urls.d.ts.map +1 -1
  452. package/dist/resolve-media-urls.js +117 -31
  453. package/dist/resolve-media-urls.js.map +1 -1
  454. package/dist/resource-events.d.ts +28 -0
  455. package/dist/resource-events.d.ts.map +1 -0
  456. package/dist/resource-events.js +20 -0
  457. package/dist/resource-events.js.map +1 -0
  458. package/dist/routes/account.d.ts +100 -0
  459. package/dist/routes/account.d.ts.map +1 -0
  460. package/dist/routes/account.js +197 -0
  461. package/dist/routes/account.js.map +1 -0
  462. package/dist/routes/app-runs.d.ts +4 -0
  463. package/dist/routes/app-runs.d.ts.map +1 -0
  464. package/dist/routes/app-runs.js +173 -0
  465. package/dist/routes/app-runs.js.map +1 -0
  466. package/dist/routes/applications.d.ts +36 -0
  467. package/dist/routes/applications.d.ts.map +1 -0
  468. package/dist/routes/applications.js +183 -0
  469. package/dist/routes/applications.js.map +1 -0
  470. package/dist/routes/assets.d.ts +3 -3
  471. package/dist/routes/assets.d.ts.map +1 -1
  472. package/dist/routes/assets.js +78 -44
  473. package/dist/routes/assets.js.map +1 -1
  474. package/dist/routes/atlascloud-webhook.d.ts +93 -0
  475. package/dist/routes/atlascloud-webhook.d.ts.map +1 -0
  476. package/dist/routes/atlascloud-webhook.js +369 -0
  477. package/dist/routes/atlascloud-webhook.js.map +1 -0
  478. package/dist/routes/collections.d.ts.map +1 -1
  479. package/dist/routes/config.d.ts +26 -0
  480. package/dist/routes/config.d.ts.map +1 -0
  481. package/dist/routes/config.js +64 -0
  482. package/dist/routes/config.js.map +1 -0
  483. package/dist/routes/documents.d.ts +27 -0
  484. package/dist/routes/documents.d.ts.map +1 -0
  485. package/dist/routes/documents.js +155 -0
  486. package/dist/routes/documents.js.map +1 -0
  487. package/dist/routes/fal-credits.d.ts +4 -0
  488. package/dist/routes/fal-credits.d.ts.map +1 -0
  489. package/dist/routes/fal-credits.js +101 -0
  490. package/dist/routes/fal-credits.js.map +1 -0
  491. package/dist/routes/fal-pricing-estimate.d.ts +4 -0
  492. package/dist/routes/fal-pricing-estimate.d.ts.map +1 -0
  493. package/dist/routes/fal-pricing-estimate.js +114 -0
  494. package/dist/routes/fal-pricing-estimate.js.map +1 -0
  495. package/dist/routes/fal-pricing.d.ts +4 -0
  496. package/dist/routes/fal-pricing.d.ts.map +1 -0
  497. package/dist/routes/fal-pricing.js +93 -0
  498. package/dist/routes/fal-pricing.js.map +1 -0
  499. package/dist/routes/fal-webhook.d.ts +102 -0
  500. package/dist/routes/fal-webhook.d.ts.map +1 -0
  501. package/dist/routes/fal-webhook.js +379 -0
  502. package/dist/routes/fal-webhook.js.map +1 -0
  503. package/dist/routes/files.d.ts.map +1 -1
  504. package/dist/routes/files.js +4 -3
  505. package/dist/routes/files.js.map +1 -1
  506. package/dist/routes/health.d.ts +1 -0
  507. package/dist/routes/health.d.ts.map +1 -1
  508. package/dist/routes/health.js +41 -7
  509. package/dist/routes/health.js.map +1 -1
  510. package/dist/routes/integrations.d.ts +39 -0
  511. package/dist/routes/integrations.d.ts.map +1 -0
  512. package/dist/routes/integrations.js +211 -0
  513. package/dist/routes/integrations.js.map +1 -0
  514. package/dist/routes/js-scripts.d.ts +32 -0
  515. package/dist/routes/js-scripts.d.ts.map +1 -0
  516. package/dist/routes/js-scripts.js +498 -0
  517. package/dist/routes/js-scripts.js.map +1 -0
  518. package/dist/routes/kie-credits.d.ts +4 -0
  519. package/dist/routes/kie-credits.d.ts.map +1 -0
  520. package/dist/routes/kie-credits.js +93 -0
  521. package/dist/routes/kie-credits.js.map +1 -0
  522. package/dist/routes/kie-pricing.d.ts +4 -0
  523. package/dist/routes/kie-pricing.d.ts.map +1 -0
  524. package/dist/routes/kie-pricing.js +45 -0
  525. package/dist/routes/kie-pricing.js.map +1 -0
  526. package/dist/routes/kie-webhook.d.ts +4 -0
  527. package/dist/routes/kie-webhook.d.ts.map +1 -0
  528. package/dist/routes/kie-webhook.js +70 -0
  529. package/dist/routes/kie-webhook.js.map +1 -0
  530. package/dist/routes/nodes.d.ts.map +1 -1
  531. package/dist/routes/nodes.js +29 -51
  532. package/dist/routes/nodes.js.map +1 -1
  533. package/dist/routes/oauth-as.d.ts +30 -0
  534. package/dist/routes/oauth-as.d.ts.map +1 -0
  535. package/dist/routes/oauth-as.js +412 -0
  536. package/dist/routes/oauth-as.js.map +1 -0
  537. package/dist/routes/oauth.d.ts.map +1 -1
  538. package/dist/routes/openai.d.ts.map +1 -1
  539. package/dist/routes/public-apps.d.ts +27 -0
  540. package/dist/routes/public-apps.d.ts.map +1 -0
  541. package/dist/routes/public-apps.js +99 -0
  542. package/dist/routes/public-apps.js.map +1 -0
  543. package/dist/routes/public-shared-workflows.d.ts +16 -0
  544. package/dist/routes/public-shared-workflows.d.ts.map +1 -0
  545. package/dist/routes/public-shared-workflows.js +55 -0
  546. package/dist/routes/public-shared-workflows.js.map +1 -0
  547. package/dist/routes/run-spans.d.ts +4 -0
  548. package/dist/routes/run-spans.d.ts.map +1 -0
  549. package/dist/routes/run-spans.js +53 -0
  550. package/dist/routes/run-spans.js.map +1 -0
  551. package/dist/routes/sandbox-modules.d.ts +17 -0
  552. package/dist/routes/sandbox-modules.d.ts.map +1 -0
  553. package/dist/routes/sandbox-modules.js +85 -0
  554. package/dist/routes/sandbox-modules.js.map +1 -0
  555. package/dist/routes/sdk-v1.d.ts +24 -0
  556. package/dist/routes/sdk-v1.d.ts.map +1 -0
  557. package/dist/routes/sdk-v1.js +320 -0
  558. package/dist/routes/sdk-v1.js.map +1 -0
  559. package/dist/routes/storage.d.ts.map +1 -1
  560. package/dist/routes/storyboards.d.ts +16 -0
  561. package/dist/routes/storyboards.d.ts.map +1 -0
  562. package/dist/routes/storyboards.js +97 -0
  563. package/dist/routes/storyboards.js.map +1 -0
  564. package/dist/routes/timeline-animations.d.ts +23 -0
  565. package/dist/routes/timeline-animations.d.ts.map +1 -0
  566. package/dist/routes/timeline-animations.js +99 -0
  567. package/dist/routes/timeline-animations.js.map +1 -0
  568. package/dist/routes/timeline-audio-bake.d.ts +51 -0
  569. package/dist/routes/timeline-audio-bake.d.ts.map +1 -0
  570. package/dist/routes/timeline-audio-bake.js +110 -0
  571. package/dist/routes/timeline-audio-bake.js.map +1 -0
  572. package/dist/routes/timeline-fonts.d.ts +51 -0
  573. package/dist/routes/timeline-fonts.d.ts.map +1 -0
  574. package/dist/routes/timeline-fonts.js +195 -0
  575. package/dist/routes/timeline-fonts.js.map +1 -0
  576. package/dist/routes/timeline-isolate-subject.d.ts +55 -0
  577. package/dist/routes/timeline-isolate-subject.d.ts.map +1 -0
  578. package/dist/routes/timeline-isolate-subject.js +128 -0
  579. package/dist/routes/timeline-isolate-subject.js.map +1 -0
  580. package/dist/routes/timeline-track-object.d.ts +39 -0
  581. package/dist/routes/timeline-track-object.d.ts.map +1 -0
  582. package/dist/routes/timeline-track-object.js +97 -0
  583. package/dist/routes/timeline-track-object.js.map +1 -0
  584. package/dist/routes/timelines.d.ts +18 -0
  585. package/dist/routes/timelines.d.ts.map +1 -0
  586. package/dist/routes/timelines.js +191 -0
  587. package/dist/routes/timelines.js.map +1 -0
  588. package/dist/routes/workflows.d.ts +6 -9
  589. package/dist/routes/workflows.d.ts.map +1 -1
  590. package/dist/routes/workflows.js +100 -11
  591. package/dist/routes/workflows.js.map +1 -1
  592. package/dist/routes/workspace.d.ts.map +1 -1
  593. package/dist/run-supervisor.d.ts +30 -0
  594. package/dist/run-supervisor.d.ts.map +1 -0
  595. package/dist/run-supervisor.js +86 -0
  596. package/dist/run-supervisor.js.map +1 -0
  597. package/dist/sandbox-catalog.d.ts +28 -0
  598. package/dist/sandbox-catalog.d.ts.map +1 -0
  599. package/dist/sandbox-catalog.js +74 -0
  600. package/dist/sandbox-catalog.js.map +1 -0
  601. package/dist/screenshot-projects.d.ts +27 -0
  602. package/dist/screenshot-projects.d.ts.map +1 -0
  603. package/dist/screenshot-projects.js +880 -0
  604. package/dist/screenshot-projects.js.map +1 -0
  605. package/dist/screenshot-server.js +950 -47
  606. package/dist/screenshot-server.js.map +1 -1
  607. package/dist/sdk/sdk-cached-model-inventory.d.ts +21 -0
  608. package/dist/sdk/sdk-cached-model-inventory.d.ts.map +1 -0
  609. package/dist/sdk/sdk-cached-model-inventory.js +51 -0
  610. package/dist/sdk/sdk-cached-model-inventory.js.map +1 -0
  611. package/dist/sdk/sdk-capabilities-service.d.ts +32 -0
  612. package/dist/sdk/sdk-capabilities-service.d.ts.map +1 -0
  613. package/dist/sdk/sdk-capabilities-service.js +47 -0
  614. package/dist/sdk/sdk-capabilities-service.js.map +1 -0
  615. package/dist/sdk/sdk-execution-readiness-probe.d.ts +19 -0
  616. package/dist/sdk/sdk-execution-readiness-probe.d.ts.map +1 -0
  617. package/dist/sdk/sdk-execution-readiness-probe.js +90 -0
  618. package/dist/sdk/sdk-execution-readiness-probe.js.map +1 -0
  619. package/dist/sdk/sdk-execution-target-readiness.d.ts +15 -0
  620. package/dist/sdk/sdk-execution-target-readiness.d.ts.map +1 -0
  621. package/dist/sdk/sdk-execution-target-readiness.js +50 -0
  622. package/dist/sdk/sdk-execution-target-readiness.js.map +1 -0
  623. package/dist/sdk/sdk-feature-flags.d.ts +18 -0
  624. package/dist/sdk/sdk-feature-flags.d.ts.map +1 -0
  625. package/dist/sdk/sdk-feature-flags.js +30 -0
  626. package/dist/sdk/sdk-feature-flags.js.map +1 -0
  627. package/dist/sdk/sdk-huggingface-download-state.d.ts +15 -0
  628. package/dist/sdk/sdk-huggingface-download-state.d.ts.map +1 -0
  629. package/dist/sdk/sdk-huggingface-download-state.js +25 -0
  630. package/dist/sdk/sdk-huggingface-download-state.js.map +1 -0
  631. package/dist/sdk/sdk-live-runner-registry.d.ts +21 -0
  632. package/dist/sdk/sdk-live-runner-registry.d.ts.map +1 -0
  633. package/dist/sdk/sdk-live-runner-registry.js +26 -0
  634. package/dist/sdk/sdk-live-runner-registry.js.map +1 -0
  635. package/dist/sdk/sdk-model-catalog-service.d.ts +20 -0
  636. package/dist/sdk/sdk-model-catalog-service.d.ts.map +1 -0
  637. package/dist/sdk/sdk-model-catalog-service.js +219 -0
  638. package/dist/sdk/sdk-model-catalog-service.js.map +1 -0
  639. package/dist/sdk/sdk-model-download-service.d.ts +39 -0
  640. package/dist/sdk/sdk-model-download-service.d.ts.map +1 -0
  641. package/dist/sdk/sdk-model-download-service.js +277 -0
  642. package/dist/sdk/sdk-model-download-service.js.map +1 -0
  643. package/dist/sdk/sdk-model-requirement-probe.d.ts +30 -0
  644. package/dist/sdk/sdk-model-requirement-probe.d.ts.map +1 -0
  645. package/dist/sdk/sdk-model-requirement-probe.js +120 -0
  646. package/dist/sdk/sdk-model-requirement-probe.js.map +1 -0
  647. package/dist/sdk/sdk-node-package-requirement-probe.d.ts +20 -0
  648. package/dist/sdk/sdk-node-package-requirement-probe.d.ts.map +1 -0
  649. package/dist/sdk/sdk-node-package-requirement-probe.js +44 -0
  650. package/dist/sdk/sdk-node-package-requirement-probe.js.map +1 -0
  651. package/dist/sdk/sdk-node-type-inventory-service.d.ts +11 -0
  652. package/dist/sdk/sdk-node-type-inventory-service.d.ts.map +1 -0
  653. package/dist/sdk/sdk-node-type-inventory-service.js +36 -0
  654. package/dist/sdk/sdk-node-type-inventory-service.js.map +1 -0
  655. package/dist/sdk/sdk-preflight-orchestrator.d.ts +54 -0
  656. package/dist/sdk/sdk-preflight-orchestrator.d.ts.map +1 -0
  657. package/dist/sdk/sdk-preflight-orchestrator.js +63 -0
  658. package/dist/sdk/sdk-preflight-orchestrator.js.map +1 -0
  659. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts +35 -0
  660. package/dist/sdk/sdk-preflight-requirement-resolver.d.ts.map +1 -0
  661. package/dist/sdk/sdk-preflight-requirement-resolver.js +67 -0
  662. package/dist/sdk/sdk-preflight-requirement-resolver.js.map +1 -0
  663. package/dist/sdk/sdk-preflight-service.d.ts +61 -0
  664. package/dist/sdk/sdk-preflight-service.d.ts.map +1 -0
  665. package/dist/sdk/sdk-preflight-service.js +104 -0
  666. package/dist/sdk/sdk-preflight-service.js.map +1 -0
  667. package/dist/sdk/sdk-preflight-workflow-source.d.ts +18 -0
  668. package/dist/sdk/sdk-preflight-workflow-source.d.ts.map +1 -0
  669. package/dist/sdk/sdk-preflight-workflow-source.js +42 -0
  670. package/dist/sdk/sdk-preflight-workflow-source.js.map +1 -0
  671. package/dist/sdk/sdk-route-policy.d.ts +3 -0
  672. package/dist/sdk/sdk-route-policy.d.ts.map +1 -0
  673. package/dist/sdk/sdk-route-policy.js +18 -0
  674. package/dist/sdk/sdk-route-policy.js.map +1 -0
  675. package/dist/sdk/sdk-runtime-capabilities-service.d.ts +60 -0
  676. package/dist/sdk/sdk-runtime-capabilities-service.d.ts.map +1 -0
  677. package/dist/sdk/sdk-runtime-capabilities-service.js +30 -0
  678. package/dist/sdk/sdk-runtime-capabilities-service.js.map +1 -0
  679. package/dist/sdk/sdk-runtime-requirement-probe.d.ts +13 -0
  680. package/dist/sdk/sdk-runtime-requirement-probe.d.ts.map +1 -0
  681. package/dist/sdk/sdk-runtime-requirement-probe.js +55 -0
  682. package/dist/sdk/sdk-runtime-requirement-probe.js.map +1 -0
  683. package/dist/sdk/sdk-static-preflight-service.d.ts +66 -0
  684. package/dist/sdk/sdk-static-preflight-service.d.ts.map +1 -0
  685. package/dist/sdk/sdk-static-preflight-service.js +492 -0
  686. package/dist/sdk/sdk-static-preflight-service.js.map +1 -0
  687. package/dist/sdk/sdk-temporary-asset-service.d.ts +18 -0
  688. package/dist/sdk/sdk-temporary-asset-service.d.ts.map +1 -0
  689. package/dist/sdk/sdk-temporary-asset-service.js +33 -0
  690. package/dist/sdk/sdk-temporary-asset-service.js.map +1 -0
  691. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts +9 -0
  692. package/dist/sdk/sdk-temporary-asset-upload-http-handler.d.ts.map +1 -0
  693. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js +65 -0
  694. package/dist/sdk/sdk-temporary-asset-upload-http-handler.js.map +1 -0
  695. package/dist/sdk/sdk-v1-handler-map.d.ts +44 -0
  696. package/dist/sdk/sdk-v1-handler-map.d.ts.map +1 -0
  697. package/dist/sdk/sdk-v1-handler-map.js +37 -0
  698. package/dist/sdk/sdk-v1-handler-map.js.map +1 -0
  699. package/dist/sdk/sdk-v1-service-error.d.ts +21 -0
  700. package/dist/sdk/sdk-v1-service-error.d.ts.map +1 -0
  701. package/dist/sdk/sdk-v1-service-error.js +62 -0
  702. package/dist/sdk/sdk-v1-service-error.js.map +1 -0
  703. package/dist/sdk/sdk-v1-service.d.ts +74 -0
  704. package/dist/sdk/sdk-v1-service.d.ts.map +1 -0
  705. package/dist/sdk/sdk-v1-service.js +219 -0
  706. package/dist/sdk/sdk-v1-service.js.map +1 -0
  707. package/dist/sdk/sdk-worker-readiness-adapter.d.ts +22 -0
  708. package/dist/sdk/sdk-worker-readiness-adapter.d.ts.map +1 -0
  709. package/dist/sdk/sdk-worker-readiness-adapter.js +29 -0
  710. package/dist/sdk/sdk-worker-readiness-adapter.js.map +1 -0
  711. package/dist/server.js +1091 -206
  712. package/dist/server.js.map +1 -1
  713. package/dist/session/app-run-fold.d.ts +7 -0
  714. package/dist/session/app-run-fold.d.ts.map +1 -0
  715. package/dist/session/app-run-fold.js +45 -0
  716. package/dist/session/app-run-fold.js.map +1 -0
  717. package/dist/session/asset-autosave.d.ts +80 -0
  718. package/dist/session/asset-autosave.d.ts.map +1 -0
  719. package/dist/session/asset-autosave.js +456 -0
  720. package/dist/session/asset-autosave.js.map +1 -0
  721. package/dist/session/chat-compaction.d.ts +107 -0
  722. package/dist/session/chat-compaction.d.ts.map +1 -0
  723. package/dist/session/chat-compaction.js +191 -0
  724. package/dist/session/chat-compaction.js.map +1 -0
  725. package/dist/session/chat-history.d.ts +75 -0
  726. package/dist/session/chat-history.d.ts.map +1 -0
  727. package/dist/session/chat-history.js +194 -0
  728. package/dist/session/chat-history.js.map +1 -0
  729. package/dist/session/chat-prompt.d.ts +45 -0
  730. package/dist/session/chat-prompt.d.ts.map +1 -0
  731. package/dist/session/chat-prompt.js +502 -0
  732. package/dist/session/chat-prompt.js.map +1 -0
  733. package/dist/session/chat-turn.d.ts +337 -0
  734. package/dist/session/chat-turn.d.ts.map +1 -0
  735. package/dist/session/chat-turn.js +3612 -0
  736. package/dist/session/chat-turn.js.map +1 -0
  737. package/dist/session/client-session.d.ts +59 -0
  738. package/dist/session/client-session.d.ts.map +1 -0
  739. package/dist/session/client-session.js +2 -0
  740. package/dist/session/client-session.js.map +1 -0
  741. package/dist/session/commands.d.ts +133 -0
  742. package/dist/session/commands.d.ts.map +1 -0
  743. package/dist/session/commands.js +784 -0
  744. package/dist/session/commands.js.map +1 -0
  745. package/dist/session/inference.d.ts +218 -0
  746. package/dist/session/inference.d.ts.map +1 -0
  747. package/dist/session/inference.js +1143 -0
  748. package/dist/session/inference.js.map +1 -0
  749. package/dist/session/job-execution.d.ts +484 -0
  750. package/dist/session/job-execution.d.ts.map +1 -0
  751. package/dist/session/job-execution.js +2379 -0
  752. package/dist/session/job-execution.js.map +1 -0
  753. package/dist/session/media-generation.d.ts +94 -0
  754. package/dist/session/media-generation.d.ts.map +1 -0
  755. package/dist/session/media-generation.js +234 -0
  756. package/dist/session/media-generation.js.map +1 -0
  757. package/dist/session/model-interfaces.d.ts +28 -0
  758. package/dist/session/model-interfaces.d.ts.map +1 -0
  759. package/dist/session/model-interfaces.js +133 -0
  760. package/dist/session/model-interfaces.js.map +1 -0
  761. package/dist/session/sanitize.d.ts +7 -0
  762. package/dist/session/sanitize.d.ts.map +1 -0
  763. package/dist/session/sanitize.js +64 -0
  764. package/dist/session/sanitize.js.map +1 -0
  765. package/dist/settings-registry.d.ts +6 -15
  766. package/dist/settings-registry.d.ts.map +1 -1
  767. package/dist/settings-registry.js +6 -103
  768. package/dist/settings-registry.js.map +1 -1
  769. package/dist/storage-api.d.ts +20 -0
  770. package/dist/storage-api.d.ts.map +1 -1
  771. package/dist/storage-api.js +260 -77
  772. package/dist/storage-api.js.map +1 -1
  773. package/dist/storage-retention.d.ts +14 -0
  774. package/dist/storage-retention.d.ts.map +1 -0
  775. package/dist/storage-retention.js +95 -0
  776. package/dist/storage-retention.js.map +1 -0
  777. package/dist/system-stats.d.ts +52 -0
  778. package/dist/system-stats.d.ts.map +1 -0
  779. package/dist/system-stats.js +134 -0
  780. package/dist/system-stats.js.map +1 -0
  781. package/dist/test-ui-server.d.ts +46 -0
  782. package/dist/test-ui-server.d.ts.map +1 -1
  783. package/dist/test-ui-server.js +207 -42
  784. package/dist/test-ui-server.js.map +1 -1
  785. package/dist/timeline-generation-recovery.d.ts +4 -0
  786. package/dist/timeline-generation-recovery.d.ts.map +1 -0
  787. package/dist/timeline-generation-recovery.js +72 -0
  788. package/dist/timeline-generation-recovery.js.map +1 -0
  789. package/dist/triggers/boot.d.ts +73 -0
  790. package/dist/triggers/boot.d.ts.map +1 -0
  791. package/dist/triggers/boot.js +149 -0
  792. package/dist/triggers/boot.js.map +1 -0
  793. package/dist/triggers/dispatcher.d.ts +234 -0
  794. package/dist/triggers/dispatcher.d.ts.map +1 -0
  795. package/dist/triggers/dispatcher.js +525 -0
  796. package/dist/triggers/dispatcher.js.map +1 -0
  797. package/dist/triggers/file-watch.d.ts +90 -0
  798. package/dist/triggers/file-watch.d.ts.map +1 -0
  799. package/dist/triggers/file-watch.js +405 -0
  800. package/dist/triggers/file-watch.js.map +1 -0
  801. package/dist/triggers/registration-sync.d.ts +34 -0
  802. package/dist/triggers/registration-sync.d.ts.map +1 -0
  803. package/dist/triggers/registration-sync.js +162 -0
  804. package/dist/triggers/registration-sync.js.map +1 -0
  805. package/dist/triggers/schedule-timing.d.ts +52 -0
  806. package/dist/triggers/schedule-timing.d.ts.map +1 -0
  807. package/dist/triggers/schedule-timing.js +90 -0
  808. package/dist/triggers/schedule-timing.js.map +1 -0
  809. package/dist/triggers/scheduler.d.ts +55 -0
  810. package/dist/triggers/scheduler.d.ts.map +1 -0
  811. package/dist/triggers/scheduler.js +122 -0
  812. package/dist/triggers/scheduler.js.map +1 -0
  813. package/dist/triggers/settle.d.ts +66 -0
  814. package/dist/triggers/settle.d.ts.map +1 -0
  815. package/dist/triggers/settle.js +99 -0
  816. package/dist/triggers/settle.js.map +1 -0
  817. package/dist/triggers/stores.d.ts +38 -0
  818. package/dist/triggers/stores.d.ts.map +1 -0
  819. package/dist/triggers/stores.js +168 -0
  820. package/dist/triggers/stores.js.map +1 -0
  821. package/dist/triggers/webhook-route.d.ts +49 -0
  822. package/dist/triggers/webhook-route.d.ts.map +1 -0
  823. package/dist/triggers/webhook-route.js +148 -0
  824. package/dist/triggers/webhook-route.js.map +1 -0
  825. package/dist/trpc/context.d.ts +52 -5
  826. package/dist/trpc/context.d.ts.map +1 -1
  827. package/dist/trpc/context.js +4 -1
  828. package/dist/trpc/context.js.map +1 -1
  829. package/dist/trpc/error-formatter.d.ts.map +1 -1
  830. package/dist/trpc/error-formatter.js +23 -2
  831. package/dist/trpc/error-formatter.js.map +1 -1
  832. package/dist/trpc/error-logging.d.ts +24 -0
  833. package/dist/trpc/error-logging.d.ts.map +1 -0
  834. package/dist/trpc/error-logging.js +48 -0
  835. package/dist/trpc/error-logging.js.map +1 -0
  836. package/dist/trpc/index.d.ts +2 -2
  837. package/dist/trpc/index.d.ts.map +1 -1
  838. package/dist/trpc/index.js +0 -2
  839. package/dist/trpc/index.js.map +1 -1
  840. package/dist/trpc/middleware.d.ts +6 -3
  841. package/dist/trpc/middleware.d.ts.map +1 -1
  842. package/dist/trpc/router.d.ts +100 -2540
  843. package/dist/trpc/router.d.ts.map +1 -1
  844. package/dist/trpc/router.js +58 -6
  845. package/dist/trpc/router.js.map +1 -1
  846. package/dist/trpc/routers/agent-access.d.ts +149 -0
  847. package/dist/trpc/routers/agent-access.d.ts.map +1 -0
  848. package/dist/trpc/routers/agent-access.js +224 -0
  849. package/dist/trpc/routers/agent-access.js.map +1 -0
  850. package/dist/trpc/routers/app-instances.d.ts +2269 -0
  851. package/dist/trpc/routers/app-instances.d.ts.map +1 -0
  852. package/dist/trpc/routers/app-instances.js +52 -0
  853. package/dist/trpc/routers/app-instances.js.map +1 -0
  854. package/dist/trpc/routers/app-runs.d.ts +1092 -0
  855. package/dist/trpc/routers/app-runs.d.ts.map +1 -0
  856. package/dist/trpc/routers/app-runs.js +28 -0
  857. package/dist/trpc/routers/app-runs.js.map +1 -0
  858. package/dist/trpc/routers/applications.d.ts +2212 -0
  859. package/dist/trpc/routers/applications.d.ts.map +1 -0
  860. package/dist/trpc/routers/applications.js +221 -0
  861. package/dist/trpc/routers/applications.js.map +1 -0
  862. package/dist/trpc/routers/assets.d.ts +194 -42
  863. package/dist/trpc/routers/assets.d.ts.map +1 -1
  864. package/dist/trpc/routers/assets.js +503 -105
  865. package/dist/trpc/routers/assets.js.map +1 -1
  866. package/dist/trpc/routers/bug-reports.d.ts +33 -0
  867. package/dist/trpc/routers/bug-reports.d.ts.map +1 -0
  868. package/dist/trpc/routers/bug-reports.js +69 -0
  869. package/dist/trpc/routers/bug-reports.js.map +1 -0
  870. package/dist/trpc/routers/code-gen.d.ts +99 -0
  871. package/dist/trpc/routers/code-gen.d.ts.map +1 -0
  872. package/dist/trpc/routers/code-gen.js +164 -0
  873. package/dist/trpc/routers/code-gen.js.map +1 -0
  874. package/dist/trpc/routers/collections.d.ts +1 -26
  875. package/dist/trpc/routers/collections.d.ts.map +1 -1
  876. package/dist/trpc/routers/collections.js +145 -78
  877. package/dist/trpc/routers/collections.js.map +1 -1
  878. package/dist/trpc/routers/costs.d.ts +40 -96
  879. package/dist/trpc/routers/costs.d.ts.map +1 -1
  880. package/dist/trpc/routers/costs.js +14 -89
  881. package/dist/trpc/routers/costs.js.map +1 -1
  882. package/dist/trpc/routers/credits.d.ts +110 -0
  883. package/dist/trpc/routers/credits.d.ts.map +1 -0
  884. package/dist/trpc/routers/credits.js +69 -0
  885. package/dist/trpc/routers/credits.js.map +1 -0
  886. package/dist/trpc/routers/custom-providers.d.ts +88 -0
  887. package/dist/trpc/routers/custom-providers.d.ts.map +1 -0
  888. package/dist/trpc/routers/custom-providers.js +140 -0
  889. package/dist/trpc/routers/custom-providers.js.map +1 -0
  890. package/dist/trpc/routers/documents.d.ts +61 -0
  891. package/dist/trpc/routers/documents.d.ts.map +1 -0
  892. package/dist/trpc/routers/documents.js +29 -0
  893. package/dist/trpc/routers/documents.js.map +1 -0
  894. package/dist/trpc/routers/error-traces.d.ts +132 -0
  895. package/dist/trpc/routers/error-traces.d.ts.map +1 -0
  896. package/dist/trpc/routers/error-traces.js +118 -0
  897. package/dist/trpc/routers/error-traces.js.map +1 -0
  898. package/dist/trpc/routers/extension.d.ts +24 -0
  899. package/dist/trpc/routers/extension.d.ts.map +1 -0
  900. package/dist/trpc/routers/extension.js +28 -0
  901. package/dist/trpc/routers/extension.js.map +1 -0
  902. package/dist/trpc/routers/external-mcp.d.ts +108 -0
  903. package/dist/trpc/routers/external-mcp.d.ts.map +1 -0
  904. package/dist/trpc/routers/external-mcp.js +70 -0
  905. package/dist/trpc/routers/external-mcp.js.map +1 -0
  906. package/dist/trpc/routers/files.d.ts +9 -2
  907. package/dist/trpc/routers/files.d.ts.map +1 -1
  908. package/dist/trpc/routers/files.js +67 -37
  909. package/dist/trpc/routers/files.js.map +1 -1
  910. package/dist/trpc/routers/fonts.d.ts +30 -0
  911. package/dist/trpc/routers/fonts.d.ts.map +1 -0
  912. package/dist/trpc/routers/fonts.js +112 -0
  913. package/dist/trpc/routers/fonts.js.map +1 -0
  914. package/dist/trpc/routers/gameDraftHistory.d.ts +8 -0
  915. package/dist/trpc/routers/gameDraftHistory.d.ts.map +1 -0
  916. package/dist/trpc/routers/gameDraftHistory.js +40 -0
  917. package/dist/trpc/routers/gameDraftHistory.js.map +1 -0
  918. package/dist/trpc/routers/games.d.ts +26502 -0
  919. package/dist/trpc/routers/games.d.ts.map +1 -0
  920. package/dist/trpc/routers/games.js +674 -0
  921. package/dist/trpc/routers/games.js.map +1 -0
  922. package/dist/trpc/routers/integrations.d.ts +86 -0
  923. package/dist/trpc/routers/integrations.d.ts.map +1 -0
  924. package/dist/trpc/routers/integrations.js +129 -0
  925. package/dist/trpc/routers/integrations.js.map +1 -0
  926. package/dist/trpc/routers/jobs.d.ts +117 -21
  927. package/dist/trpc/routers/jobs.d.ts.map +1 -1
  928. package/dist/trpc/routers/jobs.js +191 -30
  929. package/dist/trpc/routers/jobs.js.map +1 -1
  930. package/dist/trpc/routers/js-scripts.d.ts +410 -0
  931. package/dist/trpc/routers/js-scripts.d.ts.map +1 -0
  932. package/dist/trpc/routers/js-scripts.js +303 -0
  933. package/dist/trpc/routers/js-scripts.js.map +1 -0
  934. package/dist/trpc/routers/mcp-config.d.ts +4 -2
  935. package/dist/trpc/routers/mcp-config.d.ts.map +1 -1
  936. package/dist/trpc/routers/mcp-config.js +46 -206
  937. package/dist/trpc/routers/mcp-config.js.map +1 -1
  938. package/dist/trpc/routers/memories.d.ts +79 -0
  939. package/dist/trpc/routers/memories.d.ts.map +1 -0
  940. package/dist/trpc/routers/memories.js +66 -0
  941. package/dist/trpc/routers/memories.js.map +1 -0
  942. package/dist/trpc/routers/messages.d.ts +4 -77
  943. package/dist/trpc/routers/messages.d.ts.map +1 -1
  944. package/dist/trpc/routers/messages.js +9 -58
  945. package/dist/trpc/routers/messages.js.map +1 -1
  946. package/dist/trpc/routers/models.d.ts +1544 -249
  947. package/dist/trpc/routers/models.d.ts.map +1 -1
  948. package/dist/trpc/routers/models.js +624 -318
  949. package/dist/trpc/routers/models.js.map +1 -1
  950. package/dist/trpc/routers/nodes.d.ts +32 -16
  951. package/dist/trpc/routers/nodes.d.ts.map +1 -1
  952. package/dist/trpc/routers/nodes.js +70 -31
  953. package/dist/trpc/routers/nodes.js.map +1 -1
  954. package/dist/trpc/routers/packs.d.ts +184 -0
  955. package/dist/trpc/routers/packs.d.ts.map +1 -0
  956. package/dist/trpc/routers/packs.js +259 -0
  957. package/dist/trpc/routers/packs.js.map +1 -0
  958. package/dist/trpc/routers/projects.d.ts +422 -0
  959. package/dist/trpc/routers/projects.d.ts.map +1 -0
  960. package/dist/trpc/routers/projects.js +373 -0
  961. package/dist/trpc/routers/projects.js.map +1 -0
  962. package/dist/trpc/routers/resources.d.ts +120 -0
  963. package/dist/trpc/routers/resources.d.ts.map +1 -0
  964. package/dist/trpc/routers/resources.js +212 -0
  965. package/dist/trpc/routers/resources.js.map +1 -0
  966. package/dist/trpc/routers/runs.d.ts +472 -0
  967. package/dist/trpc/routers/runs.d.ts.map +1 -0
  968. package/dist/trpc/routers/runs.js +40 -0
  969. package/dist/trpc/routers/runs.js.map +1 -0
  970. package/dist/trpc/routers/scripts.d.ts +1116 -0
  971. package/dist/trpc/routers/scripts.d.ts.map +1 -0
  972. package/dist/trpc/routers/scripts.js +131 -0
  973. package/dist/trpc/routers/scripts.js.map +1 -0
  974. package/dist/trpc/routers/segmentation.d.ts +62 -0
  975. package/dist/trpc/routers/segmentation.d.ts.map +1 -0
  976. package/dist/trpc/routers/segmentation.js +146 -0
  977. package/dist/trpc/routers/segmentation.js.map +1 -0
  978. package/dist/trpc/routers/settings.d.ts +180 -10
  979. package/dist/trpc/routers/settings.d.ts.map +1 -1
  980. package/dist/trpc/routers/settings.js +125 -33
  981. package/dist/trpc/routers/settings.js.map +1 -1
  982. package/dist/trpc/routers/sketch.d.ts +868 -0
  983. package/dist/trpc/routers/sketch.d.ts.map +1 -0
  984. package/dist/trpc/routers/sketch.js +617 -0
  985. package/dist/trpc/routers/sketch.js.map +1 -0
  986. package/dist/trpc/routers/skills.d.ts +76 -22
  987. package/dist/trpc/routers/skills.d.ts.map +1 -1
  988. package/dist/trpc/routers/skills.js +195 -170
  989. package/dist/trpc/routers/skills.js.map +1 -1
  990. package/dist/trpc/routers/storage.d.ts +3 -30
  991. package/dist/trpc/routers/storage.d.ts.map +1 -1
  992. package/dist/trpc/routers/storage.js +60 -117
  993. package/dist/trpc/routers/storage.js.map +1 -1
  994. package/dist/trpc/routers/storyboards.d.ts +6639 -0
  995. package/dist/trpc/routers/storyboards.d.ts.map +1 -0
  996. package/dist/trpc/routers/storyboards.js +156 -0
  997. package/dist/trpc/routers/storyboards.js.map +1 -0
  998. package/dist/trpc/routers/threads.d.ts +33 -21
  999. package/dist/trpc/routers/threads.d.ts.map +1 -1
  1000. package/dist/trpc/routers/threads.js +36 -30
  1001. package/dist/trpc/routers/threads.js.map +1 -1
  1002. package/dist/trpc/routers/timeline.d.ts +9085 -0
  1003. package/dist/trpc/routers/timeline.d.ts.map +1 -0
  1004. package/dist/trpc/routers/timeline.js +669 -0
  1005. package/dist/trpc/routers/timeline.js.map +1 -0
  1006. package/dist/trpc/routers/triggers.d.ts +46 -0
  1007. package/dist/trpc/routers/triggers.d.ts.map +1 -0
  1008. package/dist/trpc/routers/triggers.js +117 -0
  1009. package/dist/trpc/routers/triggers.js.map +1 -0
  1010. package/dist/trpc/routers/users.d.ts +1 -14
  1011. package/dist/trpc/routers/users.d.ts.map +1 -1
  1012. package/dist/trpc/routers/users.js +1 -12
  1013. package/dist/trpc/routers/users.js.map +1 -1
  1014. package/dist/trpc/routers/worker.d.ts +243 -0
  1015. package/dist/trpc/routers/worker.d.ts.map +1 -0
  1016. package/dist/trpc/routers/worker.js +221 -0
  1017. package/dist/trpc/routers/worker.js.map +1 -0
  1018. package/dist/trpc/routers/workflows.d.ts +428 -187
  1019. package/dist/trpc/routers/workflows.d.ts.map +1 -1
  1020. package/dist/trpc/routers/workflows.js +347 -345
  1021. package/dist/trpc/routers/workflows.js.map +1 -1
  1022. package/dist/trpc/routers/workspace.d.ts +59 -33
  1023. package/dist/trpc/routers/workspace.d.ts.map +1 -1
  1024. package/dist/trpc/routers/workspace.js +230 -93
  1025. package/dist/trpc/routers/workspace.js.map +1 -1
  1026. package/dist/trpc/sandbox-coverage.d.ts +64 -0
  1027. package/dist/trpc/sandbox-coverage.d.ts.map +1 -0
  1028. package/dist/trpc/sandbox-coverage.js +1139 -0
  1029. package/dist/trpc/sandbox-coverage.js.map +1 -0
  1030. package/dist/websocket-client-session.d.ts +322 -0
  1031. package/dist/websocket-client-session.d.ts.map +1 -0
  1032. package/dist/websocket-client-session.js +1267 -0
  1033. package/dist/websocket-client-session.js.map +1 -0
  1034. package/dist/workflow-interface-service.d.ts +87 -0
  1035. package/dist/workflow-interface-service.d.ts.map +1 -0
  1036. package/dist/workflow-interface-service.js +131 -0
  1037. package/dist/workflow-interface-service.js.map +1 -0
  1038. package/dist/workspace-api.d.ts.map +1 -1
  1039. package/dist/workspace-api.js +33 -23
  1040. package/dist/workspace-api.js.map +1 -1
  1041. package/dist/ws-adapter.d.ts +46 -3
  1042. package/dist/ws-adapter.d.ts.map +1 -1
  1043. package/dist/ws-adapter.js +164 -26
  1044. package/dist/ws-adapter.js.map +1 -1
  1045. package/package.json +97 -36
  1046. package/dist/agent/agent-runtime.d.ts +0 -47
  1047. package/dist/agent/agent-runtime.d.ts.map +0 -1
  1048. package/dist/agent/agent-runtime.js +0 -579
  1049. package/dist/agent/agent-runtime.js.map +0 -1
  1050. package/dist/agent/codex-agent.d.ts +0 -41
  1051. package/dist/agent/codex-agent.d.ts.map +0 -1
  1052. package/dist/agent/codex-agent.js +0 -334
  1053. package/dist/agent/codex-agent.js.map +0 -1
  1054. package/dist/agent/index.d.ts +0 -6
  1055. package/dist/agent/index.d.ts.map +0 -1
  1056. package/dist/agent/index.js +0 -4
  1057. package/dist/agent/index.js.map +0 -1
  1058. package/dist/agent/llm-agent.d.ts +0 -51
  1059. package/dist/agent/llm-agent.d.ts.map +0 -1
  1060. package/dist/agent/llm-agent.js +0 -526
  1061. package/dist/agent/llm-agent.js.map +0 -1
  1062. package/dist/agent/mcp-tool-server.d.ts +0 -33
  1063. package/dist/agent/mcp-tool-server.d.ts.map +0 -1
  1064. package/dist/agent/mcp-tool-server.js +0 -292
  1065. package/dist/agent/mcp-tool-server.js.map +0 -1
  1066. package/dist/agent/opencode-agent.d.ts +0 -32
  1067. package/dist/agent/opencode-agent.d.ts.map +0 -1
  1068. package/dist/agent/opencode-agent.js +0 -332
  1069. package/dist/agent/opencode-agent.js.map +0 -1
  1070. package/dist/agent/pi-agent.d.ts +0 -42
  1071. package/dist/agent/pi-agent.d.ts.map +0 -1
  1072. package/dist/agent/pi-agent.js +0 -429
  1073. package/dist/agent/pi-agent.js.map +0 -1
  1074. package/dist/agent/sdk-provider.d.ts +0 -46
  1075. package/dist/agent/sdk-provider.d.ts.map +0 -1
  1076. package/dist/agent/sdk-provider.js +0 -50
  1077. package/dist/agent/sdk-provider.js.map +0 -1
  1078. package/dist/agent/socket-route.d.ts +0 -11
  1079. package/dist/agent/socket-route.d.ts.map +0 -1
  1080. package/dist/agent/socket-route.js +0 -262
  1081. package/dist/agent/socket-route.js.map +0 -1
  1082. package/dist/agent/transport.d.ts +0 -39
  1083. package/dist/agent/transport.d.ts.map +0 -1
  1084. package/dist/agent/transport.js +0 -17
  1085. package/dist/agent/transport.js.map +0 -1
  1086. package/dist/agent/types.d.ts +0 -11
  1087. package/dist/agent/types.d.ts.map +0 -1
  1088. package/dist/agent/types.js +0 -10
  1089. package/dist/agent/types.js.map +0 -1
  1090. package/dist/routes/jobs.d.ts +0 -16
  1091. package/dist/routes/jobs.d.ts.map +0 -1
  1092. package/dist/routes/jobs.js +0 -25
  1093. package/dist/routes/jobs.js.map +0 -1
  1094. package/dist/trpc/routers/sandboxes.d.ts +0 -64
  1095. package/dist/trpc/routers/sandboxes.d.ts.map +0 -1
  1096. package/dist/trpc/routers/sandboxes.js +0 -327
  1097. package/dist/trpc/routers/sandboxes.js.map +0 -1
  1098. package/dist/unified-websocket-runner.d.ts +0 -280
  1099. package/dist/unified-websocket-runner.d.ts.map +0 -1
  1100. package/dist/unified-websocket-runner.js +0 -3840
  1101. package/dist/unified-websocket-runner.js.map +0 -1
@@ -1,17 +1,48 @@
1
1
  import { router } from "../index.js";
2
2
  import { protectedProcedure } from "../middleware.js";
3
+ import { TRPCError } from "@trpc/server";
3
4
  import { createLogger } from "@nodetool-ai/config";
4
- import { getProvider, isProviderConfigured, listRegisteredProviderIds, providerCapabilities, RECOMMENDED_MODELS } from "@nodetool-ai/runtime";
5
+ import { discoverASRModels, discoverVadModels } from "@nodetool-ai/whisper-cpp";
6
+ import { getProvider, getRegisteredProvider, isProviderConfigured, listRegisteredProviderIds, RECOMMENDED_MODELS, OLLAMA_DEFAULT_URL, OllamaProvider, LMSTUDIO_DEFAULT_URL } from "@nodetool-ai/runtime";
7
+ import { getSecret as getStoredSecret } from "@nodetool-ai/models";
8
+ import { syncCustomProviderRegistry } from "../../custom-providers.js";
9
+ function secretResolverFor(userId) {
10
+ return (key) => getStoredSecret(key, userId).then((v) => v ?? undefined);
11
+ }
5
12
  const log = createLogger("nodetool.websocket.trpc.models");
6
- import { readCachedHfModels, searchCachedHfModels, getModelsByHfType, deleteCachedHfModel, getHuggingfaceFileInfos } from "@nodetool-ai/huggingface";
7
- import { getTransformersJsCacheDir, isRepoCached, recommendedFor, scanTransformersJsCache, TJS_MODEL_TYPES } from "@nodetool-ai/transformers-js-nodes";
13
+ import { readCachedHfModels, searchCachedHfModels, getModelsByHfType, filterModelsByHfType, deleteCachedHfModel } from "@nodetool-ai/huggingface";
14
+ import { getTransformersJsCacheDir, recommendedFor, scanTransformersJsCache, TJS_MODEL_TYPES } from "@nodetool-ai/transformers-js-nodes";
8
15
  import { MODEL_SEARCH_KINDS } from "@nodetool-ai/protocol";
16
+ import { rankedModelKeys } from "../../models-api.js";
9
17
  import { access, readdir } from "node:fs/promises";
10
18
  import { constants as fsConstants } from "node:fs";
11
19
  import { homedir } from "node:os";
12
- import { basename, join } from "node:path";
20
+ import { basename, join, resolve, sep } from "node:path";
13
21
  import { z } from "zod";
14
- import { getSecret } from "@nodetool-ai/models";
22
+ import { isString } from "../../lib/wire-values.js";
23
+ import { readyProviderExecution, resolveModelExecutionAvailability } from "../../model-execution-availability.js";
24
+ const modelArtifactRefSchema = z.object({
25
+ source: z.literal("huggingface"),
26
+ repo_id: z.string(),
27
+ revision: z.string().nullish(),
28
+ path: z.string().nullish(),
29
+ allow_patterns: z.array(z.string()).nullish(),
30
+ model_type: z.string().nullish()
31
+ });
32
+ const modelAdapterInfoSchema = z.object({
33
+ state: z.enum(["installed", "missing_dependency", "unknown"]),
34
+ reason_code: z.string().nullish(),
35
+ reason: z.string().nullish(),
36
+ artifact_ref: modelArtifactRefSchema.nullish()
37
+ });
38
+ const modelExecutionAvailabilitySchema = z.object({
39
+ kind: z.enum(["local", "server", "api", "unavailable"]),
40
+ state: z.enum(["ready", "download_required", "unavailable"]),
41
+ label: z.enum(["Local", "Server", "API", "Unavailable"]),
42
+ reason: z.string().nullish(),
43
+ execution_site: z.enum(["nodetool_host", "provider"]).nullish(),
44
+ runtime_name: z.string().nullish()
45
+ });
15
46
  // ── Local schemas (mirrored in packages/protocol/src/api-schemas/models.ts) ──
16
47
  // Mirrors UnifiedModel in @nodetool-ai/protocol. Any field omitted here is
17
48
  // stripped by the tRPC output validator — which is exactly how the `provider`
@@ -43,33 +74,27 @@ const unifiedModelSchema = z.object({
43
74
  trending_score: z.number().nullish(),
44
75
  image: z.string().nullish(),
45
76
  supports_tools: z.boolean().nullish(),
46
- voices: z.array(z.string()).nullish()
77
+ voices: z.array(z.string()).nullish(),
78
+ capabilities: z.array(z.string()).nullish(),
79
+ languages: z.array(z.string()).nullish(),
80
+ sample_rate: z.number().nullish(),
81
+ requires_reference_text: z.boolean().nullish(),
82
+ adapter: modelAdapterInfoSchema.nullish(),
83
+ execution: modelExecutionAvailabilitySchema.nullish(),
84
+ durations: z.array(z.number()).nullish(),
85
+ resolutions: z.array(z.string()).nullish(),
86
+ aspect_ratios: z.array(z.string()).nullish()
47
87
  });
48
88
  const modelsListOutput = z.array(unifiedModelSchema);
49
89
  const providersOutput = z.array(z.object({
50
90
  provider: z.string(),
51
- capabilities: z.array(z.string())
91
+ capabilities: z.array(z.string()),
92
+ access: z.enum(["in_process", "local_service", "remote_api"]).optional(),
93
+ display_name: z.string().optional()
52
94
  }));
53
95
  const recommendedInput = z.object({
54
96
  check_servers: z.boolean().optional().default(false)
55
97
  });
56
- const hfCacheCheckInput = z.object({
57
- repo_id: z.string().min(1),
58
- allow_pattern: z
59
- .union([z.string(), z.array(z.string())])
60
- .nullable()
61
- .optional(),
62
- ignore_pattern: z
63
- .union([z.string(), z.array(z.string())])
64
- .nullable()
65
- .optional()
66
- });
67
- const hfCacheCheckOutput = z.object({
68
- repo_id: z.string(),
69
- all_present: z.boolean(),
70
- total_files: z.number(),
71
- missing: z.array(z.string())
72
- });
73
98
  const hfFastCacheStatusItem = z.object({
74
99
  key: z.string(),
75
100
  repo_id: z.string(),
@@ -89,28 +114,18 @@ const hfFastCacheStatusOutput = z.array(z.object({
89
114
  key: z.string(),
90
115
  downloaded: z.boolean()
91
116
  }));
92
- const tryCacheFilesInput = z.array(z.object({
93
- repo_id: z.string().optional(),
94
- path: z.string().optional()
95
- }));
96
- const tryCacheFilesOutput = z.array(z.object({
97
- repo_id: z.string(),
98
- path: z.string(),
99
- downloaded: z.boolean()
100
- }));
101
- const tryCacheReposInput = z.array(z.string());
102
- const tryCacheReposOutput = z.array(z.object({
103
- repo_id: z.string(),
104
- downloaded: z.boolean()
105
- }));
106
- const hfFileInfoInput = z.array(z.object({
107
- repo_id: z.string(),
108
- path: z.string()
109
- }));
110
117
  const hfSearchInput = z.object({
111
118
  query: z.string().optional(),
112
119
  type: z.string().optional()
113
120
  });
121
+ const hfHubSearchInput = z.object({
122
+ /** Free-text search passed to the Hub's `search` param. */
123
+ query: z.string().optional(),
124
+ /** HF pipeline tag filter, e.g. "audio-text-to-text". */
125
+ pipeline_tag: z.string().optional(),
126
+ /** Max results (Hub caps high; we keep it modest for the UI). */
127
+ limit: z.number().int().min(1).max(100).optional()
128
+ });
114
129
  const hfByTypeInput = z.object({
115
130
  model_type: z.string().min(1)
116
131
  });
@@ -120,6 +135,33 @@ const tjsByTypeInput = z.object({
120
135
  const hfDeleteInput = z.object({
121
136
  repo_id: z.string().min(1)
122
137
  });
138
+ /** Where a model route operates: the local cache (default) or an attached worker. */
139
+ const modelScope = z.enum(["local", "worker"]).default("local");
140
+ /**
141
+ * Resolve the worker bridge for a `scope: "worker"` request. Requires an
142
+ * attached worker whose image speaks the `models.*` bridge protocol; throws a
143
+ * CONFLICT otherwise so the UI can surface a clear reason.
144
+ */
145
+ async function requireWorkerBridge(ctx) {
146
+ if (!ctx.workerManager) {
147
+ // Server wiring problem, not a runtime state the client can act on.
148
+ throw new TRPCError({
149
+ code: "INTERNAL_SERVER_ERROR",
150
+ message: "Worker support is not configured on this server"
151
+ });
152
+ }
153
+ const active = await ctx.workerManager.getActiveWorker();
154
+ if (!active) {
155
+ throw new TRPCError({ code: "CONFLICT", message: "No worker attached" });
156
+ }
157
+ if (!ctx.pythonBridge.supportsModelManagement()) {
158
+ throw new TRPCError({
159
+ code: "CONFLICT",
160
+ message: "This worker's image is too old for model management. Upgrade the worker image."
161
+ });
162
+ }
163
+ return ctx.pythonBridge;
164
+ }
123
165
  const ollamaModelSchema = z.object({
124
166
  type: z.string(),
125
167
  name: z.string(),
@@ -150,7 +192,7 @@ function dedupeModels(models) {
150
192
  const seen = new Set();
151
193
  const deduped = [];
152
194
  for (const model of models) {
153
- const key = `${model.repo_id ?? ""}::${model.path ?? ""}`;
195
+ const key = `${model.provider ?? ""}::${model.repo_id ?? model.id ?? ""}::${model.path ?? ""}`;
154
196
  if (!seen.has(key)) {
155
197
  seen.add(key);
156
198
  deduped.push(model);
@@ -161,18 +203,43 @@ function dedupeModels(models) {
161
203
  function normalizePatterns(patterns) {
162
204
  if (patterns == null)
163
205
  return null;
164
- if (typeof patterns === "string")
206
+ if (isString(patterns))
165
207
  return patterns ? [patterns] : null;
166
208
  const cleaned = patterns.filter((p) => Boolean(p));
167
209
  return cleaned.length > 0 ? cleaned : null;
168
210
  }
169
- function wildcardToRegExp(pattern) {
170
- const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&");
171
- const regex = `^${escaped.replaceAll("*", ".*").replaceAll("?", ".")}$`;
172
- return new RegExp(regex);
173
- }
174
- function matchesPattern(value, pattern) {
175
- return wildcardToRegExp(pattern).test(value);
211
+ // Linear (two-pointer) glob matcher. `*` matches any run of characters, `?`
212
+ // matches a single character; all other characters are literal. This avoids
213
+ // the catastrophic backtracking of a naive `*` -> `.*` regex compiled from
214
+ // client-supplied patterns (ReDoS), while matching the same glob semantics.
215
+ // Exported for regression tests.
216
+ export function matchesPattern(value, pattern) {
217
+ let v = 0;
218
+ let p = 0;
219
+ let starIdx = -1;
220
+ let matchIdx = 0;
221
+ while (v < value.length) {
222
+ if (p < pattern.length && (pattern[p] === "?" || pattern[p] === value[v])) {
223
+ v++;
224
+ p++;
225
+ }
226
+ else if (p < pattern.length && pattern[p] === "*") {
227
+ starIdx = p;
228
+ matchIdx = v;
229
+ p++;
230
+ }
231
+ else if (starIdx !== -1) {
232
+ p = starIdx + 1;
233
+ matchIdx++;
234
+ v = matchIdx;
235
+ }
236
+ else {
237
+ return false;
238
+ }
239
+ }
240
+ while (p < pattern.length && pattern[p] === "*")
241
+ p++;
242
+ return p === pattern.length;
176
243
  }
177
244
  function isIgnored(path, ignorePatterns) {
178
245
  if (!ignorePatterns || ignorePatterns.length === 0)
@@ -205,6 +272,19 @@ async function pathExists(path) {
205
272
  return false;
206
273
  }
207
274
  }
275
+ // Joins a client-supplied relative path under `baseDir` and rejects any result
276
+ // that escapes the base directory (via `..` segments or an absolute path).
277
+ // Returns null when the path would escape — callers treat that as "not found"
278
+ // so a traversal attempt can't be used as a filesystem existence oracle.
279
+ // Exported for regression tests.
280
+ export function safeJoinWithin(baseDir, relativePath) {
281
+ const resolvedBase = resolve(baseDir);
282
+ const full = resolve(resolvedBase, relativePath);
283
+ if (full !== resolvedBase && !full.startsWith(resolvedBase + sep)) {
284
+ return null;
285
+ }
286
+ return full;
287
+ }
208
288
  async function listSnapshotDirs(repoId) {
209
289
  const snapshotsRoot = join(getHfCacheRoot(), repoToCacheDir(repoId), "snapshots");
210
290
  if (!(await pathExists(snapshotsRoot)))
@@ -216,12 +296,11 @@ async function listSnapshotDirs(repoId) {
216
296
  }
217
297
  async function repoFileInCache(repoId, relativePath) {
218
298
  const snapshotDirs = await listSnapshotDirs(repoId);
219
- for (const snapshotDir of snapshotDirs) {
220
- if (await pathExists(join(snapshotDir, relativePath))) {
221
- return true;
222
- }
223
- }
224
- return false;
299
+ const checks = await Promise.all(snapshotDirs.map((snapshotDir) => {
300
+ const full = safeJoinWithin(snapshotDir, relativePath);
301
+ return full ? pathExists(full) : Promise.resolve(false);
302
+ }));
303
+ return checks.some((exists) => exists);
225
304
  }
226
305
  async function listRepoCachedFiles(repoId) {
227
306
  const snapshotDirs = await listSnapshotDirs(repoId);
@@ -245,9 +324,6 @@ async function listRepoCachedFiles(repoId) {
245
324
  }
246
325
  return [...collected];
247
326
  }
248
- async function hasCachedFiles(repoId) {
249
- return (await listRepoCachedFiles(repoId)).length > 0;
250
- }
251
327
  async function isLlamaCppModelCached(repoId, filePath) {
252
328
  if (await repoFileInCache(repoId, filePath)) {
253
329
  return true;
@@ -261,30 +337,35 @@ async function isLlamaCppModelCached(repoId, filePath) {
261
337
  for (const snapshot of snapshots) {
262
338
  if (!snapshot.isDirectory())
263
339
  continue;
264
- if (await pathExists(join(repoDir, snapshot.name, filePath))) {
340
+ const snapshotDir = join(repoDir, snapshot.name);
341
+ const full = safeJoinWithin(snapshotDir, filePath);
342
+ if (full && (await pathExists(full))) {
265
343
  return true;
266
344
  }
267
- if (await pathExists(join(repoDir, snapshot.name, basename(filePath)))) {
345
+ // basename() strips any traversal segments, so this join stays contained.
346
+ if (await pathExists(join(snapshotDir, basename(filePath)))) {
268
347
  return true;
269
348
  }
270
349
  }
271
350
  return false;
272
351
  }
273
- async function getAvailableProviderIds(userId) {
352
+ export async function getAvailableProviderIds(userId) {
274
353
  const ids = listRegisteredProviderIds();
354
+ const getSecret = secretResolverFor(userId);
275
355
  const checks = await Promise.all(ids.map(async (id) => ({
276
356
  id,
277
- available: await isProviderConfigured(id, userId)
357
+ available: await isProviderConfigured(id, getSecret)
278
358
  })));
279
359
  return checks.filter((c) => c.available).map((c) => c.id);
280
360
  }
281
361
  async function instantiateProvider(provider, userId) {
282
- if (!(await isProviderConfigured(provider, userId))) {
362
+ const getSecret = secretResolverFor(userId);
363
+ if (!(await isProviderConfigured(provider, getSecret))) {
283
364
  log.debug("Provider not configured", { provider, userId });
284
365
  return null;
285
366
  }
286
367
  try {
287
- return await getProvider(provider, userId);
368
+ return await getProvider(provider, getSecret);
288
369
  }
289
370
  catch (error) {
290
371
  log.warn("Provider instantiation failed", {
@@ -356,20 +437,35 @@ async function isServerReachable(url) {
356
437
  clearTimeout(timer);
357
438
  }
358
439
  }
359
- async function getServerAvailability() {
360
- if (isProduction())
361
- return { ollama: false, llama_cpp: false };
362
- const ollamaUrl = (process.env.OLLAMA_API_URL ?? "http://127.0.0.1:11434").replace(/\/+$/, "");
363
- const llamaUrl = process.env.LLAMA_CPP_URL?.replace(/\/+$/, "") ?? "";
364
- const [ollama, llama] = await Promise.all([
440
+ async function getServerAvailability(userId) {
441
+ if (isProduction()) {
442
+ return { ollama: false, llama_cpp: false, lmstudio: false, vllm: false };
443
+ }
444
+ // Resolve URLs the same way getProvider() does: secret store → env →
445
+ // default. Otherwise a user-set URL in Settings → API Keys wouldn't filter
446
+ // the recommended-models list correctly.
447
+ const getSecret = secretResolverFor(userId);
448
+ const resolve = async (key, fallback) => {
449
+ const fromStore = await getSecret(key);
450
+ return (fromStore || process.env[key] || fallback).replace(/\/+$/, "");
451
+ };
452
+ const [ollamaUrl, llamaUrl, lmstudioUrl, vllmUrl] = await Promise.all([
453
+ resolve("OLLAMA_API_URL", OLLAMA_DEFAULT_URL),
454
+ resolve("LLAMA_CPP_URL", ""),
455
+ resolve("LMSTUDIO_API_URL", LMSTUDIO_DEFAULT_URL),
456
+ resolve("VLLM_BASE_URL", "")
457
+ ]);
458
+ const [ollama, llama, lmstudio, vllm] = await Promise.all([
365
459
  isServerReachable(`${ollamaUrl}/api/tags`),
366
460
  llamaUrl
367
461
  ? isServerReachable(`${llamaUrl}/v1/models`)
368
- : Promise.resolve(false)
462
+ : Promise.resolve(false),
463
+ isServerReachable(`${lmstudioUrl}/v1/models`),
464
+ vllmUrl ? isServerReachable(`${vllmUrl}/v1/models`) : Promise.resolve(false)
369
465
  ]);
370
- return { ollama, llama_cpp: llama };
466
+ return { ollama, llama_cpp: llama, lmstudio, vllm };
371
467
  }
372
- async function serverAllowsModel(model, servers) {
468
+ async function serverAllowsModel(model, servers, userId) {
373
469
  if (model.provider === "ollama")
374
470
  return servers.ollama ?? false;
375
471
  if (model.provider === "llama_cpp")
@@ -379,22 +475,98 @@ async function serverAllowsModel(model, servers) {
379
475
  if (model.provider === "vllm")
380
476
  return servers.vllm ?? false;
381
477
  if (model.provider)
382
- return await isProviderConfigured(model.provider);
478
+ return await isProviderConfigured(model.provider, secretResolverFor(userId));
383
479
  return true;
384
480
  }
385
- async function getRecommendedModels(checkServers) {
386
- const models = [...RECOMMENDED_MODELS];
481
+ async function withWhisperDownloadStatus(models, userId) {
482
+ const modelsDir = await secretResolverFor(userId)("WHISPER_CPP_MODELS_DIR");
483
+ const whisperFiles = new Map((await Promise.all([
484
+ discoverASRModels(modelsDir),
485
+ discoverVadModels(modelsDir)
486
+ ]))
487
+ .flat()
488
+ .map((model) => [model.id.split(/[\\/]/).at(-1), model.id]));
489
+ return Promise.all(models.map(async (model) => model.provider === "whisper_cpp" && model.repo_id && model.path
490
+ ? {
491
+ ...model,
492
+ id: whisperFiles.get(model.path) ?? model.id,
493
+ downloaded: whisperFiles.has(model.path) ||
494
+ (await repoFileInCache(model.repo_id, model.path))
495
+ }
496
+ : model));
497
+ }
498
+ async function getRecommendedModels(checkServers, userId) {
499
+ const models = await withWhisperDownloadStatus([...RECOMMENDED_MODELS], userId);
387
500
  if (!checkServers)
388
501
  return models;
389
- const servers = await getServerAvailability();
502
+ const servers = await getServerAvailability(userId);
390
503
  const filtered = [];
391
504
  for (const model of models) {
392
- if (await serverAllowsModel(model, servers)) {
505
+ if (await serverAllowsModel(model, servers, userId)) {
393
506
  filtered.push(model);
394
507
  }
395
508
  }
396
509
  return filtered;
397
510
  }
511
+ /** Map a HF Hub API model record onto our UnifiedModel shape. */
512
+ function hubModelToUnified(m, fallbackTag) {
513
+ const repoId = m.id ?? m.modelId;
514
+ if (!repoId)
515
+ return null;
516
+ const tag = m.pipeline_tag ?? fallbackTag ?? undefined;
517
+ // Hub pipeline tags are dash-cased ("audio-text-to-text"); our model types
518
+ // are the same task underscore-cased and prefixed "hf.".
519
+ const type = tag ? `hf.${tag.replace(/-/g, "_")}` : "hf.model";
520
+ return {
521
+ id: repoId,
522
+ type,
523
+ name: repoId,
524
+ repo_id: repoId,
525
+ provider: "huggingface",
526
+ downloaded: false,
527
+ pipeline_tag: m.pipeline_tag ?? null,
528
+ tags: m.tags ?? null,
529
+ downloads: m.downloads ?? null,
530
+ likes: m.likes ?? null,
531
+ trending_score: m.trendingScore ?? null
532
+ };
533
+ }
534
+ /**
535
+ * Search the live HuggingFace Hub (https://huggingface.co/api/models) by
536
+ * free-text and/or pipeline tag. Returns downloadable repos sorted by
537
+ * popularity. Network/HTTP failures degrade to an empty list.
538
+ */
539
+ async function searchHuggingFaceHub(query, pipelineTag, limit) {
540
+ if (!query && !pipelineTag)
541
+ return [];
542
+ const params = new URLSearchParams();
543
+ if (query)
544
+ params.set("search", query);
545
+ if (pipelineTag)
546
+ params.set("pipeline_tag", pipelineTag);
547
+ params.set("limit", String(limit));
548
+ params.set("sort", "downloads");
549
+ params.set("direction", "-1");
550
+ const headers = { Accept: "application/json" };
551
+ const token = process.env.HF_TOKEN || process.env.HUGGING_FACE_HUB_TOKEN;
552
+ if (token)
553
+ headers.Authorization = `Bearer ${token}`;
554
+ try {
555
+ const res = await fetch(`https://huggingface.co/api/models?${params.toString()}`, { headers });
556
+ if (!res.ok) {
557
+ log.warn("HF Hub search failed: %d %s", res.status, res.statusText);
558
+ return [];
559
+ }
560
+ const data = (await res.json());
561
+ return data
562
+ .map((m) => hubModelToUnified(m, pipelineTag))
563
+ .filter((m) => m !== null);
564
+ }
565
+ catch (err) {
566
+ log.warn("HF Hub search error: %s", err.message);
567
+ return [];
568
+ }
569
+ }
398
570
  function selectRecommended(modality, task) {
399
571
  return RECOMMENDED_MODELS.filter((model) => model.modality === modality && (!task || model.task === task));
400
572
  }
@@ -426,29 +598,65 @@ function tjsCachedAsRecommended(repoId) {
426
598
  return out;
427
599
  }
428
600
  function toUnifiedLanguageModel(model, supportsTools) {
601
+ const registration = getRegisteredProvider(model.provider);
429
602
  return {
430
603
  id: model.id,
431
604
  type: "language_model",
432
605
  name: model.name,
433
606
  provider: model.provider,
434
607
  repo_id: null,
435
- path: model.id,
608
+ path: null,
436
609
  downloaded: model.provider === "ollama" || model.provider === "llama_cpp",
437
610
  tags: [model.provider],
438
- supports_tools: supportsTools ?? null
611
+ supports_tools: supportsTools ?? null,
612
+ execution: registration
613
+ ? readyProviderExecution(registration.metadata)
614
+ : null
439
615
  };
440
616
  }
441
617
  function toUnifiedModel(model, type) {
618
+ const registration = getRegisteredProvider(model.provider);
442
619
  return {
443
620
  id: model.id,
444
621
  type,
445
622
  name: model.name,
446
623
  provider: model.provider,
447
624
  repo_id: null,
448
- path: model.id,
449
- downloaded: model.provider === "ollama" || model.provider === "llama_cpp",
625
+ path: null,
626
+ downloaded: model.provider === "ollama" ||
627
+ model.provider === "llama_cpp" ||
628
+ model.provider === "whisper_cpp" ||
629
+ model.provider === "whisper_cpp_server",
450
630
  tags: [model.provider],
451
- voices: model.voices ?? null
631
+ voices: model.voices ?? null,
632
+ capabilities: model.capabilities ?? null,
633
+ languages: model.languages ?? null,
634
+ sample_rate: model.sampleRate ?? null,
635
+ requires_reference_text: model.requiresReferenceText ?? null,
636
+ adapter: model.adapter
637
+ ? {
638
+ state: model.adapter.state,
639
+ reason_code: model.adapter.reasonCode ?? null,
640
+ reason: model.adapter.reason ?? null,
641
+ artifact_ref: model.adapter.artifactRef
642
+ ? {
643
+ source: model.adapter.artifactRef.source,
644
+ repo_id: model.adapter.artifactRef.repoId,
645
+ revision: model.adapter.artifactRef.revision ?? null,
646
+ path: model.adapter.artifactRef.path ?? null,
647
+ allow_patterns: model.adapter.artifactRef.allowPatterns ?? null,
648
+ model_type: model.adapter.artifactRef.modelType ?? null
649
+ }
650
+ : null
651
+ }
652
+ : null,
653
+ supported_tasks: model.supportedTasks ?? null,
654
+ durations: model.durations ?? null,
655
+ resolutions: model.resolutions ?? null,
656
+ aspect_ratios: model.aspectRatios ?? null,
657
+ execution: registration
658
+ ? readyProviderExecution(registration.metadata)
659
+ : null
452
660
  };
453
661
  }
454
662
  function toOllamaModel(model) {
@@ -462,27 +670,66 @@ function toOllamaModel(model) {
462
670
  details: {}
463
671
  };
464
672
  }
465
- async function getAllModels(userId) {
673
+ function providerExecutionMap(configuredProviderIds) {
674
+ const configured = new Set(configuredProviderIds);
675
+ const providers = new Map();
676
+ for (const providerId of listRegisteredProviderIds()) {
677
+ const metadata = getRegisteredProvider(providerId)?.metadata;
678
+ if (!metadata)
679
+ continue;
680
+ providers.set(providerId, {
681
+ ...metadata,
682
+ configured: configured.has(providerId)
683
+ });
684
+ }
685
+ return providers;
686
+ }
687
+ async function resolveProviderModelExecution(models, configuredProviderIds) {
688
+ if (!models.some((model) => model.adapter)) {
689
+ return resolveModelExecutionAvailability(models, providerExecutionMap(configuredProviderIds));
690
+ }
691
+ let cachedModels = [];
692
+ try {
693
+ cachedModels = await readCachedHfModels();
694
+ }
695
+ catch {
696
+ // A failed cache scan means local adapters remain download-required.
697
+ }
698
+ if (models.some((model) => model.adapter?.artifact_ref?.model_type?.startsWith("tjs."))) {
699
+ try {
700
+ const cached = await scanTransformersJsCache(getTransformersJsCacheDir());
701
+ cachedModels.push(...cached.map((c) => tjsRefToUnified({ repo_id: c.repo_id }, "tjs.cached", true, c.size_bytes)));
702
+ }
703
+ catch {
704
+ // Transformers.js adapters remain download-required.
705
+ }
706
+ }
707
+ return resolveModelExecutionAvailability([...models, ...cachedModels], providerExecutionMap(configuredProviderIds)).slice(0, models.length);
708
+ }
709
+ export async function getAllModels(userId) {
466
710
  const all = [];
467
- all.push(...RECOMMENDED_MODELS);
711
+ all.push(...(await getRecommendedModels(false, userId)));
468
712
  const availableIds = await getAvailableProviderIds(userId);
469
- for (const providerId of availableIds) {
713
+ const providerModelsPromises = availableIds.map(async (providerId) => {
470
714
  try {
471
715
  const instance = await instantiateProvider(providerId, userId);
472
716
  if (!instance)
473
- continue;
717
+ return [];
474
718
  const models = await instance.getAvailableLanguageModels();
475
- const toolFlags = await Promise.all(models.map((m) => instance
476
- .hasToolSupport(m.id)
477
- .catch(() => null)));
478
- models.forEach((m, i) => {
479
- all.push(toUnifiedLanguageModel(m, toolFlags[i]));
480
- });
719
+ const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
720
+ return models.map((m, i) => toUnifiedLanguageModel(m, toolFlags[i]));
481
721
  }
482
722
  catch {
483
723
  // Provider unavailable — skip
724
+ return [];
484
725
  }
726
+ });
727
+ const providerModelsArrays = await Promise.all(providerModelsPromises);
728
+ for (const models of providerModelsArrays) {
729
+ all.push(...models);
485
730
  }
731
+ const localProviderIds = availableIds.filter((providerId) => getRegisteredProvider(providerId)?.metadata.access !== "remote_api");
732
+ all.push(...(await collectProviderCatalogModels(userId, localProviderIds)));
486
733
  if (!isProduction()) {
487
734
  try {
488
735
  const hfModels = await readCachedHfModels();
@@ -506,27 +753,7 @@ async function getAllModels(userId) {
506
753
  // Transformers.js cache unavailable — continue without it
507
754
  }
508
755
  }
509
- return dedupeModels(all);
510
- }
511
- async function checkHfCache(body) {
512
- const allowPatterns = normalizePatterns(body.allow_pattern);
513
- const ignorePatterns = normalizePatterns(body.ignore_pattern);
514
- const files = await listRepoCachedFiles(body.repo_id);
515
- const missing = [];
516
- if (allowPatterns) {
517
- for (const pattern of allowPatterns) {
518
- const matched = files.some((path) => matchesPattern(path, pattern) && !isIgnored(path, ignorePatterns));
519
- if (!matched) {
520
- missing.push(pattern);
521
- }
522
- }
523
- }
524
- return {
525
- repo_id: body.repo_id,
526
- all_present: missing.length === 0,
527
- total_files: files.length,
528
- missing
529
- };
756
+ return resolveModelExecutionAvailability(dedupeModels(all), providerExecutionMap(availableIds));
530
757
  }
531
758
  // ── availableForKind helpers ───────────────────────────────────────
532
759
  const availableForKindInput = z.object({
@@ -538,9 +765,13 @@ const KIND_TO_MODALITY = {
538
765
  text_to_image: "image",
539
766
  image_to_image: "image",
540
767
  text_to_speech: "tts",
768
+ text_to_music: "music",
769
+ audio_to_audio: "audio_to_audio",
541
770
  speech_to_text: "asr",
542
771
  text_to_video: "video",
543
- image_to_video: "video"
772
+ image_to_video: "video",
773
+ video_to_video: "video",
774
+ reference_to_video: "video"
544
775
  };
545
776
  async function collectProviderModelsForKind(userId, kind) {
546
777
  const out = [];
@@ -553,7 +784,9 @@ async function collectProviderModelsForKind(userId, kind) {
553
784
  switch (kind) {
554
785
  case "text_generation": {
555
786
  const models = await instance.getAvailableLanguageModels();
556
- const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
787
+ const toolFlags = await Promise.all(models.map((m) => instance
788
+ .hasToolSupport(m.id)
789
+ .catch(() => null)));
557
790
  models.forEach((m, i) => out.push(toUnifiedLanguageModel(m, toolFlags[i])));
558
791
  return;
559
792
  }
@@ -579,6 +812,18 @@ async function collectProviderModelsForKind(userId, kind) {
579
812
  out.push(toUnifiedModel(m, "tts_model"));
580
813
  return;
581
814
  }
815
+ case "text_to_music": {
816
+ const models = await instance.getAvailableMusicModels();
817
+ for (const m of models)
818
+ out.push(toUnifiedModel(m, "music_model"));
819
+ return;
820
+ }
821
+ case "audio_to_audio": {
822
+ const models = await instance.getAvailableAudioToAudioModels();
823
+ for (const m of models)
824
+ out.push(toUnifiedModel(m, "audio_to_audio_model"));
825
+ return;
826
+ }
582
827
  case "speech_to_text": {
583
828
  const models = await instance.getAvailableASRModels();
584
829
  for (const m of models)
@@ -586,7 +831,9 @@ async function collectProviderModelsForKind(userId, kind) {
586
831
  return;
587
832
  }
588
833
  case "text_to_video":
589
- case "image_to_video": {
834
+ case "image_to_video":
835
+ case "video_to_video":
836
+ case "reference_to_video": {
590
837
  const models = await instance.getAvailableVideoModels();
591
838
  for (const m of models) {
592
839
  if (m.supportedTasks && !m.supportedTasks.includes(kind))
@@ -600,13 +847,45 @@ async function collectProviderModelsForKind(userId, kind) {
600
847
  }
601
848
  return out;
602
849
  }
850
+ /**
851
+ * Every remote model the user's configured providers can enumerate, across all
852
+ * non-language-model types (embeddings, images, TTS, music, ASR, video), for the
853
+ * SDK model catalog. Unlike `collectProviderModelsForKind` this makes one pass
854
+ * per provider (each `getAvailable*Models` called once, no task filtering) so
855
+ * text_to_image and image_to_image capable models are both included. Language
856
+ * models are not collected here — `getAllModels` already enumerates them.
857
+ */
858
+ export async function collectProviderCatalogModels(userId, providerIdsOverride) {
859
+ const providerIds = providerIdsOverride ?? (await getAvailableProviderIds(userId));
860
+ const perProvider = await Promise.all(providerIds.map((providerId) => safeProviderCall("catalogModels", { provider: providerId, userId }, async () => {
861
+ const instance = await instantiateProvider(providerId, userId);
862
+ if (!instance)
863
+ return [];
864
+ const collect = (fetchModels, type) => safeProviderCall(`catalogModels:${type}`, { provider: providerId, userId }, async () => (await fetchModels()).map((m) => toUnifiedModel(m, type)), []);
865
+ const lists = await Promise.all([
866
+ collect(() => instance.getAvailableImageModels(), "image_model"),
867
+ collect(() => instance.getAvailableEmbeddingModels(), "embedding_model"),
868
+ collect(() => instance.getAvailableTTSModels(), "tts_model"),
869
+ collect(() => instance.getAvailableMusicModels(), "music_model"),
870
+ collect(() => instance.getAvailableAudioToAudioModels(), "audio_to_audio_model"),
871
+ collect(() => instance.getAvailableASRModels(), "asr_model"),
872
+ collect(() => instance.getAvailableVideoModels(), "video_model")
873
+ ]);
874
+ return lists.flat();
875
+ }, [])));
876
+ return perProvider.flat();
877
+ }
603
878
  function curatedForKind(kind) {
604
879
  const modality = KIND_TO_MODALITY[kind];
605
880
  // For text_generation/embedding/image/video, RECOMMENDED_MODELS entries are
606
- // tagged with the specific task. TTS and ASR entries have no task field —
607
- // modality alone is enough.
608
- const taskRequired = kind !== "text_to_speech" && kind !== "speech_to_text";
609
- return RECOMMENDED_MODELS.filter((r) => r.modality === modality && (!taskRequired || r.task === kind));
881
+ // tagged with the specific task. TTS, ASR and music entries have no task
882
+ // field — modality alone is enough.
883
+ const taskRequired = kind !== "text_to_speech" &&
884
+ kind !== "speech_to_text" &&
885
+ kind !== "text_to_music";
886
+ return RECOMMENDED_MODELS.filter((r) => r.modality === modality &&
887
+ r.type !== "hf.whisper_cpp_vad" &&
888
+ (!taskRequired || r.task === kind));
610
889
  }
611
890
  // ── Router ─────────────────────────────────────────────────────────
612
891
  export const modelsRouter = router({
@@ -617,14 +896,26 @@ export const modelsRouter = router({
617
896
  .output(providersOutput)
618
897
  .query(async ({ ctx }) => {
619
898
  const userId = ctx.userId;
899
+ // The registry is a process global but a custom provider's catalog is
900
+ // per user, so the caller's own definitions have to be in it before the
901
+ // enumeration below — otherwise a second account's endpoints are the
902
+ // ones listed, or none are after a restart.
903
+ await syncCustomProviderRegistry(userId);
620
904
  const infos = [];
621
- for (const providerId of await getAvailableProviderIds(userId)) {
622
- const instance = await instantiateProvider(providerId, userId);
905
+ const providerIds = await getAvailableProviderIds(userId);
906
+ const instances = await Promise.all(providerIds.map(async (providerId) => ({
907
+ providerId,
908
+ instance: await instantiateProvider(providerId, userId)
909
+ })));
910
+ for (const { providerId, instance } of instances) {
623
911
  if (!instance)
624
912
  continue;
913
+ const metadata = getRegisteredProvider(providerId)?.metadata;
625
914
  infos.push({
626
915
  provider: providerId,
627
- capabilities: providerCapabilities(instance)
916
+ capabilities: instance.getCapabilities(),
917
+ access: metadata?.access ?? "remote_api",
918
+ display_name: metadata?.displayName ?? providerId
628
919
  });
629
920
  }
630
921
  return infos;
@@ -634,58 +925,35 @@ export const modelsRouter = router({
634
925
  */
635
926
  recommended: protectedProcedure
636
927
  .input(recommendedInput)
637
- .query(async ({ input }) => {
638
- return getRecommendedModels(input.check_servers ?? false);
928
+ .output(modelsListOutput)
929
+ .query(async ({ input, ctx }) => {
930
+ return getRecommendedModels(input.check_servers ?? false, ctx.userId);
639
931
  }),
640
932
  /**
641
- * Recommended image models (all tasks).
642
- */
643
- recommendedImage: protectedProcedure
644
- .query(() => selectRecommended("image")),
645
- /**
646
- * Recommended text-to-image models.
933
+ * Every ranked route as a `<provider>:<model_id>` key, best model first.
934
+ * The model menu orders an empty query with it.
647
935
  */
936
+ rankedKeys: protectedProcedure
937
+ .output(z.array(z.string()))
938
+ .query(() => rankedModelKeys()),
648
939
  recommendedImageTextToImage: protectedProcedure
940
+ .output(modelsListOutput)
649
941
  .query(() => selectRecommended("image", "text_to_image")),
650
- /**
651
- * Recommended image-to-image models.
652
- */
653
942
  recommendedImageImageToImage: protectedProcedure
943
+ .output(modelsListOutput)
654
944
  .query(() => selectRecommended("image", "image_to_image")),
655
- /**
656
- * Recommended language models (all tasks).
657
- */
658
- recommendedLanguage: protectedProcedure
659
- .query(() => selectRecommended("language")),
660
- /**
661
- * Recommended text-generation models.
662
- */
663
- recommendedLanguageTextGeneration: protectedProcedure
664
- .query(() => selectRecommended("language", "text_generation")),
665
- /**
666
- * Recommended embedding models.
667
- */
668
945
  recommendedLanguageEmbedding: protectedProcedure
946
+ .output(modelsListOutput)
669
947
  .query(() => selectRecommended("language", "embedding")),
670
- /**
671
- * Recommended ASR models.
672
- */
673
- recommendedAsr: protectedProcedure
674
- .query(() => selectRecommended("asr")),
675
- /**
676
- * Recommended TTS models.
677
- */
948
+ recommendedAsr: protectedProcedure.output(modelsListOutput).query(({ ctx }) => withWhisperDownloadStatus(selectRecommended("asr").filter((model) => model.type !== "hf.whisper_cpp_vad"), ctx.userId)),
678
949
  recommendedTts: protectedProcedure
950
+ .output(modelsListOutput)
679
951
  .query(() => selectRecommended("tts")),
680
- /**
681
- * Recommended text-to-video models.
682
- */
683
952
  recommendedVideoTextToVideo: protectedProcedure
953
+ .output(modelsListOutput)
684
954
  .query(() => selectRecommended("video", "text_to_video")),
685
- /**
686
- * Recommended image-to-video models.
687
- */
688
955
  recommendedVideoImageToVideo: protectedProcedure
956
+ .output(modelsListOutput)
689
957
  .query(() => selectRecommended("video", "image_to_video")),
690
958
  /**
691
959
  * All models available to the user for a given task kind. Aggregates the
@@ -695,6 +963,7 @@ export const modelsRouter = router({
695
963
  */
696
964
  availableForKind: protectedProcedure
697
965
  .input(availableForKindInput)
966
+ .output(modelsListOutput)
698
967
  .query(async ({ ctx, input }) => {
699
968
  const fromProviders = await collectProviderModelsForKind(ctx.userId, input.kind);
700
969
  const curated = curatedForKind(input.kind);
@@ -713,13 +982,20 @@ export const modelsRouter = router({
713
982
  * All models (recommended + provider models + HF cached).
714
983
  */
715
984
  all: protectedProcedure
985
+ .output(modelsListOutput)
716
986
  .query(async ({ ctx }) => getAllModels(ctx.userId)),
717
987
  /**
718
- * HuggingFace cached models.
988
+ * HuggingFace cached models. `scope: "worker"` lists the attached worker's
989
+ * cache via the Python bridge; the default `"local"` scans the local FS.
719
990
  */
720
991
  huggingfaceList: protectedProcedure
992
+ .input(z.object({ scope: modelScope }).optional())
721
993
  .output(modelsListOutput)
722
- .query(async () => {
994
+ .query(async ({ ctx, input }) => {
995
+ if (input?.scope === "worker") {
996
+ const bridge = await requireWorkerBridge(ctx);
997
+ return (await bridge.listCachedModels());
998
+ }
723
999
  if (isProduction())
724
1000
  return [];
725
1001
  try {
@@ -730,12 +1006,17 @@ export const modelsRouter = router({
730
1006
  }
731
1007
  }),
732
1008
  /**
733
- * Delete a HuggingFace cached model.
1009
+ * Delete a HuggingFace cached model. `scope: "worker"` deletes from the
1010
+ * attached worker's cache via the Python bridge.
734
1011
  */
735
1012
  huggingfaceDelete: protectedProcedure
736
- .input(hfDeleteInput)
1013
+ .input(hfDeleteInput.extend({ scope: modelScope }))
737
1014
  .output(z.boolean())
738
- .mutation(async ({ input }) => {
1015
+ .mutation(async ({ ctx, input }) => {
1016
+ if (input.scope === "worker") {
1017
+ const bridge = await requireWorkerBridge(ctx);
1018
+ return bridge.deleteCachedModel(input.repo_id);
1019
+ }
739
1020
  if (isProduction())
740
1021
  return false;
741
1022
  try {
@@ -765,28 +1046,33 @@ export const modelsRouter = router({
765
1046
  }
766
1047
  }),
767
1048
  /**
768
- * HuggingFace models by type.
1049
+ * Search the live HuggingFace Hub by free-text and/or pipeline tag.
1050
+ * Unlike `huggingfaceSearch` (which only scans the local cache), this hits
1051
+ * the online Hub so the Model Manager can browse & download any public repo.
769
1052
  */
770
- huggingfaceByType: protectedProcedure
771
- .input(hfByTypeInput)
1053
+ huggingfaceHubSearch: protectedProcedure
1054
+ .input(hfHubSearchInput)
772
1055
  .output(modelsListOutput)
773
1056
  .query(async ({ input }) => {
774
- try {
775
- return await getModelsByHfType(input.model_type);
776
- }
777
- catch {
778
- return [];
779
- }
1057
+ return await searchHuggingFaceHub(input.query, input.pipeline_tag, input.limit ?? 50);
780
1058
  }),
781
1059
  /**
782
- * Transformers.js cached models (everything in the configured cache dir).
1060
+ * HuggingFace models by type.
783
1061
  */
784
- transformersJsList: protectedProcedure
1062
+ huggingfaceByType: protectedProcedure
1063
+ .input(hfByTypeInput.extend({ scope: modelScope }))
785
1064
  .output(modelsListOutput)
786
- .query(async () => {
1065
+ .query(async ({ ctx, input }) => {
1066
+ if (input.scope === "worker") {
1067
+ const bridge = await requireWorkerBridge(ctx);
1068
+ // SAFETY: the worker sends full `UnifiedModel` JSON, but the bridge
1069
+ // types the reply as `UnifiedModelLike`, which declares neither `type`
1070
+ // nor `path` — the two fields this filter reads.
1071
+ const cached = (await bridge.listCachedModels());
1072
+ return filterModelsByHfType(cached, input.model_type);
1073
+ }
787
1074
  try {
788
- const cached = await scanTransformersJsCache(getTransformersJsCacheDir());
789
- return cached.map((c) => tjsRefToUnified({ repo_id: c.repo_id }, "tjs.cached", true, c.size_bytes));
1075
+ return await getModelsByHfType(input.model_type);
790
1076
  }
791
1077
  catch {
792
1078
  return [];
@@ -799,12 +1085,14 @@ export const modelsRouter = router({
799
1085
  * Transformers.js cache directory. Recommended entries always appear,
800
1086
  * marked `downloaded` based on cache presence; off-list cached repos that
801
1087
  * happen to be recommended under another type are NOT shown here (they only
802
- * show up under their own type or via `transformersJsList`).
1088
+ * show up under their own type).
803
1089
  */
804
1090
  transformersJsByType: protectedProcedure
805
1091
  .input(tjsByTypeInput)
806
1092
  .output(modelsListOutput)
807
1093
  .query(async ({ input }) => {
1094
+ if (isProduction())
1095
+ return [];
808
1096
  const modelType = input.model_type;
809
1097
  const recs = recommendedFor(modelType);
810
1098
  const cacheDir = getTransformersJsCacheDir();
@@ -841,6 +1129,8 @@ export const modelsRouter = router({
841
1129
  .input(tjsByTypeInput)
842
1130
  .output(modelsListOutput)
843
1131
  .query(async ({ input }) => {
1132
+ if (isProduction())
1133
+ return [];
844
1134
  const modelType = input.model_type;
845
1135
  const recs = recommendedFor(modelType);
846
1136
  if (recs.length === 0)
@@ -850,26 +1140,7 @@ export const modelsRouter = router({
850
1140
  const cacheSizes = new Map(cached.map((c) => [c.repo_id, c.size_bytes]));
851
1141
  return recs.map((ref) => tjsRefToUnified(ref, modelType, cacheSizes.has(ref.repo_id), cacheSizes.get(ref.repo_id) ?? null));
852
1142
  }),
853
- /**
854
- * Check whether a single Transformers.js repo is present in the cache.
855
- */
856
- transformersJsIsCached: protectedProcedure
857
- .input(z.object({ repo_id: z.string().min(1) }))
858
- .output(z.boolean())
859
- .query(async ({ input }) => {
860
- try {
861
- return await isRepoCached(getTransformersJsCacheDir(), input.repo_id);
862
- }
863
- catch {
864
- return false;
865
- }
866
- }),
867
- /**
868
- * Ollama models.
869
- */
870
- ollama: protectedProcedure
871
- .output(ollamaModelsOutput)
872
- .query(async ({ ctx }) => safeProviderCall("ollama models", { provider: "ollama", userId: ctx.userId }, async () => {
1143
+ ollama: protectedProcedure.output(ollamaModelsOutput).query(async ({ ctx }) => safeProviderCall("ollama models", { provider: "ollama", userId: ctx.userId }, async () => {
873
1144
  const instance = await instantiateProvider("ollama", ctx.userId);
874
1145
  if (!instance)
875
1146
  return [];
@@ -877,8 +1148,18 @@ export const modelsRouter = router({
877
1148
  return models.map(toOllamaModel);
878
1149
  }, [])),
879
1150
  /**
880
- * LLM models by provider.
1151
+ * Delete a model from the local Ollama server. Returns false when Ollama is
1152
+ * not configured or does not have the model.
881
1153
  */
1154
+ ollamaDelete: protectedProcedure
1155
+ .input(z.object({ model: z.string().min(1) }))
1156
+ .output(z.boolean())
1157
+ .mutation(async ({ ctx, input }) => safeProviderCall("ollama delete", { provider: "ollama", userId: ctx.userId }, async () => {
1158
+ const instance = await instantiateProvider("ollama", ctx.userId);
1159
+ if (!(instance instanceof OllamaProvider))
1160
+ return false;
1161
+ return instance.deleteModel(input.model);
1162
+ }, false)),
882
1163
  llmByProvider: protectedProcedure
883
1164
  .input(providerInput)
884
1165
  .output(modelsListOutput)
@@ -887,28 +1168,78 @@ export const modelsRouter = router({
887
1168
  if (!instance)
888
1169
  return [];
889
1170
  const models = await instance.getAvailableLanguageModels();
890
- const toolFlags = await Promise.all(models.map((m) => instance
891
- .hasToolSupport(m.id)
892
- .catch(() => null)));
1171
+ const toolFlags = await Promise.all(models.map((m) => instance.hasToolSupport(m.id).catch(() => null)));
893
1172
  return models.map((m, i) => toUnifiedLanguageModel(m, toolFlags[i]));
894
1173
  }, [])),
895
1174
  /**
896
- * Image models by provider.
1175
+ * Aspect ratios / resolutions / (video) durations a given model supports.
1176
+ * Empty arrays are intentional — the client falls back to the full static
1177
+ * lists when a model declares no constraints.
897
1178
  */
1179
+ mediaOptions: protectedProcedure
1180
+ .input(z.object({
1181
+ provider: z.string().min(1),
1182
+ model: z.string().min(1),
1183
+ task: z.enum(["image", "video"])
1184
+ }))
1185
+ .output(z.object({
1186
+ aspectRatios: z.array(z.string()),
1187
+ resolutions: z.array(z.string()),
1188
+ durations: z.array(z.number()).nullish()
1189
+ }))
1190
+ .query(async ({ ctx, input }) => safeProviderCall("mediaOptions", { provider: input.provider, task: input.task, userId: ctx.userId }, async () => {
1191
+ const instance = await instantiateProvider(input.provider, ctx.userId);
1192
+ if (!instance) {
1193
+ return { aspectRatios: [], resolutions: [], durations: null };
1194
+ }
1195
+ if (input.task === "image") {
1196
+ const models = await instance.getAvailableImageModels();
1197
+ const m = models.find((x) => x.id === input.model);
1198
+ return {
1199
+ aspectRatios: m?.aspectRatios ?? [],
1200
+ resolutions: m?.resolutions ?? [],
1201
+ durations: null
1202
+ };
1203
+ }
1204
+ const models = await instance.getAvailableVideoModels();
1205
+ const m = models.find((x) => x.id === input.model);
1206
+ return {
1207
+ aspectRatios: m?.aspectRatios ?? [],
1208
+ resolutions: m?.resolutions ?? [],
1209
+ durations: m?.durations ?? null
1210
+ };
1211
+ }, { aspectRatios: [], resolutions: [], durations: null })),
898
1212
  imageByProvider: protectedProcedure
899
1213
  .input(providerInput)
900
1214
  .output(modelsListOutput)
901
- .query(async ({ ctx, input }) => safeProviderCall("imageByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
902
- const instance = await instantiateProvider(input.provider, ctx.userId);
903
- if (!instance)
904
- return [];
905
- const models = await instance.getAvailableImageModels();
906
- return models.map((m) => toUnifiedModel(m, "image_model"));
907
- }, [])),
908
- /**
909
- * All TTS models across all providers.
910
- */
911
- tts: protectedProcedure.query(async ({ ctx }) => {
1215
+ .query(async ({ ctx, input }) => {
1216
+ const models = await safeProviderCall("imageByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1217
+ const instance = await instantiateProvider(input.provider, ctx.userId);
1218
+ if (!instance)
1219
+ return [];
1220
+ const models = await instance.getAvailableImageModels();
1221
+ return models.map((m) => toUnifiedModel(m, "image_model"));
1222
+ }, []);
1223
+ // Only a local model has files to download. Remote catalogs keep the
1224
+ // execution state that toUnifiedModel gave them.
1225
+ return models.some((model) => model.adapter)
1226
+ ? resolveProviderModelExecution(models, [input.provider])
1227
+ : models;
1228
+ }),
1229
+ rerankByProvider: protectedProcedure
1230
+ .input(providerInput)
1231
+ .output(modelsListOutput)
1232
+ .query(async ({ ctx, input }) => {
1233
+ const models = await safeProviderCall("rerankByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1234
+ const instance = await instantiateProvider(input.provider, ctx.userId);
1235
+ if (!instance)
1236
+ return [];
1237
+ const models = await instance.getAvailableRerankModels();
1238
+ return models.map((m) => toUnifiedModel(m, "rerank_model"));
1239
+ }, []);
1240
+ return resolveProviderModelExecution(models, [input.provider]);
1241
+ }),
1242
+ tts: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
912
1243
  const availableIds = await getAvailableProviderIds(ctx.userId);
913
1244
  const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("tts (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
914
1245
  const instance = await instantiateProvider(providerId, ctx.userId);
@@ -917,52 +1248,90 @@ export const modelsRouter = router({
917
1248
  const models = await instance.getAvailableTTSModels();
918
1249
  return models.map((m) => toUnifiedModel(m, "tts_model"));
919
1250
  }, [])));
920
- return results.flat();
1251
+ return resolveProviderModelExecution(results.flat(), availableIds);
921
1252
  }),
922
- /**
923
- * TTS models by provider.
924
- */
925
1253
  ttsByProvider: protectedProcedure
926
1254
  .input(providerInput)
927
1255
  .output(modelsListOutput)
928
- .query(async ({ ctx, input }) => safeProviderCall("ttsByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1256
+ .query(async ({ ctx, input }) => {
1257
+ const models = await safeProviderCall("ttsByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1258
+ const instance = await instantiateProvider(input.provider, ctx.userId);
1259
+ if (!instance)
1260
+ return [];
1261
+ const models = await instance.getAvailableTTSModels();
1262
+ return models.map((m) => toUnifiedModel(m, "tts_model"));
1263
+ }, []);
1264
+ return resolveProviderModelExecution(models, [input.provider]);
1265
+ }),
1266
+ music: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
1267
+ const availableIds = await getAvailableProviderIds(ctx.userId);
1268
+ const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("music (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
1269
+ const instance = await instantiateProvider(providerId, ctx.userId);
1270
+ if (!instance)
1271
+ return [];
1272
+ const models = await instance.getAvailableMusicModels();
1273
+ return models.map((m) => toUnifiedModel(m, "music_model"));
1274
+ }, [])));
1275
+ return results.flat();
1276
+ }),
1277
+ musicByProvider: protectedProcedure
1278
+ .input(providerInput)
1279
+ .output(modelsListOutput)
1280
+ .query(async ({ ctx, input }) => safeProviderCall("musicByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
929
1281
  const instance = await instantiateProvider(input.provider, ctx.userId);
930
1282
  if (!instance)
931
1283
  return [];
932
- const models = await instance.getAvailableTTSModels();
933
- return models.map((m) => toUnifiedModel(m, "tts_model"));
1284
+ const models = await instance.getAvailableMusicModels();
1285
+ return models.map((m) => toUnifiedModel(m, "music_model"));
934
1286
  }, [])),
935
- /**
936
- * All ASR models across all providers.
937
- */
938
- asr: protectedProcedure.query(async ({ ctx }) => {
1287
+ audioToAudio: protectedProcedure
1288
+ .output(modelsListOutput)
1289
+ .query(async ({ ctx }) => {
939
1290
  const availableIds = await getAvailableProviderIds(ctx.userId);
940
- const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("asr (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
1291
+ const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("audioToAudio (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
941
1292
  const instance = await instantiateProvider(providerId, ctx.userId);
942
1293
  if (!instance)
943
1294
  return [];
944
- const models = await instance.getAvailableASRModels();
945
- return models.map((m) => toUnifiedModel(m, "asr_model"));
1295
+ const models = await instance.getAvailableAudioToAudioModels();
1296
+ return models.map((m) => toUnifiedModel(m, "audio_to_audio_model"));
946
1297
  }, [])));
947
1298
  return results.flat();
948
1299
  }),
949
- /**
950
- * ASR models by provider.
951
- */
952
- asrByProvider: protectedProcedure
1300
+ audioToAudioByProvider: protectedProcedure
953
1301
  .input(providerInput)
954
1302
  .output(modelsListOutput)
955
- .query(async ({ ctx, input }) => safeProviderCall("asrByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1303
+ .query(async ({ ctx, input }) => safeProviderCall("audioToAudioByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
956
1304
  const instance = await instantiateProvider(input.provider, ctx.userId);
957
1305
  if (!instance)
958
1306
  return [];
959
- const models = await instance.getAvailableASRModels();
960
- return models.map((m) => toUnifiedModel(m, "asr_model"));
1307
+ const models = await instance.getAvailableAudioToAudioModels();
1308
+ return models.map((m) => toUnifiedModel(m, "audio_to_audio_model"));
961
1309
  }, [])),
962
- /**
963
- * All video models across all providers.
964
- */
965
- video: protectedProcedure.query(async ({ ctx }) => {
1310
+ asr: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
1311
+ const availableIds = await getAvailableProviderIds(ctx.userId);
1312
+ const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("asr (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
1313
+ const instance = await instantiateProvider(providerId, ctx.userId);
1314
+ if (!instance)
1315
+ return [];
1316
+ const models = await instance.getAvailableASRModels();
1317
+ return models.map((m) => toUnifiedModel(m, "asr_model"));
1318
+ }, [])));
1319
+ return resolveProviderModelExecution(results.flat(), availableIds);
1320
+ }),
1321
+ asrByProvider: protectedProcedure
1322
+ .input(providerInput)
1323
+ .output(modelsListOutput)
1324
+ .query(async ({ ctx, input }) => {
1325
+ const models = await safeProviderCall("asrByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1326
+ const instance = await instantiateProvider(input.provider, ctx.userId);
1327
+ if (!instance)
1328
+ return [];
1329
+ const models = await instance.getAvailableASRModels();
1330
+ return models.map((m) => toUnifiedModel(m, "asr_model"));
1331
+ }, []);
1332
+ return resolveProviderModelExecution(models, [input.provider]);
1333
+ }),
1334
+ video: protectedProcedure.output(modelsListOutput).query(async ({ ctx }) => {
966
1335
  const availableIds = await getAvailableProviderIds(ctx.userId);
967
1336
  const results = await Promise.all(availableIds.map((providerId) => safeProviderCall("video (aggregate)", { provider: providerId, userId: ctx.userId }, async () => {
968
1337
  const instance = await instantiateProvider(providerId, ctx.userId);
@@ -973,9 +1342,6 @@ export const modelsRouter = router({
973
1342
  }, [])));
974
1343
  return results.flat();
975
1344
  }),
976
- /**
977
- * Video models by provider.
978
- */
979
1345
  videoByProvider: protectedProcedure
980
1346
  .input(providerInput)
981
1347
  .output(modelsListOutput)
@@ -986,61 +1352,19 @@ export const modelsRouter = router({
986
1352
  const models = await instance.getAvailableVideoModels();
987
1353
  return models.map((m) => toUnifiedModel(m, "video_model"));
988
1354
  }, [])),
989
- /**
990
- * Embedding models by provider.
991
- */
992
1355
  embeddingByProvider: protectedProcedure
993
1356
  .input(providerInput)
994
1357
  .output(modelsListOutput)
995
- .query(async ({ ctx, input }) => safeProviderCall("embeddingByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
996
- const instance = await instantiateProvider(input.provider, ctx.userId);
997
- if (!instance)
998
- return [];
999
- const models = await instance.getAvailableEmbeddingModels();
1000
- return models.map((m) => toUnifiedModel(m, "embedding_model"));
1001
- }, [])),
1002
- /**
1003
- * Ollama model info (stub).
1004
- */
1005
- ollamaModelInfo: protectedProcedure.output(z.null()).query(() => null),
1006
- /**
1007
- * Check whether specific files exist in the HuggingFace cache.
1008
- */
1009
- huggingfaceTryCacheFiles: protectedProcedure
1010
- .input(tryCacheFilesInput)
1011
- .output(tryCacheFilesOutput)
1012
- .mutation(async ({ input }) => {
1013
- return Promise.all(input.map(async (entry) => {
1014
- const repoId = entry.repo_id ?? "";
1015
- const repoPath = entry.path ?? "";
1016
- return {
1017
- repo_id: repoId,
1018
- path: repoPath,
1019
- downloaded: repoId.length > 0 && repoPath.length > 0
1020
- ? await repoFileInCache(repoId, repoPath)
1021
- : false
1022
- };
1023
- }));
1024
- }),
1025
- /**
1026
- * Check whether repos have cached files.
1027
- */
1028
- huggingfaceTryCacheRepos: protectedProcedure
1029
- .input(tryCacheReposInput)
1030
- .output(tryCacheReposOutput)
1031
- .mutation(async ({ input }) => {
1032
- return Promise.all(input.map(async (repoId) => ({
1033
- repo_id: repoId,
1034
- downloaded: await hasCachedFiles(repoId)
1035
- })));
1358
+ .query(async ({ ctx, input }) => {
1359
+ const models = await safeProviderCall("embeddingByProvider", { provider: input.provider, userId: ctx.userId }, async () => {
1360
+ const instance = await instantiateProvider(input.provider, ctx.userId);
1361
+ if (!instance)
1362
+ return [];
1363
+ const models = await instance.getAvailableEmbeddingModels();
1364
+ return models.map((m) => toUnifiedModel(m, "embedding_model"));
1365
+ }, []);
1366
+ return resolveProviderModelExecution(models, [input.provider]);
1036
1367
  }),
1037
- /**
1038
- * Detailed check whether specific patterns exist in the HuggingFace cache.
1039
- */
1040
- huggingfaceCheckCache: protectedProcedure
1041
- .input(hfCacheCheckInput)
1042
- .output(hfCacheCheckOutput)
1043
- .mutation(async ({ input }) => checkHfCache(input)),
1044
1368
  /**
1045
1369
  * Fast batch cache status check for multiple models.
1046
1370
  */
@@ -1084,24 +1408,6 @@ export const modelsRouter = router({
1084
1408
  .mutation(() => ({
1085
1409
  status: "unavailable",
1086
1410
  message: "Streaming Ollama model pulls are not available in the TS standalone server. Use the Ollama API directly or the Python backend."
1087
- })),
1088
- /**
1089
- * Get HuggingFace file info (size, sha256, etc.).
1090
- */
1091
- huggingfaceFileInfo: protectedProcedure
1092
- .input(hfFileInfoInput)
1093
- .output(z.array(z.record(z.string(), z.unknown())))
1094
- .mutation(async ({ input }) => {
1095
- if (isProduction())
1096
- return [];
1097
- try {
1098
- const token = (await getSecret("HF_TOKEN", "1")) ?? undefined;
1099
- const infos = await getHuggingfaceFileInfos(input.map((i) => ({ repo_id: i.repo_id, path: i.path })), token);
1100
- return infos;
1101
- }
1102
- catch {
1103
- return [];
1104
- }
1105
- })
1411
+ }))
1106
1412
  });
1107
1413
  //# sourceMappingURL=models.js.map