libre-webui 0.16.1 → 0.18.0

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 (314) hide show
  1. package/README.md +232 -154
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +155 -6
  4. package/backend/dist/db.js.map +1 -1
  5. package/backend/dist/index.d.ts.map +1 -1
  6. package/backend/dist/index.js +17 -10
  7. package/backend/dist/index.js.map +1 -1
  8. package/backend/dist/middleware/auth.d.ts.map +1 -1
  9. package/backend/dist/middleware/auth.js +35 -3
  10. package/backend/dist/middleware/auth.js.map +1 -1
  11. package/backend/dist/models/userModel.d.ts +23 -0
  12. package/backend/dist/models/userModel.d.ts.map +1 -1
  13. package/backend/dist/models/userModel.js +89 -24
  14. package/backend/dist/models/userModel.js.map +1 -1
  15. package/backend/dist/routes/agentCli.d.ts +3 -0
  16. package/backend/dist/routes/agentCli.d.ts.map +1 -0
  17. package/backend/dist/routes/agentCli.js +35 -0
  18. package/backend/dist/routes/agentCli.js.map +1 -0
  19. package/backend/dist/routes/auth.d.ts.map +1 -1
  20. package/backend/dist/routes/auth.js +46 -33
  21. package/backend/dist/routes/auth.js.map +1 -1
  22. package/backend/dist/routes/chat.d.ts.map +1 -1
  23. package/backend/dist/routes/chat.js +30 -1
  24. package/backend/dist/routes/chat.js.map +1 -1
  25. package/backend/dist/routes/documents.d.ts.map +1 -1
  26. package/backend/dist/routes/documents.js +49 -41
  27. package/backend/dist/routes/documents.js.map +1 -1
  28. package/backend/dist/routes/embeddings.js +2 -2
  29. package/backend/dist/routes/embeddings.js.map +1 -1
  30. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  31. package/backend/dist/routes/huggingfaceHub.js +3 -1
  32. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  33. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  34. package/backend/dist/routes/imageGen.js +2 -0
  35. package/backend/dist/routes/imageGen.js.map +1 -1
  36. package/backend/dist/routes/media.d.ts +3 -0
  37. package/backend/dist/routes/media.d.ts.map +1 -0
  38. package/backend/dist/routes/media.js +429 -0
  39. package/backend/dist/routes/media.js.map +1 -0
  40. package/backend/dist/routes/ollama.d.ts.map +1 -1
  41. package/backend/dist/routes/ollama.js +15 -83
  42. package/backend/dist/routes/ollama.js.map +1 -1
  43. package/backend/dist/routes/personas.d.ts.map +1 -1
  44. package/backend/dist/routes/personas.js +2 -0
  45. package/backend/dist/routes/personas.js.map +1 -1
  46. package/backend/dist/routes/plugins.d.ts.map +1 -1
  47. package/backend/dist/routes/plugins.js +28 -0
  48. package/backend/dist/routes/plugins.js.map +1 -1
  49. package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
  50. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
  51. package/backend/dist/routes/systemDiagnostics.js +49 -0
  52. package/backend/dist/routes/systemDiagnostics.js.map +1 -0
  53. package/backend/dist/routes/tts.d.ts.map +1 -1
  54. package/backend/dist/routes/tts.js +4 -0
  55. package/backend/dist/routes/tts.js.map +1 -1
  56. package/backend/dist/routes/users.d.ts.map +1 -1
  57. package/backend/dist/routes/users.js +58 -0
  58. package/backend/dist/routes/users.js.map +1 -1
  59. package/backend/dist/routes/work.d.ts.map +1 -1
  60. package/backend/dist/routes/work.js +107 -2
  61. package/backend/dist/routes/work.js.map +1 -1
  62. package/backend/dist/services/agentCliService.d.ts +30 -0
  63. package/backend/dist/services/agentCliService.d.ts.map +1 -0
  64. package/backend/dist/services/agentCliService.js +328 -0
  65. package/backend/dist/services/agentCliService.js.map +1 -0
  66. package/backend/dist/services/authService.d.ts +15 -9
  67. package/backend/dist/services/authService.d.ts.map +1 -1
  68. package/backend/dist/services/authService.js +34 -29
  69. package/backend/dist/services/authService.js.map +1 -1
  70. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  71. package/backend/dist/services/chatGenerationService.js +19 -1
  72. package/backend/dist/services/chatGenerationService.js.map +1 -1
  73. package/backend/dist/services/chatRequestService.d.ts +8 -2
  74. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  75. package/backend/dist/services/chatRequestService.js +30 -3
  76. package/backend/dist/services/chatRequestService.js.map +1 -1
  77. package/backend/dist/services/documentService.d.ts +11 -10
  78. package/backend/dist/services/documentService.d.ts.map +1 -1
  79. package/backend/dist/services/documentService.js +62 -54
  80. package/backend/dist/services/documentService.js.map +1 -1
  81. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  82. package/backend/dist/services/encryptionService.js +18 -8
  83. package/backend/dist/services/encryptionService.js.map +1 -1
  84. package/backend/dist/services/galleryService.d.ts +23 -1
  85. package/backend/dist/services/galleryService.d.ts.map +1 -1
  86. package/backend/dist/services/galleryService.js +125 -8
  87. package/backend/dist/services/galleryService.js.map +1 -1
  88. package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
  89. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
  90. package/backend/dist/services/mediaGenerationJobService.js +82 -0
  91. package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
  92. package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
  93. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
  94. package/backend/dist/services/pluginAudioGenerationService.js +211 -0
  95. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
  96. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  97. package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
  98. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  99. package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
  100. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  101. package/backend/dist/services/pluginEmbeddingService.js +66 -35
  102. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  103. package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
  104. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  105. package/backend/dist/services/pluginImageGenerationService.js +63 -38
  106. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  107. package/backend/dist/services/pluginService.d.ts +38 -1
  108. package/backend/dist/services/pluginService.d.ts.map +1 -1
  109. package/backend/dist/services/pluginService.js +390 -69
  110. package/backend/dist/services/pluginService.js.map +1 -1
  111. package/backend/dist/services/pluginTTSService.d.ts +2 -0
  112. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  113. package/backend/dist/services/pluginTTSService.js +27 -2
  114. package/backend/dist/services/pluginTTSService.js.map +1 -1
  115. package/backend/dist/services/pluginUsageService.d.ts +82 -0
  116. package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
  117. package/backend/dist/services/pluginUsageService.js +238 -0
  118. package/backend/dist/services/pluginUsageService.js.map +1 -0
  119. package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
  120. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
  121. package/backend/dist/services/pluginVideoGenerationService.js +198 -0
  122. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
  123. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  124. package/backend/dist/services/preferencesService.js +15 -1
  125. package/backend/dist/services/preferencesService.js.map +1 -1
  126. package/backend/dist/services/registrationPolicy.d.ts +5 -0
  127. package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
  128. package/backend/dist/services/registrationPolicy.js +21 -0
  129. package/backend/dist/services/registrationPolicy.js.map +1 -0
  130. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  131. package/backend/dist/services/simpleGitHubOAuth.js +8 -12
  132. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  133. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  134. package/backend/dist/services/simpleHuggingFaceOAuth.js +7 -12
  135. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  136. package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
  137. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
  138. package/backend/dist/services/systemDiagnosticsService.js +326 -0
  139. package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
  140. package/backend/dist/services/turnstileService.d.ts +2 -1
  141. package/backend/dist/services/turnstileService.d.ts.map +1 -1
  142. package/backend/dist/services/turnstileService.js +28 -2
  143. package/backend/dist/services/turnstileService.js.map +1 -1
  144. package/backend/dist/services/workAgentGuidance.js +1 -1
  145. package/backend/dist/services/workAgentGuidance.js.map +1 -1
  146. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  147. package/backend/dist/services/workAgentService.js +37 -0
  148. package/backend/dist/services/workAgentService.js.map +1 -1
  149. package/backend/dist/services/workHostWorkspaceService.d.ts +22 -0
  150. package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -0
  151. package/backend/dist/services/workHostWorkspaceService.js +136 -0
  152. package/backend/dist/services/workHostWorkspaceService.js.map +1 -0
  153. package/backend/dist/services/workModelProviderService.d.ts +3 -0
  154. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  155. package/backend/dist/services/workModelProviderService.js +37 -4
  156. package/backend/dist/services/workModelProviderService.js.map +1 -1
  157. package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
  158. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
  159. package/backend/dist/services/workPreviewProxyService.js +514 -0
  160. package/backend/dist/services/workPreviewProxyService.js.map +1 -0
  161. package/backend/dist/services/workRuntimeService.d.ts +65 -3
  162. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  163. package/backend/dist/services/workRuntimeService.js +536 -14
  164. package/backend/dist/services/workRuntimeService.js.map +1 -1
  165. package/backend/dist/services/workTaskService.d.ts +3 -3
  166. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  167. package/backend/dist/services/workTaskService.js +10 -6
  168. package/backend/dist/services/workTaskService.js.map +1 -1
  169. package/backend/dist/services/workTerminalService.d.ts +46 -0
  170. package/backend/dist/services/workTerminalService.d.ts.map +1 -0
  171. package/backend/dist/services/workTerminalService.js +241 -0
  172. package/backend/dist/services/workTerminalService.js.map +1 -0
  173. package/backend/dist/storage.d.ts.map +1 -1
  174. package/backend/dist/storage.js +3 -3
  175. package/backend/dist/storage.js.map +1 -1
  176. package/backend/dist/types/index.d.ts +78 -2
  177. package/backend/dist/types/index.d.ts.map +1 -1
  178. package/backend/dist/types/index.js.map +1 -1
  179. package/backend/dist/types/work.d.ts +53 -0
  180. package/backend/dist/types/work.d.ts.map +1 -1
  181. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  182. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  183. package/backend/dist/utils/chatDocumentContext.js +4 -4
  184. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  185. package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
  186. package/backend/dist/utils/chatProviderSelection.js +7 -5
  187. package/backend/dist/utils/chatProviderSelection.js.map +1 -1
  188. package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
  189. package/backend/dist/utils/pluginValidation.d.ts +3 -2
  190. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  191. package/backend/dist/utils/pluginValidation.js +30 -2
  192. package/backend/dist/utils/pluginValidation.js.map +1 -1
  193. package/backend/dist/utils/workGit.d.ts +14 -0
  194. package/backend/dist/utils/workGit.d.ts.map +1 -0
  195. package/backend/dist/utils/workGit.js +207 -0
  196. package/backend/dist/utils/workGit.js.map +1 -0
  197. package/backend/dist/websocketServer.d.ts +1 -0
  198. package/backend/dist/websocketServer.d.ts.map +1 -1
  199. package/backend/dist/websocketServer.js +156 -35
  200. package/backend/dist/websocketServer.js.map +1 -1
  201. package/backend/dist/workTerminalServer.d.ts +17 -0
  202. package/backend/dist/workTerminalServer.d.ts.map +1 -0
  203. package/backend/dist/workTerminalServer.js +226 -0
  204. package/backend/dist/workTerminalServer.js.map +1 -0
  205. package/backend/package.json +1 -1
  206. package/frontend/dist/assets/index-ChhWhug2.css +1 -0
  207. package/frontend/dist/assets/index-CmZntyR1.js +3 -0
  208. package/frontend/dist/assets/xterm-CmMoOwwu.css +1 -0
  209. package/frontend/dist/index.html +28 -6
  210. package/frontend/dist/js/ArtifactContainer-CBAbdoIJ.js +1 -0
  211. package/frontend/dist/js/{ArtifactDemoPage-CWDhGWrz.js → ArtifactDemoPage-BWN0MWCx.js} +1 -1
  212. package/frontend/dist/js/ArtifactSlideOutPanel-D-AvYkfk.js +1 -0
  213. package/frontend/dist/js/{Button-DBk-AREB.js → Button-CRwzOaDZ.js} +1 -1
  214. package/frontend/dist/js/ChatPage-w2FkF_fE.js +16 -0
  215. package/frontend/dist/js/FirstTimeSetup-CzBxl7UH.js +1 -0
  216. package/frontend/dist/js/GalleryPage-Cv8pniRW.js +1 -0
  217. package/frontend/dist/js/HomePage-Vyj4ndU4.js +1 -0
  218. package/frontend/dist/js/LibreClawPage-CYhLgQB-.js +1 -0
  219. package/frontend/dist/js/{ModelManagerModals-DltRprHU.js → ModelManagerModals-C2rwHd01.js} +1 -1
  220. package/frontend/dist/js/ModelSelector-D7kDjZV9.js +1 -0
  221. package/frontend/dist/js/ModelsPage-BnUddkrs.js +2 -0
  222. package/frontend/dist/js/{PersonasPage-C2pqDsWA.js → PersonasPage-BL5XlrEm.js} +2 -2
  223. package/frontend/dist/js/PluginUsagePage-BXqweCCs.js +1 -0
  224. package/frontend/dist/js/RichMessageContent-nAEaPTpH.js +3 -0
  225. package/frontend/dist/js/SettingsModal-DZYCI5-y.js +1 -0
  226. package/frontend/dist/js/SystemPage-jdHYfn9A.js +1 -0
  227. package/frontend/dist/js/UserManagementPage-BpOnt6os.js +1 -0
  228. package/frontend/dist/js/WorkPage-DAp1T1dl.js +5 -0
  229. package/frontend/dist/js/addon-fit-Cj0_dfHF.js +1 -0
  230. package/frontend/dist/js/api-BCqWXjZI.js +19 -0
  231. package/frontend/dist/js/appStore-CDM6V5ny.js +2 -0
  232. package/frontend/dist/js/ar-DS8gs8WK.js +2 -0
  233. package/frontend/dist/js/authStore-Bl5ofD_h.js +4 -0
  234. package/frontend/dist/js/bn-CrMPJwTR.js +2 -0
  235. package/frontend/dist/js/cs-BL116Ezu.js +2 -0
  236. package/frontend/dist/js/da-TDNaKzqy.js +2 -0
  237. package/frontend/dist/js/de-DkIqdAB5.js +2 -0
  238. package/frontend/dist/js/es-CHRXt6Fd.js +2 -0
  239. package/frontend/dist/js/{estree-BRklD62a.js → estree-BFya-bSu.js} +1 -1
  240. package/frontend/dist/js/fr-8715yUKq.js +2 -0
  241. package/frontend/dist/js/hi-C2O08SBU.js +2 -0
  242. package/frontend/dist/js/{html-BgGIAGmn.js → html-DJot0Wwf.js} +1 -1
  243. package/frontend/dist/js/id-Dq7UXUEV.js +2 -0
  244. package/frontend/dist/js/is-B3dbbhSl.js +2 -0
  245. package/frontend/dist/js/it-CLSuu2K7.js +2 -0
  246. package/frontend/dist/js/ja-CthrqyCR.js +2 -0
  247. package/frontend/dist/js/ko-BJvFDJ82.js +2 -0
  248. package/frontend/dist/js/{markdown-CM2nBJJi.js → markdown-CXwWsPYG.js} +1 -1
  249. package/frontend/dist/js/ms-QV0202Mj.js +2 -0
  250. package/frontend/dist/js/nl-Dob1m1pV.js +2 -0
  251. package/frontend/dist/js/pl-urfOKnYI.js +2 -0
  252. package/frontend/dist/js/pt-D52Xkpi0.js +2 -0
  253. package/frontend/dist/js/ru-CwnW9Xe2.js +2 -0
  254. package/frontend/dist/js/{standalone-CUBo-NGt.js → standalone-C0NjJpWr.js} +1 -1
  255. package/frontend/dist/js/sv-BNclj-Fo.js +2 -0
  256. package/frontend/dist/js/th-BlQ4PL57.js +2 -0
  257. package/frontend/dist/js/tr-B80aZ1px.js +2 -0
  258. package/frontend/dist/js/{typescript-Dcy9qxSB.js → typescript-d0TUM2-0.js} +1 -1
  259. package/frontend/dist/js/ui-vendor-ChfdHf5M.js +177 -0
  260. package/frontend/dist/js/uk-DZuuaI56.js +2 -0
  261. package/frontend/dist/js/utils-DmZD5uA3.js +1 -0
  262. package/frontend/dist/js/vi-Bg42fPfF.js +2 -0
  263. package/frontend/dist/js/work-DVgm81bJ.js +1 -0
  264. package/frontend/dist/js/xterm-DKl1QLiw.js +7 -0
  265. package/frontend/dist/js/zh-BSt87zs6.js +2 -0
  266. package/package.json +3 -3
  267. package/plugins/openrouter.json +89 -0
  268. package/backend/dist/services/systemSettingsService.d.ts +0 -12
  269. package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
  270. package/backend/dist/services/systemSettingsService.js +0 -70
  271. package/backend/dist/services/systemSettingsService.js.map +0 -1
  272. package/frontend/dist/assets/index-BVgyQN3z.js +0 -5
  273. package/frontend/dist/assets/index-Dme2Ozol.css +0 -1
  274. package/frontend/dist/js/ArtifactContainer-CbMAYwvr.js +0 -1
  275. package/frontend/dist/js/ArtifactSlideOutPanel-CzUpDM59.js +0 -1
  276. package/frontend/dist/js/ChatPage-D0fdzy7a.js +0 -16
  277. package/frontend/dist/js/FirstTimeSetup-CfnOmy9w.js +0 -1
  278. package/frontend/dist/js/GalleryPage-CMkCur9v.js +0 -1
  279. package/frontend/dist/js/LibreClawPage-CHEfny1k.js +0 -1
  280. package/frontend/dist/js/ModelSelector-COnlNsVM.js +0 -1
  281. package/frontend/dist/js/ModelsPage-nxheiYJp.js +0 -2
  282. package/frontend/dist/js/RichMessageContent-Cz9y-bgl.js +0 -3
  283. package/frontend/dist/js/SettingsModal-B6Se68Hd.js +0 -1
  284. package/frontend/dist/js/UserManagementPage-DQeL-Twp.js +0 -1
  285. package/frontend/dist/js/WorkPage-AcZMp8OB.js +0 -2
  286. package/frontend/dist/js/api-Fi-lJlfu.js +0 -19
  287. package/frontend/dist/js/ar-KceI0PfT.js +0 -2
  288. package/frontend/dist/js/bn-DsKo2dzS.js +0 -2
  289. package/frontend/dist/js/cs-6UKhKj0A.js +0 -2
  290. package/frontend/dist/js/da-CJgZ3YuL.js +0 -2
  291. package/frontend/dist/js/de-BZAmOuCT.js +0 -2
  292. package/frontend/dist/js/es-CD4u7no9.js +0 -2
  293. package/frontend/dist/js/fr-Cou2jOS3.js +0 -2
  294. package/frontend/dist/js/hi-ZxkbNCyB.js +0 -2
  295. package/frontend/dist/js/id-DT9CqaWQ.js +0 -2
  296. package/frontend/dist/js/is-BWSbAIoq.js +0 -2
  297. package/frontend/dist/js/it-CdNoTXm3.js +0 -2
  298. package/frontend/dist/js/ja-CIuQg0xv.js +0 -2
  299. package/frontend/dist/js/ko-BWRUjDOH.js +0 -2
  300. package/frontend/dist/js/ms-gJstIj2a.js +0 -2
  301. package/frontend/dist/js/nl-CydjVNUw.js +0 -2
  302. package/frontend/dist/js/pl-DPN9mAa5.js +0 -2
  303. package/frontend/dist/js/pt-MRXGqIjQ.js +0 -2
  304. package/frontend/dist/js/ru-CvQ9GkJF.js +0 -2
  305. package/frontend/dist/js/sv-BxS2fvhU.js +0 -2
  306. package/frontend/dist/js/th-DMxyn6e4.js +0 -2
  307. package/frontend/dist/js/tr-BTPldUaA.js +0 -2
  308. package/frontend/dist/js/ui-vendor-CAFEDSaO.js +0 -177
  309. package/frontend/dist/js/uk-BGxZOKgp.js +0 -2
  310. package/frontend/dist/js/useBaseQuery-CFTidwqz.js +0 -1
  311. package/frontend/dist/js/useQuery-UsSBfWzs.js +0 -1
  312. package/frontend/dist/js/utils-pTFqSV8c.js +0 -1
  313. package/frontend/dist/js/vi-82JkwFsQ.js +0 -2
  314. package/frontend/dist/js/zh-Bxxfwci3.js +0 -2
