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

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 (46) hide show
  1. package/bin/gaia-ui.cjs +2 -23
  2. package/dist/assets/AdvancedSettings-DoIDd09m.js +1 -0
  3. package/dist/assets/ConnectorsPane-CK3h7C7E.js +1 -0
  4. package/dist/assets/ConnectorsPane-CzLYXGMl.css +1 -0
  5. package/dist/assets/DocumentLibrary-BWvkvxTu.js +4 -0
  6. package/dist/assets/FileBrowser-DhqWGirJ.js +4 -0
  7. package/dist/assets/MemoryDashboard-BF-o8284.js +1 -0
  8. package/dist/assets/MobileAccessModal-51t2kQaJ.js +2 -0
  9. package/dist/assets/MobileAccessModal-BkVDm3YG.css +1 -0
  10. package/dist/assets/ScheduleManager-2xjZsnLK.js +2 -0
  11. package/dist/assets/api-BzlFpP4T.js +4 -0
  12. package/dist/assets/apiBase-BMkGbdXt.js +1 -0
  13. package/dist/assets/index-C_Cx5IlD.css +1 -0
  14. package/dist/assets/index-hAcJijAU.js +78 -0
  15. package/dist/assets/{zap-BdhDcjhB.js → zap-D7aLu_f0.js} +1 -1
  16. package/dist/icons/apple-touch-icon.png +0 -0
  17. package/dist/icons/icon-192.png +0 -0
  18. package/dist/icons/icon-512.png +0 -0
  19. package/dist/icons/icon-maskable-192.png +0 -0
  20. package/dist/icons/icon-maskable-512.png +0 -0
  21. package/dist/index.html +8 -3
  22. package/dist/manifest.json +16 -0
  23. package/dist/sw.js +49 -0
  24. package/main-safety-net.cjs +106 -8
  25. package/main.cjs +139 -159
  26. package/package.json +2 -1
  27. package/preload.cjs +16 -9
  28. package/services/auto-updater.cjs +780 -216
  29. package/services/backend-installer.cjs +233 -344
  30. package/services/engine-install.cjs +142 -0
  31. package/services/index-query.cjs +7 -1
  32. package/services/quit-guard.cjs +10 -3
  33. package/services/tray-manager.cjs +12 -7
  34. package/dist/assets/AdvancedSettings-CHxpG8nH.js +0 -1
  35. package/dist/assets/ConnectorsPane-CLQK0rsX.js +0 -1
  36. package/dist/assets/ConnectorsPane-Dzu2DRTc.css +0 -1
  37. package/dist/assets/DocumentLibrary-hSat3aHA.js +0 -4
  38. package/dist/assets/FileBrowser-BneKS6fe.js +0 -4
  39. package/dist/assets/MemoryDashboard-D5NugQoq.js +0 -1
  40. package/dist/assets/MobileAccessModal-Cl7eErMB.js +0 -2
  41. package/dist/assets/MobileAccessModal-DuVy9F1u.css +0 -1
  42. package/dist/assets/ScheduleManager-CkYWygZG.js +0 -2
  43. package/dist/assets/apiBase-DRtaTd8u.js +0 -1
  44. package/dist/assets/index-BxdoiGm5.js +0 -78
  45. package/dist/assets/index-C9zLn8zo.css +0 -1
  46. package/services/backend-installer-progress-dialog.cjs +0 -510
package/bin/gaia-ui.cjs CHANGED
@@ -281,26 +281,6 @@ async function serveFrontend(port) {
281
281
  return server;
282
282
  }
283
283
 
284
- /**
285
- * First install found a Lemonade already running: ask on the terminal.
286
- * Null without a terminal; `gaia init` then installs GAIA's own and says how to switch.
287
- */
288
- function chooseLemonadeOnTerminal(found, { input = process.stdin, output = process.stdout } = {}) {
289
- if (!input.isTTY) return Promise.resolve(null);
290
- const readline = require("readline");
291
- const rl = readline.createInterface({ input, output });
292
- const question =
293
- `\nA Lemonade Server (v${found.version}) is already running at ${found.url}.\n` +
294
- "Use it instead of installing GAIA's own? This avoids running two servers " +
295
- "and keeping two copies of each model. [Y/n] ";
296
- return new Promise((resolve) => {
297
- rl.question(question, (answer) => {
298
- rl.close();
299
- resolve(/^n(o)?$/i.test(answer.trim()) ? "gaia" : "external");
300
- });
301
- });
302
- }
303
-
304
284
  // ── Main ──────────────────────────────────────────────────────────────────────
305
285
 
