libre-webui 0.17.0 → 0.19.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 (438) hide show
  1. package/README.md +30 -17
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +195 -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 +48 -19
  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/middleware/index.d.ts.map +1 -1
  12. package/backend/dist/models/personaModel.d.ts.map +1 -1
  13. package/backend/dist/models/personaModel.js.map +1 -1
  14. package/backend/dist/models/userModel.d.ts +24 -0
  15. package/backend/dist/models/userModel.d.ts.map +1 -1
  16. package/backend/dist/models/userModel.js +92 -24
  17. package/backend/dist/models/userModel.js.map +1 -1
  18. package/backend/dist/routes/agentCli.d.ts.map +1 -1
  19. package/backend/dist/routes/agentCli.js +4 -2
  20. package/backend/dist/routes/agentCli.js.map +1 -1
  21. package/backend/dist/routes/auth.d.ts.map +1 -1
  22. package/backend/dist/routes/auth.js +118 -55
  23. package/backend/dist/routes/auth.js.map +1 -1
  24. package/backend/dist/routes/chat.d.ts.map +1 -1
  25. package/backend/dist/routes/chat.js +106 -3
  26. package/backend/dist/routes/chat.js.map +1 -1
  27. package/backend/dist/routes/documents.d.ts.map +1 -1
  28. package/backend/dist/routes/documents.js +179 -41
  29. package/backend/dist/routes/documents.js.map +1 -1
  30. package/backend/dist/routes/embeddings.d.ts.map +1 -1
  31. package/backend/dist/routes/embeddings.js +2 -2
  32. package/backend/dist/routes/embeddings.js.map +1 -1
  33. package/backend/dist/routes/huggingfaceHub.d.ts.map +1 -1
  34. package/backend/dist/routes/huggingfaceHub.js +3 -1
  35. package/backend/dist/routes/huggingfaceHub.js.map +1 -1
  36. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  37. package/backend/dist/routes/imageGen.js +2 -0
  38. package/backend/dist/routes/imageGen.js.map +1 -1
  39. package/backend/dist/routes/libreClaw.d.ts.map +1 -1
  40. package/backend/dist/routes/media.d.ts +3 -0
  41. package/backend/dist/routes/media.d.ts.map +1 -0
  42. package/backend/dist/routes/media.js +429 -0
  43. package/backend/dist/routes/media.js.map +1 -0
  44. package/backend/dist/routes/notes.d.ts +3 -0
  45. package/backend/dist/routes/notes.d.ts.map +1 -0
  46. package/backend/dist/routes/notes.js +121 -0
  47. package/backend/dist/routes/notes.js.map +1 -0
  48. package/backend/dist/routes/ollama.d.ts.map +1 -1
  49. package/backend/dist/routes/ollama.js +17 -85
  50. package/backend/dist/routes/ollama.js.map +1 -1
  51. package/backend/dist/routes/personas.d.ts.map +1 -1
  52. package/backend/dist/routes/personas.js +2 -0
  53. package/backend/dist/routes/personas.js.map +1 -1
  54. package/backend/dist/routes/plugins.d.ts.map +1 -1
  55. package/backend/dist/routes/plugins.js +28 -0
  56. package/backend/dist/routes/plugins.js.map +1 -1
  57. package/backend/dist/routes/preferences.d.ts.map +1 -1
  58. package/backend/dist/routes/systemDiagnostics.d.ts +3 -0
  59. package/backend/dist/routes/systemDiagnostics.d.ts.map +1 -0
  60. package/backend/dist/routes/systemDiagnostics.js +49 -0
  61. package/backend/dist/routes/systemDiagnostics.js.map +1 -0
  62. package/backend/dist/routes/tts.d.ts.map +1 -1
  63. package/backend/dist/routes/tts.js +4 -0
  64. package/backend/dist/routes/tts.js.map +1 -1
  65. package/backend/dist/routes/users.d.ts.map +1 -1
  66. package/backend/dist/routes/users.js +79 -0
  67. package/backend/dist/routes/users.js.map +1 -1
  68. package/backend/dist/routes/work.d.ts.map +1 -1
  69. package/backend/dist/routes/work.js +84 -0
  70. package/backend/dist/routes/work.js.map +1 -1
  71. package/backend/dist/services/agentCliService.d.ts +37 -4
  72. package/backend/dist/services/agentCliService.d.ts.map +1 -1
  73. package/backend/dist/services/agentCliService.js +229 -10
  74. package/backend/dist/services/agentCliService.js.map +1 -1
  75. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -1
  76. package/backend/dist/services/authService.d.ts +15 -9
  77. package/backend/dist/services/authService.d.ts.map +1 -1
  78. package/backend/dist/services/authService.js +39 -29
  79. package/backend/dist/services/authService.js.map +1 -1
  80. package/backend/dist/services/chatGenerationService.d.ts.map +1 -1
  81. package/backend/dist/services/chatGenerationService.js +3 -3
  82. package/backend/dist/services/chatGenerationService.js.map +1 -1
  83. package/backend/dist/services/chatRequestService.d.ts +8 -2
  84. package/backend/dist/services/chatRequestService.d.ts.map +1 -1
  85. package/backend/dist/services/chatRequestService.js +30 -3
  86. package/backend/dist/services/chatRequestService.js.map +1 -1
  87. package/backend/dist/services/chatService.d.ts +6 -1
  88. package/backend/dist/services/chatService.d.ts.map +1 -1
  89. package/backend/dist/services/chatService.js +54 -1
  90. package/backend/dist/services/chatService.js.map +1 -1
  91. package/backend/dist/services/codexOAuthService.d.ts +22 -0
  92. package/backend/dist/services/codexOAuthService.d.ts.map +1 -0
  93. package/backend/dist/services/codexOAuthService.js +176 -0
  94. package/backend/dist/services/codexOAuthService.js.map +1 -0
  95. package/backend/dist/services/documentService.d.ts +17 -10
  96. package/backend/dist/services/documentService.d.ts.map +1 -1
  97. package/backend/dist/services/documentService.js +79 -58
  98. package/backend/dist/services/documentService.js.map +1 -1
  99. package/backend/dist/services/embeddingService.d.ts.map +1 -1
  100. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  101. package/backend/dist/services/encryptionService.js +18 -8
  102. package/backend/dist/services/encryptionService.js.map +1 -1
  103. package/backend/dist/services/followUpService.d.ts +44 -0
  104. package/backend/dist/services/followUpService.d.ts.map +1 -0
  105. package/backend/dist/services/followUpService.js +123 -0
  106. package/backend/dist/services/followUpService.js.map +1 -0
  107. package/backend/dist/services/galleryService.d.ts +23 -1
  108. package/backend/dist/services/galleryService.d.ts.map +1 -1
  109. package/backend/dist/services/galleryService.js +125 -8
  110. package/backend/dist/services/galleryService.js.map +1 -1
  111. package/backend/dist/services/libreClawService.d.ts.map +1 -1
  112. package/backend/dist/services/mediaGenerationJobService.d.ts +25 -0
  113. package/backend/dist/services/mediaGenerationJobService.d.ts.map +1 -0
  114. package/backend/dist/services/mediaGenerationJobService.js +82 -0
  115. package/backend/dist/services/mediaGenerationJobService.js.map +1 -0
  116. package/backend/dist/services/memoryService.d.ts.map +1 -1
  117. package/backend/dist/services/memoryService.js.map +1 -1
  118. package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
  119. package/backend/dist/services/oauthSecurity.d.ts +14 -0
  120. package/backend/dist/services/oauthSecurity.d.ts.map +1 -0
  121. package/backend/dist/services/oauthSecurity.js +101 -0
  122. package/backend/dist/services/oauthSecurity.js.map +1 -0
  123. package/backend/dist/services/ollamaService.d.ts +8 -2
  124. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  125. package/backend/dist/services/ollamaService.js +40 -2
  126. package/backend/dist/services/ollamaService.js.map +1 -1
  127. package/backend/dist/services/personaService.d.ts.map +1 -1
  128. package/backend/dist/services/personaService.js.map +1 -1
  129. package/backend/dist/services/pluginActivationService.d.ts.map +1 -1
  130. package/backend/dist/services/pluginActivationService.js.map +1 -1
  131. package/backend/dist/services/pluginAudioGenerationService.d.ts +34 -0
  132. package/backend/dist/services/pluginAudioGenerationService.d.ts.map +1 -0
  133. package/backend/dist/services/pluginAudioGenerationService.js +211 -0
  134. package/backend/dist/services/pluginAudioGenerationService.js.map +1 -0
  135. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -1
  136. package/backend/dist/services/pluginCapabilityRegistryService.js +6 -0
  137. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -1
  138. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  139. package/backend/dist/services/pluginEmbeddingService.d.ts +2 -0
  140. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -1
  141. package/backend/dist/services/pluginEmbeddingService.js +66 -35
  142. package/backend/dist/services/pluginEmbeddingService.js.map +1 -1
  143. package/backend/dist/services/pluginImageGenerationService.d.ts +2 -0
  144. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
  145. package/backend/dist/services/pluginImageGenerationService.js +63 -38
  146. package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
  147. package/backend/dist/services/pluginService.d.ts +43 -1
  148. package/backend/dist/services/pluginService.d.ts.map +1 -1
  149. package/backend/dist/services/pluginService.js +441 -71
  150. package/backend/dist/services/pluginService.js.map +1 -1
  151. package/backend/dist/services/pluginTTSService.d.ts +2 -0
  152. package/backend/dist/services/pluginTTSService.d.ts.map +1 -1
  153. package/backend/dist/services/pluginTTSService.js +27 -2
  154. package/backend/dist/services/pluginTTSService.js.map +1 -1
  155. package/backend/dist/services/pluginUsageService.d.ts +100 -0
  156. package/backend/dist/services/pluginUsageService.d.ts.map +1 -0
  157. package/backend/dist/services/pluginUsageService.js +291 -0
  158. package/backend/dist/services/pluginUsageService.js.map +1 -0
  159. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  160. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  161. package/backend/dist/services/pluginVideoGenerationService.d.ts +45 -0
  162. package/backend/dist/services/pluginVideoGenerationService.d.ts.map +1 -0
  163. package/backend/dist/services/pluginVideoGenerationService.js +198 -0
  164. package/backend/dist/services/pluginVideoGenerationService.js.map +1 -0
  165. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  166. package/backend/dist/services/preferencesService.js +16 -1
  167. package/backend/dist/services/preferencesService.js.map +1 -1
  168. package/backend/dist/services/registrationPolicy.d.ts +5 -0
  169. package/backend/dist/services/registrationPolicy.d.ts.map +1 -0
  170. package/backend/dist/services/registrationPolicy.js +21 -0
  171. package/backend/dist/services/registrationPolicy.js.map +1 -0
  172. package/backend/dist/services/simpleGitHubOAuth.d.ts +1 -1
  173. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  174. package/backend/dist/services/simpleGitHubOAuth.js +13 -13
  175. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  176. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts +1 -1
  177. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  178. package/backend/dist/services/simpleHuggingFaceOAuth.js +12 -17
  179. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  180. package/backend/dist/services/systemDiagnosticsService.d.ts +117 -0
  181. package/backend/dist/services/systemDiagnosticsService.d.ts.map +1 -0
  182. package/backend/dist/services/systemDiagnosticsService.js +326 -0
  183. package/backend/dist/services/systemDiagnosticsService.js.map +1 -0
  184. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  185. package/backend/dist/services/turnstileService.d.ts +2 -1
  186. package/backend/dist/services/turnstileService.d.ts.map +1 -1
  187. package/backend/dist/services/turnstileService.js +28 -2
  188. package/backend/dist/services/turnstileService.js.map +1 -1
  189. package/backend/dist/services/userService.d.ts +1 -0
  190. package/backend/dist/services/userService.js +1 -1
  191. package/backend/dist/services/workAgentService.d.ts.map +1 -1
  192. package/backend/dist/services/workAgentService.js.map +1 -1
  193. package/backend/dist/services/workEventService.d.ts.map +1 -1
  194. package/backend/dist/services/workEventService.js.map +1 -1
  195. package/backend/dist/services/workHostWorkspaceService.d.ts.map +1 -1
  196. package/backend/dist/services/workModelProviderService.d.ts +3 -0
  197. package/backend/dist/services/workModelProviderService.d.ts.map +1 -1
  198. package/backend/dist/services/workModelProviderService.js +67 -10
  199. package/backend/dist/services/workModelProviderService.js.map +1 -1
  200. package/backend/dist/services/workPreviewProxyService.d.ts +27 -0
  201. package/backend/dist/services/workPreviewProxyService.d.ts.map +1 -0
  202. package/backend/dist/services/workPreviewProxyService.js +514 -0
  203. package/backend/dist/services/workPreviewProxyService.js.map +1 -0
  204. package/backend/dist/services/workRuntimeService.d.ts +28 -7
  205. package/backend/dist/services/workRuntimeService.d.ts.map +1 -1
  206. package/backend/dist/services/workRuntimeService.js +287 -8
  207. package/backend/dist/services/workRuntimeService.js.map +1 -1
  208. package/backend/dist/services/workTaskService.d.ts.map +1 -1
  209. package/backend/dist/services/workTaskService.js.map +1 -1
  210. package/backend/dist/services/workTerminalService.d.ts +1 -1
  211. package/backend/dist/services/workTerminalService.d.ts.map +1 -1
  212. package/backend/dist/services/workTerminalService.js.map +1 -1
  213. package/backend/dist/storage.d.ts +12 -1
  214. package/backend/dist/storage.d.ts.map +1 -1
  215. package/backend/dist/storage.js +183 -9
  216. package/backend/dist/storage.js.map +1 -1
  217. package/backend/dist/storageMappers.d.ts +13 -0
  218. package/backend/dist/storageMappers.d.ts.map +1 -1
  219. package/backend/dist/storageMappers.js +5 -0
  220. package/backend/dist/storageMappers.js.map +1 -1
  221. package/backend/dist/types/index.d.ts +106 -1
  222. package/backend/dist/types/index.d.ts.map +1 -1
  223. package/backend/dist/types/index.js.map +1 -1
  224. package/backend/dist/types/work.d.ts +31 -0
  225. package/backend/dist/types/work.d.ts.map +1 -1
  226. package/backend/dist/utils/chatContext.js.map +1 -1
  227. package/backend/dist/utils/chatDocumentContext.d.ts +1 -1
  228. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
  229. package/backend/dist/utils/chatDocumentContext.js +9 -4
  230. package/backend/dist/utils/chatDocumentContext.js.map +1 -1
  231. package/backend/dist/utils/chatProviderSelection.d.ts.map +1 -1
  232. package/backend/dist/utils/generationUtils.d.ts.map +1 -1
  233. package/backend/dist/utils/hash.d.ts.map +1 -1
  234. package/backend/dist/utils/hash.js +13 -2
  235. package/backend/dist/utils/hash.js.map +1 -1
  236. package/backend/dist/utils/logger.d.ts +1 -1
  237. package/backend/dist/utils/logger.d.ts.map +1 -1
  238. package/backend/dist/utils/ollamaStreaming.d.ts +6 -2
  239. package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -1
  240. package/backend/dist/utils/ollamaStreaming.js +12 -2
  241. package/backend/dist/utils/ollamaStreaming.js.map +1 -1
  242. package/backend/dist/utils/openAIResponsesAdapter.js.map +1 -1
  243. package/backend/dist/utils/packagePaths.js.map +1 -1
  244. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
  245. package/backend/dist/utils/pluginChatAdapter.js +11 -4
  246. package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
  247. package/backend/dist/utils/pluginChatContext.js.map +1 -1
  248. package/backend/dist/utils/pluginDefinitionTrust.d.ts.map +1 -1
  249. package/backend/dist/utils/pluginDefinitionTrust.js +2 -1
  250. package/backend/dist/utils/pluginDefinitionTrust.js.map +1 -1
  251. package/backend/dist/utils/pluginStreamAdapter.d.ts +10 -1
  252. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -1
  253. package/backend/dist/utils/pluginStreamAdapter.js +30 -23
  254. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -1
  255. package/backend/dist/utils/pluginValidation.d.ts +4 -3
  256. package/backend/dist/utils/pluginValidation.d.ts.map +1 -1
  257. package/backend/dist/utils/pluginValidation.js +47 -2
  258. package/backend/dist/utils/pluginValidation.js.map +1 -1
  259. package/backend/dist/utils/resourceLimits.d.ts +10 -0
  260. package/backend/dist/utils/resourceLimits.d.ts.map +1 -0
  261. package/backend/dist/utils/resourceLimits.js +29 -0
  262. package/backend/dist/utils/resourceLimits.js.map +1 -0
  263. package/backend/dist/utils/thinkingPhaseTimer.d.ts +21 -0
  264. package/backend/dist/utils/thinkingPhaseTimer.d.ts.map +1 -0
  265. package/backend/dist/utils/thinkingPhaseTimer.js +84 -0
  266. package/backend/dist/utils/thinkingPhaseTimer.js.map +1 -0
  267. package/backend/dist/utils/webpageFetcher.d.ts +25 -0
  268. package/backend/dist/utils/webpageFetcher.d.ts.map +1 -0
  269. package/backend/dist/utils/webpageFetcher.js +231 -0
  270. package/backend/dist/utils/webpageFetcher.js.map +1 -0
  271. package/backend/dist/utils/websocketMessages.js.map +1 -1
  272. package/backend/dist/utils/workGit.d.ts +14 -0
  273. package/backend/dist/utils/workGit.d.ts.map +1 -0
  274. package/backend/dist/utils/workGit.js +207 -0
  275. package/backend/dist/utils/workGit.js.map +1 -0
  276. package/backend/dist/websocketServer.d.ts +1 -0
  277. package/backend/dist/websocketServer.d.ts.map +1 -1
  278. package/backend/dist/websocketServer.js +110 -25
  279. package/backend/dist/websocketServer.js.map +1 -1
  280. package/backend/dist/workTerminalServer.d.ts.map +1 -1
  281. package/backend/dist/workTerminalServer.js +3 -1
  282. package/backend/dist/workTerminalServer.js.map +1 -1
  283. package/backend/package.json +8 -7
  284. package/bin/cli.js +2 -2
  285. package/frontend/dist/assets/index-CFhy8YLA.css +1 -0
  286. package/frontend/dist/assets/index-_lG_lwU-.js +164 -0
  287. package/frontend/dist/assets/markdown-math-ClQbWekD.css +1 -0
  288. package/frontend/dist/assets/xterm-DHcfr8qj.css +1 -0
  289. package/frontend/dist/index.html +41 -16
  290. package/frontend/dist/js/ArtifactContainer-CjpvtR8G.js +1 -0
  291. package/frontend/dist/js/{ArtifactDemoPage-B4qsvUnF.js → ArtifactDemoPage-yrPXLBQo.js} +1 -1
  292. package/frontend/dist/js/ArtifactSlideOutPanel-DdsL2AOQ.js +1 -0
  293. package/frontend/dist/js/{Button-CRwzOaDZ.js → Button-X9TT9gTD.js} +1 -1
  294. package/frontend/dist/js/ChatPage-D9lWGM8g.js +16 -0
  295. package/frontend/dist/js/FirstTimeSetup-CwLPbHkI.js +1 -0
  296. package/frontend/dist/js/GalleryPage-C9DTdo_-.js +1 -0
  297. package/frontend/dist/js/HomePage-iF44c34e.js +1 -0
  298. package/frontend/dist/js/LibreClawPage-B9wWZIz6.js +1 -0
  299. package/frontend/dist/js/{ModelManagerModals-DMoEav1l.js → ModelManagerModals-D9j9RECi.js} +1 -1
  300. package/frontend/dist/js/ModelSelector-B0RKEJwC.js +1 -0
  301. package/frontend/dist/js/ModelsPage-DJXoIOs8.js +2 -0
  302. package/frontend/dist/js/NotesPage-BTNH6JR2.js +1 -0
  303. package/frontend/dist/js/{OptimizedSyntaxHighlighter-Ci9sRc78.js → OptimizedSyntaxHighlighter-CWYUn9Oe.js} +1 -1
  304. package/frontend/dist/js/PersonasPage--nqoJ-wA.js +13 -0
  305. package/frontend/dist/js/PluginUsagePage-BHwm-BBr.js +1 -0
  306. package/frontend/dist/js/{RichMessageContent-BJ49VN9j.js → RichMessageContent-DYRrXJ75.js} +3 -3
  307. package/frontend/dist/js/SettingsModal-y1Nzg55O.js +1 -0
  308. package/frontend/dist/js/SystemPage-CHez8h3p.js +1 -0
  309. package/frontend/dist/js/UserManagementPage-aJhKXQxG.js +1 -0
  310. package/frontend/dist/js/WorkPage-Ccla0MDm.js +5 -0
  311. package/frontend/dist/js/addon-fit-DIOBYJe3.js +1 -0
  312. package/frontend/dist/js/api-DVP8xiYT.js +19 -0
  313. package/frontend/dist/js/appStore-Cw7PmG-J.js +2 -0
  314. package/frontend/dist/js/ar-ONXFvOB1.js +2 -0
  315. package/frontend/dist/js/artifactHtml-C0Hu9I1u.js +41 -0
  316. package/frontend/dist/js/authStore-gv_MgDKr.js +3 -0
  317. package/frontend/dist/js/babel-CmENXdZw.js +16 -0
  318. package/frontend/dist/js/bn-BLhREPm6.js +2 -0
  319. package/frontend/dist/js/chatStore-DmDbolTg.js +2 -0
  320. package/frontend/dist/js/cs-Bg8E9fG5.js +2 -0
  321. package/frontend/dist/js/da-ODCU8w4x.js +2 -0
  322. package/frontend/dist/js/de-nuGHRJ5N.js +2 -0
  323. package/frontend/dist/js/es-DcN_cwum.js +2 -0
  324. package/frontend/dist/js/estree-DJwQLE88.js +44 -0
  325. package/frontend/dist/js/fr-C-L_xGr5.js +2 -0
  326. package/frontend/dist/js/hi-DUEtwA9G.js +2 -0
  327. package/frontend/dist/js/html-DdAOfeK4.js +25 -0
  328. package/frontend/dist/js/i18n-xir4Zz7C.js +2 -0
  329. package/frontend/dist/js/i18next-DgmgtwsV.js +1 -0
  330. package/frontend/dist/js/id-DNTYhti_.js +2 -0
  331. package/frontend/dist/js/imageGenModels-Dx_QMLJQ.js +1 -0
  332. package/frontend/dist/js/is-Bx28ymbQ.js +2 -0
  333. package/frontend/dist/js/it-BjW-JLlS.js +2 -0
  334. package/frontend/dist/js/ja-uThj4Q1w.js +2 -0
  335. package/frontend/dist/js/ko-DqgmMYXK.js +2 -0
  336. package/frontend/dist/js/logger-DSXjF4ye.js +1 -0
  337. package/frontend/dist/js/markdown-RaVsONor.js +70 -0
  338. package/frontend/dist/js/markdown-core-DHnR5Hw8.js +16 -0
  339. package/frontend/dist/js/markdown-math-B7FlYsmr.js +261 -0
  340. package/frontend/dist/js/messageCodeStyles-cTX0rQGK.js +2 -0
  341. package/frontend/dist/js/ms-R9kt_P0T.js +2 -0
  342. package/frontend/dist/js/nl-BjmtEgpK.js +2 -0
  343. package/frontend/dist/js/pl-C8_gU9r1.js +2 -0
  344. package/frontend/dist/js/postcss-B5WIGhAY.js +62 -0
  345. package/frontend/dist/js/pt-7BJForUD.js +2 -0
  346. package/frontend/dist/js/react-vendor-DPNXrO-8.js +9 -0
  347. package/frontend/dist/js/{rolldown-runtime-QTnfLwEv.js → rolldown-runtime-hePW80VL.js} +1 -1
  348. package/frontend/dist/js/router-vendor-Ca9zqOqT.js +1 -0
  349. package/frontend/dist/js/ru-D2HmhY6Y.js +2 -0
  350. package/frontend/dist/js/{standalone-DmLfI4Qj.js → standalone-B_aPlu7o.js} +8 -8
  351. package/frontend/dist/js/sv-zny3sDBM.js +2 -0
  352. package/frontend/dist/js/syntax-highlight-Ca9bHsaz.js +8 -0
  353. package/frontend/dist/js/th-CAzEKRz8.js +2 -0
  354. package/frontend/dist/js/tr-BmYgtmUo.js +2 -0
  355. package/frontend/dist/js/{typescript-Bcq62agC.js → typescript-Dz4OUZSl.js} +10 -10
  356. package/frontend/dist/js/ui-DDlcz2oy.js +2 -0
  357. package/frontend/dist/js/ui-vendor-D_pYT79f.js +177 -0
  358. package/frontend/dist/js/uk-eiYZ0uRq.js +2 -0
  359. package/frontend/dist/js/useTranslation-CdeLZqSW.js +1 -0
  360. package/frontend/dist/js/utils-BhpNrGnR.js +1 -0
  361. package/frontend/dist/js/utils-vendor-1zob7nK9.js +9 -0
  362. package/frontend/dist/js/vi-C7SVAWpO.js +2 -0
  363. package/frontend/dist/js/welcomePrompts-to5mv_gx.js +1 -0
  364. package/frontend/dist/js/xterm-Da5ppSVt.js +18 -0
  365. package/frontend/dist/js/{yaml-mLy9chOK.js → yaml-QD4znPfZ.js} +20 -20
  366. package/frontend/dist/js/zh-2Q3cQv3s.js +2 -0
  367. package/package.json +20 -13
  368. package/plugins/codex-oauth.json +19 -0
  369. package/plugins/openrouter.json +89 -0
  370. package/backend/dist/services/systemSettingsService.d.ts +0 -12
  371. package/backend/dist/services/systemSettingsService.d.ts.map +0 -1
  372. package/backend/dist/services/systemSettingsService.js +0 -70
  373. package/backend/dist/services/systemSettingsService.js.map +0 -1
  374. package/frontend/dist/assets/index-BqI0kezz.css +0 -1
  375. package/frontend/dist/assets/index-CRC6g6bL.js +0 -3
  376. package/frontend/dist/assets/markdown-math-CYlHEDRF.css +0 -1
  377. package/frontend/dist/assets/xterm-CmMoOwwu.css +0 -1
  378. package/frontend/dist/js/ArtifactContainer-Cdy-973y.js +0 -1
  379. package/frontend/dist/js/ArtifactSlideOutPanel-CmKgQ4eD.js +0 -1
  380. package/frontend/dist/js/ChatPage-CYT69oBR.js +0 -16
  381. package/frontend/dist/js/FirstTimeSetup-C8LdLP5J.js +0 -1
  382. package/frontend/dist/js/GalleryPage-Bm89pnS8.js +0 -1
  383. package/frontend/dist/js/HomePage-CeCYnMUG.js +0 -1
  384. package/frontend/dist/js/LibreClawPage-DGMEV6dm.js +0 -1
  385. package/frontend/dist/js/ModelSelector-DXPdGdQ_.js +0 -1
  386. package/frontend/dist/js/ModelsPage-D-FIy2x-.js +0 -2
  387. package/frontend/dist/js/PersonasPage-CIrEVFo5.js +0 -13
  388. package/frontend/dist/js/SettingsModal-CxtOXPY7.js +0 -1
  389. package/frontend/dist/js/UserManagementPage-BfyYGGFQ.js +0 -1
  390. package/frontend/dist/js/WorkPage-C7bW6Hxx.js +0 -4
  391. package/frontend/dist/js/addon-fit-Cj0_dfHF.js +0 -1
  392. package/frontend/dist/js/api-DCD41-l9.js +0 -19
  393. package/frontend/dist/js/appStore-Bw-8Exsx.js +0 -2
  394. package/frontend/dist/js/ar-BAHlIvy0.js +0 -2
  395. package/frontend/dist/js/artifactHtml-B7Oy2e__.js +0 -27
  396. package/frontend/dist/js/authStore-mOYH_AXI.js +0 -4
  397. package/frontend/dist/js/babel-BnLuavNv.js +0 -16
  398. package/frontend/dist/js/bn-BxquDVbd.js +0 -2
  399. package/frontend/dist/js/cs-C4DoKzRm.js +0 -2
  400. package/frontend/dist/js/da-CFslpGTw.js +0 -2
  401. package/frontend/dist/js/de-ChudoRh2.js +0 -2
  402. package/frontend/dist/js/demoMode-BhEpMVh5.js +0 -1
  403. package/frontend/dist/js/es-B36fefE-.js +0 -2
  404. package/frontend/dist/js/estree-0vwU39qX.js +0 -44
  405. package/frontend/dist/js/fr-BSVeTM5W.js +0 -2
  406. package/frontend/dist/js/hi-BGoFbl5V.js +0 -2
  407. package/frontend/dist/js/html-CApr2Bvi.js +0 -25
  408. package/frontend/dist/js/id-BfYs2p_j.js +0 -2
  409. package/frontend/dist/js/is-DZ1MS-5A.js +0 -2
  410. package/frontend/dist/js/it-CXtrPCG1.js +0 -2
  411. package/frontend/dist/js/ja-FPJ_NK_y.js +0 -2
  412. package/frontend/dist/js/ko-DVwD4ZZF.js +0 -2
  413. package/frontend/dist/js/logger-DbNs3-DK.js +0 -1
  414. package/frontend/dist/js/markdown-C78Qc6xu.js +0 -70
  415. package/frontend/dist/js/markdown-core-GI9BPwrB.js +0 -16
  416. package/frontend/dist/js/markdown-math-E4O1gcxj.js +0 -261
  417. package/frontend/dist/js/ms-PKPP0RX3.js +0 -2
  418. package/frontend/dist/js/nl-DWM5HJZ8.js +0 -2
  419. package/frontend/dist/js/pl-B9va8Tuf.js +0 -2
  420. package/frontend/dist/js/postcss-DSDkwgFE.js +0 -62
  421. package/frontend/dist/js/pt-P0IQi-Zr.js +0 -2
  422. package/frontend/dist/js/react-vendor-DyG_ODzn.js +0 -9
  423. package/frontend/dist/js/router-vendor-BjDI9mRe.js +0 -1
  424. package/frontend/dist/js/ru-Ca2bxYnc.js +0 -2
  425. package/frontend/dist/js/sv-DI4RDwyZ.js +0 -2
  426. package/frontend/dist/js/syntax-highlight-pM1xnNpY.js +0 -8
  427. package/frontend/dist/js/th-DN0bDS9d.js +0 -2
  428. package/frontend/dist/js/tr-ChqMv5Q4.js +0 -2
  429. package/frontend/dist/js/ui-vendor-DohPFHDW.js +0 -177
  430. package/frontend/dist/js/uk-Cr51h_XQ.js +0 -2
  431. package/frontend/dist/js/useBaseQuery-BAOlhjar.js +0 -1
  432. package/frontend/dist/js/useQuery-CcRqxveh.js +0 -1
  433. package/frontend/dist/js/useTranslation-Cs6iTP4m.js +0 -1
  434. package/frontend/dist/js/utils-DmZD5uA3.js +0 -1
  435. package/frontend/dist/js/utils-vendor-Cbaj0BC5.js +0 -9
  436. package/frontend/dist/js/vi-D4OhoVMH.js +0 -2
  437. package/frontend/dist/js/xterm-DKl1QLiw.js +0 -7
  438. package/frontend/dist/js/zh-Bvau7hlR.js +0 -2
