@amd-gaia/agent-ui 0.25.1-rc.2 → 0.25.1-rc.6

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.
Files changed (39) hide show
  1. package/assets/tray-icon.png +0 -0
  2. package/assets/tray-icon@2x.png +0 -0
  3. package/dist/assets/AdvancedSettings-CYnPobry.js +1 -0
  4. package/dist/assets/ConnectorsPane-B8K0tacf.js +1 -0
  5. package/dist/assets/DocumentLibrary-EN6nlEF5.js +1 -0
  6. package/dist/assets/DocumentLibrary-UncZ9-L8.css +1 -0
  7. package/dist/assets/FileBrowser-D0-yZXPO.js +4 -0
  8. package/dist/assets/MemoryDashboard-CQmFGN-S.js +1 -0
  9. package/dist/assets/{MemoryDashboard-DgugVDad.css → MemoryDashboard-Mo721-BI.css} +1 -1
  10. package/dist/assets/MobileAccessModal-wAxDm2-V.js +2 -0
  11. package/dist/assets/ScheduleManager-DIlmt8V8.js +2 -0
  12. package/dist/assets/ScheduleManager-DotJl5JW.css +1 -0
  13. package/dist/assets/fraunces-latin-BwwriW9Y.woff2 +0 -0
  14. package/dist/assets/index-Cp89afuH.js +72 -0
  15. package/dist/assets/index-DePhuNij.css +1 -0
  16. package/dist/fonts-OFL.txt +101 -0
  17. package/dist/index.html +2 -2
  18. package/main.cjs +56 -61
  19. package/package.json +1 -1
  20. package/services/agent-process-manager.cjs +16 -1
  21. package/services/app-icon.cjs +29 -0
  22. package/services/backend-crash-dialog.cjs +102 -0
  23. package/services/backend-installer-progress-dialog.cjs +23 -27
  24. package/services/backend-installer.cjs +28 -12
  25. package/services/chromium-switches.cjs +29 -0
  26. package/services/port-manager.cjs +7 -2
  27. package/services/process-tree.cjs +25 -2
  28. package/services/quit-cleanup.cjs +17 -8
  29. package/dist/assets/AdvancedSettings-BsZzYCUX.js +0 -1
  30. package/dist/assets/ConnectorsPane-sXLzWlmi.js +0 -1
  31. package/dist/assets/DocumentLibrary-C8MaQVoZ.js +0 -1
  32. package/dist/assets/DocumentLibrary-Cj9MJ9yW.css +0 -1
  33. package/dist/assets/FileBrowser-DAjSQXvM.js +0 -4
  34. package/dist/assets/MemoryDashboard-CANryTDV.js +0 -1
  35. package/dist/assets/MobileAccessModal-BukNLr4c.js +0 -2
  36. package/dist/assets/ScheduleManager-GwVTsKQO.css +0 -1
  37. package/dist/assets/ScheduleManager-o_9LgcpS.js +0 -2
  38. package/dist/assets/index-B3UtHCtQ.css +0 -1
  39. package/dist/assets/index-CqsM0gYR.js +0 -71