306
286
  async function main() {
@@ -341,11 +321,10 @@ async function main() {
341
321
  try {
342
322
  gaiaBin = await installer.ensureBackend({
343
323
  version: GAIA_VERSION_OVERRIDE || undefined,
344
- chooseLemonade: chooseLemonadeOnTerminal,
345
324
  onProgress: (stage, percent, message) => {
346
325
  // Simple CLI progress formatting
347
326
  process.stdout.write(
348
- ` [${stage}] ${percent}% ${message}\n`
327
+ ` [${stage}] ${percent === null ? "" : `${percent}% `}${message}\n`
349
328
  );
350
329
  },
351
330
  });
@@ -415,4 +394,4 @@ if (require.main === module) {
415
394
  });
416
395
  }
417
396
 
418
- module.exports = { npmDistTag, helpText, startBackend, chooseLemonadeOnTerminal };
397
+ module.exports = { npmDistTag, helpText, startBackend };
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{G as t,N as n,i as r,n as i,o as a,r as o}from"./apiBase-BMkGbdXt.js";import{At as s,Bt as c,I as l,R as u,V as d,Y as f,jt as p,q as m,ut as h}from"./api-BzlFpP4T.js";import{$ as g,Ft as _,Lt as v,Vt as y,X as b,a as x,c as S,d as C,et as w,l as T,o as E,r as D,s as O,u as k,vt as A}from"./index-hAcJijAU.js";var j=e(t(),1);function M(){let e=g(),[t,n]=(0,j.useState)(null),[a,c]=(0,j.useState)(null),[u,d]=(0,j.useState)(``),[f,p]=(0,j.useState)(``),[m,h]=(0,j.useState)(!1),[_,y]=(0,j.useState)(null),[b,x]=(0,j.useState)(!1);(0,j.useEffect)(()=>{l().then(e=>{n(e),d(e.saved_base_url??e.base_url??``)}).catch(e=>c(e instanceof Error?e.message:String(e)))},[]);let S=(0,j.useCallback)(async e=>{h(!0),y(null);try{let t=await s(e);n(t),p(``),x(!1)}catch(e){x(k(e)),y(e instanceof Error?e.message:String(e))}finally{h(!1)}},[]),C=()=>void S({mode:`external`,base_url:u.trim(),api_key:f.trim()||void 0});if(a)return r(`section`,{className:`settings-section`,children:[o(`h4`,{children:e(`settings.advanced.modelServer`)}),r(`div`,{className:`model-warning`,role:`alert`,children:[o(v,{size:14}),r(`div`,{className:`model-warning-content`,children:[o(`strong`,{children:e(`settings.server.readFailed`)}),o(`p`,{children:a})]})]})]});if(!t)return null;let w=t.mode===`external`;return r(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[o(`h4`,{children:e(`settings.advanced.modelServer`)}),o(`p`,{className:`model-override-desc`,role:`status`,children:t.source===`env`?e(`settings.server.usesEnv`,{url:t.base_url??``}):w?e(`settings.server.usesYours`,{url:t.base_url??``}):e(`settings.server.usesOwn`)}),t.source===`env`?o(`p`,{className:`model-status-hint`,children:e(`settings.server.unsetEnv`)}):r(i.Fragment,{children:[r(`p`,{className:`model-status-hint`,children:[e(`settings.server.useYours`),` `,o(`bdi`,{children:t.what_gaia_does})]}),r(`form`,{className:`model-input-row`,onSubmit:e=>{e.preventDefault(),C()},children:[o(`input`,{type:`text`,className:`model-input`,placeholder:`http://localhost:13305`,value:u,onChange:e=>{d(e.target.value),y(null)},disabled:m,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-label":e(`settings.server.address`)}),o(`input`,{type:`password`,className:`model-input`,autoComplete:`off`,placeholder:t.api_key_stored?e.bare(`settings.server.keySaved`):e.bare(`settings.server.keyOptional`),value:f,onChange:e=>p(e.target.value),disabled:m,"aria-label":e(`settings.server.key`)}),o(`div`,{className:`model-btn-group`,children:o(`button`,{type:`submit`,className:`btn-model-save`,disabled:m||!u.trim(),children:m?r(i.Fragment,{children:[o(A,{size:13,className:`btn-spinner`}),` `,e(`settings.server.checking`)]}):e(`settings.server.use`)})})]}),w&&o(`div`,{className:`setting-actions`,children:o(`button`,{type:`button`,className:`btn-secondary`,disabled:m,onClick:()=>void S({mode:`gaia`}),children:e(`settings.server.useOwn`)})}),_&&r(`div`,{className:`model-warning`,role:`alert`,children:[o(v,{size:14}),r(`div`,{className:`model-warning-content`,children:[o(`strong`,{children:e(b?`settings.server.needsKey`:`settings.server.notSwitched`)}),o(`p`,{children:_})]})]})]})]})}var N={vulkan:`Vulkan`,rocm:`ROCm`,metal:`Metal`,cpu:`CPU`,npu:`NPU`,remote:`Remote (cloud)`},P={gaia:`settings.server.ownerGaia`,user:`settings.server.ownerUser`,remote:`settings.server.ownerRemote`};function F(e){return e?N[e]??e:`unknown`}function I(e){if(!e)return`unknown`;let t=F(e.backend);return e.backend_source===`lemonade_default`?`${t} (Lemonade's default)`:t}function L(e){return e?`${Math.round(e/1024)}K tokens`:`unknown`}var R={asr:`settings.server.kind.speechRecognition`,embedding:`settings.server.kind.embedding`,image:`settings.server.kind.image`,llm:`settings.server.kind.language`,rerank:`settings.server.kind.reranker`,reranking:`settings.server.kind.reranker`,stt:`settings.server.kind.speechRecognition`,transcription:`settings.server.kind.speechRecognition`,tts:`settings.server.kind.speech`,vision:`settings.server.kind.vision`,"3d":`settings.server.kind.threeD`};function z(e,t){if(!e.model_type)return t(`settings.server.loadedModel`);let n=e.model_type.toLowerCase(),r=R[n];return r?t(r):t(`settings.server.kindOther`,{kind:`${n.charAt(0).toUpperCase()}${n.slice(1)}`})}function B(e,t){let n=[e.name?w(e.name):t.bare(`settings.server.unknownModel`),I(e)];return e.backend!==`remote`&&e.ctx_size&&n.push(L(e.ctx_size)),n.join(` · `)}function V({label:e,value:t,title:n}){return r(`div`,{className:`status-row`,children:[o(`span`,{className:`status-label`,children:e}),o(`span`,{className:`status-value model-server-value`,dir:`auto`,title:n??t,children:t})]})}function ee(){let e=g(),t=a(e=>e.openSettings),[n,s]=(0,j.useState)(null),[c,l]=(0,j.useState)(null),[u,f]=(0,j.useState)(null),[m,_]=(0,j.useState)(null),[v,y]=(0,j.useState)(!1);(0,j.useEffect)(()=>{d().then(s).catch(e=>l(e instanceof Error?e.message:String(e)))},[]);let b=(0,j.useCallback)(async t=>{f(t),_(null);try{let n=await p(t);s(n),_({ok:!0,text:e(`settings.server.savedBackend`)})}catch(e){_({ok:!1,text:e instanceof Error?e.message:String(e)})}finally{f(null)}},[e]),S=n?.chat_model??null,C=(0,j.useCallback)(async()=>{if(S?.name){y(!0);try{if(!await h(S.name,S.ctx_size??void 0))return;_({ok:!0,text:e(`settings.server.reloading`,{name:S.name})})}catch(e){_({ok:!1,text:e instanceof Error?e.message:String(e)})}finally{y(!1)}}},[S,e]),T=o(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>t(`model`),children:e(`settings.server.changeModel`)});if(c)return r(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[o(`h4`,{children:e(`settings.advanced.modelServer`)}),o(x,{message:c})]});if(!n)return r(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[o(`h4`,{children:e(`settings.advanced.modelServer`)}),o(`p`,{className:`loading-text`,children:e(`settings.server.checkingServer`)})]});if(!n.reachable)return r(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[o(`h4`,{children:e(`settings.advanced.modelServer`)}),o(x,{message:n.error??e(`settings.errors.serverDownTitle`)}),T]});let E=n.available_backends??[],D=n.preferred_backend??null,O=E.map(e=>e.name);D&&!O.includes(D)&&O.push(D);let k=D??n.default_backend??null,M=E.filter(e=>e.state===`installable`).map(e=>F(e.name)),N=!!S?.name&&S.recipe===`llamacpp`;return r(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[o(`h4`,{children:e(`settings.advanced.modelServer`)}),r(`div`,{className:`status-grid`,children:[o(V,{label:e(`settings.server.server`),value:`${P[n.owner]?e(P[n.owner]):n.owner}${n.version?` v${n.version}`:``}`}),o(V,{label:e(`settings.server.addressShort`),value:n.base_url}),o(V,{label:e(`settings.server.chatModel`),value:S?.name?w(S.name):e(`settings.advanced.noneLoaded`),title:S?.name??void 0}),S&&o(V,{label:e(`settings.server.runsOn`),value:I(S)}),S&&S.backend!==`remote`&&o(V,{label:e(`settings.advanced.context`),value:L(S.ctx_size)}),o(V,{label:e(`settings.advanced.embedding`),value:n.embedding_model?.name?`${n.embedding_model.name} · ${I(n.embedding_model)}`:e(`settings.advanced.noneLoaded`)}),(n.loaded_models??[]).map((t,n)=>o(V,{label:z(t,e),value:B(t,e),title:t.name??void 0},`${t.name??`unknown`}-${n}`))]}),n.embedding_note&&o(`p`,{className:`settings-hint`,children:o(`bdi`,{children:n.embedding_note})}),n.system_info_error&&o(`p`,{className:`settings-hint`,children:o(`bdi`,{children:n.system_info_error})}),r(`div`,{className:`settings-field model-server-backend`,children:[o(`span`,{className:`settings-label`,children:e(`settings.server.backend`)}),E.length===0&&!D?o(`span`,{className:`settings-hint`,children:e(`settings.server.noBackends`)}):r(i.Fragment,{children:[o(`div`,{className:`segmented`,role:`radiogroup`,"aria-label":e(`settings.server.backendShort`),children:O.map(e=>r(`button`,{type:`button`,role:`radio`,"aria-checked":k===e,className:k===e?`is-active`:``,disabled:u!==null,onClick:()=>{e!==k&&b(e)},children:[u===e?o(A,{size:12,className:`spin`}):null,F(e)]},e))}),r(`span`,{className:`settings-hint`,children:[e(`settings.server.backendHint`),M.length>0&&` ${e(`settings.server.installable`,{names:M.join(`, `)})}`]})]}),m?.ok&&o(`p`,{className:`settings-ok`,role:`status`,children:m.text}),m&&!m.ok&&o(x,{message:m.text})]}),r(`div`,{className:`settings-row`,children:[T,N&&r(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>void C(),disabled:v,children:[v?o(A,{size:13,className:`spin`}):null,e(`settings.server.reload`)]})]})]})}function H(){let e=g(),[t,a]=(0,j.useState)(null),[s,l]=(0,j.useState)(!0),[d,p]=(0,j.useState)([]),[h,x]=(0,j.useState)(``),[w,k]=(0,j.useState)(``),[N,P]=(0,j.useState)(!1),[F,I]=(0,j.useState)(!1),[L,R]=(0,j.useState)(null),[z,B]=(0,j.useState)(!1),V=(0,j.useRef)(null),[H,W]=(0,j.useState)(!1),[G,ne]=(0,j.useState)(!1),[K,re]=(0,j.useState)(!1),[q,J]=(0,j.useState)(null);(0,j.useEffect)(()=>{n.system.info(`Checking system status...`);let e=n.system.time();f().then(t=>{a(t),n.system.timed(`System status received`,e,{lemonade:t.lemonade_running?`running`:`stopped`,model:t.model_loaded||`none`,embedding:t.embedding_model_loaded?`yes`:`no`,disk:`${t.disk_space_gb}GB free`,memory:t.memory_available_gb==null?`unknown`:`${t.memory_available_gb}GB available`}),t.lemonade_running||n.system.warn(`Lemonade Server is NOT running.`)}).catch(e=>{n.system.error(`Failed to get system status`,e),a(null)}).finally(()=>l(!1)),u().then(e=>p(e.servers)).catch(()=>{}),m().then(e=>{let t=e.custom_model??``;x(t),k(t),W(e.dynamic_tools),ne(e.dynamic_tools_locked)}).catch(e=>{n.system.error(`Failed to load settings`,e)}).finally(()=>P(!0))},[]),(0,j.useEffect)(()=>()=>{V.current&&clearTimeout(V.current)},[]);let Y=(0,j.useCallback)(async()=>{let e=h.trim(),t=e.length>0?e:``;I(!0),R(null),B(!1);try{n.system.info(`Saving custom_model override`,{custom_model:t});let e=(await c({custom_model:t})).custom_model??``;x(e),k(e),B(!0),V.current&&clearTimeout(V.current),V.current=setTimeout(()=>B(!1),2200)}catch(e){let t=e instanceof Error?e.message:String(e);n.system.error(`Failed to save custom_model`,e),R(t)}finally{I(!1)}},[h]),ie=(0,j.useCallback)(async()=>{if(G||K)return;let e=H,t=!e;W(t),re(!0),J(null);try{n.system.info(`Saving dynamic_tools setting`,{dynamic_tools:t});let e=await c({dynamic_tools:t});W(e.dynamic_tools),ne(e.dynamic_tools_locked)}catch(t){let r=t instanceof Error?t.message:String(t);n.system.error(`Failed to save dynamic_tools`,t),W(e),J(r)}finally{re(!1)}},[H,G,K]),ae=h.trim()!==w.trim(),X=t?t.default_model_name:b,{isLoadingModel:oe,isDownloadingModel:Z,loadModel:se,downloadModel:ce}=D(X??void 0),Q=!!t?.default_model_is_cloud,$=!Q&&!!(t?.lemonade_running&&t.model_loaded&&t.expected_model_loaded===!1),le=!Q&&!!(t?.lemonade_running&&t.model_loaded&&t.context_size_sufficient===!1),ue=!Q&&!(!t?.lemonade_running||t.model_loaded||t.model_downloaded!==!1),de=($||le)&&X!==null,fe=d.some(e=>!e.connected);return r(`div`,{className:`settings-pane`,children:[o(`h2`,{className:`settings-pane-title`,children:e(`settings.section.advanced`)}),o(`section`,{className:`settings-card`,"aria-label":e(`settings.advanced.status`),children:s?o(`p`,{className:`loading-text`,children:e(`settings.advanced.checking`)}):t?r(i.Fragment,{children:[r(`div`,{className:`status-grid`,children:[o(U,{label:e(`settings.advanced.modelServer`),value:t.lemonade_running?t.lemonade_version?e(`settings.advanced.runningAt`,{version:t.lemonade_version}):e(`settings.advanced.running`):S(t)?e(`settings.advanced.notInstalled`):t.lemonade_error?e(`settings.advanced.unavailable`):e(`settings.advanced.notRunning`),ok:t.lemonade_running,hint:t.lemonade_running?void 0:S(t)?e(`settings.advanced.notInstalledHint`):t.lemonade_error?e(`settings.advanced.queryFailed`,{reason:t.lemonade_error}):t.start_instruction&&!O(t.start_instruction)?t.start_instruction:e(`settings.advanced.notRunningHint`)}),S(t)&&o(E,{className:`btn-primary`}),o(U,{label:e(`settings.section.model`),value:t.model_loaded||e(`settings.advanced.noneLoaded`),ok:!!t.model_loaded&&(Q||t.expected_model_loaded!==!1),hint:t.model_loaded?!Q&&t.expected_model_loaded===!1?e(`settings.advanced.expected`,{name:X??``}):void 0:e(`settings.advanced.loadsFirst`)}),o(U,{label:e(`settings.advanced.disk`),value:r(`bdi`,{dir:`ltr`,children:[t.disk_space_gb,` GB`]}),ok:t.disk_space_gb>5,hint:!t.model_loaded&&t.disk_space_gb<30?e(`settings.advanced.diskLow`,{need:`6 GB`,size:`${t.disk_space_gb} GB`}):void 0})]}),ue&&r(`div`,{className:`model-action-row model-action-row--download`,children:[r(`div`,{className:`model-action-info`,children:[o(`span`,{className:`model-action-label`,children:e(`settings.advanced.notDownloaded`)}),o(`span`,{className:`model-action-desc`,children:e(`settings.advanced.notDownloadedHint`,{name:X??``,need:`6 GB`})})]}),o(`button`,{className:`btn-model-action btn-model-action--download`,onClick:()=>ce(!1),disabled:Z,children:Z?r(i.Fragment,{children:[o(A,{size:13,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.model.download`)})]}),de&&r(`div`,{className:`model-action-row model-action-row--load`,children:[r(`div`,{className:`model-action-info`,children:[o(`span`,{className:`model-action-label`,children:e($?`settings.advanced.wrongModel`:`settings.advanced.smallContext`)}),o(`span`,{className:`model-action-desc`,children:e(`settings.advanced.loadHint`,{name:X??``,size:`${32 .toFixed(0)}K`})})]}),o(`button`,{className:`btn-model-action btn-model-action--load`,onClick:()=>se(),disabled:oe,children:oe?r(i.Fragment,{children:[o(A,{size:13,className:`btn-spinner`}),` `,e(`settings.advanced.loading`)]}):e(`settings.advanced.load`)})]}),r(`details`,{className:`settings-more`,children:[r(`summary`,{children:[o(y,{size:13,className:`settings-disclosure-chevron`,"aria-hidden":`true`}),` `,e(`settings.advanced.details`)]}),r(`div`,{className:`status-grid`,children:[t.model_size_gb!=null&&o(U,{label:e(`settings.advanced.modelSize`),value:r(`bdi`,{dir:`ltr`,children:[t.model_size_gb,` GB`]}),ok:!0}),t.model_device&&!Q&&o(U,{label:e(`settings.advanced.device`),value:t.model_device.toUpperCase(),ok:t.model_device!==`cpu`}),t.model_context_size!=null&&o(U,{label:e(`settings.advanced.context`),value:e(`settings.ctx.tokens`,{size:`${(t.model_context_size/1024).toFixed(0)}K`}),ok:t.context_size_sufficient}),t.model_labels&&t.model_labels.length>0&&o(U,{label:e(`settings.advanced.capabilities`),value:t.model_labels.join(`, `),ok:!0}),o(U,{label:e(`settings.advanced.embedding`),value:t.embedding_model_loaded?e(`settings.advanced.available`):e(`settings.advanced.notLoaded`),ok:t.embedding_model_loaded}),t.gpu_name&&o(U,{label:`GPU`,value:o(`bdi`,{children:`${t.gpu_name}${t.gpu_vram_gb?` (${C(t.gpu_vram_gb)})`:``}`}),ok:!0}),o(U,{label:e(`settings.advanced.memory`),value:t.memory_available_gb==null?e(`settings.advanced.unknown`):r(`bdi`,{dir:`ltr`,children:[t.memory_available_gb,` GB`]}),ok:t.memory_available_gb!=null&&t.memory_available_gb>2}),t.processor_name&&o(U,{label:e(`settings.advanced.processor`),value:o(`bdi`,{children:t.processor_name}),ok:!0})]}),t.lemonade_running&&X!==null&&!Q&&r(`div`,{className:`force-redownload-row`,children:[o(`span`,{className:`force-redownload-label`,children:e(`settings.advanced.corrupted`)}),o(`button`,{className:`btn-force-redownload`,onClick:()=>ce(!0),disabled:Z,children:Z?r(i.Fragment,{children:[o(A,{size:12,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.advanced.redownload`)})]})]})]}):o(`div`,{className:`status-error`,children:o(`p`,{children:e(`settings.advanced.unreachable`)})})}),r(T,{title:e(`settings.advanced.serverTitle`),hint:e(`settings.advanced.serverHint`),children:[o(ee,{}),o(M,{})]}),r(T,{title:e(`settings.advanced.customTitle`),hint:w||e(`settings.advanced.customHint`),children:[o(`p`,{className:`model-override-desc`,children:e(`settings.advanced.customDesc`)}),r(`div`,{className:`model-input-row`,children:[o(`input`,{type:`text`,className:`model-input${w?` has-override`:``}`,placeholder:e.bare(`settings.advanced.customPlaceholder`),value:h,onChange:e=>{x(e.target.value),R(null),B(!1)},onKeyDown:e=>{e.key===`Enter`&&!F&&ae&&N&&(e.preventDefault(),Y())},disabled:!N||F,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-label":e(`settings.advanced.customAria`)}),o(`div`,{className:`model-btn-group`,children:o(`button`,{className:`btn-model-save${z?` saved`:``}`,onClick:()=>{Y()},disabled:!N||F||!ae&&!z,"aria-label":e(`settings.advanced.customSave`),children:F?r(i.Fragment,{children:[o(A,{size:13,className:`btn-spinner`}),` `,e(`settings.models.applying`)]}):z?r(i.Fragment,{children:[o(_,{size:13}),` `,e(`settings.advanced.saved`)]}):e(`settings.advanced.save`)})})]}),o(`p`,{className:`model-status-hint`,children:e(`settings.advanced.customIds`)}),L&&o(te,{message:L})]}),r(T,{title:e(`settings.advanced.dynamicTitle`),children:[o(`p`,{className:`model-override-desc`,children:e(`settings.advanced.dynamicDesc`)}),r(`label`,{className:`setting-row`,children:[o(`span`,{children:e(`settings.advanced.dynamicEnable`)}),r(`span`,{className:`toggle-switch`,children:[o(`input`,{type:`checkbox`,checked:H,onChange:()=>void ie(),disabled:!N||K||G,"aria-label":e(H?`settings.advanced.dynamicOff`:`settings.advanced.dynamicOn`)}),o(`span`,{className:`toggle-track`})]})]}),G&&o(`p`,{className:`model-status-hint`,children:e(`settings.advanced.dynamicLocked`)}),q&&o(te,{message:q})]}),d.length>0&&o(T,{title:e(`settings.advanced.mcp`),count:d.length,defaultOpen:fe,children:o(`div`,{className:`status-grid`,children:d.map(t=>r(`div`,{className:`status-row`,children:[o(`bdi`,{className:`status-label`,children:t.name}),o(`div`,{className:`status-value-wrap`,children:t.connected?r(`span`,{className:`status-value ok mcp-status-connected`,children:[o(_,{size:12}),e.plural(`settings.advanced.tools`,t.tool_count)]}):r(`span`,{className:`status-value warn mcp-status-failed`,title:t.error??void 0,children:[o(v,{size:12}),e(`settings.custom.failed`)]})})]},t.name))})}),r(`div`,{className:`about-info`,children:[r(`p`,{children:[r(`bdi`,{dir:`ltr`,children:[`GAIA v`,`0.25.4rc4`]}),` `,o(`span`,{className:`beta-badge`,children:`BETA`})]}),o(`p`,{className:`about-sub`,children:e(`settings.advanced.about`)})]})]})}function te({message:e}){let t=g();return r(`div`,{className:`model-warning`,role:`alert`,children:[o(v,{size:14}),r(`div`,{className:`model-warning-content`,children:[o(`strong`,{children:t(`settings.advanced.saveFailed`)}),o(`p`,{children:e})]})]})}function U({label:e,value:t,ok:n,hint:i}){return r(`div`,{className:`status-row${i?` status-row--has-hint`:``}`,children:[o(`span`,{className:`status-label`,children:e}),r(`div`,{className:`status-value-wrap`,children:[o(`span`,{className:`status-value ${n?`ok`:`warn`}`,children:t}),i&&o(`span`,{className:`status-hint`,children:i})]})]})}export{H as AdvancedSettings};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{G as t,N as n,i as r,n as i,o as a,r as o,t as s}from"./apiBase-BMkGbdXt.js";import{_n as c,bn as l,cn as u,dn as d,fn as f,gn as p,hn as m,ln as h,mn as g,on as _,pn as v,sn as y,un as b,vn as x,yn as S}from"./api-BzlFpP4T.js";import{$ as C,Dt as w,Ft as T,Lt as E,Ot as D,Rt as O,Vt as k,l as A,nt as j,vt as M}from"./index-hAcJijAU.js";var N=e(t(),1),P=n.api;function F(e){switch(e){case`connector.configured`:return`configured`;case`connector.disconnected`:return`disconnected`;case`connection.revoked`:return`disconnected`;case`connector.oauth.completed`:return`oauth_completed`;case`connection.connected`:return`oauth_completed`;case`connector.oauth.error`:return`oauth_error`;case`connector.tested`:return`tested`;case`connector.enabled`:return`enabled`;case`connector.disabled`:return`disabled`;case`connector.grant.changed`:return`grant_changed`;case`connector.activation.changed`:return`activation_changed`;default:return null}}function I(e){let t=(0,N.useRef)(e);(0,N.useEffect)(()=>{t.current=e},[e]),(0,N.useEffect)(()=>{let e=`${s()}/connectors/events`,n=null,r=1e3,i=null,a=!1,o=()=>{a||(n=new EventSource(e),n.onopen=()=>{r=1e3},n.onmessage=e=>{try{let n=JSON.parse(e.data),r=F(n.type);if(r===null){P.debug(`connectors-sse: ignoring event`,n.type);return}let i=n.payload??{},a=i.connector_id??i.provider??null;t.current({connectorId:a,reason:r,payload:i})}catch(e){P.warn(`connectors-sse: malformed event`,e)}},n.onerror=()=>{n?.close(),n=null,!a&&(i=setTimeout(o,r),r=Math.min(r*2,3e4))})};return o(),()=>{a=!0,i&&clearTimeout(i),n?.close()}},[])}function L(e){return e.type===`mcp_server`&&e.configured}function R({connector:e,onChanged:t}){let n=C(),[i,a]=(0,N.useState)(!1),[s,c]=(0,N.useState)(!1),[l,u]=(0,N.useState)(null),[p,m]=(0,N.useState)(null),h=(0,N.useRef)(null),g=(0,N.useRef)(null);(0,N.useEffect)(()=>{if(!i)return;let e=e=>{let t=e.target;h.current&&!h.current.contains(t)&&g.current&&!g.current.contains(t)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]);let _=(0,N.useCallback)(()=>a(!1),[]);if(j(i,_),(0,N.useEffect)(()=>{if(!i)return;let e=()=>{if(!h.current)return;let e=h.current.getBoundingClientRect();m({top:e.bottom+4,right:window.innerWidth-e.right})};return window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[i]),!L(e))return null;let y=e=>{e.stopPropagation(),e.preventDefault()},b=e=>{if(y(e),!i&&h.current){let e=h.current.getBoundingClientRect();m({top:e.bottom+4,right:window.innerWidth-e.right})}a(e=>!e)},x=async e=>{c(!0),u(null);try{await e(),a(!1),t()}catch(e){u(e instanceof Error?e.message:String(e))}finally{c(!1)}};return r(`div`,{className:`connector-tile-menu`,onClick:y,onKeyDown:y,children:[o(`button`,{ref:h,type:`button`,className:`connector-tile-menu-trigger`,"aria-haspopup":`menu`,"aria-expanded":i,"aria-label":n(`settings.connectors.actions`),onClick:b,disabled:s,children:o(D,{size:14})}),i&&p&&r(`div`,{ref:g,role:`menu`,className:`connector-tile-menu-popup`,style:{position:`fixed`,top:p.top,right:p.right},children:[e.enabled?o(`button`,{role:`menuitem`,type:`button`,className:`connector-tile-menu-item`,onClick:()=>void x(()=>d(e.id)),disabled:s,children:n(`settings.connectors.disable`)}):o(`button`,{role:`menuitem`,type:`button`,className:`connector-tile-menu-item`,onClick:()=>void x(()=>v(e.id)),disabled:s,children:n(`settings.connectors.enable`)}),o(`div`,{className:`connector-tile-menu-divider`}),o(`button`,{role:`menuitem`,type:`button`,className:`connector-tile-menu-item connector-tile-menu-item--danger`,onClick:()=>void x(()=>f(e.id)),disabled:s,children:n(`settings.connectors.disconnect`)}),l&&o(`div`,{className:`connector-tile-menu-error`,children:l})]})]})}var z={"https://www.googleapis.com/auth/gmail.readonly":`settings.connectors.scope.gmailRead`,"https://www.googleapis.com/auth/gmail.modify":`settings.connectors.scope.gmailModify`,"https://www.googleapis.com/auth/gmail.send":`settings.connectors.scope.gmailSend`,"https://www.googleapis.com/auth/gmail.compose":`settings.connectors.scope.gmailCompose`,"https://www.googleapis.com/auth/calendar.readonly":`settings.connectors.scope.calendarRead`,"https://www.googleapis.com/auth/calendar.events":`settings.connectors.scope.calendarEvents`,"https://www.googleapis.com/auth/drive.readonly":`settings.connectors.scope.driveRead`,"https://www.googleapis.com/auth/drive.file":`settings.connectors.scope.driveFile`,"https://www.googleapis.com/auth/spreadsheets.readonly":`settings.connectors.scope.sheetsRead`,"https://www.googleapis.com/auth/spreadsheets":`settings.connectors.scope.sheets`,openid:`settings.connectors.scope.openid`,"https://www.googleapis.com/auth/userinfo.email":`settings.connectors.scope.email`,email:`settings.connectors.scope.email`,profile:`settings.connectors.scope.profile`,"https://graph.microsoft.com/Mail.ReadWrite":`settings.connectors.scope.outlookMail`,"https://graph.microsoft.com/Mail.Send":`settings.connectors.scope.outlookSend`,"https://graph.microsoft.com/Calendars.ReadWrite":`settings.connectors.scope.outlookCalendar`,"https://graph.microsoft.com/Calendars.Read":`settings.connectors.scope.outlookCalendarRead`,"https://graph.microsoft.com/User.Read":`settings.connectors.scope.microsoftProfile`};function B(e,t){let n=z[e];return n?t(n):e.split(/[/.:]/).pop()??e}var V=6,H=[`use`];function U(e,t){return!(`revoke_supported`in e)||e.revoke_supported&&e.revoked_remotely?null:e.revoke_supported&&!e.revoked_remotely?t(`settings.connectors.notRevoked`,{reason:String(e.revoke_error??t.bare(`settings.advanced.unknown`))}):e.revoke_error?t(`settings.connectors.localOnly`,{reason:String(e.revoke_error)}):t(`settings.connectors.noRevokeApi`)}function W(){let e=C(),[t,n]=(0,N.useState)([]),[a,s]=(0,N.useState)([]),[c,l]=(0,N.useState)(!0),[u,d]=(0,N.useState)(null),[f,m]=(0,N.useState)(null),[h,_]=(0,N.useState)(null),[v,y]=(0,N.useState)(``),b=(0,N.useCallback)(async()=>{try{let[{connectors:e},{agent_mcps:t}]=await Promise.all([S(),p()]);n(e),s(t),d(null)}catch(e){d(e instanceof Error?e.message:String(e))}finally{l(!1)}},[]);(0,N.useEffect)(()=>{b()},[b]);let x=e=>_(t=>t===e?null:e),w=(0,N.useCallback)(async e=>{try{let t=await g(e);n(n=>n.map(n=>n.id===e?t:n))}catch{b()}},[b]);I((0,N.useCallback)(t=>{t.reason===`disconnected`&&m(U(t.payload,e)),t.connectorId?w(t.connectorId):b()},[w,b,e]));let T=v.trim().toLowerCase(),D=t.filter(e=>!T||e.display_name.toLowerCase().includes(T)||e.description.toLowerCase().includes(T)),O=D.filter(e=>e.configured),k=D.filter(e=>!e.configured&&e.type===`oauth_pkce`),j=D.filter(e=>!e.configured&&e.type!==`oauth_pkce`),P=!t.some(e=>e.configured),F=e=>o(`div`,{className:`connectors-list`,children:e.map(e=>o(G,{connector:e,expanded:h===e.id,onToggle:()=>x(e.id),onChanged:()=>void w(e.id)},e.id))});return r(`section`,{className:`connectors-section`,"aria-label":e(`settings.section.connectors`),children:[o(`p`,{className:`settings-pane-lede`,children:e(`settings.connectors.lede`)}),u&&r(`div`,{className:`error-banner`,children:[o(E,{size:14}),o(`span`,{children:u})]}),f&&r(`div`,{className:`error-banner`,role:`status`,onClick:()=>m(null),children:[o(E,{size:14}),o(`span`,{children:f})]}),c?o(`div`,{className:`connectors-loading`,children:o(M,{size:16,className:`spin`})}):r(i.Fragment,{children:[t.length>V&&o(`input`,{className:`settings-input`,type:`search`,value:v,onChange:e=>y(e.target.value),placeholder:e(`settings.connectors.search`),"aria-label":e(`settings.connectors.search`)}),t.length===0&&!u&&o(`p`,{className:`settings-hint`,children:e(`settings.connectors.none`)}),T&&D.length===0&&o(`p`,{className:`settings-hint`,children:e(`settings.connectors.noMatch`)}),O.length>0&&o(A,{title:e(`settings.connectors.connected`),count:O.length,defaultOpen:!0,forceOpen:!!T,children:F(O)}),k.length>0&&o(A,{title:e(`settings.connectors.accounts`),hint:e(`settings.connectors.accountsHint`),count:k.length,defaultOpen:P,forceOpen:!!T,children:F(k)}),j.length>0&&o(A,{title:e(`settings.connectors.servers`),hint:e(`settings.connectors.serversHint`),count:j.length,forceOpen:!!T,children:F(j)}),a.length>0&&!T&&o(A,{title:e(`settings.connectors.agentServers`),count:a.length,children:o(X,{servers:a,expanded:h,onToggle:x})})]})]})}function G({connector:e,expanded:t,onToggle:n,onChanged:i}){let a=C();return r(`div`,{className:`connector-tile${t?` connector-tile--open`:``}`,children:[r(`div`,{className:`connector-tile-row`,children:[r(`button`,{type:`button`,className:`connector-tile-header`,onClick:n,"aria-expanded":t,children:[o(`bdi`,{className:`connector-tile-name`,children:e.display_name}),e.configured&&o(`span`,{className:`connector-tile-type`,children:e.type===`oauth_pkce`?`OAuth`:`MCP`}),e.configured?e.type===`mcp_server`&&e.enabled===!1?o(`span`,{className:`connector-status disabled`,children:a(`settings.connectors.disabled`)}):r(`span`,{className:`connector-status ok`,children:[o(T,{size:12}),e.account_id?o(`bdi`,{dir:`ltr`,children:e.account_id}):a(`settings.connectors.configured`)]}):e.configurable===!1?o(`span`,{className:`connector-status idle`,children:a(`settings.connectors.setupRequired`)}):null,o(`span`,{className:`connector-tile-chevron`,children:o(t?O:k,{size:14})})]}),o(R,{connector:e,onChanged:i})]}),t&&r(`div`,{className:`connector-detail`,children:[e.type===`oauth_pkce`?o(K,{connector:e,onChanged:i}):o(J,{connector:e,onChanged:i}),e.configured&&o(Q,{connectorId:e.id,connectorType:e.type})]})]})}function K({connector:e,onChanged:t}){let n=C(),[s,c]=(0,N.useState)(!1),[l,d]=(0,N.useState)(null),[p,m]=(0,N.useState)({}),[g,_]=(0,N.useState)(null),{agents:v}=a(),b=v.filter(t=>t.namespaced_agent_id&&t.required_connections?.some(t=>t.connector_id===e.id)),x=b.map(e=>e.namespaced_agent_id).join(`,`),[S,T]=(0,N.useState)(()=>new Set);(0,N.useEffect)(()=>{T(new Set(b.map(e=>e.namespaced_agent_id)))},[x]);let D=e=>T(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),O=()=>[...S];(0,N.useEffect)(()=>{let e=()=>{t()};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[t]);let k=e=>{let t=window;t.gaia?.openExternal?t.gaia.openExternal(e):window.open(e,`_blank`,`noopener`)},A=async()=>{c(!0),d(null);try{let t=await y(e.id,e.available_scopes?.length?e.available_scopes:e.default_scopes,O());k(t.authorization_url)}catch(e){d(e instanceof Error?e.message:String(e))}finally{c(!1)}},j=async()=>{c(!0),d(null),_(null);try{let t=await u(e.id,e.available_scopes?.length?e.available_scopes:e.default_scopes,O());_(t)}catch(e){d(e instanceof Error?e.message:String(e))}finally{c(!1)}};(0,N.useEffect)(()=>{e.configured&&_(null)},[e.configured]),I((0,N.useCallback)(t=>{t.connectorId===e.id&&(t.reason===`oauth_error`?(d(String(t.payload.error??n(`settings.connectors.deviceFailed`))),_(null)):t.reason===`oauth_completed`&&_(null))},[e.id,n]));let P=async()=>{c(!0),d(null);try{await f(e.id),t()}catch(e){d(e instanceof Error?e.message:String(e))}finally{c(!1)}},F=async()=>{let r=(e.oauth_setup_fields??[]).filter(e=>e.required!==!1&&!p[e.key]?.trim()).map(e=>e.label);if(r.length)d(n(`settings.connectors.required`,{fields:r.join(`, `)}));else{c(!0),d(null);try{let n=e.available_scopes?.length?e.available_scopes:e.default_scopes,r=await h(e.id,{...p,scopes:n,grant_agents:O()}),i=typeof r.authorization_url==`string`?r.authorization_url:null;i&&k(i),t()}catch(e){d(e instanceof Error?e.message:String(e))}finally{c(!1)}}},L=e.oauth_setup_fields??[],R=e.configurable===!1&&!e.configured&&L.length>0;return r(`div`,{className:`configure-body`,children:[e.description&&o(`p`,{className:`connector-desc`,children:o(`bdi`,{children:e.description})}),R&&r(`div`,{className:`oauth-setup-form`,children:[o(`p`,{className:`connector-desc`,children:n(`settings.connectors.firstSetup`)}),L.map(e=>r(`label`,{className:`oauth-setup-field`,children:[o(`span`,{className:`oauth-setup-label`,children:e.label}),o(`input`,{type:e.kind===`secret`?`password`:`text`,className:`oauth-setup-input`,placeholder:e.placeholder,value:p[e.key]??``,onChange:t=>m(n=>({...n,[e.key]:t.target.value})),autoComplete:`off`,spellCheck:!1}),e.help_md&&o(`span`,{className:`oauth-setup-help`,children:o(`bdi`,{children:e.help_md})})]},e.key))]}),!e.configured&&b.length>0&&r(`div`,{className:`oauth-grant-onconnect`,children:[o(`p`,{className:`oauth-grant-onconnect-label`,children:n(`settings.connectors.grantOnConnect`)}),b.map(e=>r(`label`,{className:`oauth-grant-onconnect-item`,children:[o(`input`,{type:`checkbox`,checked:S.has(e.namespaced_agent_id),onChange:()=>D(e.namespaced_agent_id)}),o(`span`,{children:e.name})]},e.namespaced_agent_id)),o(`p`,{className:`oauth-grant-onconnect-help`,children:n(`settings.connectors.grantLater`)})]}),!R&&o(q,{connector:e,onChanged:t}),l&&r(`div`,{className:`configure-error`,children:[o(E,{size:12}),` `,l]}),r(`div`,{className:`configure-actions`,children:[e.configured?o(`button`,{className:`btn-secondary`,disabled:s,onClick:()=>void P(),children:s?o(M,{size:12,className:`spin`}):n(`settings.connectors.disconnect`)}):R?o(`button`,{className:`btn-primary`,disabled:s,onClick:()=>void F(),children:s?o(M,{size:12,className:`spin`}):r(i.Fragment,{children:[o(w,{size:12}),` `,n(`settings.connectors.saveConnect`)]})}):e.configurable===!1?o(`span`,{className:`connector-setup-required`,title:e.config_error??void 0,children:n(`settings.connectors.setupRequired`)}):r(i.Fragment,{children:[o(`button`,{className:`btn-primary`,disabled:s||g!==null,onClick:()=>void A(),children:s?o(M,{size:12,className:`spin`}):r(i.Fragment,{children:[o(w,{size:12}),` `,n(`settings.key.connect`)]})}),e.supports_device_code&&o(`button`,{className:`btn-secondary`,disabled:s||g!==null,onClick:()=>void j(),title:n(`settings.connectors.codeTitle`),children:n(`settings.connectors.code`)})]}),(e.docs_url||e.product_url)&&r(`a`,{href:e.docs_url||e.product_url||`#`,target:`_blank`,rel:`noopener noreferrer`,className:`connector-product-link`,children:[n(`settings.connectors.learnMore`),` `,o(w,{size:11})]})]}),g&&!e.configured&&r(`div`,{className:`device-code-block`,children:[r(`p`,{className:`device-code-instructions`,children:[n(`settings.connectors.goTo`),` `,o(`a`,{href:g.verification_uri,target:`_blank`,rel:`noopener noreferrer`,onClick:e=>{e.preventDefault(),k(g.verification_uri)},children:g.verification_uri})]}),r(`div`,{className:`device-code-value`,children:[o(`code`,{children:g.user_code}),o(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>void navigator.clipboard?.writeText(g.user_code),title:n(`settings.connectors.copyCode`),children:n(`gpu.copy`)})]}),r(`p`,{className:`device-code-waiting`,children:[o(M,{size:12,className:`spin`}),` `,n(`settings.connectors.waiting`)]}),o(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>_(null),children:n(`settings.key.cancel`)})]})]})}function q({connector:e,onChanged:t}){let n=C(),[a,s]=(0,N.useState)(!1),[c,l]=(0,N.useState)({}),[u,d]=(0,N.useState)(!1),[f,p]=(0,N.useState)(!1),[m,g]=(0,N.useState)(null),_=e.oauth_setup_fields??[];if(_.length===0)return null;let v=e.oauth_client,y=v?.source===`keyring`?n(`settings.connectors.savedClient`,{id:v.client_id??``}):v?.source===`env`?n(`settings.connectors.envClient`,{id:v.client_id??``}):n(`settings.connectors.noClient`),b=async()=>{if(!c.client_id?.trim())g(n(`settings.connectors.clientRequired`));else{d(!0),g(null),p(!1);try{await h(e.id,{...Object.fromEntries(Object.entries(c).map(([e,t])=>[e,t.trim()])),save_only:!0}),p(!0),l({}),t(),setTimeout(()=>p(!1),2200)}catch(e){g(e instanceof Error?e.message:String(e))}finally{d(!1)}}};return r(`div`,{className:`oauth-client-editor`,children:[r(`button`,{type:`button`,className:`oauth-client-editor__toggle`,onClick:()=>s(e=>!e),"aria-expanded":a,children:[o(a?O:k,{size:12}),o(`span`,{children:n(`settings.connectors.client`)}),o(`span`,{className:`oauth-client-editor__status`,children:y})]}),a&&r(`div`,{className:`oauth-setup-form`,children:[o(`p`,{className:`connector-desc`,children:n(`settings.connectors.clientHelp`)}),_.map(e=>r(`label`,{className:`oauth-setup-field`,children:[o(`span`,{className:`oauth-setup-label`,children:e.label}),o(`input`,{type:e.kind===`secret`?`password`:`text`,className:`oauth-setup-input`,placeholder:e.kind===`secret`&&v?.source===`keyring`&&v.has_secret?`••••••••`:e.placeholder,value:c[e.key]??``,onChange:t=>l(n=>({...n,[e.key]:t.target.value})),autoComplete:`off`,spellCheck:!1}),e.help_md&&o(`span`,{className:`oauth-setup-help`,children:o(`bdi`,{children:e.help_md})})]},e.key)),m&&r(`div`,{className:`configure-error`,children:[o(E,{size:12}),` `,m]}),o(`div`,{className:`configure-actions`,children:o(`button`,{className:`btn-model-save${f?` saved`:``}`,disabled:u||!c.client_id?.trim(),onClick:()=>void b(),children:u?o(M,{size:12,className:`spin`}):f?r(i.Fragment,{children:[o(T,{size:12}),` `,n(`settings.advanced.saved`)]}):n(`settings.connectors.saveClient`)})})]})]})}function J({connector:e,onChanged:t}){let n=C(),[a,s]=(0,N.useState)(()=>Object.fromEntries(e.mcp_env_keys.map(e=>[e,``]))),[c,l]=(0,N.useState)(!1),[u,p]=(0,N.useState)(!1),[m,g]=(0,N.useState)(null);(0,N.useEffect)(()=>{s(Object.fromEntries(e.mcp_env_keys.map(e=>[e,``])))},[e.mcp_env_keys.join(`,`)]);let _=e.mcp_env_keys.length===0,y=Object.values(a).every(e=>e.trim()===``),b=async()=>{let n=Object.fromEntries(Object.entries(a).filter(([,e])=>e.trim()!==``));if(_||Object.keys(n).length!==0){l(!0),g(null),p(!1);try{await h(e.id,n),p(!0),t(),setTimeout(()=>p(!1),2200)}catch(e){g(e instanceof Error?e.message:String(e))}finally{l(!1)}}},x=async()=>{l(!0),g(null);try{await f(e.id),s(Object.fromEntries(e.mcp_env_keys.map(e=>[e,``]))),t()}catch(e){g(e instanceof Error?e.message:String(e))}finally{l(!1)}},S=async()=>{l(!0),g(null);try{e.enabled?await d(e.id):await v(e.id),t()}catch(e){g(e instanceof Error?e.message:String(e))}finally{l(!1)}};return r(`div`,{className:`configure-body`,children:[e.description&&o(`p`,{className:`connector-desc`,children:o(`bdi`,{children:e.description})}),m&&r(`div`,{className:`configure-error`,children:[o(E,{size:12}),` `,m]}),e.configured&&r(`div`,{className:`connector-toggle-row`,children:[o(`span`,{className:`connector-toggle-label`,children:n(`settings.connectors.active`)}),r(`span`,{className:`toggle-switch`,children:[o(`input`,{type:`checkbox`,checked:e.enabled!==!1,onChange:()=>void S(),disabled:c,"aria-label":e.enabled?n(`settings.connectors.disableServer`):n(`settings.connectors.enableServer`)}),o(`span`,{className:`toggle-track`})]})]}),e.configured&&e.enabled===!1&&o(`p`,{className:`connector-toggle-help`,children:n(`settings.connectors.disabledHelp`)}),e.mcp_env_keys.map(t=>r(`div`,{className:`mcp-key-row`,children:[o(`label`,{className:`mcp-key-label`,children:t}),o(`input`,{type:`password`,className:`mcp-key-input`,placeholder:e.configured?`••••••••`:n.bare(`settings.connectors.enterValue`),value:a[t]??``,onChange:e=>s(n=>({...n,[t]:e.target.value})),spellCheck:!1,autoComplete:`off`})]},t)),r(`div`,{className:`configure-actions`,children:[!(_&&e.configured)&&o(`button`,{className:`btn-model-save${u?` saved`:``}`,disabled:c||!_&&y,onClick:()=>void b(),children:c?o(M,{size:12,className:`spin`}):u?r(i.Fragment,{children:[o(T,{size:12}),` `,n(`settings.advanced.saved`)]}):n(_?`settings.key.connect`:`settings.advanced.save`)}),e.configured&&o(`button`,{className:`btn-secondary`,disabled:c,onClick:()=>void x(),children:n(`settings.connectors.disconnect`)}),e.product_url&&r(`a`,{href:e.product_url,target:`_blank`,rel:`noopener noreferrer`,className:`connector-product-link`,children:[n(`settings.connectors.docs`),` `,o(w,{size:11})]})]})]})}function Y({agent:e,connectorId:t,grantedScopes:n,onChanged:i}){let a=C(),s=e.required_connections?.find(e=>e.connector_id===t),c=e.namespaced_agent_id;if(!s||!c)return null;let[u,d]=(0,N.useState)(()=>new Set(n)),[f,p]=(0,N.useState)(null),[h,g]=(0,N.useState)(null);(0,N.useEffect)(()=>{d(new Set(n))},[n.join(`,`)]);let _=async e=>{if(f!==null)return;let r=new Set(u);r.has(e)?r.delete(e):r.add(e),d(r),p(e),g(null);try{r.size===0?await l(t,c):await m(t,c,[...r]),i()}catch(e){d(new Set(n)),g(e instanceof Error?e.message:String(e))}finally{p(null)}};return r(`div`,{className:`grant-agent-card`,children:[o(`bdi`,{className:`grant-agent-card-name`,children:e.name}),o(`div`,{className:`grant-scope-list`,children:s.scopes.map(e=>r(`label`,{className:`grant-scope-item`,children:[o(`span`,{className:`grant-scope-label`,children:B(e,a)}),r(`span`,{className:`toggle-switch`,children:[o(`input`,{type:`checkbox`,checked:u.has(e),onChange:()=>void _(e),disabled:f!==null}),o(`span`,{className:`toggle-track`})]})]},e))}),h&&r(`div`,{className:`grant-scope-warning grant-scope-warning--error`,children:[o(E,{size:11}),` `,h]})]})}function X({servers:e,expanded:t,onToggle:n}){return o(`div`,{className:`agent-mcps-section`,children:o(`div`,{className:`connectors-list`,children:e.map(e=>{let r=`${e.agent_id}::${e.server_name}`;return o(Z,{server:e,expanded:t===r,onToggle:()=>n(r)},r)})})})}function Z({server:e,expanded:t,onToggle:n}){let i=C(),a=[e.command,...e.args].join(` `);return r(`div`,{className:`agent-mcp-tile${t?` agent-mcp-tile--open`:``}`,children:[r(`button`,{type:`button`,className:`agent-mcp-tile-header`,onClick:n,"aria-expanded":t,children:[o(`span`,{className:`agent-mcp-server-name`,children:e.server_name}),o(`span`,{className:`agent-mcp-agent-label`,children:i(`settings.connectors.via`,{name:e.agent_name})}),e.disabled?o(`span`,{className:`agent-mcp-status disabled`,children:i(`settings.connectors.disabled`)}):r(`span`,{className:`agent-mcp-status enabled`,children:[o(T,{size:11}),` `,i(`settings.connectors.active`)]}),o(`span`,{className:`agent-mcp-readonly-badge`,children:i(`settings.connectors.readOnly`)}),o(`span`,{className:`agent-mcp-chevron`,children:o(t?O:k,{size:14})})]}),t&&r(`div`,{className:`agent-mcp-detail`,children:[a&&o(`bdi`,{dir:`ltr`,className:`agent-mcp-command-row`,children:a}),o(`bdi`,{dir:`ltr`,className:`agent-mcp-config-path`,children:e.config_path}),o(`div`,{className:`agent-mcp-config-hint`,children:i(`settings.connectors.editConfig`)})]})]})}function Q({connectorId:e,connectorType:t}){let n=C(),{agents:s}=a(),[l,u]=(0,N.useState)({}),[d,f]=(0,N.useState)({}),[p,m]=(0,N.useState)(!0),h=(0,N.useCallback)(async()=>{try{let[{grants:t},{activations:n}]=await Promise.all([x(e),c(e)]);u(t),f(n)}catch{u({}),f({})}finally{m(!1)}},[e]);if((0,N.useEffect)(()=>{h()},[h]),I((0,N.useCallback)(t=>{t.connectorId===e&&(t.reason===`grant_changed`||t.reason===`activation_changed`||t.reason===`disconnected`)&&h()},[e,h])),p)return null;let g=s.filter(t=>t.namespaced_agent_id&&t.required_connections?.some(t=>t.connector_id===e)),_=t===`mcp_server`?s.filter(t=>t.namespaced_agent_id&&(t.consumes_mcp_servers||t.required_connections?.some(t=>t.connector_id===e))):[];return r(`div`,{className:`connection-grants`,children:[o(`div`,{className:`grants-header`,children:n(`settings.connectors.grants`)}),g.length===0?o(`div`,{className:`grants-empty`,children:n(`settings.connectors.noGrants`)}):g.map(t=>o(Y,{agent:t,connectorId:e,grantedScopes:l[t.namespaced_agent_id]??[],onChanged:()=>void h()},t.namespaced_agent_id)),_.length>0&&r(i.Fragment,{children:[o(`div`,{className:`grants-header grants-header--activations`,children:n(`settings.connectors.activeFor`)}),o(`div`,{className:`grants-help`,children:n(`settings.connectors.activationHelp`)}),_.map(t=>o($,{agent:t,connectorId:e,active:!!d[t.namespaced_agent_id],grantedScopes:l[t.namespaced_agent_id]??[],onChanged:()=>void h()},`activation-${t.namespaced_agent_id}`))]})]})}function $({agent:e,connectorId:t,active:n,grantedScopes:i,onChanged:a}){let s=C(),c=e.required_connections?.find(e=>e.connector_id===t),l=e.namespaced_agent_id;if(!l)return null;let[u,d]=(0,N.useState)(n),[f,p]=(0,N.useState)(!1),[m,h]=(0,N.useState)(null);(0,N.useEffect)(()=>{d(n)},[n]);let g=async()=>{if(f)return;let e=!u;d(e),p(!0),h(null);try{if(e){let e=i.length===0?c?[...c.scopes]:[...H]:void 0;await _(t,l,e)}else await b(t,l);a()}catch(e){d(n),h(e instanceof Error?e.message:String(e))}finally{p(!1)}};return r(`div`,{className:`grant-agent-card`,children:[o(`bdi`,{className:`grant-agent-card-name`,children:e.name}),o(`div`,{className:`grant-scope-list`,children:r(`label`,{className:`grant-scope-item`,children:[o(`span`,{className:`grant-scope-label`,children:s(u?`settings.connectors.toolsVisible`:`settings.connectors.toolsHidden`)}),r(`span`,{className:`toggle-switch`,children:[o(`input`,{type:`checkbox`,checked:u,onChange:()=>void g(),disabled:f}),o(`span`,{className:`toggle-track`})]})]})}),m&&r(`div`,{className:`grant-scope-warning grant-scope-warning--error`,children:[o(E,{size:11}),` `,m]})]})}function ee(){let e=C();return r(`div`,{className:`settings-pane`,children:[o(`h2`,{className:`settings-pane-title`,children:e(`settings.section.connectors`)}),o(W,{})]})}export{ee as ConnectorsPane};
@@ -0,0 +1 @@
1
+ .connectors-section .settings-help{color:var(--text-secondary);font-size:13px;line-height:1.5;font-family:var(--font-sans);margin-bottom:12px}.connectors-loading{color:var(--text-muted);justify-content:center;padding:20px;display:flex}.connectors-list{flex-direction:column;gap:6px;display:flex}.connector-tile{border:1px solid var(--border-light);border-radius:var(--radius-md);background:var(--bg-secondary);transition:border-color var(--duration) var(--ease);overflow:hidden}.connector-tile:hover,.connector-tile--open{border-color:var(--border)}@media (width<=768px){.connector-tile-header{flex-wrap:wrap}.connector-status.ok{overflow-wrap:anywhere;flex-basis:100%;order:3;min-width:0}}.connector-tile-row{align-items:center;display:flex}.connector-tile-row .connector-tile-menu{flex-shrink:0;margin-inline-end:8px}.connectors-section{flex-direction:column;gap:12px;display:flex}.connector-tile-header{cursor:pointer;text-align:start;min-width:0;font-family:var(--font-sans);color:var(--text-primary);background:0 0;border:none;flex:1;align-items:center;gap:10px;padding:12px 16px;display:flex}.connector-tile-header:hover{background:var(--bg-hover)}[data-theme=dark] .connector-tile-header:hover{background:color-mix(in srgb, var(--text-primary) 4%, transparent)}.connector-tile-name{font-size:13px;font-weight:600}.connector-tile-type{font-size:var(--fs-caption);font-family:var(--font-sans);color:var(--text-muted);background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:999px;flex-shrink:0;padding:1px 6px}.connector-status{font-size:12px;font-family:var(--font-sans);align-items:center;gap:4px;display:inline-flex}.connector-status.ok{color:var(--accent-green)}.connector-status.idle{color:var(--text-muted)}.connector-status.disabled{color:var(--text-muted);background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:999px;padding:1px 8px;font-size:11px}.connector-tile-chevron{color:var(--text-muted);flex-shrink:0;margin-inline-start:auto}.connector-detail{border-top:1px solid var(--border-light);padding:16px 18px}.connector-desc{color:var(--text-secondary);font-size:12px;line-height:1.5;font-family:var(--font-sans);margin-bottom:12px}.configure-error{color:var(--danger);background:color-mix(in srgb, var(--danger) 8%, transparent);border:1px solid color-mix(in srgb, var(--danger) 20%, transparent);border-radius:var(--radius-sm);font-size:12px;font-family:var(--font-sans);align-items:center;gap:6px;margin-bottom:10px;padding:6px 10px;display:flex}.configure-info{color:var(--text-secondary);background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:var(--radius-sm);font-size:12px;font-family:var(--font-sans);align-items:flex-start;gap:6px;margin-bottom:10px;padding:6px 10px;line-height:1.4;display:flex}.configure-info svg{color:var(--text-muted);flex-shrink:0;margin-top:2px}.connector-setup-required{font-size:12px;font-family:var(--font-sans);color:var(--text-muted);background:var(--bg-tertiary);border:1px solid var(--border-light);cursor:default;border-radius:999px;align-items:center;gap:4px;padding:3px 10px;display:inline-flex}.configure-actions{align-items:center;gap:8px;margin-top:10px;display:flex}.oauth-setup-form{background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:6px;flex-direction:column;gap:12px;margin:8px 0 4px;padding:12px;display:flex}.oauth-setup-field{font-size:12px;font-family:var(--font-sans);flex-direction:column;gap:4px;display:flex}.oauth-setup-label{color:var(--text-primary);font-weight:500}.oauth-setup-input{border:1px solid var(--border-light);background:var(--bg-primary);color:var(--text-primary);font-family:var(--font-mono);border-radius:4px;padding:6px 8px;font-size:12px}.oauth-setup-input:focus{border-color:var(--accent);outline:none}.oauth-setup-help{color:var(--text-secondary);font-size:11px;line-height:1.4}.oauth-grant-onconnect{background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:6px;flex-direction:column;gap:6px;margin:8px 0 4px;padding:10px 12px;display:flex}.oauth-grant-onconnect-label{color:var(--text-primary);margin:0;font-size:12px;font-weight:500}.oauth-grant-onconnect-item{color:var(--text-primary);cursor:pointer;align-items:center;gap:8px;font-size:12px;display:flex}.oauth-grant-onconnect-help{color:var(--text-secondary);margin:2px 0 0;font-size:11px;line-height:1.4}.connector-product-link{color:var(--text-secondary);font-size:12px;font-family:var(--font-sans);align-items:center;gap:3px;margin-inline-start:auto;text-decoration:none;display:inline-flex}.connector-product-link:hover{color:var(--accent);text-decoration:underline}.mcp-key-row{flex-direction:column;gap:4px;margin-bottom:10px;display:flex}.mcp-key-label{font-size:var(--fs-label);font-family:var(--font-sans);color:var(--text-secondary)}.mcp-key-input{font-size:13px;font-family:var(--font-mono);background:var(--bg-primary);border:1px solid var(--border-light);border-radius:var(--radius-md);color:var(--text-primary);transition:border-color var(--duration) var(--ease);outline:none;padding:7px 10px}.mcp-key-input:focus{border-color:var(--accent)}.connection-grants{border-top:1px dashed var(--border-light);margin-top:12px;padding-top:12px}.grants-header{font-size:var(--fs-label);font-weight:600;font-family:var(--font-sans);color:var(--text-muted);margin-bottom:8px}.grants-empty{color:var(--text-muted);font-size:12px;font-family:var(--font-sans);font-style:italic}.grant-agent-card{border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--bg-secondary);margin-top:6px;padding:10px 14px}.grant-agent-card-name{font-size:12px;font-weight:600;font-family:var(--font-sans);color:var(--text-primary);margin-bottom:10px}.grant-scope-list{border-top:1px solid var(--border-light);flex-direction:column;gap:2px;padding-top:8px;display:flex}.grant-scope-item{cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:12px;padding:5px 0;display:flex}.grant-scope-label{font-size:12px;font-family:var(--font-sans);color:var(--text-secondary);flex:1;line-height:1.3}.grant-scope-warning{font-size:11px;font-family:var(--font-sans);color:var(--text-muted);align-items:center;gap:5px;margin-top:7px;display:flex}.grant-scope-warning--error{color:var(--danger)}.error-banner{background:color-mix(in srgb, var(--danger) 8%, transparent);color:var(--danger);border-radius:var(--radius-md);border:1px solid color-mix(in srgb, var(--danger) 20%, transparent);font-size:12px;font-family:var(--font-sans);align-items:center;gap:6px;margin-bottom:10px;padding:8px 12px;display:flex}.spin{animation:spin var(--duration-spin) var(--ease-linear) infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.connector-toggle-row{background:var(--bg-secondary);border:1px solid var(--border-light);border-radius:6px;align-items:center;gap:12px;margin-bottom:10px;padding:10px 14px;display:flex}.connector-toggle-label{font-size:12px;font-family:var(--font-sans);color:var(--text-primary);flex:1}.connector-toggle-help{color:var(--text-muted);margin:-4px 0 10px 14px;font-size:11px;font-style:italic}.connector-tile-menu{flex-shrink:0;align-items:center;display:inline-flex;position:relative}.connector-tile-menu-trigger{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px;line-height:0}.connector-tile-menu-trigger:hover{background:var(--bg-tertiary);color:var(--text-primary)}.connector-tile-menu-trigger:focus-visible{outline:2px solid var(--accent-blue);outline-offset:1px}.connector-tile-menu-trigger:disabled{opacity:.4;cursor:not-allowed}.connector-tile-menu-popup{z-index:1000;background:var(--bg-primary);border:1px solid var(--border);text-align:start;border-radius:4px;flex-direction:column;min-width:160px;padding:4px;display:flex;box-shadow:0 4px 12px #0000002e}.connector-tile-menu-item{font-size:12px;font-family:var(--font-sans);color:var(--text-primary);text-align:start;cursor:pointer;background:0 0;border:none;border-radius:3px;padding:6px 10px;line-height:1.4}.connector-tile-menu-item:hover{background:var(--bg-secondary)}.connector-tile-menu-item:disabled{opacity:.4;cursor:not-allowed}.connector-tile-menu-item--danger{color:var(--danger)}.connector-tile-menu-divider{background:var(--border-light);height:1px;margin:4px 0}.agent-mcps-section{margin-top:20px}.agent-mcps-section-header{font-size:var(--fs-label);font-weight:600;font-family:var(--font-sans);color:var(--text-muted);margin-bottom:8px}.agent-mcp-tile{border:1px solid var(--border-light);border-radius:var(--radius-md);background:var(--bg-secondary);transition:border-color var(--duration) var(--ease);overflow:hidden}.agent-mcp-tile:hover,.agent-mcp-tile--open{border-color:var(--border)}.agent-mcp-tile-header{cursor:pointer;text-align:start;width:100%;font-family:var(--font-sans);color:var(--text-primary);background:0 0;border:none;align-items:center;gap:10px;padding:10px 14px;display:flex}.agent-mcp-tile-header:hover{background:var(--bg-hover)}[data-theme=dark] .agent-mcp-tile-header:hover{background:color-mix(in srgb, var(--text-primary) 4%, transparent)}.agent-mcp-server-name{font-size:13px;font-weight:600}.agent-mcp-agent-label{font-size:11px;font-family:var(--font-sans);color:var(--text-muted);flex:1}.agent-mcp-status{font-size:11px;font-family:var(--font-sans);align-items:center;gap:4px;display:inline-flex}.agent-mcp-status.enabled{color:var(--accent-green)}.agent-mcp-status.disabled{color:var(--text-muted);background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:999px;padding:1px 8px}.agent-mcp-readonly-badge{font-size:var(--fs-caption);font-family:var(--font-sans);color:var(--text-muted);background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:999px;flex-shrink:0;padding:1px 6px}.agent-mcp-chevron{color:var(--text-muted);flex-shrink:0}.agent-mcp-detail{border-top:1px solid var(--border-light);padding:12px 16px}.agent-mcp-command-row{font-size:12px;font-family:var(--font-mono);color:var(--text-secondary);background:var(--bg-tertiary);border:1px solid var(--border-light);border-radius:var(--radius-sm);word-break:break-all;margin-bottom:8px;padding:6px 10px}.agent-mcp-config-path{font-size:11px;font-family:var(--font-mono);color:var(--text-muted);word-break:break-all;margin-bottom:4px}.agent-mcp-config-hint{font-size:11px;font-family:var(--font-sans);color:var(--text-muted);font-style:italic}.connector-tile-menu-error{color:var(--danger);border-top:1px solid var(--border-light);margin-top:4px;padding:6px 10px;font-size:11px}.oauth-client-editor{border:1px solid var(--border-light);border-radius:var(--radius-sm);margin:6px 0 8px}.oauth-client-editor__toggle{width:100%;color:var(--text-primary);cursor:pointer;text-align:start;background:0 0;border:none;align-items:center;gap:6px;padding:6px 8px;font-size:12px;display:flex}.oauth-client-editor__status{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;max-width:60%;margin-inline-start:auto;font-size:11px;overflow:hidden}.oauth-client-editor .oauth-setup-form{padding:0 8px 8px}.device-code-block{border:1px solid var(--border);background:var(--bg-secondary);border-radius:8px;margin-top:10px;padding:12px}.device-code-instructions{color:var(--text-primary);margin:0 0 8px;font-size:12px}.device-code-value{align-items:center;gap:8px;margin-bottom:8px;display:flex}.device-code-value code{letter-spacing:2px;background:var(--bg-tertiary);color:var(--text-primary);-webkit-user-select:all;user-select:all;border-radius:6px;padding:4px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:18px;font-weight:600}.device-code-waiting{color:var(--text-muted);align-items:center;gap:6px;margin:0 0 8px;font-size:12px;display:flex}
@@ -0,0 +1,4 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{G as t,N as n,W as r,i,n as a,o,r as s}from"./apiBase-BMkGbdXt.js";import{Ht as c,N as ee,Ut as te,_ as ne,et as re,pt as ie,rt as l,s as u,u as ae,vt as oe}from"./api-BzlFpP4T.js";import{$ as d,Ct as f,G as se,It as ce,J as le,K as ue,Lt as p,Nt as de,Q as fe,Tt as pe,Y as me,at as he,bt as ge,ct as _e,dt as ve,nt as ye,q as be,rt as m,t as h,tt as xe}from"./index-hAcJijAU.js";var g={name:`circle-stop`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`rect`,{x:`9`,y:`9`,width:`6`,height:`6`,rx:`1`,key:`1ssd4o`}]],aliases:[`stop-circle`]};g.node;var _=r(g),v={name:`loader`,size:24,node:[[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m16.2 7.8 2.9-2.9`,key:`r700ao`}],[`path`,{d:`M18 12h4`,key:`wj9ykh`}],[`path`,{d:`m16.2 16.2 2.9 2.9`,key:`1bxg5t`}],[`path`,{d:`M12 18v4`,key:`jadmvz`}],[`path`,{d:`m4.9 19.1 2.9-2.9`,key:`bwix9q`}],[`path`,{d:`M2 12h4`,key:`j09sii`}],[`path`,{d:`m4.9 4.9 2.9 2.9`,key:`giyufr`}]]};v.node;var Se=r(v),y={name:`refresh-ccw`,size:24,node:[[`path`,{d:`M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`14sxne`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16`,key:`1hlbsb`}],[`path`,{d:`M16 16h5v5`,key:`ccwih5`}]]};y.node;var Ce=r(y),b=e(t(),1),x=e=>e.toLocaleString(`en-US`);function S(e,t){let n=x(e.done);return e.phase===`reading`?e.total==null?t(`docs.progress.readingCount`,{done:n}):t(`docs.progress.reading`,{done:n,total:x(e.total)}):e.total==null?t(`docs.progress.embeddingCount`,{done:n}):t(`docs.progress.embedding`,{done:n,total:x(e.total)})}function C(e){return e.total==null||e.total<=0?null:Math.min(100,Math.floor(e.done/e.total*100))}function we({progress:e}){let t=S(e,d()),n=C(e);return i(`div`,{className:`index-progress is-running`,children:[s(`div`,{className:`index-progress-track${n==null?` is-indeterminate`:``}`,role:`progressbar`,"aria-label":t,"aria-valuemin":n==null?void 0:0,"aria-valuemax":n==null?void 0:100,"aria-valuenow":n??void 0,children:s(`div`,{className:`index-progress-fill`,style:n==null?void 0:{inlineSize:`${n}%`}})}),i(`span`,{className:`index-progress-label`,children:[t,n!=null&&i(`span`,{className:`index-progress-pct`,children:[` · `,n,`%`]})]})]})}function Te(e){let[t,...n]=e.replace(/^RAG indexing failed for [^:]+:\s*/,``).trim().split(`
2
+ `);return{summary:t.trim(),more:n.join(`
3
+ `).trim()}}function Ee(e,t){let n=t.skipped??0,r=[];if(t.indexed>0?r.push(`Indexed ${t.indexed} file${t.indexed===1?``:`s`} from "${e}".`):t.failed===0&&r.push(`"${e}" has no documents GAIA can index.`),n>0&&r.push(`Skipped ${n} file${n===1?``:`s`} of a type GAIA doesn't index.`),t.failed>0){let e=t.errors[0]?` ${t.errors[0].split(`
4
+ `)[0]}`:``;r.push(`${t.failed} file${t.failed===1?``:`s`} couldn't be indexed.${e}`)}return r.push(`Subfolders aren't included.`),r.join(` `)}var De=1e3;function w(e,t,n){if(n)return{...e,[t]:n};if(!(t in e))return e;let{[t]:r,...i}=e;return i}function Oe(e){let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function ke(e,t){try{let n=new Date(e);if(isNaN(n.getTime()))return``;let r=new Date().getTime()-n.getTime(),i=Math.floor(r/1e3),a=Math.floor(i/60),o=Math.floor(a/60),s=Math.floor(o/24);return i<60?t(`time.justNow`):a<60?t(`time.minutesAgo`,{n:a}):o<24?t(`time.hoursAgo`,{n:o}):s===1?t(`time.yesterday`):s<7?t(`time.daysAgo`,{n:s}):n.toLocaleDateString(void 0,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}catch{return``}}function Ae(e){try{let t=new Date(e);return isNaN(t.getTime())?``:t.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,second:`2-digit`})}catch{return``}}function T(){let e=d(),{documents:t,setDocuments:r,setShowDocLibrary:g,setShowFileBrowser:v,currentSessionId:y,sessions:x,updateSessionInList:S,draftDocumentIds:C,addDraftDocuments:T,removeDraftDocument:E}=o(),D=x.find(e=>e.id===y)??null,[O,je]=(0,b.useState)(y?`chat`:`next`),k=O===`chat`?y:null,A=`“${D?.title||e(`docs.untitledChat`)}”`,[j,M]=(0,b.useState)(``),Me=(0,b.useCallback)(()=>g(!1),[g]);ye(!0,Me);let N=(0,b.useRef)(null);me(N,!0);let[Ne,P]=(0,b.useState)(!1),[F,I]=(0,b.useState)(!1),[Pe,L]=(0,b.useState)(``),[R,z]=(0,b.useState)(``),[B,V]=(0,b.useState)(null),[H,U]=(0,b.useState)(null),[W,G]=(0,b.useState)(new Set),[Fe,K]=(0,b.useState)({}),q=(0,b.useRef)(new Map),[,Ie]=(0,b.useState)(0);(0,b.useEffect)(()=>{n.doc.info(`Loading document library...`);let e=n.doc.time();l().then(t=>{let i=t.documents||[];r(i),n.doc.timed(`Loaded ${i.length} document(s), ${t.total_chunks||0} chunks, ${t.total_size_bytes||0} bytes total`,e)}).catch(e=>{n.doc.error(`Failed to load documents`,e),r([])})},[r]);let J=t.some(e=>e.indexing_status===`indexing`||e.indexing_status===`pending`);(0,b.useEffect)(()=>{if(!J)return;let e=o.getState().documents;for(let t of e)(t.indexing_status===`indexing`||t.indexing_status===`pending`)&&!q.current.has(t.id)&&q.current.set(t.id,Date.now());let t=!1,i=setInterval(async()=>{if(Ie(e=>e+1),!t){t=!0;try{let e=o.getState().documents.filter(e=>e.indexing_status===`indexing`||e.indexing_status===`pending`);for(let t of e)try{let e=await ee(t.id);if(K(n=>w(n,t.id,e.progress)),e.indexing_status!==`indexing`&&e.indexing_status!==`pending`){q.current.delete(t.id);let e=await l();r(e.documents||[]);break}}catch(e){n.doc.warn(`Indexing status for ${t.filename} unavailable`,e)}}finally{t=!1}}},De);return()=>clearInterval(i)},[J,r]),(0,b.useEffect)(()=>{let e=new Set(t.filter(e=>e.indexing_status===`indexing`||e.indexing_status===`pending`).map(e=>e.id));for(let t of q.current.keys())e.has(t)||q.current.delete(t);K(t=>Object.keys(t).reduce((t,n)=>e.has(n)?t:w(t,n,null),t))},[t]),(0,b.useEffect)(()=>{let e=setInterval(async()=>{try{let e=(await l()).documents||[],t=o.getState().documents;(e.length!==t.length||e.some((e,n)=>{let r=t.find(t=>t.id===e.id);return!r||r.indexing_status!==e.indexing_status||r.indexed_at!==e.indexed_at||r.chunk_count!==e.chunk_count}))&&(r(e),n.doc.debug(`Document list refreshed (server-side changes detected)`))}catch{}},15e3);return()=>clearInterval(e)},[r]);let Le=t.reduce((e,t)=>e+t.file_size,0),Re=t.reduce((e,t)=>e+t.chunk_count,0),Y=(0,b.useCallback)(async(t,r)=>{if(!k){T([t]),M(e(`docs.willAttach`,{name:r})),n.doc.info(`"${r}" will be attached to the next new chat`);return}await u(k,t);let i=o.getState().sessions.find(e=>e.id===k)?.document_ids??[];i.includes(t)||S(k,{document_ids:[...i,t]}),M(e(`docs.attached`,{name:r,chat:A})),n.doc.info(`Attached "${r}" to session ${k}`)},[k,A,S,T,e]),X=(0,b.useCallback)(async(e,t)=>{if(e.length===0)return;if(!k){T(e),n.doc.info(`"${t}" will be attached to the next new chat`);return}let r=[];for(let t of e)try{await u(k,t),r.push(t)}catch(e){n.doc.warn(`Could not attach document to session: ${e}`)}let i=o.getState().sessions.find(e=>e.id===k)?.document_ids??[],a=r.filter(e=>!i.includes(e));a.length>0&&S(k,{document_ids:[...i,...a]}),n.doc.info(`Attached "${t}" to session ${k}`)},[k,S,T]),Z=(0,b.useCallback)(async(t,i,a)=>{if(!await xe(`embedding`))return;let o=t.includes(`.`)?`.`+t.split(`.`).pop()?.toLowerCase():``,s=o&&!le(o)?be(o)?.message??`The file type "${o}" is not supported for indexing.`:null;if(s&&!a){n.doc.warn(`Unsupported file type: ${t} (${o})`),V({filename:t,error:s});return}n.doc.info(`Indexing document: ${t}`);let c=n.doc.time();I(!0),L(e(`docs.indexingFile`,{name:t})),V(null),U(null),M(``);try{let e=await i();if(n.doc.timed(`Indexed "${t}": ${e?.chunk_count||`?`} chunks`,c),e?.id)try{await Y(e.id,e.filename||t)}catch(e){n.doc.error(`Could not attach "${t}" to ${A}`,e),V({filename:t,error:`Indexed, but not attached to ${A}: ${e instanceof Error?e.message:e}`})}let a=await l();r(a.documents||[]),L(``)}catch(e){let{httpStatus:r,reason:i}=e??{};if(i===`is_folder`&&a){await a();return}n.doc.error(`Failed to index "${t}"`,e);let o=r===400&&s?s:e instanceof Error?e.message:`Upload failed`;V({filename:t,error:o,status:r,kind:i}),L(``)}finally{I(!1)}},[Y,A,r,e]),Q=(0,b.useCallback)(async(t,i)=>{n.doc.info(`"${t}" is a folder; indexing its documents`),L(e(`docs.indexingFolder`,{name:i}));try{let e=await re(t,!1);await X(e.documents.map(e=>e.id).filter(Boolean),i),U(Ee(i,e));let n=await l();r(n.documents||[])}catch(e){n.doc.error(`Failed to index folder "${t}"`,e);let r=e instanceof Error?e.message:`Folder indexing failed`,{httpStatus:a}=e??{};V({filename:i,error:r,status:a})}finally{L(``)}},[X,r,e]),ze=(0,b.useCallback)(async(e,t)=>{await Z(t,()=>te(e),()=>Q(e,t))},[Z,Q]),$=(0,b.useCallback)(async e=>{await Z(e.name,()=>c(e))},[Z]),Be=(0,b.useCallback)(async e=>{e.preventDefault(),P(!1);let t=Array.from(e.dataTransfer.files);n.doc.info(`Dropped ${t.length} file(s) into Document Library`);for(let e of t)await $(e)},[$]),Ve=(0,b.useCallback)(async e=>{let i=t.find(t=>t.id===e);n.doc.info(`Deleting document: ${i?.filename||e}`);try{await ne(e),q.current.delete(e),E(e),r(t.filter(t=>t.id!==e)),n.doc.info(`Deleted document: ${i?.filename||e}`)}catch(t){n.doc.error(`Failed to delete document: ${i?.filename||e}`,t)}},[t,r,E]),He=(0,b.useCallback)(async(e,t)=>{n.doc.info(`Opening folder for: ${e}`);try{await ie(e,!0)}catch(e){n.doc.error(`Failed to open folder for: ${t}`,e)}},[]),Ue=(0,b.useCallback)(async e=>{let i=t.find(t=>t.id===e);n.doc.info(`Cancelling indexing for: ${i?.filename||e}`);try{await ae(e),q.current.delete(e);let t=await l();r(t.documents||[]),n.doc.info(`Cancelled indexing for: ${i?.filename||e}`)}catch(t){n.doc.error(`Failed to cancel indexing: ${i?.filename||e}`,t)}},[t,r]),We=(0,b.useCallback)(async e=>{if(W.has(e))return;let i=t.find(t=>t.id===e);n.doc.info(`Reindexing document: ${i?.filename||e}`),G(t=>new Set(t).add(e));try{await oe(e),n.doc.info(`Reindex complete for: ${i?.filename||e}`)}catch(t){let r=t instanceof Error?t.message:String(t);n.doc.error(`Reindex failed for: ${i?.filename||e}`,t),V({filename:i?.filename||e,error:r})}finally{try{let e=await l();r(e.documents||[])}catch(e){n.doc.error(`Failed to refresh documents after reindex`,e)}G(t=>{let n=new Set(t);return n.delete(e),n})}},[t,r,W]),Ge=(0,b.useCallback)(async e=>{let r=t.find(t=>t.id===e)?.filename||e;M(``);try{await Y(e,r)}catch(e){n.doc.error(`Failed to attach ${r} to ${A}`,e),V({filename:r,error:`Not attached to ${A}: ${e instanceof Error?e.message:e}`})}},[t,Y,A]),Ke=(0,b.useCallback)(async e=>{if(e.preventDefault(),!R.trim())return;let t=R.trim();n.doc.info(`Indexing from path input: ${t}`),await ze(t,t.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||`file`),z(``)},[R,ze]),qe=t=>{let n=t.indexing_status||`complete`,r=q.current.get(t.id),a=t.indexed_at?ke(t.indexed_at,e):``,o=t.indexed_at?Ae(t.indexed_at):``;switch(n){case`indexing`:case`pending`:{let n=Fe[t.id];return i(`div`,{className:`doc-indexing-status`,children:[n?s(we,{progress:n}):i(`div`,{className:`doc-indexing-bar`,children:[s(`div`,{className:`doc-indexing-bar-track`,children:s(`div`,{className:`doc-indexing-bar-fill`})}),i(`span`,{className:`doc-indexing-label`,children:[s(Se,{size:12,className:`doc-spin`}),r?e.hint(e(`docs.indexingLabel`),Oe(r)):e(`docs.indexing`)]})]}),i(`button`,{className:`btn-cancel`,onClick:e=>{e.stopPropagation(),Ue(t.id)},title:e(`docs.cancelIndexing`),"aria-label":e(`docs.cancelIndexingAria`,{name:t.filename}),children:[s(_,{size:14}),e(`docs.cancel`)]})]})}case`failed`:{let n=t.error_kind?se[t.error_kind]:void 0,r=t.last_error?Te(t.last_error):null;return i(`div`,{className:`doc-failure`,children:[i(`div`,{className:`doc-indexing-status`,children:[i(`span`,{className:`doc-status-badge doc-status-failed`,title:t.last_error||void 0,"aria-label":t.last_error?e(`docs.failedAria`,{error:t.last_error}):e(`docs.indexingFailed`),children:[s(p,{size:12}),` `,e(n?`docs.cantRead`:`docs.failed`)]}),i(`button`,{className:n?`btn-retry btn-retry-quiet`:`btn-retry`,onClick:e=>{e.stopPropagation(),We(t.id)},title:e(n?`docs.retryTitleFix`:`docs.retryTitle`),"aria-label":e(`docs.retryAria`,{name:t.filename}),disabled:W.has(t.id),children:[s(Ce,{size:n?12:14}),W.has(t.id)?e(`docs.retrying`):e(`docs.retry`)]})]}),n&&s(`p`,{className:`doc-failure-hint`,children:n}),r&&(r.more?i(`details`,{className:`doc-failure-reason`,children:[s(`summary`,{children:r.summary}),s(`p`,{children:r.more})]}):s(`p`,{className:`doc-failure-reason`,children:r.summary})),!r&&!n&&s(`p`,{className:`doc-failure-reason`,children:e(`docs.noReason`)})]})}case`cancelled`:return i(`span`,{className:`doc-status-badge doc-status-cancelled`,children:[s(_,{size:12}),` `,e(`docs.cancelled`)]});case`missing`:return i(`span`,{className:`doc-status-badge doc-status-missing`,children:[s(p,{size:12}),` `,e(`docs.missing`)]});default:return i(`span`,{className:`doc-meta`,children:[s(`bdi`,{dir:`ltr`,children:h(t.file_size)}),` · `,e.plural(`docs.chunks`,t.chunk_count),a&&i(`span`,{className:`doc-timestamp`,title:e(`docs.indexedAt`,{time:o}),children:[s(de,{size:10}),a]})]})}};return s(`div`,{ref:N,className:`modal-overlay`,onClick:()=>g(!1),role:`dialog`,"aria-modal":`true`,"aria-label":e(`docs.title`),children:i(`div`,{className:`modal-panel doc-modal`,onClick:e=>e.stopPropagation(),children:[i(`div`,{className:`modal-header`,children:[s(`h3`,{children:e(`docs.title`)}),s(`button`,{className:`btn-icon`,onClick:()=>g(!1),"aria-label":e(`docs.close`),children:s(m,{size:18})})]}),i(`div`,{className:`modal-body`,children:[i(`div`,{className:`doc-target`,children:[y?i(`label`,{className:`doc-target-choice`,children:[e(`docs.addTo`),i(`select`,{value:O,onChange:e=>{je(e.target.value),M(``)},children:[s(`option`,{value:`chat`,children:e(`docs.thisChat`,{chat:A})}),s(`option`,{value:`next`,children:e(`docs.nextChat`)})]})]}):s(`span`,{children:e(`docs.nextChatOnly`)}),s(`span`,{className:`doc-target-hint`,children:e(`docs.hint`)})]}),s(`div`,{className:`drop-zone ${Ne?`drag-over`:``} ${F?`uploading`:``}`,onDragOver:e=>{e.preventDefault(),P(!0)},onDragLeave:()=>P(!1),onDrop:Be,children:F?i(a.Fragment,{children:[s(`div`,{className:`upload-spinner`}),s(`p`,{children:Pe})]}):i(a.Fragment,{children:[s(he,{size:32,strokeWidth:1.5}),s(`p`,{children:e(`docs.drop`)}),s(`span`,{className:`drop-hint`,children:e(`docs.dropHint`)})]})}),i(`form`,{className:`path-input-form`,onSubmit:Ke,children:[s(f,{size:16,className:`path-icon`}),s(`input`,{type:`text`,className:`path-input`,value:R,onChange:e=>z(e.target.value),placeholder:e(`docs.pathPlaceholder`,{example:fe()}),"aria-label":e(`docs.pathAria`),dir:`auto`}),s(`button`,{type:`submit`,className:`btn-secondary`,disabled:!R.trim()||F,children:e(`docs.index`)}),i(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>{g(!1),v(!0)},title:e(`docs.browseTitle`),children:[s(ve,{size:14}),e(`docs.browse`)]})]}),j&&s(`p`,{className:`doc-target-notice`,role:`status`,children:j}),B&&s(ue,{filename:B.filename,error:B.error,status:B.status,kind:B.kind,onDismiss:()=>V(null)}),H&&i(`div`,{className:`doc-folder-notice`,role:`status`,children:[s(ce,{size:14}),s(`span`,{children:H}),s(`button`,{className:`btn-icon-sm`,onClick:()=>U(null),"aria-label":e(`docs.dismissFolder`),children:s(m,{size:12})})]}),t.length>0&&i(`div`,{className:`doc-stats`,children:[s(`span`,{children:e.plural(`docs.count`,t.length)}),s(`span`,{children:`·`}),s(`span`,{children:e.plural(`docs.chunks`,Re)}),s(`span`,{children:`·`}),s(`bdi`,{dir:`ltr`,children:h(Le)})]}),i(`div`,{className:`doc-list`,children:[t.length===0&&!F&&i(`div`,{className:`empty-docs`,children:[s(pe,{size:32,strokeWidth:1}),s(`p`,{children:e(`docs.empty`)}),s(`span`,{children:e(`docs.emptyHint`)})]}),t.map(t=>i(`div`,{className:`doc-row ${t.indexing_status===`indexing`?`doc-row-indexing`:``}`,children:[i(`div`,{className:`doc-info`,children:[s(`span`,{className:`doc-name`,dir:`auto`,children:t.filename}),qe(t)]}),i(`div`,{className:`doc-row-actions`,children:[t.filepath&&s(`button`,{className:`btn-icon-sm doc-open-folder`,onClick:()=>He(t.filepath,t.filename),title:e(`docs.openFolder`,{path:t.filepath}),"aria-label":e(`docs.openFolderAria`,{name:t.filename}),children:s(f,{size:14})}),t.indexing_status===`complete`&&!(k?D?.document_ids?.includes(t.id):C.includes(t.id))&&s(`button`,{className:`btn-icon-sm doc-attach`,onClick:()=>Ge(t.id),title:k?e(`docs.useIn`,{chat:A}):e(`docs.useNext`),"aria-label":k?e(`docs.attachAria`,{name:t.filename,chat:A}):e(`docs.attachNextAria`,{name:t.filename}),children:s(ge,{size:14})}),t.indexing_status!==`indexing`&&t.indexing_status!==`pending`&&s(`button`,{className:`btn-icon-sm doc-delete`,onClick:()=>Ve(t.id),title:e(`docs.remove`),"aria-label":e(`docs.removeAria`,{name:t.filename}),children:s(_e,{size:14})})]})]},t.id))]})]})]})})}export{T as DocumentLibrary};
@@ -0,0 +1,4 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{G as t,N as n,W as r,i,o as a,r as o}from"./apiBase-BMkGbdXt.js";import{Ut as s,_t as c,et as l,l as u,rt as ee,s as d,wt as f}from"./api-BzlFpP4T.js";import{Ct as p,Et as m,J as h,K as g,St as _,Tt as v,Ut as te,Wt as ne,Y as re,_t as y,at as ie,dt as ae,kt as oe,nt as se,q as b,rt as x,t as ce,tt as S,wt as C,xt as le,zt as ue}from"./index-hAcJijAU.js";var w={name:`code`,size:24,node:[[`path`,{d:`m16 18 6-6-6-6`,key:`eg8j8`}],[`path`,{d:`m8 6-6 6 6 6`,key:`ppft3o`}]]};w.node;var T=r(w),E={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};E.node;var D=r(E),O={name:`table`,size:24,node:[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]};O.node;var k=r(O),A=e(t(),1);function de(e){if(e.type===`folder`)return o(_,{size:16});let t=(e.extension||``).toLowerCase();return[`.csv`,`.xlsx`,`.xls`,`.tsv`].includes(t)?o(k,{size:16}):[`.py`,`.js`,`.ts`,`.java`,`.c`,`.cpp`,`.go`,`.rs`].includes(t)?o(T,{size:16}):[`.pdf`,`.doc`,`.docx`,`.txt`,`.md`].includes(t)?o(v,{size:16}):o(C,{size:16})}function fe(e){if(!e)return``;let t=new Date(e),n=new Date,r=n.getTime()-t.getTime(),i=Math.floor(r/36e5);if(i<1)return`Just now`;if(i<24)return`${i}h ago`;let a=Math.floor(i/24);return a<7?`${a}d ago`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:t.getFullYear()===n.getFullYear()?void 0:`numeric`})}function pe(e){if(e.length===0)return``;let[t,...n]=e;return n.length>0?`${t} (+${n.length} more)`:t}function me(e){switch(e){case`home`:return o(D,{size:14});case`desktop`:return o(y,{size:14});case`documents`:return o(v,{size:14});case`download`:return o(oe,{size:14});default:return o(_,{size:14})}}var he=[{label:`All Files`,value:``},{label:`Documents`,value:`pdf,doc,docx,txt,md`},{label:`Spreadsheets`,value:`csv,xlsx,xls,tsv`},{label:`Code`,value:`py,js,ts,java,c,cpp,go,rs,rb,sh`},{label:`Data`,value:`json,xml,yaml,yml,csv,tsv`}];async function ge(e,t,r,i){let o=[],c=[];for(let t of e){let e=t.includes(`.`)?`.`+t.split(`.`).pop()?.toLowerCase():``;e&&!h(e)?c.push(t):o.push(t)}let u=[],f=[],p=0,m=``,g=new Set(t.filter(e=>e.type===`folder`).map(e=>e.path));for(let e of o)try{if(g.has(e)){let t=await l(e),n=[];t.documents.forEach(e=>{e.id&&n.push(e.id)}),n.length>0&&(n.forEach(e=>u.push(e)),f.push(e))}else{if(!await S(`embedding`))break;let t=await s(e);t?.id&&(u.push(t.id),f.push(e))}}catch(e){p++,m=e instanceof Error?e.message:`Unknown error`}if(r&&u.length>0){let e=[];for(let t of u)try{await d(r,t),e.push(t)}catch(e){n.doc.warn(`Could not attach document to session: ${e}`)}let t=a.getState().sessions.find(e=>e.id===r)?.document_ids??[],o=e.filter(e=>!t.includes(e));o.length>0&&i(r,{document_ids:[...t,...o]})}else u.length>0&&a.getState().addDraftDocuments(u);if(u.length>0)try{let e=await ee();a.getState().setDocuments(e.documents||[])}catch(e){n.doc.error(`Could not refresh the document list after indexing`,e)}return{docIds:u,supported:o,succeededFiles:f,unsupported:c,failed:p,lastError:m}}var j=e=>e.startsWith(`.`);function M({onStartChat:e}){let{setShowFileBrowser:t,currentSessionId:r,updateSessionInList:s,setPendingPrompt:l}=a(),ee=(0,A.useCallback)(()=>t(!1),[t]);se(!0,ee);let d=(0,A.useRef)(null);re(d,!0);let[_,v]=(0,A.useState)(``),[y,oe]=(0,A.useState)(null),[S,C]=(0,A.useState)([]),[w,T]=(0,A.useState)([]),[E,D]=(0,A.useState)(!1),[O,k]=(0,A.useState)(null),[M,_e]=(0,A.useState)(!1),[N,P]=(0,A.useState)(``),[F,I]=(0,A.useState)(null),[L,R]=(0,A.useState)([]),[ve,ye]=(0,A.useState)(!1),[z,B]=(0,A.useState)(!1),[V,be]=(0,A.useState)(``),[H,U]=(0,A.useState)(new Set),[W,G]=(0,A.useState)(null),[xe,Se]=(0,A.useState)(!1),[Ce,K]=(0,A.useState)(new Set),[we,q]=(0,A.useState)(null),J=(0,A.useRef)(null),[Y,X]=(0,A.useState)(null),Z=(0,A.useCallback)(async e=>{D(!0),k(null),I(null),P(``),R([]);try{let t=await u(e);v(t.current_path),oe(t.parent_path),C(t.entries),t.quick_links.length>0&&T(t.quick_links),n.ui.info(`Browsing: ${t.current_path} (${t.entries.length} items)`)}catch(e){let t=e instanceof Error?e.message:`Failed to load directory`;k(t),n.ui.error(`Browse failed`,e)}finally{D(!1)}},[]);(0,A.useEffect)(()=>{Z()},[Z]),(0,A.useEffect)(()=>()=>{J.current&&clearTimeout(J.current)},[]);let Q=(0,A.useCallback)(async()=>{if(!N.trim())I(null),R([]);else{B(!0),k(null);try{let e=await f(N.trim(),V||void 0,30);I(e.results),R(e.searched_locations??[]),ye(e.truncated===!0),n.ui.info(`Search "${N}": ${e.total} results`)}catch(e){let t=e instanceof Error?e.message:`Search failed`;k(t),n.ui.error(`Search failed`,e)}finally{B(!1)}}},[N,V]),Te=e=>{e.key===`Enter`&&Q()},Ee=(0,A.useCallback)(e=>{e.type===`folder`&&(Z(e.path),U(new Set),G(null))},[Z]),De=(0,A.useCallback)(async e=>{Se(!0);try{let t=await c(e);G(t)}catch(e){n.ui.error(`Preview failed`,e)}finally{Se(!1)}},[]),Oe=(0,A.useCallback)(e=>{U(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),ke=(0,A.useCallback)(async()=>{if(H.size===0)return;let e=Array.from(H);if(X(null),!e.some(e=>{let t=e.includes(`.`)?`.`+e.split(`.`).pop()?.toLowerCase():``;return!t||h(t)})){let t=e[0],n=t.lastIndexOf(`.`),r=n>0?t.slice(n).toLowerCase():``,i=b(r);X({filename:e.length===1?t.split(/[\\/]/).pop()||t:`${e.length} files`,error:i?i.message:`File type "${r}" is not supported for indexing.`})}else{K(new Set(e)),q(`Indexing ${e.length} file(s)...`);try{let t=await ge(e,S,r,s);if(t.failed>0)q(`Done: ${t.docIds.length} indexed, ${t.failed} failed`),X({filename:`${t.failed} file(s)`,error:t.lastError||`Indexing failed for some files`});else{let e=t.unsupported.length>0?` (${t.unsupported.length} skipped — unsupported type)`:``;q(`Successfully indexed ${t.docIds.length} file(s)${e}`)}J.current&&clearTimeout(J.current),J.current=setTimeout(()=>q(null),5e3),U(new Set)}catch(t){n.doc.error(`Index selected failed`,t),X({filename:e.length===1?e[0].split(/[\\/]/).pop()||e[0]:`${e.length} files`,error:t instanceof Error?t.message:`An unexpected error occurred.`})}finally{K(new Set)}}},[H,r,s,S]),$=(0,A.useRef)(!1),Ae=(0,A.useCallback)(async()=>{if(H.size===0||$.current)return;$.current=!0;let i=Array.from(H);X(null),K(new Set(i)),q(`Indexing ${i.length} file(s) for analysis...`);try{let n=await ge(i,S,r,s);if(n.supported.length===0){let e=i[0].lastIndexOf(`.`),t=e>0?i[0].slice(e).toLowerCase():``,n=b(t);X({filename:i.length===1?i[0].split(/[\\/]/).pop()||i[0]:`${i.length} files`,error:n?.message??`File type "${t}" is not supported for indexing.`});return}if(n.docIds.length===0){X({filename:n.supported.length===1?n.supported[0].split(/[\\/]/).pop()||n.supported[0]:`${n.supported.length} files`,error:`Failed to index selected file(s). Please try again.`});return}n.failed>0&&q(`Warning: ${n.failed} file(s) failed to index and will be excluded.`);let a=(n.succeededFiles.length>0?n.succeededFiles:n.supported).map(e=>e.split(/[\\/]/).pop()||e),o=a.length===1?`Please analyze this document for me: ${a[0]}`:`Please analyze these documents for me:\n${a.map(e=>`- ${e}`).join(`
2
+ `)}`;r?l({sessionId:r,text:o}):await e(o),t(!1),U(new Set)}catch(e){n.doc.error(`Ask Agent failed`,e),X({filename:i.length===1?i[0].split(/[\\/]/).pop()||i[0]:`${i.length} files`,error:e instanceof Error?e.message:`An unexpected error occurred.`})}finally{$.current=!1,K(new Set),q(null)}},[H,r,s,S,l,t,e]),je=_?_.replace(/\\/g,`/`).split(`/`).filter(Boolean):[],Me=je.map((e,t)=>({label:e,path:je.slice(0,t+1).join(`/`)+(t===0&&e.includes(`:`)?`/`:``)})),Ne=pe(L),Pe=S.filter(e=>!j(e.name)),Fe=F?F.map(e=>({name:e.name,path:e.path,type:`file`,size:e.size,extension:e.extension||``,modified:e.modified||``})):M?S:Pe,Ie=S.length-Pe.length;return(0,A.useEffect)(()=>{M||F||U(e=>{let t=[...e].filter(e=>!j(e.split(/[\\/]/).pop()??``));return t.length===e.size?e:new Set(t)})},[M,F]),o(`div`,{ref:d,className:`modal-overlay`,onClick:()=>t(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`File browser`,children:i(`div`,{className:`modal-panel file-browser-modal ${W?`has-preview`:``}`,onClick:e=>e.stopPropagation(),children:[i(`div`,{className:`modal-header`,children:[i(`h3`,{children:[o(p,{size:18}),` File browser`]}),o(`button`,{className:`btn-icon`,onClick:()=>t(!1),"aria-label":`Close`,children:o(x,{size:18})})]}),i(`div`,{className:`file-browser-body`,children:[o(`div`,{className:`fb-quick-links`,children:w.map(e=>i(`button`,{className:`fb-quick-link`,onClick:()=>Z(e.path),title:e.path,children:[me(e.icon),o(`span`,{children:e.name})]},e.path))}),i(`div`,{className:`fb-search-bar`,children:[i(`div`,{className:`fb-search-input-wrap`,children:[o(ae,{size:14,className:`fb-search-icon`}),o(`input`,{type:`text`,className:`fb-search-input`,placeholder:`Search files on your PC...`,value:N,onChange:e=>P(e.target.value),onKeyDown:Te,"aria-label":`Search files`}),N&&o(`button`,{className:`fb-search-clear`,onClick:()=>{P(``),I(null),R([])},"aria-label":`Clear search`,children:o(x,{size:12})})]}),o(`select`,{className:`fb-type-filter`,value:V,onChange:e=>be(e.target.value),"aria-label":`File type filter`,children:he.map(e=>o(`option`,{value:e.value,children:e.label},e.value))}),o(`button`,{className:`fb-search-btn`,onClick:Q,disabled:!N.trim()||z,children:z?`Searching...`:`Search`})]}),!F&&i(`div`,{className:`fb-pathbar`,children:[i(`div`,{className:`fb-breadcrumb`,children:[o(`button`,{className:`fb-crumb`,onClick:()=>Z(`/`),children:o(le,{size:12})}),Me.map((e,t)=>i(`span`,{className:`fb-crumb-item`,children:[o(ue,{size:12,className:`fb-crumb-sep`}),o(`button`,{className:`fb-crumb`,onClick:()=>Z(e.path),children:e.label})]},t)),y&&o(`button`,{className:`fb-up-btn`,onClick:()=>Z(y),title:`Go up`,children:o(ne,{size:14})})]}),i(`label`,{className:`fb-hidden-toggle`,children:[o(`input`,{type:`checkbox`,checked:M,onChange:e=>_e(e.target.checked)}),`Show hidden`]})]}),F&&i(`div`,{className:`fb-search-header`,children:[i(`div`,{className:`fb-search-summary`,children:[i(`span`,{children:[`Found `,F.length,` result(s) for "`,N,`"`]}),Ne&&i(`span`,{className:`fb-search-scope`,title:L.join(`
3
+ `),children:[`Searching in: `,o(`code`,{children:Ne})]}),ve&&o(`span`,{children:`Search stopped early, so some matches may be missing. Try a more specific name.`})]}),o(`button`,{className:`fb-back-btn`,onClick:()=>{I(null),P(``),R([])},children:`Back to browsing`})]}),O&&o(`div`,{className:`fb-error`,children:O}),i(`div`,{className:`fb-content`,children:[i(`div`,{className:`fb-file-list`,children:[E&&o(`div`,{className:`fb-loading`,children:`Loading...`}),!E&&Fe.length===0&&o(`div`,{className:`fb-empty`,children:F?`No files found`:Ie>0?`Only hidden items here. Turn on Show hidden to see them.`:`This folder is empty`}),!E&&Fe.map(e=>{let t=e.extension||(e.name.includes(`.`)?`.`+e.name.split(`.`).pop()?.toLowerCase():``),n=e.type===`file`&&t&&!h(t),r=n?b(t):null;return i(`div`,{className:`fb-entry ${e.type} ${H.has(e.path)?`selected`:``} ${n?`unsupported`:``}`,onClick:()=>e.type===`folder`?Ee(e):Oe(e.path),onDoubleClick:()=>e.type===`folder`?Ee(e):void 0,title:n?`${r?.label||`This`} file type cannot be indexed`:e.path,children:[o(`input`,{type:`checkbox`,className:`fb-entry-checkbox`,checked:H.has(e.path),onChange:()=>Oe(e.path),onClick:e=>e.stopPropagation(),"aria-label":`Select ${e.name}`}),o(`span`,{className:`fb-entry-icon`,children:de(e)}),o(`span`,{className:`fb-entry-name`,title:e.path,children:e.name}),n&&o(`span`,{className:`fb-unsupported-badge`,children:`Not indexable`}),e.type===`file`&&o(`button`,{type:`button`,className:`fb-entry-preview-btn`,onClick:t=>{t.stopPropagation(),De(e.path)},"aria-label":`Preview ${e.name}`,title:`Preview file`,children:o(m,{size:14})}),o(`span`,{className:`fb-entry-size`,children:e.type===`file`?ce(e.size):``}),o(`span`,{className:`fb-entry-date`,children:fe(e.modified)})]},e.path)})]}),W&&i(`div`,{className:`fb-preview`,children:[i(`div`,{className:`fb-preview-header`,children:[o(`span`,{className:`fb-preview-name`,children:W.name}),o(`button`,{className:`btn-icon-sm`,onClick:()=>G(null),"aria-label":`Close preview`,children:o(x,{size:14})})]}),i(`div`,{className:`fb-preview-meta`,children:[o(`span`,{children:W.size_display}),W.total_lines&&i(`span`,{children:[W.total_lines,` lines`]}),W.columns&&i(`span`,{children:[W.columns.length,` columns`]}),W.row_count!==null&&i(`span`,{children:[W.row_count,` rows`]})]}),W.columns&&i(`div`,{className:`fb-preview-columns`,children:[o(`strong`,{children:`Columns:`}),` `,W.columns.join(`, `)]}),xe?o(`div`,{className:`fb-preview-loading`,children:`Loading preview...`}):W.is_text&&W.preview_lines.length>0?o(`pre`,{className:`fb-preview-content`,children:W.preview_lines.slice(0,30).join(`
4
+ `)}):o(`div`,{className:`fb-preview-binary`,children:`Binary file - no preview available`})]})]}),Y&&o(g,{filename:Y.filename,error:Y.error,onDismiss:()=>X(null)}),i(`div`,{className:`fb-actions`,children:[o(`div`,{className:`fb-selection-info`,children:H.size>0?`${H.size} item(s) selected`:`Select files to index or analyze`}),we&&o(`span`,{className:`fb-index-status`,children:we}),i(`div`,{className:`fb-action-btns`,children:[i(`button`,{className:`fb-action-btn secondary`,onClick:ke,disabled:H.size===0||Ce.size>0,title:`Index selected files for RAG search`,children:[o(ie,{size:14}),`Index Selected`]}),i(`button`,{className:`fb-action-btn primary`,onClick:Ae,disabled:H.size===0||Ce.size>0,title:`Index and send selected files to the chat agent for analysis`,children:[o(te,{size:14}),`Ask Agent`]})]})]})]})]})})}export{M as FileBrowser};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{G as t,N as n,W as r,i,n as a,o,r as s}from"./apiBase-BMkGbdXt.js";import{n as c,t as l}from"./zap-D7aLu_f0.js";import{A as ee,At as te,B as ne,Bt as re,C as u,D as ie,E as ae,Et as oe,F as se,H as ce,I as le,It as d,L as ue,M as de,Mt as fe,N as pe,Nt as me,O as he,P as f,Pt as p,R as m,S as ge,T as _e,U as ve,Ut as ye,V as be,Vt as xe,W as h,Y as Se,_ as Ce,b as we,ct as Te,dt as Ee,f as De,g as Oe,h as ke,ht as Ae,it as je,j as Me,jt as Ne,k as Pe,lt as Fe,m as Ie,mt as Le,nt as Re,ot as ze,p as Be,pt as Ve,rt as He,st as Ue,t as We,v as Ge,w as Ke,x as qe,y as Je,yt as Ye,z as Xe,zt as Ze}from"./index-hAcJijAU.js";var g={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};g.node;var Qe=r(g),$e={name:`git-merge`,size:24,node:[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]};$e.node;var et=r($e),_={name:`shield-off`,size:24,node:[[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71`,key:`1jlk70`}],[`path`,{d:`M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264`,key:`18rp1v`}]]};_.node;var tt=r(_),nt={name:`shield`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}]]};nt.node;var rt=r(nt),v={name:`target`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]};v.node;var it=r(v),at={name:`trending-up`,size:24,node:[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]};at.node;var ot=r(at),st={name:`user`,size:24,node:[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]};st.node;var ct=r(st),y=e(t(),1),lt=[{title:`Preferences`,categories:[`preference`]},{title:`About you`,categories:[`fact`,`profile`,`skill`]},{title:`Reminders`,categories:[`reminder`]},{title:`Notes`,categories:[`note`]}];function ut(e){switch(e){case`user`:return`You added this`;case`tool`:return`You asked GAIA to remember this`;case`llm_extract`:return`Picked up in a chat`;case`consolidation`:return`From an older chat`;case`inferred`:return`From your profile setup`;case`discovery`:return`Found on this PC during profile setup`;default:return`Saved`}}function dt(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=Math.floor((Date.now()-t.getTime())/864e5);return n<=0?`today`:n===1?`yesterday`:n<30?`${n} days ago`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`,year:`numeric`})}function ft(e,t=new Date){let n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e),r=n?new Date(+n[1],n[2]-1,+n[3]):new Date(e);if(Number.isNaN(r.getTime()))return null;let i=r.getHours()===0&&r.getMinutes()===0&&r.getSeconds()===0,a=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),o=i?r.getTime()<a:r.getTime()<t.getTime(),s=r.toLocaleString(void 0,{weekday:`short`,month:`short`,day:`numeric`,...r.getFullYear()===t.getFullYear()?{}:{year:`numeric`},...i?{}:{hour:`numeric`,minute:`2-digit`}});return{text:`${o?`Was due`:`Due`} ${s}`,past:o}}function pt({memoryEnabled:e,reloadKey:t,onChanged:r,onOpenAdvanced:o,showToast:c}){let[l,ee]=(0,y.useState)(null),[te,ne]=(0,y.useState)(null),[re,u]=(0,y.useState)(null),[ae,se]=(0,y.useState)(``),[ce,le]=(0,y.useState)([]),[d,ue]=(0,y.useState)(new Set),[de,fe]=(0,y.useState)(``),[pe,me]=(0,y.useState)(`fact`),[he,f]=(0,y.useState)(null),p=(0,y.useRef)(0),m=(0,y.useCallback)(async()=>{let e=++p.current;try{let t=await ie({about_user:!0,include_sensitive:!0,sort_by:`updated_at`,order:`desc`,limit:200});if(e!==p.current)return;ee(t.items),ne(null)}catch(t){if(e!==p.current)return;n.system.warn(`Failed to load what GAIA knows about the user`,t),ne(t instanceof Error?t.message:String(t))}},[]);(0,y.useEffect)(()=>{m()},[m,t]);let _e=(0,y.useCallback)(async e=>{let t=ae.trim();if(!t||t===e.content)u(null);else{f(e.id);try{await ge(e.id,{content:t}),u(null),c(`Updated`,`success`),await m(),r()}catch(e){n.system.error(`Failed to edit memory`,e),c(`Couldn't save the change: ${e instanceof Error?e.message:e}`,`error`)}finally{f(null)}}},[ae,m,r,c]),ve=(0,y.useCallback)(async e=>{f(e.id);try{await qe(e.id),p.current++,ee(t=>(t??[]).filter(t=>t.id!==e.id)),le(t=>[e,...t]),r()}catch(e){n.system.error(`Failed to forget memory`,e),c(`Couldn't forget that: ${e instanceof Error?e.message:e}`,`error`)}finally{f(null)}},[r,c]),ye=(0,y.useCallback)(async e=>{f(e.id);try{await Je({content:e.content,category:e.category,domain:e.domain??void 0,context:e.context,entity:e.entity??void 0,sensitive:e.sensitive,due_at:e.due_at??void 0}),le(t=>t.filter(t=>t.id!==e.id)),await m(),r()}catch(e){n.system.error(`Failed to restore memory`,e),c(`Couldn't restore it: ${e instanceof Error?e.message:e}`,`error`)}finally{f(null)}},[m,r,c]),be=(0,y.useCallback)(async()=>{let e=de.trim();if(e){f(`new`);try{await Je({content:e,category:pe}),fe(``),c(`Saved`,`success`),await m(),r()}catch(e){n.system.error(`Failed to add memory`,e),c(`Couldn't save it: ${e instanceof Error?e.message:e}`,`error`)}finally{f(null)}}},[de,pe,m,r,c]);if(!e)return i(`div`,{className:`mem-about`,children:[s(`h2`,{className:`mem-about-title`,children:`What GAIA knows about you`}),i(`div`,{className:`mem-about-empty`,children:[s(`p`,{children:`Memory is off, so GAIA isn't saving anything about you.`}),s(`button`,{className:`btn-secondary`,onClick:o,children:`Turn it on in Advanced`})]})]});let xe=lt.map(e=>({...e,rows:(l??[]).filter(t=>e.categories.includes(t.category))})).filter(e=>e.rows.length>0);return i(`div`,{className:`mem-about`,children:[s(`h2`,{className:`mem-about-title`,children:`What GAIA knows about you`}),s(`p`,{className:`mem-about-intro`,children:`GAIA uses these in every chat. Edit anything that's wrong, or forget it so GAIA stops using it.`}),i(`form`,{className:`mem-about-add`,onSubmit:e=>{e.preventDefault(),be()},children:[s(`input`,{className:`mem-input`,placeholder:`Tell GAIA something about you, e.g. “I prefer short answers”`,"aria-label":`Something GAIA should know about you`,value:de,onChange:e=>fe(e.target.value)}),i(`select`,{className:`mem-select`,"aria-label":`Kind`,value:pe,onChange:e=>me(e.target.value),children:[s(`option`,{value:`fact`,children:`About you`}),s(`option`,{value:`preference`,children:`Preference`}),s(`option`,{value:`reminder`,children:`Reminder`}),s(`option`,{value:`note`,children:`Note`})]}),i(`button`,{className:`btn-primary`,type:`submit`,disabled:!de.trim()||he===`new`,children:[s(Le,{size:14}),` Add`]})]}),ce.map(e=>i(`div`,{className:`mem-about-forgotten`,role:`status`,children:[i(`span`,{children:[`Forgotten: `,e.sensitive?`a sensitive memory`:`“${e.content}”`,` — GAIA won't learn it again from old chats.`]}),i(`button`,{className:`mem-about-link`,disabled:he===e.id,onClick:()=>ye(e),children:[s(ze,{size:12}),` Undo`]})]},e.id)),te?i(`div`,{className:`mem-about-empty`,children:[i(`p`,{children:[`Couldn't load your memories: `,te]}),s(`button`,{className:`btn-secondary`,onClick:m,children:`Try again`})]}):l===null?i(`div`,{className:`mem-loading`,children:[s(`div`,{className:`mem-spinner`}),` Loading…`]}):xe.length===0?i(`div`,{className:`mem-about-empty`,children:[s(`p`,{children:`GAIA hasn't saved anything about you yet.`}),s(`p`,{className:`mem-about-hint`,children:`Tell it in a chat (“remember that I live in Calgary”) or add something above.`})]}):xe.map(e=>i(`section`,{className:`mem-about-group`,"aria-label":e.title,children:[s(`h3`,{className:`mem-about-group-title`,children:e.title}),s(`ul`,{className:`mem-about-list`,children:e.rows.map(e=>{let t=e.sensitive&&!d.has(e.id),n=e.due_at?ft(e.due_at):null;return s(`li`,{className:`mem-about-item`,children:re===e.id?i(`form`,{className:`mem-about-edit`,onSubmit:t=>{t.preventDefault(),_e(e)},children:[s(`textarea`,{className:`mem-input`,"aria-label":`Edit memory`,rows:2,autoFocus:!0,value:ae,onChange:e=>se(e.target.value),onKeyDown:t=>{t.key===`Escape`&&(t.stopPropagation(),u(null)),t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),_e(e))}}),i(`div`,{className:`mem-about-edit-actions`,children:[s(`button`,{className:`btn-primary`,type:`submit`,disabled:he===e.id,children:`Save`}),s(`button`,{className:`btn-secondary`,type:`button`,onClick:()=>u(null),children:`Cancel`})]})]}):i(a.Fragment,{children:[i(`div`,{className:`mem-about-text`,children:[t?i(`button`,{className:`mem-about-link`,onClick:()=>ue(t=>new Set(t).add(e.id)),children:[s(oe,{size:12}),` Sensitive — show`]}):e.content,n&&s(`span`,{className:`mem-about-due${n.past?` is-overdue`:``}`,children:n.text}),i(`span`,{className:`mem-about-meta`,children:[ut(e.source),` · `,dt(e.updated_at)]})]}),i(`div`,{className:`mem-about-actions`,children:[s(`button`,{className:`mem-about-btn`,"aria-label":`Edit: ${t?`sensitive memory`:e.content}`,title:`Edit`,onClick:()=>{u(e.id),se(e.content)},children:s(Ae,{size:14})}),i(`button`,{className:`mem-about-btn mem-about-btn-remove`,"aria-label":`Forget: ${t?`sensitive memory`:e.content}`,title:`Forget`,disabled:he===e.id,onClick:()=>ve(e),children:[s(Te,{size:14}),` Forget`]})]})]})},e.id)})})]},e.title))]})}function mt(e){if(!e)return`—`;try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n={month:`short`,day:`numeric`};return t.getFullYear()!==new Date().getFullYear()&&(n.year=`numeric`),t.toLocaleDateString(void 0,n)}catch{return`—`}}function b(e){if(!e)return``;try{let t=new Date(e);return isNaN(t.getTime())?``:t.toLocaleString(void 0,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}catch{return``}}function x(e){if(!e)return`—`;try{let t=new Date(e);if(isNaN(t.getTime()))return`—`;let n=Date.now(),r=t.getTime()-n,i=Math.abs(r),a=Math.floor(i/1e3),o=Math.floor(i/6e4),s=Math.floor(i/36e5),c=Math.floor(i/864e5);return r<0?a<5?`just now`:a<60?`${a}s ago`:s===0?`${o}m ago`:c===0?`${s}h ago`:c===1?`yesterday`:c<30?`${c}d ago`:b(e):a<5?`now`:a<60?`in ${a}s`:s===0?`in ${o}m`:c===0?`in ${s}h`:c===1?`tomorrow`:c<30?`in ${c}d`:b(e)}catch{return`—`}}function ht(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function gt(e){try{return new Date(e).getTime()<Date.now()}catch{return!1}}function _t(e){return e>=.7?`high`:e>=.4?`medium`:`low`}function vt(e){return e>=.9?`high`:e>=.7?`medium`:`low`}function yt(e,t){let n=mt(e),r=mt(t);return n===`—`&&r===`—`?``:n===r?n:`${n} \u2013 ${r}`}function bt(e){if(e.length===0)return 0;let t=new Date().toISOString().slice(0,10),n=e.find(e=>e.date===t);return n?n.knowledge_added:0}var xt=[`fact`,`preference`,`error`,`skill`,`note`,`reminder`],St={work:`blue`,technical:`purple`,personal:`green`,general:`gray`};function S(){let{setShowMemoryDashboard:e,sessions:t,setCurrentSession:r}=o(),oe=(0,y.useMemo)(()=>new Map(t.map(e=>[e.id,e.title])),[t]),ze=e=>oe.get(e)||`${e.slice(0,8)}...`,[g,$e]=(0,y.useState)(null),[_,nt]=(0,y.useState)([]),[v,at]=(0,y.useState)(null),[st,lt]=(0,y.useState)([]),[ut,dt]=(0,y.useState)([]),[ft,mt]=(0,y.useState)([]),[S,Ct]=(0,y.useState)(null),[wt,Tt]=(0,y.useState)([]),[Et,Dt]=(0,y.useState)(!0),[Ot,kt]=(0,y.useState)(null),[At,jt]=(0,y.useState)(null),[Mt,C]=(0,y.useState)(!1),[Nt,Pt]=(0,y.useState)(null),[Ft,It]=(0,y.useState)([]),Lt=(0,y.useRef)(0),[w,Rt]=(0,y.useState)([]),[zt,Bt]=(0,y.useState)(``),[Vt,Ht]=(0,y.useState)(``),[Ut,Wt]=(0,y.useState)(``),[T,Gt]=(0,y.useState)(`updated_at`),[Kt,qt]=(0,y.useState)(`desc`),[E,D]=(0,y.useState)(0),[Jt,Yt]=(0,y.useState)(!1),[Xt,Zt]=(0,y.useState)(``),[Qt,$t]=(0,y.useState)(null),en=(0,y.useRef)(null),[O,tn]=(0,y.useState)(null),[nn,rn]=(0,y.useState)(!1),[k,an]=(0,y.useState)(null),[A,j]=(0,y.useState)({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),[on,sn]=(0,y.useState)(new Set),[M,cn]=(0,y.useState)(!1),[ln,un]=(0,y.useState)(!1),[dn,fn]=(0,y.useState)(!1),[N,P]=(0,y.useState)(!1),[pn,mn]=(0,y.useState)(!1),[F,hn]=(0,y.useState)(null),[gn,_n]=(0,y.useState)(!1),[I,L]=(0,y.useState)(null),[R,vn]=(0,y.useState)(`about`),[yn,bn]=(0,y.useState)(0),[xn,Sn]=(0,y.useState)([]),[Cn,wn]=(0,y.useState)(null),[Tn,En]=(0,y.useState)(!1),[Dn,On]=(0,y.useState)(null),[kn,An]=(0,y.useState)(null),[jn,Mn]=(0,y.useState)(!1),[Nn,Pn]=(0,y.useState)({title:``,description:``,priority:`medium`}),[z,B]=(0,y.useState)(`idle`),[Fn,V]=(0,y.useState)([]),[H,U]=(0,y.useState)([]),[In,Ln]=(0,y.useState)(null),Rn=(0,y.useRef)(null),zn=(0,y.useRef)(null),[W,G]=(0,y.useState)(`idle`),[Bn,K]=(0,y.useState)([]),[q,J]=(0,y.useState)([]),[Vn,Hn]=(0,y.useState)(null),[Un,Wn]=(0,y.useState)(!1),Gn=(0,y.useRef)(null),Kn=(0,y.useRef)(null),[qn,Jn]=(0,y.useState)(30),[Yn,Xn]=(0,y.useState)(!1),[Zn,Qn]=(0,y.useState)(!1),[$n,er]=(0,y.useState)(!1),[tr,nr]=(0,y.useState)(!1),[rr,ir]=(0,y.useState)(!1),[ar,or]=(0,y.useState)(!1),sr=(0,y.useRef)(null),cr=(0,y.useRef)(null),lr=(0,y.useRef)(null),Y=(0,y.useCallback)((e,t=`info`)=>{let n=++Lt.current;It(r=>[...r,{id:n,text:e,type:t}]),setTimeout(()=>{It(e=>e.filter(e=>e.id!==n))},4e3)},[]);(0,y.useEffect)(()=>{if(!Mt)return;let e=e=>{cr.current&&!cr.current.contains(e.target)&&C(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[Mt]),Re(!0,()=>{I?L(null):pn?mn(!1):gn?_n(!1):O?tn(null):Mt?C(!1):nn||k?(rn(!1),an(null)):Nt?Pt(null):e(!1)}),Se(lr,!!I),(0,y.useEffect)(()=>{if(!I)return;let e=lr.current;if(!e)return;let t=document.activeElement;return e.focus(),()=>{t?.focus()}},[I]);let ur=(0,y.useCallback)(async()=>{try{let e=await Me();$e(e)}catch(e){n.system.warn(`Failed to load memory stats`,e)}},[]),dr=(0,y.useCallback)(async()=>{try{let e=await he(qn);nt(e)}catch(e){n.system.warn(`Failed to load memory activity`,e)}},[qn]),X=(0,y.useCallback)(async()=>{try{let e=await ie({category:w.length>0?w:void 0,context:zt||void 0,entity:Vt||void 0,search:Ut||void 0,sort_by:T,order:Kt,offset:E,limit:15,include_sensitive:!0,include_superseded:Jt});at(e)}catch(e){n.system.warn(`Failed to load knowledge`,e)}},[w,zt,Vt,Ut,T,Kt,E,Jt]),fr=(0,y.useCallback)(async()=>{try{let e=await de();lt(e)}catch(e){n.system.warn(`Failed to load tool summary`,e)}},[]),pr=(0,y.useCallback)(async()=>{try{let e=await Pe(20);dt(e)}catch(e){n.system.warn(`Failed to load conversations`,e)}},[]),mr=(0,y.useCallback)(async()=>{try{let e=await pe(7);mt(e)}catch(e){n.system.warn(`Failed to load upcoming items`,e)}},[]),Z=(0,y.useCallback)(async()=>{try{let e=await Ke();Ct(e)}catch(e){n.system.warn(`Failed to load embedding coverage`,e)}},[]),hr=(0,y.useCallback)(async()=>{try{let e=await _e();Tt(e||[])}catch(e){n.system.warn(`Failed to load entities`,e)}},[]),gr=(0,y.useCallback)(async()=>{try{let e=await ee();un(e.mcp_memory_enabled),cn(e.memory_enabled),fn(e.system_discovery_consent)}catch(e){n.system.warn(`Failed to load memory settings`,e)}},[]),_r=(0,y.useCallback)(async()=>{En(!0);try{let[e,t]=await Promise.all([f(),ae()]);Sn(e.goals),wn(t)}catch(e){n.system.warn(`Failed to load goals`,e)}finally{En(!1)}},[]),vr=(0,y.useCallback)(async(e,t)=>{try{await e()}catch(e){n.system.error(t,e),Y(`${t}: ${e instanceof Error?e.message:e}`,`error`);return}_r()},[_r,Y]);(0,y.useEffect)(()=>{if(!kn)return;let e=setTimeout(()=>An(null),3e3);return()=>clearTimeout(e)},[kn]);let Q=(0,y.useCallback)(async()=>{Dt(!0),kt(null);try{await Promise.all([ur(),dr(),X(),fr(),pr(),mr(),Z(),hr(),gr(),_r()]),bn(e=>e+1)}catch(e){kt(`Failed to load memory data. Is the backend running?`),n.system.error(`Memory dashboard load failed`,e)}finally{Dt(!1)}},[ur,dr,X,fr,pr,mr,Z,hr,gr,_r]);(0,y.useEffect)(()=>{Q()},[Q]),(0,y.useEffect)(()=>{X()},[X]);let yr=(0,y.useRef)(!0);(0,y.useEffect)(()=>{yr.current?yr.current=!1:dr()},[dr]);let br=(0,y.useCallback)(e=>{Wt(e),or(!0),sr.current&&clearTimeout(sr.current),sr.current=setTimeout(()=>{D(0),or(!1)},300)},[]),xr=(0,y.useCallback)(()=>{X(),ur(),Z(),mr(),hr()},[X,ur,Z,mr,hr]),$=(0,y.useCallback)(()=>{xr(),bn(e=>e+1)},[xr]),Sr=(0,y.useCallback)(async()=>{if(A.content.trim())try{let e=await Je({content:A.content,category:A.category,domain:A.domain||void 0,context:A.context,entity:A.entity||void 0,sensitive:A.sensitive,due_at:A.due_at||void 0});rn(!1),j({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),n.ui.info(`Created new knowledge entry`),e?.embedded===!1?Y(e.embed_error??`Saved, but not embedded`,`error`):Y(`Memory created successfully`,`success`)}catch(e){n.system.error(`Failed to create knowledge`,e),Y(`Failed to create memory`,`error`)}},[A,$,Y]),Cr=(0,y.useCallback)(async()=>{if(k&&A.content.trim())try{let e=await ge(k,{content:A.content,category:A.category,domain:A.domain||void 0,context:A.context,entity:A.entity||void 0,sensitive:A.sensitive,due_at:A.due_at||void 0});an(null),j({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),n.ui.info(`Updated knowledge ${k}`),e?.embedded===!1?Y(e.embed_error??`Saved, but not embedded`,`error`):Y(`Memory updated`,`success`)}catch(e){n.system.error(`Failed to update knowledge`,e),Y(`Failed to update memory`,`error`)}},[k,A,$,Y]),wr=(0,y.useCallback)(async e=>{if(F!==e)hn(e);else{hn(null);try{await qe(e),$(),n.ui.info(`Deleted knowledge ${e}`),Y(`Memory deleted`,`info`)}catch(e){n.system.error(`Failed to delete knowledge`,e),Y(`Failed to delete memory`,`error`)}}},[F,$,Y]);(0,y.useEffect)(()=>{if(!F)return;let e=setTimeout(()=>hn(null),3e3);return()=>clearTimeout(e)},[F]);let Tr=(0,y.useCallback)(async e=>{try{await ge(e.id,{sensitive:!e.sensitive}),X(),n.ui.info(`Toggled sensitive for ${e.id}: ${!e.sensitive}`),Y(e.sensitive?`Unmarked as sensitive`:`Marked as sensitive`,`info`)}catch(e){n.system.error(`Failed to toggle sensitive`,e),Y(`Failed to toggle sensitive flag`,`error`)}},[X,Y]),Er=(0,y.useCallback)(e=>{an(e.id),rn(!1),j({content:e.content,category:e.category,domain:e.domain||``,context:e.context,entity:e.entity||``,sensitive:e.sensitive,due_at:e.due_at||``})},[]),Dr=(0,y.useCallback)(e=>{navigator.clipboard.writeText(e).catch(()=>{}),n.ui.info(`Copied knowledge ID: ${e}`),Y(`ID copied to clipboard`,`info`)},[Y]),Or=(0,y.useCallback)(e=>{Zt(e),en.current&&clearTimeout(en.current),e.trim()?en.current=setTimeout(async()=>{try{let t=await ve(e.trim(),20);$t(t)}catch(e){n.system.warn(`Conversation search failed`,e)}},300):$t(null)},[]),kr=(0,y.useCallback)(async e=>{try{let t=await u(e);tn({sessionId:e,turns:t})}catch(e){n.system.error(`Failed to load conversation detail`,e)}},[]),Ar=(0,y.useCallback)(e=>{Rt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),D(0)},[]),jr=(0,y.useCallback)(e=>{T===e?qt(e=>e===`desc`?`asc`:`desc`):(Gt(e),qt(`desc`)),D(0)},[T]),Mr=(0,y.useCallback)(async()=>{Xn(!0),C(!1);try{let e=await Ce();await Q(),Y(`Consolidated ${e.consolidated??0} sessions, extracted ${e.extracted_items??0} items`,`success`)}catch(e){n.system.error(`Failed to consolidate sessions`,e),Y(`Failed to consolidate sessions`,`error`)}finally{Xn(!1)}},[Q,Y]),Nr=(0,y.useCallback)(async()=>{Qn(!0),C(!1);try{let e=await ue();await Z(),Y(`Backfilled ${e.backfilled??0} embeddings${e.total_without?` (${e.total_without} were missing)`:``}`,`success`)}catch(e){n.system.error(`Failed to rebuild embeddings`,e),Y(`Failed to rebuild embeddings`,`error`)}finally{Qn(!1)}},[Z,Y]),Pr=(0,y.useCallback)(async()=>{er(!0),C(!1);try{let e=await Xe();await Q(),Y(`Checked ${e.pairs_checked??0} pairs: ${e.reinforced??0} reinforced, ${e.contradicted??0} contradicted`,`success`)}catch(e){n.system.error(`Failed to reconcile memory`,e),Y(`Failed to reconcile memory`,`error`)}finally{er(!1)}},[Q,Y]),Fr=(0,y.useCallback)(async()=>{nr(!0),C(!1);try{await m(),await Q(),Y(`FTS indexes rebuilt successfully`,`success`)}catch(e){n.system.error(`Failed to rebuild FTS index`,e),Y(`Failed to rebuild FTS indexes`,`error`)}finally{nr(!1)}},[Q,Y]),Ir=(0,y.useCallback)(async()=>{ir(!0),C(!1);try{let e=await ne();await Q(),e.skipped?Y(`System context collection is disabled — enable it in settings`,`error`):Y(`System context refreshed: ${e.stored} facts updated`,`success`)}catch(e){n.system.error(`Failed to refresh system context`,e),Y(`Failed to refresh system context`,`error`)}finally{ir(!1)}},[Q,Y]),Lr=Yn||Zn||$n||tr||rr,Rr=(0,y.useCallback)(()=>{B(`running`),V([]),U([]),Ln(null);let e=se();zn.current=e,e.onmessage=t=>{try{let n=JSON.parse(t.data);if(n.type===`log`)V(e=>[...e,{text:n.message,kind:`log`}]);else if(n.type===`finding`){let e=n.item;V(t=>[...t,{text:` Found: ${e.content}`,kind:`finding`}]),U(t=>[...t,{...e,_checked:!0}])}else n.type===`error`?V(e=>[...e,{text:` Error: ${n.message}`,kind:`error`}]):n.type===`done`&&(e.close(),zn.current=null,V(e=>[...e,{text:`Done. ${n.total??0} items discovered.`,kind:`log`}]),B(`review`))}catch{V(e=>[...e,{text:`Failed to parse event data.`,kind:`error`}])}},e.onerror=()=>{e.close(),zn.current=null,V(e=>[...e,{text:`Connection error. Is the GAIA server running?`,kind:`error`}]),U(e=>(B(e.length>0?`review`:`idle`),e))}},[]),zr=(0,y.useCallback)(async()=>{let e=H.filter(e=>e._checked);if(e.length!==0){B(`saving`);try{let t=e.map(({_checked:e,...t})=>t),n=await ke(t);Ln(n.stored),B(`done`),$(),Y(`Saved ${n.stored} items to memory`,`success`)}catch(e){n.system.error(`Failed to commit discovery items`,e),Y(`Failed to save discovery items`,`error`),B(`review`)}}},[H,$,Y]),Br=(0,y.useCallback)(()=>{G(`running`),K([]),J([]),Hn(null);let e=le(Un);Kn.current=e,e.onmessage=t=>{try{let n=JSON.parse(t.data);if(n.type===`log`)K(e=>[...e,{text:n.message,kind:`log`}]);else if(n.type===`insight`){let e=n.item;K(t=>[...t,{text:` Insight: ${e.content}`,kind:`finding`}]),J(t=>[...t,{...e,_checked:!0}])}else n.type===`error`?K(e=>[...e,{text:` Error: ${n.message}`,kind:`error`}]):n.type===`done`&&(e.close(),Kn.current=null,K(e=>[...e,{text:`Done. ${n.total??0} insights generated.`,kind:`log`}]),G(`review`))}catch{K(e=>[...e,{text:`Failed to parse event data.`,kind:`error`}])}},e.onerror=()=>{e.close(),Kn.current=null,K(e=>[...e,{text:`Connection error. Is Lemonade Server running?`,kind:`error`}]),J(e=>(G(e.length>0?`review`:`idle`),e))}},[Un]),Vr=(0,y.useCallback)(async()=>{let e=q.filter(e=>e._checked);if(e.length!==0){G(`saving`);try{let t=e.map(({_checked:e,...t})=>t),n=await Oe(t);Hn(n.stored),G(`done`),$(),Y(`Saved ${n.stored} insights to memory`,`success`)}catch(e){n.system.error(`Failed to commit inference insights`,e),Y(`Failed to save inference insights`,`error`),G(`review`)}}},[q,$,Y]);(0,y.useEffect)(()=>{Rn.current&&(Rn.current.scrollTop=Rn.current.scrollHeight)},[Fn]),(0,y.useEffect)(()=>{Gn.current&&(Gn.current.scrollTop=Gn.current.scrollHeight)},[Bn]),(0,y.useEffect)(()=>()=>{zn.current&&=(zn.current.close(),null),Kn.current&&=(Kn.current.close(),null)},[]);let Hr=e=>T===e?s(`span`,{className:`mem-sort-arrow`,children:Kt===`desc`?`↓`:`↑`}):null,Ur=Math.max(1,..._.map(e=>e.conversations+e.tool_calls+e.knowledge_added+e.errors)),Wr=g?.knowledge?.by_context?Object.keys(g.knowledge.by_context):[];return i(`div`,{className:`memory-dashboard-page`,children:[i(`div`,{className:`memory-dashboard-header`,children:[i(`div`,{className:`memory-dashboard-header-left`,children:[s(`button`,{className:`btn-icon settings-back-btn`,onClick:()=>e(!1),"aria-label":`Back`,children:s(Qe,{size:18})}),i(`h1`,{children:[`Memory `,s(`span`,{style:{fontSize:11,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`2px 8px`,borderRadius:4,marginLeft:8,verticalAlign:`middle`,letterSpacing:`0.5px`},children:`BETA`})]})]}),i(`div`,{className:`memory-dashboard-header-actions`,children:[R===`advanced`&&i(a.Fragment,{children:[S&&S.total_items>0&&i(`div`,{className:`mem-embedding-coverage`,title:`${S.with_embedding} of ${S.total_items} entries embedded`,children:[s(`div`,{className:`mem-embedding-bar`,children:s(`div`,{className:`mem-embedding-fill`,style:{width:`${Math.round(S.coverage_pct)}%`}})}),i(`span`,{className:`mem-embedding-label`,children:[Math.round(S.coverage_pct),`% embedded`]})]}),i(`div`,{className:`mem-maintenance-wrap`,ref:cr,children:[i(`button`,{className:`btn-icon ${Lr?`mem-spinning`:``}`,onClick:()=>C(e=>!e),title:`Maintenance actions`,"aria-label":`Maintenance actions`,"aria-expanded":Mt,children:[Lr?s(`div`,{className:`mem-spinner-sm`}):s(te,{size:16}),s(xe,{size:10,style:{marginLeft:2}})]}),Mt&&i(`div`,{className:`mem-maintenance-menu`,role:`menu`,children:[i(`button`,{className:`mem-maintenance-item`,onClick:Mr,disabled:Yn,role:`menuitem`,children:[s(et,{size:14}),Yn?`Consolidating...`:`Consolidate Sessions`]}),i(`button`,{className:`mem-maintenance-item`,onClick:Nr,disabled:Zn,role:`menuitem`,children:[s(l,{size:14}),Zn?`Rebuilding...`:`Rebuild Embeddings`]}),i(`button`,{className:`mem-maintenance-item`,onClick:Pr,disabled:$n,role:`menuitem`,children:[s(d,{size:14}),$n?`Reconciling...`:`Reconcile Memory`]}),s(`div`,{className:`mem-maintenance-divider`}),i(`button`,{className:`mem-maintenance-item`,onClick:Ir,disabled:rr,role:`menuitem`,children:[s(Ve,{size:14}),rr?`Refreshing...`:`Refresh System Context`]}),s(`div`,{className:`mem-maintenance-divider`}),i(`button`,{className:`mem-maintenance-item`,onClick:Fr,disabled:tr,role:`menuitem`,children:[s(Ee,{size:14}),tr?`Rebuilding...`:`Rebuild FTS Indexes`]})]})]})]}),s(`button`,{className:`btn-icon`,onClick:Q,title:`Refresh`,"aria-label":`Refresh dashboard`,children:s(Ve,{size:16})})]})]}),i(`div`,{className:`mem-tab-bar`,role:`tablist`,children:[i(`button`,{className:`mem-tab-btn${R===`about`?` mem-tab-active`:``}`,onClick:()=>vn(`about`),role:`tab`,"aria-selected":R===`about`,children:[s(ct,{size:14}),` About you`]}),i(`button`,{className:`mem-tab-btn${R===`goals`?` mem-tab-active`:``}`,onClick:()=>{vn(`goals`),_r()},role:`tab`,"aria-selected":R===`goals`,children:[s(it,{size:14}),` Goals`,Cn&&(Cn.goals.pending_approval??0)>0&&s(`span`,{className:`mem-tab-badge`,children:Cn.goals.pending_approval})]}),i(`button`,{className:`mem-tab-btn${R===`profile`?` mem-tab-active`:``}`,onClick:()=>vn(`profile`),role:`tab`,"aria-selected":R===`profile`,children:[s(Fe,{size:14}),` Profile setup`]}),i(`button`,{className:`mem-tab-btn${R===`advanced`?` mem-tab-active`:``}`,onClick:()=>vn(`advanced`),role:`tab`,"aria-selected":R===`advanced`,children:[s(ye,{size:14}),` Advanced`]})]}),i(`div`,{className:`memory-dashboard-body`,children:[R===`about`&&s(pt,{memoryEnabled:M,reloadKey:yn,onChanged:xr,onOpenAdvanced:()=>vn(`advanced`),showToast:Y}),R===`advanced`&&s(a.Fragment,{children:Et&&!g?i(`div`,{className:`mem-loading`,children:[s(`div`,{className:`mem-spinner`}),`Loading memory data...`]}):Ot?i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(Ue,{size:32})}),s(`p`,{children:Ot}),i(`button`,{className:`btn-secondary`,onClick:Q,style:{marginTop:12},children:[s(Ve,{size:14}),` Retry`]})]}):i(a.Fragment,{children:[!M&&i(`div`,{className:`mem-empty-state`,style:{margin:`40px 0`},children:[s(`div`,{className:`mem-empty-icon`,style:{opacity:.5},children:s(rt,{size:32})}),s(`p`,{style:{color:`var(--text-secondary)`,fontSize:14},children:`Memory is off. Turn it on in Settings below to let GAIA remember what you tell it.`})]}),M&&i(a.Fragment,{children:[g?.embedding_error&&i(`div`,{className:`mem-advanced-error`,role:`alert`,children:[s(Ue,{size:14}),` `,g.embedding_error]}),i(`div`,{className:`mem-stat-cards`,children:[i(`div`,{className:`mem-stat-card`,"data-accent":`purple`,children:[s(`div`,{className:`mem-stat-value`,children:g?.knowledge?.total??0}),s(`div`,{className:`mem-stat-label`,children:`Stored`}),s(`div`,{className:`mem-stat-sub`,children:(()=>{let e=bt(_);return e>0?`+${e} today`:g?.knowledge?.by_category?Object.entries(g.knowledge.by_category).slice(0,3).map(([e,t])=>`${t} ${e}${t===1?``:`s`}`).join(`, `):`No entries`})()})]}),i(`div`,{className:`mem-stat-card`,"data-accent":`gold`,children:[s(`div`,{className:`mem-stat-value`,children:g?.knowledge?.total_retrievals??0}),s(`div`,{className:`mem-stat-label`,children:`Retrieved`}),s(`div`,{className:`mem-stat-sub`,children:g?.knowledge?.total&&g?.knowledge?.total_retrievals?`avg ${(g.knowledge.total_retrievals/g.knowledge.total).toFixed(1)}x per memory`:`No recalls yet`})]}),i(`div`,{className:`mem-stat-card`,"data-accent":`blue`,children:[s(`div`,{className:`mem-stat-value`,children:g?.conversations?.total_sessions??0}),s(`div`,{className:`mem-stat-label`,children:`Sessions`}),s(`div`,{className:`mem-stat-sub`,children:yt(g?.conversations?.first_session??null,g?.conversations?.last_session??null)||`${g?.conversations?.total_turns??0} total turns`})]}),i(`div`,{className:`mem-stat-card`,"data-accent":`green`,children:[s(`div`,{className:`mem-stat-value`,children:g?.tools?.total_calls??0}),s(`div`,{className:`mem-stat-label`,children:`Tool Calls`}),i(`div`,{className:`mem-stat-sub`,title:`Memory tools (remember, recall, ...) are not logged`,children:[g?.tools?.unique_tools??0,` tools, excl. memory`]})]}),i(`div`,{className:`mem-stat-card`,"data-accent":`red`,children:[s(`div`,{className:`mem-stat-value`,children:g?.tools?.overall_success_rate!=null&&(g.tools.total_calls??0)>0?`${Math.round(g.tools.overall_success_rate*100)}%`:`—`}),s(`div`,{className:`mem-stat-label`,children:`Success Rate`}),s(`div`,{className:`mem-stat-sub`,children:(g?.tools?.total_calls??0)>0?`${g?.tools?.total_errors??0} errors`:`No tool calls yet`})]})]}),i(`div`,{className:`mem-section`,children:[i(`div`,{className:`mem-section-title mem-section-title-row`,children:[i(`span`,{className:`mem-section-title-left`,children:[s(ot,{size:14}),` Activity`]}),s(`div`,{className:`mem-range-tabs`,role:`group`,"aria-label":`Activity range`,children:[1,7,30].map(e=>s(`button`,{className:`mem-range-tab${qn===e?` active`:``}`,onClick:()=>Jn(e),children:e===1?`1D`:e===7?`7D`:`30D`},e))})]}),_.length>0?i(a.Fragment,{children:[s(`div`,{className:`mem-activity-chart`,children:_.map((e,t)=>{let n=e.conversations+e.tool_calls+e.knowledge_added+e.errors,r=t===0||t===_.length-1||t%7==0,o=new Date(e.date+`T00:00:00`).toLocaleDateString(void 0,{month:`short`,day:`numeric`});return i(`div`,{className:`mem-activity-bar-group`,onMouseEnter:()=>jt(t),onMouseLeave:()=>jt(null),children:[e.errors>0&&s(`div`,{className:`mem-activity-bar errors`,style:{height:`${e.errors/Ur*100}%`}}),e.knowledge_added>0&&s(`div`,{className:`mem-activity-bar knowledge`,style:{height:`${e.knowledge_added/Ur*100}%`}}),e.tool_calls>0&&s(`div`,{className:`mem-activity-bar tool_calls`,style:{height:`${e.tool_calls/Ur*100}%`}}),e.conversations>0&&s(`div`,{className:`mem-activity-bar conversations`,style:{height:`${e.conversations/Ur*100}%`}}),r&&s(`span`,{className:`mem-activity-date-label`,children:o}),At===t&&n>0&&i(`div`,{className:`mem-activity-tooltip`,children:[s(`strong`,{children:o}),s(`br`,{}),e.conversations>0&&i(a.Fragment,{children:[e.conversations,` conversations`,s(`br`,{})]}),e.tool_calls>0&&i(a.Fragment,{children:[e.tool_calls,` tool calls`,s(`br`,{})]}),e.knowledge_added>0&&i(a.Fragment,{children:[e.knowledge_added,` learned`,s(`br`,{})]}),e.errors>0&&i(a.Fragment,{children:[e.errors,` errors`]})]})]},e.date)})}),i(`div`,{className:`mem-activity-legend`,children:[i(`span`,{className:`mem-activity-legend-item`,children:[s(`span`,{className:`mem-activity-legend-dot conversations`}),` Conversations`]}),i(`span`,{className:`mem-activity-legend-item`,children:[s(`span`,{className:`mem-activity-legend-dot tool_calls`}),` Tool Calls`]}),i(`span`,{className:`mem-activity-legend-item`,children:[s(`span`,{className:`mem-activity-legend-dot knowledge`}),` Knowledge`]}),i(`span`,{className:`mem-activity-legend-item`,children:[s(`span`,{className:`mem-activity-legend-dot errors`}),` Errors`]})]})]}):i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(ot,{size:28})}),s(`p`,{children:`No activity data yet`})]})]}),i(`div`,{className:`mem-section`,children:[i(`div`,{className:`mem-section-title mem-section-title-row`,children:[i(`span`,{className:`mem-section-title-left`,children:[s(ye,{size:14}),` Knowledge Browser`,v&&v.total>0&&s(`span`,{className:`mem-section-count`,children:v.total})]}),!nn&&!k&&i(`button`,{className:`mem-section-add-btn`,onClick:()=>rn(!0),title:`Add a memory entry`,children:[s(Le,{size:13}),` Add`]})]}),i(`div`,{className:`mem-filters`,children:[i(`div`,{className:`mem-category-pills`,role:`group`,"aria-label":`Filter by category`,children:[xt.map(e=>s(`button`,{className:`mem-category-pill ${e}${w.includes(e)?` active`:``}`,onClick:()=>Ar(e),"aria-pressed":w.includes(e),children:e},e)),w.length>0&&s(`button`,{className:`mem-category-pill clear`,onClick:()=>{Rt([]),D(0)},"aria-label":`Clear category filters`,children:`✕ Clear`})]}),i(`select`,{className:`mem-filter-select`,value:zt,onChange:e=>{Bt(e.target.value),D(0)},"aria-label":`Filter by context`,children:[s(`option`,{value:``,children:`All Contexts`}),Wr.map(e=>s(`option`,{value:e,children:e},e))]}),i(`select`,{className:`mem-filter-select`,value:Vt,onChange:e=>{Ht(e.target.value),D(0)},"aria-label":`Filter by entity`,children:[s(`option`,{value:``,children:`All Entities`}),wt.map(e=>i(`option`,{value:e.entity,children:[e.entity,` (`,e.count,`)`]},e.entity))]}),i(`div`,{className:`mem-filter-search-wrap`,children:[ar?s(`div`,{className:`mem-spinner-sm search-icon`,style:{width:12,height:12,borderWidth:1.5}}):s(Ee,{size:13,className:`search-icon`}),s(`input`,{className:`mem-filter-search`,type:`text`,placeholder:`Search memories...`,value:Ut,onChange:e=>br(e.target.value),"aria-label":`Search memories`})]}),i(`label`,{className:`mem-filter-toggle`,title:`Show entries that have been superseded by newer versions`,children:[s(`input`,{type:`checkbox`,checked:Jt,onChange:e=>Yt(e.target.checked)}),s(`span`,{children:`Superseded`})]})]}),(nn||k)&&i(`div`,{className:`mem-inline-form`,children:[i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Content`}),s(`textarea`,{value:A.content,onChange:e=>j(t=>({...t,content:e.target.value})),placeholder:`What should the agent remember?`})]}),i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Category`}),s(`select`,{value:A.category,onChange:e=>j(t=>({...t,category:e.target.value})),children:xt.map(e=>s(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Context`}),s(`input`,{type:`text`,value:A.context,onChange:e=>j(t=>({...t,context:e.target.value})),placeholder:`global`})]}),i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Domain`}),s(`input`,{type:`text`,value:A.domain,onChange:e=>j(t=>({...t,domain:e.target.value})),placeholder:`e.g., python, frontend`})]}),i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Entity`}),s(`input`,{type:`text`,value:A.entity,onChange:e=>j(t=>({...t,entity:e.target.value})),placeholder:`e.g., person:sarah_chen`})]}),i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Due At`}),s(`input`,{type:`text`,value:A.due_at,onChange:e=>j(t=>({...t,due_at:e.target.value})),placeholder:`ISO 8601 (e.g., 2026-03-25T09:00:00-07:00)`})]}),i(`div`,{className:`mem-inline-form-row`,children:[s(`label`,{children:`Sensitive`}),i(`label`,{style:{display:`flex`,alignItems:`center`,gap:6,cursor:`pointer`,fontSize:12},children:[s(`input`,{type:`checkbox`,checked:A.sensitive,onChange:e=>j(t=>({...t,sensitive:e.target.checked}))}),`Mark as sensitive (excluded from system prompt)`]})]}),i(`div`,{className:`mem-inline-form-actions`,children:[s(`button`,{className:`btn-secondary`,onClick:()=>{rn(!1),an(null)},children:`Cancel`}),s(`button`,{className:`btn-primary`,onClick:k?Cr:Sr,style:{padding:`8px 20px`,fontSize:13},children:k?`Update`:`Save`})]})]}),v&&v.items.length>0?i(a.Fragment,{children:[s(`div`,{style:{overflowX:`auto`},children:i(`table`,{className:`mem-knowledge-table`,children:[s(`thead`,{children:i(`tr`,{children:[i(`th`,{onClick:()=>jr(`category`),className:T===`category`?`sorted`:``,children:[`Category`,Hr(`category`)]}),s(`th`,{children:`Content`}),i(`th`,{onClick:()=>jr(`context`),className:T===`context`?`sorted`:``,children:[`Context`,Hr(`context`)]}),s(`th`,{children:`Entity`}),i(`th`,{onClick:()=>jr(`confidence`),className:T===`confidence`?`sorted`:``,children:[`Confidence`,Hr(`confidence`)]}),s(`th`,{children:`Source`}),i(`th`,{onClick:()=>jr(`updated_at`),className:T===`updated_at`?`sorted`:``,children:[`Updated`,Hr(`updated_at`)]}),i(`th`,{onClick:()=>jr(`created_at`),className:T===`created_at`?`sorted`:``,children:[`Created`,Hr(`created_at`)]}),s(`th`,{children:`Due`}),s(`th`,{className:`mem-actions-cell`})]})}),s(`tbody`,{children:v.items.map(e=>{let t=Nt===e.id,n=e.has_embedding;return i(y.Fragment,{children:[i(`tr`,{className:`${e.superseded_by?`mem-superseded-row`:``} ${t?`mem-expanded-row`:``}`,onClick:()=>Pt(t?null:e.id),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),Pt(t?null:e.id))},tabIndex:0,role:`row`,"aria-expanded":t,style:{cursor:`pointer`},children:[s(`td`,{children:s(`span`,{className:`mem-cat-badge ${e.category}`,children:e.category})}),s(`td`,{children:i(`div`,{className:`mem-content-cell`,title:e.content,children:[n!==void 0&&s(`span`,{className:`mem-embed-dot ${n?`embedded`:`missing`}`,title:n?`Embedded`:`Embedding missing`,children:s(p,{size:6,fill:`currentColor`})}),e.sensitive&&s(`span`,{className:`mem-sensitive-badge`,title:`Sensitive`,children:s(rt,{size:11})}),s(`span`,{className:e.sensitive&&!on.has(e.id)?`mem-sensitive-blur`:e.superseded_by?`mem-superseded-text`:``,onClick:t=>{e.sensitive&&(t.stopPropagation(),sn(t=>{let n=new Set(t);return n.has(e.id)?n.delete(e.id):n.add(e.id),n}))},children:e.content})]})}),s(`td`,{children:s(`span`,{className:`mem-date-cell`,children:e.context})}),s(`td`,{children:e.entity?s(`span`,{className:`mem-entity-link`,onClick:t=>{t.stopPropagation(),Ht(e.entity),D(0)},title:`Filter by ${e.entity}`,children:e.entity}):s(`span`,{className:`mem-date-cell`,children:`—`})}),s(`td`,{children:i(`div`,{className:`mem-confidence`,children:[s(`div`,{className:`mem-confidence-bar`,children:s(`div`,{className:`mem-confidence-fill ${_t(e.confidence)}`,style:{width:`${e.confidence*100}%`}})}),e.confidence.toFixed(2)]})}),s(`td`,{children:s(`span`,{className:`mem-date-cell`,children:e.source||`—`})}),s(`td`,{children:s(`span`,{className:`mem-date-cell`,title:b(e.updated_at),children:x(e.updated_at)})}),s(`td`,{children:s(`span`,{className:`mem-date-cell`,title:b(e.created_at),children:x(e.created_at)})}),s(`td`,{children:e.due_at?s(`span`,{className:`mem-due-badge ${gt(e.due_at)?`overdue`:`upcoming`}`,title:b(e.due_at),children:x(e.due_at)}):s(`span`,{className:`mem-due-badge none`,children:`—`})}),s(`td`,{className:`mem-actions-cell`,children:i(`div`,{className:`mem-row-actions`,onClick:e=>e.stopPropagation(),children:[s(`button`,{className:`mem-row-action-btn`,onClick:()=>Er(e),title:`Edit`,children:s(Ae,{size:13})}),s(`button`,{className:`mem-row-action-btn`,onClick:()=>Tr(e),title:e.sensitive?`Unmark sensitive`:`Mark sensitive`,children:e.sensitive?s(tt,{size:13}):s(rt,{size:13})}),s(`button`,{className:`mem-row-action-btn`,onClick:()=>Dr(e.id),title:`Copy ID`,children:s(fe,{size:13})}),s(`button`,{className:`mem-row-action-btn delete${F===e.id?` is-confirm`:``}`,onClick:()=>wr(e.id),title:F===e.id?`Click again to delete`:`Delete`,"aria-label":F===e.id?`Confirm delete memory`:`Delete memory`,children:F===e.id?s(`span`,{className:`mem-row-delete-label`,children:`Delete?`}):s(Te,{size:13})})]})})]}),t&&s(`tr`,{className:`mem-detail-row`,children:s(`td`,{colSpan:10,children:i(`div`,{className:`mem-detail-panel`,children:[i(`div`,{className:`mem-detail-grid`,children:[i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`ID`}),s(`span`,{className:`mem-detail-value`,children:e.id})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Domain`}),s(`span`,{className:`mem-detail-value`,children:e.domain||`—`})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Source`}),s(`span`,{className:`mem-detail-value`,children:e.source||`—`})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Use Count`}),s(`span`,{className:`mem-detail-value`,children:e.use_count??0})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Created`}),s(`span`,{className:`mem-detail-value`,children:b(e.created_at)})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Updated`}),s(`span`,{className:`mem-detail-value`,children:b(e.updated_at)})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Last Used`}),s(`span`,{className:`mem-detail-value`,children:b(e.last_used)})]}),i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Reminded At`}),s(`span`,{className:`mem-detail-value`,children:b(e.reminded_at)})]}),e.superseded_by&&i(`div`,{className:`mem-detail-field`,children:[s(`span`,{className:`mem-detail-label`,children:`Superseded By`}),s(`span`,{className:`mem-detail-value mem-detail-chain`,children:e.superseded_by})]}),e.metadata&&i(`div`,{className:`mem-detail-field mem-detail-full`,children:[s(`span`,{className:`mem-detail-label`,children:`Metadata`}),s(`span`,{className:`mem-detail-value`,children:typeof e.metadata==`object`?JSON.stringify(e.metadata,null,2):e.metadata})]})]}),i(`div`,{className:`mem-detail-content-full`,children:[s(`span`,{className:`mem-detail-label`,children:`Full Content`}),s(`div`,{className:`mem-detail-content-text`,children:e.content})]})]})})})]},e.id)})})]})}),i(`div`,{className:`mem-pagination`,children:[i(`span`,{children:[E+1,`–`,Math.min(E+15,v.total),` of `,v.total]}),i(`div`,{className:`mem-pagination-btns`,children:[s(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":`Previous page`,disabled:E===0,onClick:()=>D(Math.max(0,E-15)),children:s(re,{size:14})}),s(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":`Next page`,disabled:E+15>=v.total,onClick:()=>D(E+15),children:s(Ze,{size:14})})]})]})]}):i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(ye,{size:28})}),s(`p`,{children:Ut||w.length>0||zt||Vt?`No matching memories`:`No memories stored yet`})]})]}),i(`div`,{className:`mem-two-col`,children:[i(`div`,{className:`mem-section`,children:[i(`div`,{className:`mem-section-title`,children:[s(je,{size:14}),` Tool Performance`,s(`span`,{className:`mem-section-note`,title:`remember, recall, update_memory, forget and search_past_conversations are not logged`,children:`excludes memory tools`})]}),st.length>0?s(`div`,{style:{overflowX:`auto`},children:i(`table`,{className:`mem-tool-table`,children:[s(`thead`,{children:i(`tr`,{children:[s(`th`,{children:`Tool`}),s(`th`,{children:`Calls`}),s(`th`,{children:`Success`}),s(`th`,{children:`Denied`}),s(`th`,{children:`Avg Time`}),s(`th`,{children:`Last Used`}),s(`th`,{children:`Last Error`})]})}),s(`tbody`,{children:st.map(e=>i(`tr`,{children:[s(`td`,{children:s(`span`,{className:`mem-tool-name`,children:e.tool_name})}),s(`td`,{children:e.total_calls}),s(`td`,{children:i(`div`,{className:`mem-confidence`,children:[s(`div`,{className:`mem-confidence-bar`,style:{width:40},children:s(`div`,{className:`mem-confidence-fill ${vt(e.success_rate)}`,style:{width:`${e.success_rate*100}%`}})}),i(`span`,{className:`mem-success-rate ${vt(e.success_rate)}`,children:[Math.round(e.success_rate*100),`%`]})]})}),s(`td`,{children:e.denied_count??0}),s(`td`,{children:ht(e.avg_duration_ms)}),s(`td`,{children:s(`span`,{className:`mem-date-cell`,title:b(e.last_used),children:x(e.last_used)})}),s(`td`,{children:s(`span`,{className:`mem-tool-error`,title:e.last_error||``,children:e.last_error||`—`})})]},e.tool_name))})]})}):i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(je,{size:28})}),s(`p`,{children:`No tool calls recorded yet`})]})]}),i(`div`,{className:`mem-section`,children:[i(`div`,{className:`mem-section-title`,children:[s(me,{size:14}),` Upcoming & Overdue`]}),ft.length>0?s(`div`,{className:`mem-temporal-list`,children:ft.map(e=>{let t=gt(e.due_at);return i(`div`,{className:`mem-temporal-item ${t?`overdue`:`upcoming`}`,children:[s(`span`,{className:`mem-temporal-icon`,children:s(t?Ue:me,{size:16})}),i(`div`,{className:`mem-temporal-content`,children:[s(`div`,{className:`mem-temporal-text`,children:e.content}),i(`div`,{className:`mem-temporal-date`,children:[t?`OVERDUE`:`Due`,`: `,x(e.due_at),e.context!==`global`&&` \u00B7 ${e.context}`]})]})]},e.id)})}):i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(d,{size:28})}),s(`p`,{children:`Nothing upcoming or overdue`})]})]})]}),i(`div`,{className:`mem-section`,children:[i(`div`,{className:`mem-section-title`,children:[s(c,{size:14}),` Conversation History`]}),i(`div`,{className:`mem-conv-search`,children:[s(Ee,{size:13,className:`search-icon`}),s(`input`,{type:`text`,placeholder:`Search conversations...`,value:Xt,onChange:e=>Or(e.target.value),"aria-label":`Search conversations`}),Xt&&s(`button`,{className:`mem-search-clear`,onClick:()=>{Zt(``),$t(null)},"aria-label":`Clear search`,children:s(He,{size:12})})]}),Qt===null?ut.length>0?s(`div`,{className:`mem-conv-list`,children:ut.map(e=>i(`div`,{className:`mem-conv-item`,onClick:()=>kr(e.session_id),children:[i(`div`,{className:`mem-conv-info`,children:[i(`div`,{className:`mem-conv-session-id`,children:[ze(e.session_id),e.consolidated&&s(`span`,{className:`mem-consolidated-badge`,title:`Consolidated`,children:s(et,{size:11})})]}),e.first_message&&s(`div`,{className:`mem-conv-preview`,children:e.first_message})]}),i(`div`,{className:`mem-conv-meta`,children:[i(`span`,{children:[e.turn_count,` turns`]}),s(`span`,{children:x(e.last_activity)})]})]},e.session_id))}):i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(c,{size:28})}),s(`p`,{children:`No conversation history in memory`})]}):Qt.length>0?s(`div`,{className:`mem-conv-list`,children:Qt.map(e=>i(`div`,{className:`mem-conv-item`,onClick:()=>kr(e.session_id),children:[i(`div`,{className:`mem-conv-info`,children:[i(`div`,{className:`mem-conv-session-id`,children:[s(`span`,{className:`mem-conv-turn-role ${e.role}`,children:e.role}),` `,ze(e.session_id)]}),s(`div`,{className:`mem-conv-preview`,children:e.content})]}),s(`div`,{className:`mem-conv-meta`,children:s(`span`,{children:x(e.timestamp)})})]},e.id))}):s(`div`,{className:`mem-empty`,children:i(`p`,{children:[`No conversations match “`,Xt,`”`]})})]}),O&&i(`div`,{className:`mem-conv-detail-overlay`,children:[i(`div`,{className:`mem-conv-detail-header`,children:[s(`h2`,{children:ze(O.sessionId)}),i(`div`,{className:`mem-conv-detail-actions`,children:[oe.has(O.sessionId)&&s(`button`,{className:`btn-secondary`,onClick:()=>r(O.sessionId),children:`Open chat`}),s(`button`,{className:`btn-icon`,onClick:()=>tn(null),"aria-label":`Close conversation`,children:s(He,{size:16})})]})]}),i(`div`,{className:`mem-conv-detail-body`,children:[O.turns.map(e=>i(`div`,{className:`mem-conv-turn`,children:[i(`div`,{className:`mem-conv-turn-header`,children:[s(`div`,{className:`mem-conv-turn-role ${e.role}`,children:e.role}),s(`span`,{className:`mem-conv-turn-time`,title:b(e.timestamp),children:x(e.timestamp)})]}),s(`div`,{className:`mem-conv-turn-content`,children:e.content})]},e.id)),O.turns.length===0&&s(`div`,{className:`mem-empty`,children:`No turns found`})]})]})]}),i(`div`,{className:`mem-section`,children:[i(`div`,{className:`mem-section-title`,children:[s(rt,{size:14}),` Settings `,s(`span`,{style:{fontSize:10,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`1px 6px`,borderRadius:4,marginLeft:6,verticalAlign:`middle`,letterSpacing:`0.5px`},children:`BETA`})]}),i(`div`,{className:`mem-setting-row`,children:[i(`div`,{className:`mem-setting-info`,children:[s(`span`,{className:`mem-setting-label`,children:`Memory enabled`}),s(`span`,{className:`mem-setting-desc`,children:`When disabled, no knowledge or conversation data is stored during any session (global incognito).`})]}),s(`button`,{className:`mem-toggle${M?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!M)L(`memory`);else{P(!0);try{let e=await h({memory_enabled:!1});cn(e.memory_enabled)}catch(e){n.system.warn(`Failed to disable memory`,e)}finally{P(!1)}}},"aria-pressed":M,"aria-label":`Memory is ${M?`enabled`:`disabled`}`,children:M?`On`:`Off`})]}),I&&(()=>{let e={memory:{title:`Enable Agent Memory?`,description:`Agent memory is a work-in-progress. By enabling it:`,bullets:[[`Conversations and facts are stored `,`locally on this machine`],[`Stored data `,`may be lost`,` during updates`],[`You can disable it at any time from this settings panel`]],buttonLabel:`Enable Memory`,onConfirm:async()=>{let e=await h({memory_enabled:!0});cn(e.memory_enabled),Y(`Memory enabled`,`info`)}},mcp:{title:`Enable MCP Memory Access?`,description:`This exposes memory data to external MCP clients:`,bullets:[[`MCP clients can `,`read your stored memories`,` (read-only)`],[`Requires an `,`MCP server restart`,` to take effect`],[`Intended for debugging and troubleshooting only`]],buttonLabel:`Enable MCP Access`,onConfirm:async()=>{let e=await h({mcp_memory_enabled:!0});un(e.mcp_memory_enabled),Y(`MCP memory access enabled`,`info`)}},discovery:{title:`Enable System Discovery?`,description:`This scans your system to personalize responses:`,bullets:[[`Collects `,`hardware, software, and environment`,` information`],[`Scans files, git repos, browser history, and SSH config`],[`All data stays `,`local on this machine`]],buttonLabel:`Enable Discovery`,onConfirm:async()=>{let e=await h({system_discovery_consent:!0});if(fn(e.system_discovery_consent),e.system_context_error)Y(`System discovery enabled but scan failed: ${e.system_context_error}`,`error`);else{let t=e.system_context_refresh?.stored??0;Y(`System discovery enabled — ${t} system facts collected`,`info`)}Q()}}}[I];return i(a.Fragment,{children:[s(`div`,{"aria-hidden":`true`,style:{position:`fixed`,inset:0,background:`var(--bg-modal-overlay)`,zIndex:9998,backdropFilter:`blur(4px)`},onClick:()=>L(null)}),i(`div`,{ref:lr,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`mem-beta-confirm-title`,"aria-describedby":`mem-beta-confirm-desc`,tabIndex:-1,style:{position:`fixed`,top:`50%`,left:`50%`,transform:`translate(-50%, -50%)`,zIndex:9999,background:`var(--bg-card)`,border:`1px solid var(--border)`,borderRadius:12,padding:`28px 32px`,maxWidth:420,width:`90vw`,boxShadow:`var(--shadow-lg)`},children:[i(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:16},children:[s(`span`,{style:{fontSize:11,fontWeight:700,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`3px 10px`,borderRadius:4,letterSpacing:`0.5px`},children:`BETA`}),s(`h2`,{id:`mem-beta-confirm-title`,style:{fontSize:16,fontWeight:600,color:`var(--text-primary)`},children:e.title})]}),s(`p`,{id:`mem-beta-confirm-desc`,style:{fontSize:13,lineHeight:1.6,color:`var(--text-secondary)`,margin:`0 0 8px`},children:e.description}),s(`ul`,{style:{fontSize:13,lineHeight:1.7,color:`var(--text-secondary)`,margin:`0 0 24px`,paddingLeft:20},children:e.bullets.map((e,t)=>s(`li`,{children:e.map((e,t)=>t%2==1?s(`strong`,{style:{color:`var(--text-primary)`},children:e},t):s(`span`,{children:e},t))},t))}),i(`div`,{style:{display:`flex`,justifyContent:`flex-end`,gap:10},children:[s(`button`,{className:`btn-secondary`,onClick:()=>L(null),style:{padding:`8px 20px`,fontSize:13,borderRadius:6},children:`Cancel`}),s(`button`,{disabled:N,onClick:async()=>{P(!0);try{await e.onConfirm()}catch(e){n.system.warn(`Failed to update setting`,e),Y(`Failed to update setting. Please try again.`,`error`)}finally{P(!1),L(null)}},style:{padding:`8px 24px`,fontSize:13,fontWeight:600,borderRadius:6,border:`none`,cursor:`pointer`,background:`var(--accent-fill)`,color:`var(--accent-fill-text)`},children:e.buttonLabel})]})]})]})})(),i(`div`,{className:`mem-setting-row`,children:[i(`div`,{className:`mem-setting-info`,children:[s(`span`,{className:`mem-setting-label`,children:`MCP memory access`}),s(`span`,{className:`mem-setting-desc`,children:`Expose read-only memory tools to MCP clients (for debug/troubleshooting). Requires MCP server restart.`})]}),s(`button`,{className:`mem-toggle${ln?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!ln)L(`mcp`);else{P(!0);try{let e=await h({mcp_memory_enabled:!1});un(e.mcp_memory_enabled)}catch(e){n.system.warn(`Failed to update memory settings`,e)}finally{P(!1)}}},"aria-label":`Toggle MCP memory access`,"aria-pressed":ln,children:ln?`On`:`Off`})]}),i(`div`,{className:`mem-setting-row`,children:[i(`div`,{className:`mem-setting-info`,children:[s(`span`,{className:`mem-setting-label`,children:`System discovery`}),s(`span`,{className:`mem-setting-desc`,children:`Allow GAIA to scan your system for hardware, software, and environment information to personalize responses.`})]}),s(`button`,{className:`mem-toggle${dn?` mem-toggle-on`:``}`,disabled:N,onClick:async()=>{if(!dn)L(`discovery`);else{P(!0);try{let e=await h({system_discovery_consent:!1});fn(e.system_discovery_consent)}catch(e){n.system.warn(`Failed to update system discovery setting`,e)}finally{P(!1)}}},"aria-label":`Toggle system discovery`,"aria-pressed":dn,children:dn?`On`:`Off`})]}),i(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[i(`div`,{className:`mem-setting-info`,children:[s(`span`,{className:`mem-setting-label`,children:`Re-initialize memory`}),s(`span`,{className:`mem-setting-desc`,children:`Wipe all memories, conversations, and tool logs, then re-collect system information. This cannot be undone.`})]}),gn?i(`div`,{className:`mem-delete-confirm`,children:[s(`span`,{className:`mem-delete-confirm-label`,children:`Are you sure?`}),s(`button`,{className:`mem-btn-danger`,disabled:N,onClick:async()=>{P(!0);try{let e=await be();e.system_context.error?Y(e.system_context.error,`error`):Y(`Re-initialized: cleared ${e.cleared.knowledge} entries, restored ${e.system_context.stored} system facts`,`info`),Q()}catch(e){n.system.warn(`Failed to reinitialize memory`,e),Y(`Failed to re-initialize memory`,`error`)}finally{P(!1),_n(!1)}},children:`Yes, re-initialize`}),s(`button`,{className:`btn-secondary`,onClick:()=>_n(!1),style:{padding:`6px 14px`,fontSize:12},children:`Cancel`})]}):s(`button`,{className:`mem-btn-danger`,disabled:N,onClick:()=>_n(!0),children:`Re-initialize`})]}),i(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[i(`div`,{className:`mem-setting-info`,children:[s(`span`,{className:`mem-setting-label`,children:`Delete all memories`}),s(`span`,{className:`mem-setting-desc`,children:`Permanently wipe all knowledge entries, conversation history, and tool logs. This cannot be undone.`})]}),pn?i(`div`,{className:`mem-delete-confirm`,children:[s(`span`,{className:`mem-delete-confirm-label`,children:`Are you sure?`}),s(`button`,{className:`mem-btn-danger`,disabled:N,onClick:async()=>{P(!0);try{let e=await Ie();Y(`Deleted ${e.knowledge} knowledge entries, ${e.conversations} conversations`,`info`),Q()}catch(e){n.system.warn(`Failed to clear memory`,e),Y(`Failed to clear memory`,`error`)}finally{P(!1),mn(!1)}},children:`Yes, delete all`}),s(`button`,{className:`btn-secondary`,onClick:()=>mn(!1),style:{padding:`6px 14px`,fontSize:12},children:`Cancel`})]}):s(`button`,{className:`mem-btn-danger`,disabled:N,onClick:()=>mn(!0),children:`Delete All`})]})]}),g&&i(`div`,{className:`mem-db-footer`,children:[i(`span`,{children:[`Database: `,We(g.db_size_bytes),g.knowledge?.avg_confidence!=null&&` \u00B7 Avg confidence: ${g.knowledge.avg_confidence.toFixed(2)}`]}),i(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[g.knowledge?.entity_count!=null&&g.knowledge.entity_count>0&&i(`span`,{children:[g.knowledge.entity_count,` entities`]}),g.knowledge?.sensitive_count!=null&&g.knowledge.sensitive_count>0&&i(`span`,{children:[s(rt,{size:10}),` `,g.knowledge.sensitive_count,` sensitive`]})]})]})]})}),R===`profile`&&i(`div`,{className:`mem-profile-grid`,children:[i(`div`,{className:`mem-profile-card`,children:[i(`div`,{className:`mem-profile-card-title`,children:[s(Ne,{size:16}),` System Discovery`]}),s(`p`,{className:`mem-profile-desc`,children:`Scan your system to discover apps, projects, and usage patterns.`}),s(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:z===`running`||z===`saving`,onClick:Rr,children:z===`running`?i(a.Fragment,{children:[s(`div`,{className:`mem-spinner-sm`}),` Running...`]}):`Run Discovery`}),Fn.length>0&&s(`div`,{className:`mem-log`,ref:Rn,children:Fn.map((e,t)=>s(`div`,{className:`mem-log-line ${e.kind}`,children:e.text},t))}),(z===`review`||z===`saving`||z===`done`)&&H.length>0&&i(`div`,{className:`mem-review-section`,children:[s(`div`,{className:`mem-review-header`,children:`Review & Save`}),s(`div`,{className:`mem-review-list`,children:H.map((e,t)=>i(`label`,{className:`mem-review-item`,children:[s(`input`,{type:`checkbox`,checked:e._checked,disabled:z===`saving`||z===`done`,onChange:()=>{U(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),s(`span`,{className:`mem-review-content`,children:e.content}),s(`span`,{className:`mem-source-badge`,children:e._source_name||e.category}),i(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),i(`div`,{className:`mem-review-actions`,children:[s(`button`,{className:`btn-primary`,disabled:z===`saving`||z===`done`||H.filter(e=>e._checked).length===0,onClick:zr,children:z===`saving`?i(a.Fragment,{children:[s(`div`,{className:`mem-spinner-sm`}),` Saving...`]}):`Save Selected (${H.filter(e=>e._checked).length})`}),i(`span`,{className:`mem-review-select-links`,children:[s(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>U(e=>e.map(e=>({...e,_checked:!0}))),children:`Select All`}),` / `,s(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>U(e=>e.map(e=>({...e,_checked:!1}))),children:`None`})]})]})]}),z===`done`&&In!==null&&i(`div`,{className:`mem-profile-success`,children:[s(d,{size:14}),` Saved `,In,` items to memory`]}),z===`review`&&H.length===0&&s(`div`,{className:`mem-profile-empty`,children:`No items discovered.`})]}),i(`div`,{className:`mem-profile-card`,children:[i(`div`,{className:`mem-profile-card-title`,children:[s(Fe,{size:16}),` AI Profile Inference`]}),s(`p`,{className:`mem-profile-desc`,children:`Use the local LLM to generate profile insights from your data.`}),s(`p`,{className:`mem-profile-note`,children:`Requires Lemonade Server running.`}),i(`label`,{className:`mem-profile-checkbox`,children:[s(`input`,{type:`checkbox`,checked:Un,onChange:e=>Wn(e.target.checked),disabled:W===`running`||W===`saving`}),`Include browser history`]}),s(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:W===`running`||W===`saving`,onClick:Br,children:W===`running`?i(a.Fragment,{children:[s(`div`,{className:`mem-spinner-sm`}),` Running...`]}):`Run Inference`}),Bn.length>0&&s(`div`,{className:`mem-log`,ref:Gn,children:Bn.map((e,t)=>s(`div`,{className:`mem-log-line ${e.kind}`,children:e.text},t))}),(W===`review`||W===`saving`||W===`done`)&&q.length>0&&i(`div`,{className:`mem-review-section`,children:[s(`div`,{className:`mem-review-header`,children:`Review & Save`}),s(`div`,{className:`mem-review-list`,children:q.map((e,t)=>i(`label`,{className:`mem-review-item`,children:[s(`input`,{type:`checkbox`,checked:e._checked,disabled:W===`saving`||W===`done`,onChange:()=>{J(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),s(`span`,{className:`mem-review-content`,children:e.content}),s(`span`,{className:`mem-domain-badge ${St[e.domain]||`gray`}`,children:e.domain}),i(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),i(`div`,{className:`mem-review-actions`,children:[s(`button`,{className:`btn-primary`,disabled:W===`saving`||W===`done`||q.filter(e=>e._checked).length===0,onClick:Vr,children:W===`saving`?i(a.Fragment,{children:[s(`div`,{className:`mem-spinner-sm`}),` Saving...`]}):`Save Selected (${q.filter(e=>e._checked).length})`}),i(`span`,{className:`mem-review-select-links`,children:[s(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>J(e=>e.map(e=>({...e,_checked:!0}))),children:`Select All`}),` / `,s(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>J(e=>e.map(e=>({...e,_checked:!1}))),children:`None`})]})]})]}),W===`done`&&Vn!==null&&i(`div`,{className:`mem-profile-success`,children:[s(d,{size:14}),` Saved `,Vn,` insights to memory`]}),W===`review`&&q.length===0&&s(`div`,{className:`mem-profile-empty`,children:`No insights generated.`})]})]}),R===`goals`&&i(`div`,{className:`mem-goals-tab`,children:[s(`div`,{className:`mem-goals-stats-row`,children:[`queued`,`in_progress`,`completed`,`failed`].map(e=>i(`div`,{className:`mem-goals-stat-pill mem-goal-status-${e.replace(`_`,`-`)}`,children:[s(`span`,{className:`mem-goals-stat-n`,children:Cn?.goals[e]??0}),s(`span`,{className:`mem-goals-stat-label`,children:e.replace(`_`,` `)})]},e))}),xn.filter(e=>e.status===`pending_approval`).length>0&&i(`div`,{className:`mem-goals-approval-banner`,children:[i(`div`,{className:`mem-goals-approval-title`,children:[s(l,{size:14}),` Agent suggested `,xn.filter(e=>e.status===`pending_approval`).length,` goal(s) — review before execution`]}),xn.filter(e=>e.status===`pending_approval`).map(e=>i(`div`,{className:`mem-goals-approval-item`,children:[i(`div`,{className:`mem-goals-approval-text`,children:[s(`strong`,{children:e.title}),s(`span`,{children:e.description})]}),i(`div`,{className:`mem-goals-approval-actions`,children:[s(`button`,{className:`btn-danger-sm`,onClick:()=>vr(()=>ce(e.id),`Couldn't reject the goal`),children:`Reject`}),s(`button`,{className:`btn-secondary`,onClick:()=>vr(()=>De(e.id),`Couldn't accept the goal`),children:`Accept`})]})]},e.id))]}),s(`div`,{className:`mem-goals-toolbar`,children:i(`button`,{className:`btn-primary`,onClick:()=>Mn(e=>!e),children:[s(Le,{size:14}),` New Goal`]})}),jn&&i(`div`,{className:`mem-goals-add-form`,children:[s(`input`,{className:`mem-input`,placeholder:`Goal title`,value:Nn.title,onChange:e=>Pn(t=>({...t,title:e.target.value}))}),s(`textarea`,{className:`mem-input`,placeholder:`Description — what should the agent work toward?`,rows:2,value:Nn.description,onChange:e=>Pn(t=>({...t,description:e.target.value}))}),i(`div`,{className:`mem-goals-form-row`,children:[i(`select`,{className:`mem-select`,value:Nn.priority,onChange:e=>Pn(t=>({...t,priority:e.target.value})),children:[s(`option`,{value:`low`,children:`Low priority`}),s(`option`,{value:`medium`,children:`Medium priority`}),s(`option`,{value:`high`,children:`High priority`})]}),s(`button`,{className:`btn-primary`,onClick:()=>{Nn.title.trim()&&vr(async()=>{await Ge(Nn),Pn({title:``,description:``,priority:`medium`}),Mn(!1)},`Couldn't create the goal`)},children:`Create`}),s(`button`,{className:`btn-secondary`,onClick:()=>Mn(!1),children:`Cancel`})]})]}),Tn?i(`div`,{className:`mem-loading`,children:[s(`div`,{className:`mem-spinner`}),` Loading goals...`]}):xn.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).length===0?i(`div`,{className:`mem-empty`,children:[s(`div`,{className:`mem-empty-icon`,children:s(it,{size:32})}),s(`p`,{children:`No goals yet. Create one or let the agent suggest goals in autonomous mode.`})]}):s(`div`,{className:`mem-goals-list`,children:xn.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).map(e=>i(`div`,{className:`mem-goal-card mem-goal-status-${e.status.replace(`_`,`-`)}`,children:[i(`div`,{className:`mem-goal-header`,role:`button`,tabIndex:0,"aria-expanded":Dn===e.id,onClick:()=>On(t=>t===e.id?null:e.id),onKeyDown:t=>{t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),On(t=>t===e.id?null:e.id))},children:[i(`div`,{className:`mem-goal-header-left`,children:[s(`span`,{className:`mem-goal-status-dot status-${e.status.replace(`_`,`-`)}`}),s(`span`,{className:`mem-goal-title`,children:e.title}),s(`span`,{className:`mem-goal-priority mem-priority-${e.priority}`,children:e.priority}),e.source!==`user`&&i(`span`,{className:`mem-goal-source-badge`,children:[s(l,{size:10}),` `,e.source.replace(`_`,` `)]})]}),i(`div`,{className:`mem-goal-header-right`,children:[i(`span`,{className:`mem-goal-task-count`,children:[s(Ye,{size:12}),e.tasks.filter(e=>e.status===`completed`).length,`/`,e.tasks.length]}),e.status===`queued`&&s(`button`,{className:`mem-goal-action-btn mem-goal-cancel-btn`,onClick:t=>{t.stopPropagation(),vr(()=>Be(e.id),`Couldn't cancel the goal`)},children:`Cancel`}),kn===e.id?s(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn mem-goal-delete-confirm`,onClick:t=>{t.stopPropagation(),An(null),vr(()=>we(e.id),`Couldn't delete the goal`)},children:`Delete?`}):s(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn`,"aria-label":`Delete goal ${e.title}`,onClick:t=>{t.stopPropagation(),An(e.id)},children:s(Te,{size:12})}),s(xe,{size:14,className:Dn===e.id?`mem-chevron-open`:``})]})]}),Dn===e.id&&i(`div`,{className:`mem-goal-body`,children:[e.description&&s(`p`,{className:`mem-goal-desc`,children:e.description}),e.progress_notes&&s(`p`,{className:`mem-goal-progress`,children:e.progress_notes}),e.tasks.length>0?s(`div`,{className:`mem-task-list`,children:e.tasks.map(e=>i(`div`,{className:`mem-task-row mem-task-status-${e.status}`,children:[s(`span`,{className:`mem-task-dot status-${e.status}`}),s(`span`,{className:`mem-task-desc`,children:e.description}),s(`span`,{className:`mem-task-status-label`,children:e.status}),e.result&&s(`span`,{className:`mem-task-result`,children:e.result})]},e.id))}):s(`p`,{className:`mem-goal-no-tasks`,children:`No tasks yet — the agent will break this down when it starts.`})]})]},e.id))})]})]}),Ft.length>0&&s(`div`,{className:`mem-toast-container`,"aria-live":`polite`,children:Ft.map(e=>i(`div`,{className:`mem-toast mem-toast-${e.type}`,role:`status`,children:[e.type===`success`&&s(d,{size:14}),e.type===`error`&&s(Ue,{size:14}),e.type===`info`&&s(ye,{size:14}),s(`span`,{children:e.text})]},e.id))})]})}export{S as MemoryDashboard};
@@ -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{G as t,N as n,i as r,n as i,r as a}from"./apiBase-BMkGbdXt.js";import{X as o}from"./api-BzlFpP4T.js";import{$ as s,Dt as c,Ht as l,Mt as u,Y as d,ft as f,i as p,nt as m,rt as h,ut as g}from"./index-hAcJijAU.js";var _=e(t(),1),v=null,y=`https://ngrok.com/download`;function b({isOpen:t,onClose:b,onStop:x,error:S,setupCommands:C,onRetry:w}){let[T,E]=(0,_.useState)(null),[D,O]=(0,_.useState)(!1),[k,A]=(0,_.useState)(null),j=s(),M=Array.isArray(C),N=!!S||M,[P,F]=(0,_.useState)(null),I=(0,_.useRef)(null);m(t,b);let L=(0,_.useRef)(null);d(L,t);let R=(0,_.useCallback)(async()=>{try{let e=await o();return E(e),e}catch(e){return n.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,_.useEffect)(()=>{if(!t||N)return;R();let e=setInterval(async()=>{let t=await R();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[t,N,R]),(0,_.useEffect)(()=>{if(!T?.active||!T.url||!T.token||!I.current)return;let t=`${T.url}/?token=${T.token}`;n.system.info(`Generating QR code for: ${t}`),(async()=>{if(F(null),!v)try{let t=await p(()=>import(`./browser-KnDALPx_.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);v=t.default||t}catch{n.system.error(`QR code library not available - install with: npm install qrcode`),F(`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.`),F(`QR code unavailable — the theme did not load. Use the link below instead.`);else try{await v.toCanvas(I.current,t,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){n.system.error(`QR code generation failed`,e),F(`QR code could not be drawn. Use the link below instead.`)}})()},[T?.active,T?.url,T?.token]);let z=(0,_.useRef)(null),B=(0,_.useCallback)(()=>{if(!T?.url||!T?.token)return;let e=`${T.url}/?token=${T.token}`;navigator.clipboard.writeText(e).then(()=>{O(!0),z.current&&clearTimeout(z.current),z.current=setTimeout(()=>O(!1),2e3)})},[T]),V=(0,_.useCallback)(e=>{navigator.clipboard.writeText(e).then(()=>{A(e),z.current&&clearTimeout(z.current),z.current=setTimeout(()=>A(null),2e3)}).catch(e=>n.system.error(`Could not copy the ngrok install command`,e))},[]);if((0,_.useEffect)(()=>()=>{z.current&&clearTimeout(z.current)},[]),!t)return null;let H=T?.active&&T?.url&&T?.token?`${T.url}/?token=${T.token}`:``;return a(`div`,{ref:L,className:`modal-overlay`,onClick:b,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile access`,children:r(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[r(`div`,{className:`modal-header`,children:[r(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[a(g,{size:18}),`Mobile access`]}),a(`button`,{className:`btn-icon`,onClick:b,"aria-label":`Close`,children:a(h,{size:18})})]}),r(`div`,{className:`modal-body mobile-modal-body`,children:[r(`div`,{className:`tunnel-status`,children:[a(`span`,{className:`status-dot ${T?.active?`active`:M?`setup`:S?`error`:`starting`}`}),a(`span`,{children:T?.active?`Tunnel active`:M?j(`mobile.ngrokRequired`):S?`Couldn't start mobile access`:`Starting tunnel...`}),!T?.active&&!N&&a(`span`,{className:`tunnel-spinner`})]}),M&&r(`div`,{className:`tunnel-setup`,children:[a(`div`,{className:`tunnel-setup-title`,children:j(`mobile.setupTitle`)}),r(`p`,{children:[j(`mobile.setupIntro`),` `,C.length>0?j(`mobile.setupInstall`):j(`mobile.setupDownload`)]}),C.map(e=>r(`div`,{className:`tunnel-url-row tunnel-setup-command`,children:[a(`input`,{type:`text`,readOnly:!0,dir:`ltr`,value:e,"aria-label":j(`mobile.installCommand`)}),r(`button`,{className:`copy-url-btn ${k===e?`copied`:``}`,onClick:()=>V(e),title:j(`mobile.copyCommand`),children:[a(k===e?l:u,{size:13}),j(k===e?`mobile.copied`:`mobile.copy`)]})]},e)),r(`a`,{href:y,target:`_blank`,rel:`noopener noreferrer`,className:`tunnel-setup-link`,children:[j(`mobile.downloadPage`),` `,a(c,{size:11})]})]}),S&&!M&&a(`div`,{className:`tunnel-error`,children:S}),!N&&a(`div`,{className:`qr-code-area`,children:T?.active?r(i.Fragment,{children:[a(`canvas`,{ref:I,hidden:!!P}),P&&a(`div`,{className:`qr-placeholder error`,children:P})]}):r(`div`,{className:`qr-placeholder`,children:[a(`div`,{className:`placeholder-spinner`}),a(`span`,{children:`Connecting...`})]})}),T?.active&&H&&r(`div`,{className:`tunnel-url-area`,children:[a(`label`,{children:`Mobile URL`}),r(`div`,{className:`tunnel-url-row`,children:[a(`input`,{type:`text`,readOnly:!0,value:H}),r(`button`,{className:`copy-url-btn ${D?`copied`:``}`,onClick:B,title:`Copy URL`,children:[a(D?l:u,{size:13}),D?`Copied`:`Copy`]})]})]}),T?.active&&T?.publicIp&&T?.url&&!T.url.includes(`ngrok-free.app`)&&r(`div`,{className:`tunnel-password-hint`,children:[a(`label`,{children:`Tunnel password`}),a(`div`,{className:`tunnel-password-value`,children:T.publicIp}),a(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),!N&&a(`div`,{className:`mobile-instructions`,children:r(`ol`,{children:[a(`li`,{children:P?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),T?.url&&!T.url.includes(`ngrok-free.app`)&&a(`li`,{children:`Enter the tunnel password shown above when prompted`}),a(`li`,{children:`Chat with GAIA from your mobile device`}),a(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),T?.active&&!S&&r(`div`,{className:`mobile-install-hint`,children:[a(`div`,{className:`mobile-install-hint-title`,children:j(`mobileAccess.installTitle`)}),a(`p`,{children:j(`mobileAccess.installSteps`)}),a(`p`,{children:j(`mobileAccess.linkLifetime`)})]}),r(`div`,{className:`mobile-access-actions`,children:[T?.active&&x&&a(`button`,{className:`btn-danger`,onClick:x,title:`Close the tunnel and revoke the mobile URL`,children:`Stop tunnel`}),M&&w&&r(`button`,{className:`btn-primary`,onClick:w,children:[a(f,{size:13}),` `,j(`mobile.retry`)]}),a(`button`,{className:`btn-secondary`,onClick:b,children:`Close`})]})]})]})})}export{b as MobileAccessModal};
@@ -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
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{G as t,N as n,W as r,i,n as a,o,r as s}from"./apiBase-BMkGbdXt.js";import{n as c,t as l}from"./zap-D7aLu_f0.js";import{ht as u}from"./api-BzlFpP4T.js";import{Nt as d,Y as f,ct as p,gt as m,mt as h,n as g,nt as _,rt as v}from"./index-hAcJijAU.js";var y={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};y.node;var b=r(y),x=e(t(),1),S=8e3;function C(e,t){if(!e)return`never`;let n=new Date(e),r=(t||new Date).getTime()-n.getTime(),i=Math.floor(r/1e3);if(i<0){let e=Math.abs(i);if(e<60)return`in ${e}s`;let t=Math.floor(e/60);if(t<60)return`in ${t}m`;let n=Math.floor(t/60);return n<24?`in ${n}h`:`in ${Math.floor(n/24)}d`}if(i<60)return`just now`;let a=Math.floor(i/60);if(a<60)return`${a}m ago`;let o=Math.floor(a/60);return o<24?`${o}h ago`:n.toLocaleDateString(void 0,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function w(e,t){if(!e)return`never`;let n=C(e,t),r=new Date(e);return r.getTime()<=(t||new Date).getTime()?n:`${r.toLocaleString(void 0,{weekday:`short`,hour:`numeric`,minute:`2-digit`})} (${n})`}function T(e){if(!e)return!1;let t=new Date(e).getTime()-Date.now();return t>0&&t<6e4}function E(e){let[t,n]=e.split(`:`).map(Number),r=t>=12?`PM`:`AM`;return`${t===0?12:t>12?t-12:t}:${n.toString().padStart(2,`0`)} ${r}`}function D(e){let t=e>=12?`PM`:`AM`;return`${e===0?12:e>12?e-12:e} ${t}`}function O(e){let t=[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`];return e.length===5&&!e.includes(5)&&!e.includes(6)?`Weekdays`:e.length===2&&e.includes(5)&&e.includes(6)?`Weekends`:e.length===7?`Every day`:e.map(e=>t[e]).join(`, `)}function k({schedule:e}){let{selectedSchedule:t,selectSchedule:r,updateScheduleStatus:u,runScheduleNow:f,deleteSchedule:h,results:_,resultsLoading:v,loadSchedules:y,loadResults:E}=g(),{setCurrentSession:D,setShowSchedules:O}=o(),k=t===e.name,[A,j]=(0,x.useState)(!1),M=(0,x.useRef)(null),N=(0,x.useCallback)(()=>{M.current&&=(clearTimeout(M.current),null)},[]);(0,x.useEffect)(()=>N,[N]);let[P,F]=(0,x.useState)(()=>new Date),I=(0,x.useRef)(null);(0,x.useEffect)(()=>{let t=e.status===`active`&&T(e.next_run_at);return t&&!I.current?I.current=setInterval(()=>{F(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&y()},1e3):!t&&I.current&&(clearInterval(I.current),I.current=null),()=>{I.current&&=(clearInterval(I.current),null)}},[e.status,e.next_run_at,y]);let L=(0,x.useRef)(e.last_run_at);(0,x.useEffect)(()=>{k&&e.last_run_at!==L.current&&(L.current=e.last_run_at,E(e.name))},[k,e.last_run_at,e.name,E]);let R=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,z=(0,x.useCallback)(t=>{t.stopPropagation();let r=e.status===`active`?`paused`:`active`;n.ui.info(`Schedule "${e.name}": ${e.status} -> ${r}`),u(e.name,r)},[e.name,e.status,u]),B=(0,x.useCallback)(t=>{t.stopPropagation(),n.ui.info(`Schedule "${e.name}": run now`),f(e.name)},[e.name,f]),V=(0,x.useCallback)(t=>{t.stopPropagation(),N(),A?(n.ui.info(`Deleting schedule "${e.name}"`),h(e.name)):(j(!0),M.current=setTimeout(()=>{M.current=null,j(!1)},S))},[e.name,A,h,N]),H=(0,x.useCallback)(t=>{t.stopPropagation(),e.session_id&&(n.ui.info(`Opening chat session for schedule "${e.name}"`),D(e.session_id),O(!1))},[e.session_id,e.name,D,O]);return i(`div`,{className:`schedule-card ${k?`selected`:``} ${R?`just-ran`:``}`,onClick:()=>r(k?null:e.name),children:[i(`div`,{className:`schedule-card-header`,children:[s(`span`,{className:`schedule-card-name`,children:e.name}),s(`span`,{className:`schedule-card-status ${e.status}`,children:e.status})]}),s(`div`,{className:`schedule-card-prompt`,children:e.prompt}),i(`div`,{className:`schedule-card-meta`,children:[i(`span`,{title:e.description,children:[s(d,{size:11}),` `,e.description]}),i(`span`,{children:[`Runs: `,e.run_count]}),e.error_count>0&&i(`span`,{children:[`Errors: `,e.error_count]}),i(`span`,{children:[`Last: `,C(e.last_run_at)]}),i(`span`,{children:[`Next: `,w(e.next_run_at,P)]})]}),e.last_error&&i(`div`,{className:`schedule-card-error`,children:[`Last run failed: `,e.last_error]}),i(`div`,{className:`schedule-card-actions`,children:[e.session_id&&i(`button`,{className:`btn-sm chat`,onClick:H,title:`Open chat session`,children:[s(c,{size:11}),` Open Chat`]}),i(`button`,{className:`btn-sm`,onClick:B,disabled:e.running,title:`Run it once now, to try it. Its next scheduled run stays as it is.`,children:[s(l,{size:11}),` `,e.running?`Running…`:`Run now`]}),s(`button`,{className:`btn-sm`,onClick:z,title:e.status===`active`?`Pause`:`Resume`,children:e.status===`active`?i(a.Fragment,{children:[s(m,{size:11}),` Pause`]}):i(a.Fragment,{children:[s(b,{size:11}),` Resume`]})}),i(`button`,{className:`btn-sm danger`,onClick:V,title:`Delete`,children:[s(p,{size:11}),` `,A?`Confirm?`:`Delete`]})]}),k&&i(`div`,{className:`schedule-results`,children:[s(`h4`,{children:`Execution history`}),v?s(`p`,{className:`schedule-results-empty`,children:`Loading...`}):_.length===0?s(`p`,{className:`schedule-results-empty`,children:`No executions yet`}):s(`div`,{className:`schedule-results-list`,children:_.map(e=>i(`div`,{className:`schedule-result-item`,children:[s(`div`,{className:`schedule-result-time`,children:C(e.executed_at)}),e.error?s(`div`,{className:`schedule-result-content schedule-result-error`,children:e.error}):s(`div`,{className:`schedule-result-content`,children:e.result||`(no output)`})]},e.id))})]})]})}function A(){let{setShowSchedules:e}=o(),{schedules:t,loading:r,error:c,actionError:l,loadSchedules:p,createSchedule:m,dismissActionError:y}=g(),b=(0,x.useCallback)(()=>e(!1),[e]);_(!0,b);let S=(0,x.useRef)(null);f(S,!0);let[C,w]=(0,x.useState)(!1),[T,A]=(0,x.useState)(``),[j,M]=(0,x.useState)(``),[N,P]=(0,x.useState)(``),[F,I]=(0,x.useState)(null),[L,R]=(0,x.useState)(!1),[z,B]=(0,x.useState)(!1),[V,H]=(0,x.useState)(null),U=(0,x.useId)(),W=`${U}-when`,G=`${U}-when-error`,K=`${U}-name`,q=`${U}-prompt`,J=!L&&F!==null&&!F.valid,Y=(0,x.useRef)(null);(0,x.useEffect)(()=>{if(!T.trim())I(null);else return Y.current&&clearTimeout(Y.current),Y.current=window.setTimeout(async()=>{R(!0);try{let e=await u(T);I(e)}catch{I(null)}finally{R(!1)}},400),()=>{Y.current&&clearTimeout(Y.current)}},[T]);let X=(0,x.useRef)(null);(0,x.useEffect)(()=>(n.ui.info(`Schedule Manager opened`),p(),X.current=window.setInterval(()=>p(),5e3),()=>{X.current&&clearInterval(X.current),y()}),[p,y]);let Z=T.trim()&&j.trim()&&N.trim()&&(F===null||F.valid),Q=(0,x.useCallback)(async()=>{if(Z){B(!0),H(null);try{await m(j.trim(),T.trim(),N.trim()),A(``),M(``),P(``),I(null),w(!1),n.ui.info(`Schedule "${j}" created`)}catch(e){let t=e instanceof Error?e.message:`Failed to create schedule`;H(t)}finally{B(!1)}}},[Z,j,T,N,m]);return s(`div`,{ref:S,className:`modal-overlay`,onClick:()=>e(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`Scheduled tasks`,children:i(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[i(`div`,{className:`modal-header`,children:[s(`h3`,{children:`Scheduled tasks`}),s(`button`,{className:`btn-icon`,onClick:()=>e(!1),"aria-label":`Close schedule manager`,children:s(v,{size:18})})]}),i(`div`,{className:`modal-body`,children:[s(`section`,{className:`schedule-section`,children:C?i(`div`,{className:`schedule-create-form`,children:[i(`div`,{className:`schedule-field`,children:[s(`label`,{className:`schedule-field-label`,htmlFor:W,children:`When to run`}),s(`textarea`,{id:W,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:T,onChange:e=>A(e.target.value),"aria-invalid":J,"aria-describedby":J?G:void 0,autoFocus:!0,rows:2})]}),(F||L)&&s(`div`,{className:`schedule-parsed-preview ${F?.valid?`valid`:`invalid`}`,"aria-live":`polite`,children:L?s(`span`,{className:`schedule-parsed-loading`,children:`Parsing...`}):F?i(a.Fragment,{children:[F.valid?s(`div`,{className:`schedule-parsed-description`,children:F.description}):i(`div`,{id:G,children:[s(`div`,{className:`schedule-parsed-description`,children:`GAIA didn't understand that schedule.`}),s(`div`,{className:`schedule-parsed-hint`,children:F.description})]}),F.valid&&F.next_run_at&&i(`div`,{className:`schedule-parsed-next`,children:[`Next run: `,new Date(F.next_run_at).toLocaleString()]}),F.valid&&i(`div`,{className:`schedule-parsed-details`,children:[F.time_of_day&&i(`span`,{className:`schedule-parsed-tag`,children:[s(d,{size:10}),` `,E(F.time_of_day)]}),F.start_hour!=null&&F.end_hour!=null&&i(`span`,{className:`schedule-parsed-tag`,children:[s(d,{size:10}),` `,D(F.start_hour),` - `,D(F.end_hour)]}),F.days_of_week&&s(`span`,{className:`schedule-parsed-tag`,children:O(F.days_of_week)})]})]}):null}),i(`div`,{className:`schedule-field`,children:[s(`label`,{className:`schedule-field-label`,htmlFor:K,children:`Name`}),s(`div`,{className:`schedule-form-row`,children:s(`input`,{id:K,type:`text`,placeholder:`Schedule name (e.g. daily-summary)`,value:j,onChange:e=>M(e.target.value),className:!j.trim()&&T.trim()?`schedule-field-missing`:``})})]}),i(`div`,{className:`schedule-field`,children:[s(`label`,{className:`schedule-field-label`,htmlFor:q,children:`Prompt`}),s(`textarea`,{id:q,className:`schedule-prompt-input ${!N.trim()&&T.trim()?`schedule-field-missing`:``}`,placeholder:`Prompt to execute on each run...`,value:N,onChange:e=>P(e.target.value)})]}),V&&s(`p`,{className:`schedule-form-error`,children:V}),i(`div`,{className:`schedule-create-actions`,children:[s(`button`,{className:`btn-secondary`,onClick:()=>{w(!1),H(null),I(null),A(``),M(``),P(``)},children:`Cancel`}),s(`button`,{className:`btn-primary`,onClick:Q,disabled:!Z||z,children:z?`Creating...`:`Create Schedule`})]})]}):i(`button`,{className:`btn-primary`,onClick:()=>w(!0),children:[s(h,{size:14}),` New schedule`]})}),i(`section`,{className:`schedule-section`,children:[s(`h4`,{children:`Active schedules`}),l&&i(`div`,{className:`schedule-action-error`,role:`alert`,children:[s(`span`,{children:l}),s(`button`,{className:`btn-icon`,onClick:y,"aria-label":`Dismiss error`,children:s(v,{size:14})})]}),r?s(`p`,{className:`schedule-empty`,children:`Loading schedules...`}):c?s(`p`,{className:`schedule-empty`,children:c}):t.length===0?s(`p`,{className:`schedule-empty`,children:`No scheduled tasks yet. Create one to get started.`}):s(`div`,{className:`schedule-list`,children:t.map(e=>s(k,{schedule:e},e.id))})]})]})]})})}export{A as ScheduleManager};
@@ -0,0 +1,4 @@
1
+ import{N as e,t}from"./apiBase-BMkGbdXt.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})}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(e){return V(`POST`,`/setup/vision-model`,{model_id:e})}async function re(e){return V(`GET`,`/setup/needs/${e}`)}async function ie(e){return V(`GET`,e==null?`/gpu-memory`:`/gpu-memory?setting_gb=${e}`)}async function ae(e){return V(`POST`,`/gpu-memory/apply`,{setting_gb:e,confirm:!0})}async function oe(){return V(`POST`,`/gpu-memory/revert`,{confirm:!0})}async function se(e){return V(`POST`,`/gpu-memory/pending`,{setting_gb:e})}async function ce(){return V(`DELETE`,`/gpu-memory/pending`)}async function le(){return V(`GET`,`/onboarding/start`)}async function ue(){return V(`POST`,`/setup/report`)}async function de(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 fe(){return V(`GET`,`/connectors`)}async function pe(e){return V(`GET`,`/connectors/${e}`)}async function me(e,t,n=[]){return V(`POST`,`/connectors/${e}/authorize`,{scopes:t,grant_agents:n},B)}async function he(e,t,n=[]){return V(`POST`,`/connectors/${e}/authorize-device`,{scopes:t,grant_agents:n},B)}async function ge(e,t){return V(`POST`,`/connectors/${e}/configure`,{config:t},B)}async function _e(e){await V(`DELETE`,`/connectors/${e}`,void 0,B)}async function ve(e){return V(`POST`,`/connectors/${e}/enable`,{},B)}async function ye(e){return V(`POST`,`/connectors/${e}/disable`,{},B)}async function be(){return V(`GET`,`/connectors/agent-mcps`)}async function _(e){return V(`GET`,`/connectors/${e}/grants`)}async function v(e,t,n){await V(`PUT`,`/connectors/${e}/grants/${encodeURIComponent(t)}`,{scopes:n},B)}async function y(e,t){await V(`DELETE`,`/connectors/${e}/grants/${encodeURIComponent(t)}`,void 0,B)}async function b(e){return V(`GET`,`/connectors/${e}/activations`)}async function x(e,t,n){return V(`PUT`,`/connectors/${e}/activations/${encodeURIComponent(t)}`,n?{scopes:n}:{},B)}async function S(e,t){await V(`DELETE`,`/connectors/${e}/activations/${encodeURIComponent(t)}`,void 0,B)}async function C(e){return V(`POST`,`/chat/cancel`,{session_id:e})}async function w(e,t){return V(`POST`,`/chat/followup`,{session_id:e,text:t})}async function T(e){return V(`GET`,`/chat/followup/${encodeURIComponent(e)}`)}async function E(e){return V(`GET`,`/chat/context/${encodeURIComponent(e)}`)}async function D(e){return V(`GET`,`/chat/performance/${encodeURIComponent(e)}`)}async function O(e,t,n){return V(`POST`,`/chat/retry-with`,{session_id:e,message_id:t,model:n})}async function k(e,t,n){return V(`POST`,`/chat/retry-with/choose`,{session_id:e,message_id:t,keep:n})}async function A(){return V(`GET`,`/chat/active`)}async function j(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 M(e,t,n){return V(`POST`,`/chat/user-input`,{session_id:e,request_id:t,value:n})}async function N(e){return V(`GET`,`/chat/permissions/${encodeURIComponent(e)}`)}async function xe(){return V(`GET`,`/chat/permissions`)}async function Se(e){return V(`PUT`,`/chat/permissions`,{mode:e})}async function Ce(e,t){return V(`PUT`,`/chat/permissions/${encodeURIComponent(e)}`,{mode:t})}async function we(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 Te(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 Ee(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 De(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 De(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`},Oe=/key|token|secret|password/i;function ke(e){return!e||typeof e!=`object`||Array.isArray(e)?e:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Oe.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:ke(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),Te(n),Ee(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 Ae(e){return V(`GET`,`/system/status`,void 0,void 0,e)}async function je(){return V(`POST`,`/system/warm-up`)}async function Me(){return V(`GET`,`/system/warm-up`)}async function Ne(){return V(`GET`,`/system/model-server`)}async function Pe(e){return V(`PUT`,`/system/model-server/backend`,{backend:e})}async function Fe(){return V(`GET`,`/settings`)}async function Ie(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 Le(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 Re(e,t=!1){return V(`POST`,`/system/download-model`,{model_name:e,force:t})}async function ze(){return V(`GET`,`/agents`)}async function Be(e){return V(`POST`,`/agents/install`,{id:e})}async function Ve(e){return V(`GET`,`/agents/${encodeURIComponent(e)}/install-status`)}async function He(){return V(`GET`,`/lemonade/target`)}async function Ue(){return V(`GET`,`/lemonade/detect`)}async function We(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 Ge(){return V(`GET`,`/providers`)}async function Ke(){return V(`GET`,`/providers/active`)}async function qe(e,t){return V(`POST`,`/providers/${encodeURIComponent(e)}/connect`,t)}var Je=2e3;async function Ye(e,t,n,r=()=>!1){for(;;)try{return await qe(e,t)}catch(e){if(!(e instanceof L)||e.httpStatus!==409||r())throw e;n(e.detail),await new Promise(e=>setTimeout(e,Je))}}async function Xe(e){return V(`DELETE`,`/providers/${encodeURIComponent(e)}/key`)}async function Ze(e){return V(`GET`,`/providers/${encodeURIComponent(e)}/models`)}async function Qe(e){return V(`GET`,`/providers/local/context?model=${encodeURIComponent(e)}`)}async function $e(e,t){return V(`PUT`,`/providers/local/context`,{model:e,ctx_size:t})}async function et(){return V(`GET`,`/providers/local/status`)}async function tt(e=!1){return V(`POST`,`/providers/local/restart`,{confirm:e})}async function nt(e){return V(`POST`,`/providers/select`,{model:e})}async function rt(e,t){return V(`POST`,`/providers/local/custom/check`,{url:e,quant:t||null})}async function it(e,t){return V(`POST`,`/providers/local/custom`,{url:e,quant:t||null})}async function at(e){return V(`DELETE`,`/providers/local/custom/${encodeURIComponent(e)}`)}async function ot(e){return V(`GET`,`/spending/prices/${encodeURIComponent(e)}`)}async function st(){return V(`GET`,`/spending`)}async function ct(e){return V(`PUT`,`/spending/limit`,{limit_usd:e})}async function lt(){return V(`POST`,`/spending/allow-month`)}async function ut(){return V(`GET`,`/skills`)}async function dt(){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 ft(e={}){return V(`POST`,`/sessions`,e)}async function pt(e,t){return V(`PUT`,`/sessions/${e}`,t)}async function mt(e){await V(`DELETE`,`/sessions/${e}`),s(r(e))}async function ht(e){return V(`GET`,`/sessions/${e}`)}async function gt(e,t){return V(`PUT`,`/sessions/${e}/pin`,{pinned:t})}async function _t(e,t,n){return V(`GET`,`/sessions/search?${new URLSearchParams({q:e,include_automated:String(t)})}`,void 0,void 0,n)}async function vt(e){return V(`POST`,`/sessions/${e}/read`)}async function yt(e){return V(`PATCH`,`/sessions/${e}/private`)}async function bt(e){let{total:t}=await V(`GET`,`/sessions/${e}/messages?limit=1&offset=0`);return t}async function xt(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 St(e){return V(`GET`,`/sessions/${e}/export?format=markdown`)}async function Ct(e,t){return V(`DELETE`,`/sessions/${e}/messages/${t}`)}async function wt(e,t){return V(`DELETE`,`/sessions/${e}/messages/${t}/and-below`)}var Tt=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 Et(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,kt);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 Dt=3e4,Ot=6e5,U=9e4,kt=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;constructor(e){super(`The connection to GAIA was cut: ${e instanceof Error?e.message:String(e)}`),this.cause=e,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 At(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 At(a,f?Ot:Dt)}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 Tt.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 jt(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))):(e.stream.error(`Run attach fetch error`,t),n.onError(t))}),r}async function Mt(){return V(`GET`,`/documents`)}async function Nt(e){return V(`POST`,`/documents/upload-path`,{filepath:e})}async function Pt(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 Ft(e){return V(`DELETE`,`/documents/${e}`)}async function It(e){return V(`GET`,`/documents/${e}/status`)}function Lt(e,t){let n=new URL(`${P}/documents/${encodeURIComponent(e)}/file`,window.location.href);return t&&(n.hash=`page=${t}`),n.href}async function Rt(e){return V(`POST`,`/documents/${e}/cancel`)}async function zt(e){return V(`POST`,`/documents/${e}/reindex`)}async function Bt(e,t){return V(`POST`,`/sessions/${e}/documents`,{document_id:t})}async function Vt(e,t){return V(`DELETE`,`/sessions/${e}/documents/${t}`)}async function Ht(e){return V(`GET`,`/files/browse${e?`?path=${encodeURIComponent(e)}`:``}`)}async function Ut(e,t=!0){return V(`POST`,`/documents/index-folder`,{folder_path:e,recursive:t})}async function Wt(e,t=!0){return V(`POST`,`/files/open`,{path:e,reveal:t})}async function Gt(e){return V(`POST`,`/files/open`,{path:e,launch:!0})}async function Kt(e){return V(`POST`,`/files/status`,{paths:e})}async function qt(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 Jt(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 Yt(e,t){let n=new URLSearchParams({path:e});return t&&n.set(`lines`,String(t)),V(`GET`,`/files/preview?${n}`)}async function Xt(){return V(`POST`,`/tunnel/start`)}async function Zt(){return V(`POST`,`/tunnel/stop`)}async function Qt(){return V(`GET`,`/tunnel/status`)}async function $t(){return V(`GET`,`/mcp/status`)}async function en(){return V(`GET`,`/schedules`)}function Z(){return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}async function tn(e,t,n){return V(`POST`,`/schedules`,{name:e,interval:t,prompt:n,timezone:Z()})}async function nn(e,t){return V(`PUT`,`/schedules/${encodeURIComponent(e)}`,{status:t})}async function rn(e){return V(`POST`,`/schedules/${encodeURIComponent(e)}/run`)}async function an(e){return V(`DELETE`,`/schedules/${encodeURIComponent(e)}`)}async function on(e,t=20){return V(`GET`,`/schedules/${encodeURIComponent(e)}/results?limit=${t}`)}async function sn(e){return V(`POST`,`/schedules/parse`,{input:e,timezone:Z()})}async function cn(e){return V(`GET`,`/sessions/${encodeURIComponent(e)}/changes`)}async function ln(e,t){return V(`GET`,`/sessions/${encodeURIComponent(e)}/changes/${encodeURIComponent(t)}/diff`)}async function Q(e,t,n=!1){return V(`POST`,`/sessions/${encodeURIComponent(e)}/changes/${encodeURIComponent(t)}/undo`,{force:n})}async function un(){return V(`GET`,`/settings/undo`)}async function dn(e,t){return V(`PUT`,`/settings/undo`,{retention_days:e,max_mb:t})}var $=e=>`/sessions/${encodeURIComponent(e)}`;async function fn(e){return V(`GET`,`${$(e)}/environment`)}async function pn(e,t){return V(`POST`,`${$(e)}/environment/folders`,{path:t})}async function mn(e,t){return V(`POST`,`${$(e)}/environment/folders/remove`,{path:t})}async function hn(e,t){return V(`PUT`,`${$(e)}/environment/internet`,{on:t})}async function gn(e){return V(`GET`,`${$(e)}/outputs`)}async function _n(e){return V(`GET`,`${$(e)}/capabilities`)}async function vn(e){return V(`GET`,`${$(e)}/changes/total`)}async function yn(e,t=!1){return V(`POST`,`${$(e)}/changes/undo`,{force:t})}async function bn(e){return V(`GET`,`${$(e)}/changes/git`)}async function xn(e,t,n){return V(`POST`,`${$(e)}/changes/git/commit`,{root:t,message:n,confirmed:!0})}async function Sn(e,t,n,r){return V(`POST`,`${$(e)}/changes/git/pr`,{root:t,title:n,body:r,confirmed:!0})}export{Me as $,xe as $t,_n as A,ie as An,We as At,xt as B,p as Bn,Ie as Bt,Ue as C,u as Cn,rn as Ct,Xe as D,ce as Dn,Et as Dt,St as E,ue as En,nt as Et,Kt as F,le as Fn,yt as Ft,vn as G,a as Gn,C as Gt,gn as H,i as Hn,Pt as Ht,He as I,se as In,yn as It,st as J,A as Jt,bn as K,o as Kn,k as Kt,et as L,h as Ln,Q as Lt,Qe as M,l as Mn,ct as Mt,It as N,ee as Nn,Xt as Nt,Ke as O,m as On,$e as Ot,fn as P,g as Pn,Zt as Pt,un as Q,N as Qt,$t as R,oe as Rn,nn as Rt,Vt as S,f as Sn,tt as St,Re as T,ne as Tn,_t as Tt,on as U,r as Un,Nt as Ut,Ne as V,d as Vn,dn as Vt,ht as W,s as Wn,qt as Wt,Qt as X,E as Xt,Ae as Y,D as Yt,ln as Z,T as Zt,Ft as _,b as _n,Yt as _t,pn as a,Ce as an,Ge as at,an as b,y as bn,mn as bt,jt as c,he as cn,ut as ct,rt as d,ye as dn,vt as dt,M as en,Ut as et,xn as f,_e as fn,Gt as ft,ft as g,be as gn,gt,tn as h,v as hn,sn as ht,it as i,Se as in,Ze as it,ot as j,re as jn,Pe as jt,Ve as k,de as kn,hn as kt,Ht as l,ge as ln,cn as lt,Sn as m,pe as mn,F as mt,W as n,we as nn,ze as nt,lt as o,x as on,en as ot,Ye as p,ve as pn,Wt as pt,Fe as q,j as qt,J as r,w as rn,Mt as rt,Bt as s,me as sn,dt as st,L as t,O as tn,Be as tt,Rt as u,S as un,Le as ut,Ct as v,_ as vn,zt as vt,Lt as w,te as wn,Jt as wt,mt as x,ae as xn,je as xt,wt as y,fe as yn,at as yt,bt as z,c as zn,pt as zt};