package/README.md CHANGED
@@ -252,35 +252,46 @@ Browser or desktop client
252
252
 
253
253
  ## Deploy on your terms
254
254
 
255
- | Path | Command or link | Best for |
256
- | ------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------- |
257
- | **npm** | `npx libre-webui` | Fast local start; Work available when Docker is installed |
258
- | **Docker + Ollama** | `docker compose up -d` | Persistent stack; Work enabled through the host Docker socket |
259
- | **External Ollama** | `docker compose -f docker-compose.external-ollama.yml up -d` | An Ollama you already run |
260
- | **NVIDIA Docker** | `docker compose -f docker-compose.gpu.yml up -d` | Local GPU inference |
261
- | **Kubernetes** | `helm install libre-webui oci://ghcr.io/libre-webui/charts/libre-webui` | Cluster deployment; the chart has no Work runtime driver |
262
- | **Desktop client** | [GitHub Releases](https://github.com/libre-webui/libre-webui/releases) | Electron UI over a separately managed backend |
263
- | **Source** | `npm install && npm run dev` | Development |
255
+ | Path | Command or link | Best for |
256
+ | ------------------- | ----------------------------------------------------------------------- | --------------------------------------------------------- |
257
+ | **npm** | `npx libre-webui` | Fast local start; Work available when Docker is installed |
258
+ | **Docker + Ollama** | `docker compose up -d` | Persistent stack; Work enabled through host Docker |
259
+ | **External Ollama** | `docker compose -f docker-compose.external-ollama.yml up -d` | An Ollama you already run |
260
+ | **NVIDIA Docker** | `docker compose -f docker-compose.gpu.yml up -d` | Local GPU inference |
261
+ | **Kubernetes** | `helm install libre-webui oci://ghcr.io/libre-webui/charts/libre-webui` | Cluster deployment; the chart has no Work runtime driver |
262
+ | **Desktop client** | [GitHub Releases](https://github.com/libre-webui/libre-webui/releases) | Electron UI over a separately managed backend |
263
+ | **Source** | `npm install && npm run dev` | Development |
264
264
 
265
265
  Docker commands assume you have cloned this repository. Production deployments
266
266
  should set stable `JWT_SECRET` and `ENCRYPTION_KEY` values, persist the data
267
267
  directory, back up the database and key together, and terminate public traffic
268
268
  with HTTPS.
269
269
 
270
- > **The Docker socket is the security decision to understand.** Every Compose
271
- > file mounts `/var/run/docker.sock` so Work can run task containers as
272
- > siblings. That socket grants root-equivalent control of the host: treat every
273
- > Libre WebUI administrator as a host administrator, and remove the mount if you
274
- > do not want Work.
270
+ Every fresh installation allows exactly one local administrator to be created.
271
+ After that bootstrap, public local and OAuth registration remains disabled
272
+ unless `ENABLE_SIGNUP=true` is set deliberately.
275
273
 
276
- On Linux the socket belongs to the `docker` group rather than root, so set the
277
- group id once in `.env`:
274
+ > **The Docker socket is the security decision to understand.** Repository
275
+ > Compose files mount it so Work functions out of the box. That grants Libre
276
+ > WebUI root-equivalent control of the host and makes every Libre WebUI
277
+ > administrator a host administrator. Remove the mount when Work is not wanted.
278
+
279
+ On Linux, set the socket group in `.env`:
278
280
 
279
281
  ```bash
280
282
  echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
281
283
  alpine stat -c '%g' /var/run/docker.sock)" >> .env
282
284
  ```
283
285
 
286
+ Ollama is reachable only on the internal Compose network. If host applications
287
+ also need it, add `-f docker-compose.ollama-host.yml`; that override binds
288
+ Ollama to `127.0.0.1` unless you deliberately choose another address.
289
+
290
+ The WebUI itself also binds to `127.0.0.1` by default. Set
291
+ `WEBUI_BIND_ADDRESS` only when a trusted LAN or a host reverse proxy must reach
292
+ the Compose port; Internet deployments should use the private deployment
293
+ profile instead of publishing it directly.
294
+
284
295
  ## Documentation
285
296
 
286
297
  Full documentation lives at
@@ -313,7 +324,9 @@ All participation follows the
313
324
  [Contributor Covenant 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)
314
325
  and the
315
326
  [Libre WebUI Community & Ethical Charter](https://github.com/libre-webui/libre-webui/blob/main/CHARTER.md).
316
- Report security issues privately to **security@kroonen.ai**.
327
+ Report security issues privately through the
328
+ [security policy](https://github.com/libre-webui/libre-webui/security/policy),
329
+ never through a public issue.
317
330
 
318
331
  ## Built from experience, for independence
319
332
 
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAiBA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0BtC;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CA0D/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAO1D;AA6hBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAa/C;AAGD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAiBA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AA0BtC;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CA0D/C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAO1D;AAuvBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAa/C;eAGc,WAAW"}
@@ -112,6 +112,9 @@ function initializeTables() {
112
112
  email TEXT UNIQUE,
113
113
  password_hash TEXT NOT NULL,
114
114
  role TEXT DEFAULT 'user',
115
+ account_status TEXT NOT NULL DEFAULT 'active' CHECK(account_status IN ('pending', 'active')),
116
+ approved_at INTEGER,
117
+ approved_by TEXT,
115
118
  avatar TEXT,
116
119
  created_at INTEGER NOT NULL,
117
120
  updated_at INTEGER NOT NULL
@@ -125,6 +128,21 @@ function initializeTables() {
125
128
  db.exec('ALTER TABLE users ADD COLUMN avatar TEXT');
126
129
  logger.debug('Migration: Added avatar column to users table');
127
130
  }
131
+ const hasAccountStatus = tableInfo.some(col => col.name === 'account_status');
132
+ if (!hasAccountStatus) {
133
+ db.exec("ALTER TABLE users ADD COLUMN account_status TEXT NOT NULL DEFAULT 'active'");
134
+ logger.debug('Migration: Added account approval status to users table');
135
+ }
136
+ const hasApprovedAt = tableInfo.some(col => col.name === 'approved_at');
137
+ if (!hasApprovedAt) {
138
+ db.exec('ALTER TABLE users ADD COLUMN approved_at INTEGER');
139
+ logger.debug('Migration: Added account approval timestamp to users table');
140
+ }
141
+ const hasApprovedBy = tableInfo.some(col => col.name === 'approved_by');
142
+ if (!hasApprovedBy) {
143
+ db.exec('ALTER TABLE users ADD COLUMN approved_by TEXT');
144
+ logger.debug('Migration: Added account approver to users table');
145
+ }
128
146
  }
129
147
  catch {
130
148
  // Column might already exist or table doesn't exist yet
@@ -141,9 +159,46 @@ function initializeTables() {
141
159
  provider_id TEXT, -- Plugin ID when provider_type is plugin
142
160
  created_at INTEGER NOT NULL,
143
161
  updated_at INTEGER NOT NULL,
162
+ archived INTEGER DEFAULT 0, -- Hidden from the sidebar until unarchived
163
+ settings TEXT, -- Encrypted JSON with per-chat overrides
164
+ folder_id TEXT, -- Optional folder this chat lives in
144
165
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
145
166
  FOREIGN KEY (persona_id) REFERENCES personas(id) ON DELETE SET NULL
146
167
  )
168
+ `);
169
+ // Folders for organizing chat sessions
170
+ db.exec(`
171
+ CREATE TABLE IF NOT EXISTS session_folders (
172
+ id TEXT PRIMARY KEY,
173
+ user_id TEXT DEFAULT 'default',
174
+ name TEXT NOT NULL,
175
+ created_at INTEGER NOT NULL,
176
+ updated_at INTEGER NOT NULL,
177
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
178
+ )
179
+ `);
180
+ // Knowledge collections group documents for reuse across chats
181
+ db.exec(`
182
+ CREATE TABLE IF NOT EXISTS knowledge_collections (
183
+ id TEXT PRIMARY KEY,
184
+ user_id TEXT DEFAULT 'default',
185
+ name TEXT NOT NULL,
186
+ created_at INTEGER NOT NULL,
187
+ updated_at INTEGER NOT NULL,
188
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
189
+ )
190
+ `);
191
+ // Standalone notes
192
+ db.exec(`
193
+ CREATE TABLE IF NOT EXISTS notes (
194
+ id TEXT PRIMARY KEY,
195
+ user_id TEXT DEFAULT 'default',
196
+ title TEXT NOT NULL,
197
+ content TEXT NOT NULL,
198
+ created_at INTEGER NOT NULL,
199
+ updated_at INTEGER NOT NULL,
200
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
201
+ )
147
202
  `);
148
203
  // Session messages table - normalized from sessions.json
149
204
  db.exec(`
@@ -159,6 +214,7 @@ function initializeTables() {
159
214
  images TEXT, -- JSON array of base64 images (for multimodal support)
160
215
  statistics TEXT, -- JSON object with generation statistics
161
216
  artifacts TEXT, -- JSON array of artifacts
217
+ rating INTEGER, -- User feedback: 1 = liked, -1 = disliked
162
218
  FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
163
219
  )
164
220
  `);
@@ -170,6 +226,9 @@ function initializeTables() {
170
226
  filename TEXT NOT NULL,
171
227
  title TEXT,
172
228
  content TEXT,
229
+ file_type TEXT,
230
+ size INTEGER,
231
+ session_id TEXT,
173
232
  metadata TEXT, -- JSON string for additional metadata
174
233
  uploaded_at INTEGER NOT NULL,
175
234
  created_at INTEGER NOT NULL,
@@ -177,6 +236,18 @@ function initializeTables() {
177
236
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
178
237
  )
179
238
  `);
239
+ const documentColumns = db.prepare('PRAGMA table_info(documents)').all();
240
+ const existingDocumentColumns = new Set(documentColumns.map(column => column.name));
241
+ for (const column of [
242
+ { name: 'file_type', type: 'TEXT' },
243
+ { name: 'size', type: 'INTEGER' },
244
+ { name: 'session_id', type: 'TEXT' },
245
+ { name: 'collection_id', type: 'TEXT' },
246
+ ]) {
247
+ if (!existingDocumentColumns.has(column.name)) {
248
+ db.exec(`ALTER TABLE documents ADD COLUMN ${column.name} ${column.type}`);
249
+ }
250
+ }
180
251
  // Document chunks table - migrated from document-chunks.json
181
252
  db.exec(`
182
253
  CREATE TABLE IF NOT EXISTS document_chunks (
@@ -212,12 +283,6 @@ function initializeTables() {
212
283
  updated_at INTEGER NOT NULL
213
284
  )
214
285
  `);
215
- // Seed default system settings
216
- const systemSettingsNow = Date.now();
217
- db.prepare(`
218
- INSERT OR IGNORE INTO system_settings (key, value, updated_at)
219
- VALUES (?, ?, ?)
220
- `).run('allow_user_model_pull', 'true', systemSettingsNow);
221
286
  // Personas table - for AI personas/characters
222
287
  db.exec(`
223
288
  CREATE TABLE IF NOT EXISTS personas (
@@ -275,6 +340,17 @@ function initializeTables() {
275
340
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
276
341
  PRIMARY KEY (user_id, plugin_id)
277
342
  )
343
+ `);
344
+ db.exec(`
345
+ CREATE TABLE IF NOT EXISTS plugin_discovered_capability_models (
346
+ user_id TEXT DEFAULT 'default',
347
+ plugin_id TEXT NOT NULL,
348
+ capability TEXT NOT NULL CHECK(capability IN ('image', 'tts', 'audio', 'video')),
349
+ models_json TEXT NOT NULL,
350
+ updated_at INTEGER NOT NULL,
351
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
352
+ PRIMARY KEY (user_id, plugin_id, capability)
353
+ )
278
354
  `);
279
355
  // Plugin activation is account-scoped. Definitions remain shared files.
280
356
  db.exec(`
@@ -296,20 +372,64 @@ function initializeTables() {
296
372
  approved_by_user_id TEXT NOT NULL,
297
373
  approved_at INTEGER NOT NULL
298
374
  )
375
+ `);
376
+ // Server-side metering for outbound plugin provider calls. This table stores
377
+ // no prompts, responses, endpoints, credentials, or provider error bodies.
378
+ // Names are snapshotted so historical usage remains understandable after a
379
+ // plugin definition or user account is changed.
380
+ db.exec(`
381
+ CREATE TABLE IF NOT EXISTS plugin_usage_events (
382
+ id TEXT PRIMARY KEY,
383
+ user_id TEXT NOT NULL,
384
+ plugin_id TEXT NOT NULL,
385
+ plugin_name TEXT NOT NULL,
386
+ capability TEXT NOT NULL CHECK(capability IN ('chat', 'embedding', 'image', 'tts', 'audio', 'video')),
387
+ model TEXT NOT NULL,
388
+ status TEXT NOT NULL CHECK(status IN ('success', 'error', 'cancelled')),
389
+ prompt_tokens INTEGER,
390
+ completion_tokens INTEGER,
391
+ total_tokens INTEGER,
392
+ input_units INTEGER NOT NULL DEFAULT 0,
393
+ output_units INTEGER NOT NULL DEFAULT 0,
394
+ unit_kind TEXT,
395
+ duration_ms INTEGER NOT NULL,
396
+ created_at INTEGER NOT NULL
397
+ )
299
398
  `);
300
399
  // Generated images table - for image gallery
301
400
  db.exec(`
302
401
  CREATE TABLE IF NOT EXISTS generated_images (
303
402
  id TEXT PRIMARY KEY,
304
403
  user_id TEXT NOT NULL DEFAULT 'default',
404
+ kind TEXT NOT NULL DEFAULT 'image' CHECK(kind IN ('image', 'video', 'audio')),
305
405
  prompt TEXT NOT NULL,
306
406
  model TEXT NOT NULL,
407
+ plugin_id TEXT,
307
408
  image_data TEXT NOT NULL,
409
+ mime_type TEXT NOT NULL DEFAULT 'image/png',
308
410
  size TEXT,
309
411
  quality TEXT,
412
+ metadata TEXT,
310
413
  created_at INTEGER NOT NULL,
311
414
  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
312
415
  )
416
+ `);
417
+ db.exec(`
418
+ CREATE TABLE IF NOT EXISTS media_generation_jobs (
419
+ id TEXT PRIMARY KEY,
420
+ user_id TEXT NOT NULL,
421
+ provider_job_id TEXT NOT NULL,
422
+ plugin_id TEXT NOT NULL,
423
+ model TEXT NOT NULL,
424
+ prompt TEXT NOT NULL,
425
+ status TEXT NOT NULL CHECK(status IN ('pending', 'in_progress', 'completed', 'failed')),
426
+ options_json TEXT,
427
+ gallery_id TEXT,
428
+ error TEXT,
429
+ created_at INTEGER NOT NULL,
430
+ updated_at INTEGER NOT NULL,
431
+ FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
432
+ )
313
433
  `);
314
434
  // Native Work tasks. Workspace files live in a task-owned Docker volume;
315
435
  // SQLite stores ownership, conversation history, and durable run state.
@@ -381,6 +501,8 @@ function initializeTables() {
381
501
  CREATE INDEX IF NOT EXISTS idx_session_messages_timestamp ON session_messages(timestamp);
382
502
  CREATE INDEX IF NOT EXISTS idx_documents_user_id ON documents(user_id);
383
503
  CREATE INDEX IF NOT EXISTS idx_documents_uploaded_at ON documents(uploaded_at);
504
+ CREATE INDEX IF NOT EXISTS idx_notes_user_updated ON notes(user_id, updated_at DESC);
505
+ CREATE INDEX IF NOT EXISTS idx_session_folders_user_id ON session_folders(user_id);
384
506
  CREATE INDEX IF NOT EXISTS idx_document_chunks_document_id ON document_chunks(document_id);
385
507
  CREATE INDEX IF NOT EXISTS idx_document_chunks_index ON document_chunks(chunk_index);
386
508
  CREATE INDEX IF NOT EXISTS idx_user_preferences_user_id ON user_preferences(user_id);
@@ -392,10 +514,17 @@ function initializeTables() {
392
514
  CREATE INDEX IF NOT EXISTS idx_plugin_variables_user_id ON plugin_variables(user_id);
393
515
  CREATE INDEX IF NOT EXISTS idx_plugin_variables_plugin_id ON plugin_variables(plugin_id);
394
516
  CREATE INDEX IF NOT EXISTS idx_plugin_discovered_models_plugin_id ON plugin_discovered_models(plugin_id);
517
+ CREATE INDEX IF NOT EXISTS idx_plugin_discovered_capability_models_plugin_id ON plugin_discovered_capability_models(plugin_id);
395
518
  CREATE INDEX IF NOT EXISTS idx_plugin_activations_plugin_id ON plugin_activations(plugin_id);
396
519
  CREATE INDEX IF NOT EXISTS idx_plugin_definition_approvals_approver ON plugin_definition_approvals(approved_by_user_id);
520
+ CREATE INDEX IF NOT EXISTS idx_plugin_usage_events_created_at ON plugin_usage_events(created_at DESC);
521
+ CREATE INDEX IF NOT EXISTS idx_plugin_usage_events_plugin_created ON plugin_usage_events(plugin_id, created_at DESC);
522
+ CREATE INDEX IF NOT EXISTS idx_plugin_usage_events_model_created ON plugin_usage_events(model, created_at DESC);
523
+ CREATE INDEX IF NOT EXISTS idx_plugin_usage_events_user_created ON plugin_usage_events(user_id, created_at DESC);
397
524
  CREATE INDEX IF NOT EXISTS idx_generated_images_user_id ON generated_images(user_id);
398
525
  CREATE INDEX IF NOT EXISTS idx_generated_images_created_at ON generated_images(created_at);
526
+ CREATE INDEX IF NOT EXISTS idx_media_generation_jobs_user_created ON media_generation_jobs(user_id, created_at DESC);
527
+ CREATE INDEX IF NOT EXISTS idx_media_generation_jobs_updated_at ON media_generation_jobs(updated_at);
399
528
  `);
400
529
  logger.debug('Database tables initialized successfully');
401
530
  // Create default user if no users exist
@@ -431,7 +560,63 @@ function createDefaultUserIfNeeded() {
431
560
  function runMigrations() {
432
561
  if (!db)
433
562
  return;
563
+ const migrationDb = db;
434
564
  try {
565
+ const usageTableSql = migrationDb
566
+ .prepare(`SELECT sql FROM sqlite_master
567
+ WHERE type = 'table' AND name = 'plugin_usage_events'`)
568
+ .get();
569
+ if (usageTableSql?.sql &&
570
+ (!usageTableSql.sql.includes("'video'") ||
571
+ !usageTableSql.sql.includes("'audio'"))) {
572
+ migrationDb.transaction(() => {
573
+ migrationDb.exec(`
574
+ CREATE TABLE plugin_usage_events_next (
575
+ id TEXT PRIMARY KEY,
576
+ user_id TEXT NOT NULL,
577
+ plugin_id TEXT NOT NULL,
578
+ plugin_name TEXT NOT NULL,
579
+ capability TEXT NOT NULL CHECK(capability IN ('chat', 'embedding', 'image', 'tts', 'audio', 'video')),
580
+ model TEXT NOT NULL,
581
+ status TEXT NOT NULL CHECK(status IN ('success', 'error', 'cancelled')),
582
+ prompt_tokens INTEGER,
583
+ completion_tokens INTEGER,
584
+ total_tokens INTEGER,
585
+ input_units INTEGER NOT NULL DEFAULT 0,
586
+ output_units INTEGER NOT NULL DEFAULT 0,
587
+ unit_kind TEXT,
588
+ duration_ms INTEGER NOT NULL,
589
+ created_at INTEGER NOT NULL
590
+ );
591
+ INSERT INTO plugin_usage_events_next SELECT * FROM plugin_usage_events;
592
+ DROP TABLE plugin_usage_events;
593
+ ALTER TABLE plugin_usage_events_next RENAME TO plugin_usage_events;
594
+ CREATE INDEX idx_plugin_usage_events_created_at ON plugin_usage_events(created_at DESC);
595
+ CREATE INDEX idx_plugin_usage_events_plugin_created ON plugin_usage_events(plugin_id, created_at DESC);
596
+ CREATE INDEX idx_plugin_usage_events_model_created ON plugin_usage_events(model, created_at DESC);
597
+ CREATE INDEX idx_plugin_usage_events_user_created ON plugin_usage_events(user_id, created_at DESC);
598
+ `);
599
+ })();
600
+ }
601
+ const generatedMediaColumns = db.prepare('PRAGMA table_info(generated_images)').all().map(column => column.name);
602
+ for (const column of [
603
+ {
604
+ name: 'kind',
605
+ definition: "TEXT NOT NULL DEFAULT 'image' CHECK(kind IN ('image', 'video', 'audio'))",
606
+ },
607
+ { name: 'plugin_id', definition: 'TEXT' },
608
+ {
609
+ name: 'mime_type',
610
+ definition: "TEXT NOT NULL DEFAULT 'image/png'",
611
+ },
612
+ { name: 'metadata', definition: 'TEXT' },
613
+ ]) {
614
+ if (!generatedMediaColumns.includes(column.name)) {
615
+ db.exec(`ALTER TABLE generated_images ADD COLUMN ${column.name} ${column.definition}`);
616
+ }
617
+ }
618
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_generated_images_user_kind_created
619
+ ON generated_images(user_id, kind, created_at DESC)`);
435
620
  const pluginCredentialColumns = db.prepare('PRAGMA table_info(plugin_credentials)').all().map(column => column.name);
436
621
  if (!pluginCredentialColumns.includes('routing_auth_fingerprint')) {
437
622
  db.exec('ALTER TABLE plugin_credentials ADD COLUMN routing_auth_fingerprint TEXT');
@@ -460,6 +645,7 @@ function runMigrations() {
460
645
  { name: 'parent_id', type: 'TEXT' }, // ID of the original message this is a variant of
461
646
  { name: 'branch_index', type: 'INTEGER DEFAULT 0' }, // Index within branch group (0 = original)
462
647
  { name: 'is_active', type: 'INTEGER DEFAULT 1' }, // Whether this is the active variant (1 = true)
648
+ { name: 'rating', type: 'INTEGER' }, // User feedback: 1 = liked, -1 = disliked
463
649
  ];
464
650
  for (const column of newSessionMessagesColumns) {
465
651
  if (!existingSessionMessagesColumns.includes(column.name)) {
@@ -477,6 +663,9 @@ function runMigrations() {
477
663
  for (const column of [
478
664
  { name: 'provider_type', type: 'TEXT' },
479
665
  { name: 'provider_id', type: 'TEXT' },
666
+ { name: 'archived', type: 'INTEGER DEFAULT 0' },
667
+ { name: 'settings', type: 'TEXT' },
668
+ { name: 'folder_id', type: 'TEXT' },
480
669
  ]) {
481
670
  if (!existingSessionsColumns.includes(column.name)) {
482
671
  logger.debug(`Adding column ${column.name} to sessions table`);
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,UAAU,CAAC;AA+DlB,QAAA,MAAM,GAAG,6CAAY,CAAC;AAghBtB,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,UAAU,CAAC;AAqElB,QAAA,MAAM,GAAG,6CAAY,CAAC;eA6iBP,GAAG"}
@@ -46,19 +46,23 @@ import agentCliRoutes from './routes/agentCli.js';
46
46
  import preferencesRoutes from './routes/preferences.js';
47
47
  import pluginRoutes from './routes/plugins.js';
48
48
  import documentRoutes from './routes/documents.js';
49
+ import notesRoutes from './routes/notes.js';
49
50
  import authRoutes from './routes/auth.js';
50
51
  import usersRoutes from './routes/users.js';
51
52
  import personaRoutes from './routes/personas.js';
52
53
  import ttsRoutes from './routes/tts.js';
53
54
  import imageGenRoutes from './routes/imageGen.js';
55
+ import mediaRoutes from './routes/media.js';
54
56
  import embeddingsRoutes from './routes/embeddings.js';
55
57
  import huggingfaceHubRoutes from './routes/huggingfaceHub.js';
56
58
  import libreClawRoutes from './routes/libreClaw.js';
57
59
  import workRoutes from './routes/work.js';
60
+ import systemDiagnosticsRoutes from './routes/systemDiagnostics.js';
58
61
  import ollamaService from './services/ollamaService.js';
59
62
  import workRuntimeService from './services/workRuntimeService.js';
60
63
  import workTaskService from './services/workTaskService.js';
61
64
  import workAgentService from './services/workAgentService.js';
65
+ import workPreviewProxyService, { WORK_PREVIEW_PROXY_PREFIX, } from './services/workPreviewProxyService.js';
62
66
  import { GitHubOAuthService } from './services/simpleGitHubOAuth.js';
63
67
  import { HuggingFaceOAuthService } from './services/simpleHuggingFaceOAuth.js';
64
68
  import { loadAppPackage, resolveFrontendDist } from './utils/packagePaths.js';
@@ -95,13 +99,24 @@ if (trustProxy) {
95
99
  app.set('trust proxy', trustProxy);
96
100
  }
97
101
  }
102
+ // Generated Work apps listen on Docker host loopback. Proxy their signed
103
+ // capability URLs before body parsing and the application's Helmet policy so
104
+ // request streams, dev-server assets, and preview-specific sandbox headers are
105
+ // preserved end to end.
106
+ app.use(WORK_PREVIEW_PROXY_PREFIX, workPreviewProxyService.handleHttp);
98
107
  const isProduction = process.env.NODE_ENV === 'production';
99
108
  const port = process.env.PORT || (isProduction ? 8080 : 3001);
109
+ const host = process.env.WEBUI_HOST?.trim() ||
110
+ (process.env.DOCKER_ENV === 'true' ? '0.0.0.0' : '127.0.0.1');
100
111
  const corsOrigins = process.env.CORS_ORIGIN?.split(',') || [
101
112
  'http://localhost:5173',
102
113
  'http://localhost:3000',
103
114
  'http://localhost:8080',
115
+ 'http://127.0.0.1:5173',
116
+ 'http://127.0.0.1:3000',
117
+ 'http://127.0.0.1:8080',
104
118
  `http://localhost:${port}`, // Allow same-origin when serving frontend
119
+ `http://127.0.0.1:${port}`,
105
120
  ];
106
121
  // Multi-user safe CORS configuration
107
122
  const corsConfig = {
@@ -135,8 +150,8 @@ const corsConfig = {
135
150
  };
136
151
  // Security middleware
137
152
  app.use(helmet({
138
- // Work previews are generated by arbitrary local dev servers, which do
139
- // not normally emit CORP. Their iframe is still constrained to loopback.
153
+ // Work previews have their own sandboxed proxy response policy and do not
154
+ // normally emit CORP.
140
155
  crossOriginEmbedderPolicy: false,
141
156
  // Content Security Policy - Docker-aware configuration
142
157
  contentSecurityPolicy: {
@@ -178,16 +193,11 @@ app.use(helmet({
178
193
  fontSrc: ["'self'", 'data:', 'https://fonts.gstatic.com'],
179
194
  mediaSrc: ["'self'", 'data:', 'blob:'],
180
195
  objectSrc: ["'none'"],
181
- frameSrc: [
182
- "'self'",
183
- 'https://challenges.cloudflare.com',
184
- 'http://127.0.0.1:*',
185
- 'http://localhost:*',
186
- ],
196
+ frameSrc: ["'self'", 'https://challenges.cloudflare.com'],
187
197
  frameAncestors: ["'self'"],
188
198
  formAction: ["'self'"],
189
- // npx desktop mode is production but previews are loopback HTTP.
190
- // Upgrading them to HTTPS would make every generated preview fail.
199
+ // npx desktop mode serves the application and signed preview proxy over
200
+ // plain localhost HTTP.
191
201
  upgradeInsecureRequests: null,
192
202
  baseUri: ["'self'"],
193
203
  manifestSrc: ["'self'"],
@@ -400,12 +410,15 @@ app.use('/api/preferences', preferencesRateLimiter, optionalAuth, preferencesRou
400
410
  app.use('/api/plugins', pluginAuthBurstRateLimiter, authenticate, pluginRouteRateLimiter, pluginRoutes);
401
411
  app.use('/api/embeddings', embeddingsRoutes);
402
412
  app.use('/api/documents', documentsRateLimiter, documentRoutes);
413
+ app.use('/api/notes', documentsRateLimiter, notesRoutes);
403
414
  app.use('/api/personas', personasRateLimiter, optionalAuth, personaRoutes);
404
415
  app.use('/api/tts', ttsRateLimiter, optionalAuth, ttsRoutes);
405
416
  app.use('/api/image-gen', imageGenRateLimiter, optionalAuth, imageGenRoutes);
417
+ app.use('/api/media', mediaRoutes);
406
418
  app.use('/api/huggingface-hub', huggingfaceHubRoutes);
407
419
  app.use('/api/libre-claw', libreClawRateLimiter, libreClawRoutes);
408
420
  app.use('/api/work', workRateLimiter, workRoutes);
421
+ app.use('/api/system', systemDiagnosticsRoutes);
409
422
  // Serve frontend static files in production (for npx libre-webui)
410
423
  if (process.env.NODE_ENV === 'production' ||
411
424
  process.env.SERVE_FRONTEND === 'true') {
@@ -447,19 +460,35 @@ app.use(errorHandler);
447
460
  const server = createServer(app);
448
461
  registerWebSocketServer(server);
449
462
  // Start server
450
- server.listen({ port, host: '0.0.0.0' }, () => {
451
- const url = `http://localhost:${port}`;
463
+ server.listen({ port, host }, () => {
464
+ const displayHost = ['0.0.0.0', '::'].includes(host)
465
+ ? 'localhost'
466
+ : host.includes(':')
467
+ ? `[${host}]`
468
+ : host;
469
+ const url = `http://${displayHost}:${port}`;
452
470
  logger.info(`Libre WebUI v${pkg.version}`);
453
471
  logger.info(url);
454
472
  // Open browser in production mode
455
- if (process.env.SERVE_FRONTEND === 'true') {
456
- import('child_process').then(({ exec }) => {
457
- const cmd = process.platform === 'darwin'
458
- ? 'open'
473
+ if (process.env.SERVE_FRONTEND === 'true' &&
474
+ process.env.OPEN_BROWSER !== 'false') {
475
+ import('child_process').then(({ spawn }) => {
476
+ const opener = process.platform === 'darwin'
477
+ ? { command: 'open', args: [url] }
459
478
  : process.platform === 'win32'
460
- ? 'start'
461
- : 'xdg-open';
462
- exec(`${cmd} ${url}`);
479
+ ? {
480
+ command: 'rundll32',
481
+ args: ['url.dll,FileProtocolHandler', url],
482
+ }
483
+ : { command: 'xdg-open', args: [url] };
484
+ const browser = spawn(opener.command, opener.args, {
485
+ detached: true,
486
+ stdio: 'ignore',
487
+ });
488
+ browser.on('error', error => {
489
+ logger.debug(`Unable to open the browser automatically: ${error}`);
490
+ });
491
+ browser.unref();
463
492
  });
464
493
  }
465
494
  // Check OAuth providers configuration on startup