@amd-gaia/agent-ui 0.25.0-rc.2 → 0.25.0-rc.8
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.
- package/bin/gaia-ui.cjs +13 -7
- package/dist/assets/AdvancedSettings-DNQod9tb.js +1 -0
- package/dist/assets/{ConnectorsPane-KLjT1y3F.js → ConnectorsPane-DXvmZT6E.js} +1 -1
- package/dist/assets/DocumentLibrary-H6_dL1FQ.js +1 -0
- package/dist/assets/FileBrowser-JEScQZqn.js +4 -0
- package/dist/assets/{MemoryDashboard-DG9P8Bqf.js → MemoryDashboard-CK5IZKJ8.js} +1 -1
- package/dist/assets/{MobileAccessModal-Jub4U6L2.js → MobileAccessModal-CV7e2cgI.js} +1 -1
- package/dist/assets/{ScheduleManager-BStuwsjn.js → ScheduleManager-A5eLWyGP.js} +1 -1
- package/dist/assets/index-D00FJoXi.js +58 -0
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/services/backend-installer.cjs +32 -6
- package/dist/assets/AdvancedSettings-DabrR6sf.js +0 -1
- package/dist/assets/DocumentLibrary-CElkmNvc.js +0 -1
- package/dist/assets/FileBrowser-ROrpBhVm.js +0 -4
- package/dist/assets/index-CXbVMk3u.js +0 -58
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./browser-CCrYwriZ.js","./rolldown-runtime-hePW80VL.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{o as t,r as n,t as r}from"./jsx-runtime-DVeaULmT.js";import{It as i,Yt as a,i as o,jt as s,lt as c,nn as l}from"./index-
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{o as t,r as n,t as r}from"./jsx-runtime-DVeaULmT.js";import{It as i,Yt as a,i as o,jt as s,lt as c,nn as l}from"./index-D00FJoXi.js";var u=e(t(),1),d=r(),f=null;function p({isOpen:t,onClose:r,onStop:p,error:m}){let[h,g]=(0,u.useState)(null),[_,v]=(0,u.useState)(!1),[y,b]=(0,u.useState)(null),x=(0,u.useRef)(null),S=(0,u.useCallback)(async()=>{try{let e=await c();return g(e),e}catch(e){return n.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,u.useEffect)(()=>{if(!t||m)return;S();let e=setInterval(async()=>{let t=await S();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[t,m,S]),(0,u.useEffect)(()=>{if(!h?.active||!h.url||!h.token||!x.current)return;let t=`${h.url}/?token=${h.token}`;n.system.info(`Generating QR code for: ${t}`),(async()=>{if(b(null),!f)try{let t=await o(()=>import(`./browser-CCrYwriZ.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);f=t.default||t}catch{n.system.error(`QR code library not available - install with: npm install qrcode`),b(`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){n.system.error(`QR code skipped: --text-primary/--bg-primary did not resolve. styles/index.css must be loaded before this modal renders.`),b(`QR code unavailable — the theme did not load. Use the link below instead.`);return}try{await f.toCanvas(x.current,t,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){n.system.error(`QR code generation failed`,e),b(`QR code could not be drawn. Use the link below instead.`)}})()},[h?.active,h?.url,h?.token]);let C=(0,u.useRef)(null),w=(0,u.useCallback)(()=>{if(!h?.url||!h?.token)return;let e=`${h.url}/?token=${h.token}`;navigator.clipboard.writeText(e).then(()=>{v(!0),C.current&&clearTimeout(C.current),C.current=setTimeout(()=>v(!1),2e3)})},[h]);if((0,u.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]),!t)return null;let T=h?.active&&h?.url&&h?.token?`${h.url}/?token=${h.token}`:``;return(0,d.jsx)(`div`,{className:`modal-overlay`,onClick:r,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile Access`,children:(0,d.jsxs)(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[(0,d.jsxs)(`div`,{className:`modal-header`,children:[(0,d.jsxs)(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[(0,d.jsx)(i,{size:18}),`Mobile Access`]}),(0,d.jsx)(`button`,{className:`btn-icon`,onClick:r,"aria-label":`Close`,children:(0,d.jsx)(s,{size:18})})]}),(0,d.jsxs)(`div`,{className:`modal-body mobile-modal-body`,children:[(0,d.jsxs)(`div`,{className:`tunnel-status`,children:[(0,d.jsx)(`span`,{className:`status-dot ${h?.active?`active`:m?`error`:`starting`}`}),(0,d.jsx)(`span`,{children:h?.active?`Tunnel active`:m?`Connection failed`:`Starting tunnel...`}),!h?.active&&!m&&(0,d.jsx)(`span`,{className:`tunnel-spinner`})]}),m&&(0,d.jsx)(`div`,{className:`tunnel-error`,children:m}),(0,d.jsx)(`div`,{className:`qr-code-area`,children:h?.active?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`canvas`,{ref:x,hidden:!!y}),y&&(0,d.jsx)(`div`,{className:`qr-placeholder error`,children:y})]}):m?(0,d.jsx)(`div`,{className:`qr-placeholder error`,children:`Failed to connect`}):(0,d.jsxs)(`div`,{className:`qr-placeholder`,children:[(0,d.jsx)(`div`,{className:`placeholder-spinner`}),(0,d.jsx)(`span`,{children:`Connecting...`})]})}),h?.active&&T&&(0,d.jsxs)(`div`,{className:`tunnel-url-area`,children:[(0,d.jsx)(`label`,{children:`Mobile URL`}),(0,d.jsxs)(`div`,{className:`tunnel-url-row`,children:[(0,d.jsx)(`input`,{type:`text`,readOnly:!0,value:T}),(0,d.jsxs)(`button`,{className:`copy-url-btn ${_?`copied`:``}`,onClick:w,title:`Copy URL`,children:[_?(0,d.jsx)(l,{size:13}):(0,d.jsx)(a,{size:13}),_?`Copied`:`Copy`]})]})]}),h?.active&&h?.publicIp&&h?.url&&!h.url.includes(`ngrok-free.app`)&&(0,d.jsxs)(`div`,{className:`tunnel-password-hint`,children:[(0,d.jsx)(`label`,{children:`Tunnel Password`}),(0,d.jsx)(`div`,{className:`tunnel-password-value`,children:h.publicIp}),(0,d.jsx)(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),(0,d.jsx)(`div`,{className:`mobile-instructions`,children:(0,d.jsxs)(`ol`,{children:[(0,d.jsx)(`li`,{children:y?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),h?.url&&!h.url.includes(`ngrok-free.app`)&&(0,d.jsx)(`li`,{children:`Enter the tunnel password shown above when prompted`}),(0,d.jsx)(`li`,{children:`Chat with GAIA from your mobile device`}),(0,d.jsx)(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),(0,d.jsxs)(`div`,{className:`mobile-access-actions`,children:[h?.active&&p&&(0,d.jsx)(`button`,{className:`btn-danger`,onClick:p,title:`Close the tunnel and revoke the mobile URL`,children:`Stop Tunnel`}),(0,d.jsx)(`button`,{className:`btn-secondary`,onClick:r,children:`Close`})]})]})]})})}export{p as MobileAccessModal};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{a as t,o as n,r,t as i}from"./jsx-runtime-DVeaULmT.js";import{t as a}from"./message-square-Ccmbk96j.js";import{$ as o,Ft as s,Ot as c,X as l,Xt as u,_t as d,jt as f,kt as p,ot as m,wt as h,yt as g,zt as _}from"./index-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{a as t,o as n,r,t as i}from"./jsx-runtime-DVeaULmT.js";import{t as a}from"./message-square-Ccmbk96j.js";import{$ as o,Ft as s,Ot as c,X as l,Xt as u,_t as d,jt as f,kt as p,ot as m,wt as h,yt as g,zt as _}from"./index-D00FJoXi.js";var v={name:`pause`,size:24,node:[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]};v.node;var y=t(v),b={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`}]]};b.node;var x=t(b),S=e(n(),1);function C(e,t){if(!(e instanceof Error))return t;let n=e.message,r=n.match(/API \d+: (.+)/);if(r)try{let e=JSON.parse(r[1]);if(e.detail)return e.detail}catch{}return n}var w=p((e,t)=>({schedules:[],loading:!1,error:null,selectedSchedule:null,results:[],resultsLoading:!1,loadSchedules:async()=>{t().schedules.length===0&&!t().error&&e({loading:!0}),e({error:null});try{e({schedules:(await d()).schedules||[],loading:!1})}catch(t){r.api.error(`Failed to load schedules`,t),e({error:`Failed to load schedules`,loading:!1})}},createSchedule:async(t,n,i)=>{try{let r=await l(t,n,i);e(e=>({schedules:[...e.schedules,r],error:null}))}catch(t){let n=C(t,`Failed to create schedule`);throw r.api.error(`Failed to create schedule`,t),e({error:n}),t}},updateScheduleStatus:async(t,n)=>{try{let r=await h(t,n);e(e=>({schedules:e.schedules.map(e=>e.name===t?r:e),error:null}))}catch(n){r.api.error(`Failed to update schedule "${t}"`,n),e({error:C(n,`Failed to update schedule`)})}},deleteSchedule:async t=>{try{await o(t),e(e=>({schedules:e.schedules.filter(e=>e.name!==t),selectedSchedule:e.selectedSchedule===t?null:e.selectedSchedule,error:null}))}catch(n){r.api.error(`Failed to delete schedule "${t}"`,n),e({error:C(n,`Failed to delete schedule`)})}},selectSchedule:n=>{e({selectedSchedule:n,results:[]}),n&&t().loadResults(n)},loadResults:async t=>{e({resultsLoading:!0});try{e({results:(await m(t)).results||[],resultsLoading:!1})}catch(n){r.api.error(`Failed to load results for "${t}"`,n),e({results:[],resultsLoading:!1})}}})),T=i();function E(e){return e<60?`${e}s`:e<3600?`${Math.round(e/60)}m`:e<86400?`${Math.round(e/3600)}h`:`${Math.round(e/86400)}d`}function D(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 O(e){if(!e)return!1;let t=new Date(e).getTime()-Date.now();return t>0&&t<6e4}function k(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 A(e){let t=e>=12?`PM`:`AM`;return`${e===0?12:e>12?e-12:e} ${t}`}function j(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 M({schedule:e}){let{selectedSchedule:t,selectSchedule:n,updateScheduleStatus:i,deleteSchedule:o,results:l,resultsLoading:d,loadSchedules:f,loadResults:p}=w(),{setCurrentSession:m,setShowSchedules:h}=c(),g=t===e.name,[_,v]=(0,S.useState)(!1),[b,C]=(0,S.useState)(()=>new Date),k=(0,S.useRef)(null);(0,S.useEffect)(()=>{let t=e.status===`active`&&O(e.next_run_at);return t&&!k.current?k.current=setInterval(()=>{C(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&f()},1e3):!t&&k.current&&(clearInterval(k.current),k.current=null),()=>{k.current&&=(clearInterval(k.current),null)}},[e.status,e.next_run_at,f]);let A=(0,S.useRef)(e.last_run_at);(0,S.useEffect)(()=>{g&&e.last_run_at!==A.current&&(A.current=e.last_run_at,p(e.name))},[g,e.last_run_at,e.name,p]);let j=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,M=(0,S.useCallback)(t=>{t.stopPropagation();let n=e.status===`active`?`paused`:`active`;r.ui.info(`Schedule "${e.name}": ${e.status} -> ${n}`),i(e.name,n)},[e.name,e.status,i]),N=(0,S.useCallback)(t=>{if(t.stopPropagation(),!_){v(!0),setTimeout(()=>v(!1),3e3);return}r.ui.info(`Deleting schedule "${e.name}"`),o(e.name)},[e.name,_,o]),P=(0,S.useCallback)(t=>{t.stopPropagation(),e.session_id&&(r.ui.info(`Opening chat session for schedule "${e.name}"`),m(e.session_id),h(!1))},[e.session_id,e.name,m,h]);return(0,T.jsxs)(`div`,{className:`schedule-card ${g?`selected`:``} ${j?`just-ran`:``}`,onClick:()=>n(g?null:e.name),children:[(0,T.jsxs)(`div`,{className:`schedule-card-header`,children:[(0,T.jsx)(`span`,{className:`schedule-card-name`,children:e.name}),(0,T.jsx)(`span`,{className:`schedule-card-status ${e.status}`,children:e.status})]}),(0,T.jsx)(`div`,{className:`schedule-card-prompt`,children:e.prompt}),(0,T.jsxs)(`div`,{className:`schedule-card-meta`,children:[(0,T.jsxs)(`span`,{children:[(0,T.jsx)(u,{size:11}),` `,E(e.interval_seconds)]}),(0,T.jsxs)(`span`,{children:[`Runs: `,e.run_count]}),e.error_count>0&&(0,T.jsxs)(`span`,{children:[`Errors: `,e.error_count]}),(0,T.jsxs)(`span`,{children:[`Last: `,D(e.last_run_at)]}),(0,T.jsxs)(`span`,{children:[`Next: `,D(e.next_run_at,b)]})]}),(0,T.jsxs)(`div`,{className:`schedule-card-actions`,children:[e.session_id&&(0,T.jsxs)(`button`,{className:`btn-sm chat`,onClick:P,title:`Open chat session`,children:[(0,T.jsx)(a,{size:11}),` Open Chat`]}),(0,T.jsx)(`button`,{className:`btn-sm`,onClick:M,title:e.status===`active`?`Pause`:`Resume`,children:e.status===`active`?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(y,{size:11}),` Pause`]}):(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(x,{size:11}),` Resume`]})}),(0,T.jsxs)(`button`,{className:`btn-sm danger`,onClick:N,title:`Delete`,children:[(0,T.jsx)(s,{size:11}),` `,_?`Confirm?`:`Delete`]})]}),g&&(0,T.jsxs)(`div`,{className:`schedule-results`,children:[(0,T.jsx)(`h4`,{children:`Execution History`}),d?(0,T.jsx)(`p`,{className:`schedule-results-empty`,children:`Loading...`}):l.length===0?(0,T.jsx)(`p`,{className:`schedule-results-empty`,children:`No executions yet`}):(0,T.jsx)(`div`,{className:`schedule-results-list`,children:l.map(e=>(0,T.jsxs)(`div`,{className:`schedule-result-item`,children:[(0,T.jsx)(`div`,{className:`schedule-result-time`,children:D(e.executed_at)}),e.error?(0,T.jsx)(`div`,{className:`schedule-result-content schedule-result-error`,children:e.error}):(0,T.jsx)(`div`,{className:`schedule-result-content`,children:e.result||`(no output)`})]},e.id))})]})]})}function N(){let{setShowSchedules:e}=c(),{schedules:t,loading:n,error:i,loadSchedules:a,createSchedule:o}=w(),[s,l]=(0,S.useState)(!1),[d,p]=(0,S.useState)(``),[m,h]=(0,S.useState)(``),[v,y]=(0,S.useState)(``),[b,x]=(0,S.useState)(null),[C,E]=(0,S.useState)(!1),[D,O]=(0,S.useState)(!1),[N,P]=(0,S.useState)(null),F=(0,S.useRef)(null);(0,S.useEffect)(()=>{if(!d.trim()){x(null);return}return F.current&&clearTimeout(F.current),F.current=window.setTimeout(async()=>{E(!0);try{let e=await g(d);x(e)}catch{x(null)}finally{E(!1)}},400),()=>{F.current&&clearTimeout(F.current)}},[d]);let I=(0,S.useRef)(null);(0,S.useEffect)(()=>(r.ui.info(`Schedule Manager opened`),a(),I.current=window.setInterval(()=>a(),5e3),()=>{I.current&&clearInterval(I.current)}),[a]);let L=d.trim()&&m.trim()&&v.trim()&&(b===null||b.valid),R=(0,S.useCallback)(async()=>{if(L){O(!0),P(null);try{await o(m.trim(),d.trim(),v.trim()),p(``),h(``),y(``),x(null),l(!1),r.ui.info(`Schedule "${m}" created`)}catch(e){let t=e instanceof Error?e.message:`Failed to create schedule`;P(t)}finally{O(!1)}}},[L,m,d,v,o]);return(0,T.jsx)(`div`,{className:`modal-overlay`,onClick:()=>e(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`Schedule Manager`,children:(0,T.jsxs)(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[(0,T.jsxs)(`div`,{className:`modal-header`,children:[(0,T.jsx)(`h3`,{children:`Scheduled Tasks`}),(0,T.jsx)(`button`,{className:`btn-icon`,onClick:()=>e(!1),"aria-label":`Close schedule manager`,children:(0,T.jsx)(f,{size:18})})]}),(0,T.jsxs)(`div`,{className:`modal-body`,children:[(0,T.jsx)(`section`,{className:`schedule-section`,children:s?(0,T.jsxs)(`div`,{className:`schedule-create-form`,children:[(0,T.jsx)(`textarea`,{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:d,onChange:e=>p(e.target.value),autoFocus:!0,rows:2}),(b||C)&&(0,T.jsx)(`div`,{className:`schedule-parsed-preview ${b?.valid?`valid`:`invalid`}`,children:C?(0,T.jsx)(`span`,{className:`schedule-parsed-loading`,children:`Parsing...`}):b?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`schedule-parsed-description`,children:b.valid?b.description:`Could not parse schedule`}),b.valid&&b.next_run_at&&(0,T.jsxs)(`div`,{className:`schedule-parsed-next`,children:[`Next run: `,new Date(b.next_run_at).toLocaleString()]}),b.valid&&(0,T.jsxs)(`div`,{className:`schedule-parsed-details`,children:[b.time_of_day&&(0,T.jsxs)(`span`,{className:`schedule-parsed-tag`,children:[(0,T.jsx)(u,{size:10}),` `,k(b.time_of_day)]}),b.start_hour!=null&&b.end_hour!=null&&(0,T.jsxs)(`span`,{className:`schedule-parsed-tag`,children:[(0,T.jsx)(u,{size:10}),` `,A(b.start_hour),` - `,A(b.end_hour)]}),b.days_of_week&&(0,T.jsx)(`span`,{className:`schedule-parsed-tag`,children:j(b.days_of_week)})]})]}):null}),(0,T.jsx)(`div`,{className:`schedule-form-row`,children:(0,T.jsx)(`input`,{type:`text`,placeholder:`Schedule name (e.g. daily-summary)`,value:m,onChange:e=>h(e.target.value),className:!m.trim()&&d.trim()?`schedule-field-missing`:``})}),(0,T.jsx)(`textarea`,{className:`schedule-prompt-input ${!v.trim()&&d.trim()?`schedule-field-missing`:``}`,placeholder:`Prompt to execute on each run...`,value:v,onChange:e=>y(e.target.value)}),N&&(0,T.jsx)(`p`,{className:`schedule-form-error`,children:N}),(0,T.jsxs)(`div`,{className:`schedule-create-actions`,children:[(0,T.jsx)(`button`,{className:`btn-secondary`,onClick:()=>{l(!1),P(null),x(null),p(``),h(``),y(``)},children:`Cancel`}),(0,T.jsx)(`button`,{className:`btn-primary`,onClick:R,disabled:!L||D,children:D?`Creating...`:`Create Schedule`})]})]}):(0,T.jsxs)(`button`,{className:`btn-primary`,onClick:()=>l(!0),children:[(0,T.jsx)(_,{size:14}),` New Schedule`]})}),(0,T.jsxs)(`section`,{className:`schedule-section`,children:[(0,T.jsx)(`h4`,{children:`Active Schedules`}),n?(0,T.jsx)(`p`,{className:`schedule-empty`,children:`Loading schedules...`}):i?(0,T.jsx)(`p`,{className:`schedule-empty`,children:i}):t.length===0?(0,T.jsx)(`p`,{className:`schedule-empty`,children:`No scheduled tasks yet. Create one to get started.`}):(0,T.jsx)(`div`,{className:`schedule-list`,children:t.map(e=>(0,T.jsx)(M,{schedule:e},e.id))})]})]})]})})}export{N as ScheduleManager};
|