@amd-gaia/agent-ui 0.25.4-rc.2 → 0.25.4-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{S as t,T as n,i as r,n as i,r as a,w as o}from"./apiBase-DRtaTd8u.js";import{n as s,t as c}from"./zap-BdhDcjhB.js";import{A as ee,Bt as te,C as ne,D as re,E as ie,F as ae,Ft as l,Gt as u,Ht as oe,I as se,It as ce,Jt as le,Kt as ue,L as de,Lt as fe,M as pe,N as me,O as he,P as ge,Qt as _e,R as d,Rt as f,S as ve,T as p,Ut as ye,Vt as be,W as xe,_ as Se,an as Ce,b as we,c as Te,d as Ee,dn as De,f as Oe,fn as ke,g as Ae,h as je,hn as m,j as Me,k as Ne,l as Pe,ln as Fe,m as Ie,p as Le,pn as Re,qt as ze,s as Be,t as Ve,u as He,un as Ue,v as We,vn as Ge,w as Ke,x as qe,xn as Je,y as Ye,yn as Xe,z as h}from"./index-CKOG_8jk.js";var g={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};g.node;var Ze=o(g),Qe={name:`chevron-left`,size:24,node:[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]};Qe.node;var $e=o(Qe),_={name:`git-merge`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]};_.node;var et=o(_),tt={name:`shield-off`,size:24,node:[[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`,key:`1jlk70`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`,key:`18rp1v`}]]};tt.node;var nt=o(tt),v={name:`shield`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]};v.node;var rt=o(v),it={name:`target`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]};it.node;var at=o(it),ot={name:`trending-up`,size:24,node:[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]};ot.node;var st=o(ot),ct={name:`user`,size:24,node:[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]};ct.node;var lt=o(ct),y=e(n(),1),ut=[{title:`Preferences`,categories:[`preference`]},{title:`About you`,categories:[`fact`,`profile`,`skill`]},{title:`Reminders`,categories:[`reminder`]},{title:`Notes`,categories:[`note`]}];function dt(e){switch(e){case`user`:return`You added this`;case`tool`:return`You asked GAIA to remember this`;case`llm_extract`:return`Picked up in a chat`;case`consolidation`:return`From an older chat`;case`inferred`:return`From your profile setup`;case`discovery`:return`Found on this PC during profile setup`;default:return`Saved`}}function ft(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=Math.floor((Date.now()-t.getTime())/864e5);return n<=0?`today`:n===1?`yesterday`:n<30?`${n} days ago`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`})}function pt(e,t=new Date){let n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e),r=n?new Date(+n[1],n[2]-1,+n[3]):new Date(e);if(Number.isNaN(r.getTime()))return null;let i=r.getHours()===0&&r.getMinutes()===0&&r.getSeconds()===0,a=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),o=i?r.getTime()<a:r.getTime()<t.getTime(),s=r.toLocaleString(void 0,{weekday:`short`,month:`short`,day:`numeric`,...r.getFullYear()===t.getFullYear()?{}:{year:`numeric`},...i?{}:{hour:`numeric`,minute:`2-digit`}});return{text:`${o?`Was due`:`Due`} ${s}`,past:o}}function mt({memoryEnabled:e,reloadKey:n,onChanged:o,onOpenAdvanced:s,showToast:c}){let[ee,ne]=(0,y.useState)(null),[re,ie]=(0,y.useState)(null),[ae,l]=(0,y.useState)(null),[u,se]=(0,y.useState)(``),[ce,ue]=(0,y.useState)([]),[de,fe]=(0,y.useState)(new Set),[pe,me]=(0,y.useState)(``),[he,ge]=(0,y.useState)(`fact`),[_e,d]=(0,y.useState)(null),f=(0,y.useRef)(0),p=(0,y.useCallback)(async()=>{let e=++f.current;try{let t=await ve({about_user:!0,include_sensitive:!0,sort_by:`updated_at`,order:`desc`,limit:200});if(e!==f.current)return;ne(t.items),ie(null)}catch(n){if(e!==f.current)return;t.system.warn(`Failed to load what GAIA knows about the user`,n),ie(n instanceof Error?n.message:String(n))}},[]);(0,y.useEffect)(()=>{p()},[p,n]);let ye=(0,y.useCallback)(async e=>{let n=u.trim();if(!n||n===e.content)l(null);else{d(e.id);try{await Se(e.id,{content:n}),l(null),c(`Updated`,`success`),await p(),o()}catch(e){t.system.error(`Failed to edit memory`,e),c(`Couldn't save the change: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}}},[u,p,o,c]),be=(0,y.useCallback)(async e=>{d(e.id);try{await Ae(e.id),f.current++,ne(t=>(t??[]).filter(t=>t.id!==e.id)),ue(t=>[e,...t]),o()}catch(e){t.system.error(`Failed to forget memory`,e),c(`Couldn't forget that: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}},[o,c]),xe=(0,y.useCallback)(async e=>{d(e.id);try{await Ie({content:e.content,category:e.category,domain:e.domain??void 0,context:e.context,entity:e.entity??void 0,sensitive:e.sensitive,due_at:e.due_at??void 0}),ue(t=>t.filter(t=>t.id!==e.id)),await p(),o()}catch(e){t.system.error(`Failed to restore memory`,e),c(`Couldn't restore it: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}},[p,o,c]),we=(0,y.useCallback)(async()=>{let e=pe.trim();if(e){d(`new`);try{await Ie({content:e,category:he}),me(``),c(`Saved`,`success`),await p(),o()}catch(e){t.system.error(`Failed to add memory`,e),c(`Couldn't save it: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}}},[pe,he,p,o,c]);if(!e)return r(`div`,{className:`mem-about`,children:[a(`h2`,{className:`mem-about-title`,children:`What GAIA knows about you`}),r(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:`Memory is off, so GAIA isn't saving anything about you.`}),a(`button`,{className:`btn-secondary`,onClick:s,children:`Turn it on in Advanced`})]})]});let Te=ut.map(e=>({...e,rows:(ee??[]).filter(t=>e.categories.includes(t.category))})).filter(e=>e.rows.length>0);return r(`div`,{className:`mem-about`,children:[a(`h2`,{className:`mem-about-title`,children:`What GAIA knows about you`}),a(`p`,{className:`mem-about-intro`,children:`GAIA uses these in every chat. Edit anything that's wrong, or forget it so GAIA stops using it.`}),r(`form`,{className:`mem-about-add`,onSubmit:e=>{e.preventDefault(),we()},children:[a(`input`,{className:`mem-input`,placeholder:`Tell GAIA something about you, e.g. “I prefer short answers”`,"aria-label":`Something GAIA should know about you`,value:pe,onChange:e=>me(e.target.value)}),r(`select`,{className:`mem-select`,"aria-label":`Kind`,value:he,onChange:e=>ge(e.target.value),children:[a(`option`,{value:`fact`,children:`About you`}),a(`option`,{value:`preference`,children:`Preference`}),a(`option`,{value:`reminder`,children:`Reminder`}),a(`option`,{value:`note`,children:`Note`})]}),r(`button`,{className:`btn-primary`,type:`submit`,disabled:!pe.trim()||_e===`new`,children:[a(ze,{size:14}),` Add`]})]}),ce.map(e=>r(`div`,{className:`mem-about-forgotten`,role:`status`,children:[r(`span`,{children:[`Forgotten: `,e.sensitive?`a sensitive memory`:`“${e.content}”`,` — GAIA won't learn it again from old chats.`]}),r(`button`,{className:`mem-about-link`,disabled:_e===e.id,onClick:()=>xe(e),children:[a(te,{size:12}),` Undo`]})]},e.id)),re?r(`div`,{className:`mem-about-empty`,children:[r(`p`,{children:[`Couldn't load your memories: `,re]}),a(`button`,{className:`btn-secondary`,onClick:p,children:`Try again`})]}):ee===null?r(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),` Loading…`]}):Te.length===0?r(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:`GAIA hasn't saved anything about you yet.`}),a(`p`,{className:`mem-about-hint`,children:`Tell it in a chat (“remember that I live in Calgary”) or add something above.`})]}):Te.map(e=>r(`section`,{className:`mem-about-group`,"aria-label":e.title,children:[a(`h3`,{className:`mem-about-group-title`,children:e.title}),a(`ul`,{className:`mem-about-list`,children:e.rows.map(e=>{let t=e.sensitive&&!de.has(e.id),n=e.due_at?pt(e.due_at):null;return a(`li`,{className:`mem-about-item`,children:ae===e.id?r(`form`,{className:`mem-about-edit`,onSubmit:t=>{t.preventDefault(),ye(e)},children:[a(`textarea`,{className:`mem-input`,"aria-label":`Edit memory`,rows:2,autoFocus:!0,value:u,onChange:e=>se(e.target.value),onKeyDown:t=>{t.key===`Escape`&&(t.stopPropagation(),l(null)),t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),ye(e))}}),r(`div`,{className:`mem-about-edit-actions`,children:[a(`button`,{className:`btn-primary`,type:`submit`,disabled:_e===e.id,children:`Save`}),a(`button`,{className:`btn-secondary`,type:`button`,onClick:()=>l(null),children:`Cancel`})]})]}):r(i.Fragment,{children:[r(`div`,{className:`mem-about-text`,children:[t?r(`button`,{className:`mem-about-link`,onClick:()=>fe(t=>new Set(t).add(e.id)),children:[a(Ce,{size:12}),` Sensitive — show`]}):e.content,n&&a(`span`,{className:`mem-about-due${n.past?` is-overdue`:``}`,children:n.text}),r(`span`,{className:`mem-about-meta`,children:[dt(e.source),` · `,ft(e.updated_at)]})]}),r(`div`,{className:`mem-about-actions`,children:[a(`button`,{className:`mem-about-btn`,"aria-label":`Edit: ${t?`sensitive memory`:e.content}`,title:`Edit`,onClick:()=>{l(e.id),se(e.content)},children:a(le,{size:14})}),r(`button`,{className:`mem-about-btn mem-about-btn-remove`,"aria-label":`Forget: ${t?`sensitive memory`:e.content}`,title:`Forget`,disabled:_e===e.id,onClick:()=>be(e),children:[a(oe,{size:14}),` Forget`]})]})]})},e.id)})})]},e.title))]})}function b(e){if(!e)return`—`;try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n={month:`short`,day:`numeric`};return t.getFullYear()!==new Date().getFullYear()&&(n.year=`numeric`),t.toLocaleDateString(void 0,n)}catch{return`—`}}function x(e){if(!e)return``;try{let t=new Date(e);return isNaN(t.getTime())?``:t.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}catch{return``}}function S(e){if(!e)return`—`;try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n=Date.now(),r=t.getTime()-n,i=Math.abs(r),a=Math.floor(i/1e3),o=Math.floor(i/6e4),s=Math.floor(i/36e5),c=Math.floor(i/864e5);return r<0?a<5?`just now`:a<60?`${a}s ago`:s===0?`${o}m ago`:c===0?`${s}h ago`:c===1?`yesterday`:c<30?`${c}d ago`:x(e):a<5?`now`:a<60?`in ${a}s`:s===0?`in ${o}m`:c===0?`in ${s}h`:c===1?`tomorrow`:c<30?`in ${c}d`:x(e)}catch{return`—`}}function ht(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function gt(e){try{return new Date(e).getTime()<Date.now()}catch{return!1}}function _t(e){return e>=.7?`high`:e>=.4?`medium`:`low`}function vt(e){return e>=.9?`high`:e>=.7?`medium`:`low`}function yt(e,t){let n=b(e),r=b(t);return n===`—`&&r===`—`?``:n===r?n:`${n} \u2013 ${r}`}function bt(e){if(e.length===0)return 0;let t=new Date().toISOString().slice(0,10),n=e.find(e=>e.date===t);return n?n.knowledge_added:0}var xt=[`fact`,`preference`,`error`,`skill`,`note`,`reminder`],St={work:`blue`,technical:`purple`,personal:`green`,general:`gray`};function Ct(){let{setShowMemoryDashboard:e,sessions:n,setCurrentSession:o}=ce(),te=(0,y.useMemo)(()=>new Map(n.map(e=>[e.id,e.title])),[n]),Ce=e=>te.get(e)||`${e.slice(0,8)}...`,[g,Qe]=(0,y.useState)(null),[_,tt]=(0,y.useState)([]),[v,it]=(0,y.useState)(null),[ot,ct]=(0,y.useState)([]),[ut,dt]=(0,y.useState)([]),[ft,pt]=(0,y.useState)([]),[b,Ct]=(0,y.useState)(null),[wt,Tt]=(0,y.useState)([]),[Et,Dt]=(0,y.useState)(!0),[Ot,kt]=(0,y.useState)(null),[At,jt]=(0,y.useState)(null),[Mt,C]=(0,y.useState)(!1),[Nt,Pt]=(0,y.useState)(null),[Ft,It]=(0,y.useState)([]),Lt=(0,y.useRef)(0),[w,Rt]=(0,y.useState)([]),[zt,Bt]=(0,y.useState)(``),[Vt,Ht]=(0,y.useState)(``),[Ut,Wt]=(0,y.useState)(``),[T,Gt]=(0,y.useState)(`updated_at`),[Kt,qt]=(0,y.useState)(`desc`),[E,D]=(0,y.useState)(0),[Jt,Yt]=(0,y.useState)(!1),[Xt,Zt]=(0,y.useState)(``),[Qt,$t]=(0,y.useState)(null),en=(0,y.useRef)(null),[O,tn]=(0,y.useState)(null),[nn,rn]=(0,y.useState)(!1),[k,an]=(0,y.useState)(null),[A,j]=(0,y.useState)({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),[on,sn]=(0,y.useState)(new Set),[M,cn]=(0,y.useState)(!1),[ln,un]=(0,y.useState)(!1),[dn,fn]=(0,y.useState)(!1),[N,P]=(0,y.useState)(!1),[pn,mn]=(0,y.useState)(!1),[F,hn]=(0,y.useState)(null),[gn,_n]=(0,y.useState)(!1),[I,L]=(0,y.useState)(null),[R,vn]=(0,y.useState)(`about`),[yn,bn]=(0,y.useState)(0),[xn,Sn]=(0,y.useState)([]),[Cn,wn]=(0,y.useState)(null),[Tn,En]=(0,y.useState)(!1),[Dn,On]=(0,y.useState)(null),[kn,An]=(0,y.useState)(null),[jn,Mn]=(0,y.useState)(!1),[Nn,Pn]=(0,y.useState)({title:``,description:``,priority:`medium`}),[z,B]=(0,y.useState)(`idle`),[Fn,V]=(0,y.useState)([]),[H,U]=(0,y.useState)([]),[In,Ln]=(0,y.useState)(null),Rn=(0,y.useRef)(null),zn=(0,y.useRef)(null),[W,G]=(0,y.useState)(`idle`),[Bn,K]=(0,y.useState)([]),[q,J]=(0,y.useState)([]),[Vn,Hn]=(0,y.useState)(null),[Un,Wn]=(0,y.useState)(!1),Gn=(0,y.useRef)(null),Kn=(0,y.useRef)(null),[qn,Jn]=(0,y.useState)(30),[Yn,Xn]=(0,y.useState)(!1),[Zn,Qn]=(0,y.useState)(!1),[$n,er]=(0,y.useState)(!1),[tr,nr]=(0,y.useState)(!1),[rr,ir]=(0,y.useState)(!1),[ar,or]=(0,y.useState)(!1),sr=(0,y.useRef)(null),cr=(0,y.useRef)(null),lr=(0,y.useRef)(null),Y=(0,y.useCallback)((e,t=`info`)=>{let n=++Lt.current;It(r=>[...r,{id:n,text:e,type:t}]),setTimeout(()=>{It(e=>e.filter(e=>e.id!==n))},4e3)},[]);(0,y.useEffect)(()=>{if(!Mt)return;let e=e=>{cr.current&&!cr.current.contains(e.target)&&C(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[Mt]),l(!0,()=>{I?L(null):pn?mn(!1):gn?_n(!1):O?tn(null):Mt?C(!1):nn||k?(rn(!1),an(null)):Nt?Pt(null):e(!1)}),xe(lr,!!I),(0,y.useEffect)(()=>{if(!I)return;let e=lr.current;if(!e)return;let t=document.activeElement;return e.focus(),()=>{t?.focus()}},[I]);let ur=(0,y.useCallback)(async()=>{try{let e=await ie();Qe(e)}catch(e){t.system.warn(`Failed to load memory stats`,e)}},[]),dr=(0,y.useCallback)(async()=>{try{let e=await ne(qn);tt(e)}catch(e){t.system.warn(`Failed to load memory activity`,e)}},[qn]),X=(0,y.useCallback)(async()=>{try{let e=await ve({category:w.length>0?w:void 0,context:zt||void 0,entity:Vt||void 0,search:Ut||void 0,sort_by:T,order:Kt,offset:E,limit:15,include_sensitive:!0,include_superseded:Jt});it(e)}catch(e){t.system.warn(`Failed to load knowledge`,e)}},[w,zt,Vt,Ut,T,Kt,E,Jt]),fr=(0,y.useCallback)(async()=>{try{let e=await re();ct(e)}catch(e){t.system.warn(`Failed to load tool summary`,e)}},[]),pr=(0,y.useCallback)(async()=>{try{let e=await Ke(20);dt(e)}catch(e){t.system.warn(`Failed to load conversations`,e)}},[]),mr=(0,y.useCallback)(async()=>{try{let e=await he(7);pt(e)}catch(e){t.system.warn(`Failed to load upcoming items`,e)}},[]),Z=(0,y.useCallback)(async()=>{try{let e=await Ye();Ct(e)}catch(e){t.system.warn(`Failed to load embedding coverage`,e)}},[]),hr=(0,y.useCallback)(async()=>{try{let e=await we();Tt(e||[])}catch(e){t.system.warn(`Failed to load entities`,e)}},[]),gr=(0,y.useCallback)(async()=>{try{let e=await p();un(e.mcp_memory_enabled),cn(e.memory_enabled),fn(e.system_discovery_consent)}catch(e){t.system.warn(`Failed to load memory settings`,e)}},[]),_r=(0,y.useCallback)(async()=>{En(!0);try{let[e,t]=await Promise.all([Ne(),qe()]);Sn(e.goals),wn(t)}catch(e){t.system.warn(`Failed to load goals`,e)}finally{En(!1)}},[]),vr=(0,y.useCallback)(async(e,n)=>{try{await e()}catch(e){t.system.error(n,e),Y(`${n}: ${e instanceof Error?e.message:e}`,`error`);return}_r()},[_r,Y]);(0,y.useEffect)(()=>{if(!kn)return;let e=setTimeout(()=>An(null),3e3);return()=>clearTimeout(e)},[kn]);let Q=(0,y.useCallback)(async()=>{Dt(!0),kt(null);try{await Promise.all([ur(),dr(),X(),fr(),pr(),mr(),Z(),hr(),gr(),_r()]),bn(e=>e+1)}catch(e){kt(`Failed to load memory data. Is the backend running?`),t.system.error(`Memory dashboard load failed`,e)}finally{Dt(!1)}},[ur,dr,X,fr,pr,mr,Z,hr,gr,_r]);(0,y.useEffect)(()=>{Q()},[Q]),(0,y.useEffect)(()=>{X()},[X]);let yr=(0,y.useRef)(!0);(0,y.useEffect)(()=>{yr.current?yr.current=!1:dr()},[dr]);let br=(0,y.useCallback)(e=>{Wt(e),or(!0),sr.current&&clearTimeout(sr.current),sr.current=setTimeout(()=>{D(0),or(!1)},300)},[]),xr=(0,y.useCallback)(()=>{X(),ur(),Z(),mr(),hr()},[X,ur,Z,mr,hr]),$=(0,y.useCallback)(()=>{xr(),bn(e=>e+1)},[xr]),Sr=(0,y.useCallback)(async()=>{if(A.content.trim())try{let e=await Ie({content:A.content,category:A.category,domain:A.domain||void 0,context:A.context,entity:A.entity||void 0,sensitive:A.sensitive,due_at:A.due_at||void 0});rn(!1),j({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),t.ui.info(`Created new knowledge entry`),e?.embedded===!1?Y(e.embed_error??`Saved, but not embedded`,`error`):Y(`Memory created successfully`,`success`)}catch(e){t.system.error(`Failed to create knowledge`,e),Y(`Failed to create memory`,`error`)}},[A,$,Y]),Cr=(0,y.useCallback)(async()=>{if(k&&A.content.trim())try{let e=await Se(k,{content:A.content,category:A.category,domain:A.domain||void 0,context:A.context,entity:A.entity||void 0,sensitive:A.sensitive,due_at:A.due_at||void 0});an(null),j({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),t.ui.info(`Updated knowledge ${k}`),e?.embedded===!1?Y(e.embed_error??`Saved, but not embedded`,`error`):Y(`Memory updated`,`success`)}catch(e){t.system.error(`Failed to update knowledge`,e),Y(`Failed to update memory`,`error`)}},[k,A,$,Y]),wr=(0,y.useCallback)(async e=>{if(F!==e)hn(e);else{hn(null);try{await Ae(e),$(),t.ui.info(`Deleted knowledge ${e}`),Y(`Memory deleted`,`info`)}catch(e){t.system.error(`Failed to delete knowledge`,e),Y(`Failed to delete memory`,`error`)}}},[F,$,Y]);(0,y.useEffect)(()=>{if(!F)return;let e=setTimeout(()=>hn(null),3e3);return()=>clearTimeout(e)},[F]);let Tr=(0,y.useCallback)(async e=>{try{await Se(e.id,{sensitive:!e.sensitive}),X(),t.ui.info(`Toggled sensitive for ${e.id}: ${!e.sensitive}`),Y(e.sensitive?`Unmarked as sensitive`:`Marked as sensitive`,`info`)}catch(e){t.system.error(`Failed to toggle sensitive`,e),Y(`Failed to toggle sensitive flag`,`error`)}},[X,Y]),Er=(0,y.useCallback)(e=>{an(e.id),rn(!1),j({content:e.content,category:e.category,domain:e.domain||``,context:e.context,entity:e.entity||``,sensitive:e.sensitive,due_at:e.due_at||``})},[]),Dr=(0,y.useCallback)(e=>{navigator.clipboard.writeText(e).catch(()=>{}),t.ui.info(`Copied knowledge ID: ${e}`),Y(`ID copied to clipboard`,`info`)},[Y]),Or=(0,y.useCallback)(e=>{Zt(e),en.current&&clearTimeout(en.current),e.trim()?en.current=setTimeout(async()=>{try{let t=await d(e.trim(),20);$t(t)}catch(e){t.system.warn(`Conversation search failed`,e)}},300):$t(null)},[]),kr=(0,y.useCallback)(async e=>{try{let t=await We(e);tn({sessionId:e,turns:t})}catch(e){t.system.error(`Failed to load conversation detail`,e)}},[]),Ar=(0,y.useCallback)(e=>{Rt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),D(0)},[]),jr=(0,y.useCallback)(e=>{T===e?qt(e=>e===`desc`?`asc`:`desc`):(Gt(e),qt(`desc`)),D(0)},[T]),Mr=(0,y.useCallback)(async()=>{Xn(!0),C(!1);try{let e=await Oe();await Q(),Y(`Consolidated ${e.consolidated??0} sessions, extracted ${e.extracted_items??0} items`,`success`)}catch(e){t.system.error(`Failed to consolidate sessions`,e),Y(`Failed to consolidate sessions`,`error`)}finally{Xn(!1)}},[Q,Y]),Nr=(0,y.useCallback)(async()=>{Qn(!0),C(!1);try{let e=await pe();await Z(),Y(`Backfilled ${e.backfilled??0} embeddings${e.total_without?` (${e.total_without} were missing)`:``}`,`success`)}catch(e){t.system.error(`Failed to rebuild embeddings`,e),Y(`Failed to rebuild embeddings`,`error`)}finally{Qn(!1)}},[Z,Y]),Pr=(0,y.useCallback)(async()=>{er(!0),C(!1);try{let e=await ge();await Q(),Y(`Checked ${e.pairs_checked??0} pairs: ${e.reinforced??0} reinforced, ${e.contradicted??0} contradicted`,`success`)}catch(e){t.system.error(`Failed to reconcile memory`,e),Y(`Failed to reconcile memory`,`error`)}finally{er(!1)}},[Q,Y]),Fr=(0,y.useCallback)(async()=>{nr(!0),C(!1);try{await me(),await Q(),Y(`FTS indexes rebuilt successfully`,`success`)}catch(e){t.system.error(`Failed to rebuild FTS index`,e),Y(`Failed to rebuild FTS indexes`,`error`)}finally{nr(!1)}},[Q,Y]),Ir=(0,y.useCallback)(async()=>{ir(!0),C(!1);try{let e=await ae();await Q(),e.skipped?Y(`System context collection is disabled — enable it in settings`,`error`):Y(`System context refreshed: ${e.stored} facts updated`,`success`)}catch(e){t.system.error(`Failed to refresh system context`,e),Y(`Failed to refresh system context`,`error`)}finally{ir(!1)}},[Q,Y]),Lr=Yn||Zn||$n||tr||rr,Rr=(0,y.useCallback)(()=>{B(`running`),V([]),U([]),Ln(null);let e=ee();zn.current=e,e.onmessage=t=>{try{let n=JSON.parse(t.data);if(n.type===`log`)V(e=>[...e,{text:n.message,kind:`log`}]);else if(n.type===`finding`){let e=n.item;V(t=>[...t,{text:` Found: ${e.content}`,kind:`finding`}]),U(t=>[...t,{...e,_checked:!0}])}else n.type===`error`?V(e=>[...e,{text:` Error: ${n.message}`,kind:`error`}]):n.type===`done`&&(e.close(),zn.current=null,V(e=>[...e,{text:`Done. ${n.total??0} items discovered.`,kind:`log`}]),B(`review`))}catch{V(e=>[...e,{text:`Failed to parse event data.`,kind:`error`}])}},e.onerror=()=>{e.close(),zn.current=null,V(e=>[...e,{text:`Connection error. Is the GAIA server running?`,kind:`error`}]),U(e=>(B(e.length>0?`review`:`idle`),e))}},[]),zr=(0,y.useCallback)(async()=>{let e=H.filter(e=>e._checked);if(e.length!==0){B(`saving`);try{let t=e.map(({_checked:e,...t})=>t),n=await He(t);Ln(n.stored),B(`done`),$(),Y(`Saved ${n.stored} items to memory`,`success`)}catch(e){t.system.error(`Failed to commit discovery items`,e),Y(`Failed to save discovery items`,`error`),B(`review`)}}},[H,$,Y]),Br=(0,y.useCallback)(()=>{G(`running`),K([]),J([]),Hn(null);let e=Me(Un);Kn.current=e,e.onmessage=t=>{try{let n=JSON.parse(t.data);if(n.type===`log`)K(e=>[...e,{text:n.message,kind:`log`}]);else if(n.type===`insight`){let e=n.item;K(t=>[...t,{text:` Insight: ${e.content}`,kind:`finding`}]),J(t=>[...t,{...e,_checked:!0}])}else n.type===`error`?K(e=>[...e,{text:` Error: ${n.message}`,kind:`error`}]):n.type===`done`&&(e.close(),Kn.current=null,K(e=>[...e,{text:`Done. ${n.total??0} insights generated.`,kind:`log`}]),G(`review`))}catch{K(e=>[...e,{text:`Failed to parse event data.`,kind:`error`}])}},e.onerror=()=>{e.close(),Kn.current=null,K(e=>[...e,{text:`Connection error. Is Lemonade Server running?`,kind:`error`}]),J(e=>(G(e.length>0?`review`:`idle`),e))}},[Un]),Vr=(0,y.useCallback)(async()=>{let e=q.filter(e=>e._checked);if(e.length!==0){G(`saving`);try{let t=e.map(({_checked:e,...t})=>t),n=await Ee(t);Hn(n.stored),G(`done`),$(),Y(`Saved ${n.stored} insights to memory`,`success`)}catch(e){t.system.error(`Failed to commit inference insights`,e),Y(`Failed to save inference insights`,`error`),G(`review`)}}},[q,$,Y]);(0,y.useEffect)(()=>{Rn.current&&(Rn.current.scrollTop=Rn.current.scrollHeight)},[Fn]),(0,y.useEffect)(()=>{Gn.current&&(Gn.current.scrollTop=Gn.current.scrollHeight)},[Bn]),(0,y.useEffect)(()=>()=>{zn.current&&=(zn.current.close(),null),Kn.current&&=(Kn.current.close(),null)},[]);let Hr=e=>T===e?a(`span`,{className:`mem-sort-arrow`,children:Kt===`desc`?`↓`:`↑`}):null,Ur=Math.max(1,..._.map(e=>e.conversations+e.tool_calls+e.knowledge_added+e.errors)),Wr=g?.knowledge?.by_context?Object.keys(g.knowledge.by_context):[];return r(`div`,{className:`memory-dashboard-page`,children:[r(`div`,{className:`memory-dashboard-header`,children:[r(`div`,{className:`memory-dashboard-header-left`,children:[a(`button`,{className:`btn-icon settings-back-btn`,onClick:()=>e(!1),"aria-label":`Back`,children:a(Ze,{size:18})}),r(`h1`,{children:[`Memory `,a(`span`,{style:{fontSize:11,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`2px 8px`,borderRadius:4,marginLeft:8,verticalAlign:`middle`,letterSpacing:`0.5px`},children:`BETA`})]})]}),r(`div`,{className:`memory-dashboard-header-actions`,children:[R===`advanced`&&r(i.Fragment,{children:[b&&b.total_items>0&&r(`div`,{className:`mem-embedding-coverage`,title:`${b.with_embedding} of ${b.total_items} entries embedded`,children:[a(`div`,{className:`mem-embedding-bar`,children:a(`div`,{className:`mem-embedding-fill`,style:{width:`${Math.round(b.coverage_pct)}%`}})}),r(`span`,{className:`mem-embedding-label`,children:[Math.round(b.coverage_pct),`% embedded`]})]}),r(`div`,{className:`mem-maintenance-wrap`,ref:cr,children:[r(`button`,{className:`btn-icon ${Lr?`mem-spinning`:``}`,onClick:()=>C(e=>!e),title:`Maintenance actions`,"aria-label":`Maintenance actions`,"aria-expanded":Mt,children:[Lr?a(`div`,{className:`mem-spinner-sm`}):a(Fe,{size:16}),a(Xe,{size:10,style:{marginLeft:2}})]}),Mt&&r(`div`,{className:`mem-maintenance-menu`,role:`menu`,children:[r(`button`,{className:`mem-maintenance-item`,onClick:Mr,disabled:Yn,role:`menuitem`,children:[a(et,{size:14}),Yn?`Consolidating...`:`Consolidate Sessions`]}),r(`button`,{className:`mem-maintenance-item`,onClick:Nr,disabled:Zn,role:`menuitem`,children:[a(c,{size:14}),Zn?`Rebuilding...`:`Rebuild Embeddings`]}),r(`button`,{className:`mem-maintenance-item`,onClick:Pr,disabled:$n,role:`menuitem`,children:[a(m,{size:14}),$n?`Reconciling...`:`Reconcile Memory`]}),a(`div`,{className:`mem-maintenance-divider`}),r(`button`,{className:`mem-maintenance-item`,onClick:Ir,disabled:rr,role:`menuitem`,children:[a(ue,{size:14}),rr?`Refreshing...`:`Refresh System Context`]}),a(`div`,{className:`mem-maintenance-divider`}),r(`button`,{className:`mem-maintenance-item`,onClick:Fr,disabled:tr,role:`menuitem`,children:[a(u,{size:14}),tr?`Rebuilding...`:`Rebuild FTS Indexes`]})]})]})]}),a(`button`,{className:`btn-icon`,onClick:Q,title:`Refresh`,"aria-label":`Refresh dashboard`,children:a(ue,{size:16})})]})]}),r(`div`,{className:`mem-tab-bar`,role:`tablist`,children:[r(`button`,{className:`mem-tab-btn${R===`about`?` mem-tab-active`:``}`,onClick:()=>vn(`about`),role:`tab`,"aria-selected":R===`about`,children:[a(lt,{size:14}),` About you`]}),r(`button`,{className:`mem-tab-btn${R===`goals`?` mem-tab-active`:``}`,onClick:()=>{vn(`goals`),_r()},role:`tab`,"aria-selected":R===`goals`,children:[a(at,{size:14}),` Goals`,Cn&&(Cn.goals.pending_approval??0)>0&&a(`span`,{className:`mem-tab-badge`,children:Cn.goals.pending_approval})]}),r(`button`,{className:`mem-tab-btn${R===`profile`?` mem-tab-active`:``}`,onClick:()=>vn(`profile`),role:`tab`,"aria-selected":R===`profile`,children:[a(ye,{size:14}),` Profile setup`]}),r(`button`,{className:`mem-tab-btn${R===`advanced`?` mem-tab-active`:``}`,onClick:()=>vn(`advanced`),role:`tab`,"aria-selected":R===`advanced`,children:[a(Je,{size:14}),` Advanced`]})]}),r(`div`,{className:`memory-dashboard-body`,children:[R===`about`&&a(mt,{memoryEnabled:M,reloadKey:yn,onChanged:xr,onOpenAdvanced:()=>vn(`advanced`),showToast:Y}),R===`advanced`&&a(i.Fragment,{children:Et&&!g?r(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),`Loading memory data...`]}):Ot?r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(be,{size:32})}),a(`p`,{children:Ot}),r(`button`,{className:`btn-secondary`,onClick:Q,style:{marginTop:12},children:[a(ue,{size:14}),` Retry`]})]}):r(i.Fragment,{children:[!M&&r(`div`,{className:`mem-empty-state`,style:{margin:`40px 0`},children:[a(`div`,{className:`mem-empty-icon`,style:{opacity:.5},children:a(rt,{size:32})}),a(`p`,{style:{color:`var(--text-secondary)`,fontSize:14},children:`Memory is off. Turn it on in Settings below to let GAIA remember what you tell it.`})]}),M&&r(i.Fragment,{children:[g?.embedding_error&&r(`div`,{className:`mem-advanced-error`,role:`alert`,children:[a(be,{size:14}),` `,g.embedding_error]}),r(`div`,{className:`mem-stat-cards`,children:[r(`div`,{className:`mem-stat-card`,"data-accent":`purple`,children:[a(`div`,{className:`mem-stat-value`,children:g?.knowledge?.total??0}),a(`div`,{className:`mem-stat-label`,children:`Stored`}),a(`div`,{className:`mem-stat-sub`,children:(()=>{let e=bt(_);return e>0?`+${e} today`:g?.knowledge?.by_category?Object.entries(g.knowledge.by_category).slice(0,3).map(([e,t])=>`${t} ${e}${t===1?``:`s`}`).join(`, `):`No entries`})()})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`gold`,children:[a(`div`,{className:`mem-stat-value`,children:g?.knowledge?.total_retrievals??0}),a(`div`,{className:`mem-stat-label`,children:`Retrieved`}),a(`div`,{className:`mem-stat-sub`,children:g?.knowledge?.total&&g?.knowledge?.total_retrievals?`avg ${(g.knowledge.total_retrievals/g.knowledge.total).toFixed(1)}x per memory`:`No recalls yet`})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`blue`,children:[a(`div`,{className:`mem-stat-value`,children:g?.conversations?.total_sessions??0}),a(`div`,{className:`mem-stat-label`,children:`Sessions`}),a(`div`,{className:`mem-stat-sub`,children:yt(g?.conversations?.first_session??null,g?.conversations?.last_session??null)||`${g?.conversations?.total_turns??0} total turns`})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`green`,children:[a(`div`,{className:`mem-stat-value`,children:g?.tools?.total_calls??0}),a(`div`,{className:`mem-stat-label`,children:`Tool Calls`}),r(`div`,{className:`mem-stat-sub`,title:`Memory tools (remember, recall, ...) are not logged`,children:[g?.tools?.unique_tools??0,` tools, excl. memory`]})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`red`,children:[a(`div`,{className:`mem-stat-value`,children:g?.tools?.overall_success_rate!=null&&(g.tools.total_calls??0)>0?`${Math.round(g.tools.overall_success_rate*100)}%`:`—`}),a(`div`,{className:`mem-stat-label`,children:`Success Rate`}),a(`div`,{className:`mem-stat-sub`,children:(g?.tools?.total_calls??0)>0?`${g?.tools?.total_errors??0} errors`:`No tool calls yet`})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title mem-section-title-row`,children:[r(`span`,{className:`mem-section-title-left`,children:[a(st,{size:14}),` Activity`]}),a(`div`,{className:`mem-range-tabs`,role:`group`,"aria-label":`Activity range`,children:[1,7,30].map(e=>a(`button`,{className:`mem-range-tab${qn===e?` active`:``}`,onClick:()=>Jn(e),children:e===1?`1D`:e===7?`7D`:`30D`},e))})]}),_.length>0?r(i.Fragment,{children:[a(`div`,{className:`mem-activity-chart`,children:_.map((e,t)=>{let n=e.conversations+e.tool_calls+e.knowledge_added+e.errors,o=t===0||t===_.length-1||t%7==0,s=new Date(e.date+`T00:00:00`).toLocaleDateString(void 0,{month:`short`,day:`numeric`});return r(`div`,{className:`mem-activity-bar-group`,onMouseEnter:()=>jt(t),onMouseLeave:()=>jt(null),children:[e.errors>0&&a(`div`,{className:`mem-activity-bar errors`,style:{height:`${e.errors/Ur*100}%`}}),e.knowledge_added>0&&a(`div`,{className:`mem-activity-bar knowledge`,style:{height:`${e.knowledge_added/Ur*100}%`}}),e.tool_calls>0&&a(`div`,{className:`mem-activity-bar tool_calls`,style:{height:`${e.tool_calls/Ur*100}%`}}),e.conversations>0&&a(`div`,{className:`mem-activity-bar conversations`,style:{height:`${e.conversations/Ur*100}%`}}),o&&a(`span`,{className:`mem-activity-date-label`,children:s}),At===t&&n>0&&r(`div`,{className:`mem-activity-tooltip`,children:[a(`strong`,{children:s}),a(`br`,{}),e.conversations>0&&r(i.Fragment,{children:[e.conversations,` conversations`,a(`br`,{})]}),e.tool_calls>0&&r(i.Fragment,{children:[e.tool_calls,` tool calls`,a(`br`,{})]}),e.knowledge_added>0&&r(i.Fragment,{children:[e.knowledge_added,` learned`,a(`br`,{})]}),e.errors>0&&r(i.Fragment,{children:[e.errors,` errors`]})]})]},e.date)})}),r(`div`,{className:`mem-activity-legend`,children:[r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot conversations`}),` Conversations`]}),r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot tool_calls`}),` Tool Calls`]}),r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot knowledge`}),` Knowledge`]}),r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot errors`}),` Errors`]})]})]}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(st,{size:28})}),a(`p`,{children:`No activity data yet`})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title mem-section-title-row`,children:[r(`span`,{className:`mem-section-title-left`,children:[a(Je,{size:14}),` Knowledge Browser`,v&&v.total>0&&a(`span`,{className:`mem-section-count`,children:v.total})]}),!nn&&!k&&r(`button`,{className:`mem-section-add-btn`,onClick:()=>rn(!0),title:`Add a memory entry`,children:[a(ze,{size:13}),` Add`]})]}),r(`div`,{className:`mem-filters`,children:[r(`div`,{className:`mem-category-pills`,role:`group`,"aria-label":`Filter by category`,children:[xt.map(e=>a(`button`,{className:`mem-category-pill ${e}${w.includes(e)?` active`:``}`,onClick:()=>Ar(e),"aria-pressed":w.includes(e),children:e},e)),w.length>0&&a(`button`,{className:`mem-category-pill clear`,onClick:()=>{Rt([]),D(0)},"aria-label":`Clear category filters`,children:`✕ Clear`})]}),r(`select`,{className:`mem-filter-select`,value:zt,onChange:e=>{Bt(e.target.value),D(0)},"aria-label":`Filter by context`,children:[a(`option`,{value:``,children:`All Contexts`}),Wr.map(e=>a(`option`,{value:e,children:e},e))]}),r(`select`,{className:`mem-filter-select`,value:Vt,onChange:e=>{Ht(e.target.value),D(0)},"aria-label":`Filter by entity`,children:[a(`option`,{value:``,children:`All Entities`}),wt.map(e=>r(`option`,{value:e.entity,children:[e.entity,` (`,e.count,`)`]},e.entity))]}),r(`div`,{className:`mem-filter-search-wrap`,children:[ar?a(`div`,{className:`mem-spinner-sm search-icon`,style:{width:12,height:12,borderWidth:1.5}}):a(u,{size:13,className:`search-icon`}),a(`input`,{className:`mem-filter-search`,type:`text`,placeholder:`Search memories...`,value:Ut,onChange:e=>br(e.target.value),"aria-label":`Search memories`})]}),r(`label`,{className:`mem-filter-toggle`,title:`Show entries that have been superseded by newer versions`,children:[a(`input`,{type:`checkbox`,checked:Jt,onChange:e=>Yt(e.target.checked)}),a(`span`,{children:`Superseded`})]})]}),(nn||k)&&r(`div`,{className:`mem-inline-form`,children:[r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Content`}),a(`textarea`,{value:A.content,onChange:e=>j(t=>({...t,content:e.target.value})),placeholder:`What should the agent remember?`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Category`}),a(`select`,{value:A.category,onChange:e=>j(t=>({...t,category:e.target.value})),children:xt.map(e=>a(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Context`}),a(`input`,{type:`text`,value:A.context,onChange:e=>j(t=>({...t,context:e.target.value})),placeholder:`global`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Domain`}),a(`input`,{type:`text`,value:A.domain,onChange:e=>j(t=>({...t,domain:e.target.value})),placeholder:`e.g., python, frontend`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Entity`}),a(`input`,{type:`text`,value:A.entity,onChange:e=>j(t=>({...t,entity:e.target.value})),placeholder:`e.g., person:sarah_chen`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Due At`}),a(`input`,{type:`text`,value:A.due_at,onChange:e=>j(t=>({...t,due_at:e.target.value})),placeholder:`ISO 8601 (e.g., 2026-03-25T09:00:00-07:00)`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Sensitive`}),r(`label`,{style:{display:`flex`,alignItems:`center`,gap:6,cursor:`pointer`,fontSize:12},children:[a(`input`,{type:`checkbox`,checked:A.sensitive,onChange:e=>j(t=>({...t,sensitive:e.target.checked}))}),`Mark as sensitive (excluded from system prompt)`]})]}),r(`div`,{className:`mem-inline-form-actions`,children:[a(`button`,{className:`btn-secondary`,onClick:()=>{rn(!1),an(null)},children:`Cancel`}),a(`button`,{className:`btn-primary`,onClick:k?Cr:Sr,style:{padding:`8px 20px`,fontSize:13},children:k?`Update`:`Save`})]})]}),v&&v.items.length>0?r(i.Fragment,{children:[a(`div`,{style:{overflowX:`auto`},children:r(`table`,{className:`mem-knowledge-table`,children:[a(`thead`,{children:r(`tr`,{children:[r(`th`,{onClick:()=>jr(`category`),className:T===`category`?`sorted`:``,children:[`Category`,Hr(`category`)]}),a(`th`,{children:`Content`}),r(`th`,{onClick:()=>jr(`context`),className:T===`context`?`sorted`:``,children:[`Context`,Hr(`context`)]}),a(`th`,{children:`Entity`}),r(`th`,{onClick:()=>jr(`confidence`),className:T===`confidence`?`sorted`:``,children:[`Confidence`,Hr(`confidence`)]}),a(`th`,{children:`Source`}),r(`th`,{onClick:()=>jr(`updated_at`),className:T===`updated_at`?`sorted`:``,children:[`Updated`,Hr(`updated_at`)]}),r(`th`,{onClick:()=>jr(`created_at`),className:T===`created_at`?`sorted`:``,children:[`Created`,Hr(`created_at`)]}),a(`th`,{children:`Due`}),a(`th`,{className:`mem-actions-cell`})]})}),a(`tbody`,{children:v.items.map(e=>{let t=Nt===e.id,n=e.has_embedding;return r(y.Fragment,{children:[r(`tr`,{className:`${e.superseded_by?`mem-superseded-row`:``} ${t?`mem-expanded-row`:``}`,onClick:()=>Pt(t?null:e.id),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),Pt(t?null:e.id))},tabIndex:0,role:`row`,"aria-expanded":t,style:{cursor:`pointer`},children:[a(`td`,{children:a(`span`,{className:`mem-cat-badge ${e.category}`,children:e.category})}),a(`td`,{children:r(`div`,{className:`mem-content-cell`,title:e.content,children:[n!==void 0&&a(`span`,{className:`mem-embed-dot ${n?`embedded`:`missing`}`,title:n?`Embedded`:`Embedding missing`,children:a(Re,{size:6,fill:`currentColor`})}),e.sensitive&&a(`span`,{className:`mem-sensitive-badge`,title:`Sensitive`,children:a(rt,{size:11})}),a(`span`,{className:e.sensitive&&!on.has(e.id)?`mem-sensitive-blur`:e.superseded_by?`mem-superseded-text`:``,onClick:t=>{e.sensitive&&(t.stopPropagation(),sn(t=>{let n=new Set(t);return n.has(e.id)?n.delete(e.id):n.add(e.id),n}))},children:e.content})]})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,children:e.context})}),a(`td`,{children:e.entity?a(`span`,{className:`mem-entity-link`,onClick:t=>{t.stopPropagation(),Ht(e.entity),D(0)},title:`Filter by ${e.entity}`,children:e.entity}):a(`span`,{className:`mem-date-cell`,children:`—`})}),a(`td`,{children:r(`div`,{className:`mem-confidence`,children:[a(`div`,{className:`mem-confidence-bar`,children:a(`div`,{className:`mem-confidence-fill ${_t(e.confidence)}`,style:{width:`${e.confidence*100}%`}})}),e.confidence.toFixed(2)]})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,children:e.source||`—`})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:x(e.updated_at),children:S(e.updated_at)})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:x(e.created_at),children:S(e.created_at)})}),a(`td`,{children:e.due_at?a(`span`,{className:`mem-due-badge ${gt(e.due_at)?`overdue`:`upcoming`}`,title:x(e.due_at),children:S(e.due_at)}):a(`span`,{className:`mem-due-badge none`,children:`—`})}),a(`td`,{className:`mem-actions-cell`,children:r(`div`,{className:`mem-row-actions`,onClick:e=>e.stopPropagation(),children:[a(`button`,{className:`mem-row-action-btn`,onClick:()=>Er(e),title:`Edit`,children:a(le,{size:13})}),a(`button`,{className:`mem-row-action-btn`,onClick:()=>Tr(e),title:e.sensitive?`Unmark sensitive`:`Mark sensitive`,children:e.sensitive?a(nt,{size:13}):a(rt,{size:13})}),a(`button`,{className:`mem-row-action-btn`,onClick:()=>Dr(e.id),title:`Copy ID`,children:a(De,{size:13})}),a(`button`,{className:`mem-row-action-btn delete${F===e.id?` is-confirm`:``}`,onClick:()=>wr(e.id),title:F===e.id?`Click again to delete`:`Delete`,"aria-label":F===e.id?`Confirm delete memory`:`Delete memory`,children:F===e.id?a(`span`,{className:`mem-row-delete-label`,children:`Delete?`}):a(oe,{size:13})})]})})]}),t&&a(`tr`,{className:`mem-detail-row`,children:a(`td`,{colSpan:10,children:r(`div`,{className:`mem-detail-panel`,children:[r(`div`,{className:`mem-detail-grid`,children:[r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`ID`}),a(`span`,{className:`mem-detail-value`,children:e.id})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Domain`}),a(`span`,{className:`mem-detail-value`,children:e.domain||`—`})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Source`}),a(`span`,{className:`mem-detail-value`,children:e.source||`—`})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Use Count`}),a(`span`,{className:`mem-detail-value`,children:e.use_count??0})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Created`}),a(`span`,{className:`mem-detail-value`,children:x(e.created_at)})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Updated`}),a(`span`,{className:`mem-detail-value`,children:x(e.updated_at)})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Last Used`}),a(`span`,{className:`mem-detail-value`,children:x(e.last_used)})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Reminded At`}),a(`span`,{className:`mem-detail-value`,children:x(e.reminded_at)})]}),e.superseded_by&&r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Superseded By`}),a(`span`,{className:`mem-detail-value mem-detail-chain`,children:e.superseded_by})]}),e.metadata&&r(`div`,{className:`mem-detail-field mem-detail-full`,children:[a(`span`,{className:`mem-detail-label`,children:`Metadata`}),a(`span`,{className:`mem-detail-value`,children:typeof e.metadata==`object`?JSON.stringify(e.metadata,null,2):e.metadata})]})]}),r(`div`,{className:`mem-detail-content-full`,children:[a(`span`,{className:`mem-detail-label`,children:`Full Content`}),a(`div`,{className:`mem-detail-content-text`,children:e.content})]})]})})})]},e.id)})})]})}),r(`div`,{className:`mem-pagination`,children:[r(`span`,{children:[E+1,`–`,Math.min(E+15,v.total),` of `,v.total]}),r(`div`,{className:`mem-pagination-btns`,children:[a(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":`Previous page`,disabled:E===0,onClick:()=>D(Math.max(0,E-15)),children:a($e,{size:14})}),a(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":`Next page`,disabled:E+15>=v.total,onClick:()=>D(E+15),children:a(Ge,{size:14})})]})]})]}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(Je,{size:28})}),a(`p`,{children:Ut||w.length>0||zt||Vt?`No matching memories`:`No memories stored yet`})]})]}),r(`div`,{className:`mem-two-col`,children:[r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(f,{size:14}),` Tool Performance`,a(`span`,{className:`mem-section-note`,title:`remember, recall, update_memory, forget and search_past_conversations are not logged`,children:`excludes memory tools`})]}),ot.length>0?a(`div`,{style:{overflowX:`auto`},children:r(`table`,{className:`mem-tool-table`,children:[a(`thead`,{children:r(`tr`,{children:[a(`th`,{children:`Tool`}),a(`th`,{children:`Calls`}),a(`th`,{children:`Success`}),a(`th`,{children:`Denied`}),a(`th`,{children:`Avg Time`}),a(`th`,{children:`Last Used`}),a(`th`,{children:`Last Error`})]})}),a(`tbody`,{children:ot.map(e=>r(`tr`,{children:[a(`td`,{children:a(`span`,{className:`mem-tool-name`,children:e.tool_name})}),a(`td`,{children:e.total_calls}),a(`td`,{children:r(`div`,{className:`mem-confidence`,children:[a(`div`,{className:`mem-confidence-bar`,style:{width:40},children:a(`div`,{className:`mem-confidence-fill ${vt(e.success_rate)}`,style:{width:`${e.success_rate*100}%`}})}),r(`span`,{className:`mem-success-rate ${vt(e.success_rate)}`,children:[Math.round(e.success_rate*100),`%`]})]})}),a(`td`,{children:e.denied_count??0}),a(`td`,{children:ht(e.avg_duration_ms)}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:x(e.last_used),children:S(e.last_used)})}),a(`td`,{children:a(`span`,{className:`mem-tool-error`,title:e.last_error||``,children:e.last_error||`—`})})]},e.tool_name))})]})}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(f,{size:28})}),a(`p`,{children:`No tool calls recorded yet`})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(ke,{size:14}),` Upcoming & Overdue`]}),ft.length>0?a(`div`,{className:`mem-temporal-list`,children:ft.map(e=>{let t=gt(e.due_at);return r(`div`,{className:`mem-temporal-item ${t?`overdue`:`upcoming`}`,children:[a(`span`,{className:`mem-temporal-icon`,children:a(t?be:ke,{size:16})}),r(`div`,{className:`mem-temporal-content`,children:[a(`div`,{className:`mem-temporal-text`,children:e.content}),r(`div`,{className:`mem-temporal-date`,children:[t?`OVERDUE`:`Due`,`: `,S(e.due_at),e.context!==`global`&&` \u00B7 ${e.context}`]})]})]},e.id)})}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(m,{size:28})}),a(`p`,{children:`Nothing upcoming or overdue`})]})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(s,{size:14}),` Conversation History`]}),r(`div`,{className:`mem-conv-search`,children:[a(u,{size:13,className:`search-icon`}),a(`input`,{type:`text`,placeholder:`Search conversations...`,value:Xt,onChange:e=>Or(e.target.value),"aria-label":`Search conversations`}),Xt&&a(`button`,{className:`mem-search-clear`,onClick:()=>{Zt(``),$t(null)},"aria-label":`Clear search`,children:a(fe,{size:12})})]}),Qt===null?ut.length>0?a(`div`,{className:`mem-conv-list`,children:ut.map(e=>r(`div`,{className:`mem-conv-item`,onClick:()=>kr(e.session_id),children:[r(`div`,{className:`mem-conv-info`,children:[r(`div`,{className:`mem-conv-session-id`,children:[Ce(e.session_id),e.consolidated&&a(`span`,{className:`mem-consolidated-badge`,title:`Consolidated`,children:a(et,{size:11})})]}),e.first_message&&a(`div`,{className:`mem-conv-preview`,children:e.first_message})]}),r(`div`,{className:`mem-conv-meta`,children:[r(`span`,{children:[e.turn_count,` turns`]}),a(`span`,{children:S(e.last_activity)})]})]},e.session_id))}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(s,{size:28})}),a(`p`,{children:`No conversation history in memory`})]}):Qt.length>0?a(`div`,{className:`mem-conv-list`,children:Qt.map(e=>r(`div`,{className:`mem-conv-item`,onClick:()=>kr(e.session_id),children:[r(`div`,{className:`mem-conv-info`,children:[r(`div`,{className:`mem-conv-session-id`,children:[a(`span`,{className:`mem-conv-turn-role ${e.role}`,children:e.role}),` `,Ce(e.session_id)]}),a(`div`,{className:`mem-conv-preview`,children:e.content})]}),a(`div`,{className:`mem-conv-meta`,children:a(`span`,{children:S(e.timestamp)})})]},e.id))}):a(`div`,{className:`mem-empty`,children:r(`p`,{children:[`No conversations match “`,Xt,`”`]})})]}),O&&r(`div`,{className:`mem-conv-detail-overlay`,children:[r(`div`,{className:`mem-conv-detail-header`,children:[a(`h2`,{children:Ce(O.sessionId)}),r(`div`,{className:`mem-conv-detail-actions`,children:[te.has(O.sessionId)&&a(`button`,{className:`btn-secondary`,onClick:()=>o(O.sessionId),children:`Open chat`}),a(`button`,{className:`btn-icon`,onClick:()=>tn(null),"aria-label":`Close conversation`,children:a(fe,{size:16})})]})]}),r(`div`,{className:`mem-conv-detail-body`,children:[O.turns.map(e=>r(`div`,{className:`mem-conv-turn`,children:[r(`div`,{className:`mem-conv-turn-header`,children:[a(`div`,{className:`mem-conv-turn-role ${e.role}`,children:e.role}),a(`span`,{className:`mem-conv-turn-time`,title:x(e.timestamp),children:S(e.timestamp)})]}),a(`div`,{className:`mem-conv-turn-content`,children:e.content})]},e.id)),O.turns.length===0&&a(`div`,{className:`mem-empty`,children:`No turns found`})]})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(rt,{size:14}),` Settings `,a(`span`,{style:{fontSize:10,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`1px 6px`,borderRadius:4,marginLeft:6,verticalAlign:`middle`,letterSpacing:`0.5px`},children:`BETA`})]}),r(`div`,{className:`mem-setting-row`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`Memory enabled`}),a(`span`,{className:`mem-setting-desc`,children:`When disabled, no knowledge or conversation data is stored during any session (global incognito).`})]}),a(`button`,{className:`mem-toggle${M?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!M)L(`memory`);else{P(!0);try{let e=await h({memory_enabled:!1});cn(e.memory_enabled)}catch(e){t.system.warn(`Failed to disable memory`,e)}finally{P(!1)}}},"aria-pressed":M,"aria-label":`Memory is ${M?`enabled`:`disabled`}`,children:M?`On`:`Off`})]}),I&&(()=>{let e={memory:{title:`Enable Agent Memory?`,description:`Agent memory is a work-in-progress. By enabling it:`,bullets:[[`Conversations and facts are stored `,`locally on this machine`],[`Stored data `,`may be lost`,` during updates`],[`You can disable it at any time from this settings panel`]],buttonLabel:`Enable Memory`,onConfirm:async()=>{let e=await h({memory_enabled:!0});cn(e.memory_enabled),Y(`Memory enabled`,`info`)}},mcp:{title:`Enable MCP Memory Access?`,description:`This exposes memory data to external MCP clients:`,bullets:[[`MCP clients can `,`read your stored memories`,` (read-only)`],[`Requires an `,`MCP server restart`,` to take effect`],[`Intended for debugging and troubleshooting only`]],buttonLabel:`Enable MCP Access`,onConfirm:async()=>{let e=await h({mcp_memory_enabled:!0});un(e.mcp_memory_enabled),Y(`MCP memory access enabled`,`info`)}},discovery:{title:`Enable System Discovery?`,description:`This scans your system to personalize responses:`,bullets:[[`Collects `,`hardware, software, and environment`,` information`],[`Scans files, git repos, browser history, and SSH config`],[`All data stays `,`local on this machine`]],buttonLabel:`Enable Discovery`,onConfirm:async()=>{let e=await h({system_discovery_consent:!0});if(fn(e.system_discovery_consent),e.system_context_error)Y(`System discovery enabled but scan failed: ${e.system_context_error}`,`error`);else{let t=e.system_context_refresh?.stored??0;Y(`System discovery enabled — ${t} system facts collected`,`info`)}Q()}}}[I];return r(i.Fragment,{children:[a(`div`,{"aria-hidden":`true`,style:{position:`fixed`,inset:0,background:`var(--bg-modal-overlay)`,zIndex:9998,backdropFilter:`blur(4px)`},onClick:()=>L(null)}),r(`div`,{ref:lr,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`mem-beta-confirm-title`,"aria-describedby":`mem-beta-confirm-desc`,tabIndex:-1,style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,zIndex:9999,background:`var(--bg-card)`,border:`1px solid var(--border)`,borderRadius:12,padding:`28px 32px`,maxWidth:420,width:`90vw`,boxShadow:`var(--shadow-lg)`},children:[r(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:16},children:[a(`span`,{style:{fontSize:11,fontWeight:700,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`3px 10px`,borderRadius:4,letterSpacing:`0.5px`},children:`BETA`}),a(`h2`,{id:`mem-beta-confirm-title`,style:{fontSize:16,fontWeight:600,color:`var(--text-primary)`},children:e.title})]}),a(`p`,{id:`mem-beta-confirm-desc`,style:{fontSize:13,lineHeight:1.6,color:`var(--text-secondary)`,margin:`0 0 8px`},children:e.description}),a(`ul`,{style:{fontSize:13,lineHeight:1.7,color:`var(--text-secondary)`,margin:`0 0 24px`,paddingLeft:20},children:e.bullets.map((e,t)=>a(`li`,{children:e.map((e,t)=>t%2==1?a(`strong`,{style:{color:`var(--text-primary)`},children:e},t):a(`span`,{children:e},t))},t))}),r(`div`,{style:{display:`flex`,justifyContent:`flex-end`,gap:10},children:[a(`button`,{className:`btn-secondary`,onClick:()=>L(null),style:{padding:`8px 20px`,fontSize:13,borderRadius:6},children:`Cancel`}),a(`button`,{disabled:N,onClick:async()=>{P(!0);try{await e.onConfirm()}catch(e){t.system.warn(`Failed to update setting`,e),Y(`Failed to update setting. Please try again.`,`error`)}finally{P(!1),L(null)}},style:{padding:`8px 24px`,fontSize:13,fontWeight:600,borderRadius:6,border:`none`,cursor:`pointer`,background:`var(--accent-fill)`,color:`var(--accent-fill-text)`},children:e.buttonLabel})]})]})]})})(),r(`div`,{className:`mem-setting-row`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`MCP memory access`}),a(`span`,{className:`mem-setting-desc`,children:`Expose read-only memory tools to MCP clients (for debug/troubleshooting). Requires MCP server restart.`})]}),a(`button`,{className:`mem-toggle${ln?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!ln)L(`mcp`);else{P(!0);try{let e=await h({mcp_memory_enabled:!1});un(e.mcp_memory_enabled)}catch(e){t.system.warn(`Failed to update memory settings`,e)}finally{P(!1)}}},"aria-label":`Toggle MCP memory access`,"aria-pressed":ln,children:ln?`On`:`Off`})]}),r(`div`,{className:`mem-setting-row`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`System discovery`}),a(`span`,{className:`mem-setting-desc`,children:`Allow GAIA to scan your system for hardware, software, and environment information to personalize responses.`})]}),a(`button`,{className:`mem-toggle${dn?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!dn)L(`discovery`);else{P(!0);try{let e=await h({system_discovery_consent:!1});fn(e.system_discovery_consent)}catch(e){t.system.warn(`Failed to update system discovery setting`,e)}finally{P(!1)}}},"aria-label":`Toggle system discovery`,"aria-pressed":dn,children:dn?`On`:`Off`})]}),r(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`Re-initialize memory`}),a(`span`,{className:`mem-setting-desc`,children:`Wipe all memories, conversations, and tool logs, then re-collect system information. This cannot be undone.`})]}),gn?r(`div`,{className:`mem-delete-confirm`,children:[a(`span`,{className:`mem-delete-confirm-label`,children:`Are you sure?`}),a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:async()=>{P(!0);try{let e=await se();e.system_context.error?Y(e.system_context.error,`error`):Y(`Re-initialized: cleared ${e.cleared.knowledge} entries, restored ${e.system_context.stored} system facts`,`info`),Q()}catch(e){t.system.warn(`Failed to reinitialize memory`,e),Y(`Failed to re-initialize memory`,`error`)}finally{P(!1),_n(!1)}},children:`Yes, re-initialize`}),a(`button`,{className:`btn-secondary`,onClick:()=>_n(!1),style:{padding:`6px 14px`,fontSize:12},children:`Cancel`})]}):a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:()=>_n(!0),children:`Re-initialize`})]}),r(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`Delete all memories`}),a(`span`,{className:`mem-setting-desc`,children:`Permanently wipe all knowledge entries, conversation history, and tool logs. This cannot be undone.`})]}),pn?r(`div`,{className:`mem-delete-confirm`,children:[a(`span`,{className:`mem-delete-confirm-label`,children:`Are you sure?`}),a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:async()=>{P(!0);try{let e=await Pe();Y(`Deleted ${e.knowledge} knowledge entries, ${e.conversations} conversations`,`info`),Q()}catch(e){t.system.warn(`Failed to clear memory`,e),Y(`Failed to clear memory`,`error`)}finally{P(!1),mn(!1)}},children:`Yes, delete all`}),a(`button`,{className:`btn-secondary`,onClick:()=>mn(!1),style:{padding:`6px 14px`,fontSize:12},children:`Cancel`})]}):a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:()=>mn(!0),children:`Delete All`})]})]}),g&&r(`div`,{className:`mem-db-footer`,children:[r(`span`,{children:[`Database: `,Ve(g.db_size_bytes),g.knowledge?.avg_confidence!=null&&` \u00B7 Avg confidence: ${g.knowledge.avg_confidence.toFixed(2)}`]}),r(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[g.knowledge?.entity_count!=null&&g.knowledge.entity_count>0&&r(`span`,{children:[g.knowledge.entity_count,` entities`]}),g.knowledge?.sensitive_count!=null&&g.knowledge.sensitive_count>0&&r(`span`,{children:[a(rt,{size:10}),` `,g.knowledge.sensitive_count,` sensitive`]})]})]})]})}),R===`profile`&&r(`div`,{className:`mem-profile-grid`,children:[r(`div`,{className:`mem-profile-card`,children:[r(`div`,{className:`mem-profile-card-title`,children:[a(Ue,{size:16}),` System Discovery`]}),a(`p`,{className:`mem-profile-desc`,children:`Scan your system to discover apps, projects, and usage patterns.`}),a(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:z===`running`||z===`saving`,onClick:Rr,children:z===`running`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Running...`]}):`Run Discovery`}),Fn.length>0&&a(`div`,{className:`mem-log`,ref:Rn,children:Fn.map((e,t)=>a(`div`,{className:`mem-log-line ${e.kind}`,children:e.text},t))}),(z===`review`||z===`saving`||z===`done`)&&H.length>0&&r(`div`,{className:`mem-review-section`,children:[a(`div`,{className:`mem-review-header`,children:`Review & Save`}),a(`div`,{className:`mem-review-list`,children:H.map((e,t)=>r(`label`,{className:`mem-review-item`,children:[a(`input`,{type:`checkbox`,checked:e._checked,disabled:z===`saving`||z===`done`,onChange:()=>{U(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),a(`span`,{className:`mem-review-content`,children:e.content}),a(`span`,{className:`mem-source-badge`,children:e._source_name||e.category}),r(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),r(`div`,{className:`mem-review-actions`,children:[a(`button`,{className:`btn-primary`,disabled:z===`saving`||z===`done`||H.filter(e=>e._checked).length===0,onClick:zr,children:z===`saving`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Saving...`]}):`Save Selected (${H.filter(e=>e._checked).length})`}),r(`span`,{className:`mem-review-select-links`,children:[a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>U(e=>e.map(e=>({...e,_checked:!0}))),children:`Select All`}),` / `,a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>U(e=>e.map(e=>({...e,_checked:!1}))),children:`None`})]})]})]}),z===`done`&&In!==null&&r(`div`,{className:`mem-profile-success`,children:[a(m,{size:14}),` Saved `,In,` items to memory`]}),z===`review`&&H.length===0&&a(`div`,{className:`mem-profile-empty`,children:`No items discovered.`})]}),r(`div`,{className:`mem-profile-card`,children:[r(`div`,{className:`mem-profile-card-title`,children:[a(ye,{size:16}),` AI Profile Inference`]}),a(`p`,{className:`mem-profile-desc`,children:`Use the local LLM to generate profile insights from your data.`}),a(`p`,{className:`mem-profile-note`,children:`Requires Lemonade Server running.`}),r(`label`,{className:`mem-profile-checkbox`,children:[a(`input`,{type:`checkbox`,checked:Un,onChange:e=>Wn(e.target.checked),disabled:W===`running`||W===`saving`}),`Include browser history`]}),a(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:W===`running`||W===`saving`,onClick:Br,children:W===`running`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Running...`]}):`Run Inference`}),Bn.length>0&&a(`div`,{className:`mem-log`,ref:Gn,children:Bn.map((e,t)=>a(`div`,{className:`mem-log-line ${e.kind}`,children:e.text},t))}),(W===`review`||W===`saving`||W===`done`)&&q.length>0&&r(`div`,{className:`mem-review-section`,children:[a(`div`,{className:`mem-review-header`,children:`Review & Save`}),a(`div`,{className:`mem-review-list`,children:q.map((e,t)=>r(`label`,{className:`mem-review-item`,children:[a(`input`,{type:`checkbox`,checked:e._checked,disabled:W===`saving`||W===`done`,onChange:()=>{J(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),a(`span`,{className:`mem-review-content`,children:e.content}),a(`span`,{className:`mem-domain-badge ${St[e.domain]||`gray`}`,children:e.domain}),r(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),r(`div`,{className:`mem-review-actions`,children:[a(`button`,{className:`btn-primary`,disabled:W===`saving`||W===`done`||q.filter(e=>e._checked).length===0,onClick:Vr,children:W===`saving`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Saving...`]}):`Save Selected (${q.filter(e=>e._checked).length})`}),r(`span`,{className:`mem-review-select-links`,children:[a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>J(e=>e.map(e=>({...e,_checked:!0}))),children:`Select All`}),` / `,a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>J(e=>e.map(e=>({...e,_checked:!1}))),children:`None`})]})]})]}),W===`done`&&Vn!==null&&r(`div`,{className:`mem-profile-success`,children:[a(m,{size:14}),` Saved `,Vn,` insights to memory`]}),W===`review`&&q.length===0&&a(`div`,{className:`mem-profile-empty`,children:`No insights generated.`})]})]}),R===`goals`&&r(`div`,{className:`mem-goals-tab`,children:[a(`div`,{className:`mem-goals-stats-row`,children:[`queued`,`in_progress`,`completed`,`failed`].map(e=>r(`div`,{className:`mem-goals-stat-pill mem-goal-status-${e.replace(`_`,`-`)}`,children:[a(`span`,{className:`mem-goals-stat-n`,children:Cn?.goals[e]??0}),a(`span`,{className:`mem-goals-stat-label`,children:e.replace(`_`,` `)})]},e))}),xn.filter(e=>e.status===`pending_approval`).length>0&&r(`div`,{className:`mem-goals-approval-banner`,children:[r(`div`,{className:`mem-goals-approval-title`,children:[a(c,{size:14}),` Agent suggested `,xn.filter(e=>e.status===`pending_approval`).length,` goal(s) — review before execution`]}),xn.filter(e=>e.status===`pending_approval`).map(e=>r(`div`,{className:`mem-goals-approval-item`,children:[r(`div`,{className:`mem-goals-approval-text`,children:[a(`strong`,{children:e.title}),a(`span`,{children:e.description})]}),r(`div`,{className:`mem-goals-approval-actions`,children:[a(`button`,{className:`btn-danger-sm`,onClick:()=>vr(()=>de(e.id),`Couldn't reject the goal`),children:`Reject`}),a(`button`,{className:`btn-secondary`,onClick:()=>vr(()=>Be(e.id),`Couldn't accept the goal`),children:`Accept`})]})]},e.id))]}),a(`div`,{className:`mem-goals-toolbar`,children:r(`button`,{className:`btn-primary`,onClick:()=>Mn(e=>!e),children:[a(ze,{size:14}),` New Goal`]})}),jn&&r(`div`,{className:`mem-goals-add-form`,children:[a(`input`,{className:`mem-input`,placeholder:`Goal title`,value:Nn.title,onChange:e=>Pn(t=>({...t,title:e.target.value}))}),a(`textarea`,{className:`mem-input`,placeholder:`Description — what should the agent work toward?`,rows:2,value:Nn.description,onChange:e=>Pn(t=>({...t,description:e.target.value}))}),r(`div`,{className:`mem-goals-form-row`,children:[r(`select`,{className:`mem-select`,value:Nn.priority,onChange:e=>Pn(t=>({...t,priority:e.target.value})),children:[a(`option`,{value:`low`,children:`Low priority`}),a(`option`,{value:`medium`,children:`Medium priority`}),a(`option`,{value:`high`,children:`High priority`})]}),a(`button`,{className:`btn-primary`,onClick:()=>{Nn.title.trim()&&vr(async()=>{await Le(Nn),Pn({title:``,description:``,priority:`medium`}),Mn(!1)},`Couldn't create the goal`)},children:`Create`}),a(`button`,{className:`btn-secondary`,onClick:()=>Mn(!1),children:`Cancel`})]})]}),Tn?r(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),` Loading goals...`]}):xn.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).length===0?r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(at,{size:32})}),a(`p`,{children:`No goals yet. Create one or let the agent suggest goals in autonomous mode.`})]}):a(`div`,{className:`mem-goals-list`,children:xn.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).map(e=>r(`div`,{className:`mem-goal-card mem-goal-status-${e.status.replace(`_`,`-`)}`,children:[r(`div`,{className:`mem-goal-header`,role:`button`,tabIndex:0,"aria-expanded":Dn===e.id,onClick:()=>On(t=>t===e.id?null:e.id),onKeyDown:t=>{t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),On(t=>t===e.id?null:e.id))},children:[r(`div`,{className:`mem-goal-header-left`,children:[a(`span`,{className:`mem-goal-status-dot status-${e.status.replace(`_`,`-`)}`}),a(`span`,{className:`mem-goal-title`,children:e.title}),a(`span`,{className:`mem-goal-priority mem-priority-${e.priority}`,children:e.priority}),e.source!==`user`&&r(`span`,{className:`mem-goal-source-badge`,children:[a(c,{size:10}),` `,e.source.replace(`_`,` `)]})]}),r(`div`,{className:`mem-goal-header-right`,children:[r(`span`,{className:`mem-goal-task-count`,children:[a(_e,{size:12}),e.tasks.filter(e=>e.status===`completed`).length,`/`,e.tasks.length]}),e.status===`queued`&&a(`button`,{className:`mem-goal-action-btn mem-goal-cancel-btn`,onClick:t=>{t.stopPropagation(),vr(()=>Te(e.id),`Couldn't cancel the goal`)},children:`Cancel`}),kn===e.id?a(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn mem-goal-delete-confirm`,onClick:t=>{t.stopPropagation(),An(null),vr(()=>je(e.id),`Couldn't delete the goal`)},children:`Delete?`}):a(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn`,"aria-label":`Delete goal ${e.title}`,onClick:t=>{t.stopPropagation(),An(e.id)},children:a(oe,{size:12})}),a(Xe,{size:14,className:Dn===e.id?`mem-chevron-open`:``})]})]}),Dn===e.id&&r(`div`,{className:`mem-goal-body`,children:[e.description&&a(`p`,{className:`mem-goal-desc`,children:e.description}),e.progress_notes&&a(`p`,{className:`mem-goal-progress`,children:e.progress_notes}),e.tasks.length>0?a(`div`,{className:`mem-task-list`,children:e.tasks.map(e=>r(`div`,{className:`mem-task-row mem-task-status-${e.status}`,children:[a(`span`,{className:`mem-task-dot status-${e.status}`}),a(`span`,{className:`mem-task-desc`,children:e.description}),a(`span`,{className:`mem-task-status-label`,children:e.status}),e.result&&a(`span`,{className:`mem-task-result`,children:e.result})]},e.id))}):a(`p`,{className:`mem-goal-no-tasks`,children:`No tasks yet — the agent will break this down when it starts.`})]})]},e.id))})]})]}),Ft.length>0&&a(`div`,{className:`mem-toast-container`,"aria-live":`polite`,children:Ft.map(e=>r(`div`,{className:`mem-toast mem-toast-${e.type}`,role:`status`,children:[e.type===`success`&&a(m,{size:14}),e.type===`error`&&a(be,{size:14}),e.type===`info`&&a(Je,{size:14}),a(`span`,{children:e.text})]},e.id))})]})}export{Ct as MemoryDashboard};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{S as t,T as n,i as r,n as i,r as a,w as o}from"./apiBase-DRtaTd8u.js";import{n as s,t as c}from"./zap-BdhDcjhB.js";import{A as ee,Bt as te,C as ne,D as re,E as ie,F as ae,Ft as l,Gt as u,Ht as oe,I as se,It as ce,Jt as le,Kt as ue,L as de,Lt as fe,M as pe,N as me,O as he,P as ge,Qt as _e,R as d,Rt as f,S as ve,T as p,Ut as ye,Vt as be,W as xe,_ as Se,an as Ce,b as we,c as Te,d as Ee,dn as De,f as Oe,fn as ke,g as Ae,h as je,hn as m,j as Me,k as Ne,l as Pe,ln as Fe,m as Ie,p as Le,pn as Re,qt as ze,s as Be,t as Ve,u as He,un as Ue,v as We,vn as Ge,w as Ke,x as qe,xn as Je,y as Ye,yn as Xe,z as h}from"./index-BxdoiGm5.js";var g={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};g.node;var Ze=o(g),Qe={name:`chevron-left`,size:24,node:[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]};Qe.node;var $e=o(Qe),_={name:`git-merge`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]};_.node;var et=o(_),tt={name:`shield-off`,size:24,node:[[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`,key:`1jlk70`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`,key:`18rp1v`}]]};tt.node;var nt=o(tt),v={name:`shield`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]};v.node;var rt=o(v),it={name:`target`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]};it.node;var at=o(it),ot={name:`trending-up`,size:24,node:[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]};ot.node;var st=o(ot),ct={name:`user`,size:24,node:[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]};ct.node;var lt=o(ct),y=e(n(),1),ut=[{title:`Preferences`,categories:[`preference`]},{title:`About you`,categories:[`fact`,`profile`,`skill`]},{title:`Reminders`,categories:[`reminder`]},{title:`Notes`,categories:[`note`]}];function dt(e){switch(e){case`user`:return`You added this`;case`tool`:return`You asked GAIA to remember this`;case`llm_extract`:return`Picked up in a chat`;case`consolidation`:return`From an older chat`;case`inferred`:return`From your profile setup`;case`discovery`:return`Found on this PC during profile setup`;default:return`Saved`}}function ft(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=Math.floor((Date.now()-t.getTime())/864e5);return n<=0?`today`:n===1?`yesterday`:n<30?`${n} days ago`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`})}function pt(e,t=new Date){let n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e),r=n?new Date(+n[1],n[2]-1,+n[3]):new Date(e);if(Number.isNaN(r.getTime()))return null;let i=r.getHours()===0&&r.getMinutes()===0&&r.getSeconds()===0,a=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),o=i?r.getTime()<a:r.getTime()<t.getTime(),s=r.toLocaleString(void 0,{weekday:`short`,month:`short`,day:`numeric`,...r.getFullYear()===t.getFullYear()?{}:{year:`numeric`},...i?{}:{hour:`numeric`,minute:`2-digit`}});return{text:`${o?`Was due`:`Due`} ${s}`,past:o}}function mt({memoryEnabled:e,reloadKey:n,onChanged:o,onOpenAdvanced:s,showToast:c}){let[ee,ne]=(0,y.useState)(null),[re,ie]=(0,y.useState)(null),[ae,l]=(0,y.useState)(null),[u,se]=(0,y.useState)(``),[ce,ue]=(0,y.useState)([]),[de,fe]=(0,y.useState)(new Set),[pe,me]=(0,y.useState)(``),[he,ge]=(0,y.useState)(`fact`),[_e,d]=(0,y.useState)(null),f=(0,y.useRef)(0),p=(0,y.useCallback)(async()=>{let e=++f.current;try{let t=await ve({about_user:!0,include_sensitive:!0,sort_by:`updated_at`,order:`desc`,limit:200});if(e!==f.current)return;ne(t.items),ie(null)}catch(n){if(e!==f.current)return;t.system.warn(`Failed to load what GAIA knows about the user`,n),ie(n instanceof Error?n.message:String(n))}},[]);(0,y.useEffect)(()=>{p()},[p,n]);let ye=(0,y.useCallback)(async e=>{let n=u.trim();if(!n||n===e.content)l(null);else{d(e.id);try{await Se(e.id,{content:n}),l(null),c(`Updated`,`success`),await p(),o()}catch(e){t.system.error(`Failed to edit memory`,e),c(`Couldn't save the change: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}}},[u,p,o,c]),be=(0,y.useCallback)(async e=>{d(e.id);try{await Ae(e.id),f.current++,ne(t=>(t??[]).filter(t=>t.id!==e.id)),ue(t=>[e,...t]),o()}catch(e){t.system.error(`Failed to forget memory`,e),c(`Couldn't forget that: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}},[o,c]),xe=(0,y.useCallback)(async e=>{d(e.id);try{await Ie({content:e.content,category:e.category,domain:e.domain??void 0,context:e.context,entity:e.entity??void 0,sensitive:e.sensitive,due_at:e.due_at??void 0}),ue(t=>t.filter(t=>t.id!==e.id)),await p(),o()}catch(e){t.system.error(`Failed to restore memory`,e),c(`Couldn't restore it: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}},[p,o,c]),we=(0,y.useCallback)(async()=>{let e=pe.trim();if(e){d(`new`);try{await Ie({content:e,category:he}),me(``),c(`Saved`,`success`),await p(),o()}catch(e){t.system.error(`Failed to add memory`,e),c(`Couldn't save it: ${e instanceof Error?e.message:e}`,`error`)}finally{d(null)}}},[pe,he,p,o,c]);if(!e)return r(`div`,{className:`mem-about`,children:[a(`h2`,{className:`mem-about-title`,children:`What GAIA knows about you`}),r(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:`Memory is off, so GAIA isn't saving anything about you.`}),a(`button`,{className:`btn-secondary`,onClick:s,children:`Turn it on in Advanced`})]})]});let Te=ut.map(e=>({...e,rows:(ee??[]).filter(t=>e.categories.includes(t.category))})).filter(e=>e.rows.length>0);return r(`div`,{className:`mem-about`,children:[a(`h2`,{className:`mem-about-title`,children:`What GAIA knows about you`}),a(`p`,{className:`mem-about-intro`,children:`GAIA uses these in every chat. Edit anything that's wrong, or forget it so GAIA stops using it.`}),r(`form`,{className:`mem-about-add`,onSubmit:e=>{e.preventDefault(),we()},children:[a(`input`,{className:`mem-input`,placeholder:`Tell GAIA something about you, e.g. “I prefer short answers”`,"aria-label":`Something GAIA should know about you`,value:pe,onChange:e=>me(e.target.value)}),r(`select`,{className:`mem-select`,"aria-label":`Kind`,value:he,onChange:e=>ge(e.target.value),children:[a(`option`,{value:`fact`,children:`About you`}),a(`option`,{value:`preference`,children:`Preference`}),a(`option`,{value:`reminder`,children:`Reminder`}),a(`option`,{value:`note`,children:`Note`})]}),r(`button`,{className:`btn-primary`,type:`submit`,disabled:!pe.trim()||_e===`new`,children:[a(ze,{size:14}),` Add`]})]}),ce.map(e=>r(`div`,{className:`mem-about-forgotten`,role:`status`,children:[r(`span`,{children:[`Forgotten: `,e.sensitive?`a sensitive memory`:`“${e.content}”`,` — GAIA won't learn it again from old chats.`]}),r(`button`,{className:`mem-about-link`,disabled:_e===e.id,onClick:()=>xe(e),children:[a(te,{size:12}),` Undo`]})]},e.id)),re?r(`div`,{className:`mem-about-empty`,children:[r(`p`,{children:[`Couldn't load your memories: `,re]}),a(`button`,{className:`btn-secondary`,onClick:p,children:`Try again`})]}):ee===null?r(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),` Loading…`]}):Te.length===0?r(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:`GAIA hasn't saved anything about you yet.`}),a(`p`,{className:`mem-about-hint`,children:`Tell it in a chat (“remember that I live in Calgary”) or add something above.`})]}):Te.map(e=>r(`section`,{className:`mem-about-group`,"aria-label":e.title,children:[a(`h3`,{className:`mem-about-group-title`,children:e.title}),a(`ul`,{className:`mem-about-list`,children:e.rows.map(e=>{let t=e.sensitive&&!de.has(e.id),n=e.due_at?pt(e.due_at):null;return a(`li`,{className:`mem-about-item`,children:ae===e.id?r(`form`,{className:`mem-about-edit`,onSubmit:t=>{t.preventDefault(),ye(e)},children:[a(`textarea`,{className:`mem-input`,"aria-label":`Edit memory`,rows:2,autoFocus:!0,value:u,onChange:e=>se(e.target.value),onKeyDown:t=>{t.key===`Escape`&&(t.stopPropagation(),l(null)),t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),ye(e))}}),r(`div`,{className:`mem-about-edit-actions`,children:[a(`button`,{className:`btn-primary`,type:`submit`,disabled:_e===e.id,children:`Save`}),a(`button`,{className:`btn-secondary`,type:`button`,onClick:()=>l(null),children:`Cancel`})]})]}):r(i.Fragment,{children:[r(`div`,{className:`mem-about-text`,children:[t?r(`button`,{className:`mem-about-link`,onClick:()=>fe(t=>new Set(t).add(e.id)),children:[a(Ce,{size:12}),` Sensitive — show`]}):e.content,n&&a(`span`,{className:`mem-about-due${n.past?` is-overdue`:``}`,children:n.text}),r(`span`,{className:`mem-about-meta`,children:[dt(e.source),` · `,ft(e.updated_at)]})]}),r(`div`,{className:`mem-about-actions`,children:[a(`button`,{className:`mem-about-btn`,"aria-label":`Edit: ${t?`sensitive memory`:e.content}`,title:`Edit`,onClick:()=>{l(e.id),se(e.content)},children:a(le,{size:14})}),r(`button`,{className:`mem-about-btn mem-about-btn-remove`,"aria-label":`Forget: ${t?`sensitive memory`:e.content}`,title:`Forget`,disabled:_e===e.id,onClick:()=>be(e),children:[a(oe,{size:14}),` Forget`]})]})]})},e.id)})})]},e.title))]})}function b(e){if(!e)return`—`;try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n={month:`short`,day:`numeric`};return t.getFullYear()!==new Date().getFullYear()&&(n.year=`numeric`),t.toLocaleDateString(void 0,n)}catch{return`—`}}function x(e){if(!e)return``;try{let t=new Date(e);return isNaN(t.getTime())?``:t.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}catch{return``}}function S(e){if(!e)return`—`;try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n=Date.now(),r=t.getTime()-n,i=Math.abs(r),a=Math.floor(i/1e3),o=Math.floor(i/6e4),s=Math.floor(i/36e5),c=Math.floor(i/864e5);return r<0?a<5?`just now`:a<60?`${a}s ago`:s===0?`${o}m ago`:c===0?`${s}h ago`:c===1?`yesterday`:c<30?`${c}d ago`:x(e):a<5?`now`:a<60?`in ${a}s`:s===0?`in ${o}m`:c===0?`in ${s}h`:c===1?`tomorrow`:c<30?`in ${c}d`:x(e)}catch{return`—`}}function ht(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function gt(e){try{return new Date(e).getTime()<Date.now()}catch{return!1}}function _t(e){return e>=.7?`high`:e>=.4?`medium`:`low`}function vt(e){return e>=.9?`high`:e>=.7?`medium`:`low`}function yt(e,t){let n=b(e),r=b(t);return n===`—`&&r===`—`?``:n===r?n:`${n} \u2013 ${r}`}function bt(e){if(e.length===0)return 0;let t=new Date().toISOString().slice(0,10),n=e.find(e=>e.date===t);return n?n.knowledge_added:0}var xt=[`fact`,`preference`,`error`,`skill`,`note`,`reminder`],St={work:`blue`,technical:`purple`,personal:`green`,general:`gray`};function Ct(){let{setShowMemoryDashboard:e,sessions:n,setCurrentSession:o}=ce(),te=(0,y.useMemo)(()=>new Map(n.map(e=>[e.id,e.title])),[n]),Ce=e=>te.get(e)||`${e.slice(0,8)}...`,[g,Qe]=(0,y.useState)(null),[_,tt]=(0,y.useState)([]),[v,it]=(0,y.useState)(null),[ot,ct]=(0,y.useState)([]),[ut,dt]=(0,y.useState)([]),[ft,pt]=(0,y.useState)([]),[b,Ct]=(0,y.useState)(null),[wt,Tt]=(0,y.useState)([]),[Et,Dt]=(0,y.useState)(!0),[Ot,kt]=(0,y.useState)(null),[At,jt]=(0,y.useState)(null),[Mt,C]=(0,y.useState)(!1),[Nt,Pt]=(0,y.useState)(null),[Ft,It]=(0,y.useState)([]),Lt=(0,y.useRef)(0),[w,Rt]=(0,y.useState)([]),[zt,Bt]=(0,y.useState)(``),[Vt,Ht]=(0,y.useState)(``),[Ut,Wt]=(0,y.useState)(``),[T,Gt]=(0,y.useState)(`updated_at`),[Kt,qt]=(0,y.useState)(`desc`),[E,D]=(0,y.useState)(0),[Jt,Yt]=(0,y.useState)(!1),[Xt,Zt]=(0,y.useState)(``),[Qt,$t]=(0,y.useState)(null),en=(0,y.useRef)(null),[O,tn]=(0,y.useState)(null),[nn,rn]=(0,y.useState)(!1),[k,an]=(0,y.useState)(null),[A,j]=(0,y.useState)({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),[on,sn]=(0,y.useState)(new Set),[M,cn]=(0,y.useState)(!1),[ln,un]=(0,y.useState)(!1),[dn,fn]=(0,y.useState)(!1),[N,P]=(0,y.useState)(!1),[pn,mn]=(0,y.useState)(!1),[F,hn]=(0,y.useState)(null),[gn,_n]=(0,y.useState)(!1),[I,L]=(0,y.useState)(null),[R,vn]=(0,y.useState)(`about`),[yn,bn]=(0,y.useState)(0),[xn,Sn]=(0,y.useState)([]),[Cn,wn]=(0,y.useState)(null),[Tn,En]=(0,y.useState)(!1),[Dn,On]=(0,y.useState)(null),[kn,An]=(0,y.useState)(null),[jn,Mn]=(0,y.useState)(!1),[Nn,Pn]=(0,y.useState)({title:``,description:``,priority:`medium`}),[z,B]=(0,y.useState)(`idle`),[Fn,V]=(0,y.useState)([]),[H,U]=(0,y.useState)([]),[In,Ln]=(0,y.useState)(null),Rn=(0,y.useRef)(null),zn=(0,y.useRef)(null),[W,G]=(0,y.useState)(`idle`),[Bn,K]=(0,y.useState)([]),[q,J]=(0,y.useState)([]),[Vn,Hn]=(0,y.useState)(null),[Un,Wn]=(0,y.useState)(!1),Gn=(0,y.useRef)(null),Kn=(0,y.useRef)(null),[qn,Jn]=(0,y.useState)(30),[Yn,Xn]=(0,y.useState)(!1),[Zn,Qn]=(0,y.useState)(!1),[$n,er]=(0,y.useState)(!1),[tr,nr]=(0,y.useState)(!1),[rr,ir]=(0,y.useState)(!1),[ar,or]=(0,y.useState)(!1),sr=(0,y.useRef)(null),cr=(0,y.useRef)(null),lr=(0,y.useRef)(null),Y=(0,y.useCallback)((e,t=`info`)=>{let n=++Lt.current;It(r=>[...r,{id:n,text:e,type:t}]),setTimeout(()=>{It(e=>e.filter(e=>e.id!==n))},4e3)},[]);(0,y.useEffect)(()=>{if(!Mt)return;let e=e=>{cr.current&&!cr.current.contains(e.target)&&C(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[Mt]),l(!0,()=>{I?L(null):pn?mn(!1):gn?_n(!1):O?tn(null):Mt?C(!1):nn||k?(rn(!1),an(null)):Nt?Pt(null):e(!1)}),xe(lr,!!I),(0,y.useEffect)(()=>{if(!I)return;let e=lr.current;if(!e)return;let t=document.activeElement;return e.focus(),()=>{t?.focus()}},[I]);let ur=(0,y.useCallback)(async()=>{try{let e=await ie();Qe(e)}catch(e){t.system.warn(`Failed to load memory stats`,e)}},[]),dr=(0,y.useCallback)(async()=>{try{let e=await ne(qn);tt(e)}catch(e){t.system.warn(`Failed to load memory activity`,e)}},[qn]),X=(0,y.useCallback)(async()=>{try{let e=await ve({category:w.length>0?w:void 0,context:zt||void 0,entity:Vt||void 0,search:Ut||void 0,sort_by:T,order:Kt,offset:E,limit:15,include_sensitive:!0,include_superseded:Jt});it(e)}catch(e){t.system.warn(`Failed to load knowledge`,e)}},[w,zt,Vt,Ut,T,Kt,E,Jt]),fr=(0,y.useCallback)(async()=>{try{let e=await re();ct(e)}catch(e){t.system.warn(`Failed to load tool summary`,e)}},[]),pr=(0,y.useCallback)(async()=>{try{let e=await Ke(20);dt(e)}catch(e){t.system.warn(`Failed to load conversations`,e)}},[]),mr=(0,y.useCallback)(async()=>{try{let e=await he(7);pt(e)}catch(e){t.system.warn(`Failed to load upcoming items`,e)}},[]),Z=(0,y.useCallback)(async()=>{try{let e=await Ye();Ct(e)}catch(e){t.system.warn(`Failed to load embedding coverage`,e)}},[]),hr=(0,y.useCallback)(async()=>{try{let e=await we();Tt(e||[])}catch(e){t.system.warn(`Failed to load entities`,e)}},[]),gr=(0,y.useCallback)(async()=>{try{let e=await p();un(e.mcp_memory_enabled),cn(e.memory_enabled),fn(e.system_discovery_consent)}catch(e){t.system.warn(`Failed to load memory settings`,e)}},[]),_r=(0,y.useCallback)(async()=>{En(!0);try{let[e,t]=await Promise.all([Ne(),qe()]);Sn(e.goals),wn(t)}catch(e){t.system.warn(`Failed to load goals`,e)}finally{En(!1)}},[]),vr=(0,y.useCallback)(async(e,n)=>{try{await e()}catch(e){t.system.error(n,e),Y(`${n}: ${e instanceof Error?e.message:e}`,`error`);return}_r()},[_r,Y]);(0,y.useEffect)(()=>{if(!kn)return;let e=setTimeout(()=>An(null),3e3);return()=>clearTimeout(e)},[kn]);let Q=(0,y.useCallback)(async()=>{Dt(!0),kt(null);try{await Promise.all([ur(),dr(),X(),fr(),pr(),mr(),Z(),hr(),gr(),_r()]),bn(e=>e+1)}catch(e){kt(`Failed to load memory data. Is the backend running?`),t.system.error(`Memory dashboard load failed`,e)}finally{Dt(!1)}},[ur,dr,X,fr,pr,mr,Z,hr,gr,_r]);(0,y.useEffect)(()=>{Q()},[Q]),(0,y.useEffect)(()=>{X()},[X]);let yr=(0,y.useRef)(!0);(0,y.useEffect)(()=>{yr.current?yr.current=!1:dr()},[dr]);let br=(0,y.useCallback)(e=>{Wt(e),or(!0),sr.current&&clearTimeout(sr.current),sr.current=setTimeout(()=>{D(0),or(!1)},300)},[]),xr=(0,y.useCallback)(()=>{X(),ur(),Z(),mr(),hr()},[X,ur,Z,mr,hr]),$=(0,y.useCallback)(()=>{xr(),bn(e=>e+1)},[xr]),Sr=(0,y.useCallback)(async()=>{if(A.content.trim())try{let e=await Ie({content:A.content,category:A.category,domain:A.domain||void 0,context:A.context,entity:A.entity||void 0,sensitive:A.sensitive,due_at:A.due_at||void 0});rn(!1),j({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),t.ui.info(`Created new knowledge entry`),e?.embedded===!1?Y(e.embed_error??`Saved, but not embedded`,`error`):Y(`Memory created successfully`,`success`)}catch(e){t.system.error(`Failed to create knowledge`,e),Y(`Failed to create memory`,`error`)}},[A,$,Y]),Cr=(0,y.useCallback)(async()=>{if(k&&A.content.trim())try{let e=await Se(k,{content:A.content,category:A.category,domain:A.domain||void 0,context:A.context,entity:A.entity||void 0,sensitive:A.sensitive,due_at:A.due_at||void 0});an(null),j({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),t.ui.info(`Updated knowledge ${k}`),e?.embedded===!1?Y(e.embed_error??`Saved, but not embedded`,`error`):Y(`Memory updated`,`success`)}catch(e){t.system.error(`Failed to update knowledge`,e),Y(`Failed to update memory`,`error`)}},[k,A,$,Y]),wr=(0,y.useCallback)(async e=>{if(F!==e)hn(e);else{hn(null);try{await Ae(e),$(),t.ui.info(`Deleted knowledge ${e}`),Y(`Memory deleted`,`info`)}catch(e){t.system.error(`Failed to delete knowledge`,e),Y(`Failed to delete memory`,`error`)}}},[F,$,Y]);(0,y.useEffect)(()=>{if(!F)return;let e=setTimeout(()=>hn(null),3e3);return()=>clearTimeout(e)},[F]);let Tr=(0,y.useCallback)(async e=>{try{await Se(e.id,{sensitive:!e.sensitive}),X(),t.ui.info(`Toggled sensitive for ${e.id}: ${!e.sensitive}`),Y(e.sensitive?`Unmarked as sensitive`:`Marked as sensitive`,`info`)}catch(e){t.system.error(`Failed to toggle sensitive`,e),Y(`Failed to toggle sensitive flag`,`error`)}},[X,Y]),Er=(0,y.useCallback)(e=>{an(e.id),rn(!1),j({content:e.content,category:e.category,domain:e.domain||``,context:e.context,entity:e.entity||``,sensitive:e.sensitive,due_at:e.due_at||``})},[]),Dr=(0,y.useCallback)(e=>{navigator.clipboard.writeText(e).catch(()=>{}),t.ui.info(`Copied knowledge ID: ${e}`),Y(`ID copied to clipboard`,`info`)},[Y]),Or=(0,y.useCallback)(e=>{Zt(e),en.current&&clearTimeout(en.current),e.trim()?en.current=setTimeout(async()=>{try{let t=await d(e.trim(),20);$t(t)}catch(e){t.system.warn(`Conversation search failed`,e)}},300):$t(null)},[]),kr=(0,y.useCallback)(async e=>{try{let t=await We(e);tn({sessionId:e,turns:t})}catch(e){t.system.error(`Failed to load conversation detail`,e)}},[]),Ar=(0,y.useCallback)(e=>{Rt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),D(0)},[]),jr=(0,y.useCallback)(e=>{T===e?qt(e=>e===`desc`?`asc`:`desc`):(Gt(e),qt(`desc`)),D(0)},[T]),Mr=(0,y.useCallback)(async()=>{Xn(!0),C(!1);try{let e=await Oe();await Q(),Y(`Consolidated ${e.consolidated??0} sessions, extracted ${e.extracted_items??0} items`,`success`)}catch(e){t.system.error(`Failed to consolidate sessions`,e),Y(`Failed to consolidate sessions`,`error`)}finally{Xn(!1)}},[Q,Y]),Nr=(0,y.useCallback)(async()=>{Qn(!0),C(!1);try{let e=await pe();await Z(),Y(`Backfilled ${e.backfilled??0} embeddings${e.total_without?` (${e.total_without} were missing)`:``}`,`success`)}catch(e){t.system.error(`Failed to rebuild embeddings`,e),Y(`Failed to rebuild embeddings`,`error`)}finally{Qn(!1)}},[Z,Y]),Pr=(0,y.useCallback)(async()=>{er(!0),C(!1);try{let e=await ge();await Q(),Y(`Checked ${e.pairs_checked??0} pairs: ${e.reinforced??0} reinforced, ${e.contradicted??0} contradicted`,`success`)}catch(e){t.system.error(`Failed to reconcile memory`,e),Y(`Failed to reconcile memory`,`error`)}finally{er(!1)}},[Q,Y]),Fr=(0,y.useCallback)(async()=>{nr(!0),C(!1);try{await me(),await Q(),Y(`FTS indexes rebuilt successfully`,`success`)}catch(e){t.system.error(`Failed to rebuild FTS index`,e),Y(`Failed to rebuild FTS indexes`,`error`)}finally{nr(!1)}},[Q,Y]),Ir=(0,y.useCallback)(async()=>{ir(!0),C(!1);try{let e=await ae();await Q(),e.skipped?Y(`System context collection is disabled — enable it in settings`,`error`):Y(`System context refreshed: ${e.stored} facts updated`,`success`)}catch(e){t.system.error(`Failed to refresh system context`,e),Y(`Failed to refresh system context`,`error`)}finally{ir(!1)}},[Q,Y]),Lr=Yn||Zn||$n||tr||rr,Rr=(0,y.useCallback)(()=>{B(`running`),V([]),U([]),Ln(null);let e=ee();zn.current=e,e.onmessage=t=>{try{let n=JSON.parse(t.data);if(n.type===`log`)V(e=>[...e,{text:n.message,kind:`log`}]);else if(n.type===`finding`){let e=n.item;V(t=>[...t,{text:` Found: ${e.content}`,kind:`finding`}]),U(t=>[...t,{...e,_checked:!0}])}else n.type===`error`?V(e=>[...e,{text:` Error: ${n.message}`,kind:`error`}]):n.type===`done`&&(e.close(),zn.current=null,V(e=>[...e,{text:`Done. ${n.total??0} items discovered.`,kind:`log`}]),B(`review`))}catch{V(e=>[...e,{text:`Failed to parse event data.`,kind:`error`}])}},e.onerror=()=>{e.close(),zn.current=null,V(e=>[...e,{text:`Connection error. Is the GAIA server running?`,kind:`error`}]),U(e=>(B(e.length>0?`review`:`idle`),e))}},[]),zr=(0,y.useCallback)(async()=>{let e=H.filter(e=>e._checked);if(e.length!==0){B(`saving`);try{let t=e.map(({_checked:e,...t})=>t),n=await He(t);Ln(n.stored),B(`done`),$(),Y(`Saved ${n.stored} items to memory`,`success`)}catch(e){t.system.error(`Failed to commit discovery items`,e),Y(`Failed to save discovery items`,`error`),B(`review`)}}},[H,$,Y]),Br=(0,y.useCallback)(()=>{G(`running`),K([]),J([]),Hn(null);let e=Me(Un);Kn.current=e,e.onmessage=t=>{try{let n=JSON.parse(t.data);if(n.type===`log`)K(e=>[...e,{text:n.message,kind:`log`}]);else if(n.type===`insight`){let e=n.item;K(t=>[...t,{text:` Insight: ${e.content}`,kind:`finding`}]),J(t=>[...t,{...e,_checked:!0}])}else n.type===`error`?K(e=>[...e,{text:` Error: ${n.message}`,kind:`error`}]):n.type===`done`&&(e.close(),Kn.current=null,K(e=>[...e,{text:`Done. ${n.total??0} insights generated.`,kind:`log`}]),G(`review`))}catch{K(e=>[...e,{text:`Failed to parse event data.`,kind:`error`}])}},e.onerror=()=>{e.close(),Kn.current=null,K(e=>[...e,{text:`Connection error. Is Lemonade Server running?`,kind:`error`}]),J(e=>(G(e.length>0?`review`:`idle`),e))}},[Un]),Vr=(0,y.useCallback)(async()=>{let e=q.filter(e=>e._checked);if(e.length!==0){G(`saving`);try{let t=e.map(({_checked:e,...t})=>t),n=await Ee(t);Hn(n.stored),G(`done`),$(),Y(`Saved ${n.stored} insights to memory`,`success`)}catch(e){t.system.error(`Failed to commit inference insights`,e),Y(`Failed to save inference insights`,`error`),G(`review`)}}},[q,$,Y]);(0,y.useEffect)(()=>{Rn.current&&(Rn.current.scrollTop=Rn.current.scrollHeight)},[Fn]),(0,y.useEffect)(()=>{Gn.current&&(Gn.current.scrollTop=Gn.current.scrollHeight)},[Bn]),(0,y.useEffect)(()=>()=>{zn.current&&=(zn.current.close(),null),Kn.current&&=(Kn.current.close(),null)},[]);let Hr=e=>T===e?a(`span`,{className:`mem-sort-arrow`,children:Kt===`desc`?`↓`:`↑`}):null,Ur=Math.max(1,..._.map(e=>e.conversations+e.tool_calls+e.knowledge_added+e.errors)),Wr=g?.knowledge?.by_context?Object.keys(g.knowledge.by_context):[];return r(`div`,{className:`memory-dashboard-page`,children:[r(`div`,{className:`memory-dashboard-header`,children:[r(`div`,{className:`memory-dashboard-header-left`,children:[a(`button`,{className:`btn-icon settings-back-btn`,onClick:()=>e(!1),"aria-label":`Back`,children:a(Ze,{size:18})}),r(`h1`,{children:[`Memory `,a(`span`,{style:{fontSize:11,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`2px 8px`,borderRadius:4,marginLeft:8,verticalAlign:`middle`,letterSpacing:`0.5px`},children:`BETA`})]})]}),r(`div`,{className:`memory-dashboard-header-actions`,children:[R===`advanced`&&r(i.Fragment,{children:[b&&b.total_items>0&&r(`div`,{className:`mem-embedding-coverage`,title:`${b.with_embedding} of ${b.total_items} entries embedded`,children:[a(`div`,{className:`mem-embedding-bar`,children:a(`div`,{className:`mem-embedding-fill`,style:{width:`${Math.round(b.coverage_pct)}%`}})}),r(`span`,{className:`mem-embedding-label`,children:[Math.round(b.coverage_pct),`% embedded`]})]}),r(`div`,{className:`mem-maintenance-wrap`,ref:cr,children:[r(`button`,{className:`btn-icon ${Lr?`mem-spinning`:``}`,onClick:()=>C(e=>!e),title:`Maintenance actions`,"aria-label":`Maintenance actions`,"aria-expanded":Mt,children:[Lr?a(`div`,{className:`mem-spinner-sm`}):a(Fe,{size:16}),a(Xe,{size:10,style:{marginLeft:2}})]}),Mt&&r(`div`,{className:`mem-maintenance-menu`,role:`menu`,children:[r(`button`,{className:`mem-maintenance-item`,onClick:Mr,disabled:Yn,role:`menuitem`,children:[a(et,{size:14}),Yn?`Consolidating...`:`Consolidate Sessions`]}),r(`button`,{className:`mem-maintenance-item`,onClick:Nr,disabled:Zn,role:`menuitem`,children:[a(c,{size:14}),Zn?`Rebuilding...`:`Rebuild Embeddings`]}),r(`button`,{className:`mem-maintenance-item`,onClick:Pr,disabled:$n,role:`menuitem`,children:[a(m,{size:14}),$n?`Reconciling...`:`Reconcile Memory`]}),a(`div`,{className:`mem-maintenance-divider`}),r(`button`,{className:`mem-maintenance-item`,onClick:Ir,disabled:rr,role:`menuitem`,children:[a(ue,{size:14}),rr?`Refreshing...`:`Refresh System Context`]}),a(`div`,{className:`mem-maintenance-divider`}),r(`button`,{className:`mem-maintenance-item`,onClick:Fr,disabled:tr,role:`menuitem`,children:[a(u,{size:14}),tr?`Rebuilding...`:`Rebuild FTS Indexes`]})]})]})]}),a(`button`,{className:`btn-icon`,onClick:Q,title:`Refresh`,"aria-label":`Refresh dashboard`,children:a(ue,{size:16})})]})]}),r(`div`,{className:`mem-tab-bar`,role:`tablist`,children:[r(`button`,{className:`mem-tab-btn${R===`about`?` mem-tab-active`:``}`,onClick:()=>vn(`about`),role:`tab`,"aria-selected":R===`about`,children:[a(lt,{size:14}),` About you`]}),r(`button`,{className:`mem-tab-btn${R===`goals`?` mem-tab-active`:``}`,onClick:()=>{vn(`goals`),_r()},role:`tab`,"aria-selected":R===`goals`,children:[a(at,{size:14}),` Goals`,Cn&&(Cn.goals.pending_approval??0)>0&&a(`span`,{className:`mem-tab-badge`,children:Cn.goals.pending_approval})]}),r(`button`,{className:`mem-tab-btn${R===`profile`?` mem-tab-active`:``}`,onClick:()=>vn(`profile`),role:`tab`,"aria-selected":R===`profile`,children:[a(ye,{size:14}),` Profile setup`]}),r(`button`,{className:`mem-tab-btn${R===`advanced`?` mem-tab-active`:``}`,onClick:()=>vn(`advanced`),role:`tab`,"aria-selected":R===`advanced`,children:[a(Je,{size:14}),` Advanced`]})]}),r(`div`,{className:`memory-dashboard-body`,children:[R===`about`&&a(mt,{memoryEnabled:M,reloadKey:yn,onChanged:xr,onOpenAdvanced:()=>vn(`advanced`),showToast:Y}),R===`advanced`&&a(i.Fragment,{children:Et&&!g?r(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),`Loading memory data...`]}):Ot?r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(be,{size:32})}),a(`p`,{children:Ot}),r(`button`,{className:`btn-secondary`,onClick:Q,style:{marginTop:12},children:[a(ue,{size:14}),` Retry`]})]}):r(i.Fragment,{children:[!M&&r(`div`,{className:`mem-empty-state`,style:{margin:`40px 0`},children:[a(`div`,{className:`mem-empty-icon`,style:{opacity:.5},children:a(rt,{size:32})}),a(`p`,{style:{color:`var(--text-secondary)`,fontSize:14},children:`Memory is off. Turn it on in Settings below to let GAIA remember what you tell it.`})]}),M&&r(i.Fragment,{children:[g?.embedding_error&&r(`div`,{className:`mem-advanced-error`,role:`alert`,children:[a(be,{size:14}),` `,g.embedding_error]}),r(`div`,{className:`mem-stat-cards`,children:[r(`div`,{className:`mem-stat-card`,"data-accent":`purple`,children:[a(`div`,{className:`mem-stat-value`,children:g?.knowledge?.total??0}),a(`div`,{className:`mem-stat-label`,children:`Stored`}),a(`div`,{className:`mem-stat-sub`,children:(()=>{let e=bt(_);return e>0?`+${e} today`:g?.knowledge?.by_category?Object.entries(g.knowledge.by_category).slice(0,3).map(([e,t])=>`${t} ${e}${t===1?``:`s`}`).join(`, `):`No entries`})()})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`gold`,children:[a(`div`,{className:`mem-stat-value`,children:g?.knowledge?.total_retrievals??0}),a(`div`,{className:`mem-stat-label`,children:`Retrieved`}),a(`div`,{className:`mem-stat-sub`,children:g?.knowledge?.total&&g?.knowledge?.total_retrievals?`avg ${(g.knowledge.total_retrievals/g.knowledge.total).toFixed(1)}x per memory`:`No recalls yet`})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`blue`,children:[a(`div`,{className:`mem-stat-value`,children:g?.conversations?.total_sessions??0}),a(`div`,{className:`mem-stat-label`,children:`Sessions`}),a(`div`,{className:`mem-stat-sub`,children:yt(g?.conversations?.first_session??null,g?.conversations?.last_session??null)||`${g?.conversations?.total_turns??0} total turns`})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`green`,children:[a(`div`,{className:`mem-stat-value`,children:g?.tools?.total_calls??0}),a(`div`,{className:`mem-stat-label`,children:`Tool Calls`}),r(`div`,{className:`mem-stat-sub`,title:`Memory tools (remember, recall, ...) are not logged`,children:[g?.tools?.unique_tools??0,` tools, excl. memory`]})]}),r(`div`,{className:`mem-stat-card`,"data-accent":`red`,children:[a(`div`,{className:`mem-stat-value`,children:g?.tools?.overall_success_rate!=null&&(g.tools.total_calls??0)>0?`${Math.round(g.tools.overall_success_rate*100)}%`:`—`}),a(`div`,{className:`mem-stat-label`,children:`Success Rate`}),a(`div`,{className:`mem-stat-sub`,children:(g?.tools?.total_calls??0)>0?`${g?.tools?.total_errors??0} errors`:`No tool calls yet`})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title mem-section-title-row`,children:[r(`span`,{className:`mem-section-title-left`,children:[a(st,{size:14}),` Activity`]}),a(`div`,{className:`mem-range-tabs`,role:`group`,"aria-label":`Activity range`,children:[1,7,30].map(e=>a(`button`,{className:`mem-range-tab${qn===e?` active`:``}`,onClick:()=>Jn(e),children:e===1?`1D`:e===7?`7D`:`30D`},e))})]}),_.length>0?r(i.Fragment,{children:[a(`div`,{className:`mem-activity-chart`,children:_.map((e,t)=>{let n=e.conversations+e.tool_calls+e.knowledge_added+e.errors,o=t===0||t===_.length-1||t%7==0,s=new Date(e.date+`T00:00:00`).toLocaleDateString(void 0,{month:`short`,day:`numeric`});return r(`div`,{className:`mem-activity-bar-group`,onMouseEnter:()=>jt(t),onMouseLeave:()=>jt(null),children:[e.errors>0&&a(`div`,{className:`mem-activity-bar errors`,style:{height:`${e.errors/Ur*100}%`}}),e.knowledge_added>0&&a(`div`,{className:`mem-activity-bar knowledge`,style:{height:`${e.knowledge_added/Ur*100}%`}}),e.tool_calls>0&&a(`div`,{className:`mem-activity-bar tool_calls`,style:{height:`${e.tool_calls/Ur*100}%`}}),e.conversations>0&&a(`div`,{className:`mem-activity-bar conversations`,style:{height:`${e.conversations/Ur*100}%`}}),o&&a(`span`,{className:`mem-activity-date-label`,children:s}),At===t&&n>0&&r(`div`,{className:`mem-activity-tooltip`,children:[a(`strong`,{children:s}),a(`br`,{}),e.conversations>0&&r(i.Fragment,{children:[e.conversations,` conversations`,a(`br`,{})]}),e.tool_calls>0&&r(i.Fragment,{children:[e.tool_calls,` tool calls`,a(`br`,{})]}),e.knowledge_added>0&&r(i.Fragment,{children:[e.knowledge_added,` learned`,a(`br`,{})]}),e.errors>0&&r(i.Fragment,{children:[e.errors,` errors`]})]})]},e.date)})}),r(`div`,{className:`mem-activity-legend`,children:[r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot conversations`}),` Conversations`]}),r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot tool_calls`}),` Tool Calls`]}),r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot knowledge`}),` Knowledge`]}),r(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot errors`}),` Errors`]})]})]}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(st,{size:28})}),a(`p`,{children:`No activity data yet`})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title mem-section-title-row`,children:[r(`span`,{className:`mem-section-title-left`,children:[a(Je,{size:14}),` Knowledge Browser`,v&&v.total>0&&a(`span`,{className:`mem-section-count`,children:v.total})]}),!nn&&!k&&r(`button`,{className:`mem-section-add-btn`,onClick:()=>rn(!0),title:`Add a memory entry`,children:[a(ze,{size:13}),` Add`]})]}),r(`div`,{className:`mem-filters`,children:[r(`div`,{className:`mem-category-pills`,role:`group`,"aria-label":`Filter by category`,children:[xt.map(e=>a(`button`,{className:`mem-category-pill ${e}${w.includes(e)?` active`:``}`,onClick:()=>Ar(e),"aria-pressed":w.includes(e),children:e},e)),w.length>0&&a(`button`,{className:`mem-category-pill clear`,onClick:()=>{Rt([]),D(0)},"aria-label":`Clear category filters`,children:`✕ Clear`})]}),r(`select`,{className:`mem-filter-select`,value:zt,onChange:e=>{Bt(e.target.value),D(0)},"aria-label":`Filter by context`,children:[a(`option`,{value:``,children:`All Contexts`}),Wr.map(e=>a(`option`,{value:e,children:e},e))]}),r(`select`,{className:`mem-filter-select`,value:Vt,onChange:e=>{Ht(e.target.value),D(0)},"aria-label":`Filter by entity`,children:[a(`option`,{value:``,children:`All Entities`}),wt.map(e=>r(`option`,{value:e.entity,children:[e.entity,` (`,e.count,`)`]},e.entity))]}),r(`div`,{className:`mem-filter-search-wrap`,children:[ar?a(`div`,{className:`mem-spinner-sm search-icon`,style:{width:12,height:12,borderWidth:1.5}}):a(u,{size:13,className:`search-icon`}),a(`input`,{className:`mem-filter-search`,type:`text`,placeholder:`Search memories...`,value:Ut,onChange:e=>br(e.target.value),"aria-label":`Search memories`})]}),r(`label`,{className:`mem-filter-toggle`,title:`Show entries that have been superseded by newer versions`,children:[a(`input`,{type:`checkbox`,checked:Jt,onChange:e=>Yt(e.target.checked)}),a(`span`,{children:`Superseded`})]})]}),(nn||k)&&r(`div`,{className:`mem-inline-form`,children:[r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Content`}),a(`textarea`,{value:A.content,onChange:e=>j(t=>({...t,content:e.target.value})),placeholder:`What should the agent remember?`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Category`}),a(`select`,{value:A.category,onChange:e=>j(t=>({...t,category:e.target.value})),children:xt.map(e=>a(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Context`}),a(`input`,{type:`text`,value:A.context,onChange:e=>j(t=>({...t,context:e.target.value})),placeholder:`global`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Domain`}),a(`input`,{type:`text`,value:A.domain,onChange:e=>j(t=>({...t,domain:e.target.value})),placeholder:`e.g., python, frontend`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Entity`}),a(`input`,{type:`text`,value:A.entity,onChange:e=>j(t=>({...t,entity:e.target.value})),placeholder:`e.g., person:sarah_chen`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Due At`}),a(`input`,{type:`text`,value:A.due_at,onChange:e=>j(t=>({...t,due_at:e.target.value})),placeholder:`ISO 8601 (e.g., 2026-03-25T09:00:00-07:00)`})]}),r(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:`Sensitive`}),r(`label`,{style:{display:`flex`,alignItems:`center`,gap:6,cursor:`pointer`,fontSize:12},children:[a(`input`,{type:`checkbox`,checked:A.sensitive,onChange:e=>j(t=>({...t,sensitive:e.target.checked}))}),`Mark as sensitive (excluded from system prompt)`]})]}),r(`div`,{className:`mem-inline-form-actions`,children:[a(`button`,{className:`btn-secondary`,onClick:()=>{rn(!1),an(null)},children:`Cancel`}),a(`button`,{className:`btn-primary`,onClick:k?Cr:Sr,style:{padding:`8px 20px`,fontSize:13},children:k?`Update`:`Save`})]})]}),v&&v.items.length>0?r(i.Fragment,{children:[a(`div`,{style:{overflowX:`auto`},children:r(`table`,{className:`mem-knowledge-table`,children:[a(`thead`,{children:r(`tr`,{children:[r(`th`,{onClick:()=>jr(`category`),className:T===`category`?`sorted`:``,children:[`Category`,Hr(`category`)]}),a(`th`,{children:`Content`}),r(`th`,{onClick:()=>jr(`context`),className:T===`context`?`sorted`:``,children:[`Context`,Hr(`context`)]}),a(`th`,{children:`Entity`}),r(`th`,{onClick:()=>jr(`confidence`),className:T===`confidence`?`sorted`:``,children:[`Confidence`,Hr(`confidence`)]}),a(`th`,{children:`Source`}),r(`th`,{onClick:()=>jr(`updated_at`),className:T===`updated_at`?`sorted`:``,children:[`Updated`,Hr(`updated_at`)]}),r(`th`,{onClick:()=>jr(`created_at`),className:T===`created_at`?`sorted`:``,children:[`Created`,Hr(`created_at`)]}),a(`th`,{children:`Due`}),a(`th`,{className:`mem-actions-cell`})]})}),a(`tbody`,{children:v.items.map(e=>{let t=Nt===e.id,n=e.has_embedding;return r(y.Fragment,{children:[r(`tr`,{className:`${e.superseded_by?`mem-superseded-row`:``} ${t?`mem-expanded-row`:``}`,onClick:()=>Pt(t?null:e.id),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),Pt(t?null:e.id))},tabIndex:0,role:`row`,"aria-expanded":t,style:{cursor:`pointer`},children:[a(`td`,{children:a(`span`,{className:`mem-cat-badge ${e.category}`,children:e.category})}),a(`td`,{children:r(`div`,{className:`mem-content-cell`,title:e.content,children:[n!==void 0&&a(`span`,{className:`mem-embed-dot ${n?`embedded`:`missing`}`,title:n?`Embedded`:`Embedding missing`,children:a(Re,{size:6,fill:`currentColor`})}),e.sensitive&&a(`span`,{className:`mem-sensitive-badge`,title:`Sensitive`,children:a(rt,{size:11})}),a(`span`,{className:e.sensitive&&!on.has(e.id)?`mem-sensitive-blur`:e.superseded_by?`mem-superseded-text`:``,onClick:t=>{e.sensitive&&(t.stopPropagation(),sn(t=>{let n=new Set(t);return n.has(e.id)?n.delete(e.id):n.add(e.id),n}))},children:e.content})]})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,children:e.context})}),a(`td`,{children:e.entity?a(`span`,{className:`mem-entity-link`,onClick:t=>{t.stopPropagation(),Ht(e.entity),D(0)},title:`Filter by ${e.entity}`,children:e.entity}):a(`span`,{className:`mem-date-cell`,children:`—`})}),a(`td`,{children:r(`div`,{className:`mem-confidence`,children:[a(`div`,{className:`mem-confidence-bar`,children:a(`div`,{className:`mem-confidence-fill ${_t(e.confidence)}`,style:{width:`${e.confidence*100}%`}})}),e.confidence.toFixed(2)]})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,children:e.source||`—`})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:x(e.updated_at),children:S(e.updated_at)})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:x(e.created_at),children:S(e.created_at)})}),a(`td`,{children:e.due_at?a(`span`,{className:`mem-due-badge ${gt(e.due_at)?`overdue`:`upcoming`}`,title:x(e.due_at),children:S(e.due_at)}):a(`span`,{className:`mem-due-badge none`,children:`—`})}),a(`td`,{className:`mem-actions-cell`,children:r(`div`,{className:`mem-row-actions`,onClick:e=>e.stopPropagation(),children:[a(`button`,{className:`mem-row-action-btn`,onClick:()=>Er(e),title:`Edit`,children:a(le,{size:13})}),a(`button`,{className:`mem-row-action-btn`,onClick:()=>Tr(e),title:e.sensitive?`Unmark sensitive`:`Mark sensitive`,children:e.sensitive?a(nt,{size:13}):a(rt,{size:13})}),a(`button`,{className:`mem-row-action-btn`,onClick:()=>Dr(e.id),title:`Copy ID`,children:a(De,{size:13})}),a(`button`,{className:`mem-row-action-btn delete${F===e.id?` is-confirm`:``}`,onClick:()=>wr(e.id),title:F===e.id?`Click again to delete`:`Delete`,"aria-label":F===e.id?`Confirm delete memory`:`Delete memory`,children:F===e.id?a(`span`,{className:`mem-row-delete-label`,children:`Delete?`}):a(oe,{size:13})})]})})]}),t&&a(`tr`,{className:`mem-detail-row`,children:a(`td`,{colSpan:10,children:r(`div`,{className:`mem-detail-panel`,children:[r(`div`,{className:`mem-detail-grid`,children:[r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`ID`}),a(`span`,{className:`mem-detail-value`,children:e.id})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Domain`}),a(`span`,{className:`mem-detail-value`,children:e.domain||`—`})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Source`}),a(`span`,{className:`mem-detail-value`,children:e.source||`—`})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Use Count`}),a(`span`,{className:`mem-detail-value`,children:e.use_count??0})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Created`}),a(`span`,{className:`mem-detail-value`,children:x(e.created_at)})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Updated`}),a(`span`,{className:`mem-detail-value`,children:x(e.updated_at)})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Last Used`}),a(`span`,{className:`mem-detail-value`,children:x(e.last_used)})]}),r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Reminded At`}),a(`span`,{className:`mem-detail-value`,children:x(e.reminded_at)})]}),e.superseded_by&&r(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:`Superseded By`}),a(`span`,{className:`mem-detail-value mem-detail-chain`,children:e.superseded_by})]}),e.metadata&&r(`div`,{className:`mem-detail-field mem-detail-full`,children:[a(`span`,{className:`mem-detail-label`,children:`Metadata`}),a(`span`,{className:`mem-detail-value`,children:typeof e.metadata==`object`?JSON.stringify(e.metadata,null,2):e.metadata})]})]}),r(`div`,{className:`mem-detail-content-full`,children:[a(`span`,{className:`mem-detail-label`,children:`Full Content`}),a(`div`,{className:`mem-detail-content-text`,children:e.content})]})]})})})]},e.id)})})]})}),r(`div`,{className:`mem-pagination`,children:[r(`span`,{children:[E+1,`–`,Math.min(E+15,v.total),` of `,v.total]}),r(`div`,{className:`mem-pagination-btns`,children:[a(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":`Previous page`,disabled:E===0,onClick:()=>D(Math.max(0,E-15)),children:a($e,{size:14})}),a(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":`Next page`,disabled:E+15>=v.total,onClick:()=>D(E+15),children:a(Ge,{size:14})})]})]})]}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(Je,{size:28})}),a(`p`,{children:Ut||w.length>0||zt||Vt?`No matching memories`:`No memories stored yet`})]})]}),r(`div`,{className:`mem-two-col`,children:[r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(f,{size:14}),` Tool Performance`,a(`span`,{className:`mem-section-note`,title:`remember, recall, update_memory, forget and search_past_conversations are not logged`,children:`excludes memory tools`})]}),ot.length>0?a(`div`,{style:{overflowX:`auto`},children:r(`table`,{className:`mem-tool-table`,children:[a(`thead`,{children:r(`tr`,{children:[a(`th`,{children:`Tool`}),a(`th`,{children:`Calls`}),a(`th`,{children:`Success`}),a(`th`,{children:`Denied`}),a(`th`,{children:`Avg Time`}),a(`th`,{children:`Last Used`}),a(`th`,{children:`Last Error`})]})}),a(`tbody`,{children:ot.map(e=>r(`tr`,{children:[a(`td`,{children:a(`span`,{className:`mem-tool-name`,children:e.tool_name})}),a(`td`,{children:e.total_calls}),a(`td`,{children:r(`div`,{className:`mem-confidence`,children:[a(`div`,{className:`mem-confidence-bar`,style:{width:40},children:a(`div`,{className:`mem-confidence-fill ${vt(e.success_rate)}`,style:{width:`${e.success_rate*100}%`}})}),r(`span`,{className:`mem-success-rate ${vt(e.success_rate)}`,children:[Math.round(e.success_rate*100),`%`]})]})}),a(`td`,{children:e.denied_count??0}),a(`td`,{children:ht(e.avg_duration_ms)}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:x(e.last_used),children:S(e.last_used)})}),a(`td`,{children:a(`span`,{className:`mem-tool-error`,title:e.last_error||``,children:e.last_error||`—`})})]},e.tool_name))})]})}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(f,{size:28})}),a(`p`,{children:`No tool calls recorded yet`})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(ke,{size:14}),` Upcoming & Overdue`]}),ft.length>0?a(`div`,{className:`mem-temporal-list`,children:ft.map(e=>{let t=gt(e.due_at);return r(`div`,{className:`mem-temporal-item ${t?`overdue`:`upcoming`}`,children:[a(`span`,{className:`mem-temporal-icon`,children:a(t?be:ke,{size:16})}),r(`div`,{className:`mem-temporal-content`,children:[a(`div`,{className:`mem-temporal-text`,children:e.content}),r(`div`,{className:`mem-temporal-date`,children:[t?`OVERDUE`:`Due`,`: `,S(e.due_at),e.context!==`global`&&` \u00B7 ${e.context}`]})]})]},e.id)})}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(m,{size:28})}),a(`p`,{children:`Nothing upcoming or overdue`})]})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(s,{size:14}),` Conversation History`]}),r(`div`,{className:`mem-conv-search`,children:[a(u,{size:13,className:`search-icon`}),a(`input`,{type:`text`,placeholder:`Search conversations...`,value:Xt,onChange:e=>Or(e.target.value),"aria-label":`Search conversations`}),Xt&&a(`button`,{className:`mem-search-clear`,onClick:()=>{Zt(``),$t(null)},"aria-label":`Clear search`,children:a(fe,{size:12})})]}),Qt===null?ut.length>0?a(`div`,{className:`mem-conv-list`,children:ut.map(e=>r(`div`,{className:`mem-conv-item`,onClick:()=>kr(e.session_id),children:[r(`div`,{className:`mem-conv-info`,children:[r(`div`,{className:`mem-conv-session-id`,children:[Ce(e.session_id),e.consolidated&&a(`span`,{className:`mem-consolidated-badge`,title:`Consolidated`,children:a(et,{size:11})})]}),e.first_message&&a(`div`,{className:`mem-conv-preview`,children:e.first_message})]}),r(`div`,{className:`mem-conv-meta`,children:[r(`span`,{children:[e.turn_count,` turns`]}),a(`span`,{children:S(e.last_activity)})]})]},e.session_id))}):r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(s,{size:28})}),a(`p`,{children:`No conversation history in memory`})]}):Qt.length>0?a(`div`,{className:`mem-conv-list`,children:Qt.map(e=>r(`div`,{className:`mem-conv-item`,onClick:()=>kr(e.session_id),children:[r(`div`,{className:`mem-conv-info`,children:[r(`div`,{className:`mem-conv-session-id`,children:[a(`span`,{className:`mem-conv-turn-role ${e.role}`,children:e.role}),` `,Ce(e.session_id)]}),a(`div`,{className:`mem-conv-preview`,children:e.content})]}),a(`div`,{className:`mem-conv-meta`,children:a(`span`,{children:S(e.timestamp)})})]},e.id))}):a(`div`,{className:`mem-empty`,children:r(`p`,{children:[`No conversations match “`,Xt,`”`]})})]}),O&&r(`div`,{className:`mem-conv-detail-overlay`,children:[r(`div`,{className:`mem-conv-detail-header`,children:[a(`h2`,{children:Ce(O.sessionId)}),r(`div`,{className:`mem-conv-detail-actions`,children:[te.has(O.sessionId)&&a(`button`,{className:`btn-secondary`,onClick:()=>o(O.sessionId),children:`Open chat`}),a(`button`,{className:`btn-icon`,onClick:()=>tn(null),"aria-label":`Close conversation`,children:a(fe,{size:16})})]})]}),r(`div`,{className:`mem-conv-detail-body`,children:[O.turns.map(e=>r(`div`,{className:`mem-conv-turn`,children:[r(`div`,{className:`mem-conv-turn-header`,children:[a(`div`,{className:`mem-conv-turn-role ${e.role}`,children:e.role}),a(`span`,{className:`mem-conv-turn-time`,title:x(e.timestamp),children:S(e.timestamp)})]}),a(`div`,{className:`mem-conv-turn-content`,children:e.content})]},e.id)),O.turns.length===0&&a(`div`,{className:`mem-empty`,children:`No turns found`})]})]})]}),r(`div`,{className:`mem-section`,children:[r(`div`,{className:`mem-section-title`,children:[a(rt,{size:14}),` Settings `,a(`span`,{style:{fontSize:10,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`1px 6px`,borderRadius:4,marginLeft:6,verticalAlign:`middle`,letterSpacing:`0.5px`},children:`BETA`})]}),r(`div`,{className:`mem-setting-row`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`Memory enabled`}),a(`span`,{className:`mem-setting-desc`,children:`When disabled, no knowledge or conversation data is stored during any session (global incognito).`})]}),a(`button`,{className:`mem-toggle${M?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!M)L(`memory`);else{P(!0);try{let e=await h({memory_enabled:!1});cn(e.memory_enabled)}catch(e){t.system.warn(`Failed to disable memory`,e)}finally{P(!1)}}},"aria-pressed":M,"aria-label":`Memory is ${M?`enabled`:`disabled`}`,children:M?`On`:`Off`})]}),I&&(()=>{let e={memory:{title:`Enable Agent Memory?`,description:`Agent memory is a work-in-progress. By enabling it:`,bullets:[[`Conversations and facts are stored `,`locally on this machine`],[`Stored data `,`may be lost`,` during updates`],[`You can disable it at any time from this settings panel`]],buttonLabel:`Enable Memory`,onConfirm:async()=>{let e=await h({memory_enabled:!0});cn(e.memory_enabled),Y(`Memory enabled`,`info`)}},mcp:{title:`Enable MCP Memory Access?`,description:`This exposes memory data to external MCP clients:`,bullets:[[`MCP clients can `,`read your stored memories`,` (read-only)`],[`Requires an `,`MCP server restart`,` to take effect`],[`Intended for debugging and troubleshooting only`]],buttonLabel:`Enable MCP Access`,onConfirm:async()=>{let e=await h({mcp_memory_enabled:!0});un(e.mcp_memory_enabled),Y(`MCP memory access enabled`,`info`)}},discovery:{title:`Enable System Discovery?`,description:`This scans your system to personalize responses:`,bullets:[[`Collects `,`hardware, software, and environment`,` information`],[`Scans files, git repos, browser history, and SSH config`],[`All data stays `,`local on this machine`]],buttonLabel:`Enable Discovery`,onConfirm:async()=>{let e=await h({system_discovery_consent:!0});if(fn(e.system_discovery_consent),e.system_context_error)Y(`System discovery enabled but scan failed: ${e.system_context_error}`,`error`);else{let t=e.system_context_refresh?.stored??0;Y(`System discovery enabled — ${t} system facts collected`,`info`)}Q()}}}[I];return r(i.Fragment,{children:[a(`div`,{"aria-hidden":`true`,style:{position:`fixed`,inset:0,background:`var(--bg-modal-overlay)`,zIndex:9998,backdropFilter:`blur(4px)`},onClick:()=>L(null)}),r(`div`,{ref:lr,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`mem-beta-confirm-title`,"aria-describedby":`mem-beta-confirm-desc`,tabIndex:-1,style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,zIndex:9999,background:`var(--bg-card)`,border:`1px solid var(--border)`,borderRadius:12,padding:`28px 32px`,maxWidth:420,width:`90vw`,boxShadow:`var(--shadow-lg)`},children:[r(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:16},children:[a(`span`,{style:{fontSize:11,fontWeight:700,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`3px 10px`,borderRadius:4,letterSpacing:`0.5px`},children:`BETA`}),a(`h2`,{id:`mem-beta-confirm-title`,style:{fontSize:16,fontWeight:600,color:`var(--text-primary)`},children:e.title})]}),a(`p`,{id:`mem-beta-confirm-desc`,style:{fontSize:13,lineHeight:1.6,color:`var(--text-secondary)`,margin:`0 0 8px`},children:e.description}),a(`ul`,{style:{fontSize:13,lineHeight:1.7,color:`var(--text-secondary)`,margin:`0 0 24px`,paddingLeft:20},children:e.bullets.map((e,t)=>a(`li`,{children:e.map((e,t)=>t%2==1?a(`strong`,{style:{color:`var(--text-primary)`},children:e},t):a(`span`,{children:e},t))},t))}),r(`div`,{style:{display:`flex`,justifyContent:`flex-end`,gap:10},children:[a(`button`,{className:`btn-secondary`,onClick:()=>L(null),style:{padding:`8px 20px`,fontSize:13,borderRadius:6},children:`Cancel`}),a(`button`,{disabled:N,onClick:async()=>{P(!0);try{await e.onConfirm()}catch(e){t.system.warn(`Failed to update setting`,e),Y(`Failed to update setting. Please try again.`,`error`)}finally{P(!1),L(null)}},style:{padding:`8px 24px`,fontSize:13,fontWeight:600,borderRadius:6,border:`none`,cursor:`pointer`,background:`var(--accent-fill)`,color:`var(--accent-fill-text)`},children:e.buttonLabel})]})]})]})})(),r(`div`,{className:`mem-setting-row`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`MCP memory access`}),a(`span`,{className:`mem-setting-desc`,children:`Expose read-only memory tools to MCP clients (for debug/troubleshooting). Requires MCP server restart.`})]}),a(`button`,{className:`mem-toggle${ln?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!ln)L(`mcp`);else{P(!0);try{let e=await h({mcp_memory_enabled:!1});un(e.mcp_memory_enabled)}catch(e){t.system.warn(`Failed to update memory settings`,e)}finally{P(!1)}}},"aria-label":`Toggle MCP memory access`,"aria-pressed":ln,children:ln?`On`:`Off`})]}),r(`div`,{className:`mem-setting-row`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`System discovery`}),a(`span`,{className:`mem-setting-desc`,children:`Allow GAIA to scan your system for hardware, software, and environment information to personalize responses.`})]}),a(`button`,{className:`mem-toggle${dn?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!dn)L(`discovery`);else{P(!0);try{let e=await h({system_discovery_consent:!1});fn(e.system_discovery_consent)}catch(e){t.system.warn(`Failed to update system discovery setting`,e)}finally{P(!1)}}},"aria-label":`Toggle system discovery`,"aria-pressed":dn,children:dn?`On`:`Off`})]}),r(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`Re-initialize memory`}),a(`span`,{className:`mem-setting-desc`,children:`Wipe all memories, conversations, and tool logs, then re-collect system information. This cannot be undone.`})]}),gn?r(`div`,{className:`mem-delete-confirm`,children:[a(`span`,{className:`mem-delete-confirm-label`,children:`Are you sure?`}),a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:async()=>{P(!0);try{let e=await se();e.system_context.error?Y(e.system_context.error,`error`):Y(`Re-initialized: cleared ${e.cleared.knowledge} entries, restored ${e.system_context.stored} system facts`,`info`),Q()}catch(e){t.system.warn(`Failed to reinitialize memory`,e),Y(`Failed to re-initialize memory`,`error`)}finally{P(!1),_n(!1)}},children:`Yes, re-initialize`}),a(`button`,{className:`btn-secondary`,onClick:()=>_n(!1),style:{padding:`6px 14px`,fontSize:12},children:`Cancel`})]}):a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:()=>_n(!0),children:`Re-initialize`})]}),r(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[r(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:`Delete all memories`}),a(`span`,{className:`mem-setting-desc`,children:`Permanently wipe all knowledge entries, conversation history, and tool logs. This cannot be undone.`})]}),pn?r(`div`,{className:`mem-delete-confirm`,children:[a(`span`,{className:`mem-delete-confirm-label`,children:`Are you sure?`}),a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:async()=>{P(!0);try{let e=await Pe();Y(`Deleted ${e.knowledge} knowledge entries, ${e.conversations} conversations`,`info`),Q()}catch(e){t.system.warn(`Failed to clear memory`,e),Y(`Failed to clear memory`,`error`)}finally{P(!1),mn(!1)}},children:`Yes, delete all`}),a(`button`,{className:`btn-secondary`,onClick:()=>mn(!1),style:{padding:`6px 14px`,fontSize:12},children:`Cancel`})]}):a(`button`,{className:`mem-btn-danger`,disabled:N,onClick:()=>mn(!0),children:`Delete All`})]})]}),g&&r(`div`,{className:`mem-db-footer`,children:[r(`span`,{children:[`Database: `,Ve(g.db_size_bytes),g.knowledge?.avg_confidence!=null&&` \u00B7 Avg confidence: ${g.knowledge.avg_confidence.toFixed(2)}`]}),r(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[g.knowledge?.entity_count!=null&&g.knowledge.entity_count>0&&r(`span`,{children:[g.knowledge.entity_count,` entities`]}),g.knowledge?.sensitive_count!=null&&g.knowledge.sensitive_count>0&&r(`span`,{children:[a(rt,{size:10}),` `,g.knowledge.sensitive_count,` sensitive`]})]})]})]})}),R===`profile`&&r(`div`,{className:`mem-profile-grid`,children:[r(`div`,{className:`mem-profile-card`,children:[r(`div`,{className:`mem-profile-card-title`,children:[a(Ue,{size:16}),` System Discovery`]}),a(`p`,{className:`mem-profile-desc`,children:`Scan your system to discover apps, projects, and usage patterns.`}),a(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:z===`running`||z===`saving`,onClick:Rr,children:z===`running`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Running...`]}):`Run Discovery`}),Fn.length>0&&a(`div`,{className:`mem-log`,ref:Rn,children:Fn.map((e,t)=>a(`div`,{className:`mem-log-line ${e.kind}`,children:e.text},t))}),(z===`review`||z===`saving`||z===`done`)&&H.length>0&&r(`div`,{className:`mem-review-section`,children:[a(`div`,{className:`mem-review-header`,children:`Review & Save`}),a(`div`,{className:`mem-review-list`,children:H.map((e,t)=>r(`label`,{className:`mem-review-item`,children:[a(`input`,{type:`checkbox`,checked:e._checked,disabled:z===`saving`||z===`done`,onChange:()=>{U(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),a(`span`,{className:`mem-review-content`,children:e.content}),a(`span`,{className:`mem-source-badge`,children:e._source_name||e.category}),r(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),r(`div`,{className:`mem-review-actions`,children:[a(`button`,{className:`btn-primary`,disabled:z===`saving`||z===`done`||H.filter(e=>e._checked).length===0,onClick:zr,children:z===`saving`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Saving...`]}):`Save Selected (${H.filter(e=>e._checked).length})`}),r(`span`,{className:`mem-review-select-links`,children:[a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>U(e=>e.map(e=>({...e,_checked:!0}))),children:`Select All`}),` / `,a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>U(e=>e.map(e=>({...e,_checked:!1}))),children:`None`})]})]})]}),z===`done`&&In!==null&&r(`div`,{className:`mem-profile-success`,children:[a(m,{size:14}),` Saved `,In,` items to memory`]}),z===`review`&&H.length===0&&a(`div`,{className:`mem-profile-empty`,children:`No items discovered.`})]}),r(`div`,{className:`mem-profile-card`,children:[r(`div`,{className:`mem-profile-card-title`,children:[a(ye,{size:16}),` AI Profile Inference`]}),a(`p`,{className:`mem-profile-desc`,children:`Use the local LLM to generate profile insights from your data.`}),a(`p`,{className:`mem-profile-note`,children:`Requires Lemonade Server running.`}),r(`label`,{className:`mem-profile-checkbox`,children:[a(`input`,{type:`checkbox`,checked:Un,onChange:e=>Wn(e.target.checked),disabled:W===`running`||W===`saving`}),`Include browser history`]}),a(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:W===`running`||W===`saving`,onClick:Br,children:W===`running`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Running...`]}):`Run Inference`}),Bn.length>0&&a(`div`,{className:`mem-log`,ref:Gn,children:Bn.map((e,t)=>a(`div`,{className:`mem-log-line ${e.kind}`,children:e.text},t))}),(W===`review`||W===`saving`||W===`done`)&&q.length>0&&r(`div`,{className:`mem-review-section`,children:[a(`div`,{className:`mem-review-header`,children:`Review & Save`}),a(`div`,{className:`mem-review-list`,children:q.map((e,t)=>r(`label`,{className:`mem-review-item`,children:[a(`input`,{type:`checkbox`,checked:e._checked,disabled:W===`saving`||W===`done`,onChange:()=>{J(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),a(`span`,{className:`mem-review-content`,children:e.content}),a(`span`,{className:`mem-domain-badge ${St[e.domain]||`gray`}`,children:e.domain}),r(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),r(`div`,{className:`mem-review-actions`,children:[a(`button`,{className:`btn-primary`,disabled:W===`saving`||W===`done`||q.filter(e=>e._checked).length===0,onClick:Vr,children:W===`saving`?r(i.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` Saving...`]}):`Save Selected (${q.filter(e=>e._checked).length})`}),r(`span`,{className:`mem-review-select-links`,children:[a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>J(e=>e.map(e=>({...e,_checked:!0}))),children:`Select All`}),` / `,a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>J(e=>e.map(e=>({...e,_checked:!1}))),children:`None`})]})]})]}),W===`done`&&Vn!==null&&r(`div`,{className:`mem-profile-success`,children:[a(m,{size:14}),` Saved `,Vn,` insights to memory`]}),W===`review`&&q.length===0&&a(`div`,{className:`mem-profile-empty`,children:`No insights generated.`})]})]}),R===`goals`&&r(`div`,{className:`mem-goals-tab`,children:[a(`div`,{className:`mem-goals-stats-row`,children:[`queued`,`in_progress`,`completed`,`failed`].map(e=>r(`div`,{className:`mem-goals-stat-pill mem-goal-status-${e.replace(`_`,`-`)}`,children:[a(`span`,{className:`mem-goals-stat-n`,children:Cn?.goals[e]??0}),a(`span`,{className:`mem-goals-stat-label`,children:e.replace(`_`,` `)})]},e))}),xn.filter(e=>e.status===`pending_approval`).length>0&&r(`div`,{className:`mem-goals-approval-banner`,children:[r(`div`,{className:`mem-goals-approval-title`,children:[a(c,{size:14}),` Agent suggested `,xn.filter(e=>e.status===`pending_approval`).length,` goal(s) — review before execution`]}),xn.filter(e=>e.status===`pending_approval`).map(e=>r(`div`,{className:`mem-goals-approval-item`,children:[r(`div`,{className:`mem-goals-approval-text`,children:[a(`strong`,{children:e.title}),a(`span`,{children:e.description})]}),r(`div`,{className:`mem-goals-approval-actions`,children:[a(`button`,{className:`btn-danger-sm`,onClick:()=>vr(()=>de(e.id),`Couldn't reject the goal`),children:`Reject`}),a(`button`,{className:`btn-secondary`,onClick:()=>vr(()=>Be(e.id),`Couldn't accept the goal`),children:`Accept`})]})]},e.id))]}),a(`div`,{className:`mem-goals-toolbar`,children:r(`button`,{className:`btn-primary`,onClick:()=>Mn(e=>!e),children:[a(ze,{size:14}),` New Goal`]})}),jn&&r(`div`,{className:`mem-goals-add-form`,children:[a(`input`,{className:`mem-input`,placeholder:`Goal title`,value:Nn.title,onChange:e=>Pn(t=>({...t,title:e.target.value}))}),a(`textarea`,{className:`mem-input`,placeholder:`Description — what should the agent work toward?`,rows:2,value:Nn.description,onChange:e=>Pn(t=>({...t,description:e.target.value}))}),r(`div`,{className:`mem-goals-form-row`,children:[r(`select`,{className:`mem-select`,value:Nn.priority,onChange:e=>Pn(t=>({...t,priority:e.target.value})),children:[a(`option`,{value:`low`,children:`Low priority`}),a(`option`,{value:`medium`,children:`Medium priority`}),a(`option`,{value:`high`,children:`High priority`})]}),a(`button`,{className:`btn-primary`,onClick:()=>{Nn.title.trim()&&vr(async()=>{await Le(Nn),Pn({title:``,description:``,priority:`medium`}),Mn(!1)},`Couldn't create the goal`)},children:`Create`}),a(`button`,{className:`btn-secondary`,onClick:()=>Mn(!1),children:`Cancel`})]})]}),Tn?r(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),` Loading goals...`]}):xn.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).length===0?r(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(at,{size:32})}),a(`p`,{children:`No goals yet. Create one or let the agent suggest goals in autonomous mode.`})]}):a(`div`,{className:`mem-goals-list`,children:xn.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).map(e=>r(`div`,{className:`mem-goal-card mem-goal-status-${e.status.replace(`_`,`-`)}`,children:[r(`div`,{className:`mem-goal-header`,role:`button`,tabIndex:0,"aria-expanded":Dn===e.id,onClick:()=>On(t=>t===e.id?null:e.id),onKeyDown:t=>{t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),On(t=>t===e.id?null:e.id))},children:[r(`div`,{className:`mem-goal-header-left`,children:[a(`span`,{className:`mem-goal-status-dot status-${e.status.replace(`_`,`-`)}`}),a(`span`,{className:`mem-goal-title`,children:e.title}),a(`span`,{className:`mem-goal-priority mem-priority-${e.priority}`,children:e.priority}),e.source!==`user`&&r(`span`,{className:`mem-goal-source-badge`,children:[a(c,{size:10}),` `,e.source.replace(`_`,` `)]})]}),r(`div`,{className:`mem-goal-header-right`,children:[r(`span`,{className:`mem-goal-task-count`,children:[a(_e,{size:12}),e.tasks.filter(e=>e.status===`completed`).length,`/`,e.tasks.length]}),e.status===`queued`&&a(`button`,{className:`mem-goal-action-btn mem-goal-cancel-btn`,onClick:t=>{t.stopPropagation(),vr(()=>Te(e.id),`Couldn't cancel the goal`)},children:`Cancel`}),kn===e.id?a(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn mem-goal-delete-confirm`,onClick:t=>{t.stopPropagation(),An(null),vr(()=>je(e.id),`Couldn't delete the goal`)},children:`Delete?`}):a(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn`,"aria-label":`Delete goal ${e.title}`,onClick:t=>{t.stopPropagation(),An(e.id)},children:a(oe,{size:12})}),a(Xe,{size:14,className:Dn===e.id?`mem-chevron-open`:``})]})]}),Dn===e.id&&r(`div`,{className:`mem-goal-body`,children:[e.description&&a(`p`,{className:`mem-goal-desc`,children:e.description}),e.progress_notes&&a(`p`,{className:`mem-goal-progress`,children:e.progress_notes}),e.tasks.length>0?a(`div`,{className:`mem-task-list`,children:e.tasks.map(e=>r(`div`,{className:`mem-task-row mem-task-status-${e.status}`,children:[a(`span`,{className:`mem-task-dot status-${e.status}`}),a(`span`,{className:`mem-task-desc`,children:e.description}),a(`span`,{className:`mem-task-status-label`,children:e.status}),e.result&&a(`span`,{className:`mem-task-result`,children:e.result})]},e.id))}):a(`p`,{className:`mem-goal-no-tasks`,children:`No tasks yet — the agent will break this down when it starts.`})]})]},e.id))})]})]}),Ft.length>0&&a(`div`,{className:`mem-toast-container`,"aria-live":`polite`,children:Ft.map(e=>r(`div`,{className:`mem-toast mem-toast-${e.type}`,role:`status`,children:[e.type===`success`&&a(m,{size:14}),e.type===`error`&&a(be,{size:14}),e.type===`info`&&a(Je,{size:14}),a(`span`,{children:e.text})]},e.id))})]})}export{Ct as MemoryDashboard};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./browser-KnDALPx_.js","./rolldown-runtime-XKyaHtl9.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{S as t,T as n,i as r,n as i,r as a}from"./apiBase-DRtaTd8u.js";import{Ft as o,Lt as s,W as c,Wt as l,bn as u,dn as d,i as f,ot as p}from"./index-CKOG_8jk.js";var m=e(n(),1),h=null;function g({isOpen:n,onClose:g,onStop:_,error:v}){let[y,b]=(0,m.useState)(null),[x,S]=(0,m.useState)(!1),[C,w]=(0,m.useState)(null),T=(0,m.useRef)(null);o(n,g);let E=(0,m.useRef)(null);c(E,n);let D=(0,m.useCallback)(async()=>{try{let e=await p();return b(e),e}catch(e){return t.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,m.useEffect)(()=>{if(!n||v)return;D();let e=setInterval(async()=>{let t=await D();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[n,v,D]),(0,m.useEffect)(()=>{if(!y?.active||!y.url||!y.token||!T.current)return;let n=`${y.url}/?token=${y.token}`;t.system.info(`Generating QR code for: ${n}`),(async()=>{if(w(null),!h)try{let t=await f(()=>import(`./browser-KnDALPx_.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);h=t.default||t}catch{t.system.error(`QR code library not available - install with: npm install qrcode`),w(`QR code unavailable on this build. Use the link below instead.`);return}let r=getComputedStyle(document.documentElement),i=r.getPropertyValue(`--text-primary`).trim(),a=r.getPropertyValue(`--bg-primary`).trim();if(!i||!a)t.system.error(`QR code skipped: --text-primary/--bg-primary did not resolve. styles/index.css must be loaded before this modal renders.`),w(`QR code unavailable — the theme did not load. Use the link below instead.`);else try{await h.toCanvas(T.current,n,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){t.system.error(`QR code generation failed`,e),w(`QR code could not be drawn. Use the link below instead.`)}})()},[y?.active,y?.url,y?.token]);let O=(0,m.useRef)(null),k=(0,m.useCallback)(()=>{if(!y?.url||!y?.token)return;let e=`${y.url}/?token=${y.token}`;navigator.clipboard.writeText(e).then(()=>{S(!0),O.current&&clearTimeout(O.current),O.current=setTimeout(()=>S(!1),2e3)})},[y]);if((0,m.useEffect)(()=>()=>{O.current&&clearTimeout(O.current)},[]),!n)return null;let A=y?.active&&y?.url&&y?.token?`${y.url}/?token=${y.token}`:``;return a(`div`,{ref:E,className:`modal-overlay`,onClick:g,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile access`,children:r(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[r(`div`,{className:`modal-header`,children:[r(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[a(l,{size:18}),`Mobile access`]}),a(`button`,{className:`btn-icon`,onClick:g,"aria-label":`Close`,children:a(s,{size:18})})]}),r(`div`,{className:`modal-body mobile-modal-body`,children:[r(`div`,{className:`tunnel-status`,children:[a(`span`,{className:`status-dot ${y?.active?`active`:v?`error`:`starting`}`}),a(`span`,{children:y?.active?`Tunnel active`:v?`Couldn't start mobile access`:`Starting tunnel...`}),!y?.active&&!v&&a(`span`,{className:`tunnel-spinner`})]}),v&&a(`div`,{className:`tunnel-error`,children:v}),!v&&a(`div`,{className:`qr-code-area`,children:y?.active?r(i.Fragment,{children:[a(`canvas`,{ref:T,hidden:!!C}),C&&a(`div`,{className:`qr-placeholder error`,children:C})]}):r(`div`,{className:`qr-placeholder`,children:[a(`div`,{className:`placeholder-spinner`}),a(`span`,{children:`Connecting...`})]})}),y?.active&&A&&r(`div`,{className:`tunnel-url-area`,children:[a(`label`,{children:`Mobile URL`}),r(`div`,{className:`tunnel-url-row`,children:[a(`input`,{type:`text`,readOnly:!0,value:A}),r(`button`,{className:`copy-url-btn ${x?`copied`:``}`,onClick:k,title:`Copy URL`,children:[a(x?u:d,{size:13}),x?`Copied`:`Copy`]})]})]}),y?.active&&y?.publicIp&&y?.url&&!y.url.includes(`ngrok-free.app`)&&r(`div`,{className:`tunnel-password-hint`,children:[a(`label`,{children:`Tunnel password`}),a(`div`,{className:`tunnel-password-value`,children:y.publicIp}),a(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),!v&&a(`div`,{className:`mobile-instructions`,children:r(`ol`,{children:[a(`li`,{children:C?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),y?.url&&!y.url.includes(`ngrok-free.app`)&&a(`li`,{children:`Enter the tunnel password shown above when prompted`}),a(`li`,{children:`Chat with GAIA from your mobile device`}),a(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),r(`div`,{className:`mobile-access-actions`,children:[y?.active&&_&&a(`button`,{className:`btn-danger`,onClick:_,title:`Close the tunnel and revoke the mobile URL`,children:`Stop tunnel`}),a(`button`,{className:`btn-secondary`,onClick:g,children:`Close`})]})]})]})})}export{g as MobileAccessModal};
2
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{S as t,T as n,i as r,n as i,r as a}from"./apiBase-DRtaTd8u.js";import{Ft as o,Lt as s,W as c,Wt as l,bn as u,dn as d,i as f,ot as p}from"./index-BxdoiGm5.js";var m=e(n(),1),h=null;function g({isOpen:n,onClose:g,onStop:_,error:v}){let[y,b]=(0,m.useState)(null),[x,S]=(0,m.useState)(!1),[C,w]=(0,m.useState)(null),T=(0,m.useRef)(null);o(n,g);let E=(0,m.useRef)(null);c(E,n);let D=(0,m.useCallback)(async()=>{try{let e=await p();return b(e),e}catch(e){return t.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,m.useEffect)(()=>{if(!n||v)return;D();let e=setInterval(async()=>{let t=await D();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[n,v,D]),(0,m.useEffect)(()=>{if(!y?.active||!y.url||!y.token||!T.current)return;let n=`${y.url}/?token=${y.token}`;t.system.info(`Generating QR code for: ${n}`),(async()=>{if(w(null),!h)try{let t=await f(()=>import(`./browser-KnDALPx_.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);h=t.default||t}catch{t.system.error(`QR code library not available - install with: npm install qrcode`),w(`QR code unavailable on this build. Use the link below instead.`);return}let r=getComputedStyle(document.documentElement),i=r.getPropertyValue(`--text-primary`).trim(),a=r.getPropertyValue(`--bg-primary`).trim();if(!i||!a)t.system.error(`QR code skipped: --text-primary/--bg-primary did not resolve. styles/index.css must be loaded before this modal renders.`),w(`QR code unavailable — the theme did not load. Use the link below instead.`);else try{await h.toCanvas(T.current,n,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){t.system.error(`QR code generation failed`,e),w(`QR code could not be drawn. Use the link below instead.`)}})()},[y?.active,y?.url,y?.token]);let O=(0,m.useRef)(null),k=(0,m.useCallback)(()=>{if(!y?.url||!y?.token)return;let e=`${y.url}/?token=${y.token}`;navigator.clipboard.writeText(e).then(()=>{S(!0),O.current&&clearTimeout(O.current),O.current=setTimeout(()=>S(!1),2e3)})},[y]);if((0,m.useEffect)(()=>()=>{O.current&&clearTimeout(O.current)},[]),!n)return null;let A=y?.active&&y?.url&&y?.token?`${y.url}/?token=${y.token}`:``;return a(`div`,{ref:E,className:`modal-overlay`,onClick:g,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile access`,children:r(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[r(`div`,{className:`modal-header`,children:[r(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[a(l,{size:18}),`Mobile access`]}),a(`button`,{className:`btn-icon`,onClick:g,"aria-label":`Close`,children:a(s,{size:18})})]}),r(`div`,{className:`modal-body mobile-modal-body`,children:[r(`div`,{className:`tunnel-status`,children:[a(`span`,{className:`status-dot ${y?.active?`active`:v?`error`:`starting`}`}),a(`span`,{children:y?.active?`Tunnel active`:v?`Couldn't start mobile access`:`Starting tunnel...`}),!y?.active&&!v&&a(`span`,{className:`tunnel-spinner`})]}),v&&a(`div`,{className:`tunnel-error`,children:v}),!v&&a(`div`,{className:`qr-code-area`,children:y?.active?r(i.Fragment,{children:[a(`canvas`,{ref:T,hidden:!!C}),C&&a(`div`,{className:`qr-placeholder error`,children:C})]}):r(`div`,{className:`qr-placeholder`,children:[a(`div`,{className:`placeholder-spinner`}),a(`span`,{children:`Connecting...`})]})}),y?.active&&A&&r(`div`,{className:`tunnel-url-area`,children:[a(`label`,{children:`Mobile URL`}),r(`div`,{className:`tunnel-url-row`,children:[a(`input`,{type:`text`,readOnly:!0,value:A}),r(`button`,{className:`copy-url-btn ${x?`copied`:``}`,onClick:k,title:`Copy URL`,children:[a(x?u:d,{size:13}),x?`Copied`:`Copy`]})]})]}),y?.active&&y?.publicIp&&y?.url&&!y.url.includes(`ngrok-free.app`)&&r(`div`,{className:`tunnel-password-hint`,children:[a(`label`,{children:`Tunnel password`}),a(`div`,{className:`tunnel-password-value`,children:y.publicIp}),a(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),!v&&a(`div`,{className:`mobile-instructions`,children:r(`ol`,{children:[a(`li`,{children:C?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),y?.url&&!y.url.includes(`ngrok-free.app`)&&a(`li`,{children:`Enter the tunnel password shown above when prompted`}),a(`li`,{children:`Chat with GAIA from your mobile device`}),a(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),r(`div`,{className:`mobile-access-actions`,children:[y?.active&&_&&a(`button`,{className:`btn-danger`,onClick:_,title:`Close the tunnel and revoke the mobile URL`,children:`Stop tunnel`}),a(`button`,{className:`btn-secondary`,onClick:g,children:`Close`})]})]})]})})}export{g as MobileAccessModal};
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{S as t,T as n,i as r,n as i,r as a,w as o}from"./apiBase-DRtaTd8u.js";import{n as s,t as c}from"./zap-BdhDcjhB.js";import{Ft as l,Ht as u,It as d,Lt as f,W as p,Yt as m,dt as h,fn as g,n as _,qt as v}from"./index-CKOG_8jk.js";var y={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};y.node;var b=o(y),x=e(n(),1),S=8e3;function C(e,t){if(!e)return`never`;let n=new Date(e),r=(t||new Date).getTime()-n.getTime(),i=Math.floor(r/1e3);if(i<0){let e=Math.abs(i);if(e<60)return`in ${e}s`;let t=Math.floor(e/60);if(t<60)return`in ${t}m`;let n=Math.floor(t/60);return n<24?`in ${n}h`:`in ${Math.floor(n/24)}d`}if(i<60)return`just now`;let a=Math.floor(i/60);if(a<60)return`${a}m ago`;let o=Math.floor(a/60);return o<24?`${o}h ago`:n.toLocaleDateString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function w(e,t){if(!e)return`never`;let n=C(e,t),r=new Date(e);return r.getTime()<=(t||new Date).getTime()?n:`${r.toLocaleString(void 0,{weekday:`short`,hour:`numeric`,minute:`2-digit`})} (${n})`}function T(e){if(!e)return!1;let t=new Date(e).getTime()-Date.now();return t>0&&t<6e4}function E(e){let[t,n]=e.split(`:`).map(Number),r=t>=12?`PM`:`AM`;return`${t===0?12:t>12?t-12:t}:${n.toString().padStart(2,`0`)} ${r}`}function D(e){let t=e>=12?`PM`:`AM`;return`${e===0?12:e>12?e-12:e} ${t}`}function O(e){let t=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`];return e.length===5&&!e.includes(5)&&!e.includes(6)?`Weekdays`:e.length===2&&e.includes(5)&&e.includes(6)?`Weekends`:e.length===7?`Every day`:e.map(e=>t[e]).join(`, `)}function k({schedule:e}){let{selectedSchedule:n,selectSchedule:o,updateScheduleStatus:l,runScheduleNow:f,deleteSchedule:p,results:h,resultsLoading:v,loadSchedules:y,loadResults:E}=_(),{setCurrentSession:D,setShowSchedules:O}=d(),k=n===e.name,[A,j]=(0,x.useState)(!1),M=(0,x.useRef)(null),N=(0,x.useCallback)(()=>{M.current&&=(clearTimeout(M.current),null)},[]);(0,x.useEffect)(()=>N,[N]);let[P,F]=(0,x.useState)(()=>new Date),I=(0,x.useRef)(null);(0,x.useEffect)(()=>{let t=e.status===`active`&&T(e.next_run_at);return t&&!I.current?I.current=setInterval(()=>{F(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&y()},1e3):!t&&I.current&&(clearInterval(I.current),I.current=null),()=>{I.current&&=(clearInterval(I.current),null)}},[e.status,e.next_run_at,y]);let L=(0,x.useRef)(e.last_run_at);(0,x.useEffect)(()=>{k&&e.last_run_at!==L.current&&(L.current=e.last_run_at,E(e.name))},[k,e.last_run_at,e.name,E]);let R=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,z=(0,x.useCallback)(n=>{n.stopPropagation();let r=e.status===`active`?`paused`:`active`;t.ui.info(`Schedule "${e.name}": ${e.status} -> ${r}`),l(e.name,r)},[e.name,e.status,l]),B=(0,x.useCallback)(n=>{n.stopPropagation(),t.ui.info(`Schedule "${e.name}": run now`),f(e.name)},[e.name,f]),V=(0,x.useCallback)(n=>{n.stopPropagation(),N(),A?(t.ui.info(`Deleting schedule "${e.name}"`),p(e.name)):(j(!0),M.current=setTimeout(()=>{M.current=null,j(!1)},S))},[e.name,A,p,N]),H=(0,x.useCallback)(n=>{n.stopPropagation(),e.session_id&&(t.ui.info(`Opening chat session for schedule "${e.name}"`),D(e.session_id),O(!1))},[e.session_id,e.name,D,O]);return r(`div`,{className:`schedule-card ${k?`selected`:``} ${R?`just-ran`:``}`,onClick:()=>o(k?null:e.name),children:[r(`div`,{className:`schedule-card-header`,children:[a(`span`,{className:`schedule-card-name`,children:e.name}),a(`span`,{className:`schedule-card-status ${e.status}`,children:e.status})]}),a(`div`,{className:`schedule-card-prompt`,children:e.prompt}),r(`div`,{className:`schedule-card-meta`,children:[r(`span`,{title:e.description,children:[a(g,{size:11}),` `,e.description]}),r(`span`,{children:[`Runs: `,e.run_count]}),e.error_count>0&&r(`span`,{children:[`Errors: `,e.error_count]}),r(`span`,{children:[`Last: `,C(e.last_run_at)]}),r(`span`,{children:[`Next: `,w(e.next_run_at,P)]})]}),e.last_error&&r(`div`,{className:`schedule-card-error`,children:[`Last run failed: `,e.last_error]}),r(`div`,{className:`schedule-card-actions`,children:[e.session_id&&r(`button`,{className:`btn-sm chat`,onClick:H,title:`Open chat session`,children:[a(s,{size:11}),` Open Chat`]}),r(`button`,{className:`btn-sm`,onClick:B,disabled:e.running,title:`Run it once now, to try it. Its next scheduled run stays as it is.`,children:[a(c,{size:11}),` `,e.running?`Running…`:`Run now`]}),a(`button`,{className:`btn-sm`,onClick:z,title:e.status===`active`?`Pause`:`Resume`,children:e.status===`active`?r(i.Fragment,{children:[a(m,{size:11}),` Pause`]}):r(i.Fragment,{children:[a(b,{size:11}),` Resume`]})}),r(`button`,{className:`btn-sm danger`,onClick:V,title:`Delete`,children:[a(u,{size:11}),` `,A?`Confirm?`:`Delete`]})]}),k&&r(`div`,{className:`schedule-results`,children:[a(`h4`,{children:`Execution history`}),v?a(`p`,{className:`schedule-results-empty`,children:`Loading...`}):h.length===0?a(`p`,{className:`schedule-results-empty`,children:`No executions yet`}):a(`div`,{className:`schedule-results-list`,children:h.map(e=>r(`div`,{className:`schedule-result-item`,children:[a(`div`,{className:`schedule-result-time`,children:C(e.executed_at)}),e.error?a(`div`,{className:`schedule-result-content schedule-result-error`,children:e.error}):a(`div`,{className:`schedule-result-content`,children:e.result||`(no output)`})]},e.id))})]})]})}function A(){let{setShowSchedules:e}=d(),{schedules:n,loading:o,error:s,actionError:c,loadSchedules:u,createSchedule:m,dismissActionError:y}=_(),b=(0,x.useCallback)(()=>e(!1),[e]);l(!0,b);let S=(0,x.useRef)(null);p(S,!0);let[C,w]=(0,x.useState)(!1),[T,A]=(0,x.useState)(``),[j,M]=(0,x.useState)(``),[N,P]=(0,x.useState)(``),[F,I]=(0,x.useState)(null),[L,R]=(0,x.useState)(!1),[z,B]=(0,x.useState)(!1),[V,H]=(0,x.useState)(null),U=(0,x.useId)(),W=`${U}-when`,G=`${U}-when-error`,K=`${U}-name`,q=`${U}-prompt`,J=!L&&F!==null&&!F.valid,Y=(0,x.useRef)(null);(0,x.useEffect)(()=>{if(!T.trim())I(null);else return Y.current&&clearTimeout(Y.current),Y.current=window.setTimeout(async()=>{R(!0);try{let e=await h(T);I(e)}catch{I(null)}finally{R(!1)}},400),()=>{Y.current&&clearTimeout(Y.current)}},[T]);let X=(0,x.useRef)(null);(0,x.useEffect)(()=>(t.ui.info(`Schedule Manager opened`),u(),X.current=window.setInterval(()=>u(),5e3),()=>{X.current&&clearInterval(X.current),y()}),[u,y]);let Z=T.trim()&&j.trim()&&N.trim()&&(F===null||F.valid),Q=(0,x.useCallback)(async()=>{if(Z){B(!0),H(null);try{await m(j.trim(),T.trim(),N.trim()),A(``),M(``),P(``),I(null),w(!1),t.ui.info(`Schedule "${j}" created`)}catch(e){let t=e instanceof Error?e.message:`Failed to create schedule`;H(t)}finally{B(!1)}}},[Z,j,T,N,m]);return a(`div`,{ref:S,className:`modal-overlay`,onClick:()=>e(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`Scheduled tasks`,children:r(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[r(`div`,{className:`modal-header`,children:[a(`h3`,{children:`Scheduled tasks`}),a(`button`,{className:`btn-icon`,onClick:()=>e(!1),"aria-label":`Close schedule manager`,children:a(f,{size:18})})]}),r(`div`,{className:`modal-body`,children:[a(`section`,{className:`schedule-section`,children:C?r(`div`,{className:`schedule-create-form`,children:[r(`div`,{className:`schedule-field`,children:[a(`label`,{className:`schedule-field-label`,htmlFor:W,children:`When to run`}),a(`textarea`,{id:W,className:`schedule-nl-input`,placeholder:`Describe your schedule in natural language...
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{S as t,T as n,i as r,n as i,r as a,w as o}from"./apiBase-DRtaTd8u.js";import{n as s,t as c}from"./zap-BdhDcjhB.js";import{Ft as l,Ht as u,It as d,Lt as f,W as p,Yt as m,dt as h,fn as g,n as _,qt as v}from"./index-BxdoiGm5.js";var y={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};y.node;var b=o(y),x=e(n(),1),S=8e3;function C(e,t){if(!e)return`never`;let n=new Date(e),r=(t||new Date).getTime()-n.getTime(),i=Math.floor(r/1e3);if(i<0){let e=Math.abs(i);if(e<60)return`in ${e}s`;let t=Math.floor(e/60);if(t<60)return`in ${t}m`;let n=Math.floor(t/60);return n<24?`in ${n}h`:`in ${Math.floor(n/24)}d`}if(i<60)return`just now`;let a=Math.floor(i/60);if(a<60)return`${a}m ago`;let o=Math.floor(a/60);return o<24?`${o}h ago`:n.toLocaleDateString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function w(e,t){if(!e)return`never`;let n=C(e,t),r=new Date(e);return r.getTime()<=(t||new Date).getTime()?n:`${r.toLocaleString(void 0,{weekday:`short`,hour:`numeric`,minute:`2-digit`})} (${n})`}function T(e){if(!e)return!1;let t=new Date(e).getTime()-Date.now();return t>0&&t<6e4}function E(e){let[t,n]=e.split(`:`).map(Number),r=t>=12?`PM`:`AM`;return`${t===0?12:t>12?t-12:t}:${n.toString().padStart(2,`0`)} ${r}`}function D(e){let t=e>=12?`PM`:`AM`;return`${e===0?12:e>12?e-12:e} ${t}`}function O(e){let t=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`];return e.length===5&&!e.includes(5)&&!e.includes(6)?`Weekdays`:e.length===2&&e.includes(5)&&e.includes(6)?`Weekends`:e.length===7?`Every day`:e.map(e=>t[e]).join(`, `)}function k({schedule:e}){let{selectedSchedule:n,selectSchedule:o,updateScheduleStatus:l,runScheduleNow:f,deleteSchedule:p,results:h,resultsLoading:v,loadSchedules:y,loadResults:E}=_(),{setCurrentSession:D,setShowSchedules:O}=d(),k=n===e.name,[A,j]=(0,x.useState)(!1),M=(0,x.useRef)(null),N=(0,x.useCallback)(()=>{M.current&&=(clearTimeout(M.current),null)},[]);(0,x.useEffect)(()=>N,[N]);let[P,F]=(0,x.useState)(()=>new Date),I=(0,x.useRef)(null);(0,x.useEffect)(()=>{let t=e.status===`active`&&T(e.next_run_at);return t&&!I.current?I.current=setInterval(()=>{F(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&y()},1e3):!t&&I.current&&(clearInterval(I.current),I.current=null),()=>{I.current&&=(clearInterval(I.current),null)}},[e.status,e.next_run_at,y]);let L=(0,x.useRef)(e.last_run_at);(0,x.useEffect)(()=>{k&&e.last_run_at!==L.current&&(L.current=e.last_run_at,E(e.name))},[k,e.last_run_at,e.name,E]);let R=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,z=(0,x.useCallback)(n=>{n.stopPropagation();let r=e.status===`active`?`paused`:`active`;t.ui.info(`Schedule "${e.name}": ${e.status} -> ${r}`),l(e.name,r)},[e.name,e.status,l]),B=(0,x.useCallback)(n=>{n.stopPropagation(),t.ui.info(`Schedule "${e.name}": run now`),f(e.name)},[e.name,f]),V=(0,x.useCallback)(n=>{n.stopPropagation(),N(),A?(t.ui.info(`Deleting schedule "${e.name}"`),p(e.name)):(j(!0),M.current=setTimeout(()=>{M.current=null,j(!1)},S))},[e.name,A,p,N]),H=(0,x.useCallback)(n=>{n.stopPropagation(),e.session_id&&(t.ui.info(`Opening chat session for schedule "${e.name}"`),D(e.session_id),O(!1))},[e.session_id,e.name,D,O]);return r(`div`,{className:`schedule-card ${k?`selected`:``} ${R?`just-ran`:``}`,onClick:()=>o(k?null:e.name),children:[r(`div`,{className:`schedule-card-header`,children:[a(`span`,{className:`schedule-card-name`,children:e.name}),a(`span`,{className:`schedule-card-status ${e.status}`,children:e.status})]}),a(`div`,{className:`schedule-card-prompt`,children:e.prompt}),r(`div`,{className:`schedule-card-meta`,children:[r(`span`,{title:e.description,children:[a(g,{size:11}),` `,e.description]}),r(`span`,{children:[`Runs: `,e.run_count]}),e.error_count>0&&r(`span`,{children:[`Errors: `,e.error_count]}),r(`span`,{children:[`Last: `,C(e.last_run_at)]}),r(`span`,{children:[`Next: `,w(e.next_run_at,P)]})]}),e.last_error&&r(`div`,{className:`schedule-card-error`,children:[`Last run failed: `,e.last_error]}),r(`div`,{className:`schedule-card-actions`,children:[e.session_id&&r(`button`,{className:`btn-sm chat`,onClick:H,title:`Open chat session`,children:[a(s,{size:11}),` Open Chat`]}),r(`button`,{className:`btn-sm`,onClick:B,disabled:e.running,title:`Run it once now, to try it. Its next scheduled run stays as it is.`,children:[a(c,{size:11}),` `,e.running?`Running…`:`Run now`]}),a(`button`,{className:`btn-sm`,onClick:z,title:e.status===`active`?`Pause`:`Resume`,children:e.status===`active`?r(i.Fragment,{children:[a(m,{size:11}),` Pause`]}):r(i.Fragment,{children:[a(b,{size:11}),` Resume`]})}),r(`button`,{className:`btn-sm danger`,onClick:V,title:`Delete`,children:[a(u,{size:11}),` `,A?`Confirm?`:`Delete`]})]}),k&&r(`div`,{className:`schedule-results`,children:[a(`h4`,{children:`Execution history`}),v?a(`p`,{className:`schedule-results-empty`,children:`Loading...`}):h.length===0?a(`p`,{className:`schedule-results-empty`,children:`No executions yet`}):a(`div`,{className:`schedule-results-list`,children:h.map(e=>r(`div`,{className:`schedule-result-item`,children:[a(`div`,{className:`schedule-result-time`,children:C(e.executed_at)}),e.error?a(`div`,{className:`schedule-result-content schedule-result-error`,children:e.error}):a(`div`,{className:`schedule-result-content`,children:e.result||`(no output)`})]},e.id))})]})]})}function A(){let{setShowSchedules:e}=d(),{schedules:n,loading:o,error:s,actionError:c,loadSchedules:u,createSchedule:m,dismissActionError:y}=_(),b=(0,x.useCallback)(()=>e(!1),[e]);l(!0,b);let S=(0,x.useRef)(null);p(S,!0);let[C,w]=(0,x.useState)(!1),[T,A]=(0,x.useState)(``),[j,M]=(0,x.useState)(``),[N,P]=(0,x.useState)(``),[F,I]=(0,x.useState)(null),[L,R]=(0,x.useState)(!1),[z,B]=(0,x.useState)(!1),[V,H]=(0,x.useState)(null),U=(0,x.useId)(),W=`${U}-when`,G=`${U}-when-error`,K=`${U}-name`,q=`${U}-prompt`,J=!L&&F!==null&&!F.valid,Y=(0,x.useRef)(null);(0,x.useEffect)(()=>{if(!T.trim())I(null);else return Y.current&&clearTimeout(Y.current),Y.current=window.setTimeout(async()=>{R(!0);try{let e=await h(T);I(e)}catch{I(null)}finally{R(!1)}},400),()=>{Y.current&&clearTimeout(Y.current)}},[T]);let X=(0,x.useRef)(null);(0,x.useEffect)(()=>(t.ui.info(`Schedule Manager opened`),u(),X.current=window.setInterval(()=>u(),5e3),()=>{X.current&&clearInterval(X.current),y()}),[u,y]);let Z=T.trim()&&j.trim()&&N.trim()&&(F===null||F.valid),Q=(0,x.useCallback)(async()=>{if(Z){B(!0),H(null);try{await m(j.trim(),T.trim(),N.trim()),A(``),M(``),P(``),I(null),w(!1),t.ui.info(`Schedule "${j}" created`)}catch(e){let t=e instanceof Error?e.message:`Failed to create schedule`;H(t)}finally{B(!1)}}},[Z,j,T,N,m]);return a(`div`,{ref:S,className:`modal-overlay`,onClick:()=>e(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`Scheduled tasks`,children:r(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[r(`div`,{className:`modal-header`,children:[a(`h3`,{children:`Scheduled tasks`}),a(`button`,{className:`btn-icon`,onClick:()=>e(!1),"aria-label":`Close schedule manager`,children:a(f,{size:18})})]}),r(`div`,{className:`modal-body`,children:[a(`section`,{className:`schedule-section`,children:C?r(`div`,{className:`schedule-create-form`,children:[r(`div`,{className:`schedule-field`,children:[a(`label`,{className:`schedule-field-label`,htmlFor:W,children:`When to run`}),a(`textarea`,{id:W,className:`schedule-nl-input`,placeholder:`Describe your schedule in natural language...
2
2
  Examples: "every 30m", "daily at 9pm", "every hour from 8am to 6pm on weekdays"`,value:T,onChange:e=>A(e.target.value),"aria-invalid":J,"aria-describedby":J?G:void 0,autoFocus:!0,rows:2})]}),(F||L)&&a(`div`,{className:`schedule-parsed-preview ${F?.valid?`valid`:`invalid`}`,"aria-live":`polite`,children:L?a(`span`,{className:`schedule-parsed-loading`,children:`Parsing...`}):F?r(i.Fragment,{children:[F.valid?a(`div`,{className:`schedule-parsed-description`,children:F.description}):r(`div`,{id:G,children:[a(`div`,{className:`schedule-parsed-description`,children:`GAIA didn't understand that schedule.`}),a(`div`,{className:`schedule-parsed-hint`,children:F.description})]}),F.valid&&F.next_run_at&&r(`div`,{className:`schedule-parsed-next`,children:[`Next run: `,new Date(F.next_run_at).toLocaleString()]}),F.valid&&r(`div`,{className:`schedule-parsed-details`,children:[F.time_of_day&&r(`span`,{className:`schedule-parsed-tag`,children:[a(g,{size:10}),` `,E(F.time_of_day)]}),F.start_hour!=null&&F.end_hour!=null&&r(`span`,{className:`schedule-parsed-tag`,children:[a(g,{size:10}),` `,D(F.start_hour),` - `,D(F.end_hour)]}),F.days_of_week&&a(`span`,{className:`schedule-parsed-tag`,children:O(F.days_of_week)})]})]}):null}),r(`div`,{className:`schedule-field`,children:[a(`label`,{className:`schedule-field-label`,htmlFor:K,children:`Name`}),a(`div`,{className:`schedule-form-row`,children:a(`input`,{id:K,type:`text`,placeholder:`Schedule name (e.g. daily-summary)`,value:j,onChange:e=>M(e.target.value),className:!j.trim()&&T.trim()?`schedule-field-missing`:``})})]}),r(`div`,{className:`schedule-field`,children:[a(`label`,{className:`schedule-field-label`,htmlFor:q,children:`Prompt`}),a(`textarea`,{id:q,className:`schedule-prompt-input ${!N.trim()&&T.trim()?`schedule-field-missing`:``}`,placeholder:`Prompt to execute on each run...`,value:N,onChange:e=>P(e.target.value)})]}),V&&a(`p`,{className:`schedule-form-error`,children:V}),r(`div`,{className:`schedule-create-actions`,children:[a(`button`,{className:`btn-secondary`,onClick:()=>{w(!1),H(null),I(null),A(``),M(``),P(``)},children:`Cancel`}),a(`button`,{className:`btn-primary`,onClick:Q,disabled:!Z||z,children:z?`Creating...`:`Create Schedule`})]})]}):r(`button`,{className:`btn-primary`,onClick:()=>w(!0),children:[a(v,{size:14}),` New schedule`]})}),r(`section`,{className:`schedule-section`,children:[a(`h4`,{children:`Active schedules`}),c&&r(`div`,{className:`schedule-action-error`,role:`alert`,children:[a(`span`,{children:c}),a(`button`,{className:`btn-icon`,onClick:y,"aria-label":`Dismiss error`,children:a(f,{size:14})})]}),o?a(`p`,{className:`schedule-empty`,children:`Loading schedules...`}):s?a(`p`,{className:`schedule-empty`,children:s}):n.length===0?a(`p`,{className:`schedule-empty`,children:`No scheduled tasks yet. Create one to get started.`}):a(`div`,{className:`schedule-list`,children:n.map(e=>a(k,{schedule:e},e.id))})]})]})]})})}export{A as ScheduleManager};