archy/demo/aiui/assets/chat-BmHsA0em.js

2 lines
7.5 KiB
JavaScript
Raw Normal View History

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