From d80ca4dc0790cdcba46ad3a53819798f2275a074 Mon Sep 17 00:00:00 2001 From: yangdx Date: Tue, 18 Mar 2025 15:38:41 +0800 Subject: [PATCH] Added root redirect to /webui and updated webui config --- lightrag/api/lightrag_server.py | 6 ++++++ .../webui/assets/{index-DlSL6ZG8.js => index-CSrxfS-k.js} | 2 +- lightrag/api/webui/index.html | 4 ++-- lightrag_webui/env.local.sample | 2 +- lightrag_webui/src/lib/constants.ts | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) rename lightrag/api/webui/assets/{index-DlSL6ZG8.js => index-CSrxfS-k.js} (99%) diff --git a/lightrag/api/lightrag_server.py b/lightrag/api/lightrag_server.py index 801f122e..b850d16a 100644 --- a/lightrag/api/lightrag_server.py +++ b/lightrag/api/lightrag_server.py @@ -10,6 +10,7 @@ import logging.config import uvicorn import pipmaster as pm from fastapi.staticfiles import StaticFiles +from fastapi.responses import RedirectResponse from pathlib import Path import configparser from ascii_colors import ASCIIColors @@ -340,6 +341,11 @@ def create_app(args): # Add Ollama API routes ollama_api = OllamaAPI(rag, top_k=args.top_k) app.include_router(ollama_api.router, prefix="/api") + + @app.get("/") + async def redirect_to_webui(): + """Redirect root path to /webui""" + return RedirectResponse(url="/webui") @app.get("/auth-status", dependencies=[Depends(optional_api_key)]) async def get_auth_status(): diff --git a/lightrag/api/webui/assets/index-DlSL6ZG8.js b/lightrag/api/webui/assets/index-CSrxfS-k.js similarity index 99% rename from lightrag/api/webui/assets/index-DlSL6ZG8.js rename to lightrag/api/webui/assets/index-CSrxfS-k.js index 9467b23b..2427c50a 100644 --- a/lightrag/api/webui/assets/index-DlSL6ZG8.js +++ b/lightrag/api/webui/assets/index-CSrxfS-k.js @@ -62,7 +62,7 @@ Please change the parent to r.set(a)),r}static accessor(t){const r=(this[SC]=this[SC]={accessors:{}}).accessors,a=this.prototype;function o(s){const u=tu(s);r[u]||(G7(a,s),r[u]=!0)}return ge.isArray(t)?t.forEach(o):o(t),this}};Gn.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);ge.reduceDescriptors(Gn.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}});ge.freezeMethods(Gn);function tm(e,t){const n=this||Hu,r=t||n,a=Gn.from(r.headers);let o=r.data;return ge.forEach(e,function(u){o=u.call(n,o,a.normalize(),t?t.status:void 0)}),a.normalize(),o}function CB(e){return!!(e&&e.__CANCEL__)}function $s(e,t,n){at.call(this,e??"canceled",at.ERR_CANCELED,t,n),this.name="CanceledError"}ge.inherits($s,at,{__CANCEL__:!0});function NB(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new at("Request failed with status code "+n.status,[at.ERR_BAD_REQUEST,at.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function H7(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function $7(e,t){e=e||10;const n=new Array(e),r=new Array(e);let a=0,o=0,s;return t=t!==void 0?t:1e3,function(c){const d=Date.now(),p=r[o];s||(s=d),n[a]=c,r[a]=d;let g=o,m=0;for(;g!==a;)m+=n[g++],g=g%e;if(a=(a+1)%e,a===o&&(o=(o+1)%e),d-s{n=p,a=null,o&&(clearTimeout(o),o=null),e.apply(null,d)};return[(...d)=>{const p=Date.now(),g=p-n;g>=r?s(d,p):(a=d,o||(o=setTimeout(()=>{o=null,s(a)},r-g)))},()=>a&&s(a)]}const ff=(e,t,n=3)=>{let r=0;const a=$7(50,250);return q7(o=>{const s=o.loaded,u=o.lengthComputable?o.total:void 0,c=s-r,d=a(c),p=s<=u;r=s;const g={loaded:s,total:u,progress:u?s/u:void 0,bytes:c,rate:d||void 0,estimated:d&&u&&p?(u-s)/d:void 0,event:o,lengthComputable:u!=null,[t?"download":"upload"]:!0};e(g)},n)},EC=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},wC=e=>(...t)=>ge.asap(()=>e(...t)),V7=xn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,xn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(xn.origin),xn.navigator&&/(msie|trident)/i.test(xn.navigator.userAgent)):()=>!0,W7=xn.hasStandardBrowserEnv?{write(e,t,n,r,a,o){const s=[e+"="+encodeURIComponent(t)];ge.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),ge.isString(r)&&s.push("path="+r),ge.isString(a)&&s.push("domain="+a),o===!0&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Y7(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function K7(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function OB(e,t){return e&&!Y7(t)?K7(e,t):t}const xC=e=>e instanceof Gn?{...e}:e;function hi(e,t){t=t||{};const n={};function r(d,p,g,m){return ge.isPlainObject(d)&&ge.isPlainObject(p)?ge.merge.call({caseless:m},d,p):ge.isPlainObject(p)?ge.merge({},p):ge.isArray(p)?p.slice():p}function a(d,p,g,m){if(ge.isUndefined(p)){if(!ge.isUndefined(d))return r(void 0,d,g,m)}else return r(d,p,g,m)}function o(d,p){if(!ge.isUndefined(p))return r(void 0,p)}function s(d,p){if(ge.isUndefined(p)){if(!ge.isUndefined(d))return r(void 0,d)}else return r(void 0,p)}function u(d,p,g){if(g in t)return r(d,p);if(g in e)return r(void 0,d)}const c={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:u,headers:(d,p,g)=>a(xC(d),xC(p),g,!0)};return ge.forEach(Object.keys(Object.assign({},e,t)),function(p){const g=c[p]||a,m=g(e[p],t[p],p);ge.isUndefined(m)&&g!==u||(n[p]=m)}),n}const DB=e=>{const t=hi({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:a,xsrfCookieName:o,headers:s,auth:u}=t;t.headers=s=Gn.from(s),t.url=AB(OB(t.baseURL,t.url),e.params,e.paramsSerializer),u&&s.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):"")));let c;if(ge.isFormData(n)){if(xn.hasStandardBrowserEnv||xn.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if((c=s.getContentType())!==!1){const[d,...p]=c?c.split(";").map(g=>g.trim()).filter(Boolean):[];s.setContentType([d||"multipart/form-data",...p].join("; "))}}if(xn.hasStandardBrowserEnv&&(r&&ge.isFunction(r)&&(r=r(t)),r||r!==!1&&V7(t.url))){const d=a&&o&&W7.read(o);d&&s.set(a,d)}return t},X7=typeof XMLHttpRequest<"u",Z7=X7&&function(e){return new Promise(function(n,r){const a=DB(e);let o=a.data;const s=Gn.from(a.headers).normalize();let{responseType:u,onUploadProgress:c,onDownloadProgress:d}=a,p,g,m,b,y;function S(){b&&b(),y&&y(),a.cancelToken&&a.cancelToken.unsubscribe(p),a.signal&&a.signal.removeEventListener("abort",p)}let k=new XMLHttpRequest;k.open(a.method.toUpperCase(),a.url,!0),k.timeout=a.timeout;function R(){if(!k)return;const A=Gn.from("getAllResponseHeaders"in k&&k.getAllResponseHeaders()),N={data:!u||u==="text"||u==="json"?k.responseText:k.response,status:k.status,statusText:k.statusText,headers:A,config:e,request:k};NB(function(O){n(O),S()},function(O){r(O),S()},N),k=null}"onloadend"in k?k.onloadend=R:k.onreadystatechange=function(){!k||k.readyState!==4||k.status===0&&!(k.responseURL&&k.responseURL.indexOf("file:")===0)||setTimeout(R)},k.onabort=function(){k&&(r(new at("Request aborted",at.ECONNABORTED,e,k)),k=null)},k.onerror=function(){r(new at("Network Error",at.ERR_NETWORK,e,k)),k=null},k.ontimeout=function(){let C=a.timeout?"timeout of "+a.timeout+"ms exceeded":"timeout exceeded";const N=a.transitional||RB;a.timeoutErrorMessage&&(C=a.timeoutErrorMessage),r(new at(C,N.clarifyTimeoutError?at.ETIMEDOUT:at.ECONNABORTED,e,k)),k=null},o===void 0&&s.setContentType(null),"setRequestHeader"in k&&ge.forEach(s.toJSON(),function(C,N){k.setRequestHeader(N,C)}),ge.isUndefined(a.withCredentials)||(k.withCredentials=!!a.withCredentials),u&&u!=="json"&&(k.responseType=a.responseType),d&&([m,y]=ff(d,!0),k.addEventListener("progress",m)),c&&k.upload&&([g,b]=ff(c),k.upload.addEventListener("progress",g),k.upload.addEventListener("loadend",b)),(a.cancelToken||a.signal)&&(p=A=>{k&&(r(!A||A.type?new $s(null,e,k):A),k.abort(),k=null)},a.cancelToken&&a.cancelToken.subscribe(p),a.signal&&(a.signal.aborted?p():a.signal.addEventListener("abort",p)));const x=H7(a.url);if(x&&xn.protocols.indexOf(x)===-1){r(new at("Unsupported protocol "+x+":",at.ERR_BAD_REQUEST,e));return}k.send(o||null)})},Q7=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,a;const o=function(d){if(!a){a=!0,u();const p=d instanceof Error?d:this.reason;r.abort(p instanceof at?p:new $s(p instanceof Error?p.message:p))}};let s=t&&setTimeout(()=>{s=null,o(new at(`timeout ${t} of ms exceeded`,at.ETIMEDOUT))},t);const u=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach(d=>{d.unsubscribe?d.unsubscribe(o):d.removeEventListener("abort",o)}),e=null)};e.forEach(d=>d.addEventListener("abort",o));const{signal:c}=r;return c.unsubscribe=()=>ge.asap(u),c}},J7=function*(e,t){let n=e.byteLength;if(n{const a=eV(e,t);let o=0,s,u=c=>{s||(s=!0,r&&r(c))};return new ReadableStream({async pull(c){try{const{done:d,value:p}=await a.next();if(d){u(),c.close();return}let g=p.byteLength;if(n){let m=o+=g;n(m)}c.enqueue(new Uint8Array(p))}catch(d){throw u(d),d}},cancel(c){return u(c),a.return()}},{highWaterMark:2})},Qf=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",IB=Qf&&typeof ReadableStream=="function",nV=Qf&&(typeof TextEncoder=="function"?(e=>t=>e.encode(t))(new TextEncoder):async e=>new Uint8Array(await new Response(e).arrayBuffer())),LB=(e,...t)=>{try{return!!e(...t)}catch{return!1}},rV=IB&&LB(()=>{let e=!1;const t=new Request(xn.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t}),TC=64*1024,fk=IB&&LB(()=>ge.isReadableStream(new Response("").body)),pf={stream:fk&&(e=>e.body)};Qf&&(e=>{["text","arrayBuffer","blob","formData","stream"].forEach(t=>{!pf[t]&&(pf[t]=ge.isFunction(e[t])?n=>n[t]():(n,r)=>{throw new at(`Response type '${t}' is not supported`,at.ERR_NOT_SUPPORT,r)})})})(new Response);const aV=async e=>{if(e==null)return 0;if(ge.isBlob(e))return e.size;if(ge.isSpecCompliantForm(e))return(await new Request(xn.origin,{method:"POST",body:e}).arrayBuffer()).byteLength;if(ge.isArrayBufferView(e)||ge.isArrayBuffer(e))return e.byteLength;if(ge.isURLSearchParams(e)&&(e=e+""),ge.isString(e))return(await nV(e)).byteLength},oV=async(e,t)=>{const n=ge.toFiniteNumber(e.getContentLength());return n??aV(t)},iV=Qf&&(async e=>{let{url:t,method:n,data:r,signal:a,cancelToken:o,timeout:s,onDownloadProgress:u,onUploadProgress:c,responseType:d,headers:p,withCredentials:g="same-origin",fetchOptions:m}=DB(e);d=d?(d+"").toLowerCase():"text";let b=Q7([a,o&&o.toAbortSignal()],s),y;const S=b&&b.unsubscribe&&(()=>{b.unsubscribe()});let k;try{if(c&&rV&&n!=="get"&&n!=="head"&&(k=await oV(p,r))!==0){let N=new Request(t,{method:"POST",body:r,duplex:"half"}),_;if(ge.isFormData(r)&&(_=N.headers.get("content-type"))&&p.setContentType(_),N.body){const[O,F]=EC(k,ff(wC(c)));r=kC(N.body,TC,O,F)}}ge.isString(g)||(g=g?"include":"omit");const R="credentials"in Request.prototype;y=new Request(t,{...m,signal:b,method:n.toUpperCase(),headers:p.normalize().toJSON(),body:r,duplex:"half",credentials:R?g:void 0});let x=await fetch(y);const A=fk&&(d==="stream"||d==="response");if(fk&&(u||A&&S)){const N={};["status","statusText","headers"].forEach(D=>{N[D]=x[D]});const _=ge.toFiniteNumber(x.headers.get("content-length")),[O,F]=u&&EC(_,ff(wC(u),!0))||[];x=new Response(kC(x.body,TC,O,()=>{F&&F(),S&&S()}),N)}d=d||"text";let C=await pf[ge.findKey(pf,d)||"text"](x,e);return!A&&S&&S(),await new Promise((N,_)=>{NB(N,_,{data:C,headers:Gn.from(x.headers),status:x.status,statusText:x.statusText,config:e,request:y})})}catch(R){throw S&&S(),R&&R.name==="TypeError"&&/fetch/i.test(R.message)?Object.assign(new at("Network Error",at.ERR_NETWORK,e,y),{cause:R.cause||R}):at.from(R,R&&R.code,e,y)}}),pk={http:E7,xhr:Z7,fetch:iV};ge.forEach(pk,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const AC=e=>`- ${e}`,sV=e=>ge.isFunction(e)||e===null||e===!1,MB={getAdapter:e=>{e=ge.isArray(e)?e:[e];const{length:t}=e;let n,r;const a={};for(let o=0;o`adapter ${u} `+(c===!1?"is not supported by the environment":"is not available in the build"));let s=t?o.length>1?`since : `+o.map(AC).join(` `):" "+AC(o[0]):"as no adapter specified";throw new at("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return r},adapters:pk};function nm(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new $s(null,e)}function RC(e){return nm(e),e.headers=Gn.from(e.headers),e.data=tm.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),MB.getAdapter(e.adapter||Hu.adapter)(e).then(function(r){return nm(e),r.data=tm.call(e,e.transformResponse,r),r.headers=Gn.from(r.headers),r},function(r){return CB(r)||(nm(e),r&&r.response&&(r.response.data=tm.call(e,e.transformResponse,r.response),r.response.headers=Gn.from(r.response.headers))),Promise.reject(r)})}const FB="1.7.9",Jf={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Jf[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const _C={};Jf.transitional=function(t,n,r){function a(o,s){return"[Axios v"+FB+"] Transitional option '"+o+"'"+s+(r?". "+r:"")}return(o,s,u)=>{if(t===!1)throw new at(a(s," has been removed"+(n?" in "+n:"")),at.ERR_DEPRECATED);return n&&!_C[s]&&(_C[s]=!0,console.warn(a(s," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,s,u):!0}};Jf.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function lV(e,t,n){if(typeof e!="object")throw new at("options must be an object",at.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let a=r.length;for(;a-- >0;){const o=r[a],s=t[o];if(s){const u=e[o],c=u===void 0||s(u,o,e);if(c!==!0)throw new at("option "+o+" must be "+c,at.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new at("Unknown option "+o,at.ERR_BAD_OPTION)}}const Yd={assertOptions:lV,validators:Jf},Zr=Yd.validators;let pi=class{constructor(t){this.defaults=t,this.interceptors={request:new vC,response:new vC}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let a={};Error.captureStackTrace?Error.captureStackTrace(a):a=new Error;const o=a.stack?a.stack.replace(/^.+\n/,""):"";try{r.stack?o&&!String(r.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(r.stack+=` -`+o):r.stack=o}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=hi(this.defaults,n);const{transitional:r,paramsSerializer:a,headers:o}=n;r!==void 0&&Yd.assertOptions(r,{silentJSONParsing:Zr.transitional(Zr.boolean),forcedJSONParsing:Zr.transitional(Zr.boolean),clarifyTimeoutError:Zr.transitional(Zr.boolean)},!1),a!=null&&(ge.isFunction(a)?n.paramsSerializer={serialize:a}:Yd.assertOptions(a,{encode:Zr.function,serialize:Zr.function},!0)),Yd.assertOptions(n,{baseUrl:Zr.spelling("baseURL"),withXsrfToken:Zr.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=o&&ge.merge(o.common,o[n.method]);o&&ge.forEach(["delete","get","head","post","put","patch","common"],y=>{delete o[y]}),n.headers=Gn.concat(s,o);const u=[];let c=!0;this.interceptors.request.forEach(function(S){typeof S.runWhen=="function"&&S.runWhen(n)===!1||(c=c&&S.synchronous,u.unshift(S.fulfilled,S.rejected))});const d=[];this.interceptors.response.forEach(function(S){d.push(S.fulfilled,S.rejected)});let p,g=0,m;if(!c){const y=[RC.bind(this),void 0];for(y.unshift.apply(y,u),y.push.apply(y,d),m=y.length,p=Promise.resolve(n);g{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](a);r._listeners=null}),this.promise.then=a=>{let o;const s=new Promise(u=>{r.subscribe(u),o=u}).then(a);return s.cancel=function(){r.unsubscribe(o)},s},t(function(o,s,u){r.reason||(r.reason=new $s(o,s,u),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new PB(function(a){t=a}),cancel:t}}};function cV(e){return function(n){return e.apply(null,n)}}function dV(e){return ge.isObject(e)&&e.isAxiosError===!0}const gk={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(gk).forEach(([e,t])=>{gk[t]=e});function zB(e){const t=new pi(e),n=gB(pi.prototype.request,t);return ge.extend(n,pi.prototype,t,{allOwnKeys:!0}),ge.extend(n,t,null,{allOwnKeys:!0}),n.create=function(a){return zB(hi(e,a))},n}const Yt=zB(Hu);Yt.Axios=pi;Yt.CanceledError=$s;Yt.CancelToken=uV;Yt.isCancel=CB;Yt.VERSION=FB;Yt.toFormData=Zf;Yt.AxiosError=at;Yt.Cancel=Yt.CanceledError;Yt.all=function(t){return Promise.all(t)};Yt.spread=cV;Yt.isAxiosError=dV;Yt.mergeConfig=hi;Yt.AxiosHeaders=Gn;Yt.formToJSON=e=>_B(ge.isHTMLForm(e)?new FormData(e):e);Yt.getAdapter=MB.getAdapter;Yt.HttpStatusCode=gk;Yt.default=Yt;const{Axios:dxe,AxiosError:fxe,CanceledError:pxe,isCancel:gxe,CancelToken:hxe,VERSION:mxe,all:bxe,Cancel:yxe,isAxiosError:vxe,spread:Sxe,toFormData:Exe,AxiosHeaders:wxe,HttpStatusCode:xxe,formToJSON:kxe,getAdapter:Txe,mergeConfig:Axe}=Yt,BB="",hk="",Pr="ghost",fV="#B2EBF2",pV="#000",gV="#E2E2E2",UB="#EEEEEE",hV="#F57F17",mV="#969696",bV="#F57F17",CC="#B2EBF2",hd=50,NC=100,hu=4,jB=20,yV=15,OC="*",vV={"text/plain":[".txt",".md",".html",".htm",".tex",".json",".xml",".yaml",".yml",".rtf",".odt",".epub",".csv",".log",".conf",".ini",".properties",".sql",".bat",".sh",".c",".cpp",".py",".java",".js",".ts",".swift",".go",".rb",".php",".css",".scss",".less"],"application/pdf":[".pdf"],"application/msword":[".doc"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":[".docx"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":[".pptx"]},DC={name:"LightRAG",github:"https://github.com/HKUDS/LightRAG"},SV="modulepreload",EV=function(e,t){return new URL(e,t).href},IC={},wV=function(t,n,r){let a=Promise.resolve();if(n&&n.length>0){const s=document.getElementsByTagName("link"),u=document.querySelector("meta[property=csp-nonce]"),c=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));a=Promise.allSettled(n.map(d=>{if(d=EV(d,r),d in IC)return;IC[d]=!0;const p=d.endsWith(".css"),g=p?'[rel="stylesheet"]':"";if(r)for(let b=s.length-1;b>=0;b--){const y=s[b];if(y.href===d&&(!p||y.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${d}"]${g}`))return;const m=document.createElement("link");if(m.rel=p?"stylesheet":SV,p||(m.as="script"),m.crossOrigin="",m.href=d,c&&m.setAttribute("nonce",c),document.head.appendChild(m),p)return new Promise((b,y)=>{m.addEventListener("load",b),m.addEventListener("error",()=>y(new Error(`Unable to preload CSS for ${d}`)))})}))}function o(s){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=s,window.dispatchEvent(u),!u.defaultPrevented)throw s}return a.then(s=>{for(const u of s||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};function GB(e,t){let n;try{n=e()}catch{return}return{getItem:a=>{var o;const s=c=>c===null?null:JSON.parse(c,void 0),u=(o=n.getItem(a))!=null?o:null;return u instanceof Promise?u.then(s):s(u)},setItem:(a,o)=>n.setItem(a,JSON.stringify(o,void 0)),removeItem:a=>n.removeItem(a)}}const mk=e=>t=>{try{const n=e(t);return n instanceof Promise?n:{then(r){return mk(r)(n)},catch(r){return this}}}catch(n){return{then(r){return this},catch(r){return mk(r)(n)}}}},xV=(e,t)=>(n,r,a)=>{let o={storage:GB(()=>localStorage),partialize:S=>S,version:0,merge:(S,k)=>({...k,...S}),...t},s=!1;const u=new Set,c=new Set;let d=o.storage;if(!d)return e((...S)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),n(...S)},r,a);const p=()=>{const S=o.partialize({...r()});return d.setItem(o.name,{state:S,version:o.version})},g=a.setState;a.setState=(S,k)=>{g(S,k),p()};const m=e((...S)=>{n(...S),p()},r,a);a.getInitialState=()=>m;let b;const y=()=>{var S,k;if(!d)return;s=!1,u.forEach(x=>{var A;return x((A=r())!=null?A:m)});const R=((k=o.onRehydrateStorage)==null?void 0:k.call(o,(S=r())!=null?S:m))||void 0;return mk(d.getItem.bind(d))(o.name).then(x=>{if(x)if(typeof x.version=="number"&&x.version!==o.version){if(o.migrate){const A=o.migrate(x.state,x.version);return A instanceof Promise?A.then(C=>[!0,C]):[!0,A]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,x.state];return[!1,void 0]}).then(x=>{var A;const[C,N]=x;if(b=o.merge(N,(A=r())!=null?A:m),n(b,!0),C)return p()}).then(()=>{R==null||R(b,void 0),b=r(),s=!0,c.forEach(x=>x(b))}).catch(x=>{R==null||R(void 0,x)})};return a.persist={setOptions:S=>{o={...o,...S},S.storage&&(d=S.storage)},clearStorage:()=>{d==null||d.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>y(),hasHydrated:()=>s,onHydrate:S=>(u.add(S),()=>{u.delete(S)}),onFinishHydration:S=>(c.add(S),()=>{c.delete(S)})},o.skipHydration||y(),b||m},kV=xV,TV=Wf()(kV(e=>({theme:"system",language:"en",showPropertyPanel:!0,showNodeSearchBar:!0,showNodeLabel:!0,enableNodeDrag:!0,showEdgeLabel:!1,enableHideUnselectedEdges:!0,enableEdgeEvents:!1,graphQueryMaxDepth:3,graphMinDegree:0,graphLayoutMaxIterations:15,queryLabel:OC,enableHealthCheck:!0,apiKey:null,currentTab:"documents",retrievalHistory:[],querySettings:{mode:"global",response_type:"Multiple Paragraphs",top_k:10,max_token_for_text_unit:4e3,max_token_for_global_context:4e3,max_token_for_local_context:4e3,only_need_context:!1,only_need_prompt:!1,stream:!0,history_turns:3,hl_keywords:[],ll_keywords:[]},setTheme:t=>e({theme:t}),setLanguage:t=>{e({language:t}),wV(async()=>{const{default:n}=await Promise.resolve().then(()=>$we);return{default:n}},[],import.meta.url).then(({default:n})=>{n.language!==t&&n.changeLanguage(t)})},setGraphLayoutMaxIterations:t=>e({graphLayoutMaxIterations:t}),setQueryLabel:t=>e({queryLabel:t}),setGraphQueryMaxDepth:t=>e({graphQueryMaxDepth:t}),setGraphMinDegree:t=>e({graphMinDegree:t}),setEnableHealthCheck:t=>e({enableHealthCheck:t}),setApiKey:t=>e({apiKey:t}),setCurrentTab:t=>e({currentTab:t}),setRetrievalHistory:t=>e({retrievalHistory:t}),updateQuerySettings:t=>e(n=>({querySettings:{...n.querySettings,...t}}))}),{name:"settings-storage",storage:GB(()=>localStorage),version:8,migrate:(e,t)=>(t<2&&(e.showEdgeLabel=!1),t<3&&(e.queryLabel=OC),t<4&&(e.showPropertyPanel=!0,e.showNodeSearchBar=!0,e.showNodeLabel=!0,e.enableHealthCheck=!0,e.apiKey=null),t<5&&(e.currentTab="documents"),t<6&&(e.querySettings={mode:"global",response_type:"Multiple Paragraphs",top_k:10,max_token_for_text_unit:4e3,max_token_for_global_context:4e3,max_token_for_local_context:4e3,only_need_context:!1,only_need_prompt:!1,stream:!0,history_turns:3,hl_keywords:[],ll_keywords:[]},e.retrievalHistory=[]),t<7&&(e.graphQueryMaxDepth=3,e.graphLayoutMaxIterations=15),t<8&&(e.graphMinDegree=0,e.language="en"),e)})),Ge=C0(TV),HB="Invalid API Key",$B="API Key required",ar=Yt.create({baseURL:BB,headers:{"Content-Type":"application/json"}});ar.interceptors.request.use(e=>{const t=Ge.getState().apiKey,n=localStorage.getItem("LIGHTRAG-API-TOKEN");return["/documents","/graphs","/query","/health"].some(o=>{var s;return(s=e.url)==null?void 0:s.includes(o)})&&!n&&e.url!=="/login"?Promise.reject(new Error("Authentication required")):(t&&(e.headers["X-API-Key"]=t),n&&(e.headers.Authorization=`Bearer ${n}`),e)});ar.interceptors.response.use(e=>e,e=>{var t,n;if(e.response){if(((t=e.response)==null?void 0:t.status)===401)return localStorage.removeItem("LIGHTRAG-API-TOKEN"),sessionStorage.clear(),na.getState().logout(),window.location.pathname!==`${hk}/#/login`&&(window.location.href=`${hk}/#/login`),Promise.reject(e);throw new Error(`${e.response.status} ${e.response.statusText} +`+o):r.stack=o}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=hi(this.defaults,n);const{transitional:r,paramsSerializer:a,headers:o}=n;r!==void 0&&Yd.assertOptions(r,{silentJSONParsing:Zr.transitional(Zr.boolean),forcedJSONParsing:Zr.transitional(Zr.boolean),clarifyTimeoutError:Zr.transitional(Zr.boolean)},!1),a!=null&&(ge.isFunction(a)?n.paramsSerializer={serialize:a}:Yd.assertOptions(a,{encode:Zr.function,serialize:Zr.function},!0)),Yd.assertOptions(n,{baseUrl:Zr.spelling("baseURL"),withXsrfToken:Zr.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let s=o&&ge.merge(o.common,o[n.method]);o&&ge.forEach(["delete","get","head","post","put","patch","common"],y=>{delete o[y]}),n.headers=Gn.concat(s,o);const u=[];let c=!0;this.interceptors.request.forEach(function(S){typeof S.runWhen=="function"&&S.runWhen(n)===!1||(c=c&&S.synchronous,u.unshift(S.fulfilled,S.rejected))});const d=[];this.interceptors.response.forEach(function(S){d.push(S.fulfilled,S.rejected)});let p,g=0,m;if(!c){const y=[RC.bind(this),void 0];for(y.unshift.apply(y,u),y.push.apply(y,d),m=y.length,p=Promise.resolve(n);g{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](a);r._listeners=null}),this.promise.then=a=>{let o;const s=new Promise(u=>{r.subscribe(u),o=u}).then(a);return s.cancel=function(){r.unsubscribe(o)},s},t(function(o,s,u){r.reason||(r.reason=new $s(o,s,u),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new PB(function(a){t=a}),cancel:t}}};function cV(e){return function(n){return e.apply(null,n)}}function dV(e){return ge.isObject(e)&&e.isAxiosError===!0}const gk={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(gk).forEach(([e,t])=>{gk[t]=e});function zB(e){const t=new pi(e),n=gB(pi.prototype.request,t);return ge.extend(n,pi.prototype,t,{allOwnKeys:!0}),ge.extend(n,t,null,{allOwnKeys:!0}),n.create=function(a){return zB(hi(e,a))},n}const Yt=zB(Hu);Yt.Axios=pi;Yt.CanceledError=$s;Yt.CancelToken=uV;Yt.isCancel=CB;Yt.VERSION=FB;Yt.toFormData=Zf;Yt.AxiosError=at;Yt.Cancel=Yt.CanceledError;Yt.all=function(t){return Promise.all(t)};Yt.spread=cV;Yt.isAxiosError=dV;Yt.mergeConfig=hi;Yt.AxiosHeaders=Gn;Yt.formToJSON=e=>_B(ge.isHTMLForm(e)?new FormData(e):e);Yt.getAdapter=MB.getAdapter;Yt.HttpStatusCode=gk;Yt.default=Yt;const{Axios:dxe,AxiosError:fxe,CanceledError:pxe,isCancel:gxe,CancelToken:hxe,VERSION:mxe,all:bxe,Cancel:yxe,isAxiosError:vxe,spread:Sxe,toFormData:Exe,AxiosHeaders:wxe,HttpStatusCode:xxe,formToJSON:kxe,getAdapter:Txe,mergeConfig:Axe}=Yt,BB="",hk="/webui/",Pr="ghost",fV="#B2EBF2",pV="#000",gV="#E2E2E2",UB="#EEEEEE",hV="#F57F17",mV="#969696",bV="#F57F17",CC="#B2EBF2",hd=50,NC=100,hu=4,jB=20,yV=15,OC="*",vV={"text/plain":[".txt",".md",".html",".htm",".tex",".json",".xml",".yaml",".yml",".rtf",".odt",".epub",".csv",".log",".conf",".ini",".properties",".sql",".bat",".sh",".c",".cpp",".py",".java",".js",".ts",".swift",".go",".rb",".php",".css",".scss",".less"],"application/pdf":[".pdf"],"application/msword":[".doc"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":[".docx"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":[".pptx"]},DC={name:"LightRAG",github:"https://github.com/HKUDS/LightRAG"},SV="modulepreload",EV=function(e){return"/webui/"+e},IC={},wV=function(t,n,r){let a=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),u=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));a=Promise.allSettled(n.map(c=>{if(c=EV(c),c in IC)return;IC[c]=!0;const d=c.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${p}`))return;const g=document.createElement("link");if(g.rel=d?"stylesheet":SV,d||(g.as="script"),g.crossOrigin="",g.href=c,u&&g.setAttribute("nonce",u),document.head.appendChild(g),d)return new Promise((m,b)=>{g.addEventListener("load",m),g.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}function o(s){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=s,window.dispatchEvent(u),!u.defaultPrevented)throw s}return a.then(s=>{for(const u of s||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};function GB(e,t){let n;try{n=e()}catch{return}return{getItem:a=>{var o;const s=c=>c===null?null:JSON.parse(c,void 0),u=(o=n.getItem(a))!=null?o:null;return u instanceof Promise?u.then(s):s(u)},setItem:(a,o)=>n.setItem(a,JSON.stringify(o,void 0)),removeItem:a=>n.removeItem(a)}}const mk=e=>t=>{try{const n=e(t);return n instanceof Promise?n:{then(r){return mk(r)(n)},catch(r){return this}}}catch(n){return{then(r){return this},catch(r){return mk(r)(n)}}}},xV=(e,t)=>(n,r,a)=>{let o={storage:GB(()=>localStorage),partialize:S=>S,version:0,merge:(S,k)=>({...k,...S}),...t},s=!1;const u=new Set,c=new Set;let d=o.storage;if(!d)return e((...S)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),n(...S)},r,a);const p=()=>{const S=o.partialize({...r()});return d.setItem(o.name,{state:S,version:o.version})},g=a.setState;a.setState=(S,k)=>{g(S,k),p()};const m=e((...S)=>{n(...S),p()},r,a);a.getInitialState=()=>m;let b;const y=()=>{var S,k;if(!d)return;s=!1,u.forEach(x=>{var A;return x((A=r())!=null?A:m)});const R=((k=o.onRehydrateStorage)==null?void 0:k.call(o,(S=r())!=null?S:m))||void 0;return mk(d.getItem.bind(d))(o.name).then(x=>{if(x)if(typeof x.version=="number"&&x.version!==o.version){if(o.migrate){const A=o.migrate(x.state,x.version);return A instanceof Promise?A.then(C=>[!0,C]):[!0,A]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}else return[!1,x.state];return[!1,void 0]}).then(x=>{var A;const[C,N]=x;if(b=o.merge(N,(A=r())!=null?A:m),n(b,!0),C)return p()}).then(()=>{R==null||R(b,void 0),b=r(),s=!0,c.forEach(x=>x(b))}).catch(x=>{R==null||R(void 0,x)})};return a.persist={setOptions:S=>{o={...o,...S},S.storage&&(d=S.storage)},clearStorage:()=>{d==null||d.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>y(),hasHydrated:()=>s,onHydrate:S=>(u.add(S),()=>{u.delete(S)}),onFinishHydration:S=>(c.add(S),()=>{c.delete(S)})},o.skipHydration||y(),b||m},kV=xV,TV=Wf()(kV(e=>({theme:"system",language:"en",showPropertyPanel:!0,showNodeSearchBar:!0,showNodeLabel:!0,enableNodeDrag:!0,showEdgeLabel:!1,enableHideUnselectedEdges:!0,enableEdgeEvents:!1,graphQueryMaxDepth:3,graphMinDegree:0,graphLayoutMaxIterations:15,queryLabel:OC,enableHealthCheck:!0,apiKey:null,currentTab:"documents",retrievalHistory:[],querySettings:{mode:"global",response_type:"Multiple Paragraphs",top_k:10,max_token_for_text_unit:4e3,max_token_for_global_context:4e3,max_token_for_local_context:4e3,only_need_context:!1,only_need_prompt:!1,stream:!0,history_turns:3,hl_keywords:[],ll_keywords:[]},setTheme:t=>e({theme:t}),setLanguage:t=>{e({language:t}),wV(async()=>{const{default:n}=await Promise.resolve().then(()=>$we);return{default:n}},[]).then(({default:n})=>{n.language!==t&&n.changeLanguage(t)})},setGraphLayoutMaxIterations:t=>e({graphLayoutMaxIterations:t}),setQueryLabel:t=>e({queryLabel:t}),setGraphQueryMaxDepth:t=>e({graphQueryMaxDepth:t}),setGraphMinDegree:t=>e({graphMinDegree:t}),setEnableHealthCheck:t=>e({enableHealthCheck:t}),setApiKey:t=>e({apiKey:t}),setCurrentTab:t=>e({currentTab:t}),setRetrievalHistory:t=>e({retrievalHistory:t}),updateQuerySettings:t=>e(n=>({querySettings:{...n.querySettings,...t}}))}),{name:"settings-storage",storage:GB(()=>localStorage),version:8,migrate:(e,t)=>(t<2&&(e.showEdgeLabel=!1),t<3&&(e.queryLabel=OC),t<4&&(e.showPropertyPanel=!0,e.showNodeSearchBar=!0,e.showNodeLabel=!0,e.enableHealthCheck=!0,e.apiKey=null),t<5&&(e.currentTab="documents"),t<6&&(e.querySettings={mode:"global",response_type:"Multiple Paragraphs",top_k:10,max_token_for_text_unit:4e3,max_token_for_global_context:4e3,max_token_for_local_context:4e3,only_need_context:!1,only_need_prompt:!1,stream:!0,history_turns:3,hl_keywords:[],ll_keywords:[]},e.retrievalHistory=[]),t<7&&(e.graphQueryMaxDepth=3,e.graphLayoutMaxIterations=15),t<8&&(e.graphMinDegree=0,e.language="en"),e)})),Ge=C0(TV),HB="Invalid API Key",$B="API Key required",ar=Yt.create({baseURL:BB,headers:{"Content-Type":"application/json"}});ar.interceptors.request.use(e=>{const t=Ge.getState().apiKey,n=localStorage.getItem("LIGHTRAG-API-TOKEN");return["/documents","/graphs","/query","/health"].some(o=>{var s;return(s=e.url)==null?void 0:s.includes(o)})&&!n&&e.url!=="/login"?Promise.reject(new Error("Authentication required")):(t&&(e.headers["X-API-Key"]=t),n&&(e.headers.Authorization=`Bearer ${n}`),e)});ar.interceptors.response.use(e=>e,e=>{var t,n;if(e.response){if(((t=e.response)==null?void 0:t.status)===401)return localStorage.removeItem("LIGHTRAG-API-TOKEN"),sessionStorage.clear(),na.getState().logout(),window.location.pathname!==`${hk}/#/login`&&(window.location.href=`${hk}/#/login`),Promise.reject(e);throw new Error(`${e.response.status} ${e.response.statusText} ${JSON.stringify(e.response.data)} ${(n=e.config)==null?void 0:n.url}`)}throw e});const qB=async(e,t,n)=>(await ar.get(`/graphs?label=${encodeURIComponent(e)}&max_depth=${t}&min_degree=${n}`)).data,AV=async()=>(await ar.get("/graph/label/list")).data,RV=async()=>{try{return(await ar.get("/health")).data}catch(e){return{status:"error",message:Sr(e)}}},_V=async()=>(await ar.get("/documents")).data,CV=async()=>(await ar.post("/documents/scan")).data,NV=async e=>(await ar.post("/query",e)).data,OV=async(e,t,n)=>{try{let r="";if(await ar.post("/query/stream",e,{responseType:"text",headers:{Accept:"application/x-ndjson"},transformResponse:[a=>{r+=a;const o=r.split(` `);r=o.pop()||"";for(const s of o)if(s.trim())try{const u=JSON.parse(s);u.response?t(u.response):u.error&&n&&n(u.error)}catch(u){console.error("Error parsing stream chunk:",u),n&&n("Error parsing server response")}return a}]}).catch(a=>{n&&n(Sr(a))}),r.trim())try{const a=JSON.parse(r);a.response?t(a.response):a.error&&n&&n(a.error)}catch(a){console.error("Error parsing final chunk:",a),n&&n("Error parsing server response")}}catch(r){const a=Sr(r);console.error("Stream request failed:",a),n&&n(a)}},DV=async(e,t)=>{const n=new FormData;return n.append("file",e),(await ar.post("/documents/upload",n,{headers:{"Content-Type":"multipart/form-data"},onUploadProgress:t!==void 0?a=>{const o=Math.round(a.loaded*100/a.total);t(o)}:void 0})).data},IV=async()=>(await ar.delete("/documents")).data,I0=async()=>{try{const e=await ar.get("/auth-status",{timeout:5e3,headers:{Accept:"application/json"}});if((e.headers["content-type"]||"").includes("text/html"))return console.warn("Received HTML response instead of JSON for auth-status endpoint"),{auth_configured:!0,auth_mode:"enabled"};if(e.data&&typeof e.data=="object"&&"auth_configured"in e.data&&typeof e.data.auth_configured=="boolean"){if(e.data.auth_configured)return e.data;if(e.data.access_token&&typeof e.data.access_token=="string")return e.data;console.warn("Auth not configured but no valid access token provided")}return console.warn("Received invalid auth status response:",e.data),{auth_configured:!0,auth_mode:"enabled"}}catch(e){return console.error("Failed to get auth status:",Sr(e)),{auth_configured:!0,auth_mode:"enabled"}}},LV=async(e,t)=>{const n=new FormData;return n.append("username",e),n.append("password",t),(await ar.post("/login",n,{headers:{"Content-Type":"multipart/form-data"}})).data},MV=Wf()(e=>({health:!0,message:null,messageTitle:null,lastCheckTime:Date.now(),status:null,check:async()=>{const t=await RV();return t.status==="healthy"?(e({health:!0,message:null,messageTitle:null,lastCheckTime:Date.now(),status:t}),!0):(e({health:!1,message:t.message,messageTitle:"Backend Health Check Error!",lastCheckTime:Date.now(),status:null}),!1)},clear:()=>{e({health:!0,message:null,messageTitle:null})},setErrorMessage:(t,n)=>{e({health:!1,message:t,messageTitle:n})}})),Hn=C0(MV),FV=e=>{try{const t=e.split(".");return t.length!==3?!1:JSON.parse(atob(t[1])).role==="guest"}catch(t){return console.error("Error parsing token:",t),!1}},PV=()=>{const e=localStorage.getItem("LIGHTRAG-API-TOKEN");return e?{isAuthenticated:!0,isGuestMode:FV(e)}:{isAuthenticated:!1,isGuestMode:!1}},na=Wf(e=>{const t=PV();return{isAuthenticated:t.isAuthenticated,showLoginModal:!1,isGuestMode:t.isGuestMode,login:(n,r=!1)=>{localStorage.setItem("LIGHTRAG-API-TOKEN",n),e({isAuthenticated:!0,showLoginModal:!1,isGuestMode:r})},logout:()=>{localStorage.removeItem("LIGHTRAG-API-TOKEN"),e({isAuthenticated:!1,isGuestMode:!1})},setShowLoginModal:n=>e({showLoginModal:n})}});var zV=e=>{switch(e){case"success":return jV;case"info":return HV;case"warning":return GV;case"error":return $V;default:return null}},BV=Array(12).fill(0),UV=({visible:e,className:t})=>ve.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},ve.createElement("div",{className:"sonner-spinner"},BV.map((n,r)=>ve.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${r}`})))),jV=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),GV=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),HV=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),$V=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},ve.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),qV=ve.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},ve.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),ve.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),VV=()=>{let[e,t]=ve.useState(document.hidden);return ve.useEffect(()=>{let n=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",n),()=>window.removeEventListener("visibilitychange",n)},[]),e},bk=1,WV=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var t;let{message:n,...r}=e,a=typeof(e==null?void 0:e.id)=="number"||((t=e.id)==null?void 0:t.length)>0?e.id:bk++,o=this.toasts.find(u=>u.id===a),s=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(a)&&this.dismissedToasts.delete(a),o?this.toasts=this.toasts.map(u=>u.id===a?(this.publish({...u,...e,id:a,title:n}),{...u,...e,id:a,dismissible:s,title:n}):u):this.addToast({title:n,...r,dismissible:s,id:a}),a},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(n=>n({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:"error"}),this.success=(e,t)=>this.create({...t,type:"success",message:e}),this.info=(e,t)=>this.create({...t,type:"info",message:e}),this.warning=(e,t)=>this.create({...t,type:"warning",message:e}),this.loading=(e,t)=>this.create({...t,type:"loading",message:e}),this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let r=e instanceof Promise?e:e(),a=n!==void 0,o,s=r.then(async c=>{if(o=["resolve",c],ve.isValidElement(c))a=!1,this.create({id:n,type:"default",message:c});else if(KV(c)&&!c.ok){a=!1;let d=typeof t.error=="function"?await t.error(`HTTP error! status: ${c.status}`):t.error,p=typeof t.description=="function"?await t.description(`HTTP error! status: ${c.status}`):t.description;this.create({id:n,type:"error",message:d,description:p})}else if(t.success!==void 0){a=!1;let d=typeof t.success=="function"?await t.success(c):t.success,p=typeof t.description=="function"?await t.description(c):t.description;this.create({id:n,type:"success",message:d,description:p})}}).catch(async c=>{if(o=["reject",c],t.error!==void 0){a=!1;let d=typeof t.error=="function"?await t.error(c):t.error,p=typeof t.description=="function"?await t.description(c):t.description;this.create({id:n,type:"error",message:d,description:p})}}).finally(()=>{var c;a&&(this.dismiss(n),n=void 0),(c=t.finally)==null||c.call(t)}),u=()=>new Promise((c,d)=>s.then(()=>o[0]==="reject"?d(o[1]):c(o[1])).catch(d));return typeof n!="string"&&typeof n!="number"?{unwrap:u}:Object.assign(n,{unwrap:u})},this.custom=(e,t)=>{let n=(t==null?void 0:t.id)||bk++;return this.create({jsx:e(n),id:n,...t}),n},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},Un=new WV,YV=(e,t)=>{let n=(t==null?void 0:t.id)||bk++;return Un.addToast({title:e,...t,id:n}),n},KV=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",XV=YV,ZV=()=>Un.toasts,QV=()=>Un.getActiveToasts(),Ft=Object.assign(XV,{success:Un.success,info:Un.info,warning:Un.warning,error:Un.error,custom:Un.custom,message:Un.message,promise:Un.promise,dismiss:Un.dismiss,loading:Un.loading},{getHistory:ZV,getToasts:QV});function JV(e,{insertAt:t}={}){if(typeof document>"u")return;let n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",t==="top"&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}JV(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)} diff --git a/lightrag/api/webui/index.html b/lightrag/api/webui/index.html index 36b393f3..ff61bd3e 100644 --- a/lightrag/api/webui/index.html +++ b/lightrag/api/webui/index.html @@ -8,8 +8,8 @@ Lightrag - - + +
diff --git a/lightrag_webui/env.local.sample b/lightrag_webui/env.local.sample index ed7c888e..0cd53ad5 100644 --- a/lightrag_webui/env.local.sample +++ b/lightrag_webui/env.local.sample @@ -1,3 +1,3 @@ VITE_BACKEND_URL=http://localhost:9621 VITE_API_PROXY=true -VITE_API_ENDPOINTS=/api,/documents,/graphs,/graph,/health,/query,/docs,/openapi.json,/login,/auth-status +VITE_API_ENDPOINTS=/,/api,/documents,/graphs,/graph,/health,/query,/docs,/openapi.json,/login,/auth-status diff --git a/lightrag_webui/src/lib/constants.ts b/lightrag_webui/src/lib/constants.ts index 5f960b30..048ae8f7 100644 --- a/lightrag_webui/src/lib/constants.ts +++ b/lightrag_webui/src/lib/constants.ts @@ -1,7 +1,7 @@ import { ButtonVariantType } from '@/components/ui/Button' export const backendBaseUrl = '' -export const webuiPrefix = '' +export const webuiPrefix = '/webui/' export const controlButtonVariant: ButtonVariantType = 'ghost'