libre-webui 0.8.5 โ†’ 0.8.6

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 (42) hide show
  1. package/frontend/dist/assets/index-B1qNw5pA.js +52 -0
  2. package/frontend/dist/assets/index-DnG6512Q.css +1 -0
  3. package/frontend/dist/assets/ui-CsNe6lFV.css +1 -0
  4. package/frontend/dist/index.html +15 -6
  5. package/frontend/dist/js/ArtifactContainer-Com7P5vK.js +24 -0
  6. package/frontend/dist/js/ArtifactDemoPage-Xd-Ragpf.js +98 -0
  7. package/frontend/dist/js/Button-D62PCbMW.js +1 -0
  8. package/frontend/dist/js/ChatPage-01JxVHRP.js +15 -0
  9. package/frontend/dist/js/GalleryPage-8nHGqKEu.js +1 -0
  10. package/frontend/dist/js/ModelsPage-C0MLVfwA.js +1 -0
  11. package/frontend/dist/js/OptimizedSyntaxHighlighter-DjnSqskO.js +1 -0
  12. package/frontend/dist/js/PersonasPage-D9YKnYz6.js +13 -0
  13. package/frontend/dist/js/UserManagementPage-b6NZdPTD.js +1 -0
  14. package/frontend/dist/js/api-B0pf9vdR.js +1 -0
  15. package/frontend/dist/js/api-BrzQvj_g.js +3 -0
  16. package/frontend/dist/js/appStore-k_e3JAM3.js +2 -0
  17. package/frontend/dist/js/authStore-BkobbhZS.js +1 -0
  18. package/frontend/dist/js/authStore-ge66S03D.js +2 -0
  19. package/frontend/dist/js/axios-CYrHjdt1.js +1 -0
  20. package/frontend/dist/js/demoMode-qyEGd_UM.js +1 -0
  21. package/frontend/dist/js/markdown-vendor-4lCPqxk5.js +22 -0
  22. package/frontend/dist/js/react-vendor-BUzyfgnZ.js +8 -0
  23. package/frontend/dist/js/rolldown-runtime-DWy-cpC1.js +1 -0
  24. package/frontend/dist/js/ui-DuH1cD2f.js +267 -0
  25. package/frontend/dist/js/ui-vendor-BFOABH-A.js +177 -0
  26. package/frontend/dist/js/userService-BndgbS1C.js +1 -0
  27. package/frontend/dist/js/utils-vendor-MBozwMfr.js +6 -0
  28. package/package.json +5 -5
  29. package/frontend/dist/assets/index-fnpCaKr_.js +0 -51
  30. package/frontend/dist/css/index-WfujIMhR.css +0 -1
  31. package/frontend/dist/js/ArtifactContainer-CW_iHjsN.js +0 -24
  32. package/frontend/dist/js/ArtifactDemoPage-DkERDKtR.js +0 -98
  33. package/frontend/dist/js/ChatPage-D9dmPf4t.js +0 -281
  34. package/frontend/dist/js/GalleryPage-xkvacK1Y.js +0 -1
  35. package/frontend/dist/js/ModelsPage-CwUkhy1d.js +0 -1
  36. package/frontend/dist/js/PersonasPage-R8wVg6rE.js +0 -13
  37. package/frontend/dist/js/UserManagementPage-BbST0j99.js +0 -1
  38. package/frontend/dist/js/markdown-vendor-B0lXrrRZ.js +0 -22
  39. package/frontend/dist/js/react-vendor-l0sNRNKZ.js +0 -1
  40. package/frontend/dist/js/router-vendor-DdQhGl5t.js +0 -10
  41. package/frontend/dist/js/ui-vendor-C4ZcWovR.js +0 -177
  42. package/frontend/dist/js/utils-vendor-BFlGJDIj.js +0 -6
@@ -0,0 +1 @@
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};
@@ -0,0 +1 @@
1
+ import{c as e,u as t}from"./api-BrzQvj_g.js";export{e as personaApi,t as preferencesApi};
@@ -0,0 +1,3 @@
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};
@@ -0,0 +1,2 @@
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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./authStore-ge66S03D.js";export{e as useAuthStore};
@@ -0,0 +1,2 @@
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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./utils-vendor-MBozwMfr.js";export{e as default};
@@ -0,0 +1 @@
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};