libre-webui 0.34.1 → 0.34.2

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 (77) hide show
  1. package/backend/package.json +3 -3
  2. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  3. package/frontend/dist/artifact-runtime/framer-motion.js +3 -3
  4. package/frontend/dist/artifact-runtime/lucide-react.js +1 -1
  5. package/frontend/dist/assets/{index-CxFIHoRc.css → index-C59a0tht.css} +1 -1
  6. package/frontend/dist/assets/index-Cyi10ekV.js +43 -0
  7. package/frontend/dist/assets/{markdown-math-Ddr6Z9Sf.css → markdown-math-B3MBJsZb.css} +1 -1
  8. package/frontend/dist/index.html +21 -21
  9. package/frontend/dist/js/{ArtifactContainer-Cdrv0kJM.js → ArtifactContainer-CQjqR9G1.js} +1 -1
  10. package/frontend/dist/js/{ArtifactDemoPage-BcXPfD-W.js → ArtifactDemoPage-DbbqglMU.js} +1 -1
  11. package/frontend/dist/js/{ArtifactSandboxFrame-5qM5QELi.js → ArtifactSandboxFrame-DI2b9BW5.js} +1 -1
  12. package/frontend/dist/js/{ArtifactSlideOutPanel-tuGsj_HW.js → ArtifactSlideOutPanel-B_UX92CK.js} +1 -1
  13. package/frontend/dist/js/{AutomationModal-DL9kNzgL.js → AutomationModal-CNiy1Dxm.js} +1 -1
  14. package/frontend/dist/js/{AutomationsPage-BMtR7wCN.js → AutomationsPage-CeAsldk_.js} +1 -1
  15. package/frontend/dist/js/{AvatarUpload-DrfSzzOZ.js → AvatarUpload-xCWQm3_w.js} +1 -1
  16. package/frontend/dist/js/CalendarPage-Cwk0X00z.js +1 -0
  17. package/frontend/dist/js/ChannelsPage-BG3n4ElV.js +1 -0
  18. package/frontend/dist/js/ChatPage-wSRfAOeh.js +14 -0
  19. package/frontend/dist/js/{ConnectModels-flyZgito.js → ConnectModels-D7ZTGihA.js} +1 -1
  20. package/frontend/dist/js/{EvaluationsPage-DUntWRVo.js → EvaluationsPage-C795TI_6.js} +2 -2
  21. package/frontend/dist/js/{FirstTimeSetup-CMQ000Hh.js → FirstTimeSetup-C4C5GLjW.js} +1 -1
  22. package/frontend/dist/js/{GalleryPage-DNSo3Q0p.js → GalleryPage-DVWl3LaC.js} +1 -1
  23. package/frontend/dist/js/{HomePage-BOXsuk3g.js → HomePage-BljB9ZMN.js} +1 -1
  24. package/frontend/dist/js/{LanguageSwitcher-BIrE0C-N.js → LanguageSwitcher-BuS3i6u5.js} +1 -1
  25. package/frontend/dist/js/{LibreClawPage-D97-90n6.js → LibreClawPage-OD6iZtiy.js} +1 -1
  26. package/frontend/dist/js/{ModelManagerModals-DzEVkCuT.js → ModelManagerModals-DdL3LeGl.js} +1 -1
  27. package/frontend/dist/js/NotesPage-rqL0zS8z.js +3 -0
  28. package/frontend/dist/js/{PasswordStrengthMeter-DLQ5jaO_.js → PasswordStrengthMeter-H0Os6XbX.js} +1 -1
  29. package/frontend/dist/js/{PersonasPage-D8-4PyoM.js → PersonasPage-Babix8IA.js} +1 -1
  30. package/frontend/dist/js/{PluginUsagePage-CHcweo11.js → PluginUsagePage-CudDkMxy.js} +1 -1
  31. package/frontend/dist/js/RichMessageContent-B-U0EcyW.js +1 -0
  32. package/frontend/dist/js/{RichMessageContent-yWLHf4YS.js → RichMessageContent-CcKn_kcQ.js} +2 -2
  33. package/frontend/dist/js/SettingsModal-CXU60RIf.js +19 -0
  34. package/frontend/dist/js/{ShareDialog-J5zbwIWY.js → ShareDialog-CnU4ptx7.js} +1 -1
  35. package/frontend/dist/js/{SystemPage-CEjZpR5I.js → SystemPage-BzpTjdQY.js} +1 -1
  36. package/frontend/dist/js/{UserManagementPage-DdpcN4-Q.js → UserManagementPage-BHEMaK5a.js} +1 -1
  37. package/frontend/dist/js/{UserManagementPanel-Dhwk4I0s.js → UserManagementPanel-pbtLqF8X.js} +1 -1
  38. package/frontend/dist/js/{WhatsNewModal-5lCndkFc.js → WhatsNewModal-TuDrBWKj.js} +1 -1
  39. package/frontend/dist/js/WorkPage-DCeqm0BN.js +7 -0
  40. package/frontend/dist/js/api-BIVGtaZy.js +1 -0
  41. package/frontend/dist/js/{api-DEOxp9DN.js → api-CgnEj5Jc.js} +1 -1
  42. package/frontend/dist/js/{appNavigation-DToyRu19.js → appNavigation-DySHcEGS.js} +1 -1
  43. package/frontend/dist/js/{appStore-Bsxed1km.js → appStore-DrTsJPfh.js} +2 -2
  44. package/frontend/dist/js/appVersion-CAidQlBP.js +1 -0
  45. package/frontend/dist/js/{authStore-8w9Idb5o.js → authStore-CieFdk4S.js} +3 -3
  46. package/frontend/dist/js/authStore-GaOHAAsM.js +1 -0
  47. package/frontend/dist/js/{chatStore-lyGhYu24.js → chatStore-BvZkd8Un.js} +3 -3
  48. package/frontend/dist/js/{composerStyles-DqJg-2vE.js → composerStyles-BjJm_BgC.js} +1 -1
  49. package/frontend/dist/js/{config-B5SBQwEe.js → config-D7WLbWrW.js} +1 -1
  50. package/frontend/dist/js/{evaluationsApi-BvkmhMgQ.js → evaluationsApi-Dn-WNzzH.js} +1 -1
  51. package/frontend/dist/js/{i18next-ChipS_AK.js → i18next-Dq_6N9uy.js} +1 -1
  52. package/frontend/dist/js/markdownMath-BW8RNkEl.js +1 -0
  53. package/frontend/dist/js/{messageCodeStyles-DchDafYE.js → messageCodeStyles-C0pbLr0L.js} +2 -2
  54. package/frontend/dist/js/router-vendor-Epc3_KZ_.js +1 -0
  55. package/frontend/dist/js/{teamEventStream-C0_UAzCG.js → teamEventStream-CI_GSbae.js} +1 -1
  56. package/frontend/dist/js/{ui-BQojEu4t.js → ui-CgokQU6I.js} +2 -2
  57. package/frontend/dist/js/ui-vendor-Dt9hfsGD.js +177 -0
  58. package/frontend/dist/js/{useChat-CDllZR7C.js → useChat-DIGuMg5j.js} +1 -1
  59. package/frontend/dist/js/{workApi-0L8fBGq1.js → workApi-C-WfyZSs.js} +2 -2
  60. package/frontend/dist/js/workApi-CApikuye.js +1 -0
  61. package/package.json +5 -1
  62. package/frontend/dist/assets/index-Bv773ECu.js +0 -17
  63. package/frontend/dist/js/CalendarPage-BBkLlXa5.js +0 -1
  64. package/frontend/dist/js/ChannelsPage-C2KWU3sZ.js +0 -1
  65. package/frontend/dist/js/ChatPage-CWsAjCPP.js +0 -14
  66. package/frontend/dist/js/NotesPage-VBGqE4aV.js +0 -3
  67. package/frontend/dist/js/RichMessageContent-D7wqrY68.js +0 -1
  68. package/frontend/dist/js/SettingsModal-CxVt1ObR.js +0 -19
  69. package/frontend/dist/js/WorkPage-c8xOdYyy.js +0 -7
  70. package/frontend/dist/js/api-CHEuZtwG.js +0 -1
  71. package/frontend/dist/js/appVersion-CgCvuf4s.js +0 -1
  72. package/frontend/dist/js/authStore-DwmcyHDN.js +0 -1
  73. package/frontend/dist/js/markdownMath-CoDj1i7z.js +0 -1
  74. package/frontend/dist/js/router-vendor-CMbYTGdh.js +0 -1
  75. package/frontend/dist/js/ui-vendor-BvD5yGW1.js +0 -177
  76. package/frontend/dist/js/workApi-BjDBLsFh.js +0 -1
  77. /package/frontend/dist/js/{markdown-math-Dg-WB9ui.js → markdown-math-gtdBxaM5.js} +0 -0
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-CHEuZtwG.js","js/workApi-0L8fBGq1.js","js/logger-DnuT4jgB.js","js/config-B5SBQwEe.js","js/api-DEOxp9DN.js","js/imageGenModels-Dx_QMLJQ.js"])))=>i.map(i=>d[i]);
2
- import{a as e,i as t,o as n,t as r}from"./logger-DnuT4jgB.js";import{i,t as a}from"./utils-vendor-Bla8iz2s.js";var o=15e3,s=1440,c=(e,t,n)=>Math.min(Math.max(e,t),n),l=(e,t,n)=>e+(t-e)*n,u=(e,t,n)=>{let r=(t-e+540)%360-180;return r<-180&&(r+=360),(e+r*n+360)%360},d=(e,t,n)=>({h:u(e.h,t.h,n),s:l(e.s,t.s,n),l:l(e.l,t.l,n)}),f=(e,t,n)=>({h:e,s:t,l:n}),p=({h:e,s:t,l:n})=>{let r=c(t,0,100)/100,i=c(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),l=i-a/2,[u,d,f]=o<60?[a,s,0]:o<120?[s,a,0]:o<180?[0,a,s]:o<240?[0,s,a]:o<300?[s,0,a]:[a,0,s];return`#${[u,d,f].map(e=>c(Math.round((e+l)*255),0,255).toString(16).padStart(2,`0`)).join(``)}`},m=e=>e.getHours()*60+e.getMinutes()+e.getSeconds()/60,h=(e,t=!0)=>{let n=(Math.round(e)%s+s)%s,r=Math.floor(n/60),i=n%60,a=String(i).padStart(2,`0`);return t?`${r%12==0?12:r%12}:${a}${r<12?`am`:`pm`}`:`${String(r).padStart(2,`0`)}:${a}`},g=e=>{let t=new Date(e.getFullYear(),0,0);return Math.floor((e.getTime()-t.getTime())/864e5)},_=e=>{let t=new Date(e.getFullYear(),0,1).getTimezoneOffset(),n=new Date(e.getFullYear(),6,1).getTimezoneOffset();return e.getTimezoneOffset()<Math.max(t,n)};function v(e,t,n){let r=Math.PI/180,i=g(e),a=23.44*Math.sin(r*(360/365*(284+i))),o=n?n.latitude:45,l=c(n?(Math.sin(r*-.833)-Math.sin(r*o)*Math.sin(r*a))/(Math.cos(r*o)*Math.cos(r*a)):-Math.tan(r*o)*Math.tan(r*a),-1,1),u=2*Math.acos(l)/r/15*60,d;if(n){let t=2*Math.PI*(i-81)/364,r=9.87*Math.sin(2*t)-7.53*Math.cos(t)-1.5*Math.sin(t),a=-e.getTimezoneOffset();d=720-4*n.longitude-r+a,d=(d%s+s)%s}else d=(_(e)?13:12)*60;let f=d-u/2,p=d+u/2,h=t===void 0?m(e):(t%s+s)%s,v=h>=f&&h<=p,y,b;if(v)b=(h-f)/u,y=Math.sin(Math.PI*b);else{let e=s-u;b=(h>p?h-p:h+(s-p))/e,y=-Math.sin(Math.PI*b)}let x=29.530588853,S=((e.getTime()-Date.UTC(2e3,0,6,18,14))/864e5%x+x)%x/x;return{minutes:h,sunrise:f,sunset:p,solarNoon:d,altitude:y,isDay:v,progress:b,morning:h<d,moonPhase:S}}var y=[{at:-1,top:f(228,46,8),mid:f(224,40,13),horizon:f(214,34,19)},{at:-.35,top:f(229,44,11),mid:f(225,40,16),horizon:f(216,32,23)},{at:-.12,top:f(228,44,16),mid:f(222,40,26),horizon:f(212,44,36)},{at:0,top:f(220,42,34),mid:f(24,62,62),horizon:f(42,88,70)},{at:.22,top:f(206,58,62),mid:f(196,54,74),horizon:f(46,70,82)},{at:.6,top:f(206,70,58),mid:f(194,58,75),horizon:f(178,40,85)},{at:1,top:f(208,74,55),mid:f(196,60,72),horizon:f(168,36,87)}],b=[{at:-1,top:f(228,46,8),mid:f(224,40,13),horizon:f(214,34,19)},{at:-.35,top:f(232,44,11),mid:f(236,38,16),horizon:f(252,30,23)},{at:-.12,top:f(234,44,15),mid:f(258,40,26),horizon:f(300,34,34)},{at:0,top:f(226,40,30),mid:f(340,58,56),horizon:f(26,92,60)},{at:.22,top:f(210,56,60),mid:f(24,60,74),horizon:f(38,84,78)},{at:.6,top:f(206,68,58),mid:f(198,56,75),horizon:f(184,38,85)},{at:1,top:f(208,74,55),mid:f(196,60,72),horizon:f(168,36,87)}],x=(e,t)=>{let n=c(t,-1,1),r=0;for(;r<e.length-2&&n>e[r+1].at;)r+=1;let i=e[r],a=e[r+1],o=c((n-i.at)/(a.at-i.at),0,1);return{top:d(i.top,a.top,o),mid:d(i.mid,a.mid,o),horizon:d(i.horizon,a.horizon,o)}},S=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],ee={canvas:[96,1],sidebar:[94,1],surface:[98,.9],"surface-subtle":[93,1],"surface-raised":[99,.8],"surface-overlay":[100,0],"surface-inverse":[10,.7],ink:[12,.45],"ink-muted":[30,.35],"ink-subtle":[40,.4],"ink-inverse":[98,.4],line:[86,.8],"line-strong":[75,.65]},te={canvas:[7,.9],sidebar:[9,1],surface:[9,.9],"surface-subtle":[12,1],"surface-raised":[15,1],"surface-overlay":[18,1],"surface-inverse":[96,.35],ink:[95,.3],"ink-muted":[76,.35],"ink-subtle":[62,.4],"ink-inverse":[8,.45],line:[20,.8],"line-strong":[30,.65]},ne=[`25`,`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],re={25:99,50:97,100:94,200:88,300:80,400:56,500:38,600:36,700:27,800:18,900:11,950:6},ie={25:13,50:4,100:7,200:10,300:16,400:27,500:56,600:74,700:82,800:89,900:95,950:99};function ae(e,t,n={}){let r=v(e,t,n.location),i=x(r.morning?y:b,r.altitude),a=r.altitude<-.05,o=c(-r.altitude/.35,0,1),s=c(1-Math.abs(r.altitude-.08)/.3,0,1),l=n.weather??null,u=l?l.cloudCover:0,d=l&&(l.kind===`rain`||l.kind===`thunder`||l.kind===`snow`)?1:0,m=e=>({h:e.h,s:e.s*(1-.6*u),l:a?e.l-2*u:e.l-9*u-4*d+(l?.kind===`snow`?6:0)});l&&(i.top=m(i.top),i.mid=m(i.mid),i.horizon=m(i.horizon));let h=s*(1-.8*u),g=i.mid.h,_=(a?10+8*(1-o):8+10*h)*(1-.5*u),ae=a?te:ee,oe=a?-3*o:-3*c(1-r.altitude,0,1),se={};for(let e of S){let[t,n]=ae[e],r=e.startsWith(`ink`)||e===`surface-inverse`?t:c(t+oe,0,100);se[e]=p(f(g,_*n,r))}let ce={},le={};for(let e of ne)ce[e]=p(f(g,_*.8,re[e])),le[e]=p(f(g,_*.8,c(ie[e]+oe/2,0,100)));return{solar:r,isDark:a,weather:l,cover:u,sky:{top:p(i.top),mid:p(i.mid),horizon:p(i.horizon)},glow:p(f(i.mid.h,c(i.mid.s+10,0,100),a?62:70)),roles:se,gray:ce,dark:le,night:o,golden:h}}function oe(e){let{solar:t,night:n,golden:r}=e,i=(e,t)=>({x:8+84*c(e,0,1),y:74-62*c(Math.abs(t),0,1)}),{weather:a,cover:o}=e,s=1-.75*o,l=t.isDay?{...i(t.progress,t.altitude),visible:!0,warmth:r,dim:s}:{x:50,y:100,visible:!1,warmth:0,dim:s},u=t.isDay?{x:50,y:100,visible:!1,phase:t.moonPhase,dim:s}:{...i(t.progress,t.altitude),visible:!0,phase:t.moonPhase,dim:s},d=a?.kind??`none`,f=d===`drizzle`?.35:d===`rain`?.75:+(d===`thunder`),p=a?c(f+Math.min(a.precipitation,4)/8,0,1)*+(f>0):0,m=d===`snow`?c(.5+Math.min(a?.precipitation??0,4)/6,0,1):0,h=+(d===`fog`),g=t.isDay?.55+.25*r:.18;return{sun:l,moon:u,stars:n*(1-.92*o),cloudTint:e.sky.horizon,cloudOpacity:a?c(g*(.3+1.2*o),.05,.95):g,haze:c(1-Math.abs(t.altitude),0,1)+h*.6,rain:p,snow:m,fog:h,thunder:d===`thunder`,wind:a?c(.6+a.windSpeed/25,.6,3):1,weatherKind:d}}var se=1e4,ce=`https://api.open-meteo.com/v1/forecast`,le=e=>e===0?`clear`:e<=2?`partly`:e===3?`overcast`:e===45||e===48?`fog`:e>=51&&e<=57?`drizzle`:e>=61&&e<=67||e>=80&&e<=82?`rain`:e>=71&&e<=77||e===85||e===86?`snow`:e>=95?`thunder`:`partly`,ue=e=>Math.round(e*100)/100,de=e=>!!e&&typeof e.latitude==`number`&&typeof e.longitude==`number`&&Number.isFinite(e.latitude)&&Number.isFinite(e.longitude)&&Math.abs(e.latitude)<=90&&Math.abs(e.longitude)<=180;async function fe(e,t){let n=new URL(ce);n.searchParams.set(`latitude`,String(e.latitude)),n.searchParams.set(`longitude`,String(e.longitude)),n.searchParams.set(`current`,`weather_code,cloud_cover,precipitation,wind_speed_10m`),n.searchParams.set(`timezone`,`auto`);let r=new AbortController,i=()=>r.abort(t?.reason);t?.aborted?i():t?.addEventListener(`abort`,i,{once:!0});let a=setTimeout(()=>r.abort(new DOMException(`Weather request timed out`,`TimeoutError`)),se);try{let e=await fetch(n.toString(),{signal:r.signal});if(!e.ok)throw Error(`weather ${e.status}`);let t=(await e.json())?.current;if(!t||![t.weather_code,t.cloud_cover,t.precipitation,t.wind_speed_10m].every(Number.isFinite))throw Error(`weather missing current conditions`);return{kind:le(t.weather_code),cloudCover:Math.min(1,Math.max(0,t.cloud_cover/100)),precipitation:Math.max(0,t.precipitation),windSpeed:Math.max(0,t.wind_speed_10m),fetchedAt:Date.now()}}finally{clearTimeout(a),t?.removeEventListener(`abort`,i)}}var pe=`libre-webui-celestial`,me=()=>{if(typeof localStorage>`u`)return{};try{let e=localStorage.getItem(pe),t=e?JSON.parse(e):{};return{location:de(t.location)?t.location:null,weatherEnabled:t.weatherEnabled===!0}}catch{return{}}},he=e=>{if(!(typeof localStorage>`u`))try{localStorage.setItem(pe,JSON.stringify(e))}catch{}},C=i((e,t)=>{let n=me(),r=null,i=0,a=15e3,o=()=>{r?.controller.abort(),r=null,i=0,a=15e3};return{active:!1,palette:null,scene:null,previewMinutes:null,location:n.location??null,weatherEnabled:n.weatherEnabled??!1,weather:null,weatherStatus:`idle`,activate:()=>e({active:!0}),refresh:()=>{if(!t().active)return;let{previewMinutes:n,location:r,weatherEnabled:i,weather:a}=t(),o=ae(new Date,n??void 0,{location:r,weather:i&&r?a:null});e({palette:o,scene:oe(o)})},setPreviewMinutes:n=>{e({previewMinutes:n}),t().refresh()},setLocation:n=>{o();let r=de(n)?{latitude:ue(n.latitude),longitude:ue(n.longitude)}:null;e({location:r,weather:null,weatherStatus:`idle`}),he({location:r,weatherEnabled:t().weatherEnabled}),t().refresh(),r&&t().weatherEnabled&&t().maybeRefreshWeather(!0)},requestBrowserLocation:()=>new Promise(e=>{if(typeof navigator>`u`||!navigator.geolocation){e(!1);return}navigator.geolocation.getCurrentPosition(n=>{t().setLocation({latitude:n.coords.latitude,longitude:n.coords.longitude}),e(!0)},()=>e(!1),{enableHighAccuracy:!1,maximumAge:36e5,timeout:12e3})}),setWeatherEnabled:n=>{n||o(),e({weatherEnabled:n,weatherStatus:n?t().weatherStatus:`idle`}),he({location:t().location,weatherEnabled:n}),t().refresh(),n&&t().maybeRefreshWeather(!0)},maybeRefreshWeather:async(n=!1)=>{let{weatherEnabled:o,location:s,weather:c}=t();if(!o||!s)return;let l=c&&Date.now()-c.fetchedAt<9e5;if(!n&&(l||Date.now()<i))return;if(r)return r.promise;let u=new AbortController,d={controller:u,promise:fe(s,u.signal).then(n=>{r===d&&(i=0,a=15e3,e({weather:n,weatherStatus:`ready`}),t().refresh())}).catch(()=>{r===d&&(i=Date.now()+a,a=Math.min(a*2,3e5),e({weatherStatus:`error`}))}).finally(()=>{r===d&&(r=null)})};return r=d,e({weatherStatus:`loading`}),d.promise},clear:()=>{o(),e({active:!1,palette:null,scene:null,previewMinutes:null,weatherStatus:t().weather?`ready`:`idle`})}}}),ge=`dark`,_e=`blue`,ve=`#4176e6`,w=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#4176e6`,foreground:`#ffffff`},{id:`cyan`,label:`Cyan`,color:`#0e7490`,foreground:`#ffffff`},{id:`teal`,label:`Teal`,color:`#0f766e`,foreground:`#ffffff`},{id:`emerald`,label:`Emerald`,color:`#15803d`,foreground:`#ffffff`},{id:`amber`,label:`Coral`,color:`#ff7b52`,foreground:`#3d120c`},{id:`rose`,label:`Rose`,color:`#e11d48`,foreground:`#ffffff`},{id:`slate`,label:`Slate`,color:`#475569`,foreground:`#ffffff`}],ye=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],be=[`25`,...ye],T=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],xe={multiplier:.24,minimum:6,maximum:24},Se={multiplier:.36,minimum:6,maximum:32},Ce={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},we={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},Te={25:6,50:0,100:3,200:6,300:12,400:24,500:46,600:65,700:82,800:89,900:95,950:99},Ee={canvas:{lightness:96,saturationFactor:1},sidebar:{lightness:94,saturationFactor:1},surface:{lightness:98,saturationFactor:.9},"surface-subtle":{lightness:93,saturationFactor:1},"surface-raised":{lightness:99,saturationFactor:.8},"surface-overlay":{lightness:100,saturationFactor:0},"surface-inverse":{lightness:10,saturationFactor:.7},ink:{lightness:10,saturationFactor:.45},"ink-muted":{lightness:38,saturationFactor:.35},"ink-subtle":{lightness:54,saturationFactor:.4},"ink-inverse":{lightness:98,saturationFactor:.4},line:{lightness:86,saturationFactor:.8},"line-strong":{lightness:75,saturationFactor:.65}},De={canvas:{lightness:5,saturationFactor:.9},sidebar:{lightness:8,saturationFactor:1},surface:{lightness:7,saturationFactor:.9},"surface-subtle":{lightness:9,saturationFactor:1},"surface-raised":{lightness:11,saturationFactor:1},"surface-overlay":{lightness:13,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:7,saturationFactor:.45},line:{lightness:18,saturationFactor:.8},"line-strong":{lightness:28,saturationFactor:.65}},Oe={canvas:{lightness:0,saturationFactor:0},sidebar:{lightness:0,saturationFactor:0},surface:{lightness:0,saturationFactor:0},"surface-subtle":{lightness:4,saturationFactor:1},"surface-raised":{lightness:7,saturationFactor:1},"surface-overlay":{lightness:10,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:0,saturationFactor:0},line:{lightness:11,saturationFactor:.8},"line-strong":{lightness:20,saturationFactor:.65}},ke={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#edf3fe`,100:`#e4edfd`,200:`#d3e2ff`,300:`#b7c8fe`,400:`#679efe`,500:`#4176e6`,600:`#4868b2`,700:`#2f4c8f`,800:`#34415b`,900:`#283142`,950:`#1e2635`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fff5f1`,100:`#ffe8df`,200:`#ffd0c2`,300:`#ffae96`,400:`#ff9273`,500:`#ff7b52`,600:`#c94a27`,700:`#a83a1f`,800:`#87301f`,900:`#70291e`,950:`#3d120c`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},Ae={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},E=(e,t,n)=>Math.min(Math.max(e,t),n),D=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},O=e=>{let t=D(e)||`#4176e6`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},je=(e,t,n)=>`#${[e,t,n].map(e=>E(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,Me=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},k=(e,t,n)=>{let r=E(t,0,100)/100,i=E(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),je((l+c)*255,(u+c)*255,(d+c)*255)},Ne=e=>{let{r:t,g:n,b:r}=O(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},Pe=(e,t)=>{let n=Ne(e),r=Ne(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},Fe=(e,t,n)=>{let r=n,i=k(e,t,r);for(;Pe(`#ffffff`,i)<4.5&&r>12;)r-=2,i=k(e,t,r);return i},Ie=e=>{let{r:t,g:n,b:r}=O(D(e)||`#4176e6`),{h:i,s:a}=Me(t,n,r),o=a<8?a:E(a,42,88);return ye.reduce((e,t)=>{let n=Ae[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?Fe(i,r,n):k(i,r,n),e},{})},A=e=>{let t=e?.mode===`light`?`light`:e?.mode===`amoled`?`amoled`:e?.mode===`celestial`?`celestial`:ge,n=e?.accent===`custom`?`custom`:e?.accent,r=w.some(e=>e.id===n)?n:_e,i=D(e?.customAccent)||`#4176e6`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},Le=()=>A({mode:ge}),j=[`light`,`dark`,`amoled`,`celestial`],Re=e=>j[(j.indexOf(e)+1)%j.length],ze=`libre-webui-instance-theme`,Be=()=>{if(typeof localStorage>`u`)return null;try{let e=localStorage.getItem(ze);if(!e)return null;let t=JSON.parse(e);return t&&typeof t==`object`?A(t):null}catch{return null}},Ve=e=>{if(!(typeof localStorage>`u`))try{localStorage.setItem(ze,JSON.stringify(A(e)))}catch{}},He=()=>Be()??Le(),Ue=e=>{let t=A(e);return t.accent===`custom`?Ie(t.customAccent):ke[t.accent||`blue`]},We=e=>{let t=A(e);return t.accent===`custom`?t.customAccent||`#4176e6`:w.find(e=>e.id===t.accent)?.color||`#4176e6`},Ge=(e,t,n)=>t===0||e<8?e*t:E(e*n.multiplier*t,n.minimum*t,n.maximum*t),Ke=(e,t,n,r)=>be.reduce((i,a)=>(i[a]=k(e,Ge(t,1,r),n[a]),i),{}),qe=(e,t,n,r)=>T.reduce((i,a)=>{let o=n[a];return i[a]=k(e,Ge(t,o.saturationFactor,r),o.lightness),i},{}),M=(e,t,n)=>{let{r,g:i,b:a}=O(n);e.style.setProperty(t,`${r} ${i} ${a}`)},Je=e=>{for(let t of be)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of T)e.style.removeProperty(`--color-${t}`)},Ye=(e,t)=>{let{r:n,g:r,b:i}=O(We(t)),{h:a,s:o}=Me(n,r,i),s=t.mode===`light`?Se:xe,c=Ke(a,o,Ce,s),l=Ke(a,o,t.mode===`amoled`?Te:we,xe),u=qe(a,o,t.mode===`light`?Ee:t.mode===`amoled`?Oe:De,s);for(let t of be)M(e,`--color-gray-${t}`,c[t]),M(e,`--color-dark-${t}`,l[t]);for(let t of T)M(e,`--color-${t}`,u[t])},N=null,P=null,F=null,Xe=()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`);if(e.matches)return;let t=document.documentElement,n=new Date,r=n.getHours()*60+n.getMinutes()+n.getSeconds()/60,i=performance.now();F&&cancelAnimationFrame(F),t.setAttribute(`data-sweep`,`true`);let a=()=>{F=null,C.getState().setPreviewMinutes(null),I(),t.removeAttribute(`data-sweep`)},o=t=>{if(e.matches){a();return}let n=Math.min(1,(t-i)/3200),s=1-(1-n)**3;C.getState().setPreviewMinutes(((r-360*(1-s))%1440+1440)%1440),I(),n<1?F=requestAnimationFrame(o):a()};F=requestAnimationFrame(o)},Ze=()=>{N&&=(clearInterval(N),null),typeof document<`u`&&document.removeEventListener(`visibilitychange`,Qe),C.getState().clear()};function Qe(){document.visibilityState===`visible`&&I()}var I=()=>{if(typeof document>`u`)return;let e=C.getState();e.maybeRefreshWeather(),e.refresh();let t=C.getState().palette;if(!t)return;let n=document.documentElement;n.classList.toggle(`dark`,t.isDark),n.style.colorScheme=t.isDark?`dark`:`light`;for(let e of S)M(n,`--color-${e}`,t.roles[e]);for(let e of ne)M(n,`--color-gray-${e}`,t.gray[e]),M(n,`--color-dark-${e}`,t.dark[e]);n.style.setProperty(`--celestial-sky-top`,t.sky.top),n.style.setProperty(`--celestial-sky-mid`,t.sky.mid),n.style.setProperty(`--celestial-sky-horizon`,t.sky.horizon),n.style.setProperty(`--celestial-glow`,t.glow),n.style.setProperty(`--celestial-night`,String(t.night))},$e=()=>{typeof document>`u`||(C.getState().activate(),I(),N||(N=setInterval(I,o),document.addEventListener(`visibilitychange`,Qe)))},et=e=>{F&&typeof document<`u`&&(cancelAnimationFrame(F),F=null,document.documentElement.removeAttribute(`data-sweep`)),C.getState().setPreviewMinutes(e),N&&I()},L=e=>{if(typeof document>`u`)return;let t=A(e),n=document.documentElement,r=Ue(t);n.classList.remove(`dark`,`amoled`,`ophelia`,`celestial`),t.mode!==`light`&&t.mode!==`celestial`&&n.classList.add(`dark`),t.mode===`amoled`&&n.classList.add(`amoled`),t.mode===`celestial`&&n.classList.add(`celestial`),n.style.colorScheme=t.mode===`light`?`light`:`dark`,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of ye){let{r:t,g:i,b:a}=O(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}let i=t.mode===`celestial`&&P!==null&&P!==`celestial`;if(P=t.mode,t.mode===`celestial`){$e(),i&&Xe();return}F&&(cancelAnimationFrame(F),F=null,n.removeAttribute(`data-sweep`)),Ze();for(let e of[`--celestial-sky-top`,`--celestial-sky-mid`,`--celestial-sky-horizon`,`--celestial-glow`,`--celestial-night`])n.style.removeProperty(e);t.adaptToAccent?Ye(n,t):Je(n)},R={enabled:!1,imageUrl:``,blurAmount:10,opacity:.6,effect:`dither`},tt=(e,t,n)=>typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(0,e)):t;function z(e){return{enabled:e?.enabled===!0,imageUrl:typeof e?.imageUrl==`string`?e.imageUrl:``,blurAmount:tt(e?.blurAmount,10,30),opacity:tt(e?.opacity,.6,1),effect:e?.effect===`original`||e?.effect===`blur`?e.effect:`dither`}}var nt=r(`store:app-store`),rt=250,it=250,B=null,at=0,ot=0,V=0,H=0,U={...R},W=0,G=null,K=null,q=null,J=null,Y=null,st=()=>typeof localStorage>`u`?null:localStorage.getItem(`auth-token`),ct=()=>({epoch:at,token:st()}),X=e=>e.epoch===at&&e.token===st(),Z=()=>new DOMException(`Wallpaper operation superseded`,`AbortError`),lt=()=>{W+=1,G?.abort(),G=null,K?.(),K=null},ut=e=>$.setState(t=>({backgroundImage:e.imageUrl||null,preferences:{...t.preferences,backgroundSettings:e}})),Q=(e,t)=>{let n=e.waiters.splice(0);for(let e of n)t?e.reject(t):e.resolve()},dt=()=>{q&&clearTimeout(q),q=null,J&&Q(J,Z()),Y&&Q(Y,Z()),J=null,Y=null,lt()},ft=async()=>{if(Y||!J)return;let e=J;J=null,Y=e;try{let{preferencesApi:t}=await n(async()=>{let{preferencesApi:e}=await import(`./api-CHEuZtwG.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!X(e.scope))throw Z();let r=await t.updatePreferences({backgroundSettings:e.settings});if(!X(e.scope))throw Z();if(!r.success)throw Error(r.error||`Failed to save wallpaper`);e.revision>=H&&(U=e.settings,H=e.revision),Q(e)}catch(t){X(e.scope)&&e.revision===V&&!J&&ut(U),Q(e,t)}finally{Y===e&&(Y=null,J&&!q&&ft())}},pt=()=>{q&&clearTimeout(q),q=setTimeout(()=>{q=null,ft()},it)},$=i()(a((r,i)=>({theme:He(),themeSyncPending:!1,themeSource:`default`,applyInstanceTheme:e=>{if(!e)return;let t=A(e);Ve(t),i().themeSource!==`user`&&i().setTheme(t)},syncThemePreference:async t=>{if(B&&=(clearTimeout(B),null),!(!e()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:e}=await n(async()=>{let{preferencesApi:e}=await import(`./api-CHEuZtwG.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!(await e.updatePreferences({theme:t})).success){nt.warn(`Failed to save theme preference to backend`);return}let a=A(i().theme),o=A(t);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?r({themeSyncPending:!1}):(r({themeSyncPending:!0}),i().scheduleThemePreferenceSync())}catch(e){nt.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{B&&clearTimeout(B),B=setTimeout(()=>{B=null,i().syncThemePreference(A(i().theme))},rt)},setTheme:e=>{let t=A(e);r(e=>({theme:t,preferences:{...e.preferences,theme:t}})),L(t)},updateTheme:e=>{let t=A(e);i().setTheme(t),r({themeSyncPending:!0,themeSource:`user`}),i().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=i().theme;i().updateTheme({...e,mode:Re(e.mode)})},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,artifactPanelWidth:600,artifactPanelResizing:!1,openArtifactPanel:e=>r({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>r({artifactPanelOpen:!1,artifactPanelArtifact:null}),setArtifactPanelWidth:e=>r({artifactPanelWidth:e}),setArtifactPanelResizing:e=>r({artifactPanelResizing:e}),preferences:{theme:Le(),defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,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:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{...R}},setPreferences:e=>{let{backgroundSettings:t,...n}=e,i=n.theme?A(n.theme):null;r(e=>({...i&&{theme:i,themeSource:`user`},preferences:{...e.preferences,...n,...i&&{theme:i}}})),i&&L(i)},loadPreferences:async()=>{let e=ct(),t=++ot,r=V,a=!!(J||Y);try{let{preferencesApi:o}=await n(async()=>{let{preferencesApi:e}=await import(`./api-CHEuZtwG.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!X(e))return;let s=await o.getPreferences();if(!X(e)||t!==ot)return;if(s.success&&s.data){let e={...s.data};if(!a&&r===V&&!J&&!Y){let t=z(e.backgroundSettings);U=t,H=++V,ut(t)}let t=i().themeSyncPending?A(i().theme):null;i().setPreferences(t?{...e,theme:t}:e),t&&i().syncThemePreference(t)}}catch(t){X(e)&&nt.warn(`Failed to load preferences from backend:`,t)}},isGenerating:!1,setIsGenerating:e=>r({isGenerating:e}),pinnedAdminShortcuts:[],toggleAdminShortcut:e=>r(t=>({pinnedAdminShortcuts:t.pinnedAdminShortcuts.includes(e)?t.pinnedAdminShortcuts.filter(t=>t!==e):[...t.pinnedAdminShortcuts,e]})),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>r({hasSeenSettingsNotification:!0}),isDemoMode:e(),demoConfig:t(),setDemoMode:e=>{r({isDemoMode:e,demoConfig:t()})},backgroundImage:null,updateBackgroundSettings:e=>{(`imageUrl`in e||e.enabled===!1)&&lt();let t=z({...i().preferences.backgroundSettings,...e}),n=ct(),r=++V;return ut(t),new Promise((e,i)=>{let a=J&&X(J.scope)?J.waiters:[];J&&a!==J.waiters&&Q(J,Z()),J={scope:n,revision:r,settings:t,waiters:[...a,{resolve:e,reject:i}]},pt()})},setBackgroundImage:e=>i().updateBackgroundSettings({imageUrl:e||``,enabled:!!e}),uploadBackgroundImage:e=>{lt();let t=ct(),n=W,r=new FileReader;return G=r,new Promise((a,o)=>{r.onabort=()=>o(Z()),r.onerror=()=>{G===r&&(G=null),o(r.error||Error(`Failed to read wallpaper`))},r.onload=async()=>{if(G===r&&(G=null),!X(t)||n!==W){o(Z());return}let e=r.result;if(typeof e!=`string`){o(Error(`Failed to read wallpaper`));return}try{if(await new Promise((t,n)=>{let r=new Image,i=!1,a=e=>{i||(i=!0,r.onload=null,r.onerror=null,K===o&&(K=null),r.src=``,e?n(e):t())},o=()=>a(Z());K=o,r.onload=()=>a(r.naturalWidth>0&&r.naturalHeight>0?void 0:Error(`Wallpaper file is not a valid image`)),r.onerror=()=>a(Error(`Wallpaper file is not a valid image`)),r.src=e}),!X(t)||n!==W||(await i().setBackgroundImage(e),!X(t)||i().preferences.backgroundSettings?.imageUrl!==e))throw Z();a()}catch(e){o(e)}},r.readAsDataURL(e)})},removeBackgroundImage:()=>i().updateBackgroundSettings({enabled:!1,imageUrl:``}),clearUserState:()=>{at+=1,ot+=1,V+=1,H=V,U={...R},dt();let e=He();B&&=(clearTimeout(B),null),r({theme:e,themeSyncPending:!1,themeSource:`default`,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,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:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{...R}}}),L(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(A(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,themeSyncPending:e.themeSyncPending,themeSource:e.themeSource,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,artifactPanelWidth:e.artifactPanelWidth,pinnedAdminShortcuts:e.pinnedAdminShortcuts,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=$.getState();t(e)})();export{ve as a,A as c,de as d,h as f,_e as i,et as l,z as n,Re as o,ae as p,w as r,We as s,$ as t,C as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/api-BIVGtaZy.js","js/workApi-C-WfyZSs.js","js/logger-DnuT4jgB.js","js/config-D7WLbWrW.js","js/api-CgnEj5Jc.js","js/imageGenModels-Dx_QMLJQ.js"])))=>i.map(i=>d[i]);
2
+ import{a as e,i as t,o as n,t as r}from"./logger-DnuT4jgB.js";import{i,t as a}from"./utils-vendor-Bla8iz2s.js";var o=15e3,s=1440,c=(e,t,n)=>Math.min(Math.max(e,t),n),l=(e,t,n)=>e+(t-e)*n,u=(e,t,n)=>{let r=(t-e+540)%360-180;return r<-180&&(r+=360),(e+r*n+360)%360},d=(e,t,n)=>({h:u(e.h,t.h,n),s:l(e.s,t.s,n),l:l(e.l,t.l,n)}),f=(e,t,n)=>({h:e,s:t,l:n}),p=({h:e,s:t,l:n})=>{let r=c(t,0,100)/100,i=c(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),l=i-a/2,[u,d,f]=o<60?[a,s,0]:o<120?[s,a,0]:o<180?[0,a,s]:o<240?[0,s,a]:o<300?[s,0,a]:[a,0,s];return`#${[u,d,f].map(e=>c(Math.round((e+l)*255),0,255).toString(16).padStart(2,`0`)).join(``)}`},m=e=>e.getHours()*60+e.getMinutes()+e.getSeconds()/60,h=(e,t=!0)=>{let n=(Math.round(e)%s+s)%s,r=Math.floor(n/60),i=n%60,a=String(i).padStart(2,`0`);return t?`${r%12==0?12:r%12}:${a}${r<12?`am`:`pm`}`:`${String(r).padStart(2,`0`)}:${a}`},g=e=>{let t=new Date(e.getFullYear(),0,0);return Math.floor((e.getTime()-t.getTime())/864e5)},_=e=>{let t=new Date(e.getFullYear(),0,1).getTimezoneOffset(),n=new Date(e.getFullYear(),6,1).getTimezoneOffset();return e.getTimezoneOffset()<Math.max(t,n)};function v(e,t,n){let r=Math.PI/180,i=g(e),a=23.44*Math.sin(r*(360/365*(284+i))),o=n?n.latitude:45,l=c(n?(Math.sin(r*-.833)-Math.sin(r*o)*Math.sin(r*a))/(Math.cos(r*o)*Math.cos(r*a)):-Math.tan(r*o)*Math.tan(r*a),-1,1),u=2*Math.acos(l)/r/15*60,d;if(n){let t=2*Math.PI*(i-81)/364,r=9.87*Math.sin(2*t)-7.53*Math.cos(t)-1.5*Math.sin(t),a=-e.getTimezoneOffset();d=720-4*n.longitude-r+a,d=(d%s+s)%s}else d=(_(e)?13:12)*60;let f=d-u/2,p=d+u/2,h=t===void 0?m(e):(t%s+s)%s,v=h>=f&&h<=p,y,b;if(v)b=(h-f)/u,y=Math.sin(Math.PI*b);else{let e=s-u;b=(h>p?h-p:h+(s-p))/e,y=-Math.sin(Math.PI*b)}let x=29.530588853,S=((e.getTime()-Date.UTC(2e3,0,6,18,14))/864e5%x+x)%x/x;return{minutes:h,sunrise:f,sunset:p,solarNoon:d,altitude:y,isDay:v,progress:b,morning:h<d,moonPhase:S}}var y=[{at:-1,top:f(228,46,8),mid:f(224,40,13),horizon:f(214,34,19)},{at:-.35,top:f(229,44,11),mid:f(225,40,16),horizon:f(216,32,23)},{at:-.12,top:f(228,44,16),mid:f(222,40,26),horizon:f(212,44,36)},{at:0,top:f(220,42,34),mid:f(24,62,62),horizon:f(42,88,70)},{at:.22,top:f(206,58,62),mid:f(196,54,74),horizon:f(46,70,82)},{at:.6,top:f(206,70,58),mid:f(194,58,75),horizon:f(178,40,85)},{at:1,top:f(208,74,55),mid:f(196,60,72),horizon:f(168,36,87)}],b=[{at:-1,top:f(228,46,8),mid:f(224,40,13),horizon:f(214,34,19)},{at:-.35,top:f(232,44,11),mid:f(236,38,16),horizon:f(252,30,23)},{at:-.12,top:f(234,44,15),mid:f(258,40,26),horizon:f(300,34,34)},{at:0,top:f(226,40,30),mid:f(340,58,56),horizon:f(26,92,60)},{at:.22,top:f(210,56,60),mid:f(24,60,74),horizon:f(38,84,78)},{at:.6,top:f(206,68,58),mid:f(198,56,75),horizon:f(184,38,85)},{at:1,top:f(208,74,55),mid:f(196,60,72),horizon:f(168,36,87)}],x=(e,t)=>{let n=c(t,-1,1),r=0;for(;r<e.length-2&&n>e[r+1].at;)r+=1;let i=e[r],a=e[r+1],o=c((n-i.at)/(a.at-i.at),0,1);return{top:d(i.top,a.top,o),mid:d(i.mid,a.mid,o),horizon:d(i.horizon,a.horizon,o)}},S=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],ee={canvas:[96,1],sidebar:[94,1],surface:[98,.9],"surface-subtle":[93,1],"surface-raised":[99,.8],"surface-overlay":[100,0],"surface-inverse":[10,.7],ink:[12,.45],"ink-muted":[30,.35],"ink-subtle":[40,.4],"ink-inverse":[98,.4],line:[86,.8],"line-strong":[75,.65]},te={canvas:[7,.9],sidebar:[9,1],surface:[9,.9],"surface-subtle":[12,1],"surface-raised":[15,1],"surface-overlay":[18,1],"surface-inverse":[96,.35],ink:[95,.3],"ink-muted":[76,.35],"ink-subtle":[62,.4],"ink-inverse":[8,.45],line:[20,.8],"line-strong":[30,.65]},ne=[`25`,`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],re={25:99,50:97,100:94,200:88,300:80,400:56,500:38,600:36,700:27,800:18,900:11,950:6},ie={25:13,50:4,100:7,200:10,300:16,400:27,500:56,600:74,700:82,800:89,900:95,950:99};function ae(e,t,n={}){let r=v(e,t,n.location),i=x(r.morning?y:b,r.altitude),a=r.altitude<-.05,o=c(-r.altitude/.35,0,1),s=c(1-Math.abs(r.altitude-.08)/.3,0,1),l=n.weather??null,u=l?l.cloudCover:0,d=l&&(l.kind===`rain`||l.kind===`thunder`||l.kind===`snow`)?1:0,m=e=>({h:e.h,s:e.s*(1-.6*u),l:a?e.l-2*u:e.l-9*u-4*d+(l?.kind===`snow`?6:0)});l&&(i.top=m(i.top),i.mid=m(i.mid),i.horizon=m(i.horizon));let h=s*(1-.8*u),g=i.mid.h,_=(a?10+8*(1-o):8+10*h)*(1-.5*u),ae=a?te:ee,oe=a?-3*o:-3*c(1-r.altitude,0,1),se={};for(let e of S){let[t,n]=ae[e],r=e.startsWith(`ink`)||e===`surface-inverse`?t:c(t+oe,0,100);se[e]=p(f(g,_*n,r))}let ce={},le={};for(let e of ne)ce[e]=p(f(g,_*.8,re[e])),le[e]=p(f(g,_*.8,c(ie[e]+oe/2,0,100)));return{solar:r,isDark:a,weather:l,cover:u,sky:{top:p(i.top),mid:p(i.mid),horizon:p(i.horizon)},glow:p(f(i.mid.h,c(i.mid.s+10,0,100),a?62:70)),roles:se,gray:ce,dark:le,night:o,golden:h}}function oe(e){let{solar:t,night:n,golden:r}=e,i=(e,t)=>({x:8+84*c(e,0,1),y:74-62*c(Math.abs(t),0,1)}),{weather:a,cover:o}=e,s=1-.75*o,l=t.isDay?{...i(t.progress,t.altitude),visible:!0,warmth:r,dim:s}:{x:50,y:100,visible:!1,warmth:0,dim:s},u=t.isDay?{x:50,y:100,visible:!1,phase:t.moonPhase,dim:s}:{...i(t.progress,t.altitude),visible:!0,phase:t.moonPhase,dim:s},d=a?.kind??`none`,f=d===`drizzle`?.35:d===`rain`?.75:+(d===`thunder`),p=a?c(f+Math.min(a.precipitation,4)/8,0,1)*+(f>0):0,m=d===`snow`?c(.5+Math.min(a?.precipitation??0,4)/6,0,1):0,h=+(d===`fog`),g=t.isDay?.55+.25*r:.18;return{sun:l,moon:u,stars:n*(1-.92*o),cloudTint:e.sky.horizon,cloudOpacity:a?c(g*(.3+1.2*o),.05,.95):g,haze:c(1-Math.abs(t.altitude),0,1)+h*.6,rain:p,snow:m,fog:h,thunder:d===`thunder`,wind:a?c(.6+a.windSpeed/25,.6,3):1,weatherKind:d}}var se=1e4,ce=`https://api.open-meteo.com/v1/forecast`,le=e=>e===0?`clear`:e<=2?`partly`:e===3?`overcast`:e===45||e===48?`fog`:e>=51&&e<=57?`drizzle`:e>=61&&e<=67||e>=80&&e<=82?`rain`:e>=71&&e<=77||e===85||e===86?`snow`:e>=95?`thunder`:`partly`,ue=e=>Math.round(e*100)/100,de=e=>!!e&&typeof e.latitude==`number`&&typeof e.longitude==`number`&&Number.isFinite(e.latitude)&&Number.isFinite(e.longitude)&&Math.abs(e.latitude)<=90&&Math.abs(e.longitude)<=180;async function fe(e,t){let n=new URL(ce);n.searchParams.set(`latitude`,String(e.latitude)),n.searchParams.set(`longitude`,String(e.longitude)),n.searchParams.set(`current`,`weather_code,cloud_cover,precipitation,wind_speed_10m`),n.searchParams.set(`timezone`,`auto`);let r=new AbortController,i=()=>r.abort(t?.reason);t?.aborted?i():t?.addEventListener(`abort`,i,{once:!0});let a=setTimeout(()=>r.abort(new DOMException(`Weather request timed out`,`TimeoutError`)),se);try{let e=await fetch(n.toString(),{signal:r.signal});if(!e.ok)throw Error(`weather ${e.status}`);let t=(await e.json())?.current;if(!t||![t.weather_code,t.cloud_cover,t.precipitation,t.wind_speed_10m].every(Number.isFinite))throw Error(`weather missing current conditions`);return{kind:le(t.weather_code),cloudCover:Math.min(1,Math.max(0,t.cloud_cover/100)),precipitation:Math.max(0,t.precipitation),windSpeed:Math.max(0,t.wind_speed_10m),fetchedAt:Date.now()}}finally{clearTimeout(a),t?.removeEventListener(`abort`,i)}}var pe=`libre-webui-celestial`,me=()=>{if(typeof localStorage>`u`)return{};try{let e=localStorage.getItem(pe),t=e?JSON.parse(e):{};return{location:de(t.location)?t.location:null,weatherEnabled:t.weatherEnabled===!0}}catch{return{}}},he=e=>{if(!(typeof localStorage>`u`))try{localStorage.setItem(pe,JSON.stringify(e))}catch{}},C=i((e,t)=>{let n=me(),r=null,i=0,a=15e3,o=()=>{r?.controller.abort(),r=null,i=0,a=15e3};return{active:!1,palette:null,scene:null,previewMinutes:null,location:n.location??null,weatherEnabled:n.weatherEnabled??!1,weather:null,weatherStatus:`idle`,activate:()=>e({active:!0}),refresh:()=>{if(!t().active)return;let{previewMinutes:n,location:r,weatherEnabled:i,weather:a}=t(),o=ae(new Date,n??void 0,{location:r,weather:i&&r?a:null});e({palette:o,scene:oe(o)})},setPreviewMinutes:n=>{e({previewMinutes:n}),t().refresh()},setLocation:n=>{o();let r=de(n)?{latitude:ue(n.latitude),longitude:ue(n.longitude)}:null;e({location:r,weather:null,weatherStatus:`idle`}),he({location:r,weatherEnabled:t().weatherEnabled}),t().refresh(),r&&t().weatherEnabled&&t().maybeRefreshWeather(!0)},requestBrowserLocation:()=>new Promise(e=>{if(typeof navigator>`u`||!navigator.geolocation){e(!1);return}navigator.geolocation.getCurrentPosition(n=>{t().setLocation({latitude:n.coords.latitude,longitude:n.coords.longitude}),e(!0)},()=>e(!1),{enableHighAccuracy:!1,maximumAge:36e5,timeout:12e3})}),setWeatherEnabled:n=>{n||o(),e({weatherEnabled:n,weatherStatus:n?t().weatherStatus:`idle`}),he({location:t().location,weatherEnabled:n}),t().refresh(),n&&t().maybeRefreshWeather(!0)},maybeRefreshWeather:async(n=!1)=>{let{weatherEnabled:o,location:s,weather:c}=t();if(!o||!s)return;let l=c&&Date.now()-c.fetchedAt<9e5;if(!n&&(l||Date.now()<i))return;if(r)return r.promise;let u=new AbortController,d={controller:u,promise:fe(s,u.signal).then(n=>{r===d&&(i=0,a=15e3,e({weather:n,weatherStatus:`ready`}),t().refresh())}).catch(()=>{r===d&&(i=Date.now()+a,a=Math.min(a*2,3e5),e({weatherStatus:`error`}))}).finally(()=>{r===d&&(r=null)})};return r=d,e({weatherStatus:`loading`}),d.promise},clear:()=>{o(),e({active:!1,palette:null,scene:null,previewMinutes:null,weatherStatus:t().weather?`ready`:`idle`})}}}),ge=`dark`,_e=`blue`,ve=`#4176e6`,w=[{id:`violet`,label:`Violet`,color:`#7c3aed`,foreground:`#ffffff`},{id:`blue`,label:`Blue`,color:`#4176e6`,foreground:`#ffffff`},{id:`cyan`,label:`Cyan`,color:`#0e7490`,foreground:`#ffffff`},{id:`teal`,label:`Teal`,color:`#0f766e`,foreground:`#ffffff`},{id:`emerald`,label:`Emerald`,color:`#15803d`,foreground:`#ffffff`},{id:`amber`,label:`Coral`,color:`#ff7b52`,foreground:`#3d120c`},{id:`rose`,label:`Rose`,color:`#e11d48`,foreground:`#ffffff`},{id:`slate`,label:`Slate`,color:`#475569`,foreground:`#ffffff`}],ye=[`50`,`100`,`200`,`300`,`400`,`500`,`600`,`700`,`800`,`900`,`950`],be=[`25`,...ye],T=[`canvas`,`sidebar`,`surface`,`surface-subtle`,`surface-raised`,`surface-overlay`,`surface-inverse`,`ink`,`ink-muted`,`ink-subtle`,`ink-inverse`,`line`,`line-strong`],xe={multiplier:.24,minimum:6,maximum:24},Se={multiplier:.36,minimum:6,maximum:32},Ce={25:99,50:97,100:94,200:88,300:80,400:66,500:48,600:36,700:27,800:18,900:11,950:6},we={25:13,50:4,100:7,200:10,300:16,400:27,500:46,600:65,700:82,800:89,900:95,950:99},Te={25:6,50:0,100:3,200:6,300:12,400:24,500:46,600:65,700:82,800:89,900:95,950:99},Ee={canvas:{lightness:96,saturationFactor:1},sidebar:{lightness:94,saturationFactor:1},surface:{lightness:98,saturationFactor:.9},"surface-subtle":{lightness:93,saturationFactor:1},"surface-raised":{lightness:99,saturationFactor:.8},"surface-overlay":{lightness:100,saturationFactor:0},"surface-inverse":{lightness:10,saturationFactor:.7},ink:{lightness:10,saturationFactor:.45},"ink-muted":{lightness:38,saturationFactor:.35},"ink-subtle":{lightness:54,saturationFactor:.4},"ink-inverse":{lightness:98,saturationFactor:.4},line:{lightness:86,saturationFactor:.8},"line-strong":{lightness:75,saturationFactor:.65}},De={canvas:{lightness:5,saturationFactor:.9},sidebar:{lightness:8,saturationFactor:1},surface:{lightness:7,saturationFactor:.9},"surface-subtle":{lightness:9,saturationFactor:1},"surface-raised":{lightness:11,saturationFactor:1},"surface-overlay":{lightness:13,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:7,saturationFactor:.45},line:{lightness:18,saturationFactor:.8},"line-strong":{lightness:28,saturationFactor:.65}},Oe={canvas:{lightness:0,saturationFactor:0},sidebar:{lightness:0,saturationFactor:0},surface:{lightness:0,saturationFactor:0},"surface-subtle":{lightness:4,saturationFactor:1},"surface-raised":{lightness:7,saturationFactor:1},"surface-overlay":{lightness:10,saturationFactor:1},"surface-inverse":{lightness:96,saturationFactor:.35},ink:{lightness:96,saturationFactor:.3},"ink-muted":{lightness:67,saturationFactor:.35},"ink-subtle":{lightness:48,saturationFactor:.4},"ink-inverse":{lightness:0,saturationFactor:0},line:{lightness:11,saturationFactor:.8},"line-strong":{lightness:20,saturationFactor:.65}},ke={violet:{50:`#f5f3ff`,100:`#ede9fe`,200:`#ddd6fe`,300:`#c4b5fd`,400:`#a78bfa`,500:`#7c3aed`,600:`#6d28d9`,700:`#5b21b6`,800:`#4c1d95`,900:`#3b0764`,950:`#2e1065`},blue:{50:`#edf3fe`,100:`#e4edfd`,200:`#d3e2ff`,300:`#b7c8fe`,400:`#679efe`,500:`#4176e6`,600:`#4868b2`,700:`#2f4c8f`,800:`#34415b`,900:`#283142`,950:`#1e2635`},cyan:{50:`#ecfeff`,100:`#cffafe`,200:`#a5f3fc`,300:`#67e8f9`,400:`#22d3ee`,500:`#0e7490`,600:`#155e75`,700:`#164e63`,800:`#083344`,900:`#092f3f`,950:`#062634`},teal:{50:`#f0fdfa`,100:`#ccfbf1`,200:`#99f6e4`,300:`#5eead4`,400:`#2dd4bf`,500:`#0f766e`,600:`#0f625d`,700:`#115e59`,800:`#134e4a`,900:`#042f2e`,950:`#022c22`},emerald:{50:`#ecfdf5`,100:`#d1fae5`,200:`#a7f3d0`,300:`#6ee7b7`,400:`#34d399`,500:`#15803d`,600:`#166534`,700:`#14532d`,800:`#064e3b`,900:`#052e16`,950:`#022c22`},amber:{50:`#fff5f1`,100:`#ffe8df`,200:`#ffd0c2`,300:`#ffae96`,400:`#ff9273`,500:`#ff7b52`,600:`#c94a27`,700:`#a83a1f`,800:`#87301f`,900:`#70291e`,950:`#3d120c`},rose:{50:`#fff1f2`,100:`#ffe4e6`,200:`#fecdd3`,300:`#fda4af`,400:`#fb7185`,500:`#e11d48`,600:`#be123c`,700:`#9f1239`,800:`#881337`,900:`#4c0519`,950:`#2d0714`},slate:{50:`#f8fafc`,100:`#f1f5f9`,200:`#e2e8f0`,300:`#cbd5e1`,400:`#94a3b8`,500:`#475569`,600:`#334155`,700:`#1e293b`,800:`#0f172a`,900:`#020617`,950:`#010313`}},Ae={50:97,100:94,200:88,300:76,400:64,500:42,600:34,700:27,800:21,900:16,950:10},E=(e,t,n)=>Math.min(Math.max(e,t),n),D=e=>{if(!e)return null;let t=e.trim().match(/^#?([0-9a-f]{3}|[0-9a-f]{6})$/i);if(!t)return null;let n=t[1];return`#${(n.length===3?n.split(``).map(e=>`${e}${e}`).join(``):n).toLowerCase()}`},O=e=>{let t=D(e)||`#4176e6`,n=parseInt(t.slice(1),16);return{r:n>>16&255,g:n>>8&255,b:n&255}},je=(e,t,n)=>`#${[e,t,n].map(e=>E(Math.round(e),0,255).toString(16).padStart(2,`0`)).join(``)}`,Me=(e,t,n)=>{let r=e/255,i=t/255,a=n/255,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(o+s)/2;if(o===s)return{h:0,s:0,l:c*100};let l=o-s,u=c>.5?l/(2-o-s):l/(o+s),d=0;return d=o===r?(i-a)/l+(i<a?6:0):o===i?(a-r)/l+2:(r-i)/l+4,{h:d*60,s:u*100,l:c*100}},k=(e,t,n)=>{let r=E(t,0,100)/100,i=E(n,0,100)/100,a=(1-Math.abs(2*i-1))*r,o=(e%360+360)%360,s=a*(1-Math.abs(o/60%2-1)),c=i-a/2,l=0,u=0,d=0;return o<60?(l=a,u=s):o<120?(l=s,u=a):o<180?(u=a,d=s):o<240?(u=s,d=a):o<300?(l=s,d=a):(l=a,d=s),je((l+c)*255,(u+c)*255,(d+c)*255)},Ne=e=>{let{r:t,g:n,b:r}=O(e),i=[t,n,r].map(e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4});return i[0]*.2126+i[1]*.7152+i[2]*.0722},Pe=(e,t)=>{let n=Ne(e),r=Ne(t),i=Math.max(n,r),a=Math.min(n,r);return(i+.05)/(a+.05)},Fe=(e,t,n)=>{let r=n,i=k(e,t,r);for(;Pe(`#ffffff`,i)<4.5&&r>12;)r-=2,i=k(e,t,r);return i},Ie=e=>{let{r:t,g:n,b:r}=O(D(e)||`#4176e6`),{h:i,s:a}=Me(t,n,r),o=a<8?a:E(a,42,88);return ye.reduce((e,t)=>{let n=Ae[t],r=Number(t)<300?o*.72:o;return e[t]=t===`500`||t===`600`?Fe(i,r,n):k(i,r,n),e},{})},A=e=>{let t=e?.mode===`light`?`light`:e?.mode===`amoled`?`amoled`:e?.mode===`celestial`?`celestial`:ge,n=e?.accent===`custom`?`custom`:e?.accent,r=w.some(e=>e.id===n)?n:_e,i=D(e?.customAccent)||`#4176e6`;return{mode:t,adaptToAccent:e?.adaptToAccent===!0,accent:n===`custom`?`custom`:r,customAccent:i}},Le=()=>A({mode:ge}),j=[`light`,`dark`,`amoled`,`celestial`],Re=e=>j[(j.indexOf(e)+1)%j.length],ze=`libre-webui-instance-theme`,Be=()=>{if(typeof localStorage>`u`)return null;try{let e=localStorage.getItem(ze);if(!e)return null;let t=JSON.parse(e);return t&&typeof t==`object`?A(t):null}catch{return null}},Ve=e=>{if(!(typeof localStorage>`u`))try{localStorage.setItem(ze,JSON.stringify(A(e)))}catch{}},He=()=>Be()??Le(),Ue=e=>{let t=A(e);return t.accent===`custom`?Ie(t.customAccent):ke[t.accent||`blue`]},We=e=>{let t=A(e);return t.accent===`custom`?t.customAccent||`#4176e6`:w.find(e=>e.id===t.accent)?.color||`#4176e6`},Ge=(e,t,n)=>t===0||e<8?e*t:E(e*n.multiplier*t,n.minimum*t,n.maximum*t),Ke=(e,t,n,r)=>be.reduce((i,a)=>(i[a]=k(e,Ge(t,1,r),n[a]),i),{}),qe=(e,t,n,r)=>T.reduce((i,a)=>{let o=n[a];return i[a]=k(e,Ge(t,o.saturationFactor,r),o.lightness),i},{}),M=(e,t,n)=>{let{r,g:i,b:a}=O(n);e.style.setProperty(t,`${r} ${i} ${a}`)},Je=e=>{for(let t of be)e.style.removeProperty(`--color-gray-${t}`),e.style.removeProperty(`--color-dark-${t}`);for(let t of T)e.style.removeProperty(`--color-${t}`)},Ye=(e,t)=>{let{r:n,g:r,b:i}=O(We(t)),{h:a,s:o}=Me(n,r,i),s=t.mode===`light`?Se:xe,c=Ke(a,o,Ce,s),l=Ke(a,o,t.mode===`amoled`?Te:we,xe),u=qe(a,o,t.mode===`light`?Ee:t.mode===`amoled`?Oe:De,s);for(let t of be)M(e,`--color-gray-${t}`,c[t]),M(e,`--color-dark-${t}`,l[t]);for(let t of T)M(e,`--color-${t}`,u[t])},N=null,P=null,F=null,Xe=()=>{if(typeof window>`u`)return;let e=window.matchMedia(`(prefers-reduced-motion: reduce)`);if(e.matches)return;let t=document.documentElement,n=new Date,r=n.getHours()*60+n.getMinutes()+n.getSeconds()/60,i=performance.now();F&&cancelAnimationFrame(F),t.setAttribute(`data-sweep`,`true`);let a=()=>{F=null,C.getState().setPreviewMinutes(null),I(),t.removeAttribute(`data-sweep`)},o=t=>{if(e.matches){a();return}let n=Math.min(1,(t-i)/3200),s=1-(1-n)**3;C.getState().setPreviewMinutes(((r-360*(1-s))%1440+1440)%1440),I(),n<1?F=requestAnimationFrame(o):a()};F=requestAnimationFrame(o)},Ze=()=>{N&&=(clearInterval(N),null),typeof document<`u`&&document.removeEventListener(`visibilitychange`,Qe),C.getState().clear()};function Qe(){document.visibilityState===`visible`&&I()}var I=()=>{if(typeof document>`u`)return;let e=C.getState();e.maybeRefreshWeather(),e.refresh();let t=C.getState().palette;if(!t)return;let n=document.documentElement;n.classList.toggle(`dark`,t.isDark),n.style.colorScheme=t.isDark?`dark`:`light`;for(let e of S)M(n,`--color-${e}`,t.roles[e]);for(let e of ne)M(n,`--color-gray-${e}`,t.gray[e]),M(n,`--color-dark-${e}`,t.dark[e]);n.style.setProperty(`--celestial-sky-top`,t.sky.top),n.style.setProperty(`--celestial-sky-mid`,t.sky.mid),n.style.setProperty(`--celestial-sky-horizon`,t.sky.horizon),n.style.setProperty(`--celestial-glow`,t.glow),n.style.setProperty(`--celestial-night`,String(t.night))},$e=()=>{typeof document>`u`||(C.getState().activate(),I(),N||(N=setInterval(I,o),document.addEventListener(`visibilitychange`,Qe)))},et=e=>{F&&typeof document<`u`&&(cancelAnimationFrame(F),F=null,document.documentElement.removeAttribute(`data-sweep`)),C.getState().setPreviewMinutes(e),N&&I()},L=e=>{if(typeof document>`u`)return;let t=A(e),n=document.documentElement,r=Ue(t);n.classList.remove(`dark`,`amoled`,`ophelia`,`celestial`),t.mode!==`light`&&t.mode!==`celestial`&&n.classList.add(`dark`),t.mode===`amoled`&&n.classList.add(`amoled`),t.mode===`celestial`&&n.classList.add(`celestial`),n.style.colorScheme=t.mode===`light`?`light`:`dark`,n.dataset.accent=t.accent||`blue`,n.dataset.themeStyle=t.adaptToAccent?`accent`:`default`;for(let e of ye){let{r:t,g:i,b:a}=O(r[e]),o=`${t} ${i} ${a}`;n.style.setProperty(`--color-primary-${e}`,o),n.style.setProperty(`--color-accent-${e}`,o)}let i=t.mode===`celestial`&&P!==null&&P!==`celestial`;if(P=t.mode,t.mode===`celestial`){$e(),i&&Xe();return}F&&(cancelAnimationFrame(F),F=null,n.removeAttribute(`data-sweep`)),Ze();for(let e of[`--celestial-sky-top`,`--celestial-sky-mid`,`--celestial-sky-horizon`,`--celestial-glow`,`--celestial-night`])n.style.removeProperty(e);t.adaptToAccent?Ye(n,t):Je(n)},R={enabled:!1,imageUrl:``,blurAmount:10,opacity:.6,effect:`dither`},tt=(e,t,n)=>typeof e==`number`&&Number.isFinite(e)?Math.min(n,Math.max(0,e)):t;function z(e){return{enabled:e?.enabled===!0,imageUrl:typeof e?.imageUrl==`string`?e.imageUrl:``,blurAmount:tt(e?.blurAmount,10,30),opacity:tt(e?.opacity,.6,1),effect:e?.effect===`original`||e?.effect===`blur`?e.effect:`dither`}}var nt=r(`store:app-store`),rt=250,it=250,B=null,at=0,ot=0,V=0,H=0,U={...R},W=0,G=null,K=null,q=null,J=null,Y=null,st=()=>typeof localStorage>`u`?null:localStorage.getItem(`auth-token`),ct=()=>({epoch:at,token:st()}),X=e=>e.epoch===at&&e.token===st(),Z=()=>new DOMException(`Wallpaper operation superseded`,`AbortError`),lt=()=>{W+=1,G?.abort(),G=null,K?.(),K=null},ut=e=>$.setState(t=>({backgroundImage:e.imageUrl||null,preferences:{...t.preferences,backgroundSettings:e}})),Q=(e,t)=>{let n=e.waiters.splice(0);for(let e of n)t?e.reject(t):e.resolve()},dt=()=>{q&&clearTimeout(q),q=null,J&&Q(J,Z()),Y&&Q(Y,Z()),J=null,Y=null,lt()},ft=async()=>{if(Y||!J)return;let e=J;J=null,Y=e;try{let{preferencesApi:t}=await n(async()=>{let{preferencesApi:e}=await import(`./api-BIVGtaZy.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!X(e.scope))throw Z();let r=await t.updatePreferences({backgroundSettings:e.settings});if(!X(e.scope))throw Z();if(!r.success)throw Error(r.error||`Failed to save wallpaper`);e.revision>=H&&(U=e.settings,H=e.revision),Q(e)}catch(t){X(e.scope)&&e.revision===V&&!J&&ut(U),Q(e,t)}finally{Y===e&&(Y=null,J&&!q&&ft())}},pt=()=>{q&&clearTimeout(q),q=setTimeout(()=>{q=null,ft()},it)},$=i()(a((r,i)=>({theme:He(),themeSyncPending:!1,themeSource:`default`,applyInstanceTheme:e=>{if(!e)return;let t=A(e);Ve(t),i().themeSource!==`user`&&i().setTheme(t)},syncThemePreference:async t=>{if(B&&=(clearTimeout(B),null),!(!e()&&!localStorage.getItem(`auth-token`)))try{let{preferencesApi:e}=await n(async()=>{let{preferencesApi:e}=await import(`./api-BIVGtaZy.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!(await e.updatePreferences({theme:t})).success){nt.warn(`Failed to save theme preference to backend`);return}let a=A(i().theme),o=A(t);a.mode===o.mode&&a.adaptToAccent===o.adaptToAccent&&a.accent===o.accent&&a.customAccent===o.customAccent?r({themeSyncPending:!1}):(r({themeSyncPending:!0}),i().scheduleThemePreferenceSync())}catch(e){nt.warn(`Failed to save theme preference to backend:`,e)}},scheduleThemePreferenceSync:()=>{B&&clearTimeout(B),B=setTimeout(()=>{B=null,i().syncThemePreference(A(i().theme))},rt)},setTheme:e=>{let t=A(e);r(e=>({theme:t,preferences:{...e.preferences,theme:t}})),L(t)},updateTheme:e=>{let t=A(e);i().setTheme(t),r({themeSyncPending:!0,themeSource:`user`}),i().scheduleThemePreferenceSync()},toggleTheme:()=>{let e=i().theme;i().updateTheme({...e,mode:Re(e.mode)})},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,artifactPanelWidth:600,artifactPanelResizing:!1,openArtifactPanel:e=>r({artifactPanelOpen:!0,artifactPanelArtifact:e}),closeArtifactPanel:()=>r({artifactPanelOpen:!1,artifactPanelArtifact:null}),setArtifactPanelWidth:e=>r({artifactPanelWidth:e}),setArtifactPanelResizing:e=>r({artifactPanelResizing:e}),preferences:{theme:Le(),defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,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:``,taskProviderType:null,taskProviderId:null},showUsername:!1,hapticFeedbackEnabled:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{...R}},setPreferences:e=>{let{backgroundSettings:t,...n}=e,i=n.theme?A(n.theme):null;r(e=>({...i&&{theme:i,themeSource:`user`},preferences:{...e.preferences,...n,...i&&{theme:i}}})),i&&L(i)},loadPreferences:async()=>{let e=ct(),t=++ot,r=V,a=!!(J||Y);try{let{preferencesApi:o}=await n(async()=>{let{preferencesApi:e}=await import(`./api-BIVGtaZy.js`);return{preferencesApi:e}},__vite__mapDeps([0,1,2,3,4,5]));if(!X(e))return;let s=await o.getPreferences();if(!X(e)||t!==ot)return;if(s.success&&s.data){let e={...s.data};if(!a&&r===V&&!J&&!Y){let t=z(e.backgroundSettings);U=t,H=++V,ut(t)}let t=i().themeSyncPending?A(i().theme):null;i().setPreferences(t?{...e,theme:t}:e),t&&i().syncThemePreference(t)}}catch(t){X(e)&&nt.warn(`Failed to load preferences from backend:`,t)}},isGenerating:!1,setIsGenerating:e=>r({isGenerating:e}),pinnedAdminShortcuts:[],toggleAdminShortcut:e=>r(t=>({pinnedAdminShortcuts:t.pinnedAdminShortcuts.includes(e)?t.pinnedAdminShortcuts.filter(t=>t!==e):[...t.pinnedAdminShortcuts,e]})),hasSeenSettingsNotification:!1,markSettingsNotificationAsSeen:()=>r({hasSeenSettingsNotification:!0}),isDemoMode:e(),demoConfig:t(),setDemoMode:e=>{r({isDemoMode:e,demoConfig:t()})},backgroundImage:null,updateBackgroundSettings:e=>{(`imageUrl`in e||e.enabled===!1)&&lt();let t=z({...i().preferences.backgroundSettings,...e}),n=ct(),r=++V;return ut(t),new Promise((e,i)=>{let a=J&&X(J.scope)?J.waiters:[];J&&a!==J.waiters&&Q(J,Z()),J={scope:n,revision:r,settings:t,waiters:[...a,{resolve:e,reject:i}]},pt()})},setBackgroundImage:e=>i().updateBackgroundSettings({imageUrl:e||``,enabled:!!e}),uploadBackgroundImage:e=>{lt();let t=ct(),n=W,r=new FileReader;return G=r,new Promise((a,o)=>{r.onabort=()=>o(Z()),r.onerror=()=>{G===r&&(G=null),o(r.error||Error(`Failed to read wallpaper`))},r.onload=async()=>{if(G===r&&(G=null),!X(t)||n!==W){o(Z());return}let e=r.result;if(typeof e!=`string`){o(Error(`Failed to read wallpaper`));return}try{if(await new Promise((t,n)=>{let r=new Image,i=!1,a=e=>{i||(i=!0,r.onload=null,r.onerror=null,K===o&&(K=null),r.src=``,e?n(e):t())},o=()=>a(Z());K=o,r.onload=()=>a(r.naturalWidth>0&&r.naturalHeight>0?void 0:Error(`Wallpaper file is not a valid image`)),r.onerror=()=>a(Error(`Wallpaper file is not a valid image`)),r.src=e}),!X(t)||n!==W||(await i().setBackgroundImage(e),!X(t)||i().preferences.backgroundSettings?.imageUrl!==e))throw Z();a()}catch(e){o(e)}},r.readAsDataURL(e)})},removeBackgroundImage:()=>i().updateBackgroundSettings({enabled:!1,imageUrl:``}),clearUserState:()=>{at+=1,ot+=1,V+=1,H=V,U={...R},dt();let e=He();B&&=(clearTimeout(B),null),r({theme:e,themeSyncPending:!1,themeSource:`default`,backgroundImage:null,preferences:{theme:e,defaultModel:``,defaultProviderType:null,defaultProviderId:null,visionModel:``,visionProviderType:null,visionProviderId:null,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:``,taskProviderType:null,taskProviderId:null},showUsername:!1,workRemoteProviderDisclosureDismissed:!1,backgroundSettings:{...R}}}),L(e)}}),{name:`libre-webui-app-state`,onRehydrateStorage:()=>e=>{e&&e.setTheme(A(e.theme))},partialize:e=>{let{backgroundSettings:t,...n}=e.preferences;return{theme:e.theme,themeSyncPending:e.themeSyncPending,themeSource:e.themeSource,sidebarOpen:e.sidebarOpen,sidebarCompact:e.sidebarCompact,artifactPanelWidth:e.artifactPanelWidth,pinnedAdminShortcuts:e.pinnedAdminShortcuts,preferences:n,hasSeenSettingsNotification:e.hasSeenSettingsNotification}}}));typeof window<`u`&&(()=>{let{theme:e,setTheme:t}=$.getState();t(e)})();export{ve as a,A as c,de as d,h as f,_e as i,et as l,z as n,Re as o,ae as p,w as r,We as s,$ as t,C as u};
@@ -0,0 +1 @@
1
+ function e(e,t=`0.34.2`){return t?.trim()||e?.trim()||``}export{e as t};
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/workApi-BjDBLsFh.js","js/workApi-0L8fBGq1.js","js/logger-DnuT4jgB.js","js/config-B5SBQwEe.js"])))=>i.map(i=>d[i]);
2
- import{a as e,o as t,t as n}from"./logger-DnuT4jgB.js";import{t as r,v as i}from"./chatStore-lyGhYu24.js";import{i as a,t as o}from"./utils-vendor-Bla8iz2s.js";import{n as s,t as c}from"./workApi-0L8fBGq1.js";import{u as l,y as u}from"./api-DEOxp9DN.js";import{t as d}from"./appStore-Bsxed1km.js";var f=1e5,p=`[Earlier live output omitted]
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["js/workApi-CApikuye.js","js/workApi-C-WfyZSs.js","js/logger-DnuT4jgB.js","js/config-D7WLbWrW.js"])))=>i.map(i=>d[i]);
2
+ import{a as e,o as t,t as n}from"./logger-DnuT4jgB.js";import{t as r,v as i}from"./chatStore-BvZkd8Un.js";import{i as a,t as o}from"./utils-vendor-Bla8iz2s.js";import{n as s,t as c}from"./workApi-C-WfyZSs.js";import{u as l,y as u}from"./api-CgnEj5Jc.js";import{t as d}from"./appStore-DrTsJPfh.js";var f=1e5,p=`[Earlier live output omitted]
3
3
 
4
- `,m=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,h=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}},g=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t!=`string`||!t.trim())continue;let r=Number(t);if(Number.isFinite(r))return r}},_=(e,t)=>{let n=String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`);return n===`queued`?`queued`:n===`preparing`||n===`starting`?`preparing`:n===`thinking`||n===`running`||n===`working`?`thinking`:n===`using_tool`||n===`tool`||n===`tool_call`?`using_tool`:n===`responding`||n===`streaming`||n===`assistant`?`responding`:n===`completed`||n===`complete`||n===`done`?`completed`:n===`needs_input`||n===`needsinput`||n===`blocked`?`needs_input`:n===`failed`||n===`error`?`failed`:n===`cancelled`||n===`canceled`||n===`stopped`?`cancelled`:t},v=(e,t)=>{let n=h(t,`total`);if(n!==void 0)return y(n);let r=h(t,`text`,`content`,`delta`,`reasoning`)||``;return t.replace===!0||t.cumulative===!0?y(r):y(e+r)},y=e=>{let t=e.startsWith(p),n=t?e.slice(31):e;return!t&&n.length<=f?n:t&&n.length<=99969?p+n:p+n.slice(-99969)},b=(e,t,n,r)=>{if(r===n)return e;if(r.startsWith(n)){let i=r.slice(n.length),a=e[e.length-1];return a&&a.kind===t?[...e.slice(0,-1),{kind:t,text:y(a.text+i)}]:[...e,{kind:t,text:y(i)}]}return[...e.filter(e=>e.kind!==t),{kind:t,text:r}]},x=(e,t)=>e.some(e=>e.kind===`tool`&&e.toolId===t)?e:[...e,{kind:`tool`,toolId:t}],S=(e,t)=>{let n=m(e.usage)||e,r={...t};for(let[e,t]of[[`inputTokens`,[`inputTokens`,`input_tokens`,`promptTokens`,`prompt_tokens`]],[`outputTokens`,[`outputTokens`,`output_tokens`,`completionTokens`,`completion_tokens`]],[`reasoningTokens`,[`reasoningTokens`,`reasoning_tokens`]],[`cachedTokens`,[`cachedTokens`,`cached_tokens`]],[`totalTokens`,[`totalTokens`,`total_tokens`]],[`tokensPerSecond`,[`tokensPerSecond`,`tokens_per_second`]],[`durationMs`,[`durationMs`,`duration_ms`]]]){let i=g(n,...t);i!==void 0&&(r[e]=i)}return r.totalTokens===void 0&&(r.inputTokens!==void 0||r.outputTokens!==void 0)&&(r.totalTokens=(r.inputTokens||0)+(r.outputTokens||0)),r},C=(e,t)=>{let n=m(e.skill)||e,r=h(n,`name`,`title`,`skill`)||`Skill`;return{id:h(n,`id`,`skillId`,`skill_id`)||`${r}-${t}`,name:r,description:h(n,`description`,`summary`)}},w=(e,t,n)=>{let r=m(e.tool)||e,i=m(r.message),a=i?m(i.metadata):void 0,o=a?{...a,...r}:r,s=h(o,`name`,`toolName`,`tool_name`,`function`)||`tool`;return{id:h(o,`id`,`toolCallId`,`tool_call_id`,`callId`)||`${s}-${n}`,name:s,status:o.isError===!0||o.is_error===!0?`error`:`running`,arguments:o.arguments??o.input??o.args??o.parameters??void 0,metadata:m(o.metadata)||a,startedAt:g(o,`startedAt`,`started_at`,`timestamp`)||t}},T=(e,t)=>Array.isArray(e)?e.flatMap((e,n)=>{let r=m(e);if(!r)return[];let i=w(r,t,n),a=h(r,`output`,`content`,`result`),o=_(r.status,`using_tool`);return[{...i,status:r.isError===!0||r.is_error===!0?`error`:o===`completed`?`completed`:i.status,output:a,finishedAt:g(r,`finishedAt`,`finished_at`),durationMs:g(r,`durationMs`,`duration_ms`)}]}):[],E=(e,t,n)=>({taskId:e,runId:t,connection:`idle`,phase:`queued`,lastEventId:0,reasoning:``,response:``,timeline:[],tools:[],skills:[],startedAt:n,terminal:!1}),D=(e,t)=>{let n=m(t.data.liveRun)||m(t.data.live_run)||m(t.data.run)||t.data,r=m(t.data.task)||m(t.data.detail),i=r?m(r.activeRun):void 0,a=h(n,`reasoning`,`thinking`),o=h(n,`response`,`assistant`,`content`),s=_(n.phase??n.status??i?.status??r?.status,e.phase),c=e.lastEventId>0&&s!==`completed`&&s!==`needs_input`&&s!==`failed`&&s!==`cancelled`&&n.phase===void 0?e.phase:s,l=T(n.tools??n.toolActivities??n.tool_activities,t.timestamp),u=n.skills,d=Array.isArray(u)?u.flatMap((e,t)=>{let n=m(e);return n?[C(n,t)]:[]}):e.skills,f=n.terminal===!0||c===`completed`||c===`needs_input`||c===`failed`||c===`cancelled`,p=a===void 0?e.reasoning:y(a),v=o===void 0?e.response:y(o),w=l.length>0?l:e.tools,E=b(e.timeline,`reasoning`,e.reasoning,p);for(let e of w)E=x(E,e.id);return E=b(E,`response`,e.response,v),{...e,phase:c,reasoning:p,response:v,timeline:E,tools:w,skills:d,usage:m(n.usage)?S(n,e.usage):e.usage,round:g(n,`round`,`roundIndex`,`round_index`)??e.round,roundLimit:g(n,`roundLimit`,`round_limit`)??e.roundLimit,startedAt:g(n,`startedAt`,`started_at`)??(i?g(i,`startedAt`,`started_at`):void 0)??e.startedAt,finishedAt:g(n,`finishedAt`,`finished_at`)??e.finishedAt,error:h(n,`error`,`message`)??e.error,terminal:f,budgetReason:h(n,`budgetReason`,`budget_reason`)??e.budgetReason,loopStats:k(n.loopStats)??e.loopStats,pendingApproval:f?void 0:m(n.pendingApproval??n.pending_approval)?A(m(n.pendingApproval??n.pending_approval)??{}):e.pendingApproval}},O=[`rounds`,`toolCalls`,`screenshots`,`fences`,`expectationsPassed`,`expectationsPending`,`stallNudges`,`ambiguityNudges`],k=e=>{let t=m(e);if(!t)return;let n={};for(let e of O){let r=t[e];typeof r==`number`&&Number.isFinite(r)&&(n[e]=r)}return Object.keys(n).length>0?n:void 0},A=e=>{let t=h(e,`approvalId`,`approval_id`),n=h(e,`toolCallId`,`tool_call_id`),r=h(e,`name`,`toolName`,`tool_name`);if(!t||!n||!r)return;let i=h(e,`status`);return{approvalId:t,toolCallId:n,name:r,summary:m(e.summary),status:i===`approved`||i===`denied`||i===`expired`?i:`pending`,expiresAt:g(e,`expiresAt`,`expires_at`)}},j=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n===-1)return[...e,t];let r=[...e];return r[n]={...e[n],...t},r},ee=(e,t)=>{let n=e?.taskId===t.taskId&&e.runId===t.runId?e:E(t.taskId,t.runId,t.timestamp);if(t.type!==`snapshot`&&t.id<=n.lastEventId)return n;let r={...n,connection:`connected`,connectionError:void 0,lastEventId:Math.max(n.lastEventId,t.id)};if(t.type===`snapshot`)r=D(r,t);else if(t.type===`run_state`){let e=_(t.data.phase??t.data.status??t.data.state,r.phase);r={...r,phase:e,round:g(t.data,`round`,`roundIndex`,`round_index`)??r.round,roundLimit:g(t.data,`roundLimit`,`round_limit`)??r.roundLimit,startedAt:g(t.data,`startedAt`,`started_at`)??r.startedAt,terminal:r.terminal||e===`completed`||e===`needs_input`||e===`failed`||e===`cancelled`}}else if(t.type===`reasoning_delta`){let e=v(r.reasoning,t.data);r={...r,phase:`thinking`,reasoning:e,timeline:b(r.timeline,`reasoning`,r.reasoning,e)}}else if(t.type===`assistant_delta`){let e=v(r.response,t.data);r={...r,phase:`responding`,response:e,timeline:b(r.timeline,`response`,r.response,e)}}else if(t.type===`tool_call`){let e=w(t.data,t.timestamp,r.tools.length);r={...r,phase:`using_tool`,tools:j(r.tools,e),timeline:x(r.timeline,e.id)}}else if(t.type===`tool_result`){let e=w(t.data,t.timestamp,r.tools.length),n=r.tools.find(t=>t.id===e.id),i=t.data.isError===!0||t.data.is_error===!0||t.data.error===!0;r={...r,phase:`thinking`,tools:j(r.tools,{...n,...e,status:i?`error`:`completed`,arguments:n?.arguments??e.arguments,startedAt:n?.startedAt??e.startedAt,output:h(t.data,`output`,`content`,`result`,`message`)||``,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,durationMs:g(t.data,`durationMs`,`duration_ms`)}),pendingApproval:r.pendingApproval?.toolCallId===e.id?void 0:r.pendingApproval}}else if(t.type===`approval`){let e=A(t.data);e&&(r=e.status===`pending`?{...r,pendingApproval:e}:r.pendingApproval?.approvalId===e.approvalId?{...r,pendingApproval:void 0}:r)}else if(t.type===`usage`)r={...r,usage:S(t.data,r.usage)};else if(t.type===`skill_loaded`){let e=C(t.data,r.skills.length);r={...r,skills:r.skills.some(t=>t.id===e.id)?r.skills:[...r.skills,e]}}else if(t.type===`error`)r={...r,phase:`failed`,error:h(t.data,`message`,`error`)||`The Work run stopped unexpectedly.`,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:t.data.terminal!==!1,pendingApproval:void 0};else if(t.type===`done`){let e=_(t.data.status??t.data.state??t.data.phase,`completed`);r={...r,phase:e,error:h(t.data,`error`,`message`)??r.error,usage:m(t.data.usage)?S(t.data,r.usage):r.usage,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:!0,budgetReason:h(t.data,`budgetReason`,`budget_reason`)??r.budgetReason,loopStats:k(t.data.loopStats)??r.loopStats,pendingApproval:void 0}}return r},M=(e,t)=>Error(t?.error||t?.message||e),N=(e,t)=>{if(typeof e==`object`&&e&&`response`in e){let t=e.response,n=t?.data?.error||t?.data?.message;if(n)return n}return e instanceof Error&&e.message?e.message:t},te=e=>typeof e==`object`&&!!e&&`response`in e&&e.response?.status===409,ne=2500,re=24,P=new Map,F=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt||e.id.localeCompare(t.id)),ie=({messages:e,messageCursor:t,hasMoreMessages:n,...r})=>r,I=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id))},L=(e,t)=>{if(!e||e.id!==t.id)return t;let n=e.updatedAt>t.updatedAt?{...t,...e}:{...e,...t};if(e.messages.length===0)return{...n,messages:t.messages,messageCursor:t.messageCursor,hasMoreMessages:t.hasMoreMessages};let r=Math.max(...e.messages.map(e=>e.messageIndex)),i=Math.min(...t.messages.map(e=>e.messageIndex)),a=t.messages.length>0&&r+1<i;return{...n,messages:I(e.messages,t.messages),messageCursor:a?t.messageCursor:e.messageCursor,hasMoreMessages:a?t.hasMoreMessages:e.hasMoreMessages}},R=(e,t)=>{let n=e.find(e=>e.id===t.id);if(n&&n.updatedAt>t.updatedAt)return e;let r=ie(t),i=e.findIndex(e=>e.id===t.id);if(i===-1)return[r,...e];let a=[...e];return a[i]=r,a},ae=(e,t)=>{let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=F(t.filter(e=>!r.has(e.id))),a=e.flatMap(e=>{let t=n.get(e.id);if(!t)return[];let r=e.updatedAt>t.updatedAt?e:t,i=Math.max(e.lastSeenAt??0,t.lastSeenAt??0);return[i>0?{...r,lastSeenAt:i}:r]});return[...i,...a]},z=a((e,t)=>{let n=0,r=0,i=0,a=0,o=0,s=null,l=0,u=0,d=0,f=null,p=0,m=new Set,h=new Set,g=new Map,_=(e,t)=>`${e}\u0000${t}`,v=e=>e===n,y=e=>{if(!v(e))throw Error(`Work session changed.`)},b=()=>{u+=1,d+=1,f=null,h.clear()},x=()=>{let t=++l;return h.add(t),e({loadingFiles:!0}),t},S=(n,r,i)=>{h.delete(n),v(r)&&t().selectedTaskId===i&&e({loadingFiles:h.size>0})},C=e=>t().selectedTaskId===e,w=t=>{let n=++p;return g.set(n,t),C(t)&&e({actionLoading:!0,error:null}),n},T=(n,r)=>{if(g.delete(n),!v(r))return;let i=t().selectedTaskId;e({actionLoading:[...g.values()].some(e=>e===i)})},D=(t,n,r)=>{v(n)&&C(t)&&e({error:r})},O=(t,r=n,i=!1)=>{v(r)&&(i&&(o+=1),e(e=>({tasks:R(e.tasks,t),selectedTask:e.selectedTaskId===t.id?L(e.selectedTask,t):e.selectedTask})))},k=async(e,t,r)=>{let i=n,a=w(r);try{let n=await e();if(y(i),!n.success||!n.data)throw M(t,n);return O(n.data,i,!0),n.data}catch(e){let n=N(e,t);throw D(r,i,n),Error(n)}finally{T(a,i)}};return{capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null,loadCapabilities:async()=>{let t=n;try{let n=await c.capabilities();if(y(t),!n.success||!n.data)throw M(`Could not inspect the Work runtime.`,n);e({capabilities:n.data})}catch(n){v(t)&&e({capabilities:{available:!1,runtime:`docker`,image:``,reason:N(n,`The Work runtime is unavailable.`)}})}},loadTasks:async(t=!1)=>{let l=n,u=++r,d=o;t||(i=u,m.add(u),e({loadingTasks:!0,error:null}));try{let t=await c.listTasks();if(y(l),!t.success||!t.data)throw M(`Could not load Work tasks.`,t);let n=F(t.data);if(u<=a||d!==o)return;a=u,e(e=>{let t=ae(e.tasks,n),r=e.selectedTaskId?t.find(t=>t.id===e.selectedTaskId):void 0,i=r&&e.selectedTask?{...e.selectedTask,...r,messages:e.selectedTask.messages,messageCursor:e.selectedTask.messageCursor,hasMoreMessages:e.selectedTask.hasMoreMessages}:e.selectedTask,a=s,o=a!==null&&u>a.requestId;return o&&(s=null),{tasks:t,selectedTask:i,...o&&e.error===a.message?{error:null}:{}}})}catch(n){let r=N(n,`Could not load Work tasks.`);!t&&v(l)&&u===i&&u>a&&d===o&&(s={requestId:u,message:r},e({error:r}))}finally{m.delete(u),!t&&v(l)&&e({loadingTasks:m.size>0})}},selectTask:t=>{b(),e(e=>({selectedTaskId:t,selectedTask:t&&e.selectedTask?.id===t?e.selectedTask:null,files:[],selectedFile:null,loadingFiles:!1,loadingOlderMessages:!1,actionLoading:[...g.values()].some(e=>e===t),error:null}))},loadTask:async(t,r=!1)=>{let i=n;r||e({loadingTask:!0,error:null});try{let e=await c.getTask(t);if(y(i),!e.success||!e.data)throw M(`Could not load this Work task.`,e);return O(e.data,i),e.data}catch(t){let n=N(t,`Could not load this Work task.`);throw!r&&v(i)&&e({error:n}),Error(n)}finally{!r&&v(i)&&e({loadingTask:!1})}},loadOlderMessages:async r=>{let i=n,a=t().selectedTask,o=a?.id===r?a.messageCursor:void 0;if(!a||a.id!==r||!a.hasMoreMessages||o===void 0)return[];e({loadingOlderMessages:!0,error:null});try{let t=await c.getMessages(r,o);if(y(i),!t.success||!t.data)throw M(`Could not load older Work messages.`,t);let n=t.data;return e(e=>{if(e.selectedTask?.id!==r)return{};let t=e.selectedTask.messageCursor===o;return{selectedTask:{...e.selectedTask,messages:I(e.selectedTask.messages,n.messages),messageCursor:t?n.cursor:e.selectedTask.messageCursor,hasMoreMessages:t?n.hasMore:e.selectedTask.hasMoreMessages}}}),n.messages}catch(n){let a=N(n,`Could not load older Work messages.`);throw v(i)&&t().selectedTaskId===r&&e({error:a}),Error(a)}finally{v(i)&&t().selectedTaskId===r&&e({loadingOlderMessages:!1})}},createTask:e=>k(()=>c.createTask(e),`Could not create the Work task.`,null),updateTask:(e,t)=>k(()=>c.updateTask(e,t),`Could not update the Work task.`,e),markTaskSeen:t=>{let n=Date.now();e(e=>({tasks:e.tasks.map(e=>e.id===t?{...e,lastSeenAt:n}:e),selectedTask:e.selectedTask?.id===t?{...e.selectedTask,lastSeenAt:n}:e.selectedTask})),c.markTaskSeen(t).catch(()=>void 0)},deleteTask:async r=>{let i=n,a=w(r);try{let n=await c.deleteTask(r);if(y(i),!n.success)throw M(`Could not delete the Work task.`,n);t().selectedTaskId===r&&b(),o+=1,e(e=>({tasks:e.tasks.filter(e=>e.id!==r),selectedTaskId:e.selectedTaskId===r?null:e.selectedTaskId,selectedTask:e.selectedTaskId===r?null:e.selectedTask,files:e.selectedTaskId===r?[]:e.files,selectedFile:e.selectedTaskId===r?null:e.selectedFile,liveRuns:Object.fromEntries(Object.entries(e.liveRuns).filter(([e])=>e!==r))}))}catch(e){let t=N(e,`Could not delete the Work task.`);throw D(r,i,t),Error(t)}finally{T(a,i)}},startRun:async(e,t)=>{let r=n,i=w(e);try{let n=await c.startRun(e,t);if(y(r),!n.success||!n.data)throw M(`Could not start the Work run.`,n);return O(n.data,r,!0),n.data}catch(t){let n=N(t,`Could not start the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},cancelRun:async e=>{let r=n,i=w(e);try{let n=await c.cancelRun(e);if(y(r),!n.success)throw M(`Could not cancel the Work run.`,n);return n.data?(O(n.data,r,!0),n.data):(o+=1,await t().loadTask(e,!0))}catch(t){let n=N(t,`Could not cancel the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},beginLiveRun:(t,n,r)=>{e(e=>{let i=e.liveRuns[t];return{liveRuns:{...e.liveRuns,[t]:i?.runId===n?{...i,startedAt:i.startedAt??r}:E(t,n,r)}}})},applyRunEvent:e=>{t().applyRunEvents([e])},applyRunEvents:t=>{t.length!==0&&e(e=>{let n={...e.liveRuns},r=e.tasks,i=e.selectedTask;for(let a of t){n[a.taskId]=ee(n[a.taskId],a);let t=a.type===`snapshot`?a.data.task??a.data.detail:void 0,o=t&&typeof t==`object`&&!Array.isArray(t)&&t.id===a.taskId&&Array.isArray(t.messages)?t:void 0;o&&(r=R(r,o),e.selectedTaskId===o.id&&(i=L(i,o)))}return{liveRuns:n,tasks:r,selectedTask:i}})},setLiveRunConnection:(t,n,r,i)=>{e(e=>{let a=e.liveRuns[t];return!a||a.runId!==n?{}:{liveRuns:{...e.liveRuns,[t]:{...a,connection:r,connectionError:i}}}})},clearLiveRun:(t,n)=>{e(e=>{if(n&&e.liveRuns[t]?.runId!==n)return{};let r={...e.liveRuns};return delete r[t],{liveRuns:r}})},loadFiles:async(r,i=``)=>{let a=n,o=++u,s=x();try{let n=await c.listFiles(r,i);if(y(a),!n.success||!n.data)throw M(`Could not load workspace files.`,n);return o===u&&t().selectedTaskId===r&&(P.delete(r),e({files:n.data})),n.data}catch(n){let s=o===u&&v(a)&&t().selectedTaskId===r;if(te(n)){let e=P.get(r)??0;return s&&e<re&&(P.set(r,e+1),setTimeout(()=>{o===u&&v(a)&&t().selectedTaskId===r&&t().loadFiles(r,i).catch(()=>void 0)},ne)),t().files}let c=N(n,`Could not load workspace files.`);throw s&&e({error:c}),Error(c)}finally{S(s,a,r)}},loadFile:async(r,i)=>{let a=n,o=++d,s=_(r,i);f=s;let l=x();try{let n=await c.getFile(r,i);if(y(a),!n.success||!n.data)throw M(`Could not open this workspace file.`,n);if(o!==d||f!==s||!v(a)||t().selectedTaskId!==r)throw Error(`Work file request was superseded.`);return e({selectedFile:n.data}),n.data}catch(n){let i=N(n,`Could not open this file.`);throw o===d&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(l,a,r)}},clearSelectedFile:()=>{d+=1,f=null,e({selectedFile:null})},saveFile:async(r,i,a,o)=>{let s=n,l=w(r),u=_(r,i);f===u&&(d+=1,f=null);try{let n=await c.saveFile(r,i,a,o);if(y(s),!n.success||!n.data)throw M(`Could not save this workspace file.`,n);return t().selectedTaskId===r&&t().selectedFile?.path===i&&(f===u&&(d+=1,f=null),e({selectedFile:n.data})),n.data}catch(e){let t=N(e,`Could not save this file.`);throw D(r,s,t),Error(t)}finally{T(l,s)}},startPreview:(e,t)=>k(()=>c.startPreview(e,t),`Could not start the workspace preview.`,e),stopPreview:e=>k(()=>c.stopPreview(e),`Could not stop the workspace preview.`,e),clearError:()=>e({error:null}),clearAllState:()=>{n+=1,i=++r,a=i,o+=1,s=null,m.clear(),g.clear(),b(),e({capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null})}}}),oe=async(e,t,n)=>{let r=await t(e);return r.success&&await n(),r},B=n(`store:plugin-store`),V=a((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await l.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:i(t,`Failed to load plugins`)})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await l.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 l.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 l.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 l.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 oe(n,l.activatePlugin,()=>t().loadPlugins());r.success||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 l.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 l.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){B.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await l.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 l.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){B.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n,r=[])=>{try{return(await l.setVariables(e,n,r)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return B.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{let n=await l.resetVariables(t);return n.success&&n.data===!0?(e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}}),!0):!1}catch(e){return B.error(`Failed to reset plugin variables:`,e),!1}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),H=`libre-webui:work-draft:`,U=(e,t)=>`${H}${e}:${t}`,se=(e,t)=>{try{let n=window.sessionStorage.getItem(U(e,t));if(!n)return null;let r=JSON.parse(n);return typeof r.content==`string`?{content:r.content,baseUpdatedAt:typeof r.baseUpdatedAt==`number`?r.baseUpdatedAt:void 0}:null}catch{return null}},ce=(e,t,n)=>{try{return window.sessionStorage.setItem(U(e,t),JSON.stringify(n)),!0}catch{return!1}},W=(e,t)=>{try{window.sessionStorage.removeItem(U(e,t))}catch{}},le=e=>{let t=`${H}${e}:`;try{for(let e=window.sessionStorage.length-1;e>=0;e--){let n=window.sessionStorage.key(e);n?.startsWith(t)&&window.sessionStorage.removeItem(n)}}catch{}},G=()=>{try{for(let e=window.sessionStorage.length-1;e>=0;e--){let t=window.sessionStorage.key(e);t?.startsWith(H)&&window.sessionStorage.removeItem(t)}}catch{}},ue=`/ws/work-terminal`,de=`/ws/work-screen`,fe=`/ws/work-audio`;function K(e,t,n){let r;try{r=new URL(e)}catch{throw Error(`${t} must be an absolute URL.`)}if(!n.includes(r.protocol))throw Error(`${t} must use ${n.join(` or `)}.`);if(r.username||r.password||r.search||r.hash)throw Error(`${t} must not contain credentials, a query, or a fragment.`);return r}function q(e){return e.replace(/\/+$/,``)}function pe(e){return q(K(e,`VITE_WS_BASE_URL`,[`ws:`,`wss:`]).toString())}function me(e){let t=K(e,`VITE_API_BASE_URL`,[`http:`,`https:`]);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=t.pathname.replace(/\/api\/?$/,``),q(t.toString())}function J(e){let t=e.websocketBaseUrl?.trim();if(t)return pe(t);if(e.protocol===`file:`)return`ws://localhost:3001`;let n=e.apiBaseUrl?.trim();return n?me(n):`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}`}function Y(e,t,n){let r=J(t),i=new URL(`${r}/${e.replace(/^\/+/,``)}`);for(let[e,t]of Object.entries(n))i.searchParams.set(e,t);return i.toString()}function he(e,t){return Y(`/ws`,t,{ticket:e})}function ge(e,t,n){return Y(de,n,{taskId:e,ticket:t})}function _e(e,t,n){return Y(fe,n,{taskId:e,ticket:t})}function ve(e,t,n){return Y(ue,n,{taskId:e,ticket:t})}var X=n(`websocket`),Z=e=>{if(e instanceof Error&&e.message===`Session expired`)return!0;let t=e?.response?.status;return t===401||t===403},Q=new class{ws=null;urlEnvironment;reconnectAttempts=0;reconnectDelay=1e3;maxReconnectDelay=3e4;reconnectTimer=null;messageHandlers=new Map;connectPromise=null;shouldReconnect=!1;connectionEpoch=0;constructor(){this.urlEnvironment={protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,websocketBaseUrl:void 0,production:!0},X.debug(`WebSocket base URL resolved:`,J(this.urlEnvironment))}connect(){if(e())return X.debug(`Demo mode active: skipping WebSocket connection.`),Promise.resolve();if(this.ws?.readyState===WebSocket.OPEN)return Promise.resolve();if(this.connectPromise)return this.connectPromise;this.clearReconnectTimer(),this.shouldReconnect=!0;let t=++this.connectionEpoch,n=this.openWithTicket(t).catch(e=>{if(!(!this.shouldReconnect||t!==this.connectionEpoch))throw Z(e)?(this.shouldReconnect=!1,this.clearReconnectTimer()):this.attemptReconnect(t),e}).finally(()=>{this.connectPromise===n&&(this.connectPromise=null)});return this.connectPromise=n,n}async openWithTicket(e){let t=(await s.post(`/auth/websocket-ticket`,{audience:`chat`})).data.data?.ticket;if(!t)throw Error(`The server did not issue a WebSocket ticket.`);if(!(!this.shouldReconnect||e!==this.connectionEpoch))return X.debug(`WebSocket: Attempting to connect`),new Promise((n,r)=>{try{let i=he(t,this.urlEnvironment);X.debug(`WebSocket: Connecting with a one-use ticket`);let a=new WebSocket(i),o=!1;this.ws=a,a.onopen=()=>{if(!this.shouldReconnect||e!==this.connectionEpoch){a.close(),n();return}X.debug(`WebSocket connected successfully`),o=!0,this.reconnectAttempts=0,this.clearReconnectTimer(),n()},a.onmessage=t=>{if(!(!this.shouldReconnect||e!==this.connectionEpoch))try{let e=JSON.parse(t.data),n=this.messageHandlers.get(e.type);n?n(e.data):e.type===`connected`?X.debug(`WebSocket: Server confirmed connection`):X.warn(`WebSocket: No handler for message type:`,e.type)}catch(e){X.error(`Failed to parse WebSocket message:`,e)}},a.onclose=()=>{if(X.debug(`WebSocket disconnected`),this.ws===a&&(this.ws=null),e!==this.connectionEpoch){n();return}o?this.shouldReconnect&&this.attemptReconnect(e):r(Error(`WebSocket closed before opening`))},a.onerror=t=>{if(e!==this.connectionEpoch){n();return}X.error(`WebSocket error:`,t),r(t)}}catch(e){r(e)}})}disconnect(){this.shouldReconnect=!1,this.connectionEpoch+=1,this.clearReconnectTimer(),this.reconnectAttempts=0,this.connectPromise=null;let e=this.ws;e&&(this.ws=null,e.readyState!==WebSocket.CONNECTING&&e.close())}reconnect(){return this.disconnect(),this.connect()}send(e){return this.ws&&this.ws.readyState===WebSocket.OPEN?(X.debug(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e)),!0):(X.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState),!1)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}dispatchMessage(e,t){this.messageHandlers.get(e)?.(t)}clearReconnectTimer(){this.reconnectTimer!==null&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null}attemptReconnect(t){if(e()||!this.shouldReconnect||t!==this.connectionEpoch||this.reconnectTimer!==null)return;let n=Math.min(this.reconnectDelay*2**this.reconnectAttempts,this.maxReconnectDelay);this.reconnectAttempts=Math.min(this.reconnectAttempts+1,5),X.debug(`Reconnecting WebSocket in ${n}ms`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,!(!this.shouldReconnect||t!==this.connectionEpoch)&&this.connect().catch(()=>{})},n)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},$=n(`auth-store`),ye=a()(o((n,i)=>({user:null,token:null,systemInfo:null,workAccess:null,isAuthenticated:!1,isLoading:!1,login:(t,a,o)=>{let s=i().user?.id===t.id;localStorage.setItem(`auth-token`,a);let c=r.getState();c.clearAllState&&c.clearAllState(),z.getState().clearAllState(),s||(G(),d.getState().clearUserState()),n({user:t,token:a,systemInfo:o,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let t=V.getState();$.debug(`Reinitializing app after login...`),$.debug(`Reconnecting WebSocket with auth token...`);try{await Q.reconnect()}catch(e){$.warn(`WebSocket reconnect after login failed; continuing app initialization:`,e)}try{!(await u.checkHealth()).success&&!e()&&$.warn(`Ollama service not available after login`)}catch(e){$.warn(`Ollama health check failed after login; continuing provider initialization:`,e)}let n=d.getState();await Promise.all([c.loadModels(),c.loadSessions(),c.loadPreferences(),n.loadPreferences(),t.loadPlugins(),i().refreshWorkAccess()]),$.debug(`Reinitialized app after login`)}catch(e){$.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),$.debug(`Disconnecting WebSocket on logout...`),Q.disconnect();let e=r.getState();e.clearAllState&&e.clearAllState(),z.getState().clearAllState(),G(),d.getState().clearUserState(),n({user:null,token:null,workAccess:null,isAuthenticated:!1,isLoading:!1})},setUser:e=>{n({user:e})},setSystemInfo:e=>{n({systemInfo:e})},setLoading:e=>{n({isLoading:e})},isAdmin:()=>{let{user:e}=i();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=i();return e?.requiresAuth??!1},canUseWork:()=>{let{systemInfo:e,user:t,workAccess:n}=i();return e?.requiresAuth===!1||t?.role===`admin`||n?.allowed===!0},canUseAgents:()=>{let{systemInfo:e,user:t}=i();return e?.agentsEnabled===!0?e?.requiresAuth===!1||t?.role===`admin`:!1},refreshWorkAccess:async()=>{try{let{workApi:e}=await t(async()=>{let{workApi:e}=await import(`./workApi-BjDBLsFh.js`);return{workApi:e}},__vite__mapDeps([0,1,2,3])),r=await e.access();r.success&&r.data&&n({workAccess:r.data})}catch(e){$.debug(`Could not load Work access mode:`,e)}}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,workAccess:e.workAccess,isAuthenticated:e.isAuthenticated})}));export{ve as a,se as c,z as d,k as f,ge as i,ce as l,Q as n,W as o,_e as r,le as s,ye as t,V as u};
4
+ `,m=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:void 0,h=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t}},g=(e,...t)=>{for(let n of t){let t=e[n];if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t!=`string`||!t.trim())continue;let r=Number(t);if(Number.isFinite(r))return r}},_=(e,t)=>{let n=String(e||``).trim().toLowerCase().replace(/[\s-]+/g,`_`);return n===`queued`?`queued`:n===`preparing`||n===`starting`?`preparing`:n===`thinking`||n===`running`||n===`working`?`thinking`:n===`using_tool`||n===`tool`||n===`tool_call`?`using_tool`:n===`responding`||n===`streaming`||n===`assistant`?`responding`:n===`completed`||n===`complete`||n===`done`?`completed`:n===`needs_input`||n===`needsinput`||n===`blocked`?`needs_input`:n===`failed`||n===`error`?`failed`:n===`cancelled`||n===`canceled`||n===`stopped`?`cancelled`:t},v=(e,t)=>{let n=h(t,`total`);if(n!==void 0)return y(n);let r=h(t,`text`,`content`,`delta`,`reasoning`)||``;return t.replace===!0||t.cumulative===!0?y(r):y(e+r)},y=e=>{let t=e.startsWith(p),n=t?e.slice(31):e;return!t&&n.length<=f?n:t&&n.length<=99969?p+n:p+n.slice(-99969)},b=(e,t,n,r)=>{if(r===n)return e;if(r.startsWith(n)){let i=r.slice(n.length),a=e[e.length-1];return a&&a.kind===t?[...e.slice(0,-1),{kind:t,text:y(a.text+i)}]:[...e,{kind:t,text:y(i)}]}return[...e.filter(e=>e.kind!==t),{kind:t,text:r}]},x=(e,t)=>e.some(e=>e.kind===`tool`&&e.toolId===t)?e:[...e,{kind:`tool`,toolId:t}],S=(e,t)=>{let n=m(e.usage)||e,r={...t};for(let[e,t]of[[`inputTokens`,[`inputTokens`,`input_tokens`,`promptTokens`,`prompt_tokens`]],[`outputTokens`,[`outputTokens`,`output_tokens`,`completionTokens`,`completion_tokens`]],[`reasoningTokens`,[`reasoningTokens`,`reasoning_tokens`]],[`cachedTokens`,[`cachedTokens`,`cached_tokens`]],[`totalTokens`,[`totalTokens`,`total_tokens`]],[`tokensPerSecond`,[`tokensPerSecond`,`tokens_per_second`]],[`durationMs`,[`durationMs`,`duration_ms`]]]){let i=g(n,...t);i!==void 0&&(r[e]=i)}return r.totalTokens===void 0&&(r.inputTokens!==void 0||r.outputTokens!==void 0)&&(r.totalTokens=(r.inputTokens||0)+(r.outputTokens||0)),r},C=(e,t)=>{let n=m(e.skill)||e,r=h(n,`name`,`title`,`skill`)||`Skill`;return{id:h(n,`id`,`skillId`,`skill_id`)||`${r}-${t}`,name:r,description:h(n,`description`,`summary`)}},w=(e,t,n)=>{let r=m(e.tool)||e,i=m(r.message),a=i?m(i.metadata):void 0,o=a?{...a,...r}:r,s=h(o,`name`,`toolName`,`tool_name`,`function`)||`tool`;return{id:h(o,`id`,`toolCallId`,`tool_call_id`,`callId`)||`${s}-${n}`,name:s,status:o.isError===!0||o.is_error===!0?`error`:`running`,arguments:o.arguments??o.input??o.args??o.parameters??void 0,metadata:m(o.metadata)||a,startedAt:g(o,`startedAt`,`started_at`,`timestamp`)||t}},T=(e,t)=>Array.isArray(e)?e.flatMap((e,n)=>{let r=m(e);if(!r)return[];let i=w(r,t,n),a=h(r,`output`,`content`,`result`),o=_(r.status,`using_tool`);return[{...i,status:r.isError===!0||r.is_error===!0?`error`:o===`completed`?`completed`:i.status,output:a,finishedAt:g(r,`finishedAt`,`finished_at`),durationMs:g(r,`durationMs`,`duration_ms`)}]}):[],E=(e,t,n)=>({taskId:e,runId:t,connection:`idle`,phase:`queued`,lastEventId:0,reasoning:``,response:``,timeline:[],tools:[],skills:[],startedAt:n,terminal:!1}),D=(e,t)=>{let n=m(t.data.liveRun)||m(t.data.live_run)||m(t.data.run)||t.data,r=m(t.data.task)||m(t.data.detail),i=r?m(r.activeRun):void 0,a=h(n,`reasoning`,`thinking`),o=h(n,`response`,`assistant`,`content`),s=_(n.phase??n.status??i?.status??r?.status,e.phase),c=e.lastEventId>0&&s!==`completed`&&s!==`needs_input`&&s!==`failed`&&s!==`cancelled`&&n.phase===void 0?e.phase:s,l=T(n.tools??n.toolActivities??n.tool_activities,t.timestamp),u=n.skills,d=Array.isArray(u)?u.flatMap((e,t)=>{let n=m(e);return n?[C(n,t)]:[]}):e.skills,f=n.terminal===!0||c===`completed`||c===`needs_input`||c===`failed`||c===`cancelled`,p=a===void 0?e.reasoning:y(a),v=o===void 0?e.response:y(o),w=l.length>0?l:e.tools,E=b(e.timeline,`reasoning`,e.reasoning,p);for(let e of w)E=x(E,e.id);return E=b(E,`response`,e.response,v),{...e,phase:c,reasoning:p,response:v,timeline:E,tools:w,skills:d,usage:m(n.usage)?S(n,e.usage):e.usage,round:g(n,`round`,`roundIndex`,`round_index`)??e.round,roundLimit:g(n,`roundLimit`,`round_limit`)??e.roundLimit,startedAt:g(n,`startedAt`,`started_at`)??(i?g(i,`startedAt`,`started_at`):void 0)??e.startedAt,finishedAt:g(n,`finishedAt`,`finished_at`)??e.finishedAt,error:h(n,`error`,`message`)??e.error,terminal:f,budgetReason:h(n,`budgetReason`,`budget_reason`)??e.budgetReason,loopStats:k(n.loopStats)??e.loopStats,pendingApproval:f?void 0:m(n.pendingApproval??n.pending_approval)?A(m(n.pendingApproval??n.pending_approval)??{}):e.pendingApproval}},O=[`rounds`,`toolCalls`,`screenshots`,`fences`,`expectationsPassed`,`expectationsPending`,`stallNudges`,`ambiguityNudges`],k=e=>{let t=m(e);if(!t)return;let n={};for(let e of O){let r=t[e];typeof r==`number`&&Number.isFinite(r)&&(n[e]=r)}return Object.keys(n).length>0?n:void 0},A=e=>{let t=h(e,`approvalId`,`approval_id`),n=h(e,`toolCallId`,`tool_call_id`),r=h(e,`name`,`toolName`,`tool_name`);if(!t||!n||!r)return;let i=h(e,`status`);return{approvalId:t,toolCallId:n,name:r,summary:m(e.summary),status:i===`approved`||i===`denied`||i===`expired`?i:`pending`,expiresAt:g(e,`expiresAt`,`expires_at`)}},j=(e,t)=>{let n=e.findIndex(e=>e.id===t.id);if(n===-1)return[...e,t];let r=[...e];return r[n]={...e[n],...t},r},ee=(e,t)=>{let n=e?.taskId===t.taskId&&e.runId===t.runId?e:E(t.taskId,t.runId,t.timestamp);if(t.type!==`snapshot`&&t.id<=n.lastEventId)return n;let r={...n,connection:`connected`,connectionError:void 0,lastEventId:Math.max(n.lastEventId,t.id)};if(t.type===`snapshot`)r=D(r,t);else if(t.type===`run_state`){let e=_(t.data.phase??t.data.status??t.data.state,r.phase);r={...r,phase:e,round:g(t.data,`round`,`roundIndex`,`round_index`)??r.round,roundLimit:g(t.data,`roundLimit`,`round_limit`)??r.roundLimit,startedAt:g(t.data,`startedAt`,`started_at`)??r.startedAt,terminal:r.terminal||e===`completed`||e===`needs_input`||e===`failed`||e===`cancelled`}}else if(t.type===`reasoning_delta`){let e=v(r.reasoning,t.data);r={...r,phase:`thinking`,reasoning:e,timeline:b(r.timeline,`reasoning`,r.reasoning,e)}}else if(t.type===`assistant_delta`){let e=v(r.response,t.data);r={...r,phase:`responding`,response:e,timeline:b(r.timeline,`response`,r.response,e)}}else if(t.type===`tool_call`){let e=w(t.data,t.timestamp,r.tools.length);r={...r,phase:`using_tool`,tools:j(r.tools,e),timeline:x(r.timeline,e.id)}}else if(t.type===`tool_result`){let e=w(t.data,t.timestamp,r.tools.length),n=r.tools.find(t=>t.id===e.id),i=t.data.isError===!0||t.data.is_error===!0||t.data.error===!0;r={...r,phase:`thinking`,tools:j(r.tools,{...n,...e,status:i?`error`:`completed`,arguments:n?.arguments??e.arguments,startedAt:n?.startedAt??e.startedAt,output:h(t.data,`output`,`content`,`result`,`message`)||``,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,durationMs:g(t.data,`durationMs`,`duration_ms`)}),pendingApproval:r.pendingApproval?.toolCallId===e.id?void 0:r.pendingApproval}}else if(t.type===`approval`){let e=A(t.data);e&&(r=e.status===`pending`?{...r,pendingApproval:e}:r.pendingApproval?.approvalId===e.approvalId?{...r,pendingApproval:void 0}:r)}else if(t.type===`usage`)r={...r,usage:S(t.data,r.usage)};else if(t.type===`skill_loaded`){let e=C(t.data,r.skills.length);r={...r,skills:r.skills.some(t=>t.id===e.id)?r.skills:[...r.skills,e]}}else if(t.type===`error`)r={...r,phase:`failed`,error:h(t.data,`message`,`error`)||`The Work run stopped unexpectedly.`,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:t.data.terminal!==!1,pendingApproval:void 0};else if(t.type===`done`){let e=_(t.data.status??t.data.state??t.data.phase,`completed`);r={...r,phase:e,error:h(t.data,`error`,`message`)??r.error,usage:m(t.data.usage)?S(t.data,r.usage):r.usage,finishedAt:g(t.data,`finishedAt`,`finished_at`)||t.timestamp,terminal:!0,budgetReason:h(t.data,`budgetReason`,`budget_reason`)??r.budgetReason,loopStats:k(t.data.loopStats)??r.loopStats,pendingApproval:void 0}}return r},M=(e,t)=>Error(t?.error||t?.message||e),N=(e,t)=>{if(typeof e==`object`&&e&&`response`in e){let t=e.response,n=t?.data?.error||t?.data?.message;if(n)return n}return e instanceof Error&&e.message?e.message:t},te=e=>typeof e==`object`&&!!e&&`response`in e&&e.response?.status===409,ne=2500,re=24,P=new Map,F=e=>[...e].sort((e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt||e.id.localeCompare(t.id)),ie=({messages:e,messageCursor:t,hasMoreMessages:n,...r})=>r,I=(e,t)=>{let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>e.messageIndex-t.messageIndex||e.createdAt-t.createdAt||e.id.localeCompare(t.id))},L=(e,t)=>{if(!e||e.id!==t.id)return t;let n=e.updatedAt>t.updatedAt?{...t,...e}:{...e,...t};if(e.messages.length===0)return{...n,messages:t.messages,messageCursor:t.messageCursor,hasMoreMessages:t.hasMoreMessages};let r=Math.max(...e.messages.map(e=>e.messageIndex)),i=Math.min(...t.messages.map(e=>e.messageIndex)),a=t.messages.length>0&&r+1<i;return{...n,messages:I(e.messages,t.messages),messageCursor:a?t.messageCursor:e.messageCursor,hasMoreMessages:a?t.hasMoreMessages:e.hasMoreMessages}},R=(e,t)=>{let n=e.find(e=>e.id===t.id);if(n&&n.updatedAt>t.updatedAt)return e;let r=ie(t),i=e.findIndex(e=>e.id===t.id);if(i===-1)return[r,...e];let a=[...e];return a[i]=r,a},ae=(e,t)=>{let n=new Map(t.map(e=>[e.id,e])),r=new Set(e.map(e=>e.id)),i=F(t.filter(e=>!r.has(e.id))),a=e.flatMap(e=>{let t=n.get(e.id);if(!t)return[];let r=e.updatedAt>t.updatedAt?e:t,i=Math.max(e.lastSeenAt??0,t.lastSeenAt??0);return[i>0?{...r,lastSeenAt:i}:r]});return[...i,...a]},z=a((e,t)=>{let n=0,r=0,i=0,a=0,o=0,s=null,l=0,u=0,d=0,f=null,p=0,m=new Set,h=new Set,g=new Map,_=(e,t)=>`${e}\u0000${t}`,v=e=>e===n,y=e=>{if(!v(e))throw Error(`Work session changed.`)},b=()=>{u+=1,d+=1,f=null,h.clear()},x=()=>{let t=++l;return h.add(t),e({loadingFiles:!0}),t},S=(n,r,i)=>{h.delete(n),v(r)&&t().selectedTaskId===i&&e({loadingFiles:h.size>0})},C=e=>t().selectedTaskId===e,w=t=>{let n=++p;return g.set(n,t),C(t)&&e({actionLoading:!0,error:null}),n},T=(n,r)=>{if(g.delete(n),!v(r))return;let i=t().selectedTaskId;e({actionLoading:[...g.values()].some(e=>e===i)})},D=(t,n,r)=>{v(n)&&C(t)&&e({error:r})},O=(t,r=n,i=!1)=>{v(r)&&(i&&(o+=1),e(e=>({tasks:R(e.tasks,t),selectedTask:e.selectedTaskId===t.id?L(e.selectedTask,t):e.selectedTask})))},k=async(e,t,r)=>{let i=n,a=w(r);try{let n=await e();if(y(i),!n.success||!n.data)throw M(t,n);return O(n.data,i,!0),n.data}catch(e){let n=N(e,t);throw D(r,i,n),Error(n)}finally{T(a,i)}};return{capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null,loadCapabilities:async()=>{let t=n;try{let n=await c.capabilities();if(y(t),!n.success||!n.data)throw M(`Could not inspect the Work runtime.`,n);e({capabilities:n.data})}catch(n){v(t)&&e({capabilities:{available:!1,runtime:`docker`,image:``,reason:N(n,`The Work runtime is unavailable.`)}})}},loadTasks:async(t=!1)=>{let l=n,u=++r,d=o;t||(i=u,m.add(u),e({loadingTasks:!0,error:null}));try{let t=await c.listTasks();if(y(l),!t.success||!t.data)throw M(`Could not load Work tasks.`,t);let n=F(t.data);if(u<=a||d!==o)return;a=u,e(e=>{let t=ae(e.tasks,n),r=e.selectedTaskId?t.find(t=>t.id===e.selectedTaskId):void 0,i=r&&e.selectedTask?{...e.selectedTask,...r,messages:e.selectedTask.messages,messageCursor:e.selectedTask.messageCursor,hasMoreMessages:e.selectedTask.hasMoreMessages}:e.selectedTask,a=s,o=a!==null&&u>a.requestId;return o&&(s=null),{tasks:t,selectedTask:i,...o&&e.error===a.message?{error:null}:{}}})}catch(n){let r=N(n,`Could not load Work tasks.`);!t&&v(l)&&u===i&&u>a&&d===o&&(s={requestId:u,message:r},e({error:r}))}finally{m.delete(u),!t&&v(l)&&e({loadingTasks:m.size>0})}},selectTask:t=>{b(),e(e=>({selectedTaskId:t,selectedTask:t&&e.selectedTask?.id===t?e.selectedTask:null,files:[],selectedFile:null,loadingFiles:!1,loadingOlderMessages:!1,actionLoading:[...g.values()].some(e=>e===t),error:null}))},loadTask:async(t,r=!1)=>{let i=n;r||e({loadingTask:!0,error:null});try{let e=await c.getTask(t);if(y(i),!e.success||!e.data)throw M(`Could not load this Work task.`,e);return O(e.data,i),e.data}catch(t){let n=N(t,`Could not load this Work task.`);throw!r&&v(i)&&e({error:n}),Error(n)}finally{!r&&v(i)&&e({loadingTask:!1})}},loadOlderMessages:async r=>{let i=n,a=t().selectedTask,o=a?.id===r?a.messageCursor:void 0;if(!a||a.id!==r||!a.hasMoreMessages||o===void 0)return[];e({loadingOlderMessages:!0,error:null});try{let t=await c.getMessages(r,o);if(y(i),!t.success||!t.data)throw M(`Could not load older Work messages.`,t);let n=t.data;return e(e=>{if(e.selectedTask?.id!==r)return{};let t=e.selectedTask.messageCursor===o;return{selectedTask:{...e.selectedTask,messages:I(e.selectedTask.messages,n.messages),messageCursor:t?n.cursor:e.selectedTask.messageCursor,hasMoreMessages:t?n.hasMore:e.selectedTask.hasMoreMessages}}}),n.messages}catch(n){let a=N(n,`Could not load older Work messages.`);throw v(i)&&t().selectedTaskId===r&&e({error:a}),Error(a)}finally{v(i)&&t().selectedTaskId===r&&e({loadingOlderMessages:!1})}},createTask:e=>k(()=>c.createTask(e),`Could not create the Work task.`,null),updateTask:(e,t)=>k(()=>c.updateTask(e,t),`Could not update the Work task.`,e),markTaskSeen:t=>{let n=Date.now();e(e=>({tasks:e.tasks.map(e=>e.id===t?{...e,lastSeenAt:n}:e),selectedTask:e.selectedTask?.id===t?{...e.selectedTask,lastSeenAt:n}:e.selectedTask})),c.markTaskSeen(t).catch(()=>void 0)},deleteTask:async r=>{let i=n,a=w(r);try{let n=await c.deleteTask(r);if(y(i),!n.success)throw M(`Could not delete the Work task.`,n);t().selectedTaskId===r&&b(),o+=1,e(e=>({tasks:e.tasks.filter(e=>e.id!==r),selectedTaskId:e.selectedTaskId===r?null:e.selectedTaskId,selectedTask:e.selectedTaskId===r?null:e.selectedTask,files:e.selectedTaskId===r?[]:e.files,selectedFile:e.selectedTaskId===r?null:e.selectedFile,liveRuns:Object.fromEntries(Object.entries(e.liveRuns).filter(([e])=>e!==r))}))}catch(e){let t=N(e,`Could not delete the Work task.`);throw D(r,i,t),Error(t)}finally{T(a,i)}},startRun:async(e,t)=>{let r=n,i=w(e);try{let n=await c.startRun(e,t);if(y(r),!n.success||!n.data)throw M(`Could not start the Work run.`,n);return O(n.data,r,!0),n.data}catch(t){let n=N(t,`Could not start the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},cancelRun:async e=>{let r=n,i=w(e);try{let n=await c.cancelRun(e);if(y(r),!n.success)throw M(`Could not cancel the Work run.`,n);return n.data?(O(n.data,r,!0),n.data):(o+=1,await t().loadTask(e,!0))}catch(t){let n=N(t,`Could not cancel the Work run.`);throw D(e,r,n),Error(n)}finally{T(i,r)}},beginLiveRun:(t,n,r)=>{e(e=>{let i=e.liveRuns[t];return{liveRuns:{...e.liveRuns,[t]:i?.runId===n?{...i,startedAt:i.startedAt??r}:E(t,n,r)}}})},applyRunEvent:e=>{t().applyRunEvents([e])},applyRunEvents:t=>{t.length!==0&&e(e=>{let n={...e.liveRuns},r=e.tasks,i=e.selectedTask;for(let a of t){n[a.taskId]=ee(n[a.taskId],a);let t=a.type===`snapshot`?a.data.task??a.data.detail:void 0,o=t&&typeof t==`object`&&!Array.isArray(t)&&t.id===a.taskId&&Array.isArray(t.messages)?t:void 0;o&&(r=R(r,o),e.selectedTaskId===o.id&&(i=L(i,o)))}return{liveRuns:n,tasks:r,selectedTask:i}})},setLiveRunConnection:(t,n,r,i)=>{e(e=>{let a=e.liveRuns[t];return!a||a.runId!==n?{}:{liveRuns:{...e.liveRuns,[t]:{...a,connection:r,connectionError:i}}}})},clearLiveRun:(t,n)=>{e(e=>{if(n&&e.liveRuns[t]?.runId!==n)return{};let r={...e.liveRuns};return delete r[t],{liveRuns:r}})},loadFiles:async(r,i=``)=>{let a=n,o=++u,s=x();try{let n=await c.listFiles(r,i);if(y(a),!n.success||!n.data)throw M(`Could not load workspace files.`,n);return o===u&&t().selectedTaskId===r&&(P.delete(r),e({files:n.data})),n.data}catch(n){let s=o===u&&v(a)&&t().selectedTaskId===r;if(te(n)){let e=P.get(r)??0;return s&&e<re&&(P.set(r,e+1),setTimeout(()=>{o===u&&v(a)&&t().selectedTaskId===r&&t().loadFiles(r,i).catch(()=>void 0)},ne)),t().files}let c=N(n,`Could not load workspace files.`);throw s&&e({error:c}),Error(c)}finally{S(s,a,r)}},loadFile:async(r,i)=>{let a=n,o=++d,s=_(r,i);f=s;let l=x();try{let n=await c.getFile(r,i);if(y(a),!n.success||!n.data)throw M(`Could not open this workspace file.`,n);if(o!==d||f!==s||!v(a)||t().selectedTaskId!==r)throw Error(`Work file request was superseded.`);return e({selectedFile:n.data}),n.data}catch(n){let i=N(n,`Could not open this file.`);throw o===d&&v(a)&&t().selectedTaskId===r&&e({error:i}),Error(i)}finally{S(l,a,r)}},clearSelectedFile:()=>{d+=1,f=null,e({selectedFile:null})},saveFile:async(r,i,a,o)=>{let s=n,l=w(r),u=_(r,i);f===u&&(d+=1,f=null);try{let n=await c.saveFile(r,i,a,o);if(y(s),!n.success||!n.data)throw M(`Could not save this workspace file.`,n);return t().selectedTaskId===r&&t().selectedFile?.path===i&&(f===u&&(d+=1,f=null),e({selectedFile:n.data})),n.data}catch(e){let t=N(e,`Could not save this file.`);throw D(r,s,t),Error(t)}finally{T(l,s)}},startPreview:(e,t)=>k(()=>c.startPreview(e,t),`Could not start the workspace preview.`,e),stopPreview:e=>k(()=>c.stopPreview(e),`Could not stop the workspace preview.`,e),clearError:()=>e({error:null}),clearAllState:()=>{n+=1,i=++r,a=i,o+=1,s=null,m.clear(),g.clear(),b(),e({capabilities:null,tasks:[],selectedTaskId:null,selectedTask:null,files:[],selectedFile:null,liveRuns:{},loadingTasks:!1,loadingTask:!1,loadingOlderMessages:!1,loadingFiles:!1,actionLoading:!1,error:null})}}}),oe=async(e,t,n)=>{let r=await t(e);return r.success&&await n(),r},B=n(`store:plugin-store`),V=a((e,t)=>({plugins:[],pluginStatus:[],pluginVariables:{},isLoading:!1,isUploading:!1,error:null,loadPlugins:async()=>{e({isLoading:!0,error:null});try{let t=await l.getAllPlugins();t.success&&t.data?e({plugins:t.data}):e({error:t.error||`Failed to load plugins`})}catch(t){e({error:i(t,`Failed to load plugins`)})}finally{e({isLoading:!1})}},uploadPlugin:async n=>{e({isUploading:!0,error:null});try{let r=await l.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 l.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 l.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 l.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 oe(n,l.activatePlugin,()=>t().loadPlugins());r.success||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 l.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 l.getPluginStatus();t.success&&t.data&&e({pluginStatus:t.data})}catch(e){B.error(`Failed to load plugin status:`,e)}},exportPlugin:async t=>{e({isLoading:!0,error:null});try{let e=await l.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 l.getVariables(t);n.success&&n.data&&e(e=>({pluginVariables:{...e.pluginVariables,[t]:n.data}}))}catch(e){B.error(`Failed to fetch plugin variables:`,e)}},updatePluginVariables:async(e,n,r=[])=>{try{return(await l.setVariables(e,n,r)).success?(await t().fetchPluginVariables(e),!0):!1}catch(e){return B.error(`Failed to update plugin variables:`,e),!1}},resetPluginVariables:async t=>{try{let n=await l.resetVariables(t);return n.success&&n.data===!0?(e(e=>{let n={...e.pluginVariables};return delete n[t],{pluginVariables:n}}),!0):!1}catch(e){return B.error(`Failed to reset plugin variables:`,e),!1}},clearError:()=>e({error:null}),setError:t=>e({error:t})})),H=`libre-webui:work-draft:`,U=(e,t)=>`${H}${e}:${t}`,se=(e,t)=>{try{let n=window.sessionStorage.getItem(U(e,t));if(!n)return null;let r=JSON.parse(n);return typeof r.content==`string`?{content:r.content,baseUpdatedAt:typeof r.baseUpdatedAt==`number`?r.baseUpdatedAt:void 0}:null}catch{return null}},ce=(e,t,n)=>{try{return window.sessionStorage.setItem(U(e,t),JSON.stringify(n)),!0}catch{return!1}},W=(e,t)=>{try{window.sessionStorage.removeItem(U(e,t))}catch{}},le=e=>{let t=`${H}${e}:`;try{for(let e=window.sessionStorage.length-1;e>=0;e--){let n=window.sessionStorage.key(e);n?.startsWith(t)&&window.sessionStorage.removeItem(n)}}catch{}},G=()=>{try{for(let e=window.sessionStorage.length-1;e>=0;e--){let t=window.sessionStorage.key(e);t?.startsWith(H)&&window.sessionStorage.removeItem(t)}}catch{}},ue=`/ws/work-terminal`,de=`/ws/work-screen`,fe=`/ws/work-audio`;function K(e,t,n){let r;try{r=new URL(e)}catch{throw Error(`${t} must be an absolute URL.`)}if(!n.includes(r.protocol))throw Error(`${t} must use ${n.join(` or `)}.`);if(r.username||r.password||r.search||r.hash)throw Error(`${t} must not contain credentials, a query, or a fragment.`);return r}function q(e){return e.replace(/\/+$/,``)}function pe(e){return q(K(e,`VITE_WS_BASE_URL`,[`ws:`,`wss:`]).toString())}function me(e){let t=K(e,`VITE_API_BASE_URL`,[`http:`,`https:`]);return t.protocol=t.protocol===`https:`?`wss:`:`ws:`,t.pathname=t.pathname.replace(/\/api\/?$/,``),q(t.toString())}function J(e){let t=e.websocketBaseUrl?.trim();if(t)return pe(t);if(e.protocol===`file:`)return`ws://localhost:3001`;let n=e.apiBaseUrl?.trim();return n?me(n):`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}`}function Y(e,t,n){let r=J(t),i=new URL(`${r}/${e.replace(/^\/+/,``)}`);for(let[e,t]of Object.entries(n))i.searchParams.set(e,t);return i.toString()}function he(e,t){return Y(`/ws`,t,{ticket:e})}function ge(e,t,n){return Y(de,n,{taskId:e,ticket:t})}function _e(e,t,n){return Y(fe,n,{taskId:e,ticket:t})}function ve(e,t,n){return Y(ue,n,{taskId:e,ticket:t})}var X=n(`websocket`),Z=e=>{if(e instanceof Error&&e.message===`Session expired`)return!0;let t=e?.response?.status;return t===401||t===403},Q=new class{ws=null;urlEnvironment;reconnectAttempts=0;reconnectDelay=1e3;maxReconnectDelay=3e4;reconnectTimer=null;messageHandlers=new Map;connectPromise=null;shouldReconnect=!1;connectionEpoch=0;constructor(){this.urlEnvironment={protocol:window.location.protocol,host:window.location.host,hostname:window.location.hostname,apiBaseUrl:void 0,websocketBaseUrl:void 0,production:!0},X.debug(`WebSocket base URL resolved:`,J(this.urlEnvironment))}connect(){if(e())return X.debug(`Demo mode active: skipping WebSocket connection.`),Promise.resolve();if(this.ws?.readyState===WebSocket.OPEN)return Promise.resolve();if(this.connectPromise)return this.connectPromise;this.clearReconnectTimer(),this.shouldReconnect=!0;let t=++this.connectionEpoch,n=this.openWithTicket(t).catch(e=>{if(!(!this.shouldReconnect||t!==this.connectionEpoch))throw Z(e)?(this.shouldReconnect=!1,this.clearReconnectTimer()):this.attemptReconnect(t),e}).finally(()=>{this.connectPromise===n&&(this.connectPromise=null)});return this.connectPromise=n,n}async openWithTicket(e){let t=(await s.post(`/auth/websocket-ticket`,{audience:`chat`})).data.data?.ticket;if(!t)throw Error(`The server did not issue a WebSocket ticket.`);if(!(!this.shouldReconnect||e!==this.connectionEpoch))return X.debug(`WebSocket: Attempting to connect`),new Promise((n,r)=>{try{let i=he(t,this.urlEnvironment);X.debug(`WebSocket: Connecting with a one-use ticket`);let a=new WebSocket(i),o=!1;this.ws=a,a.onopen=()=>{if(!this.shouldReconnect||e!==this.connectionEpoch){a.close(),n();return}X.debug(`WebSocket connected successfully`),o=!0,this.reconnectAttempts=0,this.clearReconnectTimer(),n()},a.onmessage=t=>{if(!(!this.shouldReconnect||e!==this.connectionEpoch))try{let e=JSON.parse(t.data),n=this.messageHandlers.get(e.type);n?n(e.data):e.type===`connected`?X.debug(`WebSocket: Server confirmed connection`):X.warn(`WebSocket: No handler for message type:`,e.type)}catch(e){X.error(`Failed to parse WebSocket message:`,e)}},a.onclose=()=>{if(X.debug(`WebSocket disconnected`),this.ws===a&&(this.ws=null),e!==this.connectionEpoch){n();return}o?this.shouldReconnect&&this.attemptReconnect(e):r(Error(`WebSocket closed before opening`))},a.onerror=t=>{if(e!==this.connectionEpoch){n();return}X.error(`WebSocket error:`,t),r(t)}}catch(e){r(e)}})}disconnect(){this.shouldReconnect=!1,this.connectionEpoch+=1,this.clearReconnectTimer(),this.reconnectAttempts=0,this.connectPromise=null;let e=this.ws;e&&(this.ws=null,e.readyState!==WebSocket.CONNECTING&&e.close())}reconnect(){return this.disconnect(),this.connect()}send(e){return this.ws&&this.ws.readyState===WebSocket.OPEN?(X.debug(`WebSocket: Sending message:`,e),this.ws.send(JSON.stringify(e)),!0):(X.warn(`WebSocket is not connected. ReadyState:`,this.ws?.readyState),!1)}onMessage(e,t){this.messageHandlers.delete(e),this.messageHandlers.set(e,t)}offMessage(e){this.messageHandlers.delete(e)}dispatchMessage(e,t){this.messageHandlers.get(e)?.(t)}clearReconnectTimer(){this.reconnectTimer!==null&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null}attemptReconnect(t){if(e()||!this.shouldReconnect||t!==this.connectionEpoch||this.reconnectTimer!==null)return;let n=Math.min(this.reconnectDelay*2**this.reconnectAttempts,this.maxReconnectDelay);this.reconnectAttempts=Math.min(this.reconnectAttempts+1,5),X.debug(`Reconnecting WebSocket in ${n}ms`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,!(!this.shouldReconnect||t!==this.connectionEpoch)&&this.connect().catch(()=>{})},n)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}},$=n(`auth-store`),ye=a()(o((n,i)=>({user:null,token:null,systemInfo:null,workAccess:null,isAuthenticated:!1,isLoading:!1,login:(t,a,o)=>{let s=i().user?.id===t.id;localStorage.setItem(`auth-token`,a);let c=r.getState();c.clearAllState&&c.clearAllState(),z.getState().clearAllState(),s||(G(),d.getState().clearUserState()),n({user:t,token:a,systemInfo:o,isAuthenticated:!0,isLoading:!1}),setTimeout(async()=>{try{let t=V.getState();$.debug(`Reinitializing app after login...`),$.debug(`Reconnecting WebSocket with auth token...`);try{await Q.reconnect()}catch(e){$.warn(`WebSocket reconnect after login failed; continuing app initialization:`,e)}try{!(await u.checkHealth()).success&&!e()&&$.warn(`Ollama service not available after login`)}catch(e){$.warn(`Ollama health check failed after login; continuing provider initialization:`,e)}let n=d.getState();await Promise.all([c.loadModels(),c.loadSessions(),c.loadPreferences(),n.loadPreferences(),t.loadPlugins(),i().refreshWorkAccess()]),$.debug(`Reinitialized app after login`)}catch(e){$.error(`Failed to reinitialize app after login:`,e)}},100)},logout:()=>{localStorage.removeItem(`auth-token`),$.debug(`Disconnecting WebSocket on logout...`),Q.disconnect();let e=r.getState();e.clearAllState&&e.clearAllState(),z.getState().clearAllState(),G(),d.getState().clearUserState(),n({user:null,token:null,workAccess:null,isAuthenticated:!1,isLoading:!1})},setUser:e=>{n({user:e})},setSystemInfo:e=>{n({systemInfo:e})},setLoading:e=>{n({isLoading:e})},isAdmin:()=>{let{user:e}=i();return e?.role===`admin`},requiresAuth:()=>{let{systemInfo:e}=i();return e?.requiresAuth??!1},canUseWork:()=>{let{systemInfo:e,user:t,workAccess:n}=i();return e?.requiresAuth===!1||t?.role===`admin`||n?.allowed===!0},canUseAgents:()=>{let{systemInfo:e,user:t}=i();return e?.agentsEnabled===!0?e?.requiresAuth===!1||t?.role===`admin`:!1},refreshWorkAccess:async()=>{try{let{workApi:e}=await t(async()=>{let{workApi:e}=await import(`./workApi-CApikuye.js`);return{workApi:e}},__vite__mapDeps([0,1,2,3])),r=await e.access();r.success&&r.data&&n({workAccess:r.data})}catch(e){$.debug(`Could not load Work access mode:`,e)}}}),{name:`auth-store`,partialize:e=>({user:e.user,token:e.token,systemInfo:e.systemInfo,workAccess:e.workAccess,isAuthenticated:e.isAuthenticated})}));export{ve as a,se as c,z as d,k as f,ge as i,ce as l,Q as n,W as o,_e as r,le as s,ye as t,V as u};
@@ -0,0 +1 @@
1
+ import{t as e}from"./authStore-CieFdk4S.js";export{e as useAuthStore};