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

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