@@ -0,0 +1,2 @@
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{n as t,o as n,s as r,u as i}from"./apiBase-y00JgRBP.js";import{Bt as a,G as o,Pt as s,a as c,rt as l,tn as u,un as d}from"./index-Cp89afuH.js";var f=e(i(),1),p=t(),m=null;function h({isOpen:t,onClose:i,onStop:h,error:g}){let[_,v]=(0,f.useState)(null),[y,b]=(0,f.useState)(!1),[x,S]=(0,f.useState)(null),C=(0,f.useRef)(null);n(t,i);let w=(0,f.useRef)(null);o(w,t);let T=(0,f.useCallback)(async()=>{try{let e=await l();return v(e),e}catch(e){return r.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,f.useEffect)(()=>{if(!t||g)return;T();let e=setInterval(async()=>{let t=await T();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[t,g,T]),(0,f.useEffect)(()=>{if(!_?.active||!_.url||!_.token||!C.current)return;let t=`${_.url}/?token=${_.token}`;r.system.info(`Generating QR code for: ${t}`),(async()=>{if(S(null),!m)try{let t=await c(()=>import(`./browser-CCrYwriZ.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);m=t.default||t}catch{r.system.error(`QR code library not available - install with: npm install qrcode`),S(`QR code unavailable on this build. Use the link below instead.`);return}let n=getComputedStyle(document.documentElement),i=n.getPropertyValue(`--text-primary`).trim(),a=n.getPropertyValue(`--bg-primary`).trim();if(!i||!a){r.system.error(`QR code skipped: --text-primary/--bg-primary did not resolve. styles/index.css must be loaded before this modal renders.`),S(`QR code unavailable — the theme did not load. Use the link below instead.`);return}try{await m.toCanvas(C.current,t,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){r.system.error(`QR code generation failed`,e),S(`QR code could not be drawn. Use the link below instead.`)}})()},[_?.active,_?.url,_?.token]);let E=(0,f.useRef)(null),D=(0,f.useCallback)(()=>{if(!_?.url||!_?.token)return;let e=`${_.url}/?token=${_.token}`;navigator.clipboard.writeText(e).then(()=>{b(!0),E.current&&clearTimeout(E.current),E.current=setTimeout(()=>b(!1),2e3)})},[_]);if((0,f.useEffect)(()=>()=>{E.current&&clearTimeout(E.current)},[]),!t)return null;let O=_?.active&&_?.url&&_?.token?`${_.url}/?token=${_.token}`:``;return(0,p.jsx)(`div`,{ref:w,className:`modal-overlay`,onClick:i,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile access`,children:(0,p.jsxs)(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[(0,p.jsxs)(`div`,{className:`modal-header`,children:[(0,p.jsxs)(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[(0,p.jsx)(a,{size:18}),`Mobile access`]}),(0,p.jsx)(`button`,{className:`btn-icon`,onClick:i,"aria-label":`Close`,children:(0,p.jsx)(s,{size:18})})]}),(0,p.jsxs)(`div`,{className:`modal-body mobile-modal-body`,children:[(0,p.jsxs)(`div`,{className:`tunnel-status`,children:[(0,p.jsx)(`span`,{className:`status-dot ${_?.active?`active`:g?`error`:`starting`}`}),(0,p.jsx)(`span`,{children:_?.active?`Tunnel active`:g?`Couldn't start mobile access`:`Starting tunnel...`}),!_?.active&&!g&&(0,p.jsx)(`span`,{className:`tunnel-spinner`})]}),g&&(0,p.jsx)(`div`,{className:`tunnel-error`,children:g}),!g&&(0,p.jsx)(`div`,{className:`qr-code-area`,children:_?.active?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(`canvas`,{ref:C,hidden:!!x}),x&&(0,p.jsx)(`div`,{className:`qr-placeholder error`,children:x})]}):(0,p.jsxs)(`div`,{className:`qr-placeholder`,children:[(0,p.jsx)(`div`,{className:`placeholder-spinner`}),(0,p.jsx)(`span`,{children:`Connecting...`})]})}),_?.active&&O&&(0,p.jsxs)(`div`,{className:`tunnel-url-area`,children:[(0,p.jsx)(`label`,{children:`Mobile URL`}),(0,p.jsxs)(`div`,{className:`tunnel-url-row`,children:[(0,p.jsx)(`input`,{type:`text`,readOnly:!0,value:O}),(0,p.jsxs)(`button`,{className:`copy-url-btn ${y?`copied`:``}`,onClick:D,title:`Copy URL`,children:[y?(0,p.jsx)(d,{size:13}):(0,p.jsx)(u,{size:13}),y?`Copied`:`Copy`]})]})]}),_?.active&&_?.publicIp&&_?.url&&!_.url.includes(`ngrok-free.app`)&&(0,p.jsxs)(`div`,{className:`tunnel-password-hint`,children:[(0,p.jsx)(`label`,{children:`Tunnel password`}),(0,p.jsx)(`div`,{className:`tunnel-password-value`,children:_.publicIp}),(0,p.jsx)(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),!g&&(0,p.jsx)(`div`,{className:`mobile-instructions`,children:(0,p.jsxs)(`ol`,{children:[(0,p.jsx)(`li`,{children:x?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),_?.url&&!_.url.includes(`ngrok-free.app`)&&(0,p.jsx)(`li`,{children:`Enter the tunnel password shown above when prompted`}),(0,p.jsx)(`li`,{children:`Chat with GAIA from your mobile device`}),(0,p.jsx)(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),(0,p.jsxs)(`div`,{className:`mobile-access-actions`,children:[_?.active&&h&&(0,p.jsx)(`button`,{className:`btn-danger`,onClick:h,title:`Close the tunnel and revoke the mobile URL`,children:`Stop tunnel`}),(0,p.jsx)(`button`,{className:`btn-secondary`,onClick:i,children:`Close`})]})]})]})})}export{h as MobileAccessModal};
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{l as t,n,o as r,s as i,u as a}from"./apiBase-y00JgRBP.js";import{t as o}from"./message-square-Dwm7y3C0.js";import{G as s,Mt as c,Pt as l,Ut as u,ct as d,n as f,nn as p,zt as m}from"./index-Cp89afuH.js";var h={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`}]]};h.node;var g=t(h),_={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`}]]};_.node;var v=t(_),y=e(a(),1),b=n(),x=8e3;function S(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 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:t,selectSchedule:n,updateScheduleStatus:r,deleteSchedule:a,results:s,resultsLoading:l,loadSchedules:u,loadResults:d}=f(),{setCurrentSession:h,setShowSchedules:_}=c(),E=t===e.name,[D,O]=(0,y.useState)(!1),k=(0,y.useRef)(null),A=(0,y.useCallback)(()=>{k.current&&=(clearTimeout(k.current),null)},[]);(0,y.useEffect)(()=>A,[A]);let[j,M]=(0,y.useState)(()=>new Date),N=(0,y.useRef)(null);(0,y.useEffect)(()=>{let t=e.status===`active`&&T(e.next_run_at);return t&&!N.current?N.current=setInterval(()=>{M(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&u()},1e3):!t&&N.current&&(clearInterval(N.current),N.current=null),()=>{N.current&&=(clearInterval(N.current),null)}},[e.status,e.next_run_at,u]);let P=(0,y.useRef)(e.last_run_at);(0,y.useEffect)(()=>{E&&e.last_run_at!==P.current&&(P.current=e.last_run_at,d(e.name))},[E,e.last_run_at,e.name,d]);let F=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,I=(0,y.useCallback)(t=>{t.stopPropagation();let n=e.status===`active`?`paused`:`active`;i.ui.info(`Schedule "${e.name}": ${e.status} -> ${n}`),r(e.name,n)},[e.name,e.status,r]),L=(0,y.useCallback)(t=>{if(t.stopPropagation(),A(),!D){O(!0),k.current=setTimeout(()=>{k.current=null,O(!1)},x);return}i.ui.info(`Deleting schedule "${e.name}"`),a(e.name)},[e.name,D,a,A]),R=(0,y.useCallback)(t=>{t.stopPropagation(),e.session_id&&(i.ui.info(`Opening chat session for schedule "${e.name}"`),h(e.session_id),_(!1))},[e.session_id,e.name,h,_]);return(0,b.jsxs)(`div`,{className:`schedule-card ${E?`selected`:``} ${F?`just-ran`:``}`,onClick:()=>n(E?null:e.name),children:[(0,b.jsxs)(`div`,{className:`schedule-card-header`,children:[(0,b.jsx)(`span`,{className:`schedule-card-name`,children:e.name}),(0,b.jsx)(`span`,{className:`schedule-card-status ${e.status}`,children:e.status})]}),(0,b.jsx)(`div`,{className:`schedule-card-prompt`,children:e.prompt}),(0,b.jsxs)(`div`,{className:`schedule-card-meta`,children:[(0,b.jsxs)(`span`,{children:[(0,b.jsx)(p,{size:11}),` `,S(e.interval_seconds)]}),(0,b.jsxs)(`span`,{children:[`Runs: `,e.run_count]}),e.error_count>0&&(0,b.jsxs)(`span`,{children:[`Errors: `,e.error_count]}),(0,b.jsxs)(`span`,{children:[`Last: `,C(e.last_run_at)]}),(0,b.jsxs)(`span`,{children:[`Next: `,w(e.next_run_at,j)]})]}),e.last_error&&(0,b.jsxs)(`div`,{className:`schedule-card-error`,children:[`Last run failed: `,e.last_error]}),(0,b.jsxs)(`div`,{className:`schedule-card-actions`,children:[e.session_id&&(0,b.jsxs)(`button`,{className:`btn-sm chat`,onClick:R,title:`Open chat session`,children:[(0,b.jsx)(o,{size:11}),` Open Chat`]}),(0,b.jsx)(`button`,{className:`btn-sm`,onClick:I,title:e.status===`active`?`Pause`:`Resume`,children:e.status===`active`?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(g,{size:11}),` Pause`]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(v,{size:11}),` Resume`]})}),(0,b.jsxs)(`button`,{className:`btn-sm danger`,onClick:L,title:`Delete`,children:[(0,b.jsx)(m,{size:11}),` `,D?`Confirm?`:`Delete`]})]}),E&&(0,b.jsxs)(`div`,{className:`schedule-results`,children:[(0,b.jsx)(`h4`,{children:`Execution history`}),l?(0,b.jsx)(`p`,{className:`schedule-results-empty`,children:`Loading...`}):s.length===0?(0,b.jsx)(`p`,{className:`schedule-results-empty`,children:`No executions yet`}):(0,b.jsx)(`div`,{className:`schedule-results-list`,children:s.map(e=>(0,b.jsxs)(`div`,{className:`schedule-result-item`,children:[(0,b.jsx)(`div`,{className:`schedule-result-time`,children:C(e.executed_at)}),e.error?(0,b.jsx)(`div`,{className:`schedule-result-content schedule-result-error`,children:e.error}):(0,b.jsx)(`div`,{className:`schedule-result-content`,children:e.result||`(no output)`})]},e.id))})]})]})}function A(){let{setShowSchedules:e}=c(),{schedules:t,loading:n,error:a,loadSchedules:o,createSchedule:m}=f(),h=(0,y.useCallback)(()=>e(!1),[e]);r(!0,h);let g=(0,y.useRef)(null);s(g,!0);let[_,v]=(0,y.useState)(!1),[x,S]=(0,y.useState)(``),[C,w]=(0,y.useState)(``),[T,A]=(0,y.useState)(``),[j,M]=(0,y.useState)(null),[N,P]=(0,y.useState)(!1),[F,I]=(0,y.useState)(!1),[L,R]=(0,y.useState)(null),z=(0,y.useId)(),B=`${z}-when`,V=`${z}-when-error`,H=`${z}-name`,U=`${z}-prompt`,W=!N&&j!==null&&!j.valid,G=(0,y.useRef)(null);(0,y.useEffect)(()=>{if(!x.trim()){M(null);return}return G.current&&clearTimeout(G.current),G.current=window.setTimeout(async()=>{P(!0);try{let e=await d(x);M(e)}catch{M(null)}finally{P(!1)}},400),()=>{G.current&&clearTimeout(G.current)}},[x]);let K=(0,y.useRef)(null);(0,y.useEffect)(()=>(i.ui.info(`Schedule Manager opened`),o(),K.current=window.setInterval(()=>o(),5e3),()=>{K.current&&clearInterval(K.current)}),[o]);let q=x.trim()&&C.trim()&&T.trim()&&(j===null||j.valid),J=(0,y.useCallback)(async()=>{if(q){I(!0),R(null);try{await m(C.trim(),x.trim(),T.trim()),S(``),w(``),A(``),M(null),v(!1),i.ui.info(`Schedule "${C}" created`)}catch(e){let t=e instanceof Error?e.message:`Failed to create schedule`;R(t)}finally{I(!1)}}},[q,C,x,T,m]);return(0,b.jsx)(`div`,{ref:g,className:`modal-overlay`,onClick:()=>e(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`Scheduled tasks`,children:(0,b.jsxs)(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[(0,b.jsxs)(`div`,{className:`modal-header`,children:[(0,b.jsx)(`h3`,{children:`Scheduled tasks`}),(0,b.jsx)(`button`,{className:`btn-icon`,onClick:()=>e(!1),"aria-label":`Close schedule manager`,children:(0,b.jsx)(l,{size:18})})]}),(0,b.jsxs)(`div`,{className:`modal-body`,children:[(0,b.jsx)(`section`,{className:`schedule-section`,children:_?(0,b.jsxs)(`div`,{className:`schedule-create-form`,children:[(0,b.jsxs)(`div`,{className:`schedule-field`,children:[(0,b.jsx)(`label`,{className:`schedule-field-label`,htmlFor:B,children:`When to run`}),(0,b.jsx)(`textarea`,{id:B,className:`schedule-nl-input`,placeholder:`Describe your schedule in natural language...
2
+ Examples: "every 30m", "daily at 9pm", "every hour from 8am to 6pm on weekdays"`,value:x,onChange:e=>S(e.target.value),"aria-invalid":W,"aria-describedby":W?V:void 0,autoFocus:!0,rows:2})]}),(j||N)&&(0,b.jsx)(`div`,{className:`schedule-parsed-preview ${j?.valid?`valid`:`invalid`}`,"aria-live":`polite`,children:N?(0,b.jsx)(`span`,{className:`schedule-parsed-loading`,children:`Parsing...`}):j?(0,b.jsxs)(b.Fragment,{children:[j.valid?(0,b.jsx)(`div`,{className:`schedule-parsed-description`,children:j.description}):(0,b.jsxs)(`div`,{id:V,children:[(0,b.jsx)(`div`,{className:`schedule-parsed-description`,children:`GAIA didn't understand that schedule.`}),(0,b.jsx)(`div`,{className:`schedule-parsed-hint`,children:j.description})]}),j.valid&&j.next_run_at&&(0,b.jsxs)(`div`,{className:`schedule-parsed-next`,children:[`Next run: `,new Date(j.next_run_at).toLocaleString()]}),j.valid&&(0,b.jsxs)(`div`,{className:`schedule-parsed-details`,children:[j.time_of_day&&(0,b.jsxs)(`span`,{className:`schedule-parsed-tag`,children:[(0,b.jsx)(p,{size:10}),` `,E(j.time_of_day)]}),j.start_hour!=null&&j.end_hour!=null&&(0,b.jsxs)(`span`,{className:`schedule-parsed-tag`,children:[(0,b.jsx)(p,{size:10}),` `,D(j.start_hour),` - `,D(j.end_hour)]}),j.days_of_week&&(0,b.jsx)(`span`,{className:`schedule-parsed-tag`,children:O(j.days_of_week)})]})]}):null}),(0,b.jsxs)(`div`,{className:`schedule-field`,children:[(0,b.jsx)(`label`,{className:`schedule-field-label`,htmlFor:H,children:`Name`}),(0,b.jsx)(`div`,{className:`schedule-form-row`,children:(0,b.jsx)(`input`,{id:H,type:`text`,placeholder:`Schedule name (e.g. daily-summary)`,value:C,onChange:e=>w(e.target.value),className:!C.trim()&&x.trim()?`schedule-field-missing`:``})})]}),(0,b.jsxs)(`div`,{className:`schedule-field`,children:[(0,b.jsx)(`label`,{className:`schedule-field-label`,htmlFor:U,children:`Prompt`}),(0,b.jsx)(`textarea`,{id:U,className:`schedule-prompt-input ${!T.trim()&&x.trim()?`schedule-field-missing`:``}`,placeholder:`Prompt to execute on each run...`,value:T,onChange:e=>A(e.target.value)})]}),L&&(0,b.jsx)(`p`,{className:`schedule-form-error`,children:L}),(0,b.jsxs)(`div`,{className:`schedule-create-actions`,children:[(0,b.jsx)(`button`,{className:`btn-secondary`,onClick:()=>{v(!1),R(null),M(null),S(``),w(``),A(``)},children:`Cancel`}),(0,b.jsx)(`button`,{className:`btn-primary`,onClick:J,disabled:!q||F,children:F?`Creating...`:`Create Schedule`})]})]}):(0,b.jsxs)(`button`,{className:`btn-primary`,onClick:()=>v(!0),children:[(0,b.jsx)(u,{size:14}),` New schedule`]})}),(0,b.jsxs)(`section`,{className:`schedule-section`,children:[(0,b.jsx)(`h4`,{children:`Active schedules`}),n?(0,b.jsx)(`p`,{className:`schedule-empty`,children:`Loading schedules...`}):a?(0,b.jsx)(`p`,{className:`schedule-empty`,children:a}):t.length===0?(0,b.jsx)(`p`,{className:`schedule-empty`,children:`No scheduled tasks yet. Create one to get started.`}):(0,b.jsx)(`div`,{className:`schedule-list`,children:t.map(e=>(0,b.jsx)(k,{schedule:e},e.id))})]})]})]})})}export{A as ScheduleManager};
@@ -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-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-left: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);padding:3px 10px;font-size:11px}.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}