2 lines
6.9 KiB
JavaScript
2 lines
6.9 KiB
JavaScript
import{P as se,Q as oe,R as ie,S as re,T as j,U as ce,r as v,A as x,_ as R,k as _}from"./index-8cIrvc8q.js";const ue=!1,de="aiui-store",le=1,g="conversations";let S=null;function E(){return S||(S=new Promise((e,a)=>{const r=indexedDB.open(de,le);r.onupgradeneeded=()=>{const d=r.result;d.objectStoreNames.contains(g)||d.createObjectStore(g,{keyPath:"id"}).createIndex("updatedAt","updatedAt",{unique:!1})},r.onsuccess=()=>e(r.result),r.onerror=()=>{S=null,a(r.error)}}),S)}async function fe(e){const a=j();if(!oe()||!a)return e;const r=await ie(JSON.stringify(e),a);return{id:e.id,updatedAt:e.updatedAt,encrypted:r}}async function ve(e){if(!("encrypted"in e))return e;const a=j();if(!a)return null;try{const r=await re(e.encrypted,a);return JSON.parse(r)}catch{return null}}function ge(e){return JSON.parse(JSON.stringify(se(e)))}async function M(e){const a=await E(),r=ge(e),d=await fe(r);return new Promise((u,l)=>{const f=a.transaction(g,"readwrite");f.objectStore(g).put(d),f.oncomplete=()=>u(),f.onerror=()=>l(f.error)})}async function pe(){const e=await E();return new Promise((a,r)=>{const u=e.transaction(g,"readonly").objectStore(g).index("updatedAt").getAll();u.onsuccess=async()=>{const l=new Map;for(const f of u.result){const y=await ve(f);y&&l.set(y.id,y)}a(l)},u.onerror=()=>r(u.error)})}async function me(e){const a=await E();return new Promise((r,d)=>{const u=a.transaction(g,"readwrite");u.objectStore(g).delete(e),u.oncomplete=()=>r(),u.onerror=()=>d(u.error)})}function he(){return typeof indexedDB<"u"}function D(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const a=Math.random()*16|0;return(e==="x"?a:a&3|8).toString(16)})}const A=he();let k=!1;const m=new Map,w=new Map;function p(e){if(!A)return;w.set(e.id,e);const a=m.get(e.id);a&&clearTimeout(a),m.set(e.id,setTimeout(()=>{M(e).then(()=>{w.delete(e.id)}).catch(r=>{console.warn("[chat] IDB save failed:",r)}),m.delete(e.id)},800))}function I(e){if(!A)return;w.delete(e.id);const a=m.get(e.id);a&&clearTimeout(a),m.delete(e.id),M(e).catch(r=>{console.warn("[chat] IDB save failed:",r)})}function L(){for(const[e,a]of m)clearTimeout(a),m.delete(e);for(const[e,a]of w)M(a).catch(()=>{}),w.delete(e)}typeof window<"u"&&(window.addEventListener("beforeunload",L),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&L()}));const ye=ce("chat",()=>{const e=v(new Map),a=v(null),r=v(!1),d=v(!1),u=localStorage.getItem("aiui-panel-side"),l=v(u??"left"),f=v(localStorage.getItem("aiui-web-search")!=="false"),y=new URLSearchParams(window.location.search).has("chatExpanded"),b=v(y?!1:localStorage.getItem("aiui-chat-collapsed")!=="false"),B=v(!1);async function U(){if(A)try{const t=await pe();if(t.size>0){e.value=t;const s=localStorage.getItem("aiui-active-conversation");a.value=s&&t.has(s)?s:[...t.keys()].pop()??null,d.value=!0,k=!0;return}}catch(t){console.warn("[chat] IDB load failed, falling back:",t)}d.value=!0,k=!0}U().then(()=>{N()}),x(a,t=>{t?localStorage.setItem("aiui-active-conversation",t):localStorage.removeItem("aiui-active-conversation")}),x(l,t=>{localStorage.setItem("aiui-panel-side",t)}),x(f,t=>{localStorage.setItem("aiui-web-search",String(t))}),x(b,t=>{localStorage.setItem("aiui-chat-collapsed",String(t))}),x([e,a],([t,s])=>{},{deep:!0});const T=_(()=>a.value?e.value.get(a.value)??null:null),J=_(()=>T.value?.messages??[]),P=_(()=>Array.from(e.value.values()).sort((t,s)=>s.updatedAt-t.updatedAt));function q(t="New Chat",s){const n=D(),o={id:n,title:t,messages:[],createdAt:Date.now(),updatedAt:Date.now(),personaId:s};return e.value.set(n,o),a.value=n,I(o),n}function F(t,s){const n=e.value.get(t);if(!n)return;const o={...s,id:D(),timestamp:Date.now()};return n.messages.push(o),n.updatedAt=Date.now(),n.messages.length===1&&s.role==="user"&&(n.title=s.content.slice(0,60)+(s.content.length>60?"...":"")),p(n),o}function V(t,s){const n=e.value.get(t);if(!n||n.messages.length===0)return;const o=n.messages[n.messages.length-1];o.content+=s,p(n)}function $(t,s,
|