1import"./rolldown-runtime-BcKkbAw3.js";import{a as e,c as t,i as n,n as r,o as i,r as a,t as o}from"./vaultEncryption-Cn_Xmvd7.js";import{t as s}from"./defineProperty-BbfpZ9Tg.js";import{n as c,r as l}from"./api-oxkgIkmK.js";import{t as u}from"./react-BrNXU5ki.js";import{t as d}from"./react-CRKcdOUY.js";import{t as f}from"./esm-DQLHKy-e.js";import{n as p,t as m}from"./middleware-Q3XEhuEV.js";import"./themeStore-Cj0MoFAh.js";import"./vaultStore-BMeCeyy6.js";var h=new class{constructor(){s(this,`isAuthenticated`,!1),s(this,`userId`,null),s(this,`migrationCompleted`,!1)}initialize(e){this.isAuthenticated=!!e,this.userId=(e==null?void 0:e.id)??null,this.migrationCompleted=!1,this.isAuthenticated&&this.migrateFromLocalStorage().catch(e=>{})}async storeData(e,t,n={}){try{if(this.storeInLocalStorage(e,t),this.isAuthenticated&&this.userId){let r=await fetch(c(`/vault/store`),{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({dataType:e,data:t,metadata:{...n,storedAt:new Date().toISOString(),source:`frontend`}})});if(r.ok)return{success:!0,data:await r.json()}}return{success:!0,data:{source:`localStorage`}}}catch(e){return{success:!1,error:e.message}}}async retrieveData(e,t=100){try{if(this.isAuthenticated&&this.userId){let n=await fetch(c(`/vault/retrieve/${e}?limit=${t}`),{credentials:`include`});if(n.ok){let e=await n.json();if(e.data&&e.data.length>0)return{success:!0,data:e.data}}}return{success:!0,data:this.retrieveFromLocalStorage(e)??[]}}catch{return{success:!0,data:this.retrieveFromLocalStorage(e)??[]}}}async getAllFiles(e=1e3){try{if(!this.isAuthenticated||!this.userId)return{success:!1,error:`Not authenticated`};let t=await fetch(c(`/vault/files?limit=${e}`),{credentials:`include`});return t.ok?{success:!0,data:(await t.json()).files}:{success:!1,error:`Failed to retrieve files: ${await t.text()}`}}catch(e){return{success:!1,error:e.message}}}async getStorageUsage(){try{if(this.isAuthenticated&&this.userId){let e=await fetch(c(`/vault/usage`),{credentials:`include`});if(e.ok)return{success:!0,data:await e.json()}}return{success:!0,data:this.estimateLocalStorageUsage()}}catch{return{success:!0,data:this.estimateLocalStorageUsage()}}}async migrateFromLocalStorage(){if(!(this.migrationCompleted||!this.isAuthenticated||!this.userId)&&!(typeof window<`u`&&(sessionStorage.getItem(`stripe_redirect_in_progress`)??sessionStorage.getItem(`just_completed_registration`))))try{let t={},n=localStorage.getItem(`ai-storage`);if(n)try{let e=JSON.parse(n);e.state&&(t.currentConversationId=e.state.currentConversationId,t.selectedModel=e.state.selectedModel)}catch{}let r=localStorage.getItem(`auth-storage`);if(r)try{var e;let n=JSON.parse(r);(e=n.state)!=null&&e.user&&(t.userPreferences={name:n.state.user.name,email:n.state.user.email,tier:n.state.user.tier})}catch{}let i=localStorage.getItem(`theme-storage`);if(i)try{let e=JSON.parse(i);e.state&&(t.currentTheme=e.state.currentTheme)}catch{}let a=localStorage.getItem(`theme`);if(a&&(t.currentTheme=a),!Object.keys(t).some(e=>t[e]!=null)){this.migrationCompleted=!0;return}let o=await fetch(c(`/vault/migrate`),{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({localStorageData:t})});o.ok?(await o.json(),this.migrationCompleted=!0):o.status}catch(e){var t,n;(t=e.message)!=null&&t.includes(`401`)||(n=e.message)!=null&&n.includes(`Not authenticated`)}}async deleteData(e){try{if(this.isAuthenticated&&this.userId){let t=await fetch(c(`/vault/delete`),{method:`DELETE`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({key:e})});if(t.ok)return{success:!0,data:await t.json()};await t.text()}return this.removeFromLocalStorage(e),{success:!0,data:{source:`localStorage`}}}catch(e){return{success:!1,error:e.message}}}async clearUserData(){try{if(this.isAuthenticated&&this.userId){let e=await fetch(c(`/vault/clear`),{method:`DELETE`,credentials:`include`});e.ok&&await e.json()}return this.clearLocalStorage(),this.isAuthenticated=!1,this.userId=null,this.migrationCompleted=!1,{success:!0}}catch(e){return{success:!1,error:e.message}}}storeInLocalStorage(e,t){try{let n=`vault-${e}`;localStorage.setItem(n,JSON.stringify({data:t,timestamp:Date.now()}))}catch{}}retrieveFromLocalStorage(e){try{let t=`vault-${e}`,n=localStorage.getItem(t);if(n){let e=JSON.parse(n);return Array.isArray(e.data)?e.data:e.data?[e.data]:[]}}catch{}return[]}removeFromLocalStorage(e){}
1clearLocalStorage(){try{Object.keys(localStorage).forEach(e=>{(e.startsWith(`vault-`)||e===`ai-storage`||e===`ai-storage-last-user-id`||e===`auth-storage`)&&localStorage.removeItem(e)})}catch{}}estimateLocalStorageUsage(){try{let e=0,t=0;for(let n=0;n<localStorage.length;n++){let r=localStorage.key(n);if(r){let n=localStorage.getItem(r);n&&(e+=r.length+n.length,t++)}}return{totalSize:e,objectCount:t,totalSizeMB:Math.round(e/1048576*100)/100,tier:`zero`,limit:{maxSizeMB:100,maxSizeBytes:104857600},usagePercent:Math.round(e/104857600*100)}}catch{return{totalSize:0,objectCount:0,totalSizeMB:0,tier:`zero`,limit:{maxSizeMB:100,maxSizeBytes:104857600},usagePercent:0}}}},ee=new class{constructor(){s(this,`socket`,null),s(this,`userId`,null),s(this,`heartbeatInterval`,null),s(this,`reconnectAttempts`,0),s(this,`maxReconnectAttempts`,5)}async connect(e){var t;if(!((t=this.socket)!=null&&t.connected&&this.userId===e))return this.socket&&this.userId!==e&&this.disconnect(),this.userId=e,new Promise((e,t)=>{let n=l();this.socket=f(n,{transports:[`websocket`,`polling`],withCredentials:!0});let r=setTimeout(()=>{var e;(e=this.socket)!=null&&e.connected||t(Error(`Connection timeout`)),r=null},1e4);this.socket.on(`connect`,()=>{var e;this.reconnectAttempts=0,(e=this.socket)==null||e.emit(`register`,{userId:this.userId})}),this.socket.on(`registered`,t=>{r&&(clearTimeout(r),r=null),this.startHeartbeat(),e()}),this.socket.on(`error`,e=>{}),this.socket.on(`disconnect`,e=>{this.stopHeartbeat(),(e===`io server disconnect`||e===`transport close`)&&this.attemptReconnect()}),this.socket.on(`connect_error`,e=>{this.attemptReconnect()})})}startHeartbeat(){this.stopHeartbeat(),this.heartbeatInterval=setInterval(()=>{var e;(e=this.socket)!=null&&e.connected&&this.userId&&this.socket.emit(`heartbeat`)},6e4)}stopHeartbeat(){this.heartbeatInterval&&(clearInterval(this.heartbeatInterval),this.heartbeatInterval=null)}attemptReconnect(){if(this.reconnectAttempts>=this.maxReconnectAttempts)return;this.reconnectAttempts++;let e=Math.min(1e3*2**this.reconnectAttempts,3e4);setTimeout(()=>{var e;this.userId&&!((e=this.socket)!=null&&e.connected)&&this.connect(this.userId).catch(e=>{})},e)}disconnect(){this.stopHeartbeat(),this.socket&&(this.socket.disconnect(),this.socket=null),this.userId=null,this.reconnectAttempts=0}isConnected(){var e;return((e=this.socket)==null?void 0:e.connected)??!1}};function g(e){return e?`self-deleted-memory-ids-${e}`:`self-deleted-memory-ids`}function _(e){try{let t=g(e),n=localStorage.getItem(t);if(n){let e=JSON.parse(n);return new Set(e)}}catch{}return new Set}function te(e,t){try{let n=_(t);n.add(e);let r=g(t);localStorage.setItem(r,JSON.stringify(Array.from(n)))}catch{}}function ne(e,t){let n=_(t);return n.size===0?e:e.filter(e=>!n.has(e.id))}function re(e){try{let t=g(e);localStorage.removeItem(t)}catch{}}var ie=[`document`,`pdf`,`presentation`,`spreadsheet`];function ae(e){return typeof e==`string`&&ie.includes(e)?e:void 0}function v(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function oe(e){return v(e)&&typeof e.url==`string`}function se(e){return v(e)&&typeof e.url==`string`&&typeof e.mode==`string`}function y(e){try{return v(e)?{id:typeof e.id==`string`?e.id:crypto.randomUUID(),role:e.role===`assistant`||e.role===`user`||e.role===`system`?e.role:`user`,content:typeof e.content==`string`?e.content:``,timestamp:(typeof e.timestamp==`string`?e.timestamp:null)??(typeof e.createdAt==`string`?e.createdAt:null)??new Date().toISOString(),model:typeof e.model==`string`?e.model:void 0,searchResults:Array.isArray(e.searchResults)?e.searchResults:void 0,imageSearchResults:Array.isArray(e.imageSearchResults)?e.imageSearchResults:void 0,generatedImage:oe(e.generatedImage)?e.generatedImage:void 0,sourceImage:se(e.sourceImage)?e.sourceImage:void 0,createDraftResponseKind:ae(e.createDraftResponseKind)}:null}catch{return null}}function b(e){try{if(!v(e))return null;let t=typeof e.id==`string`?e.id:crypto.randomUUID(),n=typeof e.title==`string`&&e.title.trim()?e.title:`New Chat`,r=[];Array.isArray(e.messages)?r=e.messages.map(y).filter(e=>e!==null):v(e.messages)&&(r=Object.keys(e.messages).map(t=>e.messages[t]).map(y).filter(e=>e!==null));let i=new Date().toISOString(),a=typeof e.createdAt==`string`?e.createdAt:i,o=typeof e.updatedAt==`string`?e.updatedAt:a;return{id:t,title:n,messages:r,model:typeof e.model==`string`?e.model:void 0,createdAt:a,updatedAt:o}}catch{return null}}var x=10;async function S(e){let t=await fetch(c(e),{credentials:`include`});if(!t.ok)throw Error(`GET ${e} failed: ${t.status}`);return t.json()}async function C(e,t){let n=await fetch(c(e),{method:`PUT`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(t)});if(!n.ok){let t=await n.json().catch(()=>({}
1)),r=Error(t.error??`PUT ${e} failed: ${n.status}`);throw r.status=n.status,r}return n.json()}async function ce(e){if(!t())throw Error(`Encryption key not available. Please unlock your vault.`);let r=i();if(!r)throw Error(`Failed to get encryption key`);let a=await n(e,r),o=await fetch(c(`/api/vault/conversation`),{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify({encryptedBlob:a,conversationId:e.id})});if(!o.ok){let e=await o.json().catch(()=>({}));throw Error(e.error??`Failed to sync conversation: ${o.status}`)}}async function le(e,r=!1){let a=await S(`/api/vault/state/conversations`),o=[];a.data&&Array.isArray(a.data)&&(o=D(a.data));let s;if(r&&o.length>0){let t=new Set(e.map(e=>e.id)),n=o.filter(e=>!t.has(e.id));s=[...e,...n].sort((e,t)=>{let n=new Date(e.updatedAt||e.createdAt||0).getTime();return new Date(t.updatedAt||t.createdAt||0).getTime()-n})}else s=T(e,o);try{if(!t())throw Error(`Encryption key not available`);let e=i();if(!e)throw Error(`Failed to get encryption key`);await C(`/api/vault/state/conversations`,{data:await Promise.all(s.map(async t=>{var r;(r=t.messages)==null||r.length;let i=await n(t,e);return{id:t.id,encrypted:!0,encryptedBlob:i,createdAt:t.createdAt,updatedAt:t.updatedAt}})),metadata:{source:`sync-service`},ifMatch:a.etag})}
1catch(t){if(t.status===412){let t=await S(`/api/vault/state/conversations`),a=[];t.data&&Array.isArray(t.data)&&(a=D(t.data));let o;if(r&&a.length>0){let t=new Set(e.map(e=>e.id)),n=a.filter(e=>!t.has(e.id));o=[...e,...n].sort((e,t)=>{let n=new Date(e.updatedAt||e.createdAt||0).getTime();return new Date(t.updatedAt||t.createdAt||0).getTime()-n})}else o=T(e,a);let s=i();if(!s)throw Error(`Failed to get encryption key`);await C(`/api/vault/state/conversations`,{data:await Promise.all(o.map(async e=>{let t=await n(e,s);return{id:e.id,encrypted:!0,encryptedBlob:t,createdAt:e.createdAt,updatedAt:e.updatedAt}})),metadata:{source:`sync-service`},ifMatch:t.etag})}else throw t}}async function ue(e=3,n=500){for(let r=0;r<e;r++){if(t()){let e=i();if(e)return e}if(r<e-1){let e=n*2**r;await new Promise(t=>setTimeout(t,e))}}throw Error(`Encryption key not available after retries. Please unlock your vault.`)}function de(e){if(e instanceof Error){let t=e.message.toLowerCase();return t.includes(`key`)||t.includes(`encryption`)||t.includes(`not available`)||t.includes(`unlock`)}return!1}async function fe(){let e=await S(`/api/vault/state/conversations`);if(!Array.isArray(e.data)||e.data.length===0)return[];try{await ue()}catch(e){throw e}let n=[];for(let o of e.data){let e=o;if(e.encrypted&&e.encryptedBlob){if(!t()){n.push({id:e.id,title:`Chat (Locked - Unlock Vault)`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:e.encryptedBlob});continue}let o=i();if(!o){n.push({id:e.id,title:`Chat (Locked - Unlock Vault)`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:e.encryptedBlob});continue}let s;if(typeof e.encryptedBlob==`string`)try{s=JSON.parse(e.encryptedBlob)}catch{n.push({id:e.id,title:`Chat (Syncing...)`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:e.encryptedBlob});continue}else if(typeof e.encryptedBlob==`object`&&e.encryptedBlob!==null)s=e.encryptedBlob;else{n.push({id:e.id,title:`Chat (Syncing...)`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:e.encryptedBlob});continue}if(!s.encrypted||!s.iv){n.push({id:e.id,title:`Chat (Syncing...)`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:s});continue}try{var a;let t=await r(s,o);t&&((a=t.messages)==null||a.length);let i=b(t);if(i){if(!i.title||i.title.trim()===``||i.title===`Encrypted`){let e=i.messages.find(e=>e.role===`user`);if(e&&e.content.trim().length>0){let t=e.content.trim();i.title=t.length>50?t.substring(0,50)+`...`:t}else i.title=`New Chat`}n.push(i)}else{let r=`Chat (Decryption Pending)`;if(t&&typeof t==`object`&&`title`in t){let e=t.title;if(e&&e.trim()!==``&&e!==`Encrypted`&&!e.startsWith(`Encrypted`))r=e.trim();else if(`messages`in t&&Array.isArray(t.messages)){let e=t.messages.find(e=>{var t;return e.role===`user`&&((t=e.content)==null?void 0:t.trim())});if(e!=null&&e.content){let t=e.content.trim();r=t.length>50?t.substring(0,50)+`...`:t}}}n.push({id:e.id,title:r,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:e.encryptedBlob})}}catch(a){if(de(a))try{if(await new Promise(e=>setTimeout(e,300)),t()){let t=i();if(t){let i;i=typeof e.encryptedBlob==`string`?JSON.parse(e.encryptedBlob):e.encryptedBlob;let a=b(await r(i,t));if(a){if(!a.title||a.title.trim()===``||a.title===`Encrypted`){let e=a.messages.find(e=>e.role===`user`);if(e&&e.content.trim().length>0){let t=e.content.trim();a.title=t.length>50?t.substring(0,50)+`...`:t}else a.title=`New Chat`}n.push(a)}else n.push({id:e.id,title:`New Chat`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString()});continue}}}catch{}n.push({id:e.id,title:`Chat (Syncing...)`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString(),_needsDecryption:!0,_encryptedBlob:s})}}else{let t=b(e);t?n.push(t):n.push({id:e.id,title:e.title??`New Chat`,messages:[],createdAt:e.createdAt??new Date().toISOString(),updatedAt:e.updatedAt??new Date().toISOString()})}}return D(n)}async function pe(e){let t=await S(`/api/vault/state/memories`),n=[];if(t.data&&Array.isArray(t.data))for(let r of t.data){let t=r;if(t.encrypted&&t.encryptedBlob)try{let r=await a(JSON.parse(t.encryptedBlob),e);n.push({id:t.id,key:r.key,value:r.value,category:r.category,createdAt:t.createdAt??new Date().toISOString(),updatedAt:t.updatedAt??new Date().toISOString(),source:r.source??`user`})}catch{}else n.push(r)}return n}function me(e,t){return t!==`zero`||e.length<=x?e:[...e].sort((e,t)=>
1new Date(e.createdAt||0).getTime()-new Date(t.createdAt||0).getTime()).slice(0,x)}function he(e,t){return!e||e.key!==t.key||e.value!==t.value||e.category!==t.category||e.source!==t.source||e.createdAt!==t.createdAt||e.updatedAt!==t.updatedAt}async function ge(e,n=!1){var r;if(!t())throw Error(`Encryption key not available. Please unlock your vault.`);let a=i();if(!a)throw Error(`Failed to get encryption key`);let o=await Se(e.map(e=>({key:e.key,value:e.value,category:e.category,source:e.source}))),s=`vaultHash:memories`,c=await pe(a),l;if(n&&c.length>0){let t=new Set(e.map(e=>e.id)),n=c.filter(e=>!t.has(e.id));l=[...e,...n].sort((e,t)=>{let n=new Date(e.updatedAt||e.createdAt||0).getTime();return new Date(t.updatedAt||t.createdAt||0).getTime()-n})}else l=E(c,e);let u=(r=$.getState().user)==null?void 0:r.tier;l=me(l,u);let d=new Map(c.map(e=>[e.id,e])),f=new Set(l.map(e=>e.id)),p=l.filter(e=>he(d.get(e.id),e)),m=c.filter(e=>!f.has(e.id)).map(e=>e.id);if(p.length===0&&m.length===0){localStorage.setItem(s,o);return}await w(p,m),localStorage.setItem(s,o)}async function _e(e,t){let n=await fetch(c(e),{method:`POST`,headers:{"Content-Type":`application/json`},credentials:`include`,body:JSON.stringify(t)});if(!n.ok){let t=await n.json().catch(()=>({})),r=Error(t.error??`POST ${e} failed: ${n.status}`);throw r.status=n.status,r}return n.json()}async function ve(n){if(!t())throw Error(`Encryption key not available. Please unlock your vault.`);let r=i();if(!r)throw Error(`Failed to get encryption key`);let a=await e(n,r);await _e(`/api/vault/memory`,{memoryId:n.id,encryptedBlob:a})}async function w(n,r){if(n.length===0&&r.length===0)return;if(!t())throw Error(`Encryption key not available. Please unlock your vault.`);let a=i();if(!a)throw Error(`Failed to get encryption key`);await _e(`/api/vault/memories/batch`,{upserts:await Promise.all(n.map(async t=>({memoryId:t.id,encryptedBlob:await e(t,a)}))),deletes:r})}async function ye(){try{await ue()}catch(e){throw e}let e=i();if(!e)throw Error(`Failed to get encryption key`);let t=await S(`/api/vault/state/memories`);if(!Array.isArray(t.data)||t.data.length===0)return[];let n=[],r=[];for(let i of t.data){let t=i;if(t.encrypted&&t.encryptedBlob)try{let i;if(typeof t.encryptedBlob==`string`)try{i=JSON.parse(t.encryptedBlob)}catch{r.push(t.id);continue}else if(typeof t.encryptedBlob==`object`&&t.encryptedBlob!==null)i=t.encryptedBlob;else{r.push(t.id);continue}if(!i.encrypted||!i.iv){r.push(t.id);continue}let o=await a(i,e);n.push({id:t.id,key:o.key,value:o.value,category:o.category,createdAt:t.createdAt??new Date().toISOString(),updatedAt:t.updatedAt??new Date().toISOString(),source:o.source??`user`})}catch{r.push(t.id)}else{let e=i;n.push(e)}}if(r.length>0){let e=globalThis,t=e.__failedMemoryIds;if(t&&t.length>0){let n=new Set(r);e.__failedMemoryIds=[...t.filter(e=>!n.has(e)),...r]}else e.__failedMemoryIds=r}return xe(n)}function be(e=3e3){let t,n=null,r=async()=>{if(!n)return;let{type:e,payload:t}=n;n=null;try{e===`conversations`?await le(t):await ge(t)}catch{}},i=(i,a)=>{n={type:i,payload:a},t&&window.clearTimeout(t),t=window.setTimeout(()=>void r(),e)};return{scheduleConversations:e=>i(`conversations`,e),scheduleMemories:e=>i(`memories`,e),flushNow:async()=>{t&&(window.clearTimeout(t),t=void 0),await r()},cancel:()=>{t&&(window.clearTimeout(t),t=void 0),n=null}}}function T(e,t){let n=new Map;for(let e of t)e!=null&&e.id&&n.set(e.id,e);for(let t of e){if(!(t!=null&&t.id))continue;let e=n.get(t.id);if(!e)n.set(t.id,t);else{var r,i;let a=((r=t.title)==null?void 0:r.trim())||``,o=((i=e.title)==null?void 0:i.trim())||``,s=new Date(t.updatedAt||t.createdAt||``).getTime(),c=new Date(e.updatedAt||e.createdAt||``).getTime(),l=a&&!a.startsWith(`New Chat`)&&a!==`Untitled`&&a!==`Encrypted`&&a!==``,u=o&&!o.startsWith(`New Chat`)&&o!==`Untitled`&&o!==`Encrypted`&&o!==``,d;if(l&&!u)d={...s>=c?t:e,title:a};else if(!l&&u)d={...s>=c?t:e,title:o};else if(l&&u)d=s>=c?t:e;else{d=s>=c?t:e;let n=(d.messages||[]).find(e=>{var t;return e.role===`user`&&((t=e.content)==null?void 0:t.trim())});if(n!=null&&n.content){let e=n.content.trim().substring(0,50),t=e.length===50?e+`...`:e;d={...d,title:t}}else{let e=a||o||`New Chat`;d={...d,title:e}}}n.set(t.id,d)}}return Array.from(n.values()).sort((e,t)=>
1{let n=new Date(e.updatedAt||e.createdAt||0).getTime();return new Date(t.updatedAt||t.createdAt||0).getTime()-n})}function E(e,t){let n=new Map,r=[...e,...t];for(let e of r){let t=e&&n.get(e.id);if(!t)n.set(e.id,e);else{let r=t.updatedAt||t.createdAt||``,i=e.updatedAt||e.createdAt||``;new Date(i).getTime()>=new Date(r).getTime()&&n.set(e.id,e)}}return Array.from(n.values()).sort((e,t)=>{let n=new Date(e.updatedAt||e.createdAt||0).getTime();return new Date(t.updatedAt||t.createdAt||0).getTime()-n})}function D(e){return e.map(e=>{var t;let n=new Date().toISOString(),r=e.createdAt??n,i=e.updatedAt??r,a=e,o=Array.isArray(a.messages)?a.messages.map(e=>({id:e.id??(typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():String(Date.now())),role:e.role,content:e.content,timestamp:e.timestamp??e.createdAt??n,model:e.model,...e.attachment&&{attachment:e.attachment},...e.searchResults&&{searchResults:e.searchResults},...e.imageSearchResults&&{imageSearchResults:e.imageSearchResults},...e.generatedImage&&{generatedImage:e.generatedImage},...e.sourceImage&&{sourceImage:e.sourceImage}})):[],s=()=>typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)}),c=((t=a.title)==null?void 0:t.trim())||`Untitled`;return{id:String(a.id??s()),title:c,model:a.model,messages:o,createdAt:r,updatedAt:i}})}function xe(e){return e.map(e=>{let t=e,n=String(t.key??``).trim(),r=String(t.value??``).trim();return!n||!r?null:{id:String(t.id??(typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():Date.now())),key:n,value:r,category:String(t.category??``),createdAt:String(t.createdAt??new Date().toISOString()),updatedAt:String(t.updatedAt??t.createdAt??new Date().toISOString()),source:t.source===`ai`?`ai`:`user`}}).filter(e=>e!==null)}async function Se(e){let t=O(e),n=new TextEncoder().encode(t),r=await crypto.subtle.digest(`SHA-256`,n);return[...new Uint8Array(r)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}function O(e){return typeof e!=`object`||!e?JSON.stringify(e):Array.isArray(e)?`[`+e.map(O).join(`,`)+`]`:`{`+Object.keys(e).sort().map(t=>`"`+t+`":`+O(e[t])).join(`,`)+`}`}var Ce=`self-outbox`,k=`outbox`,we=1,A=!1;function j(){return new Promise((e,t)=>{try{let n=indexedDB.open(Ce,we);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(k)||e.createObjectStore(k,{keyPath:`id`}).createIndex(`byUser`,`userId`,{unique:!1})},n.onsuccess=()=>e(n.result),n.onerror=()=>{var e;A=!0,t(Error(((e=n.error)==null?void 0:e.message)??`IndexedDB open failed`))}}catch(e){A=!0,t(e instanceof Error?e:Error(String(e)))}})}async function M(e){let t=await j();await new Promise((n,r)=>{let i=t.transaction(k,`readwrite`);i.oncomplete=()=>n(),i.onerror=()=>{var e;return r(Error(((e=i.error)==null?void 0:e.message)??`Transaction failed`))},i.objectStore(k).put(e)}),t.close()}async function N(e){let t=await j(),n=await new Promise((n,r)=>{let i=t.transaction(k,`readonly`);i.onerror=()=>{var e;return r(Error(((e=i.error)==null?void 0:e.message)??`Transaction failed`))};let a=i.objectStore(k).get(e);a.onsuccess=()=>n(a.result),a.onerror=()=>{var e;return r(Error(((e=a.error)==null?void 0:e.message)??`Get request failed`))}});return t.close(),n}function P(e){return`memories:${e}`}function F(e){return Array.isArray(e==null?void 0:e.ops)?e.ops:[]}var I={async enqueueUpsert(e,t){if(A||!t)return;let n=P(e),r=F(await N(n)).filter(e=>e.memoryId!==t.id);r.push({type:`upsert`,memoryId:t.id,memory:t,queuedAt:Date.now()}),await M({id:n,userId:e,dataType:`memories`,pending:!0,ops:r,updatedAt:Date.now()})},async enqueueDelete(e,t){if(A)return;let n=P(e),r=F(await N(n)).filter(e=>e.memoryId!==t);r.push({type:`delete`,memoryId:t,queuedAt:Date.now()}),await M({id:n,userId:e,dataType:`memories`,pending:!0,ops:r,updatedAt:Date.now()})},async enqueueMemories(e){if(A)return;let t=P(e);await M({id:t,userId:e,dataType:`memories`,pending:!0,ops:F(await N(t)),updatedAt:Date.now()})},async drainOps(e){if(A)return[];let t=await N(P(e));if(!t)return[];let n=F(t);return await M({...t,ops:[],pending:!1,updatedAt:Date.now()}),n},async reEnqueueOps(e,t){if(A||t.length===0)return;let n=P(e),r=F(await N(n)),i=new Set(r.map(e=>e.memoryId)),a=[...r,...t.filter(e=>!i.has(e.memoryId))];await M({id:n,userId:e,dataType:`memories`,pending:a.length>0,ops:a,updatedAt:Date.now()})},async hasPendingOps(e){if(A)return!1;let t=await N(P(e));return!!(t!=null&&t.pending)||F(t).length>0},async hasPendingMemories(e){return this.hasPendingOps(e)},async clearMemories(e){if(A)return;let t=await N(P(e));t&&await M({...t,ops:[],pending:!1,updatedAt:Date.now()})}},L,R=!1,z=null;async function B(){let e=$.getState().user;if(!(e!=null&&e.id))return;let t=e.id;if(!await I.hasPendingOps(t))return;let n=await I.drainOps(t);if(n.length===0)return;let r=[],i=[];for(let e of n)e.type===`upsert`&&e.memory?r.push(e.memory):e.type===`delete`&&i.push(e.memoryId);try{(r.length>0||i.length>0)&&await w(r,i),window.dispatchEvent(new CustomEvent(`vault-sync-ok`,{detail:{type:`memories`}}))}catch{await I.reEnqueueOps(t,n),window.dispatchEvent(new CustomEvent(`vault-sync-error`,{detail:{type:`memories`}}))}}function Te(){try{z=new BroadcastChannel(`self-vault-sync`);let e=window.setTimeout(()=>{R||(R=!0,B())},120);z.onmessage=t=>{(t==null?void 0:t.data)===`who-is-leader`?R&&(z==null||z.postMessage(`leader-here`)):(t==null?void 0:t.data)===`leader-here`&&(R=!1,window.clearTimeout(e))},z.postMessage(`who-is-leader`)}catch{R=!0}L&&window.clearInterval(L),L=window.setInterval(()=>{R&&B()},5e3)}function Ee(){if(L&&(window.clearInterval(L),L=void 0),z){try{z.close()}catch{}z=null}R=!1}
1function V(){window.setTimeout(()=>{R&&B()},300)}u(),d()(p((e,t)=>({requests:{},addRequest:(t,n)=>{try{e(e=>{let r=e.requests[t]||[];return r.some(e=>e.recipientId===n.recipientId&&e.status===`pending`)?e:{requests:{...e.requests,[t]:[...r,n]}}})}catch{}},removeRequest:(t,n)=>{try{e(e=>{let r=e.requests[t]||[];return{requests:{...e.requests,[t]:r.filter(e=>e.recipientId!==n)}}})}catch{}},updateRequestStatus:(t,n,r)=>{try{e(e=>{let i=(e.requests[t]||[]).map(e=>e.requestId===n?{...e,status:r}:e);return{requests:{...e.requests,[t]:i}}})}catch{}},getPendingRequests:e=>{try{return(t().requests[e]||[]).filter(e=>e.status===`pending`)}catch{return[]}}}),{name:`sent-contact-requests-storage`,storage:m(()=>localStorage),skipHydration:!1,onRehydrateStorage:()=>()=>{}}));function De(e){let t=e.replace(/^#/,``);if(!t.startsWith(`self-messages`)&&!t.startsWith(`self-messenger`))return null;let[n,r]=t.split(`?`),i=n.split(`/`);if(i[1]===`room`&&i[2])return decodeURIComponent(i[2]);if(r){let e=new URLSearchParams(r).get(`room`);if(e)return e}return null}function Oe(e,t){return`${e}/room/${encodeURIComponent(t)}`}function ke(e){return De(e)!==null}var Ae=new Set([`ideas`,`bugs`,`privacy`]),je=new Set([`self-ai`,`self-messages`,`self-messenger`,`self-wallet`,`self-incentives`,`self-vault`,`self-mail`,`self-calendar`,`self-guide`,`self-settings`,`self-admin`,`self-site`]);function Me(e){return e.replace(/^#/,``)}function Ne(e,t){if(!t)return!1;let n=Me(e);if(!n||n===`/`||n===``)return!1;let[r]=n.split(`?`),i=r.split(`/`),a=i[0],o=i[1];return a.startsWith(`self-ideas`)||a.startsWith(`self-bugs`)||a===`submit-idea`||a===`report-bug`||!je.has(a)?!1:a===`self-ai`?i.length>1&&!!i[1]:a===`self-messages`||a===`self-messenger`?ke(n):a===`self-wallet`||a===`self-incentives`||a===`self-vault`||a===`self-mail`||a===`self-calendar`||a===`self-guide`?!!(o&&o.length>0&&o):a===`self-settings`?o&&Ae.has(o)?!0:!!o:a===`self-admin`&&!!(o&&o.length>0&&o)}var Pe=d(e=>({unifiedEnabled:!0,setUnifiedEnabled:t=>{try{localStorage.setItem(`unifiedNav`,t?`1`:`0`)}catch{}e({unifiedEnabled:t})},initFromEnv:()=>{let t=!0;try{let e=new URLSearchParams(window.location.search).get(`unifiedNav`);if(e===`0`||e===`1`)t=e===`1`;else{let e=localStorage.getItem(`unifiedNav`);(e===`0`||e===`1`)&&(t=e===`1`)}}catch{}e({unifiedEnabled:t})},chatSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);return e===``||e===`self-ai`}return!0})(),messagesSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);return e===``||e===`self-messenger`||e===`self-messages`}return!0})(),walletSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);if(!e.startsWith(`self-wallet`))return!0;let[t]=e.split(`?`),n=t.split(`/`);return!n[1]||n[1]===``}return!0})(),incentivesSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);if(!e.startsWith(`self-incentives`))return!0;let[t]=e.split(`?`),n=t.split(`/`);return!n[1]||n[1]===``}return!0})(),settingsSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);if(!e.startsWith(`self-settings`))return!0;let[t]=e.split(`?`),n=t.split(`/`);return!n[1]||n[1]===``}return!0})(),privacySidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);return e===`self-privacy`||e.startsWith(`self-privacy/`)}return!0})(),ideasSidebarExpanded:typeof window<`u`?window.location.hash.slice(1)===`self-ideas`:!0,bugsSidebarExpanded:typeof window<`u`?window.location.hash.slice(1)===`self-bugs`:!0,alertsSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);return e===`self-alerts`||e.startsWith(`self-alerts/`)}return!0})(),guideSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);if(!e.startsWith(`self-guide`))return!0;let[t]=e.split(`?`),n=t.split(`/`);return!n[1]||n[1]===``}return!0})(),adminSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);if(!e.startsWith(`self-admin`))return!0;let[t]=e.split(`?`),n=t.split(`/`);return!n[1]||n[1]===``}return!0})(),siteSidebarExpanded:typeof window<`u`?window.location.hash.slice(1)===`self-site`:!0,vaultSidebarExpanded:(()=>
1{if(typeof window<`u`){let e=window.location.hash.slice(1);if(!e.startsWith(`self-vault`))return!0;let[t]=e.split(`?`),n=t.split(`/`);return!n[1]||n[1]===``}return!0})(),mailSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);return e===`self-mail`||e.startsWith(`self-mail/`)}return!0})(),calendarSidebarExpanded:(()=>{if(typeof window<`u`){let e=window.location.hash.slice(1);return e===`self-calendar`||e.startsWith(`self-calendar/`)}return!0})(),isMobileFullChatMode:typeof window>`u`?!1:Ne(window.location.hash.slice(1),window.innerWidth<768),selectedVaultFolderId:null,setSelectedVaultFolderId:t=>e({selectedVaultFolderId:t}),selectedVaultTeamId:null,setSelectedVaultTeamId:t=>e({selectedVaultTeamId:t}),vaultNewMenuActionRequest:null,requestVaultNewMenuAction:t=>e({vaultNewMenuActionRequest:t}),clearVaultNewMenuActionRequest:()=>e({vaultNewMenuActionRequest:null}),setChatSidebarExpanded:t=>e({chatSidebarExpanded:t}),setMessagesSidebarExpanded:t=>e({messagesSidebarExpanded:t}),setWalletSidebarExpanded:t=>e({walletSidebarExpanded:t}),setIncentivesSidebarExpanded:t=>e({incentivesSidebarExpanded:t}),setPrivacySidebarExpanded:t=>e({privacySidebarExpanded:t}),setIdeasSidebarExpanded:t=>e({ideasSidebarExpanded:t}),setBugsSidebarExpanded:t=>e({bugsSidebarExpanded:t}),setAlertsSidebarExpanded:t=>e({alertsSidebarExpanded:t}),setGuideSidebarExpanded:t=>e({guideSidebarExpanded:t}),setSettingsSidebarExpanded:t=>e({settingsSidebarExpanded:t}),setAdminSidebarExpanded:t=>e({adminSidebarExpanded:t}),setSiteSidebarExpanded:t=>e({siteSidebarExpanded:t}),setVaultSidebarExpanded:t=>e({vaultSidebarExpanded:t}),setMailSidebarExpanded:t=>e({mailSidebarExpanded:t}),setCalendarSidebarExpanded:t=>e({calendarSidebarExpanded:t}),setIsMobileFullChatMode:t=>e({isMobileFullChatMode:t}),toggleChatSidebar:()=>e(e=>({chatSidebarExpanded:!e.chatSidebarExpanded})),toggleMessagesSidebar:()=>e(e=>({messagesSidebarExpanded:!e.messagesSidebarExpanded})),toggleWalletSidebar:()=>e(e=>({walletSidebarExpanded:!e.walletSidebarExpanded})),toggleIncentivesSidebar:()=>e(e=>({incentivesSidebarExpanded:!e.incentivesSidebarExpanded})),togglePrivacySidebar:()=>e(e=>({privacySidebarExpanded:!e.privacySidebarExpanded})),toggleIdeasSidebar:()=>e(e=>({ideasSidebarExpanded:!e.ideasSidebarExpanded})),toggleBugsSidebar:()=>e(e=>({bugsSidebarExpanded:!e.bugsSidebarExpanded})),toggleAlertsSidebar:()=>e(e=>({alertsSidebarExpanded:!e.alertsSidebarExpanded})),toggleGuideSidebar:()=>e(e=>({guideSidebarExpanded:!e.guideSidebarExpanded})),toggleSettingsSidebar:()=>e(e=>({settingsSidebarExpanded:!e.settingsSidebarExpanded})),toggleAdminSidebar:()=>e(e=>({adminSidebarExpanded:!e.adminSidebarExpanded})),toggleSiteSidebar:()=>e(e=>({siteSidebarExpanded:!e.siteSidebarExpanded})),toggleVaultSidebar:()=>e(e=>({vaultSidebarExpanded:!e.vaultSidebarExpanded})),toggleMailSidebar:()=>e(e=>({mailSidebarExpanded:!e.mailSidebarExpanded})),toggleCalendarSidebar:()=>e(e=>({calendarSidebarExpanded:!e.calendarSidebarExpanded}))}));function H(e,t){return e.findIndex(e=>e.id===t.id)===-1?[t,...e]:e.map(e=>e.id===t.id?t:e)}(()=>{try{let t=[];for(let e=0;e<localStorage.length;e++){let n=localStorage.key(e);n&&(n.startsWith(`vault-`)||n===`ai-storage-conversations`)&&t.push(n)}t.forEach(e=>localStorage.removeItem(e)),t.length;let n=localStorage.getItem(`ai-storage`);if(n)try{var e;let t=JSON.parse(n);((e=t.state)==null?void 0:e.selectedModel)===`gemma2:latest`&&(t.state.selectedModel=null,localStorage.setItem(`ai-storage`,JSON.stringify(t)))}catch{}}catch{}})();var U=d()(p((e,r)=>({currentConversation:null,currentConversationId:null,conversations:[],selectedModel:null,messagesUsedToday:0,dailyLimit:30,memories:[],aiName:null,userName:null,favoritedConversationIds:[],clearConversations:()=>{e({conversations:[],currentConversation:null,currentConversationId:null});try{let e=localStorage.getItem(`ai-storage`);if(e){let t=JSON.parse(e);t.state&&(t.state.conversations=[],t.state.currentConversation=null,t.state.currentConversationId=null,localStorage.setItem(`ai-storage`,JSON.stringify(t)))}}catch{localStorage.removeItem(`ai-storage`)}},toggleFavoriteConversation:t=>{e(e=>({favoritedConversationIds:e.favoritedConversationIds.includes(t)?e.favoritedConversationIds.filter(e=>e!==t):[t,...e.favoritedConversationIds]}))},setCurrentConversation:t=>{let n=t?b(t):null;t&&!n||e({currentConversation:n,currentConversationId:(n==null?void 0:n.id)??null})},addMessage:t=>{e(e=>{if(!e.currentConversation)return e;let n={...e.currentConversation,messages:[...e.currentConversation.messages,t],updatedAt:new Date().toISOString()};if(t.role===`user`&&e.currentConversation.messages.length===0&&e.currentConversation.title.startsWith(`New Chat`)){let e=t.content.trim();e.length>0&&(n.title=e.length>50?e.substring(0,50)+`...`:e)}let r=H(e.conversations,n);return{currentConversation:n,currentConversationId:n.id,conversations:r,messagesUsedToday:e.messagesUsedToday+ +(t.role===`user`)}})},updateMessageContent:(t,n,r)=>{e(e=>{if(!e.currentConversation)return e;let i=e.currentConversation.messages.map(e=>e.id===t?{...e,content:n,loadingState:r}:e),a={...e.currentConversation,messages:i,updatedAt:new Date().toISOString()};return{currentConversation:a,conversations:H(e.conversations,a)}})},updateMessageSearchResults:(t,n)=>{e(e=>{if(!e.currentConversation)return e;let r=e.currentConversation.messages.map(e=>e.id===t?{...e,searchResults:n}:e),i={...e.currentConversation,messages:r,updatedAt:new Date().toISOString()};return{currentConversation:i,conversations:H(e.conversations,i)}});let r=U.getState().currentConversation;r&&U.getState().pushConversationToVault(r).catch(e=>{})},updateMessageSearchFailed:(t,n,r)=>{e(e=>{if(!e.currentConversation)return e;let i=e.currentConversation.messages.map(e=>e.id===t?{...e,content:n,searchFailed:!0,retryQuery:r,loadingState:void 0}:e),a={...e.currentConversation,messages:i,updatedAt:new Date().toISOString()};return{currentConversation:a,conversations:H(e.conversations,a)}})},removeMessages:t=>{e(e=>{if(!e.currentConversation)return e;let n=e.currentConversation.messages.filter(e=>!t.includes(e.id)),r={...e.currentConversation,messages:n,updatedAt:new Date().toISOString()};return{currentConversation:r,conversations:H(e.conversations,r)}});
1let n=U.getState().currentConversation;n&&U.getState().pushConversationToVault(n).catch(e=>{})},updateMessageImageSearchResults:(t,n)=>{e(e=>{if(!e.currentConversation)return e;let r=e.currentConversation.messages.map(e=>e.id===t?{...e,imageSearchResults:n}:e),i={...e.currentConversation,messages:r,updatedAt:new Date().toISOString()};return{currentConversation:i,conversations:H(e.conversations,i)}});let r=U.getState().currentConversation;if(r){let e={...r,messages:r.messages.map(e=>e.imageSearchResults?{...e,imageSearchResults:e.imageSearchResults.map(e=>{var t;return{...e,thumbnail:(t=e.thumbnail)!=null&&t.startsWith(`data:`)?null:e.thumbnail}})}:e)};U.getState().pushConversationToVault(e).catch(e=>{})}},updateMessageImageProgress:(t,n)=>{e(e=>{if(!e.currentConversation)return e;let r=e.currentConversation.messages.map(e=>e.id===t?{...e,imageProgress:n,loadingState:`image-progress`}:e),i={...e.currentConversation,messages:r,updatedAt:new Date().toISOString()};return{currentConversation:i,conversations:H(e.conversations,i)}})},updateMessageGeneratedImage:(t,n)=>{e(e=>{if(!e.currentConversation)return e;let r=e.currentConversation.messages.map(e=>e.id===t?{...e,generatedImage:n,loadingState:void 0,imageProgress:void 0}:e),i={...e.currentConversation,messages:r,updatedAt:new Date().toISOString()};return{currentConversation:i,conversations:H(e.conversations,i)}});let r=U.getState().currentConversation;r&&U.getState().pushConversationToVault(r).catch(e=>{})},updateMessageSourceImage:(t,n)=>{e(e=>{if(!e.currentConversation)return e;let r=e.currentConversation.messages.map(e=>e.id===t?{...e,sourceImage:n}:e),i={...e.currentConversation,messages:r,updatedAt:new Date().toISOString()};return{currentConversation:i,conversations:H(e.conversations,i)}});let r=U.getState().currentConversation;r&&U.getState().pushConversationToVault(r).catch(e=>{})},createNewConversation:t=>{let n={id:typeof crypto<`u`&&`randomUUID`in crypto?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)}),title:t??`New Chat ${new Date().toLocaleDateString()}`,messages:[],model:r().selectedModel??void 0,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return e(e=>{let t=[n,...e.conversations];return{currentConversation:n,currentConversationId:n.id,conversations:t}}),n},updateConversation:(t,n)=>{e(e=>{var r;let i=e.conversations.map(e=>e.id===t?{...e,...n,updatedAt:new Date().toISOString()}:e),a=i.find(e=>e.id===t);return{conversations:i,currentConversation:((r=e.currentConversation)==null?void 0:r.id)===t?a??e.currentConversation:e.currentConversation}});let i=r().conversations.find(e=>e.id===t);i&&r().pushConversationToVault(i)},deleteConversation:t=>{var n;let i=r(),a=i.conversations.filter(e=>e.id!==t),o=((n=i.currentConversation)==null?void 0:n.id)===t?null:i.currentConversation,s=(o==null?void 0:o.id)??null;e({conversations:a,currentConversation:o,currentConversationId:s});try{let e=localStorage.getItem(`ai-storage`);if(e){let t=JSON.parse(e);t.state&&(t.state.conversations=a,t.state.currentConversation=o,t.state.currentConversationId=s,localStorage.setItem(`ai-storage`,JSON.stringify(t)))}}catch{}},updateUsage:t=>e({messagesUsedToday:t}),addMemory:t=>{let n=$.getState().user;if((n==null?void 0:n.tier)===`zero`&&r().memories.length>=10)return;let i={...t,id:Date.now().toString(),createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};e(e=>{let t=[...e.memories,i];return n!=null&&n.id&&I.enqueueUpsert(n.id,{id:i.id,key:i.key,value:i.value,category:i.category,source:i.source,createdAt:i.createdAt,updatedAt:i.updatedAt}).then(()=>V()),{memories:t}})},updateMemory:(t,n)=>e(e=>{let r=e.memories.map(e=>e.id===t?{...e,...n,updatedAt:new Date().toISOString()}:e),i=$.getState().user,a=r.find(e=>e.id===t);return i!=null&&i.id&&a&&I.enqueueUpsert(i.id,{id:a.id,key:a.key,value:a.value,category:a.category,source:a.source,createdAt:a.createdAt,updatedAt:a.updatedAt}).then(()=>V()),{memories:r}}),deleteMemory:t=>e(e=>{let n=e.memories.filter(e=>e.id!==t),r=$.getState().user;return r!=null&&r.id&&I.enqueueDelete(r.id,t).then(()=>V()),{memories:n}}),setAiName:t=>{e({aiName:(t==null?void 0:t.trim())??null})},setUserName:t=>{e({userName:(t==null?void 0:t.trim())??null})},pushConversationToVault:async e=>{try{if(!t())throw Error(`Encryption key not available. Please unlock your vault.`);let r=i();if(!r)throw Error(`Failed to get encryption key`);let a=await n(e,r),o=await fetch(c(`/vault/conversation`),{method:`POST`,headers:{"Content-Type":`application/json`}
1,credentials:`include`,body:JSON.stringify({encryptedBlob:a,conversationId:e.id})});o.ok||await o.json().catch(()=>({error:o.statusText}))}catch(e){throw e}},syncMemoriesToVault:async()=>{let e=r().memories;await ge(e)},loadMemoriesFromVault:async()=>{try{let t=await ye();if(Array.isArray(t)){let n=r().memories;e({memories:E(n,t)})}}catch{}}}),{name:`ai-storage`,storage:m(()=>localStorage),partialize:e=>{let t=e=>e.map(e=>({...e,messages:e.messages.map(e=>e.imageSearchResults?{...e,imageSearchResults:e.imageSearchResults.map(e=>{var t;return{...e,thumbnail:(t=e.thumbnail)!=null&&t.startsWith(`data:`)?null:e.thumbnail}})}:e)}));return{conversations:t(e.conversations),currentConversation:e.currentConversation?t([e.currentConversation])[0]:null,currentConversationId:e.currentConversationId,selectedModel:e.selectedModel,aiName:e.aiName,userName:e.userName,favoritedConversationIds:e.favoritedConversationIds}},onRehydrateStorage:()=>e=>{var t;if(e){let t=e=>e.map(e=>e.loadingState?{...e,loadingState:void 0,content:e.content||``}:e);e.conversations&&(e.conversations=e.conversations.map(e=>({...e,messages:t(e.messages)}))),e.currentConversation&&(e.currentConversation={...e.currentConversation,messages:t(e.currentConversation.messages)})}let n=localStorage.getItem(`ai-storage-last-user-id`),r=(t=$.getState().user)==null?void 0:t.id;n&&r&&n!==r?(e&&(e.conversations=[],e.currentConversation=null,e.currentConversationId=null),localStorage.setItem(`ai-storage-last-user-id`,r)):r?localStorage.setItem(`ai-storage-last-user-id`,r):!r&&e!=null&&e.conversations&&e.conversations.length>0&&e&&(e.conversations=[],e.currentConversation=null,e.currentConversationId=null)}}));function Fe(e){let t=window.matchMedia(`(max-width: 767px)`).matches;return e===`large`?t?`24px`:`22px`:e===`medium`?t?`22px`:`20px`:t?`18px`:`16px`}function W(e){document.documentElement.dataset.chatFontSize=e,document.documentElement.style.setProperty(`--chat-font-size`,Fe(e))}var G={haptics:!0,sounds:!1,verbosity:`balanced`,creativity:`balanced`,webSearch:`auto`,enterAction:`off`,chatFontSize:`small`},Ie=d()(p(e=>({...G,setHaptics:t=>e({haptics:t}),setSounds:t=>e({sounds:t}),setVerbosity:t=>e({verbosity:t}),setCreativity:t=>e({creativity:t}),setWebSearch:t=>e({webSearch:t}),setEnterAction:t=>e({enterAction:t}),setChatFontSize:t=>{W(t),e({chatFontSize:t})},resetPreferences:()=>{W(G.chatFontSize),e({...G})}}),{name:`self-preferences`,version:4,migrate:e=>{let t=e??{};return{haptics:t.haptics??G.haptics,sounds:t.sounds??G.sounds,verbosity:t.verbosity??G.verbosity,creativity:t.creativity??G.creativity,webSearch:t.webSearch??G.webSearch,enterAction:t.enterAction??G.enterAction,chatFontSize:t.chatFontSize??G.chatFontSize}},onRehydrateStorage:()=>e=>{W((e==null?void 0:e.chatFontSize)??G.chatFontSize)}}));try{let e=localStorage.getItem(`self-preferences`);if(e){var Le;let t=(Le=JSON.parse(e).state)==null?void 0:Le.chatFontSize;(t===`small`||t===`medium`||t===`large`)&&W(t)}}catch{}var K=`self_nav_preferences`;function q(){try{let e=localStorage.getItem(K);if(!e)return{};let t=JSON.parse(e);return!t||typeof t!=`object`?{}:t}catch{return{}}}function Re(e){try{localStorage.setItem(K,JSON.stringify(e))}catch{}}function ze(e){let t=q();return e&&t.userId&&t.userId!==e?{}:t}function Be(e,t){let n=q(),r=!e||!n.userId||n.userId===e;Re({userId:e??n.userId??null,navOrder:t,hiddenNavItems:r?n.hiddenNavItems:void 0})}function Ve(e,t){let n=q(),r=!e||!n.userId||n.userId===e;Re({userId:e??n.userId??null,navOrder:r?n.navOrder:void 0,hiddenNavItems:t})}function He(){try{localStorage.removeItem(K)}catch{}}var Ue=`tier_monitor_initial`,We=`tier_monitor_initial:`;function Ge(e){return e===`zero`||e===`connect`||e===`pro`}function Ke(e){return`${We}${e}`}function qe(e){try{let t=sessionStorage.getItem(Ke(e));return Ge(t)?t:null}catch{return null}}function Je(e,t){try{sessionStorage.setItem(Ke(e),t)}catch{}}function Ye(e,t){return e==null?!1:e===`connect`&&t===`zero`||e===`pro`&&(t===`connect`||t===`zero`)}function Xe(){try{sessionStorage.removeItem(Ue);let e=[];for(let t=0;t<sessionStorage.length;t+=1){let n=sessionStorage.key(t);n!=null&&n.startsWith(`tier_monitor_initial:`)&&e.push(n)}for(let t of e)sessionStorage.removeItem(t)}catch{}}function Ze(){try{o()}catch{}
1try{Object.keys(sessionStorage).forEach(e=>{e.startsWith(`passkey_seed_`)&&sessionStorage.removeItem(e)})}catch{}try{U.getState().clearConversations()}catch{}try{He()}catch{}try{Xe()}catch{}try{Ie.getState().resetPreferences()}catch{}}var Qe=new class{constructor(){s(this,`socket`,null),s(this,`messageHandlers`,new Set),s(this,`messageEditHandlers`,new Set),s(this,`messageDeleteHandlers`,new Set),s(this,`roomCreatedHandlers`,new Set),s(this,`attachmentAddedHandlers`,new Set),s(this,`roleUpdatedHandlers`,new Set),s(this,`reactionHandlers`,new Set),s(this,`typingHandlers`,new Set),s(this,`messageReadHandlers`,new Set),s(this,`messageReadRevokedHandlers`,new Set),s(this,`keysReadyHandlers`,new Set),s(this,`vaultChangedHandlers`,new Set),s(this,`alertsChangedHandlers`,new Set),s(this,`receiptEnvelopeAvailableHandlers`,new Set),s(this,`currentUserId`,null),s(this,`reconnectAttempts`,0),s(this,`maxReconnectAttempts`,5),s(this,`reconnectTimeout`,null),s(this,`connectionHandlers`,new Set)}notifyConnectionChange(e){this.connectionHandlers.forEach(t=>{try{t(e)}catch{}})}connect(e){var t,n;if((t=this.socket)!=null&&t.connected&&this.currentUserId===e||((n=this.socket)!=null&&n.connected&&this.currentUserId!==e&&this.disconnect(),this.socket&&!this.socket.connected&&this.currentUserId===e))return;this.currentUserId=e;let r=c(``),i;i=r.startsWith(`http`)?r.replace(/\/api\/?$/,``):window.location.origin,this.socket=f(i,{withCredentials:!0,transports:[`websocket`,`polling`],path:`/socket.io`});let a=!1,o=null;this.socket.on(`connect`,()=>{var t;this.reconnectAttempts=0,this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),(t=this.socket)==null||t.emit(`register`,{userId:e}),a=!1,o&&clearTimeout(o),o=setTimeout(()=>{if(!a){var t;(t=this.socket)==null||t.emit(`register`,{userId:e})}},2e3),this.notifyConnectionChange(!0)}),this.socket.on(`registered`,()=>{a=!0,o&&(clearTimeout(o),o=null)}),this.socket.on(`new-message`,e=>{try{let n=e.id;if(n){var t;(t=this.socket)==null||t.emit(`message-received`,{messageId:n})}}catch{}this.messageHandlers.forEach(t=>t(e))}),this.socket.on(`message-edited`,e=>{this.messageEditHandlers.forEach(t=>t(e))}),this.socket.on(`message-deleted`,e=>{this.messageDeleteHandlers.forEach(t=>t(e))}),this.socket.on(`room-created`,e=>{this.roomCreatedHandlers.forEach(t=>t(e))}),this.socket.on(`attachment_added`,e=>{this.attachmentAddedHandlers.forEach(t=>t(e))}),this.socket.on(`reaction-updated`,e=>{this.reactionHandlers.forEach(t=>t(e))}),this.socket.on(`role-updated`,e=>{this.roleUpdatedHandlers.forEach(t=>t(e))}),this.socket.on(`group-member-typing`,e=>{this.typingHandlers.forEach(t=>t(e))}),this.socket.on(`message-read`,e=>{this.messageReadHandlers.forEach(t=>t(e))}),this.socket.on(`message-read-revoked`,e=>{this.messageReadRevokedHandlers.forEach(t=>t(e))}),this.socket.on(`conversation-keys-ready`,e=>{this.keysReadyHandlers.forEach(t=>t(e))}),this.socket.on(`vault-changed`,e=>{this.vaultChangedHandlers.forEach(t=>t(e))}),this.socket.on(`alerts-changed`,e=>{this.alertsChangedHandlers.forEach(t=>t(e))}),this.socket.on(`receipt-envelope-available`,()=>{this.receiptEnvelopeAvailableHandlers.forEach(e=>e())}),this.socket.on(`disconnect`,e=>{if(o&&(clearTimeout(o),o=null),e===`io server disconnect`||e===`io client disconnect`){this.notifyConnectionChange(!1);return}if(this.currentUserId&&this.reconnectAttempts<this.maxReconnectAttempts){let e=Math.min(1e3*2**this.reconnectAttempts,3e4);this.reconnectTimeout=setTimeout(()=>{this.reconnectAttempts++,this.currentUserId&&this.connect(this.currentUserId)},e)}else this.reconnectAttempts,this.maxReconnectAttempts;this.notifyConnectionChange(!1)}),this.socket.on(`error`,e=>{})}disconnect(){this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.reconnectAttempts=0,this.currentUserId=null,this.socket&&(this.socket.disconnect(),this.socket=null)}onMessage(e){return this.messageHandlers.add(e),()=>this.messageHandlers.delete(e)}onMessageEdited(e){return this.messageEditHandlers.add(e),()=>this.messageEditHandlers.delete(e)}onMessageDeleted(e){return this.messageDeleteHandlers.add(e),()=>this.messageDeleteHandlers.delete(e)}onRoomCreated(e){return this.roomCreatedHandlers.add(e),()=>this.roomCreatedHandlers.delete(e)}onAttachmentAdded(e){return this.attachmentAddedHandlers.add(e),()=>this.attachmentAddedHandlers.delete(e)}onRoleUpdated(e){return this.roleUpdatedHandlers.add(e),()=>this.roleUpdatedHandlers.delete(e)}onReactionUpdated(e){return this.reactionHandlers.add(e),()=>this.reactionHandlers.delete(e)}onTyping(e){return this.typingHandlers.add(e),()=>
1this.typingHandlers.delete(e)}onMessageRead(e){return this.messageReadHandlers.add(e),()=>this.messageReadHandlers.delete(e)}onMessageReadRevoked(e){return this.messageReadRevokedHandlers.add(e),()=>this.messageReadRevokedHandlers.delete(e)}onKeysReady(e){return this.keysReadyHandlers.add(e),()=>this.keysReadyHandlers.delete(e)}onVaultChanged(e){return this.vaultChangedHandlers.add(e),()=>this.vaultChangedHandlers.delete(e)}onAlertsChanged(e){return this.alertsChangedHandlers.add(e),()=>this.alertsChangedHandlers.delete(e)}onReceiptEnvelopeAvailable(e){return this.receiptEnvelopeAvailableHandlers.add(e),()=>this.receiptEnvelopeAvailableHandlers.delete(e)}emitTyping(e,t){var n;(n=this.socket)!=null&&n.connected&&this.socket.emit(`group-typing`,{roomId:e,isTyping:t})}emitMessageRead(e,t){var n;(n=this.socket)!=null&&n.connected&&this.socket.emit(`group-message-read`,{messageId:e,roomId:t})}isConnected(){var e;return((e=this.socket)==null?void 0:e.connected)??!1}getSocket(){return this.socket}onConnectionChange(e){return this.connectionHandlers.add(e),()=>this.connectionHandlers.delete(e)}},J=null,Y=null;function $e(){var e;return typeof navigator>`u`?null:((e=navigator.selfBrowser)==null?void 0:e.session)??null}function X(){Y!==null&&(window.clearTimeout(Y),Y=null)}function et(e,t){X();let n=Date.parse(t);if(Number.isNaN(n))return;let r=Math.max(3e4,n-Date.now()-6e4);Y=window.setTimeout(()=>{Z(e,{force:!0})},r)}async function tt(){let e=await fetch(c(`/vpn/token`),{method:`POST`,credentials:`include`});if(e.ok){let t=await e.json();return{vpnAccess:`enabled`,vpnToken:t.vpnToken,expiresAt:t.expiresAt}}if(e.status===403)return{vpnAccess:`disabled`,vpnToken:null,expiresAt:null};if(e.status===401)return{vpnAccess:`unknown`,vpnToken:null,expiresAt:null};let t=await e.text();throw Error(t||`VPN token request failed: ${e.status}`)}async function Z(e,t={}){let n=$e();if(!n){X(),J=e?`${e.id}:${e.tier}`:null;return}if(!e){X(),J=null,await n.onSignedOut();return}let r=`${e.id}:${e.tier}`;if(!t.force&&r===J)return;let i=`disabled`,a=null,o=null;if(e.tier===`connect`)try{let e=await tt();i=e.vpnAccess,a=e.vpnToken,o=e.expiresAt}catch{i=`unknown`,a=null,o=null}else X();await n.onSignedIn({userId:e.id,vpnAccess:i,vpnToken:a,displayName:e.name??null,tier:e.tier,pendingTierSelection:!!t.pendingTierSelection}),e.tier===`connect`&&o?et(e,o):X(),J=r}async function nt(){X(),J=null;let e=$e();if(e)try{await e.onSignedOut()}catch{}}var Q={groupCalls:!1},$=d()((e,t)=>({user:null,isAuthenticated:!1,isLoading:!1,isTransitioning:!1,needsSecuritySetup:!1,pendingTierSelection:!1,featureFlags:Q,setUser:n=>{e({user:n,isAuthenticated:!!n,isTransitioning:!1}),Z(n,{pendingTierSelection:t().pendingTierSelection}),h.initialize(n),n!=null&&n.id?localStorage.setItem(`user_id`,n.id):localStorage.removeItem(`user_id`)},login:n=>{e({user:n,isAuthenticated:!0,isLoading:!1,isTransitioning:!1}),Z(n,{pendingTierSelection:t().pendingTierSelection}),h.initialize(n),n!=null&&n.id&&localStorage.setItem(`user_id`,n.id)},logout:()=>{nt(),localStorage.removeItem(`user_id`);try{Qe.disconnect()}catch{}try{ee.disconnect()}catch{}h.clearUserData().catch(e=>{});let n=t().user;if(n!=null&&n.id)try{re(n.id)}catch{}Ze(),e({user:null,isAuthenticated:!1,isLoading:!1,isTransitioning:!1,needsSecuritySetup:!1,pendingTierSelection:!1,featureFlags:Q}),window.location.href=`https://self.app`},setLoading:t=>e({isLoading:t}),setTransitioning:t=>e({isTransitioning:t}),setNeedsSecuritySetup:t=>e({needsSecuritySetup:t}),setPendingTierSelection:n=>{e({pendingTierSelection:n}),Z(t().user,{force:!0,pendingTierSelection:n})},setFeatureFlags:t=>e({featureFlags:t})}));if(typeof window<`u`&&window.localStorage)try{localStorage.removeItem(`auth-storage`)}catch{}export{ye as C,ve as D,ce as E,te as O,fe as S,w as T,De as _,Ye as a,I as b,ze as c,Ie as d,U as f,ke as g,Oe as h,Ue as i,ne as k,Ve as l,Ne as m,$ as n,qe as o,Pe as p,Qe as r,Je as s,Q as t,Be as u,Te as v,T as w,be as x,Ee as y};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.