libre-webui 0.8.6 โ†’ 0.11.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 +64 -46
  2. package/backend/dist/db.d.ts.map +1 -1
  3. package/backend/dist/db.js +21 -19
  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 +31 -944
  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 +7 -20
  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/middleware/index.js +4 -2
  13. package/backend/dist/middleware/index.js.map +1 -1
  14. package/backend/dist/models/personaModel.d.ts.map +1 -1
  15. package/backend/dist/models/personaModel.js +11 -9
  16. package/backend/dist/models/personaModel.js.map +1 -1
  17. package/backend/dist/routes/auth.d.ts.map +1 -1
  18. package/backend/dist/routes/auth.js +36 -14
  19. package/backend/dist/routes/auth.js.map +1 -1
  20. package/backend/dist/routes/chat.d.ts.map +1 -1
  21. package/backend/dist/routes/chat.js +61 -242
  22. package/backend/dist/routes/chat.js.map +1 -1
  23. package/backend/dist/routes/documents.d.ts.map +1 -1
  24. package/backend/dist/routes/documents.js +10 -8
  25. package/backend/dist/routes/documents.js.map +1 -1
  26. package/backend/dist/routes/embeddings.d.ts +3 -0
  27. package/backend/dist/routes/embeddings.d.ts.map +1 -0
  28. package/backend/dist/routes/embeddings.js +52 -0
  29. package/backend/dist/routes/embeddings.js.map +1 -0
  30. package/backend/dist/routes/imageGen.d.ts.map +1 -1
  31. package/backend/dist/routes/imageGen.js +9 -7
  32. package/backend/dist/routes/imageGen.js.map +1 -1
  33. package/backend/dist/routes/ollama.d.ts.map +1 -1
  34. package/backend/dist/routes/ollama.js +22 -239
  35. package/backend/dist/routes/ollama.js.map +1 -1
  36. package/backend/dist/routes/personas.d.ts.map +1 -1
  37. package/backend/dist/routes/personas.js +3 -1
  38. package/backend/dist/routes/personas.js.map +1 -1
  39. package/backend/dist/routes/plugins.d.ts.map +1 -1
  40. package/backend/dist/routes/plugins.js +7 -105
  41. package/backend/dist/routes/plugins.js.map +1 -1
  42. package/backend/dist/routes/tts.d.ts.map +1 -1
  43. package/backend/dist/routes/tts.js +7 -5
  44. package/backend/dist/routes/tts.js.map +1 -1
  45. package/backend/dist/routes/users.d.ts.map +1 -1
  46. package/backend/dist/routes/users.js +7 -5
  47. package/backend/dist/routes/users.js.map +1 -1
  48. package/backend/dist/services/assistantCompletionService.d.ts +26 -0
  49. package/backend/dist/services/assistantCompletionService.d.ts.map +1 -0
  50. package/backend/dist/services/assistantCompletionService.js +53 -0
  51. package/backend/dist/services/assistantCompletionService.js.map +1 -0
  52. package/backend/dist/services/authService.d.ts +2 -0
  53. package/backend/dist/services/authService.d.ts.map +1 -1
  54. package/backend/dist/services/authService.js +15 -7
  55. package/backend/dist/services/authService.js.map +1 -1
  56. package/backend/dist/services/chatGenerationService.d.ts +32 -0
  57. package/backend/dist/services/chatGenerationService.d.ts.map +1 -0
  58. package/backend/dist/services/chatGenerationService.js +118 -0
  59. package/backend/dist/services/chatGenerationService.js.map +1 -0
  60. package/backend/dist/services/chatRequestService.d.ts +55 -0
  61. package/backend/dist/services/chatRequestService.d.ts.map +1 -0
  62. package/backend/dist/services/chatRequestService.js +103 -0
  63. package/backend/dist/services/chatRequestService.js.map +1 -0
  64. package/backend/dist/services/chatService.d.ts +0 -1
  65. package/backend/dist/services/chatService.d.ts.map +1 -1
  66. package/backend/dist/services/chatService.js +17 -113
  67. package/backend/dist/services/chatService.js.map +1 -1
  68. package/backend/dist/services/documentService.d.ts.map +1 -1
  69. package/backend/dist/services/documentService.js +23 -21
  70. package/backend/dist/services/documentService.js.map +1 -1
  71. package/backend/dist/services/embeddingService.d.ts +9 -0
  72. package/backend/dist/services/embeddingService.d.ts.map +1 -0
  73. package/backend/dist/services/embeddingService.js +155 -0
  74. package/backend/dist/services/embeddingService.js.map +1 -0
  75. package/backend/dist/services/encryptionService.d.ts.map +1 -1
  76. package/backend/dist/services/encryptionService.js +26 -24
  77. package/backend/dist/services/encryptionService.js.map +1 -1
  78. package/backend/dist/services/galleryService.d.ts.map +1 -1
  79. package/backend/dist/services/galleryService.js +8 -6
  80. package/backend/dist/services/galleryService.js.map +1 -1
  81. package/backend/dist/services/memoryService.d.ts +2 -13
  82. package/backend/dist/services/memoryService.d.ts.map +1 -1
  83. package/backend/dist/services/memoryService.js +45 -211
  84. package/backend/dist/services/memoryService.js.map +1 -1
  85. package/backend/dist/services/memoryUtils.d.ts +29 -0
  86. package/backend/dist/services/memoryUtils.d.ts.map +1 -0
  87. package/backend/dist/services/memoryUtils.js +165 -0
  88. package/backend/dist/services/memoryUtils.js.map +1 -0
  89. package/backend/dist/services/mutationEngineService.d.ts.map +1 -1
  90. package/backend/dist/services/mutationEngineService.js +5 -3
  91. package/backend/dist/services/mutationEngineService.js.map +1 -1
  92. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  93. package/backend/dist/services/ollamaService.js +67 -34
  94. package/backend/dist/services/ollamaService.js.map +1 -1
  95. package/backend/dist/services/personaService.d.ts.map +1 -1
  96. package/backend/dist/services/personaService.js +6 -2
  97. package/backend/dist/services/personaService.js.map +1 -1
  98. package/backend/dist/services/pluginCapabilityRegistryService.d.ts +11 -0
  99. package/backend/dist/services/pluginCapabilityRegistryService.d.ts.map +1 -0
  100. package/backend/dist/services/pluginCapabilityRegistryService.js +70 -0
  101. package/backend/dist/services/pluginCapabilityRegistryService.js.map +1 -0
  102. package/backend/dist/services/pluginCredentialsService.d.ts.map +1 -1
  103. package/backend/dist/services/pluginCredentialsService.js +13 -11
  104. package/backend/dist/services/pluginCredentialsService.js.map +1 -1
  105. package/backend/dist/services/pluginEmbeddingService.d.ts +26 -0
  106. package/backend/dist/services/pluginEmbeddingService.d.ts.map +1 -0
  107. package/backend/dist/services/pluginEmbeddingService.js +159 -0
  108. package/backend/dist/services/pluginEmbeddingService.js.map +1 -0
  109. package/backend/dist/services/pluginImageGenerationService.d.ts +29 -0
  110. package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -0
  111. package/backend/dist/services/pluginImageGenerationService.js +402 -0
  112. package/backend/dist/services/pluginImageGenerationService.js.map +1 -0
  113. package/backend/dist/services/pluginService.d.ts +21 -17
  114. package/backend/dist/services/pluginService.d.ts.map +1 -1
  115. package/backend/dist/services/pluginService.js +135 -1356
  116. package/backend/dist/services/pluginService.js.map +1 -1
  117. package/backend/dist/services/pluginTTSService.d.ts +28 -0
  118. package/backend/dist/services/pluginTTSService.d.ts.map +1 -0
  119. package/backend/dist/services/pluginTTSService.js +286 -0
  120. package/backend/dist/services/pluginTTSService.js.map +1 -0
  121. package/backend/dist/services/pluginVariablesService.d.ts.map +1 -1
  122. package/backend/dist/services/pluginVariablesService.js +7 -5
  123. package/backend/dist/services/pluginVariablesService.js.map +1 -1
  124. package/backend/dist/services/preferencesService.d.ts +1 -0
  125. package/backend/dist/services/preferencesService.d.ts.map +1 -1
  126. package/backend/dist/services/preferencesService.js +21 -7
  127. package/backend/dist/services/preferencesService.js.map +1 -1
  128. package/backend/dist/services/simpleGitHubOAuth.d.ts.map +1 -1
  129. package/backend/dist/services/simpleGitHubOAuth.js +10 -8
  130. package/backend/dist/services/simpleGitHubOAuth.js.map +1 -1
  131. package/backend/dist/services/simpleHuggingFaceOAuth.d.ts.map +1 -1
  132. package/backend/dist/services/simpleHuggingFaceOAuth.js +11 -9
  133. package/backend/dist/services/simpleHuggingFaceOAuth.js.map +1 -1
  134. package/backend/dist/services/systemSettingsService.d.ts.map +1 -1
  135. package/backend/dist/services/systemSettingsService.js +4 -2
  136. package/backend/dist/services/systemSettingsService.js.map +1 -1
  137. package/backend/dist/services/titleGenerationService.d.ts +55 -0
  138. package/backend/dist/services/titleGenerationService.d.ts.map +1 -0
  139. package/backend/dist/services/titleGenerationService.js +121 -0
  140. package/backend/dist/services/titleGenerationService.js.map +1 -0
  141. package/backend/dist/services/turnstileService.d.ts +13 -0
  142. package/backend/dist/services/turnstileService.d.ts.map +1 -0
  143. package/backend/dist/services/turnstileService.js +79 -0
  144. package/backend/dist/services/turnstileService.js.map +1 -0
  145. package/backend/dist/storage.d.ts +2 -22
  146. package/backend/dist/storage.d.ts.map +1 -1
  147. package/backend/dist/storage.js +22 -170
  148. package/backend/dist/storage.js.map +1 -1
  149. package/backend/dist/storageMappers.d.ts +82 -0
  150. package/backend/dist/storageMappers.d.ts.map +1 -0
  151. package/backend/dist/storageMappers.js +85 -0
  152. package/backend/dist/storageMappers.js.map +1 -0
  153. package/backend/dist/test-encryption.js +20 -18
  154. package/backend/dist/test-encryption.js.map +1 -1
  155. package/backend/dist/types/index.d.ts +6 -0
  156. package/backend/dist/types/index.d.ts.map +1 -1
  157. package/backend/dist/types/index.js.map +1 -1
  158. package/backend/dist/utils/assistantBranching.d.ts +8 -0
  159. package/backend/dist/utils/assistantBranching.d.ts.map +1 -0
  160. package/backend/dist/utils/assistantBranching.js +30 -0
  161. package/backend/dist/utils/assistantBranching.js.map +1 -0
  162. package/backend/dist/utils/chatContext.d.ts +17 -0
  163. package/backend/dist/utils/chatContext.d.ts.map +1 -0
  164. package/backend/dist/utils/chatContext.js +82 -0
  165. package/backend/dist/utils/chatContext.js.map +1 -0
  166. package/backend/dist/utils/chatDocumentContext.d.ts +7 -0
  167. package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -0
  168. package/backend/dist/utils/chatDocumentContext.js +51 -0
  169. package/backend/dist/utils/chatDocumentContext.js.map +1 -0
  170. package/backend/dist/utils/logger.d.ts +12 -0
  171. package/backend/dist/utils/logger.d.ts.map +1 -0
  172. package/backend/dist/utils/logger.js +82 -0
  173. package/backend/dist/utils/logger.js.map +1 -0
  174. package/backend/dist/utils/ollamaLibrary.d.ts +17 -0
  175. package/backend/dist/utils/ollamaLibrary.d.ts.map +1 -0
  176. package/backend/dist/utils/ollamaLibrary.js +253 -0
  177. package/backend/dist/utils/ollamaLibrary.js.map +1 -0
  178. package/backend/dist/utils/ollamaStreaming.d.ts +19 -0
  179. package/backend/dist/utils/ollamaStreaming.d.ts.map +1 -0
  180. package/backend/dist/utils/ollamaStreaming.js +67 -0
  181. package/backend/dist/utils/ollamaStreaming.js.map +1 -0
  182. package/backend/dist/utils/packagePaths.d.ts +10 -0
  183. package/backend/dist/utils/packagePaths.d.ts.map +1 -0
  184. package/backend/dist/utils/packagePaths.js +81 -0
  185. package/backend/dist/utils/packagePaths.js.map +1 -0
  186. package/backend/dist/utils/pluginChatAdapter.d.ts +32 -0
  187. package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -0
  188. package/backend/dist/utils/pluginChatAdapter.js +308 -0
  189. package/backend/dist/utils/pluginChatAdapter.js.map +1 -0
  190. package/backend/dist/utils/pluginChatContext.d.ts +23 -0
  191. package/backend/dist/utils/pluginChatContext.d.ts.map +1 -0
  192. package/backend/dist/utils/pluginChatContext.js +77 -0
  193. package/backend/dist/utils/pluginChatContext.js.map +1 -0
  194. package/backend/dist/utils/pluginResponse.d.ts +6 -0
  195. package/backend/dist/utils/pluginResponse.d.ts.map +1 -0
  196. package/backend/dist/utils/pluginResponse.js +70 -0
  197. package/backend/dist/utils/pluginResponse.js.map +1 -0
  198. package/backend/dist/utils/pluginStreamAdapter.d.ts +16 -0
  199. package/backend/dist/utils/pluginStreamAdapter.d.ts.map +1 -0
  200. package/backend/dist/utils/pluginStreamAdapter.js +141 -0
  201. package/backend/dist/utils/pluginStreamAdapter.js.map +1 -0
  202. package/backend/dist/utils/pluginStreaming.d.ts +24 -0
  203. package/backend/dist/utils/pluginStreaming.d.ts.map +1 -0
  204. package/backend/dist/utils/pluginStreaming.js +106 -0
  205. package/backend/dist/utils/pluginStreaming.js.map +1 -0
  206. package/backend/dist/utils/pluginUpload.d.ts +8 -0
  207. package/backend/dist/utils/pluginUpload.d.ts.map +1 -0
  208. package/backend/dist/utils/pluginUpload.js +51 -0
  209. package/backend/dist/utils/pluginUpload.js.map +1 -0
  210. package/backend/dist/utils/pluginValidation.d.ts +10 -0
  211. package/backend/dist/utils/pluginValidation.d.ts.map +1 -0
  212. package/backend/dist/utils/pluginValidation.js +94 -0
  213. package/backend/dist/utils/pluginValidation.js.map +1 -0
  214. package/backend/dist/utils/pluginVariableValidation.d.ts +10 -0
  215. package/backend/dist/utils/pluginVariableValidation.d.ts.map +1 -0
  216. package/backend/dist/utils/pluginVariableValidation.js +80 -0
  217. package/backend/dist/utils/pluginVariableValidation.js.map +1 -0
  218. package/backend/dist/utils/websocketMessages.d.ts +26 -0
  219. package/backend/dist/utils/websocketMessages.d.ts.map +1 -0
  220. package/backend/dist/utils/websocketMessages.js +74 -0
  221. package/backend/dist/utils/websocketMessages.js.map +1 -0
  222. package/backend/dist/websocketServer.d.ts +3 -0
  223. package/backend/dist/websocketServer.d.ts.map +1 -0
  224. package/backend/dist/websocketServer.js +332 -0
  225. package/backend/dist/websocketServer.js.map +1 -0
  226. package/backend/package.json +55 -0
  227. package/frontend/dist/assets/index-BxHDVIti.css +1 -0
  228. package/frontend/dist/assets/index-CDA2f43l.js +5 -0
  229. package/frontend/dist/assets/markdown-math-CYlHEDRF.css +1 -0
  230. package/frontend/dist/index.html +12 -15
  231. package/frontend/dist/js/ArtifactContainer-CA523BOS.js +1 -0
  232. package/frontend/dist/js/ArtifactDemoPage-C0p2-ccP.js +200 -0
  233. package/frontend/dist/js/ArtifactSlideOutPanel-BBYuYyr_.js +1 -0
  234. package/frontend/dist/js/Button-BmZQkAPD.js +1 -0
  235. package/frontend/dist/js/ChatPage-QSOhIynr.js +16 -0
  236. package/frontend/dist/js/FirstTimeSetup-pi-S4VU-.js +1 -0
  237. package/frontend/dist/js/GalleryPage-BPXB-D4f.js +1 -0
  238. package/frontend/dist/js/ModelManagerModals-D3SZV7CU.js +1 -0
  239. package/frontend/dist/js/ModelsPage-Fmqc1Zxb.js +2 -0
  240. package/frontend/dist/js/OptimizedSyntaxHighlighter-DlI4omE2.js +1 -0
  241. package/frontend/dist/js/PersonasPage-BuLOCG1Y.js +13 -0
  242. package/frontend/dist/js/RichMessageContent-Darvuw8F.js +3 -0
  243. package/frontend/dist/js/SettingsModal-CQhAeaia.js +1 -0
  244. package/frontend/dist/js/UserManagementPage-yX9vOase.js +1 -0
  245. package/frontend/dist/js/api-d05r9G59.js +15 -0
  246. package/frontend/dist/js/ar-BIL8U_dv.js +2 -0
  247. package/frontend/dist/js/artifactHtml-CRdkOCnz.js +27 -0
  248. package/frontend/dist/js/bn-BWQoWPn6.js +2 -0
  249. package/frontend/dist/js/cs-DOD1vscE.js +2 -0
  250. package/frontend/dist/js/da-DYPzSzX4.js +2 -0
  251. package/frontend/dist/js/de-CHd4b2Xf.js +2 -0
  252. package/frontend/dist/js/demoMode-BhEpMVh5.js +1 -0
  253. package/frontend/dist/js/es-BmDO6uNe.js +2 -0
  254. package/frontend/dist/js/fr-DW24sUV7.js +2 -0
  255. package/frontend/dist/js/hi-BRDq_y1B.js +2 -0
  256. package/frontend/dist/js/id-I_F2nstV.js +2 -0
  257. package/frontend/dist/js/is-Boj7-J12.js +2 -0
  258. package/frontend/dist/js/it-CNeHl9Fh.js +2 -0
  259. package/frontend/dist/js/ja-DrVG6G8s.js +2 -0
  260. package/frontend/dist/js/ko-BtKRwlHW.js +2 -0
  261. package/frontend/dist/js/logger-1THq8-96.js +1 -0
  262. package/frontend/dist/js/markdown-core-CEpaJrKd.js +16 -0
  263. package/frontend/dist/js/markdown-math-DAmpvM9y.js +261 -0
  264. package/frontend/dist/js/ms-Dp9MigoU.js +2 -0
  265. package/frontend/dist/js/nl-Bk9pGoCF.js +2 -0
  266. package/frontend/dist/js/pl-seE8_lLS.js +2 -0
  267. package/frontend/dist/js/pt-BAeBtldI.js +2 -0
  268. package/frontend/dist/js/{react-vendor-BUzyfgnZ.js โ†’ react-vendor-DtQrJICq.js} +4 -4
  269. package/frontend/dist/js/rolldown-runtime-QTnfLwEv.js +1 -0
  270. package/frontend/dist/js/ru-CkCpWFNb.js +2 -0
  271. package/frontend/dist/js/sv-BM7nqxmA.js +2 -0
  272. package/frontend/dist/js/syntax-highlight-B758xPeo.js +8 -0
  273. package/frontend/dist/js/th-vDIZbpa4.js +2 -0
  274. package/frontend/dist/js/tr-G2-XodhW.js +2 -0
  275. package/frontend/dist/js/ui-vendor-MCs1MDmN.js +177 -0
  276. package/frontend/dist/js/uk-DfVfZcBQ.js +2 -0
  277. package/frontend/dist/js/useBaseQuery-CrdrLcmR.js +1 -0
  278. package/frontend/dist/js/useQuery-DaEnYfWR.js +1 -0
  279. package/frontend/dist/js/utils-es0n-47H.js +1 -0
  280. package/frontend/dist/js/utils-vendor-B2ZBL57Y.js +9 -0
  281. package/frontend/dist/js/vi-Yp9yjb06.js +2 -0
  282. package/frontend/dist/js/zh-DtRb97we.js +2 -0
  283. package/package.json +16 -10
  284. package/plugins/llama-cpp.json +93 -0
  285. package/plugins/openclaw-agent.json +1 -1
  286. package/backend/dist/services/openclawSessionService.d.ts +0 -63
  287. package/backend/dist/services/openclawSessionService.d.ts.map +0 -1
  288. package/backend/dist/services/openclawSessionService.js +0 -307
  289. package/backend/dist/services/openclawSessionService.js.map +0 -1
  290. package/frontend/dist/assets/index-B1qNw5pA.js +0 -52
  291. package/frontend/dist/assets/index-DnG6512Q.css +0 -1
  292. package/frontend/dist/assets/ui-CsNe6lFV.css +0 -1
  293. package/frontend/dist/js/ArtifactContainer-Com7P5vK.js +0 -24
  294. package/frontend/dist/js/ArtifactDemoPage-Xd-Ragpf.js +0 -98
  295. package/frontend/dist/js/Button-D62PCbMW.js +0 -1
  296. package/frontend/dist/js/ChatPage-01JxVHRP.js +0 -15
  297. package/frontend/dist/js/GalleryPage-8nHGqKEu.js +0 -1
  298. package/frontend/dist/js/ModelsPage-C0MLVfwA.js +0 -1
  299. package/frontend/dist/js/OptimizedSyntaxHighlighter-DjnSqskO.js +0 -1
  300. package/frontend/dist/js/PersonasPage-D9YKnYz6.js +0 -13
  301. package/frontend/dist/js/UserManagementPage-b6NZdPTD.js +0 -1
  302. package/frontend/dist/js/api-B0pf9vdR.js +0 -1
  303. package/frontend/dist/js/api-BrzQvj_g.js +0 -3
  304. package/frontend/dist/js/appStore-k_e3JAM3.js +0 -2
  305. package/frontend/dist/js/authStore-BkobbhZS.js +0 -1
  306. package/frontend/dist/js/authStore-ge66S03D.js +0 -2
  307. package/frontend/dist/js/axios-CYrHjdt1.js +0 -1
  308. package/frontend/dist/js/demoMode-qyEGd_UM.js +0 -1
  309. package/frontend/dist/js/markdown-vendor-4lCPqxk5.js +0 -22
  310. package/frontend/dist/js/rolldown-runtime-DWy-cpC1.js +0 -1
  311. package/frontend/dist/js/ui-DuH1cD2f.js +0 -267
  312. package/frontend/dist/js/ui-vendor-BFOABH-A.js +0 -177
  313. package/frontend/dist/js/userService-BndgbS1C.js +0 -1
  314. package/frontend/dist/js/utils-vendor-MBozwMfr.js +0 -6
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-DWy-cpC1.js";import{m as t,p as n}from"./markdown-vendor-4lCPqxk5.js";import{n as r,t as i}from"./Button-D62PCbMW.js";import{A as a,Rt as o,_ as s,b as c,d as l,o as u}from"./ui-vendor-BFOABH-A.js";import{a as d,i as f,n as p,o as m,r as h,t as g,u as _}from"./ui-DuH1cD2f.js";import{f as v}from"./api-BrzQvj_g.js";import{t as y}from"./authStore-ge66S03D.js";var b=e(t(),1),x=n(),S=()=>{let{t:e}=r(),[t,n]=(0,b.useState)([]),[S,C]=(0,b.useState)(!0),[w,T]=(0,b.useState)(!1),[E,D]=(0,b.useState)(null),[O,k]=(0,b.useState)({username:``,email:``,password:``,role:`user`}),{user:A}=y();(0,b.useEffect)(()=>{j()},[]);let j=async()=>{try{C(!0);let e=await v.getUsers();e.success&&e.data&&n(e.data)}catch(t){console.error(`Error loading users:`,t),o.error(e(`errors.generic`))}finally{C(!1)}},M=async r=>{r.preventDefault();try{let r=await v.createUser(O);r.success&&r.data&&(n([...t,r.data]),k({username:``,email:``,password:``,role:`user`}),T(!1),o.success(e(`userManager.form.createSuccess`)))}catch(t){console.error(`Error creating user:`,t);let n=e(`userManager.form.createFailed`);t instanceof Error&&`response`in t&&(n=t.response?.data?.message||e(`userManager.form.createFailed`)),o.error(n)}},N=async r=>{if(r.preventDefault(),E)try{let r={username:O.username,email:O.email,role:O.role};O.password&&O.password.trim()!==``&&(r.password=O.password);let i=await v.updateUser(E.id,r);i.success&&i.data&&(n(t.map(e=>e.id===E.id?i.data:e)),D(null),k({username:``,email:``,password:``,role:`user`}),o.success(e(`userManager.form.updateSuccess`)))}catch(t){console.error(`Error updating user:`,t);let n=e(`userManager.form.updateFailed`);t instanceof Error&&`response`in t&&(n=t.response?.data?.message||e(`userManager.form.updateFailed`)),o.error(n)}},P=async(r,i)=>{if(confirm(e(`userManager.deleteConfirm`,{name:i})))try{(await v.deleteUser(r)).success&&(n(t.filter(e=>e.id!==r)),o.success(e(`userManager.deleteSuccess`)))}catch(t){console.error(`Error deleting user:`,t);let n=e(`userManager.deleteFailed`);t instanceof Error&&`response`in t&&(n=t.response?.data?.message||e(`userManager.deleteFailed`)),o.error(n)}},F=e=>{D(e),k({username:e.username,email:e.email||``,password:``,role:e.role})};return S?(0,x.jsx)(`div`,{className:`flex items-center justify-center p-8`,children:(0,x.jsx)(`div`,{className:`w-8 h-8 border-4 border-gray-200 dark:border-gray-600 border-t-primary-500 rounded-full animate-spin`})}):(0,x.jsxs)(`div`,{className:`space-y-6`,children:[(0,x.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,x.jsx)(`div`,{}),(0,x.jsxs)(i,{onClick:()=>T(!w),className:`flex items-center space-x-2 bg-primary-600 hover:bg-primary-700 dark:bg-primary-500 dark:hover:bg-primary-600`,children:[(0,x.jsx)(a,{size:16}),(0,x.jsx)(`span`,{children:e(`userManager.createUser`)})]})]}),w&&(0,x.jsxs)(g,{className:`bg-white dark:bg-dark-25 border border-gray-200 dark:border-dark-200 shadow-lg`,children:[(0,x.jsxs)(f,{children:[(0,x.jsx)(d,{className:`text-gray-900 dark:text-gray-100`,children:e(`userManager.form.title.create`)}),(0,x.jsx)(h,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.subtitle`)})]}),(0,x.jsx)(p,{children:(0,x.jsxs)(`form`,{onSubmit:M,className:`space-y-4`,children:[(0,x.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`username`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.username`)}),(0,x.jsx)(_,{id:`username`,value:O.username,onChange:e=>k({...O,username:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`email`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.email`)}),(0,x.jsx)(_,{id:`email`,type:`email`,value:O.email,onChange:e=>k({...O,email:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]})]}),(0,x.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`password`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.password`)}),(0,x.jsx)(_,{id:`password`,type:`password`,value:O.password,onChange:e=>k({...O,password:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`role`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.role`)}),(0,x.jsxs)(`select`,{id:`role`,value:O.role,onChange:e=>k({...O,role:e.target.value}),className:`w-full px-3 py-2 border border-gray-300 dark:border-dark-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 bg-white dark:bg-dark-100 text-gray-900 dark:text-gray-100 transition-colors duration-200`,children:[(0,x.jsx)(`option`,{value:`user`,children:e(`userManager.roles.user`)}),(0,x.jsx)(`option`,{value:`admin`,children:e(`userManager.roles.admin`)})]})]})]}),(0,x.jsxs)(`div`,{className:`flex space-x-2`,children:[(0,x.jsx)(i,{type:`submit`,children:e(`userManager.form.createButton`)}),(0,x.jsx)(i,{type:`button`,variant:`outline`,onClick:()=>{k({username:``,email:``,password:``,role:`user`}),T(!1)},children:e(`common.cancel`)})]})]})})]}),E&&(0,x.jsxs)(g,{className:`bg-white dark:bg-dark-25 border border-gray-200 dark:border-dark-200 shadow-lg`,children:[(0,x.jsxs)(f,{children:[(0,x.jsxs)(d,{className:`text-gray-900 dark:text-gray-100`,children:[e(`userManager.form.title.edit`),`: `,E.username]}),(0,x.jsx)(h,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.subtitle`)})]}),(0,x.jsx)(p,{children:(0,x.jsxs)(`form`,{onSubmit:N,className:`space-y-4`,children:[(0,x.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`edit-username`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.username`)}),(0,x.jsx)(_,{id:`edit-username`,value:O.username,onChange:e=>k({...O,username:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`edit-email`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.email`)}),(0,x.jsx)(_,{id:`edit-email`,type:`email`,value:O.email,onChange:e=>k({...O,email:e.target.value}),required:!0,className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]})]}),(0,x.jsxs)(`div`,{className:`grid grid-cols-2 gap-4`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(m,{htmlFor:`edit-password`,className:`text-gray-700 dark:text-gray-300`,children:[e(`userManager.form.password`),` (`,e(`common.optional`),`)`]}),(0,x.jsx)(_,{id:`edit-password`,type:`password`,value:O.password,onChange:e=>k({...O,password:e.target.value}),placeholder:e(`userManager.form.passwordHint`),className:`bg-white dark:bg-dark-100 border-gray-300 dark:border-dark-300 text-gray-900 dark:text-gray-100`})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(m,{htmlFor:`edit-role`,className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.form.role`)}),(0,x.jsxs)(`select`,{id:`edit-role`,value:O.role,onChange:e=>k({...O,role:e.target.value}),disabled:E?.id===A?.id&&A?.role===`admin`,className:`w-full px-3 py-2 border border-gray-300 dark:border-dark-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 bg-white dark:bg-dark-100 text-gray-900 dark:text-gray-100 transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed`,children:[(0,x.jsx)(`option`,{value:`user`,children:e(`userManager.roles.user`)}),(0,x.jsx)(`option`,{value:`admin`,children:e(`userManager.roles.admin`)})]}),E?.id===A?.id&&A?.role===`admin`&&(0,x.jsx)(`p`,{className:`text-xs text-amber-600 dark:text-amber-400 mt-1`,children:e(`userManager.cannotDeleteSelf`)})]})]}),(0,x.jsxs)(`div`,{className:`flex space-x-2`,children:[(0,x.jsx)(i,{type:`submit`,children:e(`userManager.form.updateButton`)}),(0,x.jsx)(i,{type:`button`,variant:`outline`,onClick:()=>{D(null),k({username:``,email:``,password:``,role:`user`})},children:e(`common.cancel`)})]})]})})]}),(0,x.jsxs)(g,{className:`bg-white dark:bg-dark-25 border border-gray-200 dark:border-dark-200 shadow-lg`,children:[(0,x.jsxs)(f,{children:[(0,x.jsxs)(d,{className:`text-gray-900 dark:text-gray-100`,children:[e(`userManager.title`),` (`,t.length,`)`]}),(0,x.jsx)(h,{className:`text-gray-600 dark:text-gray-400`,children:e(`userManager.subtitle`)})]}),(0,x.jsx)(p,{children:(0,x.jsx)(`div`,{className:`space-y-3`,children:t.map(t=>(0,x.jsxs)(`div`,{className:`flex items-center justify-between p-4 bg-gray-50 dark:bg-dark-100 rounded-lg border border-gray-200 dark:border-dark-300`,children:[(0,x.jsxs)(`div`,{className:`flex items-center space-x-3`,children:[(0,x.jsx)(`div`,{className:`p-2 bg-primary-100 dark:bg-primary-900/20 rounded-lg`,children:t.role===`admin`?(0,x.jsx)(c,{className:`h-5 w-5 text-primary-600 dark:text-primary-400`}):(0,x.jsx)(u,{className:`h-5 w-5 text-primary-600 dark:text-primary-400`})}),(0,x.jsxs)(`div`,{children:[(0,x.jsxs)(`h3`,{className:`font-medium text-gray-900 dark:text-gray-100`,children:[t.username,t.id===A?.id&&(0,x.jsxs)(`span`,{className:`ml-2 text-xs text-primary-600 dark:text-primary-400 font-normal`,children:[`(`,e(`chatMessage.you`),`)`]})]}),(0,x.jsxs)(`p`,{className:`text-sm text-gray-600 dark:text-gray-400`,children:[t.email||e(`userManager.noEmail`),` โ€ข`,` `,t.role===`admin`?e(`userManager.roles.admin`):e(`userManager.roles.user`)]}),(0,x.jsxs)(`p`,{className:`text-xs text-gray-500 dark:text-gray-500`,children:[e(`userManager.columns.created`),`:`,` `,new Date(t.createdAt).toLocaleDateString()]})]})]}),(0,x.jsxs)(`div`,{className:`flex space-x-2`,children:[(0,x.jsx)(i,{variant:`outline`,size:`sm`,onClick:()=>F(t),className:`text-gray-600 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400`,children:(0,x.jsx)(s,{size:16})}),(0,x.jsx)(i,{variant:`outline`,size:`sm`,onClick:()=>P(t.id,t.username),disabled:t.id===A?.id,className:`text-red-600 dark:text-red-400 hover:text-red-700 dark:hover:text-red-300 hover:bg-red-50 dark:hover:bg-red-900/20`,children:(0,x.jsx)(l,{size:16})})]})]},t.id))})})]})]})},C=()=>{let{t:e}=r();return(0,x.jsx)(`div`,{className:`h-full overflow-auto`,children:(0,x.jsxs)(`div`,{className:`max-w-6xl mx-auto p-6`,children:[(0,x.jsxs)(`div`,{className:`mb-8`,children:[(0,x.jsx)(`h1`,{className:`text-3xl font-bold text-gray-900 dark:text-gray-100 mb-2`,children:e(`userManager.title`)}),(0,x.jsx)(`p`,{className:`text-gray-700 dark:text-gray-300`,children:e(`userManager.pageDescription`)})]}),(0,x.jsx)(S,{})]})})};export{C as UserManagementPage,C as default};
@@ -1 +0,0 @@
1
- import{c as e,u as t}from"./api-BrzQvj_g.js";export{e as personaApi,t as preferencesApi};
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/authStore-BkobbhZS.js","js/authStore-ge66S03D.js","js/demoMode-qyEGd_UM.js","js/appStore-k_e3JAM3.js","js/utils-vendor-MBozwMfr.js","js/rolldown-runtime-DWy-cpC1.js","js/markdown-vendor-4lCPqxk5.js","js/ui-vendor-BFOABH-A.js"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t}from"./demoMode-qyEGd_UM.js";import{t as n}from"./utils-vendor-MBozwMfr.js";var r=window.location.protocol===`file:`?`http://localhost:3001/api`:`${window.location.origin}/api`;console.log(`๐Ÿš€ API_BASE_URL configured as:`,r),console.log(`๐ŸŒ Window location:`,window.location),console.log(`๐Ÿ”ง Environment variables:`,{BASE_URL:`/`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_APP_VERSION:`0.8.6`}),console.log(`๐Ÿ“ฑ User agent:`,navigator.userAgent),console.log(`๐ŸŽญ Demo mode detected:`,e());var i=(e,t=!0)=>new Promise(n=>{setTimeout(()=>{n({success:t,data:e,error:t?void 0:`Demo mode: Backend not available`})},500)}),a=[{name:`llama3.2:3b`,size:2048e6,digest:`demo-digest-1`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`llama`,families:[`llama`],parameter_size:`3B`,quantization_level:`Q4_0`}},{name:`qwen2.5:7b`,size:4096e6,digest:`demo-digest-2`,modified_at:new Date().toISOString(),details:{format:`gguf`,family:`qwen`,families:[`qwen`],parameter_size:`7B`,quantization_level:`Q4_0`}}],o=()=>[{id:`demo-session-1`,title:`Demo Chat Session`,model:a[0].name,messages:[{id:`demo-msg-1`,role:`user`,content:`Hello! Can you tell me about this demo?`,timestamp:Date.now()},{id:`demo-msg-2`,role:`assistant`,content:`This is a demo of Libre WebUI! In a real deployment, I would be powered by Ollama running locally on your machine. This demo shows the beautiful interface and features without the backend connection.`,timestamp:Date.now()}],createdAt:Date.now(),updatedAt:Date.now()}],s=o(),c=n.create({baseURL:r,timeout:3e5});c.interceptors.request.use(e=>{let t=localStorage.getItem(`auth-token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e},e=>Promise.reject(e)),c.interceptors.response.use(e=>e,e=>{if(e.response?.status===401){console.warn(`๐Ÿ”’ Session expired or unauthorized, logging out...`),localStorage.removeItem(`auth-token`),t(async()=>{let{useAuthStore:e}=await import(`./authStore-BkobbhZS.js`);return{useAuthStore:e}},__vite__mapDeps([0,1,2,3,4,5,6,7])).then(({useAuthStore:e})=>{e.getState().logout()});let e=window.location.protocol===`file:`;return(e?window.location.hash:window.location.pathname).includes(`/login`)||(window.location.href=e?`#/login`:`/login`),Promise.reject(Error(`Session expired`))}return console.error(`API Error:`,e),Promise.reject(e)});var l={getSessions:()=>c.get(`/chat/sessions`).then(e=>e.data),createSession:(e,t,n)=>c.post(`/chat/sessions`,{model:e,title:t,personaId:n}).then(e=>e.data),getSession:t=>{if(e()){let e=o().find(e=>e.id===t);return e?i(e):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return c.get(`/chat/sessions/${t}`).then(e=>e.data)},updateSession:(t,n)=>{if(e()){let e=s.find(e=>e.id===t);return e?i({...e,...n,updatedAt:Date.now()}):Promise.resolve({success:!1,error:`Session not found in demo mode`})}return c.put(`/chat/sessions/${t}`,n).then(e=>e.data)},deleteSession:t=>e()?i(null):c.delete(`/chat/sessions/${t}`).then(e=>e.data),clearAllSessions:()=>c.delete(`/chat/sessions`).then(e=>e.data),generateTitle:(t,n,r)=>e()?i({title:r.substring(0,30)+(r.length>30?`...`:``)}):c.post(`/chat/sessions/${t}/generate-title`,{model:n,message:r}).then(e=>e.data),sendMessage:(e,t,n)=>c.post(`/chat/sessions/${e}/messages`,{content:t,options:n}).then(e=>e.data),saveMessage:(e,t)=>c.post(`/chat/sessions/${e}/messages`,t).then(e=>e.data),updateMessage:(t,n,r)=>e()?i({}):c.put(`/chat/sessions/${t}/messages/${n}`,r).then(e=>e.data),generateChatResponse:(e,t,n)=>c.post(`/chat/sessions/${e}/generate`,{message:t,options:n}).then(e=>e.data),generateChatStreamResponse:(e,t,n)=>({subscribe:async(i,a,o)=>{try{let s=await fetch(`${r}/chat/sessions/${e}/generate/stream`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({message:t,options:n})});if(!s.ok)throw Error(`HTTP error! status: ${s.status}`);let c=s.body?.getReader();if(!c)throw Error(`No response body reader available`);let l=new TextDecoder,u=``,d=()=>{c.read().then(({done:e,value:t})=>{if(e){o?.();return}u+=l.decode(t,{stream:!0});let n=u.split(`
3
- `);u=n.pop()||``;for(let e of n){let t=e.trim();if(t.startsWith(`data: `)){let e=t.slice(6);if(e===`[DONE]`){o?.();return}try{let t=JSON.parse(e);if(i(t),t.type===`done`||t.type===`error`){t.type===`error`?a?.(t.error):o?.();return}}catch(e){console.error(`Failed to parse SSE data:`,e)}}}d()}).catch(e=>{a?.(e instanceof Error?e:Error(String(e)))})};return d(),()=>c.cancel()}catch(e){return a?.(e instanceof Error?e:Error(String(e))),()=>{}}}}),getMessageBranches:(t,n)=>e()?i([]):c.get(`/chat/sessions/${t}/messages/${n}/branches`).then(e=>e.data),switchMessageBranch:(t,n,r)=>e()?i({}):c.post(`/chat/sessions/${t}/messages/${n}/branch`,{branchIndex:r}).then(e=>e.data),createMessageBranch:(t,n,r)=>e()?i({}):c.post(`/chat/sessions/${t}/messages/${n}/branches`,{...r}).then(e=>e.data)},u={checkHealth:()=>e()?i({status:`offline`},!1):c.get(`/ollama/health`).then(e=>e.data),getModels:()=>e()?i(a):c.get(`/ollama/models`).then(e=>e.data),pullModel:t=>e()?i(null,!1):c.post(`/ollama/models/pull`,{name:t}).then(e=>e.data),pullModelStream:(t,n,i,a)=>{if(e()){let e=0,t=setInterval(()=>{e+=Math.random()*20,e>=100?(e=100,n({status:`success`,total:100,completed:100,percent:100}),clearInterval(t),setTimeout(i,500)):n({status:`pulling`,total:100,completed:e,percent:Math.round(e)})},1e3);return()=>clearInterval(t)}let o=new URLSearchParams({model:t}),s=localStorage.getItem(`auth-token`);s&&o.set(`token`,s);let c=new EventSource(`${r}/ollama/pull/stream?${o.toString()}`);return c.onmessage=e=>{let t=JSON.parse(e.data);switch(t.type){case`progress`:n({status:t.status,digest:t.digest,total:t.total,completed:t.completed,percent:t.percent});break;case`complete`:c.close(),i();break;case`error`:c.close(),a(t.error);break}},c.onerror=()=>{c.close(),a(`Connection to server lost`)},()=>{c.close()}},deleteModel:t=>e()?i(null,!1):c.delete(`/ollama/models`,{params:{name:t}}).then(e=>e.data),showModel:(t,n=!1)=>{if(e()){let e=a.find(e=>e.name===t);return i(e||null,!!e)}return c.get(`/ollama/models/show`,{params:{name:t,verbose:n}}).then(e=>e.data)},createModel:t=>e()?i(null,!1):c.post(`/ollama/models`,t).then(e=>e.data),copyModel:(t,n)=>e()?i(null,!1):c.post(`/ollama/models/copy`,{source:t,destination:n}).then(e=>e.data),pushModel:t=>e()?i(null,!1):c.post(`/ollama/models/push`,{name:t}).then(e=>e.data),pullAllModels:()=>e()?i(null,!1):c.post(`/ollama/models/pull-all`).then(e=>e.data),pullAllModelsStream:(t,n,i)=>{if(e()){let e=a,r=0,i=setInterval(()=>{r++,r<=e.length&&t({current:r,total:e.length,modelName:e[r-1]?.name||`demo-model`,status:Math.random()>.1?`success`:`error`,error:Math.random()>.1?void 0:`Demo error`}),r>=e.length&&(clearInterval(i),setTimeout(n,500))},1e3);return}let o=new EventSource(`${r}/ollama/models/pull-all/stream`);o.onmessage=e=>{let r=JSON.parse(e.data);switch(r.type){case`progress`:t({current:r.current,total:r.total,modelName:r.modelName,status:r.status,error:r.error});break;case`complete`:o.close(),n();break;case`error`:o.close(),i(r.error);break}},o.onerror=()=>{o.close(),i(`Connection to server lost`)}},generateEmbeddings:t=>e()?i({embeddings:[[]]},!1):c.post(`/ollama/embed`,t).then(e=>e.data),listRunningModels:()=>e()?i([]):c.get(`/ollama/running`).then(e=>e.data),unloadModel:t=>e()?i(null):c.post(`/ollama/models/unload`,{name:t}).then(e=>e.data),unloadAllModels:()=>e()?i(null):c.post(`/ollama/models/unload-all`).then(e=>e.data),getVersion:()=>e()?i({version:`demo-mode`},!1):c.get(`/ollama/version`).then(e=>e.data),chatCompletion:t=>e()?i({message:{content:`Demo response`,role:`assistant`}},!1):c.post(`/ollama/chat`,t).then(e=>e.data),checkBlobExists:t=>e()?Promise.resolve(!1):c.head(`/ollama/blobs/${t}`).then(()=>!0).catch(()=>!1),pushBlob:(t,n)=>e()?i(null,!1):c.post(`/ollama/blobs/${t}`,n,{headers:{"Content-Type":`application/octet-stream`}}).then(e=>e.data),generateLegacyEmbeddings:t=>e()?i({embedding:[]},!1):c.post(`/ollama/embeddings`,t).then(e=>e.data),getLibraryModels:t=>{if(e())return i([{name:`llama3.2`,description:`Meta's latest Llama model`,category:`general`,sizes:[`1b`,`3b`],pulls:`50M+`,tags:[`general`]},{name:`deepseek-r1`,description:`Open reasoning model`,category:`reasoning`,sizes:[`7b`,`14b`,`32b`],pulls:`200M+`,tags:[`reasoning`]}]);let n=new URLSearchParams;t?.search&&n.set(`search`,t.search),t?.sort&&n.set(`sort`,t.sort),t?.category&&n.set(`category`,t.category);let r=n.toString();return c.get(`/ollama/library${r?`?${r}`:``}`).then(e=>e.data)}},d={getAllPlugins:()=>e()?i([]):c.get(`/plugins`).then(e=>e.data),uploadPlugin:t=>{if(e())return i({},!1);let n=new FormData;return n.append(`plugin`,t),c.post(`/plugins/upload`,n).then(e=>e.data)},installPlugin:t=>e()?i({},!1):c.post(`/plugins/install`,t).then(e=>e.data),updatePlugin:(t,n)=>e()?i({},!1):c.put(`/plugins/${t}`,n).then(e=>e.data),deletePlugin:t=>e()?i(void 0):c.delete(`/plugins/${t}`).then(e=>e.data),activatePlugin:t=>e()?i({},!1):c.post(`/plugins/activate/${t}`).then(e=>e.data),deactivatePlugin:t=>{if(e())return i(void 0);let n=t?`/plugins/deactivate/${t}`:`/plugins/deactivate`;return c.post(n).then(e=>e.data)},getActivePlugin:()=>e()?i(null):c.get(`/plugins/active`).then(e=>e.data),getPluginStatus:()=>e()?i([]):c.get(`/plugins/status`).then(e=>e.data),exportPlugin:t=>e()?Promise.resolve(new Blob([`{}`],{type:`application/json`})):c.get(`/plugins/${t}/export`,{responseType:`blob`}).then(e=>e.data),getCredentials:()=>e()?i([]):c.get(`/plugins/credentials/all`).then(e=>e.data),setApiKey:(t,n)=>e()?i(!1,!1):c.post(`/plugins/${t}/credentials`,{api_key:n}).then(e=>e.data),deleteApiKey:t=>e()?i(!1,!1):c.delete(`/plugins/${t}/credentials`).then(e=>e.data),checkApiKey:t=>e()?i(!1):c.get(`/plugins/${t}/credentials/check`).then(e=>e.data),getVariables:t=>e()?i({}):c.get(`/plugins/${t}/variables`).then(e=>e.data),setVariables:(t,n)=>e()?i(!0):c.put(`/plugins/${t}/variables`,{variables:n}).then(e=>e.data),resetVariables:t=>e()?i(!0):c.delete(`/plugins/${t}/variables`).then(e=>e.data)},f={getPreferences:()=>c.get(`/preferences`).then(e=>e.data),updatePreferences:e=>c.put(`/preferences`,e).then(e=>e.data),setDefaultModel:e=>c.put(`/preferences/default-model`,{model:e}).then(e=>e.data),setSystemMessage:e=>c.put(`/preferences/system-message`,{message:e}).then(e=>e.data),setGenerationOptions:e=>c.put(`/preferences/generation-options`,e).then(e=>e.data),resetGenerationOptions:()=>c.post(`/preferences/generation-options/reset`).then(e=>e.data),setEmbeddingSettings:e=>c.put(`/preferences/embedding-settings`,e).then(e=>e.data),resetEmbeddingSettings:()=>c.post(`/preferences/embedding-settings/reset`).then(e=>e.data),importData:(t,n=`replace`)=>e()?i({theme:{mode:`dark`},defaultModel:`llama3.2`,systemMessage:`You are a helpful assistant.`,generationOptions:{},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.7},showUsername:!1}):c.post(`/preferences/import`,{data:t,mergeStrategy:n}).then(e=>e.data)},p={uploadDocument:(t,n)=>{if(e())return i({id:`demo-doc-`+Date.now(),filename:t.name,fileType:t.name.endsWith(`.pdf`)?`pdf`:`txt`,size:t.size,sessionId:n,uploadedAt:Date.now()});let r=new FormData;return r.append(`document`,t),n&&r.append(`sessionId`,n),c.post(`/documents/upload`,r).then(e=>e.data)},getDocuments:t=>{if(e())return i([]);let n=t?`/documents/session/${t}`:`/documents`;return c.get(n).then(e=>e.data)},getDocument:t=>e()?i({id:t,filename:`demo-document.pdf`,fileType:`pdf`,size:1024,content:`Demo document content...`,uploadedAt:Date.now()}):c.get(`/documents/${t}`).then(e=>e.data),searchDocuments:(t,n,r)=>e()?i([]):c.post(`/documents/search`,{query:t,sessionId:n,limit:r}).then(e=>e.data),deleteDocument:t=>e()?i(void 0):c.delete(`/documents/${t}`).then(e=>e.data),getEmbeddingStatus:()=>e()?i({available:!1,model:`nomic-embed-text`,chunksWithEmbeddings:0,totalChunks:0}):c.get(`/documents/embeddings/status`).then(e=>e.data),regenerateEmbeddings:()=>e()?i(void 0):c.post(`/documents/embeddings/regenerate`).then(e=>e.data)},m={login:t=>e()?i({user:{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:`0.1.0`}}):c.post(`/auth/login`,t).then(e=>e.data),signup:t=>e()?i({user:{id:`demo-user-new`,username:t.username,email:t.email||``,role:`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},token:`demo-token-new`,systemInfo:{requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:`0.1.0`}}):c.post(`/auth/signup`,t).then(e=>e.data),logout:()=>e()?i(void 0):c.post(`/auth/logout`).then(e=>e.data),getSystemInfo:()=>(console.log(`getSystemInfo called, demo mode:`,e()),e()?i({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:!0,version:`0.1.0`}):(console.log(`๐Ÿ” Making API call to:`,r+`/auth/system-info`),console.log(`๐ŸŒ Full URL from:`,window.location.origin,`-> API:`,r+`/auth/system-info`),c.get(`/auth/system-info`).then(e=>(console.log(`โœ… getSystemInfo response:`,e.data),e.data)).catch(e=>{throw console.error(`โŒ getSystemInfo error:`,e),e.response&&(console.error(`๐Ÿ“„ Error response data:`,e.response.data),console.error(`๐Ÿ”ข Error status:`,e.response.status),console.error(`๐Ÿ”ง Error headers:`,e.response.headers)),e.request&&console.error(`๐Ÿ“ก Network error - no response received:`,e.request),console.error(`๐ŸŽฏ Error config:`,e.config),e}))),verifyToken:()=>e()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):c.get(`/auth/verify`).then(e=>e.data),getEncryptionKey:()=>e()?i({encryptionKey:`demo-encryption-key-not-real`}):c.get(`/auth/encryption-key`).then(e=>e.data),updateModelPullSetting:t=>e()?i({requiresAuth:!0,hasUsers:!0,userCount:1,allowUserModelPull:t,version:`0.1.0`}):c.patch(`/auth/system-settings/model-pull`,{allowUserModelPull:t}).then(e=>e.data)},h={getUsers:()=>e()?i([{id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}]):c.get(`/users`).then(e=>e.data),createUser:t=>e()?i({id:`new-user-`+Date.now(),username:t.username,email:t.email,role:t.role,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):c.post(`/users`,t).then(e=>e.data),updateUser:(t,n)=>e()?i({id:t,username:n.username||`demo`,email:n.email||`demo@example.com`,role:n.role||`user`,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):c.patch(`/users/${t}`,n).then(e=>e.data),deleteUser:t=>e()?i(void 0):c.delete(`/users/${t}`).then(e=>e.data),updateMyAvatar:t=>e()?i({id:`demo-user`,username:`demo`,email:`demo@example.com`,role:`admin`,avatar:t,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}):c.patch(`/users/me/avatar`,{avatar:t}).then(e=>e.data)},g={getPersonas:()=>e()?i([{id:`demo-1`,user_id:`default`,name:`Creative Assistant`,description:`Helpful assistant for creative tasks`,model:`llama3.3:latest`,parameters:{temperature:.8,top_p:.9,context_window:4096,system_prompt:`You are a creative and helpful assistant. Provide thoughtful and engaging responses.`},avatar:`/images/creative-avatar.png`,background:`/backgrounds/creative-bg.png`,created_at:Date.now()-864e5,updated_at:Date.now()-864e5},{id:`demo-2`,user_id:`default`,name:`Research Assistant`,description:`Academic assistant for research and learning`,model:`qwen3:7b`,parameters:{temperature:.3,top_p:.8,context_window:8192,system_prompt:`You are a knowledgeable research assistant. Provide detailed, informative explanations.`},created_at:Date.now()-1728e5,updated_at:Date.now()-1728e5}]):c.get(`/personas`).then(e=>e.data),getPersona:t=>e()?i({id:t,user_id:`default`,name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()}):c.get(`/personas/${t}`).then(e=>e.data),createPersona:t=>e()?i({id:`demo-`+Date.now(),user_id:`default`,...t,created_at:Date.now(),updated_at:Date.now()}):c.post(`/personas`,t).then(e=>e.data),updatePersona:(t,n)=>e()?i({id:t,user_id:`default`,name:n.name||`Updated Sample Assistant`,description:n.description,model:n.model||`llama3.2:latest`,parameters:n.parameters||{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},avatar:n.avatar,background:n.background,created_at:Date.now()-864e5,updated_at:Date.now()}):c.put(`/personas/${t}`,n).then(e=>e.data),deletePersona:t=>e()?i(void 0):c.delete(`/personas/${t}`).then(e=>e.data),exportPersona:t=>{if(e()){let e={name:`Sample Assistant`,description:`A sample assistant for demonstration`,model:`llama3.2:latest`,params:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},exportedAt:Date.now(),version:`1.0.0`};return Promise.resolve(e)}return c.get(`/personas/${t}/export`).then(e=>e.data)},importPersona:t=>e()?i({id:`demo-imported-`+Date.now(),user_id:`default`,name:t.name,description:t.description,model:t.model,parameters:t.params,avatar:t.avatar,background:t.background,created_at:Date.now(),updated_at:Date.now(),embedding_model:t.embedding_model,memory_settings:t.memory_settings,mutation_settings:t.mutation_settings}):c.post(`/personas/import`,t).then(e=>e.data),getPersonasCount:()=>e()?i({count:2}):c.get(`/personas/stats/count`).then(e=>e.data),getDefaultParameters:()=>e()?i({temperature:.7,top_p:.9,top_k:40,context_window:4096,max_tokens:1024,system_prompt:``,repeat_penalty:1.1,presence_penalty:0,frequency_penalty:0}):c.get(`/personas/defaults/parameters`).then(e=>e.data),getMemoryStatus:t=>e()?i({status:`active`,memory_count:42,last_backup:Date.now()-864e5,size_mb:2.3}):c.get(`/personas/${t}/memory/status`).then(e=>e.data),wipeMemories:t=>e()?i({deleted_count:42}):c.delete(`/personas/${t}/memory`).then(e=>e.data),backupPersona:t=>{if(e()){let e=JSON.stringify({persona_id:t,backup_date:new Date().toISOString(),data:`demo backup data`});return Promise.resolve(new Blob([e],{type:`application/json`}))}return c.get(`/personas/${t}/backup`,{responseType:`blob`}).then(e=>e.data)},exportPersonaDNA:t=>{if(e()){let e=JSON.stringify({persona_id:t,export_date:new Date().toISOString(),dna:`demo DNA data`,memories:[],learned_behaviors:{}});return Promise.resolve(new Blob([e],{type:`application/json`}))}return c.get(`/personas/${t}/export/dna`,{responseType:`blob`}).then(e=>e.data)},importPersonaDNA:t=>{if(e())return i({id:`demo-dna-`+Date.now(),user_id:`default`,name:`Imported Persona`,description:`Persona imported from DNA`,model:`llama3.2:latest`,parameters:{temperature:.7,top_p:.9,context_window:4096,system_prompt:`You are a helpful assistant.`},created_at:Date.now(),updated_at:Date.now()});let n=new FormData;return n.append(`dnaFile`,t),c.post(`/personas/import/dna`,n).then(e=>e.data)},downloadPersona:async(e,t)=>{try{let n=await g.exportPersona(e),r=new Blob([JSON.stringify(n,null,2)],{type:`application/json`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=`${t}.json`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}catch(e){throw console.error(`Error while downloading persona:`,e),Error(`Failed to download persona: ${e instanceof Error?e.message:String(e)}`)}}},_={getModels:()=>e()?i([{model:`tts-1`,plugin:`openai`,config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096}}]):c.get(`/tts/models`).then(e=>e.data),getPlugins:()=>e()?i([{id:`openai`,name:`OpenAI GPT`,models:[`tts-1`,`tts-1-hd`],config:{voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`}}]):c.get(`/tts/plugins`).then(e=>e.data),getVoices:t=>e()?i({voices:[`alloy`,`echo`,`fable`,`onyx`,`nova`,`shimmer`],default_voice:`alloy`,formats:[`mp3`,`opus`,`aac`,`flac`,`wav`],default_format:`mp3`,max_characters:4096,supports_streaming:!1}):c.get(`/tts/voices/${t}`).then(e=>e.data),generateBase64:t=>e()?i({audio:``,format:t.response_format||`mp3`,mimeType:`audio/mpeg`,size:0}):c.post(`/tts/generate-base64`,t).then(e=>e.data),generate:async t=>e()?new Blob([],{type:`audio/mpeg`}):(await c.post(`/tts/generate`,t,{responseType:`blob`})).data,speak:async(e,t={})=>{try{t.onStart?.();let n=await _.generateBase64({model:t.model||`tts-1`,input:e,voice:t.voice,speed:t.speed,response_format:`mp3`});if(!n.success||!n.data?.audio)throw Error(n.message||`Failed to generate speech`);let r=`data:${n.data.mimeType};base64,${n.data.audio}`,i=new Audio(r);return i.onended=()=>t.onEnd?.(),i.onerror=()=>t.onError?.(Error(`Audio playback failed`)),await i.play(),i}catch(e){let n=e instanceof Error?e:Error(`Unknown error`);return t.onError?.(n),null}}},v={getModels:()=>e()?i([{model:`dall-e-3`,plugin:`openai`,config:{sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`,styles:[`vivid`,`natural`],default_style:`vivid`,max_prompt_length:4e3}}]):c.get(`/image-gen/models`).then(e=>e.data),getPlugins:()=>e()?i([{id:`openai`,name:`OpenAI DALL-E`,models:[`dall-e-3`,`dall-e-2`],config:{sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`}}]):c.get(`/image-gen/plugins`).then(e=>e.data),getConfig:t=>e()?i({sizes:[`1024x1024`,`1792x1024`,`1024x1792`],default_size:`1024x1024`,qualities:[`standard`,`hd`],default_quality:`standard`,styles:[`vivid`,`natural`],default_style:`vivid`,max_prompt_length:4e3}):c.get(`/image-gen/config/${t}`).then(e=>e.data),generate:t=>e()?i({images:[{url:`https://placehold.co/1024x1024/purple/white?text=Demo+Image`,revised_prompt:t.prompt}]}):c.post(`/image-gen/generate`,t).then(e=>e.data),getGallery:t=>e()?i({images:[],total:0}):c.get(`/image-gen/gallery`,{params:t}).then(e=>e.data),getGalleryImage:t=>e()?i({id:t,userId:`demo`,prompt:`Demo image prompt`,model:`dall-e-3`,imageData:`https://placehold.co/1024x1024/purple/white?text=Demo`,createdAt:Date.now()}):c.get(`/image-gen/gallery/${t}`).then(e=>e.data),deleteGalleryImage:t=>e()?i(void 0):c.delete(`/image-gen/gallery/${t}`).then(e=>e.data)},y={getModels:t=>e()?i([{id:`meta-llama/Llama-3.3-70B-Instruct`,modelId:`meta-llama/Llama-3.3-70B-Instruct`,author:`meta-llama`,downloads:1e6,likes:5e3,tags:[`text-generation`,`llama`],pipeline_tag:`text-generation`,gated:!1}]):c.get(`/huggingface-hub/models`,{params:t}).then(e=>e.data),getTrending:t=>e()?i([]):c.get(`/huggingface-hub/trending`,{params:t}).then(e=>e.data),getModel:(t,n)=>e()?i({id:`${t}/${n}`,modelId:`${t}/${n}`,author:t,downloads:0,likes:0,tags:[],gated:!1}):c.get(`/huggingface-hub/models/${t}/${n}`).then(e=>e.data),getTasks:()=>e()?i([`text-generation`,`text-to-speech`,`text-to-image`]):c.get(`/huggingface-hub/tasks`).then(e=>e.data),clearCache:()=>e()?i(!0):c.post(`/huggingface-hub/cache/clear`).then(e=>e.data),getGgufFiles:(t,n)=>e()?i([{filename:`model-Q4_K_M.gguf`,size:45e8,sizeFormatted:`4.19 GB`,quantization:`Q4_K_M`,url:`https://huggingface.co/${t}/${n}/resolve/main/model-Q4_K_M.gguf`,ollamaCommand:`hf.co/${t}/${n}:Q4_K_M`}]):c.get(`/huggingface-hub/models/${t}/${n}/gguf`).then(e=>e.data),hasGgufFiles:(t,n)=>e()?i({hasGguf:!1,count:0}):c.get(`/huggingface-hub/models/${t}/${n}/has-gguf`).then(e=>e.data)};export{y as a,g as c,_ as d,h as f,p as i,d as l,m as n,v as o,r as p,l as r,u as s,c as t,f as u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-B0pf9vdR.js","js/api-BrzQvj_g.js","js/demoMode-qyEGd_UM.js","js/utils-vendor-MBozwMfr.js","js/rolldown-runtime-DWy-cpC1.js","js/markdown-vendor-4lCPqxk5.js"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t,t as n}from"./demoMode-qyEGd_UM.js";import{a as r,i,n as a,r as o}from"./utils-vendor-MBozwMfr.js";function s(...e){return i(r(e))}function c(e){let t=new Date(e),n=new Date().getTime()-t.getTime(),r=Math.floor(n/(1e3*60)),i=Math.floor(n/(1e3*60*60)),a=Math.floor(n/(1e3*60*60*24));return r<1?`Just now`:r<60?`${r}m ago`:i<24?`${i}h ago`:a<7?`${a}d ago`:t.toLocaleDateString()}function l(){return Math.random().toString(36).substring(2)+Date.now().toString(36)}function u(e,t){return e.length<=t?e:e.substring(0,t)+`...`}function d(e){let t=/^\[Thinking:\s*([\s\S]*?)\]\s*/i,n=/^<thinking>([\s\S]*?)<\/thinking>\s*/i,r=e.match(t);if(r)return{thinking:r[1].trim(),content:e.slice(r[0].length).trim()};let i=e.match(n);return i?{thinking:i[1].trim(),content:e.slice(i[0].length).trim()}:{thinking:null,content:e}}var f=o()(a((r,i)=>({theme:{mode:`light`},setTheme:e=>{r({theme:e}),document.documentElement.classList.remove(`dark`,`ophelia`),e.mode===`dark`?document.documentElement.classList.add(`dark`):e.mode===`ophelia`&&document.documentElement.classList.add(`ophelia`)},toggleTheme:()=>{let e=i().theme,t=[`light`,`dark`,`ophelia`],n=(t.indexOf(e.mode)+1)%t.length;i().setTheme({mode:t[n]})},sidebarOpen:!0,sidebarCompact:!1,setSidebarOpen:e=>r({sidebarOpen:e}),setSidebarCompact:e=>r({sidebarCompact:e}),toggleSidebar:()=>r(e=>({sidebarOpen:!e.sidebarOpen})),toggleSidebarCompact:()=>r(e=>({sidebarCompact:!e.sidebarCompact})),artifactPanelOpen:!1,artifactPanelArtifact:null,openArtifactPanel:e=>r({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>r({artifactPanelOpen:!1,artifactPanelArtifact:null}),preferences:{theme:{mode:`light`},defaultModel:``,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``},showUsername:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}},setPreferences:e=>r(t=>({preferences:{...t.preferences,...e}})),loadPreferences:async()=>{try{let{preferencesApi:e}=await t(async()=>{let{preferencesApi:e}=await import(`./api-B0pf9vdR.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5])),n=await e.getPreferences();if(n.success&&n.data){let e=n.data;r(t=>({preferences:{...t.preferences,...e},backgroundImage:e.backgroundSettings?.imageUrl||null}))}}catch(e){console.warn(`Failed to load preferences from backend:`,e)}},isGenerating:!1,setIsGenerating:e=>r({isGenerating:e}),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>r({hasSeenSettingsNotification:!0}),isDemoMode:e(),demoConfig:n(),setDemoMode:e=>{r({isDemoMode:e,demoConfig:n()})},backgroundImage:null,setBackgroundImage:async e=>{if(r({backgroundImage:e}),e){let n=i(),r={...n.preferences,backgroundSettings:{enabled:!0,imageUrl:e,blurAmount:n.preferences.backgroundSettings?.blurAmount||10,opacity:n.preferences.backgroundSettings?.opacity||.6}};n.setPreferences(r);try{let{preferencesApi:e}=await t(async()=>{let{preferencesApi:e}=await import(`./api-B0pf9vdR.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));await e.updatePreferences({backgroundSettings:r.backgroundSettings})}catch(e){console.warn(`Failed to save background settings to backend:`,e)}}},uploadBackgroundImage:async e=>{try{let t=new FileReader;return new Promise((n,r)=>{t.onload=async e=>{try{let t=e.target?.result;await i().setBackgroundImage(t),n()}catch(e){r(e)}},t.onerror=r,t.readAsDataURL(e)})}catch(e){throw console.error(`Failed to upload background image:`,e),e}},removeBackgroundImage:async()=>{r({backgroundImage:null});let e=i(),n={enabled:!1,imageUrl:``,blurAmount:e.preferences.backgroundSettings?.blurAmount||10,opacity:e.preferences.backgroundSettings?.opacity||.6};e.setPreferences({backgroundSettings:n});try{let{preferencesApi:e}=await t(async()=>{let{preferencesApi:e}=await import(`./api-B0pf9vdR.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));await e.updatePreferences({backgroundSettings:n})}catch(e){console.warn(`Failed to save background removal to backend:`,e)}},clearUserState:()=>{r({backgroundImage:null,preferences:{theme:{mode:`light`},defaultModel:``,systemMessage:``,generationOptions:{temperature:.7,top_p:.9,top_k:40,num_predict:1024},embeddingSettings:{enabled:!1,model:`nomic-embed-text`,chunkSize:1e3,chunkOverlap:200,similarityThreshold:.3},titleSettings:{autoTitle:!1,taskModel:``},showUsername:!1,backgroundSettings:{enabled:!1,imageUrl:``,blurAmount:10,opacity:.6}}})}}),{name:`libre-webui-app-state`,partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=f.getState();t(e)})();export{d as a,l as i,s as n,u as o,c as r,f as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./authStore-ge66S03D.js";export{e as useAuthStore};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-B0pf9vdR.js","js/api-BrzQvj_g.js","js/demoMode-qyEGd_UM.js","js/utils-vendor-MBozwMfr.js","js/rolldown-runtime-DWy-cpC1.js","js/markdown-vendor-4lCPqxk5.js"])))=>i.map(i=>d[i]);
2
- import{n as e,r as t}from"./demoMode-qyEGd_UM.js";import{zt as n}from"./ui-vendor-BFOABH-A.js";import{n as r,r as i}from"./utils-vendor-MBozwMfr.js";import{i as a,t as o}from"./appStore-k_e3JAM3.js";import{c as s,l as c,r as l,s as u,u as d}from"./api-BrzQvj_g.js";var f=i((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await c.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:t instanceof Error?t.message:`Failed to load plugins`})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await c.uploadPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to upload plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to upload plugin`})}finally{e({isUploading:!1})}},installPlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.installPlugin(n);r.success&&r.data?await t().loadPlugins():e({error:r.error||`Failed to install plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to install plugin`})}finally{e({isLoading:!1})}},updatePlugin:async(n,r)=>{e({isLoading:!0,error:null});try{let i=await c.updatePlugin(n,r);i.success&&i.data?await t().loadPlugins():e({error:i.error||`Failed to update plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to update plugin`})}finally{e({isLoading:!1})}},deletePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.deletePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to delete plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to delete plugin`})}finally{e({isLoading:!1})}},activatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.activatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to activate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to activate plugin`})}finally{e({isLoading:!1})}},deactivatePlugin:async n=>{e({isLoading:!0,error:null});try{let r=await c.deactivatePlugin(n);r.success?await t().loadPlugins():e({error:r.error||`Failed to deactivate plugin`})}catch(t){e({error:t instanceof Error?t.message:`Failed to deactivate plugin`})}finally{e({isLoading:!1})}},loadPluginStatus:async()=>{try{let t=await c.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){console.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await c.exportPlugin(t),n=window.URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=`${t}.json`,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}catch(t){e({error:t instanceof Error?t.message:`Failed to export plugin`})}finally{e({isLoading:!1})}},fetchPluginVariables:async t=>{try{let n=await c.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){console.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n)=>{try{return(await c.setVariables(e,n)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return console.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{(await c.resetVariables(t)).success&&e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}})}catch(e){console.error(`Failed to reset plugin variables:`,e)}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),p=(e,t)=>{if(e&&typeof e==`object`&&`response`in e){let t=e;if(t.response?.data?.error)return t.response.data.error}return e instanceof Error?e.message:t},m=i((e,r)=>({sessions:[],currentSession:null,setCurrentSession:t=>{e({currentSession:t})},createSession:async(t,r,i)=>{try{e({loading:!0,error:null});let a=await l.createSession(t,r,i);if(a.success&&a.data){let t=a.data;return e(e=>({sessions:[t,...e.sessions],currentSession:t,loading:!1})),n.success(`New chat created`),t}}catch(t){let r=p(t,`Failed to create session`);e({error:r,loading:!1}),n.error(r)}},loadSessions:async()=>{try{e({loading:!0,error:null});let t=await l.getSessions();t.success&&t.data&&e(e=>{let n=t.data||[],r=n.map(e=>e.id),i=null;return e.currentSession&&r.includes(e.currentSession.id)?i=n.find(t=>t.id===e.currentSession.id)||null:n.length>0&&(i=n[0],e.currentSession&&console.warn(`Previous currentSession not found in backend sessions:`,e.currentSession.id)),{sessions:n,currentSession:i,loading:!1}})}catch(t){let r=p(t,`Failed to load sessions`);e({error:r,loading:!1}),n.error(r)}},deleteSession:async t=>{try{let r=await l.deleteSession(t);r.success?(e(e=>{let n=e.sessions.filter(e=>e.id!==t),r=e.currentSession?.id===t?n[0]||null:e.currentSession;return console.log(`Store: Updating state, sessions count:`,n.length),{sessions:n,currentSession:r}}),n.success(`Chat deleted`)):(console.error(`Store: deleteSession failed:`,r),n.error(`Failed to delete chat`))}catch(e){console.error(`Store: deleteSession error:`,e);let t=p(e,`Failed to delete session`);n.error(t)}},clearAllSessions:async()=>{try{e({loading:!0,error:null});let t=await l.clearAllSessions();t.success?(e({sessions:[],currentSession:null,loading:!1}),n.success(`All chat history cleared`)):(console.error(`Store: clearAllSessions failed:`,t),n.error(`Failed to clear chat history`),e({loading:!1}))}catch(t){console.error(`Store: clearAllSessions error:`,t);let r=p(t,`Failed to clear chat history`);n.error(r),e({loading:!1})}},clearAllState:()=>{e({sessions:[],currentSession:null,models:[],selectedModel:``,systemMessage:``,loading:!1,error:null})},updateSessionTitle:async(t,r)=>{try{let i=await l.updateSession(t,{title:r});i.success&&i.data&&(e(e=>({sessions:e.sessions.map(e=>e.id===t?i.data:e),currentSession:e.currentSession?.id===t?i.data:e.currentSession})),n.success(`Chat title updated`))}catch(e){let t=p(e,`Failed to update session`);n.error(t)}},addMessage:(t,i)=>{let o=r(),s=o.currentSession?.isPrivate&&o.currentSession?.id===t;if(!o.currentSession||!s&&!o.sessions.find(e=>e.id===o.currentSession?.id)){n.error(`No valid chat session. Please create or select a chat.`),console.error(`addMessage blocked: currentSession is not valid`,o.currentSession?.id);return}if(!s&&!o.sessions.find(e=>e.id===t)){n.error(`Session not found or invalid. Please select or create a valid chat session.`),console.error(`addMessage blocked: sessionId not found in sessions`,t);return}let c={...i,id:i.id||a(),timestamp:Date.now()};e(e=>{if(e.currentSession?.isPrivate&&e.currentSession?.id===t)return e.currentSession.messages.find(e=>e.id===c.id)?e:{...e,currentSession:{...e.currentSession,messages:[...e.currentSession.messages,c],updatedAt:Date.now()}};let n=e.sessions.find(e=>e.id===t);if(n&&n.messages.find(e=>e.id===c.id))return e;let r=e.sessions.map(e=>{if(e.id===t){let t=[...e.messages];if(c.parentId){let e=c.parentId;t=t.map(t=>t.id===e||t.parentId===e?{...t,isActive:!1,branchIndex:t.branchIndex??0,siblingCount:(c.branchIndex||0)+1}:t)}return t.push(c),{...e,messages:t,updatedAt:Date.now()}}return e});return{sessions:r,currentSession:e.currentSession?.id===t&&r.find(e=>e.id===t)||e.currentSession}})},updateMessage:(t,n,r)=>{e(e=>{if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.find(e=>e.id===n);if(!t||t.content===r)return e;let i=e.currentSession.messages.map(e=>e.id===n?{...e,content:r}:e);return{...e,currentSession:{...e.currentSession,messages:i,updatedAt:Date.now()}}}let i=e.sessions.find(e=>e.id===t);if(!i)return e;let a=i.messages.find(e=>e.id===n);if(!a||a.content===r)return e;let o=e.sessions.map(e=>{if(e.id===t){let t=e.messages.map(e=>e.id===n?{...e,content:r}:e);return{...e,messages:t,updatedAt:Date.now()}}return e});return{sessions:o,currentSession:e.currentSession?.id===t&&o.find(e=>e.id===t)||e.currentSession}})},updateMessageWithStatistics:(t,n,r,i)=>{e(e=>{if(e.currentSession?.id!==t)return e;if(e.currentSession?.isPrivate){let t=e.currentSession.messages.map(e=>e.id===n?{...e,content:r,statistics:i}:e);return{...e,currentSession:{...e.currentSession,messages:t,updatedAt:Date.now()}}}let a=e.sessions.map(e=>{if(e.id===t){let t=e.messages.map(e=>e.id===n?{...e,content:r,statistics:i}:e);return{...e,messages:t,updatedAt:Date.now()}}return e});return{sessions:a,currentSession:e.currentSession&&e.currentSession.id===t&&a.find(e=>e.id===t)||e.currentSession}})},models:[],loadModels:async()=>{try{e({loading:!0,error:null}),console.log(`Loading models from API...`);let i=await u.getModels(),a=[];i.success&&i.data&&(a=[...i.data],console.log(`Ollama models loaded:`,i.data.length));try{let e=await c.getAllPlugins();if(e.success&&e.data){let t=e.data.filter(e=>e.active&&e.type!==`tts`&&e.type!==`image`);console.log(`๐Ÿ”Œ Active plugins found:`,t.map(e=>e.name));for(let e of t)if(e.model_map){let t=e.model_map.map(t=>({name:t,model:t,size:0,digest:``,details:{parent_model:``,format:``,family:``,families:[],parameter_size:``,quantization_level:``},modified_at:new Date().toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPlugin:!0,pluginName:e.name}));a.push(...t),console.log(`Plugin models added:`,t.length,`from`,e.name)}}}catch(e){console.error(`โŒ Failed to load plugin models:`,e),e instanceof Error&&console.error(`โŒ Plugin error details:`,{message:e.message,response:e.response?.data,status:e.response?.status,url:e.config?.url})}try{let{personaApi:n}=await t(async()=>{let{personaApi:e}=await import(`./api-B0pf9vdR.js`);return{personaApi:e}},__vite__mapDeps([0,1,2,3,4,5])),r=await n.getPersonas();if(r.success&&r.data){let t=r.data.reduce((e,t)=>(e[t.id]=t,e),{}),n=r.data.map(e=>({name:`persona:${e.id}`,model:e.model,size:0,digest:``,details:{parent_model:e.model,format:`persona`,family:`persona`,families:[`persona`],parameter_size:``,quantization_level:``},modified_at:new Date(e.updated_at).toISOString(),expires_at:new Date().toISOString(),size_vram:0,isPersona:!0,personaName:e.name,personaDescription:e.description}));a.push(...n),e(e=>({...e,personas:t}))}}catch(e){console.error(`โŒ Failed to load personas:`,e)}console.log(`Total models loaded:`,a.length);let o=r().selectedModel,s=a.some(e=>e.name===o);if(o&&!s&&a.length>0){let t=a[0].name;console.log(`โš ๏ธ Selected model "${o}" no longer available, falling back to "${t}"`),e({models:a,loading:!1,selectedModel:t}),n.success(`Switched to ${t} (previous model no longer available)`)}else e({models:a,loading:!1})}catch(t){console.error(`Error loading models:`,t);let r=p(t,`Failed to load models`);e({error:r,loading:!1}),n.error(r)}},loadPreferences:async()=>{try{let t=await d.getPreferences();if(t.success&&t.data){let{defaultModel:n,systemMessage:r}=t.data;n&&(e({selectedModel:n}),console.log(`โœ… Loaded default model from backend:`,n)),r!==void 0&&(e({systemMessage:r}),console.log(`โœ… Loaded system message from backend`))}}catch(e){console.warn(`โŒ Failed to load preferences from backend:`,e)}},selectedModel:``,setSelectedModel:t=>{e({selectedModel:t}),d.setDefaultModel(t).catch(e=>{console.warn(`Failed to save default model to backend:`,e)})},updateCurrentSessionModel:async t=>{let i=r();if(!i.currentSession)throw Error(`No current session to update`);try{let r=await l.updateSession(i.currentSession.id,{model:t});r.success&&r.data&&(e(e=>({sessions:e.sessions.map(t=>t.id===e.currentSession?.id?r.data:t),currentSession:r.data,selectedModel:t})),n.success(`Model updated for current chat`))}catch(e){let t=p(e,`Failed to update session model`);throw n.error(t),e}},personas:{},loadPersonas:async()=>{try{e({loading:!0,error:null});let t=await s.getPersonas();if(t.success&&t.data){let n=t.data;e({personas:n.reduce((e,t)=>(e[t.id]=t,e),{}),loading:!1}),console.log(`โœ… Personas loaded:`,n.length)}}catch(t){let n=p(t,`Failed to load personas`);e({error:n,loading:!1}),console.error(`โŒ Failed to load personas:`,n)}},getCurrentPersona:()=>{let e=r();if(!e.currentSession||!e.currentSession.model?.startsWith(`persona:`))return null;let t=e.currentSession.model.replace(`persona:`,``);return e.personas[t]||null},systemMessage:``,setSystemMessage:t=>{let n=r();if(e({systemMessage:t}),d.setSystemMessage(t).catch(e=>{console.warn(`Failed to save system message to backend:`,e)}),n.currentSession){let r=n.currentSession.messages.findIndex(e=>e.role===`system`);if(r!==-1){e(e=>{let n=e.sessions.map(n=>{if(n.id===e.currentSession?.id){let e=n.messages.map((e,n)=>n===r&&e.role===`system`?{...e,content:t,timestamp:Date.now()}:e);return{...n,messages:e,updatedAt:Date.now()}}return n});return{sessions:n,currentSession:e.currentSession?n.find(t=>t.id===e.currentSession.id)||e.currentSession:null}});let i=n.currentSession.messages[r];l.updateMessage(n.currentSession.id,i.id,{content:t}).catch(e=>{console.warn(`Failed to sync system message update to backend:`,e)}),console.log(`โœ… Updated system message in current session`)}}},loading:!1,error:null,setError:t=>e({error:t}),generatingTitleForSession:null,setGeneratingTitleForSession:t=>e({generatingTitleForSession:t}),...typeof window<`u`&&{testPluginApi:async()=>{try{console.log(`๐Ÿงช Testing plugin API...`);let e=await c.getAllPlugins();return console.log(`โœ… Plugin API test result:`,e),e}catch(e){return console.error(`โŒ Plugin API test failed:`,e),{error:e}}}}}));function h(e){"@babel/helpers - typeof";return h=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},h(e)}function g(e,t){if(h(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(h(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function _(e){var t=g(e,`string`);return h(t)==`symbol`?t:t+``}function v(e,t,n){return(t=_(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=new class{constructor(){v(this,`ws`,null),v(this,`url`,void 0),v(this,`reconnectAttempts`,0),v(this,`maxReconnectAttempts`,5),v(this,`reconnectDelay`,1e3),v(this,`messageHandlers`,new Map);let e;e=window.location.protocol===`file:`?`ws://localhost:3001`:`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}`,this.url=`${e}/ws`,console.log(`WebSocket URL constructed:`,this.url)}connect(){return e()?(console.log(`Demo mode active: skipping WebSocket connection.`),Promise.resolve()):(console.log(`WebSocket: Attempting to connect to:`,this.url),new Promise((e,t)=>{try{let n=localStorage.getItem(`auth-token`),r=n?`${this.url}?token=${encodeURIComponent(n)}`:this.url;console.log(`WebSocket: Connecting to:`,r.replace(/token=[^&]+/,`token=***`)),this.ws=new WebSocket(r),this.ws.onopen=()=>{console.log(`WebSocket connected successfully`),this.reconnectAttempts=0,e()},this.ws.onmessage=e=>{try{let t=JSON.parse(e.data),n=this.messageHandlers.get(t.type);n?n(t.data):t.type===`connected`?console.debug(`WebSocket: Server confirmed connection`):console.warn(`WebSocket: No handler for message type:`,t.type)}catch(e){console.error(`Failed to parse WebSocket message:`,e)}},this.ws.onclose=()=>{console.log(`WebSocket disconnected`),this.ws=null,this.attemptReconnect()},this.ws.onerror=e=>{console.error(`WebSocket error:`,e),t(e)}}catch(e){t(e)}}))}disconnect(){this.ws&&(this.ws.close(),this.ws=null)}send(e){this.ws&&this.ws.readyState===WebSocket.OPEN?(console.log(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e))):console.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}attemptReconnect(){if(e()){console.log(`Demo mode active: skipping WebSocket reconnection.`);return}this.reconnectAttempts<this.maxReconnectAttempts?(this.reconnectAttempts++,console.log(`Attempting to reconnect... (${this.reconnectAttempts}/${this.maxReconnectAttempts})`),setTimeout(()=>{this.connect().catch(()=>{})},this.reconnectDelay*this.reconnectAttempts)):console.error(`Max reconnection attempts reached`)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},b=i()(r((t,n)=>({user:null,token:null,systemInfo:null,isAuthenticated:!1,isLoading:!1,login:(n,r,i)=>{localStorage.setItem(`auth-token`,r);let a=m.getState();a.clearAllState&&a.clearAllState(),o.getState().clearUserState(),t({user:n,token:r,systemInfo:i,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let t=f.getState();console.log(`๐Ÿ”„ Reinitializing app after login...`),console.log(`๐Ÿ”Œ Reconnecting WebSocket with auth token...`),y.disconnect(),await y.connect(),!(await u.checkHealth()).success&&!e()&&console.warn(`Ollama service not available after login`);let n=o.getState();await Promise.all([a.loadModels(),a.loadSessions(),a.loadPreferences(),n.loadPreferences(),t.loadPlugins()]),console.log(`โœ… Reinitialized app after login`)}catch(e){console.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),console.log(`๐Ÿ”Œ Disconnecting WebSocket on logout...`),y.disconnect();let e=m.getState();e.clearAllState&&e.clearAllState(),o.getState().clearUserState(),t({user:null,token:null,isAuthenticated:!1,isLoading:!1})},setUser:e=>{t({user:e})},setSystemInfo:e=>{t({systemInfo:e})},setLoading:e=>{t({isLoading:e})},isAdmin:()=>{let{user:e}=n();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=n();return e?.requiresAuth??!1}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,isAuthenticated:e.isAuthenticated})}));export{f as i,y as n,m as r,b as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./utils-vendor-MBozwMfr.js";export{e as default};
@@ -1 +0,0 @@
1
- var e=`modulepreload`,t=function(e){return`/`+e},n={},r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})},i=()=>{if(typeof window<`u`){let e=window.location.hostname,t=t=>t.some(t=>e===t||e.endsWith(`.`+t));if(t([`vercel.app`,`vercel.dev`])||t([`netlify.app`,`netlify.com`])||t([`github.io`])||e.startsWith(`demo.`)||e.startsWith(`preview.`))return!0}return!1},a=()=>({isDemo:i(),message:`This is a demo version for presentation purposes only. The Ollama backend is not connected.`,showBanner:!0,allowInteraction:!1});export{i as n,r,a as t};