Files
archy/demo/aiui/assets/chat-BVoaeFpp.js
T
archipelagoandClaude Fable 5 cb840fd36f chore(aiui): refresh shipped demo/aiui dist from post-merge source — verified, mock-free
The release tarball bakes demo/aiui in for fresh installs; the previous dist
predated the phase-13 security waves (S1-S7, W1.4) and would have shipped a
pre-hardening bundle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 15:43:19 -04:00

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,n){const o=e.value.get(t);if(!o)return;const i=o.messages.find(c=>c.id===s);i&&(i.webResults=n,p(o))}function G(t,s,n){const o=e.value.get(t);if(!o)return;const i=o.messages.find(c=>c.id===s);i&&(i.feedback=n,p(o))}function H(){l.value=l.value==="right"?"left":"right"}function z(){b.value=!b.value}function K(){B.value=!B.value}function Q(t){e.value.has(t)&&(a.value=t)}function W(t){if(e.value.delete(t),A&&me(t).catch(()=>{}),w.delete(t),a.value===t){const s=P.value;a.value=s.length>0?s[0].id:null}}function X(t,s,n){const o=e.value.get(t);if(!o)return;const i=o.messages.find(c=>c.id===s);i&&(i.content=n,i.editedAt=Date.now(),o.updatedAt=Date.now(),p(o))}function Y(t,s){const n=e.value.get(t);n&&(n.messages.splice(s),n.updatedAt=Date.now(),p(n))}function Z(t,s){const n=e.value.get(t);if(!n)return null;const o=n.messages.findIndex(C=>C.id===s);if(o===-1)return null;const i=D(),c=n.messages.slice(0,o+1).map(C=>({...C,id:D(),timestamp:C.timestamp})),h=(n.childBranchIds??[]).length,O={id:i,title:`${n.title} (Branch ${h+2})`,messages:c,createdAt:Date.now(),updatedAt:Date.now(),model:n.model,systemPrompt:n.systemPrompt,parentConversationId:t,branchPoint:s};return e.value.set(i,O),I(O),n.childBranchIds||(n.childBranchIds=[]),n.childBranchIds.push(i),n.updatedAt=Date.now(),p(n),a.value=i,i}function ee(t){const s=e.value.get(t);if(!s)return[];const n=s.parentConversationId??t,o=e.value.get(n);if(!o)return[];const i=[{id:n,title:o.title,isCurrent:n===t}];for(const c of o.childBranchIds??[]){const h=e.value.get(c);h&&i.push({id:c,title:h.title,isCurrent:c===t})}return i}async function te(){return 0}async function ne(){return 0}async function ae(){try{const{guideToConversation:t}=await R(async()=>{const{guideToConversation:o}=await import("./guideConversation-BYC5cBFP.js");return{guideToConversation:o}},[]),s=t();if(e.value.has(s.id)){a.value=s.id;return}const n=new Map(e.value);n.set(s.id,s),e.value=n,a.value=s.id,I(s)}catch{}}async function N(){const t=ue,s=e.value.has("aiui-guide"),n=e.value.has("node-demo");if(s&&(n||!t)){a.value||(a.value="aiui-guide");return}try{const{guideToConversation:o}=await R(async()=>{const{guideToConversation:h}=await import("./guideConversation-BYC5cBFP.js");return{guideToConversation:h}},[]),i=o(),c=new Map(e.value);c.has(i.id)||(c.set(i.id,i),I(i)),t&&c.has("node-demo"),e.value=c,a.value||(a.value=i.id)}catch{}}return{conversations:e,activeConversationId:a,activeConversation:T,messages:J,conversationList:P,isStreaming:r,loaded:d,panelSide:l,webSearchEnabled:f,chatCollapsed:b,showHistory:B,createConversation:q,addMessage:F,appendToLastMessage:V,setMessageWebResults:$,setMessageFeedback:G,switchSide:H,toggleChatCollapse:z,toggleHistory:K,setActiveConversation:Q,deleteConversation:W,updateMessageContent:X,deleteMessagesAfter:Y,branchFromMessage:Z,getSiblingBranches:ee,loadSeedChats:te,loadNodeDemoChat:ne,loadGuide:ae,seedDemoConversations:N}});export{ue as D,ye as u};