@@ -0,0 +1,238 @@
1
+ /*
2
+ * Libre WebUI
3
+ * Copyright (C) 2025 Kroonen AI, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { randomUUID } from 'crypto';
18
+ import { getDatabaseSafe } from '../db.js';
19
+ import { createLogger } from '../utils/logger.js';
20
+ const logger = createLogger('plugin-usage');
21
+ const DAY_MS = 24 * 60 * 60 * 1000;
22
+ const MIN_ANALYTICS_DAYS = 1;
23
+ const MAX_ANALYTICS_DAYS = 365;
24
+ const RETENTION_DAYS = 400;
25
+ const asNumber = (value) => typeof value === 'bigint' ? Number(value) : Number(value ?? 0);
26
+ const nonNegativeInteger = (value) => {
27
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
28
+ return undefined;
29
+ }
30
+ return Math.round(value);
31
+ };
32
+ const asRecord = (value) => value && typeof value === 'object'
33
+ ? value
34
+ : null;
35
+ /** Normalize the usage shapes returned by OpenAI-compatible and Anthropic APIs. */
36
+ export function normalizeProviderTokenUsage(response) {
37
+ const root = asRecord(response);
38
+ const usage = asRecord(root?.usage) || asRecord(root?.usage_metadata);
39
+ if (!usage)
40
+ return undefined;
41
+ const promptTokens = nonNegativeInteger(usage.prompt_tokens ??
42
+ usage.input_tokens ??
43
+ usage.promptTokenCount ??
44
+ usage.inputTokenCount);
45
+ const completionTokens = nonNegativeInteger(usage.completion_tokens ??
46
+ usage.output_tokens ??
47
+ usage.candidatesTokenCount ??
48
+ usage.outputTokenCount);
49
+ const reportedTotal = nonNegativeInteger(usage.total_tokens ?? usage.totalTokenCount);
50
+ if (promptTokens === undefined &&
51
+ completionTokens === undefined &&
52
+ reportedTotal === undefined) {
53
+ return undefined;
54
+ }
55
+ const normalizedPrompt = promptTokens ?? 0;
56
+ const normalizedCompletion = completionTokens ?? 0;
57
+ return {
58
+ promptTokens: normalizedPrompt,
59
+ completionTokens: normalizedCompletion,
60
+ totalTokens: reportedTotal ?? normalizedPrompt + normalizedCompletion,
61
+ };
62
+ }
63
+ class PluginUsageService {
64
+ constructor() {
65
+ this.lastPrunedAt = 0;
66
+ }
67
+ record(input) {
68
+ const db = getDatabaseSafe();
69
+ if (!db)
70
+ return;
71
+ try {
72
+ const createdAt = input.createdAt ?? Date.now();
73
+ if (createdAt - this.lastPrunedAt >= DAY_MS) {
74
+ db.prepare('DELETE FROM plugin_usage_events WHERE created_at < ?').run(createdAt - RETENTION_DAYS * DAY_MS);
75
+ this.lastPrunedAt = createdAt;
76
+ }
77
+ const tokens = input.tokens;
78
+ db.prepare(`INSERT INTO plugin_usage_events
79
+ (id, user_id, plugin_id, plugin_name, capability, model, status,
80
+ prompt_tokens, completion_tokens, total_tokens, input_units,
81
+ output_units, unit_kind, duration_ms, created_at)
82
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(randomUUID(), input.userId || 'default', input.pluginId, input.pluginName, input.capability, input.model, input.status, tokens?.promptTokens ?? null, tokens?.completionTokens ?? null, tokens?.totalTokens ?? null, Math.max(0, Math.round(input.inputUnits ?? 0)), Math.max(0, Math.round(input.outputUnits ?? 0)), input.unitKind ?? null, Math.max(0, Math.round(input.durationMs)), createdAt);
83
+ }
84
+ catch (error) {
85
+ // Metering must never make a provider request fail.
86
+ logger.warn('Failed to record plugin usage:', error);
87
+ }
88
+ }
89
+ getAnalytics(requestedDays = 30) {
90
+ const days = Math.min(MAX_ANALYTICS_DAYS, Math.max(MIN_ANALYTICS_DAYS, Math.round(requestedDays)));
91
+ const to = Date.now();
92
+ const startOfToday = new Date(to);
93
+ startOfToday.setUTCHours(0, 0, 0, 0);
94
+ const from = startOfToday.getTime() - (days - 1) * DAY_MS;
95
+ const empty = this.emptyAnalytics(from, to, days);
96
+ const db = getDatabaseSafe();
97
+ if (!db)
98
+ return empty;
99
+ const totals = db
100
+ .prepare(`SELECT
101
+ COUNT(*) AS calls,
102
+ SUM(CASE WHEN status = 'success' THEN 1 ELSE 0 END) AS successful_calls,
103
+ SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END) AS failed_calls,
104
+ SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled_calls,
105
+ SUM(CASE WHEN total_tokens IS NOT NULL THEN 1 ELSE 0 END) AS metered_calls,
106
+ SUM(COALESCE(prompt_tokens, 0)) AS prompt_tokens,
107
+ SUM(COALESCE(completion_tokens, 0)) AS completion_tokens,
108
+ SUM(COALESCE(total_tokens, 0)) AS reported_tokens,
109
+ ROUND(AVG(duration_ms)) AS average_latency_ms,
110
+ COUNT(DISTINCT user_id) AS unique_users
111
+ FROM plugin_usage_events
112
+ WHERE created_at >= ? AND created_at <= ?`)
113
+ .get(from, to);
114
+ const seriesRows = db
115
+ .prepare(`SELECT
116
+ CAST((created_at - ?) / ? AS INTEGER) AS bucket,
117
+ COUNT(*) AS calls,
118
+ SUM(COALESCE(total_tokens, 0)) AS tokens,
119
+ SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END) AS errors
120
+ FROM plugin_usage_events
121
+ WHERE created_at >= ? AND created_at <= ?
122
+ GROUP BY bucket
123
+ ORDER BY bucket ASC`)
124
+ .all(from, DAY_MS, from, to);
125
+ const seriesByBucket = new Map(seriesRows.map(row => [asNumber(row.bucket), row]));
126
+ const series = Array.from({ length: days }, (_, bucket) => {
127
+ const row = seriesByBucket.get(bucket);
128
+ return {
129
+ timestamp: from + bucket * DAY_MS,
130
+ calls: asNumber(row?.calls),
131
+ tokens: asNumber(row?.tokens),
132
+ errors: asNumber(row?.errors),
133
+ };
134
+ });
135
+ const plugins = db
136
+ .prepare(`SELECT plugin_id, plugin_name, COUNT(*) AS calls,
137
+ SUM(COALESCE(total_tokens, 0)) AS tokens,
138
+ SUM(CASE WHEN status != 'success' THEN 1 ELSE 0 END) AS errors,
139
+ ROUND(AVG(duration_ms)) AS average_latency_ms
140
+ FROM plugin_usage_events
141
+ WHERE created_at >= ? AND created_at <= ?
142
+ GROUP BY plugin_id, plugin_name
143
+ ORDER BY calls DESC, tokens DESC
144
+ LIMIT 50`)
145
+ .all(from, to);
146
+ const models = db
147
+ .prepare(`SELECT model, plugin_id, plugin_name, COUNT(*) AS calls,
148
+ SUM(COALESCE(total_tokens, 0)) AS tokens,
149
+ SUM(CASE WHEN status != 'success' THEN 1 ELSE 0 END) AS errors,
150
+ ROUND(AVG(duration_ms)) AS average_latency_ms
151
+ FROM plugin_usage_events
152
+ WHERE created_at >= ? AND created_at <= ?
153
+ GROUP BY model, plugin_id, plugin_name
154
+ ORDER BY calls DESC, tokens DESC
155
+ LIMIT 100`)
156
+ .all(from, to);
157
+ const capabilities = db
158
+ .prepare(`SELECT capability, COUNT(*) AS calls,
159
+ SUM(COALESCE(total_tokens, 0)) AS tokens,
160
+ SUM(input_units) AS input_units,
161
+ SUM(output_units) AS output_units
162
+ FROM plugin_usage_events
163
+ WHERE created_at >= ? AND created_at <= ?
164
+ GROUP BY capability
165
+ ORDER BY calls DESC`)
166
+ .all(from, to);
167
+ return {
168
+ range: { from, to, days },
169
+ totals: {
170
+ calls: asNumber(totals.calls),
171
+ successfulCalls: asNumber(totals.successful_calls),
172
+ failedCalls: asNumber(totals.failed_calls),
173
+ cancelledCalls: asNumber(totals.cancelled_calls),
174
+ meteredCalls: asNumber(totals.metered_calls),
175
+ promptTokens: asNumber(totals.prompt_tokens),
176
+ completionTokens: asNumber(totals.completion_tokens),
177
+ reportedTokens: asNumber(totals.reported_tokens),
178
+ averageLatencyMs: asNumber(totals.average_latency_ms),
179
+ uniqueUsers: asNumber(totals.unique_users),
180
+ },
181
+ series,
182
+ plugins: plugins.map(row => ({
183
+ pluginId: String(row.plugin_id),
184
+ pluginName: String(row.plugin_name),
185
+ calls: asNumber(row.calls),
186
+ tokens: asNumber(row.tokens),
187
+ errors: asNumber(row.errors),
188
+ averageLatencyMs: asNumber(row.average_latency_ms),
189
+ })),
190
+ models: models.map(row => ({
191
+ model: String(row.model),
192
+ pluginId: String(row.plugin_id),
193
+ pluginName: String(row.plugin_name),
194
+ calls: asNumber(row.calls),
195
+ tokens: asNumber(row.tokens),
196
+ errors: asNumber(row.errors),
197
+ averageLatencyMs: asNumber(row.average_latency_ms),
198
+ })),
199
+ capabilities: capabilities.map(row => ({
200
+ capability: String(row.capability),
201
+ calls: asNumber(row.calls),
202
+ tokens: asNumber(row.tokens),
203
+ inputUnits: asNumber(row.input_units),
204
+ outputUnits: asNumber(row.output_units),
205
+ })),
206
+ };
207
+ }
208
+ emptyAnalytics(from, to, days) {
209
+ return {
210
+ range: { from, to, days },
211
+ totals: {
212
+ calls: 0,
213
+ successfulCalls: 0,
214
+ failedCalls: 0,
215
+ cancelledCalls: 0,
216
+ meteredCalls: 0,
217
+ promptTokens: 0,
218
+ completionTokens: 0,
219
+ reportedTokens: 0,
220
+ averageLatencyMs: 0,
221
+ uniqueUsers: 0,
222
+ },
223
+ series: Array.from({ length: days }, (_, bucket) => ({
224
+ timestamp: from + bucket * DAY_MS,
225
+ calls: 0,
226
+ tokens: 0,
227
+ errors: 0,
228
+ })),
229
+ plugins: [],
230
+ models: [],
231
+ capabilities: [],
232
+ };
233
+ }
234
+ }
235
+ const pluginUsageService = new PluginUsageService();
236
+ export { PluginUsageService };
237
+ export default pluginUsageService;
238
+ //# sourceMappingURL=pluginUsageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginUsageService.js","sourceRoot":"","sources":["../../src/services/pluginUsageService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { Plugin, VideoGenConfig } from '../types/index.js';
2
+ import type { PluginUsageEventInput } from './pluginUsageService.js';
3
+ type PluginVariables = Record<string, string | number | boolean>;
4
+ export interface VideoGenerationJobStatus {
5
+ status: 'pending' | 'in_progress' | 'completed' | 'failed';
6
+ error?: string;
7
+ usage?: Record<string, unknown>;
8
+ }
9
+ export interface PluginVideoGenerationServiceDependencies {
10
+ getAllPlugins(userId?: string): Plugin[];
11
+ getPlugin(id: string, userId?: string): Plugin | null;
12
+ getApiKey(plugin: Plugin, userId?: string): string | null;
13
+ getPluginVariables(plugin: Plugin, userId?: string): PluginVariables;
14
+ validateEndpointUrl(endpoint: string): string;
15
+ recordUsage?(usage: PluginUsageEventInput): void;
16
+ }
17
+ export declare class PluginVideoGenerationService {
18
+ private readonly deps;
19
+ constructor(deps: PluginVideoGenerationServiceDependencies);
20
+ getAvailableModels(userId?: string): Array<{
21
+ model: string;
22
+ plugin: string;
23
+ config?: VideoGenConfig;
24
+ }>;
25
+ submit(model: string, prompt: string, options: {
26
+ pluginId: string;
27
+ userId: string;
28
+ duration?: number;
29
+ resolution?: string;
30
+ aspectRatio?: string;
31
+ generateAudio?: boolean;
32
+ }): Promise<{
33
+ providerJobId: string;
34
+ status: string;
35
+ }>;
36
+ poll(model: string, providerJobId: string, pluginId: string, userId: string): Promise<VideoGenerationJobStatus>;
37
+ download(model: string, providerJobId: string, pluginId: string, userId: string): Promise<{
38
+ video: Buffer;
39
+ mimeType: string;
40
+ }>;
41
+ private resolve;
42
+ private recordError;
43
+ }
44
+ export {};
45
+ //# sourceMappingURL=pluginVideoGenerationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginVideoGenerationService.d.ts","sourceRoot":"","sources":["../../src/services/pluginVideoGenerationService.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;AAEjE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,wCAAwC;IACvD,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1D,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IACrE,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9C,WAAW,CAAC,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAClD;AAED,qBAAa,4BAA4B;IAErC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,wCAAwC;IAGjE,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QACzC,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,cAAc,CAAC;KACzB,CAAC;IAkBI,MAAM,CACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,GACA,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAqD/C,IAAI,CACR,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC;IA8B9B,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IA2B/C,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,WAAW;CAkBpB"}
@@ -0,0 +1,198 @@
1
+ /*
2
+ * Libre WebUI
3
+ * Copyright (C) 2025 Kroonen AI, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ */
7
+ import axios from 'axios';
8
+ import { assertSafePluginEndpoint, buildPluginAuthHeaders, resolvePluginOperationEndpoint, validatePluginModel, } from '../utils/pluginValidation.js';
9
+ export class PluginVideoGenerationService {
10
+ constructor(deps) {
11
+ this.deps = deps;
12
+ }
13
+ getAvailableModels(userId) {
14
+ return this.deps.getAllPlugins(userId).flatMap(plugin => {
15
+ const capability = plugin.capabilities?.video;
16
+ if (!plugin.active ||
17
+ !capability ||
18
+ !this.deps.getApiKey(plugin, userId)) {
19
+ return [];
20
+ }
21
+ return capability.model_map.map(model => ({
22
+ model,
23
+ plugin: plugin.id,
24
+ config: capability.config,
25
+ }));
26
+ });
27
+ }
28
+ async submit(model, prompt, options) {
29
+ validatePluginModel(model);
30
+ const { plugin, endpoint, config, headers } = this.resolve(model, options.pluginId, options.userId);
31
+ if (config?.max_prompt_length && prompt.length > config.max_prompt_length) {
32
+ throw new Error(`Prompt exceeds maximum length of ${config.max_prompt_length} characters`);
33
+ }
34
+ const payload = { model, prompt };
35
+ const duration = options.duration ?? config?.default_duration;
36
+ const resolution = options.resolution ?? config?.default_resolution;
37
+ const aspectRatio = options.aspectRatio ?? config?.default_aspect_ratio;
38
+ const generateAudio = options.generateAudio ?? config?.default_generate_audio;
39
+ if (duration !== undefined)
40
+ payload.duration = duration;
41
+ if (resolution)
42
+ payload.resolution = resolution;
43
+ if (aspectRatio)
44
+ payload.aspect_ratio = aspectRatio;
45
+ if (generateAudio !== undefined)
46
+ payload.generate_audio = generateAudio;
47
+ const startedAt = Date.now();
48
+ try {
49
+ const response = await axios.post(endpoint, payload, {
50
+ headers,
51
+ timeout: 30000,
52
+ maxRedirects: 0,
53
+ });
54
+ const providerJobId = response.data?.id;
55
+ if (typeof providerJobId !== 'string' || providerJobId.length === 0) {
56
+ throw new Error('Video provider returned no job ID');
57
+ }
58
+ this.deps.recordUsage?.({
59
+ userId: options.userId,
60
+ pluginId: plugin.id,
61
+ pluginName: plugin.name,
62
+ capability: 'video',
63
+ model,
64
+ status: 'success',
65
+ durationMs: Date.now() - startedAt,
66
+ outputUnits: 0,
67
+ unitKind: 'jobs',
68
+ });
69
+ return { providerJobId, status: response.data?.status || 'pending' };
70
+ }
71
+ catch (error) {
72
+ this.recordError(plugin, model, options.userId, startedAt);
73
+ throw toVideoError(error);
74
+ }
75
+ }
76
+ async poll(model, providerJobId, pluginId, userId) {
77
+ const { endpoint, headers } = this.resolve(model, pluginId, userId);
78
+ const statusEndpoint = `${endpoint.replace(/\/+$/, '')}/${encodeURIComponent(providerJobId)}`;
79
+ assertSafePluginEndpoint(statusEndpoint, 'video status endpoint');
80
+ try {
81
+ const response = await axios.get(statusEndpoint, {
82
+ headers,
83
+ timeout: 15000,
84
+ maxRedirects: 0,
85
+ });
86
+ const status = response.data?.status;
87
+ if (!['pending', 'in_progress', 'completed', 'failed'].includes(status)) {
88
+ throw new Error('Video provider returned an invalid job status');
89
+ }
90
+ return {
91
+ status,
92
+ ...(typeof response.data?.error === 'string'
93
+ ? { error: response.data.error }
94
+ : {}),
95
+ ...(response.data?.usage && typeof response.data.usage === 'object'
96
+ ? { usage: response.data.usage }
97
+ : {}),
98
+ };
99
+ }
100
+ catch (error) {
101
+ throw toVideoError(error);
102
+ }
103
+ }
104
+ async download(model, providerJobId, pluginId, userId) {
105
+ const { endpoint, headers } = this.resolve(model, pluginId, userId);
106
+ const contentEndpoint = `${endpoint.replace(/\/+$/, '')}/${encodeURIComponent(providerJobId)}/content?index=0`;
107
+ assertSafePluginEndpoint(contentEndpoint, 'video content endpoint');
108
+ try {
109
+ const response = await axios.get(contentEndpoint, {
110
+ headers,
111
+ timeout: 120000,
112
+ responseType: 'arraybuffer',
113
+ maxRedirects: 0,
114
+ maxContentLength: 200 * 1024 * 1024,
115
+ });
116
+ const mimeType = String(response.headers['content-type'] || 'video/mp4')
117
+ .split(';')[0]
118
+ .trim();
119
+ if (!mimeType.startsWith('video/')) {
120
+ throw new Error('Video provider returned non-video content');
121
+ }
122
+ return { video: Buffer.from(response.data), mimeType };
123
+ }
124
+ catch (error) {
125
+ throw toVideoError(error);
126
+ }
127
+ }
128
+ resolve(model, pluginId, userId) {
129
+ const plugin = this.deps.getPlugin(pluginId, userId);
130
+ const capability = plugin?.capabilities?.video;
131
+ if (!plugin?.active ||
132
+ !capability ||
133
+ !capability.model_map.includes(model)) {
134
+ throw new Error(`No video generation plugin found for model: ${model}`);
135
+ }
136
+ const apiKey = this.deps.getApiKey(plugin, userId);
137
+ if (!apiKey) {
138
+ throw new Error(`API key not found for plugin ${plugin.id} (save a provider credential in Settings)`);
139
+ }
140
+ const variables = this.deps.getPluginVariables(plugin, userId);
141
+ let endpoint = capability.endpoint;
142
+ const endpointVariable = capability.config?.endpoint_variable;
143
+ if (endpointVariable) {
144
+ const override = variables[endpointVariable];
145
+ if (typeof override === 'string' && override.trim()) {
146
+ endpoint = this.deps.validateEndpointUrl(override.trim());
147
+ }
148
+ }
149
+ else if (plugin.type === 'video') {
150
+ endpoint = resolvePluginOperationEndpoint(endpoint, variables);
151
+ }
152
+ assertSafePluginEndpoint(endpoint, 'video generation endpoint');
153
+ return {
154
+ plugin,
155
+ endpoint,
156
+ config: capability.config,
157
+ headers: buildPluginAuthHeaders(plugin, apiKey, endpoint),
158
+ };
159
+ }
160
+ recordError(plugin, model, userId, startedAt) {
161
+ this.deps.recordUsage?.({
162
+ userId,
163
+ pluginId: plugin.id,
164
+ pluginName: plugin.name,
165
+ capability: 'video',
166
+ model,
167
+ status: 'error',
168
+ durationMs: Date.now() - startedAt,
169
+ outputUnits: 0,
170
+ unitKind: 'jobs',
171
+ });
172
+ }
173
+ }
174
+ function toVideoError(error) {
175
+ if (axios.isAxiosError(error)) {
176
+ const data = error.response?.data;
177
+ let message = error.message;
178
+ if (Buffer.isBuffer(data) || data instanceof ArrayBuffer) {
179
+ const bytes = Buffer.isBuffer(data)
180
+ ? data
181
+ : Buffer.from(new Uint8Array(data));
182
+ try {
183
+ const parsed = JSON.parse(bytes.toString('utf8'));
184
+ message =
185
+ parsed.error?.message || parsed.error || parsed.message || message;
186
+ }
187
+ catch {
188
+ message = bytes.toString('utf8').slice(0, 200) || message;
189
+ }
190
+ }
191
+ else if (data && typeof data === 'object') {
192
+ message = data.error?.message || data.error || data.message || message;
193
+ }
194
+ return new Error(`Video generation failed: ${message}`);
195
+ }
196
+ return error instanceof Error ? error : new Error('Video generation failed');
197
+ }
198
+ //# sourceMappingURL=pluginVideoGenerationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluginVideoGenerationService.js","sourceRoot":"","sources":["../../src/services/pluginVideoGenerationService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preferencesService.d.ts","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAO3B,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,kBAAkB,CA8DxB;;IAMF,OAAO,CAAC,sBAAsB;IAe9B,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAiBhD,OAAO,CAAC,iBAAiB;IA+BzB,iBAAiB,CACf,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAoGlB,eAAe,CACb,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,qBAAqB,GACxC,eAAe;IAYlB,QAAQ,CACN,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAIlB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAIzE,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAIzC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxC,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIxD,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAOjD,uBAAuB,CACrB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAalB,oBAAoB,CAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAIlB,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IASxD,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIxD,uBAAuB,CACrB,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACpC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAalB,oBAAoB,CAClB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAIlB,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IASxD,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAUjD,UAAU,CACR,IAAI,EAAE,UAAU,EAChB,aAAa,GAAE,OAAO,GAAG,SAAmB,EAC5C,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;CA6CnB;AAED,QAAA,MAAM,kBAAkB,oBAA2B,CAAC;AACpD,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"preferencesService.d.ts","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAO3B,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,kBAAkB,CA+DxB;;IAMF,OAAO,CAAC,sBAAsB;IAe9B,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAiBhD,OAAO,CAAC,iBAAiB;IA+BzB,iBAAiB,CACf,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAsHlB,eAAe,CACb,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,qBAAqB,GACxC,eAAe;IAYlB,QAAQ,CACN,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAIlB,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAIzE,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAIzC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAIxC,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIxD,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAOjD,uBAAuB,CACrB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAalB,oBAAoB,CAClB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAIlB,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IASxD,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAIxD,uBAAuB,CACrB,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACpC,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAalB,oBAAoB,CAClB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;IAIlB,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IASxD,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAUjD,UAAU,CACR,IAAI,EAAE,UAAU,EAChB,aAAa,GAAE,OAAO,GAAG,SAAmB,EAC5C,MAAM,CAAC,EAAE,MAAM,GACd,eAAe;CA6CnB;AAED,QAAA,MAAM,kBAAkB,oBAA2B,CAAC;AACpD,eAAe,kBAAkB,CAAC"}
@@ -22,8 +22,9 @@ class PreferencesService {
22
22
  constructor() {
23
23
  this.defaultPreferences = {
24
24
  defaultModel: '',
25
+ visionModel: '',
25
26
  theme: {
26
- mode: 'light',
27
+ mode: 'dark',
27
28
  adaptToAccent: false,
28
29
  accent: 'blue',
29
30
  customAccent: '#2563eb',
@@ -155,6 +156,19 @@ class PreferencesService {
155
156
  normalizedUpdates.defaultProviderType = provider?.providerType;
156
157
  normalizedUpdates.defaultProviderId = provider?.providerId;
157
158
  }
159
+ const hasVisionProviderUpdate = Object.prototype.hasOwnProperty.call(updates, 'visionProviderType') ||
160
+ Object.prototype.hasOwnProperty.call(updates, 'visionProviderId');
161
+ if (hasVisionProviderUpdate ||
162
+ Object.prototype.hasOwnProperty.call(updates, 'visionModel')) {
163
+ const provider = hasVisionProviderUpdate
164
+ ? normalizeChatProviderSelection({
165
+ providerType: updates.visionProviderType,
166
+ providerId: updates.visionProviderId,
167
+ })
168
+ : undefined;
169
+ normalizedUpdates.visionProviderType = provider?.providerType;
170
+ normalizedUpdates.visionProviderId = provider?.providerId;
171
+ }
158
172
  if (updates.titleSettings) {
159
173
  const currentTitleSettings = currentPreferences.titleSettings;
160
174
  const titleSettings = {
@@ -1 +1 @@
1
- {"version":3,"file":"preferencesService.js","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preferencesService.js","sourceRoot":"","sources":["../../src/services/preferencesService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Public account registration is enabled unless explicitly disabled. */
2
+ export declare const isPublicRegistrationEnabled: (value?: string | undefined) => boolean;
3
+ /** Disabled registration is absolute, including on an empty database. */
4
+ export declare const canCreateLocalAccount: (_userCount: number, registrationEnabled?: boolean) => boolean;
5
+ //# sourceMappingURL=registrationPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registrationPolicy.d.ts","sourceRoot":"","sources":["../../src/services/registrationPolicy.ts"],"names":[],"mappings":"AAiBA,yEAAyE;AACzE,eAAO,MAAM,2BAA2B,GACtC,QAAO,MAAM,GAAG,SAAqC,KACpD,OAAkD,CAAC;AAEtD,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,GAChC,YAAY,MAAM,EAClB,6BAAmD,KAClD,OAA8B,CAAC"}
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Libre WebUI
3
+ * Copyright (C) 2025 Kroonen AI, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /** Public account registration is enabled unless explicitly disabled. */
18
+ export const isPublicRegistrationEnabled = (value = process.env.ENABLE_SIGNUP) => value?.trim().toLowerCase() !== 'false';
19
+ /** Disabled registration is absolute, including on an empty database. */
20
+ export const canCreateLocalAccount = (_userCount, registrationEnabled = isPublicRegistrationEnabled()) => registrationEnabled;
21
+ //# sourceMappingURL=registrationPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registrationPolicy.js","sourceRoot":"","sources":["../../src/services/registrationPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,QAA4B,OAAO,CAAC,GAAG,CAAC,aAAa,EAC5C,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;AAEtD,yEAAyE;AACzE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,UAAkB,EAClB,mBAAmB,GAAG,2BAA2B,EAAE,EAC1C,EAAE,CAAC,mBAAmB,CAAC"}