@amd-gaia/agent-ui 0.25.3 → 0.25.4-rc.10
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 +2 -23
- package/dist/assets/AdvancedSettings-DXf2pogI.js +1 -0
- package/dist/assets/ConnectorsPane-CzLYXGMl.css +1 -0
- package/dist/assets/ConnectorsPane-R1yvKMNT.js +1 -0
- package/dist/assets/DocumentLibrary-CM6o8j2T.css +1 -0
- package/dist/assets/DocumentLibrary-DSOiP7Ft.js +4 -0
- package/dist/assets/FileBrowser-BlVSPjD2.js +4 -0
- package/dist/assets/FileBrowser-Cna3BsT7.css +1 -0
- package/dist/assets/MemoryDashboard-D_ZVZbS_.js +1 -0
- package/dist/assets/MemoryDashboard-DwrWAXi6.css +1 -0
- package/dist/assets/MobileAccessModal-BkVDm3YG.css +1 -0
- package/dist/assets/MobileAccessModal-CPjDeIIk.js +2 -0
- package/dist/assets/ScheduleManager-CjHJ4NbD.css +1 -0
- package/dist/assets/ScheduleManager-D1DOYVQo.js +1 -0
- package/dist/assets/api-Co-B9E0t.js +4 -0
- package/dist/assets/index-CMVmIBZ8.js +78 -0
- package/dist/assets/index-Y93uvqe7.css +1 -0
- package/dist/assets/useT-tWXlG-cT.js +3 -0
- package/dist/assets/zap-D-WCZ6dX.js +1 -0
- package/dist/icons/apple-touch-icon.png +0 -0
- package/dist/icons/icon-192.png +0 -0
- package/dist/icons/icon-512.png +0 -0
- package/dist/icons/icon-maskable-192.png +0 -0
- package/dist/icons/icon-maskable-512.png +0 -0
- package/dist/index.html +8 -3
- package/dist/manifest.json +16 -0
- package/dist/sw.js +49 -0
- package/main-safety-net.cjs +106 -8
- package/main.cjs +145 -162
- package/package.json +5 -3
- package/preload.cjs +19 -9
- package/services/agent-seeder.cjs +22 -13
- package/services/auto-updater.cjs +780 -216
- package/services/backend-installer.cjs +523 -365
- package/services/engine-install.cjs +233 -0
- package/services/index-query.cjs +7 -1
- package/services/lock-holders.cjs +200 -0
- package/services/quit-guard.cjs +36 -3
- package/services/tray-manager.cjs +12 -7
- package/dist/assets/AdvancedSettings-DERzP9Jc.js +0 -1
- package/dist/assets/ConnectorsPane-Dzu2DRTc.css +0 -1
- package/dist/assets/ConnectorsPane-s0fFxmus.js +0 -1
- package/dist/assets/DocumentLibrary-CIKp6qld.css +0 -1
- package/dist/assets/DocumentLibrary-DqapN_Tr.js +0 -4
- package/dist/assets/FileBrowser-Dil1lZJ4.css +0 -1
- package/dist/assets/FileBrowser-vAJV41RT.js +0 -4
- package/dist/assets/MemoryDashboard-CP5wVWkY.js +0 -1
- package/dist/assets/MemoryDashboard-Mo721-BI.css +0 -1
- package/dist/assets/MobileAccessModal-B31mPs50.js +0 -2
- package/dist/assets/MobileAccessModal-DuVy9F1u.css +0 -1
- package/dist/assets/ScheduleManager-D5c4gVIt.css +0 -1
- package/dist/assets/ScheduleManager-b0gTAf2R.js +0 -2
- package/dist/assets/apiBase-CS6zLsJY.js +0 -1
- package/dist/assets/index-C-EM_5yl.css +0 -1
- package/dist/assets/index-Cae5Fje-.js +0 -78
- package/dist/assets/zap-BogJn9oN.js +0 -1
- package/services/backend-installer-progress-dialog.cjs +0 -510
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.mobile-modal{width:420px}.mobile-modal-body{flex-direction:column;gap:16px;display:flex}.tunnel-status{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;gap:10px;padding:12px 16px;font-size:13px;font-weight:500;display:flex}.tunnel-status .status-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.tunnel-status .status-dot.active{background:var(--accent-green)}.tunnel-status .status-dot.starting{background:var(--accent-yellow);animation:pulse-dot var(--duration-pulse) var(--ease-in-out) infinite}.tunnel-status .status-dot.error{background:var(--danger)}.tunnel-status .status-dot.setup,.tunnel-status .status-dot.inactive{background:var(--text-muted)}.tunnel-status .tunnel-spinner{border:2px solid var(--border);border-top-color:var(--accent);width:16px;height:16px;animation:spin var(--duration-spin) var(--ease-linear) infinite;border-radius:50%;margin-left:auto}@keyframes pulse-dot{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.85)}}.tunnel-error{background:color-mix(in srgb, var(--danger) 8%, transparent);border:1px solid color-mix(in srgb, var(--danger) 25%, transparent);border-radius:var(--radius-sm);color:var(--danger);word-break:break-word;white-space:pre-line;padding:12px 16px;font-size:13px;line-height:1.5}.tunnel-error a{color:var(--danger);text-decoration:underline}.tunnel-setup{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);flex-direction:column;gap:10px;padding:12px 16px;font-size:13px;line-height:1.5;display:flex}.tunnel-setup p{margin:0}.tunnel-setup-title{color:var(--text-primary);font-weight:600}.tunnel-setup-command input{font-family:var(--font-mono)}.tunnel-setup-link{color:var(--accent);font-size:var(--fs-label);align-items:center;gap:4px;display:inline-flex}.qr-code-area{flex-direction:column;align-items:center;gap:12px;display:flex}.qr-code-area canvas{border-radius:var(--radius-md);border:2px solid var(--border);box-shadow:var(--shadow-sm)}.qr-placeholder{background:var(--bg-secondary);border:2px dashed var(--border);border-radius:var(--radius-md);width:200px;height:200px;color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:14px;display:flex}.qr-placeholder.error{border-color:color-mix(in srgb, var(--danger) 30%, transparent);color:var(--danger)}.qr-placeholder .placeholder-spinner{border:3px solid var(--border);border-top-color:var(--accent);width:28px;height:28px;animation:spin var(--duration-spin) var(--ease-linear) infinite;border-radius:50%}.tunnel-url-area{flex-direction:column;gap:6px;display:flex}.tunnel-url-area label{font-size:var(--fs-label);color:var(--text-muted);font-weight:600}.tunnel-url-row{align-items:center;gap:8px;display:flex}.tunnel-url-row input{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);color:var(--text-primary);outline:none;flex:1;padding:8px 12px;font-size:12px}.tunnel-url-row input:focus{border-color:var(--accent)}button.copy-url-btn{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);white-space:nowrap;transition:all var(--duration) var(--ease);align-items:center;gap:6px;padding:8px 14px;font-size:12px;font-weight:500;display:flex}button.copy-url-btn:hover{background:var(--bg-hover);border-color:var(--accent);color:var(--accent)}button.copy-url-btn.copied{color:var(--accent-green);border-color:var(--accent-green)}.tunnel-password-hint{background:color-mix(in srgb, var(--accent-yellow) 6%, transparent);border:1px solid color-mix(in srgb, var(--accent-yellow) 20%, transparent);border-radius:var(--radius-sm);text-align:center;padding:14px 16px}.tunnel-password-hint label{font-size:var(--fs-label);color:var(--accent-yellow);margin-bottom:6px;font-weight:700;display:block}.tunnel-password-value{font-size:22px;font-family:var(--font-mono);color:var(--text-primary);letter-spacing:1px;-webkit-user-select:all;user-select:all;cursor:text;margin-bottom:4px;font-weight:700}.tunnel-password-note{color:var(--text-muted);font-size:11px}.mobile-instructions{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);padding:14px 16px;font-size:13px;line-height:1.6}.mobile-instructions ol{margin:0;padding-left:20px}.mobile-instructions li{margin-bottom:4px}.mobile-instructions li:last-child{margin-bottom:0}.mobile-install-hint{border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-secondary);padding:14px 16px;font-size:13px;line-height:1.6}.mobile-install-hint-title{font-size:var(--fs-label);color:var(--text-primary);margin-bottom:4px;font-weight:700}.mobile-install-hint p{margin:0 0 6px}.mobile-install-hint p:last-child{margin-bottom:0}.mobile-access-actions{justify-content:flex-end;gap:8px;padding-top:4px;display:flex}@media (width<=480px){.mobile-modal{width:100%}.qr-code-area canvas{width:160px!important;height:160px!important}.qr-placeholder{width:160px;height:160px}}
|
|
@@ -0,0 +1,2 @@
|
|
|
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{F as t,a as n,c as r,l as i,q as a,s as o}from"./useT-tWXlG-cT.js";import{X as s}from"./api-Co-B9E0t.js";import{Dt as c,Ht as l,Mt as u,X as d,ft as f,i as p,nt as m,rt as h,u as g,ut as _}from"./index-CMVmIBZ8.js";var v=e(a(),1),y=null,b=`https://ngrok.com/download`;function x({isOpen:a,onClose:x,onStop:S,error:C,setupCommands:w,onRetry:T}){let[E,D]=(0,v.useState)(null),[O,k]=(0,v.useState)(!1),[A,j]=(0,v.useState)(null),M=n(),N=Array.isArray(w),P=!!C||N,[F,I]=(0,v.useState)(null),L=(0,v.useRef)(null);m(a,x);let R=(0,v.useRef)(null);d(R,a),g(R,a);let z=(0,v.useCallback)(async()=>{try{let e=await s();return D(e),e}catch(e){return t.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,v.useEffect)(()=>{if(!a||P)return;z();let e=setInterval(async()=>{let t=await z();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[a,P,z]),(0,v.useEffect)(()=>{if(!E?.active||!E.url||!E.token||!L.current)return;let n=`${E.url}/?token=${E.token}`;t.system.info(`Generating QR code for: ${n}`),(async()=>{if(I(null),!y)try{let t=await p(()=>import(`./browser-KnDALPx_.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);y=t.default||t}catch{t.system.error(`QR code library not available - install with: npm install qrcode`),I(`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.`),I(`QR code unavailable — the theme did not load. Use the link below instead.`);else try{await y.toCanvas(L.current,n,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){t.system.error(`QR code generation failed`,e),I(`QR code could not be drawn. Use the link below instead.`)}})()},[E?.active,E?.url,E?.token]);let B=(0,v.useRef)(null),V=(0,v.useCallback)(()=>{if(!E?.url||!E?.token)return;let e=`${E.url}/?token=${E.token}`;navigator.clipboard.writeText(e).then(()=>{k(!0),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>k(!1),2e3)})},[E]),H=(0,v.useCallback)(e=>{navigator.clipboard.writeText(e).then(()=>{j(e),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>j(null),2e3)}).catch(e=>t.system.error(`Could not copy the ngrok install command`,e))},[]);if((0,v.useEffect)(()=>()=>{B.current&&clearTimeout(B.current)},[]),!a)return null;let U=E?.active&&E?.url&&E?.token?`${E.url}/?token=${E.token}`:``;return r(`div`,{ref:R,className:`modal-overlay`,onClick:x,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile access`,children:i(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[i(`div`,{className:`modal-header`,children:[i(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[r(_,{size:18}),`Mobile access`]}),r(`button`,{className:`btn-icon`,onClick:x,"aria-label":`Close`,children:r(h,{size:18})})]}),i(`div`,{className:`modal-body mobile-modal-body`,children:[i(`div`,{className:`tunnel-status`,children:[r(`span`,{className:`status-dot ${E?.active?`active`:N?`setup`:C?`error`:`starting`}`}),r(`span`,{children:E?.active?`Tunnel active`:N?M(`mobile.ngrokRequired`):C?`Couldn't start mobile access`:`Starting tunnel...`}),!E?.active&&!P&&r(`span`,{className:`tunnel-spinner`})]}),N&&i(`div`,{className:`tunnel-setup`,children:[r(`div`,{className:`tunnel-setup-title`,children:M(`mobile.setupTitle`)}),i(`p`,{children:[M(`mobile.setupIntro`),` `,w.length>0?M(`mobile.setupInstall`):M(`mobile.setupDownload`)]}),w.map(e=>i(`div`,{className:`tunnel-url-row tunnel-setup-command`,children:[r(`input`,{type:`text`,readOnly:!0,dir:`ltr`,value:e,"aria-label":M(`mobile.installCommand`)}),i(`button`,{className:`copy-url-btn ${A===e?`copied`:``}`,onClick:()=>H(e),title:M(`mobile.copyCommand`),children:[r(A===e?l:u,{size:13}),M(A===e?`mobile.copied`:`mobile.copy`)]})]},e)),i(`a`,{href:b,target:`_blank`,rel:`noopener noreferrer`,className:`tunnel-setup-link`,children:[M(`mobile.downloadPage`),` `,r(c,{size:11})]})]}),C&&!N&&r(`div`,{className:`tunnel-error`,children:C}),!P&&r(`div`,{className:`qr-code-area`,children:E?.active?i(o.Fragment,{children:[r(`canvas`,{ref:L,hidden:!!F}),F&&r(`div`,{className:`qr-placeholder error`,children:F})]}):i(`div`,{className:`qr-placeholder`,children:[r(`div`,{className:`placeholder-spinner`}),r(`span`,{children:`Connecting...`})]})}),E?.active&&U&&i(`div`,{className:`tunnel-url-area`,children:[r(`label`,{children:`Mobile URL`}),i(`div`,{className:`tunnel-url-row`,children:[r(`input`,{type:`text`,readOnly:!0,value:U}),i(`button`,{className:`copy-url-btn ${O?`copied`:``}`,onClick:V,title:`Copy URL`,children:[r(O?l:u,{size:13}),O?`Copied`:`Copy`]})]})]}),E?.active&&E?.publicIp&&E?.url&&!E.url.includes(`ngrok-free.app`)&&i(`div`,{className:`tunnel-password-hint`,children:[r(`label`,{children:`Tunnel password`}),r(`div`,{className:`tunnel-password-value`,children:E.publicIp}),r(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),!P&&r(`div`,{className:`mobile-instructions`,children:i(`ol`,{children:[r(`li`,{children:F?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),E?.url&&!E.url.includes(`ngrok-free.app`)&&r(`li`,{children:`Enter the tunnel password shown above when prompted`}),r(`li`,{children:`Chat with GAIA from your mobile device`}),r(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),E?.active&&!C&&i(`div`,{className:`mobile-install-hint`,children:[r(`div`,{className:`mobile-install-hint-title`,children:M(`mobileAccess.installTitle`)}),r(`p`,{children:M(`mobileAccess.installSteps`)}),r(`p`,{children:M(`mobileAccess.linkLifetime`)})]}),i(`div`,{className:`mobile-access-actions`,children:[E?.active&&S&&r(`button`,{className:`btn-danger`,onClick:S,title:`Close the tunnel and revoke the mobile URL`,children:`Stop tunnel`}),N&&T&&i(`button`,{className:`btn-primary`,onClick:T,children:[r(f,{size:13}),` `,M(`mobile.retry`)]}),r(`button`,{className:`btn-secondary`,onClick:x,children:`Close`})]})]})]})})}export{x as MobileAccessModal};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.schedule-modal{flex-direction:column;width:640px;max-height:80vh;display:flex}.schedule-modal .modal-body{flex:1;overflow-y:auto}.schedule-create-form{flex-direction:column;gap:10px;margin-bottom:20px;display:flex}.schedule-field{flex-direction:column;gap:4px;display:flex}.schedule-field-label{font-size:var(--fs-label);color:var(--text-secondary);font-weight:600}.schedule-form-row{gap:8px;display:flex}.schedule-form-row input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-input);color:var(--text-primary);font-size:13px;font-family:var(--font-sans);flex:1;padding:8px 12px}.schedule-form-row input:focus{border-color:var(--accent);outline:none}.schedule-form-row input::placeholder{color:var(--text-muted)}.schedule-prompt-input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-input);width:100%;color:var(--text-primary);font-size:13px;font-family:var(--font-sans);resize:vertical;min-height:60px;padding:8px 12px}.schedule-prompt-input:focus{border-color:var(--accent);outline:none}.schedule-prompt-input::placeholder{color:var(--text-muted)}.schedule-create-actions{justify-content:flex-end;gap:8px;display:flex}.schedule-form-error{color:var(--accent);margin-top:-4px;font-size:12px}.schedule-action-error{border-inline-start:2px solid var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent);color:var(--text-primary);overflow-wrap:anywhere;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:8px;padding:6px 8px;font-size:12px;display:flex}.schedule-section{margin-bottom:20px}.schedule-section:last-child{margin-bottom:0}.schedule-section h4{font-size:var(--fs-label);color:var(--text-muted);margin-bottom:10px;font-weight:700}.schedule-empty{color:var(--text-muted);text-align:center;padding:24px 12px;font-size:13px}.schedule-list{flex-direction:column;gap:6px;display:flex}.schedule-card{border-radius:var(--radius-sm);background:var(--bg-secondary);border:1px solid var(--border-light);cursor:pointer;transition:background var(--duration-fast) var(--ease);flex-direction:column;padding:10px 12px;display:flex}.schedule-card:hover{background:var(--bg-hover)}.schedule-card.selected{border-color:var(--accent);background:var(--bg-hover)}.schedule-card.just-ran{animation:schedule-flash var(--duration-pulse) var(--ease)}@keyframes schedule-flash{0%{border-color:var(--accent-green)}to{border-color:var(--border-light)}}.schedule-card-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.schedule-card-name{text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:600;overflow:hidden}.schedule-card-status{font-size:var(--fs-caption);text-transform:capitalize;border-radius:var(--radius-sm);padding:2px 8px;font-weight:600}.schedule-card-status.active{color:var(--accent-green);background:color-mix(in srgb, var(--accent-green) 10%, transparent)}.schedule-card-status.paused{color:var(--accent-yellow);background:color-mix(in srgb, var(--accent-yellow) 10%, transparent)}.schedule-card-status.cancelled{color:var(--text-muted);background:var(--bg-tertiary)}.schedule-card-meta{color:var(--text-secondary);align-items:center;gap:12px;margin-top:6px;font-size:12px;display:flex}.schedule-card-error{border-inline-start:2px solid var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent);color:var(--text-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin-top:6px;padding:6px 8px;font-size:12px}.schedule-card-prompt{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:12px;overflow:hidden}.schedule-card-actions{gap:4px;margin-top:8px;display:flex}.schedule-card-actions .btn-sm{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-tertiary);color:var(--text-primary);cursor:pointer;transition:background var(--duration-fast) var(--ease);align-items:center;gap:4px;padding:3px 10px;font-size:11px;display:inline-flex}.schedule-card-actions .btn-sm:hover{background:var(--bg-active)}.schedule-card-actions .btn-sm.chat{color:var(--accent-blue);border-color:var(--accent-blue)}.schedule-card-actions .btn-sm.chat:hover{background:color-mix(in srgb, var(--accent-blue) 10%, transparent)}.schedule-card-actions .btn-sm.danger{color:var(--accent);border-color:var(--accent)}.schedule-card-actions .btn-sm.danger:hover{background:color-mix(in srgb, var(--danger) 10%, transparent)}.schedule-results{border-top:1px solid var(--border);margin-top:16px;padding-top:14px}.schedule-results h4{font-size:var(--fs-label);color:var(--text-muted);margin-bottom:10px;font-weight:700}.schedule-results-list{flex-direction:column;gap:6px;max-height:200px;display:flex;overflow-y:auto}.schedule-result-item{border-radius:var(--radius-sm);background:var(--bg-tertiary);padding:8px 10px;font-size:12px}.schedule-result-time{color:var(--text-muted);font-family:var(--font-sans);font-size:var(--fs-caption);font-variant-numeric:tabular-nums;margin-bottom:4px}.schedule-result-content{color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:60px;overflow-y:auto}.schedule-result-error{color:var(--accent)}.schedule-results-empty{color:var(--text-muted);text-align:center;padding:12px;font-size:12px}.schedule-nl-input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-input);width:100%;color:var(--text-primary);font-size:13px;font-family:var(--font-sans);resize:vertical;min-height:50px;padding:10px 12px}.schedule-nl-input:focus{border-color:var(--accent);outline:none}.schedule-nl-input::placeholder{color:var(--text-muted)}.schedule-parsed-preview{border-radius:var(--radius-sm);border:1px solid var(--border-light);background:var(--bg-tertiary);padding:10px 12px;font-size:12px}.schedule-parsed-preview.valid{border-color:var(--accent-green);background:color-mix(in srgb, var(--accent-green) 5%, transparent)}.schedule-parsed-preview.invalid{border-color:var(--accent);background:color-mix(in srgb, var(--danger) 5%, transparent)}.schedule-parsed-loading{color:var(--text-muted);font-style:italic}.schedule-parsed-description{color:var(--text-primary);margin-bottom:4px;font-weight:600}.schedule-parsed-hint{color:var(--text-secondary);margin-bottom:4px}.schedule-parsed-next{color:var(--text-secondary);margin-bottom:6px;font-size:11px}.schedule-parsed-details{flex-wrap:wrap;gap:8px;display:flex}.schedule-parsed-tag{border-radius:var(--radius-sm);background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-secondary);align-items:center;gap:4px;padding:2px 8px;font-size:11px;display:inline-flex}.schedule-field-missing{box-shadow:0 0 0 1px color-mix(in srgb, var(--accent-yellow) 30%, transparent);border-color:var(--accent-yellow)!important}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,N as r,O as i,a,c as o,d as s,i as c,l,q as u,r as d,s as f,t as p}from"./useT-tWXlG-cT.js";import{n as m,t as h}from"./zap-D-WCZ6dX.js";import{ht as g}from"./api-Co-B9E0t.js";import{Nt as _,X as v,ct as y,gt as ee,mt as te,n as b,nt as x,rt as S,u as C}from"./index-CMVmIBZ8.js";var w={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`}]]};w.node;var T=n(w),E=e(u(),1),D=8e3,O={active:`schedules.status.active`,paused:`schedules.status.paused`,cancelled:`schedules.status.cancelled`};function k(e,t,n,r){if(!e)return t(`schedules.time.never`);let i=new Date(e),a=(n||new Date).getTime()-i.getTime(),o=Math.floor(a/1e3);if(o<0){let e=Math.abs(o);if(e<60)return t(`schedules.time.inSeconds`,{n:e});let n=Math.floor(e/60);if(n<60)return t(`schedules.time.inMinutes`,{n});let r=Math.floor(n/60);return r<24?t(`schedules.time.inHours`,{n:r}):t(`schedules.time.inDays`,{n:Math.floor(r/24)})}if(o<60)return t(`time.justNow`);let s=Math.floor(o/60);if(s<60)return t(`time.minutesAgo`,{n:s});let c=Math.floor(s/60);return c<24?t(`time.hoursAgo`,{n:c}):i.toLocaleDateString(r,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function A(e,t,n=d.bare,r){if(!e)return n(`schedules.time.never`);let i=k(e,n,t,r),a=new Date(e);return a.getTime()<=(t||new Date).getTime()?i:n(`schedules.time.clockIn`,{clock:a.toLocaleString(r,{weekday:`short`,hour:`numeric`,minute:`2-digit`}),relative:i})}function j(e){if(!e)return!1;let t=new Date(e).getTime()-Date.now();return t>0&&t<6e4}function M(e,t,n=0){let r=new Date(2e3,0,1,t,n);return new Intl.DateTimeFormat(p(e),{hour:`numeric`,minute:`2-digit`}).format(r)}function N(e,t){let[n,r]=e.split(`:`).map(Number);return M(t,n,r)}function P(e,t,n){let r=`${e}.${new Intl.PluralRules(n.locale).select(t)}`;return i(r)?r:null}var F=e=>e.length===5&&e.every(e=>e<5),I=e=>e.length===2&&e.includes(5)&&e.includes(6);function L(e,t,n){if(F(e))return n(`schedules.desc.days.weekdays`);if(I(e))return n(`schedules.desc.days.weekends`);if(e.length===7)return n(`schedules.desc.days.every`);let r=P(`schedules.desc.dayList`,e.length,t);return r?n(r,{days:e.map(e=>n(`schedules.dayName.${e}`)).join(n(`schedules.desc.dayJoin`))}):null}function R(e,t,n,r){let{kind:i,count:a,unit:o,days:s,time:c,start_hour:l,end_hour:u}=e,d=e=>c?n(`schedules.desc.at`,{when:e,time:N(c,r)}):e;if(i===`every`||i===`window`){let e=a&&o?P(`schedules.span.${o}`,a,t):null,c=s?L(s,t,n):void 0;if(!e||c===null)return null;let d=n(e,{n:a});if(i===`every`)return c?n(`schedules.desc.everyOn`,{span:d,days:c}):n(`schedules.desc.every`,{span:d});if(l==null||u==null)return null;let f=n(`schedules.hours`,{start:M(r,l),end:M(r,u)});return c?n(`schedules.desc.windowOn`,{span:d,hours:f,days:c}):n(`schedules.desc.window`,{span:d,hours:f})}if(i===`daily`)return c?d(n(`schedules.desc.daily`)):null;if(i!==`days`||!s?.length)return null;if(s.length===7)return d(n(`schedules.desc.daily`));if(F(s))return d(n(`schedules.desc.weekdays`));if(I(s))return d(n(`schedules.desc.weekends`));let f=L(s,t,n);return f&&d(n(`schedules.desc.onDays`,{days:f}))}function ne(e,t){return!e||R(e,t,t.bare,t)===null?null:t.compose((n,r)=>R(e,t,n,c(r))??``)}function re(e,t){return e.length===5&&!e.includes(5)&&!e.includes(6)?t(`schedules.days.weekdays`):e.length===2&&e.includes(5)&&e.includes(6)?t(`schedules.days.weekends`):e.length===7?t(`schedules.days.every`):e.map(e=>t(`schedules.day.${e}`)).join(t(`schedules.days.join`))}function z({schedule:e}){let n=a(),{selectedSchedule:i,selectSchedule:c,updateScheduleStatus:u,runScheduleNow:d,deleteSchedule:g,results:v,resultsLoading:te,loadSchedules:x,loadResults:S}=b(),{setCurrentSession:C,setShowSchedules:w}=s(),M=i===e.name,N=ne(e.description_parts,n),[P,F]=(0,E.useState)(!1),I=(0,E.useRef)(null),L=(0,E.useCallback)(()=>{I.current&&=(clearTimeout(I.current),null)},[]);(0,E.useEffect)(()=>L,[L]);let[R,re]=(0,E.useState)(()=>new Date),z=(0,E.useRef)(null);(0,E.useEffect)(()=>{let t=e.status===`active`&&j(e.next_run_at);return t&&!z.current?z.current=setInterval(()=>{re(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&x()},1e3):!t&&z.current&&(clearInterval(z.current),z.current=null),()=>{z.current&&=(clearInterval(z.current),null)}},[e.status,e.next_run_at,x]);let B=(0,E.useRef)(e.last_run_at);(0,E.useEffect)(()=>{M&&e.last_run_at!==B.current&&(B.current=e.last_run_at,S(e.name))},[M,e.last_run_at,e.name,S]);let V=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,H=(0,E.useCallback)(n=>{n.stopPropagation();let r=e.status===`active`?`paused`:`active`;t.ui.info(`Schedule "${e.name}": ${e.status} -> ${r}`),u(e.name,r)},[e.name,e.status,u]),U=(0,E.useCallback)(n=>{n.stopPropagation(),t.ui.info(`Schedule "${e.name}": run now`),d(e.name)},[e.name,d]),W=(0,E.useCallback)(n=>{n.stopPropagation(),L(),P?(t.ui.info(`Deleting schedule "${e.name}"`),g(e.name)):(F(!0),I.current=setTimeout(()=>{I.current=null,F(!1)},D))},[e.name,P,g,L]),G=(0,E.useCallback)(n=>{n.stopPropagation(),e.session_id&&(t.ui.info(`Opening chat session for schedule "${e.name}"`),C(e.session_id),w(!1))},[e.session_id,e.name,C,w]);return l(`div`,{className:`schedule-card ${M?`selected`:``} ${V?`just-ran`:``}`,onClick:()=>c(M?null:e.name),children:[l(`div`,{className:`schedule-card-header`,children:[o(`span`,{className:`schedule-card-name`,dir:`auto`,children:e.name}),o(`span`,{className:`schedule-card-status ${e.status}`,children:n(O[e.status])})]}),o(`div`,{className:`schedule-card-prompt`,dir:`auto`,children:e.prompt}),l(`div`,{className:`schedule-card-meta`,children:[l(`span`,{title:r(N??e.description),children:[o(_,{size:11}),` `,N??o(`bdi`,{children:e.description})]}),o(`span`,{children:n(`schedules.card.runs`,{n:e.run_count})}),e.error_count>0&&o(`span`,{children:n(`schedules.card.errors`,{n:e.error_count})}),o(`span`,{children:n.compose(t=>t(`schedules.card.last`,{when:k(e.last_run_at,t,void 0,p(n))}))}),o(`span`,{children:n.compose(t=>t(`schedules.card.next`,{when:A(e.next_run_at,R,t,p(n))}))})]}),e.last_error&&o(`div`,{className:`schedule-card-error`,children:n(`schedules.card.lastFailed`,{error:e.last_error})}),l(`div`,{className:`schedule-card-actions`,children:[e.session_id&&l(`button`,{className:`btn-sm chat`,onClick:G,title:n(`schedules.card.openChatTitle`),children:[o(m,{size:11}),` `,n(`schedules.card.openChat`)]}),l(`button`,{className:`btn-sm`,onClick:U,disabled:e.running,title:n(`schedules.card.runNowTitle`),children:[o(h,{size:11}),` `,n(e.running?`schedules.card.running`:`schedules.card.runNow`)]}),o(`button`,{className:`btn-sm`,onClick:H,title:n(e.status===`active`?`schedules.card.pause`:`schedules.card.resume`),children:e.status===`active`?l(f.Fragment,{children:[o(ee,{size:11}),` `,n(`schedules.card.pause`)]}):l(f.Fragment,{children:[o(T,{size:11}),` `,n(`schedules.card.resume`)]})}),l(`button`,{className:`btn-sm danger`,onClick:W,title:n(`schedules.card.delete`),children:[o(y,{size:11}),` `,n(P?`schedules.card.confirmDelete`:`schedules.card.delete`)]})]}),M&&l(`div`,{className:`schedule-results`,children:[o(`h4`,{children:n(`schedules.history`)}),te?o(`p`,{className:`schedule-results-empty`,children:n(`schedules.historyLoading`)}):v.length===0?o(`p`,{className:`schedule-results-empty`,children:n(`schedules.historyEmpty`)}):o(`div`,{className:`schedule-results-list`,children:v.map(e=>l(`div`,{className:`schedule-result-item`,children:[o(`div`,{className:`schedule-result-time`,children:n.compose(t=>k(e.executed_at,t,void 0,p(n)))}),e.error?o(`div`,{className:`schedule-result-content schedule-result-error`,children:o(`bdi`,{children:e.error})}):o(`div`,{className:`schedule-result-content`,children:e.result?o(`bdi`,{children:e.result}):n(`schedules.noOutput`)})]},e.id))})]})]})}function B(){let e=a(),{setShowSchedules:n}=s(),{schedules:r,loading:i,error:u,actionError:d,loadSchedules:m,createSchedule:h,dismissActionError:y}=b(),ee=(0,E.useCallback)(()=>n(!1),[n]);x(!0,ee);let w=(0,E.useRef)(null);v(w,!0),C(w,!0);let[T,D]=(0,E.useState)(!1),[O,k]=(0,E.useState)(``),[A,j]=(0,E.useState)(``),[P,F]=(0,E.useState)(``),[I,L]=(0,E.useState)(null),[R,B]=(0,E.useState)(!1),[V,H]=(0,E.useState)(!1),[U,W]=(0,E.useState)(null),G=(0,E.useId)(),K=`${G}-when`,q=`${G}-when-error`,J=`${G}-name`,Y=`${G}-prompt`,X=!R&&I!==null&&!I.valid,Z=(0,E.useRef)(null);(0,E.useEffect)(()=>{if(!O.trim())L(null);else return Z.current&&clearTimeout(Z.current),Z.current=window.setTimeout(async()=>{B(!0);try{let e=await g(O);L(e)}catch{L(null)}finally{B(!1)}},400),()=>{Z.current&&clearTimeout(Z.current)}},[O]);let Q=(0,E.useRef)(null);(0,E.useEffect)(()=>(t.ui.info(`Schedule Manager opened`),m(),Q.current=window.setInterval(()=>m(),5e3),()=>{Q.current&&clearInterval(Q.current),y()}),[m,y]);let $=O.trim()&&A.trim()&&P.trim()&&(I===null||I.valid),ie=(0,E.useCallback)(async()=>{if($){H(!0),W(null);try{await h(A.trim(),O.trim(),P.trim()),k(``),j(``),F(``),L(null),D(!1),t.ui.info(`Schedule "${A}" created`)}catch(t){W(t instanceof Error?t.message:e(`schedules.createFailed`))}finally{H(!1)}}},[$,A,O,P,h,e]);return o(`div`,{ref:w,className:`modal-overlay`,onClick:()=>n(!1),role:`dialog`,"aria-modal":`true`,"aria-label":e(`schedules.title`),children:l(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[l(`div`,{className:`modal-header`,children:[o(`h3`,{children:e(`schedules.title`)}),o(`button`,{className:`btn-icon`,onClick:()=>n(!1),"aria-label":e(`schedules.close`),children:o(S,{size:18})})]}),l(`div`,{className:`modal-body`,children:[o(`section`,{className:`schedule-section`,children:T?l(`div`,{className:`schedule-create-form`,children:[l(`div`,{className:`schedule-field`,children:[o(`label`,{className:`schedule-field-label`,htmlFor:K,children:e(`schedules.when`)}),o(`textarea`,{id:K,className:`schedule-nl-input`,placeholder:e.bare(`schedules.whenPlaceholder`),value:O,onChange:e=>k(e.target.value),"aria-invalid":X,"aria-describedby":X?q:void 0,autoFocus:!0,rows:2})]}),(I||R)&&o(`div`,{className:`schedule-parsed-preview ${I?.valid?`valid`:`invalid`}`,"aria-live":`polite`,children:R?o(`span`,{className:`schedule-parsed-loading`,children:e(`schedules.parsing`)}):I?l(f.Fragment,{children:[I.valid?o(`div`,{className:`schedule-parsed-description`,children:ne(I.description_parts,e)??o(`bdi`,{children:I.description})}):l(`div`,{id:q,children:[o(`div`,{className:`schedule-parsed-description`,children:e(`schedules.notUnderstood`)}),o(`div`,{className:`schedule-parsed-hint`,children:o(`bdi`,{children:I.description})})]}),I.valid&&I.next_run_at&&o(`div`,{className:`schedule-parsed-next`,children:e(`schedules.nextRun`,{when:new Date(I.next_run_at).toLocaleString(p(e))})}),I.valid&&l(`div`,{className:`schedule-parsed-details`,children:[I.time_of_day&&l(`span`,{className:`schedule-parsed-tag`,children:[o(_,{size:10}),` `,N(I.time_of_day,e)]}),I.start_hour!=null&&I.end_hour!=null&&l(`span`,{className:`schedule-parsed-tag`,children:[o(_,{size:10}),` `,e.compose((e,t)=>e(`schedules.hours`,{start:M(c(t),I.start_hour),end:M(c(t),I.end_hour)}))]}),I.days_of_week&&o(`span`,{className:`schedule-parsed-tag`,children:e.compose(e=>re(I.days_of_week,e))})]})]}):null}),l(`div`,{className:`schedule-field`,children:[o(`label`,{className:`schedule-field-label`,htmlFor:J,children:e(`schedules.name`)}),o(`div`,{className:`schedule-form-row`,children:o(`input`,{id:J,type:`text`,placeholder:e(`schedules.namePlaceholder`),value:A,onChange:e=>j(e.target.value),className:!A.trim()&&O.trim()?`schedule-field-missing`:``})})]}),l(`div`,{className:`schedule-field`,children:[o(`label`,{className:`schedule-field-label`,htmlFor:Y,children:e(`schedules.prompt`)}),o(`textarea`,{id:Y,className:`schedule-prompt-input ${!P.trim()&&O.trim()?`schedule-field-missing`:``}`,placeholder:e(`schedules.promptPlaceholder`),value:P,onChange:e=>F(e.target.value)})]}),U&&o(`p`,{className:`schedule-form-error`,children:o(`bdi`,{children:U})}),l(`div`,{className:`schedule-create-actions`,children:[o(`button`,{className:`btn-secondary`,onClick:()=>{D(!1),W(null),L(null),k(``),j(``),F(``)},children:e(`schedules.cancel`)}),o(`button`,{className:`btn-primary`,onClick:ie,disabled:!$||V,children:e(V?`schedules.creating`:`schedules.create`)})]})]}):l(`button`,{className:`btn-primary`,onClick:()=>D(!0),children:[o(te,{size:14}),` `,e(`schedules.new`)]})}),l(`section`,{className:`schedule-section`,children:[o(`h4`,{children:e(`schedules.list`)}),d&&l(`div`,{className:`schedule-action-error`,role:`alert`,children:[o(`span`,{children:o(`bdi`,{children:d})}),o(`button`,{className:`btn-icon`,onClick:y,"aria-label":e(`schedules.dismissError`),children:o(S,{size:14})})]}),i?o(`p`,{className:`schedule-empty`,children:e(`schedules.loading`)}):u?o(`p`,{className:`schedule-empty`,children:e(`schedules.loadFailed`)}):r.length===0?o(`p`,{className:`schedule-empty`,children:e(`schedules.empty`)}):o(`div`,{className:`schedule-list`,children:r.map(e=>o(z,{schedule:e},e.id))})]})]})]})})}export{B as ScheduleManager};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{F as e,o as t}from"./useT-tWXlG-cT.js";var n=`gaia:draft:`,r=e=>`chat:${e}`,i=`new-chat`;function a(t){try{return localStorage.getItem(n+t)??``}catch(n){return e.ui.warn(`Couldn't read the saved draft for ${t}`,n),``}}function o(t,r){try{r?localStorage.setItem(n+t,r):localStorage.removeItem(n+t)}catch(n){e.ui.warn(`Couldn't save the draft for ${t}`,n)}}function s(e){o(e,``)}function c(e){if(!(e instanceof L)||e.httpStatus!==409||!e.body)return null;let{code:t,acknowledge:n}=e.body;return(t===`no_fit`||t===`low_disk`)&&typeof n==`string`?e.body:null}async function l(){return V(`GET`,`/onboarding/preflight`)}async function u(e=!1){return V(`GET`,`/setup/check?skip_chat_model=${e}`)}async function d(e,t=!1,n={}){return V(`POST`,`/setup/run`,{skip_chat_model:e,gaia_lemonade:t,acknowledge_low_disk:!!n.acknowledgeLowDisk,keep_trying:!!n.keepTrying,extra_models:n.extraModels??[],server_only:!!n.serverOnly,upgrade_embedded:!!n.upgradeEmbedded})}async function f(e){return V(`POST`,`/setup/cancel`,e?{model_id:e}:void 0)}async function p(e,t){return V(`POST`,`/setup/models/skip`,{model_id:e,skipped:t})}async function m(e,t={}){return V(`POST`,`/setup/models/download`,{model_id:e,acknowledge_low_disk:!!t.acknowledgeLowDisk,keep_trying:!!t.keepTrying})}async function h(e){return V(`POST`,`/setup/models/remove`,{model_id:e})}async function g(){return V(`GET`,`/setup/status`)}async function ee(){return V(`GET`,`/setup/plan`)}async function te(e,t=!1){return V(`POST`,`/setup/chat-model`,{model_id:e,acknowledge_no_fit:t})}async function ne(){return V(`POST`,`/setup/npu/recheck`)}async function re(){return V(`POST`,`/setup/npu/memlock-fix`)}async function ie(e){return V(`POST`,`/setup/vision-model`,{model_id:e})}async function ae(e){return V(`GET`,`/setup/needs/${e}`)}async function oe(e){return V(`GET`,e==null?`/gpu-memory`:`/gpu-memory?setting_gb=${e}`)}async function se(e){return V(`POST`,`/gpu-memory/apply`,{setting_gb:e,confirm:!0})}async function ce(){return V(`POST`,`/gpu-memory/revert`,{confirm:!0})}async function le(e){return V(`POST`,`/gpu-memory/pending`,{setting_gb:e})}async function ue(){return V(`DELETE`,`/gpu-memory/pending`)}async function de(){return V(`GET`,`/onboarding/start`)}async function fe(){return V(`POST`,`/setup/report`)}async function pe(e){let n=await fetch(`${t()}/setup/report/${encodeURIComponent(e)}`,{headers:B});if(!n.ok)throw new L(`Couldn't read the report (HTTP ${n.status}).`,n.status,await n.text().catch(()=>``),null);return n.blob()}async function me(){return V(`GET`,`/connectors`)}async function he(e){return V(`GET`,`/connectors/${e}`)}async function ge(e,t,n=[]){return V(`POST`,`/connectors/${e}/authorize`,{scopes:t,grant_agents:n},B)}async function _e(e,t,n=[]){return V(`POST`,`/connectors/${e}/authorize-device`,{scopes:t,grant_agents:n},B)}async function ve(e,t){return V(`POST`,`/connectors/${e}/configure`,{config:t},B)}async function ye(e){await V(`DELETE`,`/connectors/${e}`,void 0,B)}async function be(e){return V(`POST`,`/connectors/${e}/enable`,{},B)}async function _(e){return V(`POST`,`/connectors/${e}/disable`,{},B)}async function v(){return V(`GET`,`/connectors/agent-mcps`)}async function y(e){return V(`GET`,`/connectors/${e}/grants`)}async function b(e,t,n){await V(`PUT`,`/connectors/${e}/grants/${encodeURIComponent(t)}`,{scopes:n},B)}async function x(e,t){await V(`DELETE`,`/connectors/${e}/grants/${encodeURIComponent(t)}`,void 0,B)}async function S(e){return V(`GET`,`/connectors/${e}/activations`)}async function C(e,t,n){return V(`PUT`,`/connectors/${e}/activations/${encodeURIComponent(t)}`,n?{scopes:n}:{},B)}async function w(e,t){await V(`DELETE`,`/connectors/${e}/activations/${encodeURIComponent(t)}`,void 0,B)}async function T(e){return V(`POST`,`/chat/cancel`,{session_id:e})}async function E(e,t){return V(`POST`,`/chat/followup`,{session_id:e,text:t})}async function D(e){return V(`GET`,`/chat/followup/${encodeURIComponent(e)}`)}async function O(e){return V(`GET`,`/chat/context/${encodeURIComponent(e)}`)}async function k(e){return V(`GET`,`/chat/performance/${encodeURIComponent(e)}`)}async function A(e,t,n){return V(`POST`,`/chat/retry-with`,{session_id:e,message_id:t,model:n})}async function j(e,t,n){return V(`POST`,`/chat/retry-with/choose`,{session_id:e,message_id:t,keep:n})}async function M(){return V(`GET`,`/chat/active`)}async function N(e,t,n={}){return V(`POST`,`/chat/confirm-tool`,{session_id:e,approved:t,always:n.always??!1,...n.confirmId?{confirm_id:n.confirmId}:{}})}async function xe(e,t,n){return V(`POST`,`/chat/user-input`,{session_id:e,request_id:t,value:n})}async function Se(e){return V(`GET`,`/chat/permissions/${encodeURIComponent(e)}`)}async function Ce(){return V(`GET`,`/chat/permissions`)}async function we(e){return V(`PUT`,`/chat/permissions`,{mode:e})}async function Te(e,t){return V(`PUT`,`/chat/permissions/${encodeURIComponent(e)}`,{mode:t})}async function Ee(e,t){let n=t?`?key=${encodeURIComponent(t)}`:``;return V(`DELETE`,`/chat/permissions/${encodeURIComponent(e)}/grants${n}`)}var P=t();function F(e){try{let t=JSON.parse(e).detail;return Array.isArray(t)?t.map(e=>e?.msg??JSON.stringify(e)).join(`; `)||e:t&&typeof t==`object`&&typeof t.message==`string`?t.message:t&&typeof t!=`string`?JSON.stringify(t):t||e}catch{return e}}function I(e){try{let t=JSON.parse(e).detail?.status;return typeof t==`string`?t:null}catch{return null}}function De(e){try{let t=JSON.parse(e).detail;return Array.isArray(t)?t.map(e=>Array.isArray(e?.loc)?e.loc[e.loc.length-1]:void 0).filter(e=>typeof e==`string`):[]}catch{return[]}}function Oe(e){try{let t=JSON.parse(e).detail;return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}var L=class extends Error{httpStatus;detail;reason;fields;body;constructor(e,t,n,r,i=[],a=null){super(e),this.name=`ApiError`,this.httpStatus=t,this.detail=n,this.reason=r,this.fields=i,this.body=a}};function R(e){return e.trim().toLowerCase()===`internal server error`}function ke(e){let t=e.trim();return t!==``&&!R(t)&&!/^[<{[]/.test(t)}function z(e,t){switch(e){case 403:return t||`Access denied.`;case 404:return t||`The requested item was not found.`;case 413:return t||`File too large to process.`;case 500:return ke(t)?t:`Server error. Please try again.`;case 502:return`Service unavailable. Is the backend running?`;case 503:return t||`Service unavailable.`;default:return t||`Request failed (HTTP ${e})`}}var B={"x-gaia-ui":`1`,"x-gaia-client":`agent-ui`},Ae=/key|token|secret|password/i;function je(e){return!e||typeof e!=`object`||Array.isArray(e)?e:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Ae.test(e)&&typeof t==`string`&&t?`***`:t]))}async function V(t,n,r,i,a){let o=`${P}${n}`,s=e.api.time();e.api.info(`${t} ${o}`,r===void 0?``:{body:je(r)});let c=r===void 0?{}:{"Content-Type":`application/json`},l={method:t,headers:{...B,...i,...c},body:r===void 0?void 0:JSON.stringify(r),signal:a},u;try{u=await fetch(o,l)}catch(n){throw e.api.error(`${t} ${o} - network error`,n),n}if(!u.ok){let n=await u.text().catch(()=>``);e.api.error(`${t} ${o} - HTTP ${u.status}`,{errorText:n});let r=F(n);throw new L(z(u.status,r),u.status,r,I(n),De(n),Oe(n))}let d=u.headers.get(`content-type`)||``;if(!d.includes(`application/json`)){let r=await u.text().catch(()=>``);if(u.status===204||r.trim()===``){e.api.timed(`${t} ${o} -> ${u.status} (no body)`,s);return}throw e.api.error(`${t} ${o} -> ${u.status} (non-JSON body)`,{contentType:d,preview:r.slice(0,200)}),Error(`${t} ${n}: expected JSON, got ${d||`no Content-Type`} (HTTP ${u.status}: ${r.slice(0,120)})`)}let f=await u.json();return e.api.timed(`${t} ${o} -> ${u.status}`,s,f),f}async function Me(e){return V(`GET`,`/system/status`,void 0,void 0,e)}async function Ne(){return V(`POST`,`/system/warm-up`)}async function Pe(){return V(`GET`,`/system/warm-up`)}async function Fe(){return V(`GET`,`/system/model-server`)}async function Ie(e){return V(`PUT`,`/system/model-server/backend`,{backend:e})}async function Le(){return V(`GET`,`/settings`)}async function Re(e){return V(`PUT`,`/settings`,e)}async function H(e,t,n=!1){return V(`POST`,`/system/load-model`,{model_name:e,ctx_size:t,force:n})}async function ze(e,t,n=e=>window.confirm(e)){try{return await H(e,t),!0}catch(r){if(!(r instanceof L)||r.httpStatus!==409)throw r;return n(`${r.detail}
|
|
2
|
+
|
|
3
|
+
Load ${e} anyway?`)?(await H(e,t,!0),!0):!1}}async function Be(e,t=!1){return V(`POST`,`/system/download-model`,{model_name:e,force:t})}async function Ve(){return V(`GET`,`/agents`)}async function He(e){return V(`POST`,`/agents/install`,{id:e})}async function Ue(e){return V(`GET`,`/agents/${encodeURIComponent(e)}/install-status`)}async function We(){return V(`GET`,`/lemonade/target`)}async function Ge(){return V(`GET`,`/lemonade/detect`)}async function Ke(e){try{return await V(`POST`,`/lemonade/target`,e)}catch(e){throw e instanceof L&&e.httpStatus===502&&e.detail?new L(e.detail,e.httpStatus,e.detail,e.reason,e.fields):e}}async function qe(){return V(`GET`,`/providers`)}async function Je(){return V(`GET`,`/providers/active`)}async function Ye(e,t){return V(`POST`,`/providers/${encodeURIComponent(e)}/connect`,t)}var Xe=2e3;async function Ze(e,t,n,r=()=>!1){for(;;)try{return await Ye(e,t)}catch(e){if(!(e instanceof L)||e.httpStatus!==409||r())throw e;n(e.detail),await new Promise(e=>setTimeout(e,Xe))}}async function Qe(e){return V(`DELETE`,`/providers/${encodeURIComponent(e)}/key`)}async function $e(e){return V(`GET`,`/providers/${encodeURIComponent(e)}/models`)}async function et(e){return V(`GET`,`/providers/local/context?model=${encodeURIComponent(e)}`)}async function tt(e,t){return V(`PUT`,`/providers/local/context`,{model:e,ctx_size:t})}async function nt(){return V(`GET`,`/providers/local/status`)}async function rt(e=!1){return V(`POST`,`/providers/local/restart`,{confirm:e})}async function it(e){return V(`POST`,`/providers/select`,{model:e})}async function at(e,t){return V(`POST`,`/providers/local/custom/check`,{url:e,quant:t||null})}async function ot(e,t){return V(`POST`,`/providers/local/custom`,{url:e,quant:t||null})}async function st(e){return V(`DELETE`,`/providers/local/custom/${encodeURIComponent(e)}`)}async function ct(e){return V(`GET`,`/spending/prices/${encodeURIComponent(e)}`)}async function lt(){return V(`GET`,`/spending`)}async function ut(e){return V(`PUT`,`/spending/limit`,{limit_usd:e})}async function dt(){return V(`POST`,`/spending/allow-month`)}async function ft(){return V(`GET`,`/skills`)}async function pt(){let e=new Map,t=0;for(let n=0;;n+=200){let r=await V(`GET`,`/sessions?limit=200&offset=${n}`);t=r.total;for(let t of r.sessions)e.has(t.id)||e.set(t.id,t);if(r.sessions.length<200||n+200>=t)break}return{sessions:[...e.values()],total:t}}async function mt(e={}){return V(`POST`,`/sessions`,e)}async function ht(e,t){return V(`PUT`,`/sessions/${e}`,t)}async function gt(e){await V(`DELETE`,`/sessions/${e}`),s(r(e))}async function _t(e){return V(`GET`,`/sessions/${e}`)}async function vt(e,t){return V(`PUT`,`/sessions/${e}/pin`,{pinned:t})}async function yt(e,t,n){return V(`GET`,`/sessions/search?${new URLSearchParams({q:e,include_automated:String(t)})}`,void 0,void 0,n)}async function bt(e){return V(`POST`,`/sessions/${e}/read`)}async function xt(e){return V(`PATCH`,`/sessions/${e}/private`)}async function St(e){let{total:t}=await V(`GET`,`/sessions/${e}/messages?limit=1&offset=0`);return t}async function Ct(e){let t=`/sessions/${e}/messages`,n=await V(`GET`,`${t}?limit=100&offset=0`),r=[...n.messages],i=n.total;for(;r.length<i;){let e=await V(`GET`,`${t}?limit=${Math.min(100,i-r.length)}&offset=${r.length}`);if(e.messages.length===0)throw Error(`Incomplete transcript received. Please reload the conversation.`);r.push(...e.messages)}return{messages:r,total:i}}async function wt(e){return V(`GET`,`/sessions/${e}/export?format=markdown`)}async function Tt(e,t){return V(`DELETE`,`/sessions/${e}/messages/${t}`)}async function Et(e,t){return V(`DELETE`,`/sessions/${e}/messages/${t}/and-below`)}var Dt=new Set([`status`,`step`,`thinking`,`commentary`,`plan`,`tool_start`,`tool_end`,`tool_result`,`tool_args`,`tool_confirm`,`agent_error`,`permission_request`,`needs_confirmation`,`needs_input`,`policy_alert`,`followup_taken`,`followup_returned`,`followup_unavailable`,`context_usage`]);function Ot(t,n,r,i,a,o,s){let c;c=typeof r==`function`?{onChunk:r,onAgentEvent:()=>{},onDone:i||(()=>{}),onError:a||(t=>{e.stream.error(`Unhandled stream error`,t)})}:r;let l=new AbortController,u=e.stream.time();e.stream.info(`Starting SSE stream for session=${t}`,{messageLength:n.length});let d=Y(l,c,U,jt);return fetch(`${P}/chat/send`,{method:`POST`,headers:{...B,"Content-Type":`application/json`},body:JSON.stringify({session_id:t,message:n,stream:!0,...o?{agent_type:o}:{},...s?{device:s}:{}}),signal:l.signal}).then(e=>(d.received(),d.connected(),X(e,c,u,{silentCloseIsError:!0}))).catch(t=>{d.received(),d.timedOut()?(e.stream.error(`No answer to /chat/send within ${U/1e3}s`),c.onError(new J(`send`,U))):t.name===`AbortError`?e.stream.warn(`Stream aborted by user`):(e.stream.error(`Stream fetch error`,t),c.onError(t))}),l}var kt=3e4,At=6e5,U=9e4,jt=3e3,W=`Waiting for GAIA to start this answer…`,G=3e4,K=class extends Error{idleMs;constructor(e){super(`The connection to GAIA went silent for ${Math.round(e/1e3)} s.`),this.idleMs=e,this.name=`StreamStalledError`}},q=class extends Error{cause;unreachable;constructor(e,t=!1){super(`The connection to GAIA was cut: ${e instanceof Error?e.message:String(e)}`),this.cause=e,this.unreachable=t,this.name=`StreamDroppedError`}},J=class extends Error{endpoint;timeoutMs;constructor(e,t){super(`GAIA did not start answering within ${Math.round(t/1e3)} s.`),this.endpoint=e,this.timeoutMs=t,this.name=`StreamTimeoutError`}};function Y(e,t,n,r){let i=!1,a=r===void 0?void 0:setTimeout(()=>{t.onAgentEvent({type:`status`,status:`working`,phase:`waiting`,message:W})},r),o=setTimeout(()=>{i=!0,e.abort()},n),s=!1;return{received:()=>{clearTimeout(a),clearTimeout(o)},connected:()=>{s||(s=!0,t.onConnected?.())},timedOut:()=>i}}async function Mt(e,t){let n,r=new Promise((e,r)=>{n=setTimeout(()=>r(new K(t)),t)});try{return await Promise.race([e.read(),r])}finally{clearTimeout(n)}}async function X(t,n,r,{silentCloseIsError:i=!1}={}){if(e.stream.info(`SSE connection opened -> HTTP ${t.status}`),!t.ok){let r=await t.text().catch(()=>``);e.stream.error(`SSE connection failed: HTTP ${t.status}`,r);let i=F(r),a=i&&!R(i)?i:z(t.status,i);n.onError(new L(a,t.status,i,I(r)));return}let a=t.body?.getReader();if(!a){e.stream.error(`No response body reader available`),n.onError(Error(`No response body`));return}let o=new TextDecoder,s=``,c=!1,l=0,u=0,d=0,f=!1,p=!1,m=!1;try{for(;;){let t;try{t=await Mt(a,f?At:kt)}catch(t){if(t?.name===`AbortError`)throw t;if(!(t instanceof K)){if(e.stream.error(`SSE connection cut mid-stream`,t),c||p)return;if(m)break;throw new q(t)}if(e.stream.error(`SSE stream silent for ${t.idleMs/1e3}s; dropping the connection`),await a.cancel().catch(t=>e.stream.warn(`Could not cancel the stalled stream`,t)),c||p)return;if(m)break;throw t}let{done:i,value:h}=t;if(i){e.stream.debug(`SSE reader done (stream ended)`);break}s+=o.decode(h,{stream:!0});let g=s.split(`
|
|
4
|
+
`);s=g.pop()||``;for(let t of g)if(t.startsWith(`data: `)){let i=t.slice(6).trim();if(!i)continue;try{let t=JSON.parse(i);if(f=t.type===`status`&&t.phase===`queued`,t.type===`chunk`)l++,u+=(t.content||``).length,(l<=3||l%50==0)&&e.stream.debug(`Chunk #${l} (+${(t.content||``).length} chars)`),n.onChunk(t);else if(t.type===`answer`)n.onChunk(t);else if(t.type===`done`)c=!0,e.stream.timed(`Stream complete: ${l} chunks, ${u} chars, ${d} agent events`,r),n.onDone(t);else if(t.type===`error`)e.stream.error(`Stream error event:`,t.content),p=!0,n.onError(Error(t.content||`Unknown error`));else if(t.type===`agent_created`)e.stream.info(`Agent created: ${t.agent_id}`),n.onAgentCreated?.(t);else if(t.type===`mcp_status`){let n=t.servers??[];e.stream.debug(`MCP status: ${n.length} server(s)`,n);for(let t of n)t.connected||e.stream.warn(`MCP server "${t.name}" is not connected: ${t.error??`no error reported`}`)}else Dt.has(t.type)?(d++,t.type===`agent_error`&&!t.recoverable&&(m=!0),e.stream.debug(`Agent event: ${t.type}`,t),n.onAgentEvent(t)):e.stream.warn(`Unknown SSE event type: ${t.type}`,t)}catch{e.stream.warn(`Malformed SSE data, skipping`,{raw:i.slice(0,100)})}}}}finally{a.releaseLock()}if(!c){if(e.stream.timed(`SSE connection closed without done event: ${l} chunks, ${d} agent events`,r),i&&l===0&&d===0&&!p){n.onError(Error(`GAIA closed the connection before any answer arrived. Send the message again; if it keeps happening, check the GAIA server log.`));return}n.onDone({type:`done`})}}function Nt(t,n){let r=new AbortController,i=e.stream.time();e.stream.info(`Attaching to background run for session=${t}`);let a=Y(r,n,G);return fetch(`${P}/chat/attach?session_id=${encodeURIComponent(t)}`,{method:`GET`,signal:r.signal}).then(r=>{if(a.received(),a.connected(),r.status===404)e.stream.info(`Run for session=${t} finished before the attach`),n.onDone({type:`done`,content:``});else return X(r,n,i)}).catch(t=>{a.received(),a.timedOut()?(e.stream.error(`No answer to /chat/attach within ${G/1e3}s`),n.onError(new J(`attach`,G))):t.name===`AbortError`?e.stream.warn(`Run attach detached by client`):t instanceof TypeError?(e.stream.error(`Run attach could not connect`,t),n.onError(new q(t,!0))):(e.stream.error(`Run attach fetch error`,t),n.onError(t))}),r}async function Pt(){return V(`GET`,`/documents`)}async function Ft(e){return V(`POST`,`/documents/upload-path`,{filepath:e})}async function It(t){let n=`${P}/documents/upload`,r=e.api.time();e.api.info(`POST ${n}`,{fileName:t.name,size:t.size});let i=new FormData;i.append(`file`,t);let a;try{a=await fetch(n,{method:`POST`,headers:B,body:i})}catch(t){throw e.api.error(`POST ${n} - network error`,t),t}if(!a.ok){let t=await a.text().catch(()=>``);e.api.error(`POST ${n} - HTTP ${a.status}`,{errorText:t});let r=F(t);throw new L(z(a.status,r),a.status,r,I(t))}let o=await a.json();return e.api.timed(`POST ${n} -> ${a.status}`,r,o),o}async function Lt(e){return V(`DELETE`,`/documents/${e}`)}async function Rt(e){return V(`GET`,`/documents/${e}/status`)}function zt(e,t){let n=new URL(`${P}/documents/${encodeURIComponent(e)}/file`,window.location.href);return t&&(n.hash=`page=${t}`),n.href}async function Bt(e){return V(`POST`,`/documents/${e}/cancel`)}async function Vt(e){return V(`POST`,`/documents/${e}/reindex`)}async function Ht(e,t){return V(`POST`,`/sessions/${e}/documents`,{document_id:t})}async function Ut(e,t){return V(`DELETE`,`/sessions/${e}/documents/${t}`)}async function Wt(e){return V(`GET`,`/files/browse${e?`?path=${encodeURIComponent(e)}`:``}`)}async function Gt(e,t=!0){return V(`POST`,`/documents/index-folder`,{folder_path:e,recursive:t})}async function Kt(e,t=!0){return V(`POST`,`/files/open`,{path:e,reveal:t})}async function qt(e){return V(`POST`,`/files/open`,{path:e,launch:!0})}async function Jt(e){return V(`POST`,`/files/status`,{paths:e})}async function Yt(t){let n=`${P}/files/upload`,r=e.api.time();e.api.info(`POST ${n}`,{fileName:t.name,size:t.size});let i=new FormData;i.append(`file`,t);let a=await fetch(n,{method:`POST`,headers:B,body:i});if(!a.ok){let t=await a.text().catch(()=>``);e.api.error(`POST ${n} - HTTP ${a.status}`,{errorText:t});let r=F(t);throw new L(z(a.status,r),a.status,r,I(t))}let o=await a.json();return e.api.timed(`POST ${n} -> ${a.status}`,r,o),o}async function Xt(e,t,n){let r=new URLSearchParams({query:e});return t&&r.set(`file_types`,t),n&&r.set(`max_results`,String(n)),V(`GET`,`/files/search?${r}`)}async function Zt(e,t){let n=new URLSearchParams({path:e});return t&&n.set(`lines`,String(t)),V(`GET`,`/files/preview?${n}`)}async function Qt(){return V(`POST`,`/tunnel/start`)}async function $t(){return V(`POST`,`/tunnel/stop`)}async function en(){return V(`GET`,`/tunnel/status`)}async function tn(){return V(`GET`,`/mcp/status`)}async function nn(){return V(`GET`,`/schedules`)}function Z(){return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}async function rn(e,t,n){return V(`POST`,`/schedules`,{name:e,interval:t,prompt:n,timezone:Z()})}async function an(e,t){return V(`PUT`,`/schedules/${encodeURIComponent(e)}`,{status:t})}async function on(e){return V(`POST`,`/schedules/${encodeURIComponent(e)}/run`)}async function sn(e){return V(`DELETE`,`/schedules/${encodeURIComponent(e)}`)}async function cn(e,t=20){return V(`GET`,`/schedules/${encodeURIComponent(e)}/results?limit=${t}`)}async function ln(e){return V(`POST`,`/schedules/parse`,{input:e,timezone:Z()})}async function Q(e){return V(`GET`,`/sessions/${encodeURIComponent(e)}/changes`)}async function un(e,t){return V(`GET`,`/sessions/${encodeURIComponent(e)}/changes/${encodeURIComponent(t)}/diff`)}async function dn(e,t,n=!1){return V(`POST`,`/sessions/${encodeURIComponent(e)}/changes/${encodeURIComponent(t)}/undo`,{force:n})}async function fn(){return V(`GET`,`/settings/undo`)}async function pn(e,t){return V(`PUT`,`/settings/undo`,{retention_days:e,max_mb:t})}var $=e=>`/sessions/${encodeURIComponent(e)}`;async function mn(e){return V(`GET`,`${$(e)}/environment`)}async function hn(e,t){return V(`POST`,`${$(e)}/environment/folders`,{path:t})}async function gn(e,t){return V(`POST`,`${$(e)}/environment/folders/remove`,{path:t})}async function _n(e,t){return V(`PUT`,`${$(e)}/environment/internet`,{on:t})}async function vn(e){return V(`GET`,`${$(e)}/outputs`)}async function yn(e){return V(`GET`,`${$(e)}/capabilities`)}async function bn(e){return V(`GET`,`${$(e)}/changes/total`)}async function xn(e,t=!1){return V(`POST`,`${$(e)}/changes/undo`,{force:t})}async function Sn(e){return V(`GET`,`${$(e)}/changes/git`)}async function Cn(e,t,n){return V(`POST`,`${$(e)}/changes/git/commit`,{root:t,message:n,confirmed:!0})}async function wn(e,t,n,r){return V(`POST`,`${$(e)}/changes/git/pr`,{root:t,title:n,body:r,confirmed:!0})}export{Pe as $,Ce as $t,yn as A,re as An,Ke as At,Ct as B,ce as Bn,Re as Bt,Ge as C,u as Cn,on as Ct,Qe as D,ue as Dn,Ot as Dt,wt as E,fe as En,it as Et,Jt as F,g as Fn,xt as Ft,bn as G,r as Gn,T as Gt,vn as H,p as Hn,It as Ht,We as I,de as In,xn as It,lt as J,o as Jn,M as Jt,Sn as K,s as Kn,j as Kt,nt as L,ne as Ln,dn as Lt,et as M,ae as Mn,ut as Mt,Rt as N,l as Nn,Qt as Nt,Je as O,m as On,tt as Ot,mn as P,ee as Pn,$t as Pt,fn as Q,Se as Qt,tn as R,le as Rn,an as Rt,Ut as S,f as Sn,rt as St,Be as T,ie as Tn,yt as Tt,cn as U,d as Un,Ft as Ut,Fe as V,c as Vn,pn as Vt,_t as W,i as Wn,Yt as Wt,en as X,O as Xt,Me as Y,k as Yt,un as Z,D as Zt,Lt as _,S as _n,Zt as _t,hn as a,Te as an,qe as at,sn as b,x as bn,gn as bt,Nt as c,_e as cn,ft as ct,at as d,_ as dn,bt as dt,xe as en,Gt as et,Cn as f,ye as fn,qt as ft,mt as g,v as gn,vt as gt,rn as h,b as hn,ln as ht,ot as i,we as in,$e as it,ct as j,oe as jn,Ie as jt,Ue as k,pe as kn,_n as kt,Wt as l,ve as ln,Q as lt,wn as m,he as mn,F as mt,W as n,Ee as nn,Ve as nt,dt as o,C as on,nn as ot,Ze as p,be as pn,Kt as pt,Le as q,a as qn,N as qt,J as r,E as rn,Pt as rt,Ht as s,ge as sn,pt as st,L as t,A as tn,He as tt,Bt as u,w as un,ze as ut,Tt as v,y as vn,Vt as vt,zt as w,te as wn,Xt as wt,gt as x,se as xn,Ne as xt,Et as y,me as yn,st as yt,St as z,h as zn,ht as zt};
|