@amd-gaia/agent-ui 0.25.4-rc.9 → 0.25.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.
- package/dist/assets/AdvancedSettings-Dkjf4LIp.js +1 -0
- package/dist/assets/ConnectorsPane-CIV89VVI.js +1 -0
- package/dist/assets/{DocumentLibrary-D3FbBLgb.js → DocumentLibrary-2IMvlsjP.js} +2 -2
- package/dist/assets/{FileBrowser-DoZvZBAZ.js → FileBrowser-DMnjs5do.js} +4 -4
- package/dist/assets/MemoryDashboard-BAqXtg9o.js +1 -0
- package/dist/assets/MobileAccessModal-CrtIKCP3.js +2 -0
- package/dist/assets/ScheduleManager-D_KcT6nO.js +1 -0
- package/dist/assets/api-D5mTAXjB.js +4 -0
- package/dist/assets/index-B7tI0eKR.css +1 -0
- package/dist/assets/index-CsgZhHsw.js +80 -0
- package/dist/assets/useT-CtECS-vp.js +3 -0
- package/dist/assets/{zap-nquO2dVq.js → zap-FkXztfRB.js} +1 -1
- package/dist/index.html +4 -4
- package/dist/sw.js +1 -1
- package/main.cjs +126 -20
- package/package.json +1 -1
- package/preload.cjs +8 -0
- package/services/auto-updater.cjs +26 -3
- package/services/backend-supervisor.cjs +150 -0
- package/services/port-manager.cjs +3 -0
- package/services/quit-guard.cjs +9 -0
- package/services/tray-host.cjs +84 -0
- package/services/tray-manager.cjs +33 -7
- package/dist/assets/AdvancedSettings-Pil1Flfe.js +0 -1
- package/dist/assets/ConnectorsPane-D3tAB0fM.js +0 -1
- package/dist/assets/MemoryDashboard-BVs69AmP.js +0 -1
- package/dist/assets/MobileAccessModal-bBzOCo4o.js +0 -2
- package/dist/assets/ScheduleManager-BN8h4kt3.js +0 -1
- package/dist/assets/api-CiSwuQUq.js +0 -4
- package/dist/assets/index-B2qlJogW.css +0 -1
- package/dist/assets/index-DL8_h-hw.js +0 -78
- package/dist/assets/useT-BTgbCEQm.js +0 -3
|
@@ -200,6 +200,9 @@ class TrayManager {
|
|
|
200
200
|
|
|
201
201
|
this._iconSpec = ICON_SPECS[process.platform] || ICON_SPECS.linux;
|
|
202
202
|
|
|
203
|
+
/** Whether the desktop shows tray icons; on Linux unknown (null) until setHost(). */
|
|
204
|
+
this._host = process.platform === "linux" ? null : { available: true, reason: null };
|
|
205
|
+
|
|
203
206
|
/** @type {Map<string, Electron.NativeImage>} One image per tray state, built on first use. */
|
|
204
207
|
this._icons = new Map();
|
|
205
208
|
|
|
@@ -330,14 +333,37 @@ class TrayManager {
|
|
|
330
333
|
return this._notificationCount || 0;
|
|
331
334
|
}
|
|
332
335
|
|
|
333
|
-
/** @returns {boolean} Whether
|
|
336
|
+
/** @returns {boolean} Whether closing hides the window: switched on, and a tray to find it in. */
|
|
334
337
|
get minimizeToTray() {
|
|
335
|
-
return this.config.tray.minimizeToTray;
|
|
338
|
+
return this.config.tray.minimizeToTray && this.trayHost.available;
|
|
336
339
|
}
|
|
337
340
|
|
|
338
|
-
/** @returns {boolean} Whether app should start minimized. */
|
|
341
|
+
/** @returns {boolean} Whether app should start minimized, which also needs a tray. */
|
|
339
342
|
get startMinimized() {
|
|
340
|
-
return this.config.tray.startMinimized;
|
|
343
|
+
return this.config.tray.startMinimized && this.trayHost.available;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/** @returns {{available: boolean, reason: null | "checking" | "no-host" | "check-failed"}} */
|
|
347
|
+
get trayHost() {
|
|
348
|
+
return this._host || { available: false, reason: "checking" };
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/** Record what tray-host.cjs found; until then a Linux window is never hidden. */
|
|
352
|
+
setHost(host) {
|
|
353
|
+
if (!isPlainObject(host) || typeof host.available !== "boolean") {
|
|
354
|
+
throw new TypeError("TrayManager.setHost expects {available: boolean, reason}");
|
|
355
|
+
}
|
|
356
|
+
this._host = { available: host.available, reason: host.available ? null : host.reason };
|
|
357
|
+
if (!host.available) {
|
|
358
|
+
console.log(
|
|
359
|
+
`[tray] No tray icon host (${host.reason}: ${host.detail || "no detail"}); closing the window quits GAIA`
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** The saved config plus the tray host, which Settings needs and nothing saves. */
|
|
365
|
+
_configReply() {
|
|
366
|
+
return { ...this.config, host: this.trayHost };
|
|
341
367
|
}
|
|
342
368
|
|
|
343
369
|
/** @returns {boolean} Whether app should start on login. */
|
|
@@ -722,7 +748,7 @@ class TrayManager {
|
|
|
722
748
|
});
|
|
723
749
|
|
|
724
750
|
ipcMain.handle("tray:get-config", () => {
|
|
725
|
-
return this.
|
|
751
|
+
return this._configReply();
|
|
726
752
|
});
|
|
727
753
|
|
|
728
754
|
ipcMain.handle("tray:set-config", (_event, cfg) => {
|
|
@@ -750,7 +776,7 @@ class TrayManager {
|
|
|
750
776
|
}
|
|
751
777
|
|
|
752
778
|
if (tray === null && agents === null) {
|
|
753
|
-
return this.
|
|
779
|
+
return this._configReply();
|
|
754
780
|
}
|
|
755
781
|
const loginChanged =
|
|
756
782
|
tray !== null && tray.startOnLogin !== this.config.tray.startOnLogin;
|
|
@@ -774,7 +800,7 @@ class TrayManager {
|
|
|
774
800
|
}
|
|
775
801
|
this.config = next;
|
|
776
802
|
|
|
777
|
-
return this.
|
|
803
|
+
return this._configReply();
|
|
778
804
|
});
|
|
779
805
|
}
|
|
780
806
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,a as n,c as r,d as i,l as a,q as o,s}from"./useT-BTgbCEQm.js";import{At as c,Bt as l,I as u,R as d,V as f,Y as p,jt as m,q as h,ut as g}from"./api-CiSwuQUq.js";import{Ft as _,Lt as v,Vt as y,Z as b,a as x,c as S,d as C,et as w,f as T,l as E,o as D,r as O,s as k,vt as A}from"./index-DL8_h-hw.js";var j=e(o(),1);function M(){let e=n(),[t,i]=(0,j.useState)(null),[o,l]=(0,j.useState)(null),[d,f]=(0,j.useState)(``),[p,m]=(0,j.useState)(``),[h,g]=(0,j.useState)(!1),[_,y]=(0,j.useState)(null),[b,x]=(0,j.useState)(!1);(0,j.useEffect)(()=>{u().then(e=>{i(e),f(e.saved_base_url??e.base_url??``)}).catch(e=>l(e instanceof Error?e.message:String(e)))},[]);let S=(0,j.useCallback)(async e=>{g(!0),y(null);try{let t=await c(e);i(t),m(``),x(!1)}catch(e){x(C(e)),y(e instanceof Error?e.message:String(e))}finally{g(!1)}},[]),w=()=>void S({mode:`external`,base_url:d.trim(),api_key:p.trim()||void 0});if(o)return a(`section`,{className:`settings-section`,children:[r(`h4`,{children:e(`settings.advanced.modelServer`)}),a(`div`,{className:`model-warning`,role:`alert`,children:[r(v,{size:14}),a(`div`,{className:`model-warning-content`,children:[r(`strong`,{children:e(`settings.server.readFailed`)}),r(`p`,{children:o})]})]})]});if(!t)return null;let T=t.mode===`external`;return a(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[r(`h4`,{children:e(`settings.advanced.modelServer`)}),r(`p`,{className:`model-override-desc`,role:`status`,children:t.source===`env`?e(`settings.server.usesEnv`,{url:t.base_url??``}):T?e(`settings.server.usesYours`,{url:t.base_url??``}):e(`settings.server.usesOwn`)}),t.source===`env`?r(`p`,{className:`model-status-hint`,children:e(`settings.server.unsetEnv`)}):a(s.Fragment,{children:[a(`p`,{className:`model-status-hint`,children:[e(`settings.server.useYours`),` `,r(`bdi`,{children:t.what_gaia_does})]}),a(`form`,{className:`model-input-row`,onSubmit:e=>{e.preventDefault(),w()},children:[r(`input`,{type:`text`,className:`model-input`,placeholder:`http://localhost:13305`,value:d,onChange:e=>{f(e.target.value),y(null)},disabled:h,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-label":e(`settings.server.address`)}),r(`input`,{type:`password`,className:`model-input`,autoComplete:`off`,placeholder:t.api_key_stored?e.bare(`settings.server.keySaved`):e.bare(`settings.server.keyOptional`),value:p,onChange:e=>m(e.target.value),disabled:h,"aria-label":e(`settings.server.key`)}),r(`div`,{className:`model-btn-group`,children:r(`button`,{type:`submit`,className:`btn-model-save`,disabled:h||!d.trim(),children:h?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.server.checking`)]}):e(`settings.server.use`)})})]}),T&&r(`div`,{className:`setting-actions`,children:r(`button`,{type:`button`,className:`btn-secondary`,disabled:h,onClick:()=>void S({mode:`gaia`}),children:e(`settings.server.useOwn`)})}),_&&a(`div`,{className:`model-warning`,role:`alert`,children:[r(v,{size:14}),a(`div`,{className:`model-warning-content`,children:[r(`strong`,{children:e(b?`settings.server.needsKey`:`settings.server.notSwitched`)}),r(`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 a(`div`,{className:`status-row`,children:[r(`span`,{className:`status-label`,children:e}),r(`span`,{className:`status-value model-server-value`,dir:`auto`,title:n??t,children:t})]})}function ee(){let e=n(),t=i(e=>e.openSettings),[o,c]=(0,j.useState)(null),[l,u]=(0,j.useState)(null),[d,p]=(0,j.useState)(null),[h,_]=(0,j.useState)(null),[v,y]=(0,j.useState)(!1);(0,j.useEffect)(()=>{f().then(c).catch(e=>u(e instanceof Error?e.message:String(e)))},[]);let b=(0,j.useCallback)(async t=>{p(t),_(null);try{let n=await m(t);c(n),_({ok:!0,text:e(`settings.server.savedBackend`)})}catch(e){_({ok:!1,text:e instanceof Error?e.message:String(e)})}finally{p(null)}},[e]),S=o?.chat_model??null,C=(0,j.useCallback)(async()=>{if(S?.name){y(!0);try{if(!await g(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=r(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>t(`model`),children:e(`settings.server.changeModel`)});if(l)return a(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[r(`h4`,{children:e(`settings.advanced.modelServer`)}),r(x,{message:l})]});if(!o)return a(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[r(`h4`,{children:e(`settings.advanced.modelServer`)}),r(`p`,{className:`loading-text`,children:e(`settings.server.checkingServer`)})]});if(!o.reachable)return a(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[r(`h4`,{children:e(`settings.advanced.modelServer`)}),r(x,{message:o.error??e(`settings.errors.serverDownTitle`)}),T]});let E=o.available_backends??[],D=o.preferred_backend??null,O=E.map(e=>e.name);D&&!O.includes(D)&&O.push(D);let k=D??o.default_backend??null,M=E.filter(e=>e.state===`installable`).map(e=>F(e.name)),N=!!S?.name&&S.recipe===`llamacpp`;return a(`section`,{className:`settings-section`,"aria-label":e(`settings.advanced.modelServer`),children:[r(`h4`,{children:e(`settings.advanced.modelServer`)}),a(`div`,{className:`status-grid`,children:[r(V,{label:e(`settings.server.server`),value:`${P[o.owner]?e(P[o.owner]):o.owner}${o.version?` v${o.version}`:``}`}),r(V,{label:e(`settings.server.addressShort`),value:o.base_url}),r(V,{label:e(`settings.server.chatModel`),value:S?.name?w(S.name):e(`settings.advanced.noneLoaded`),title:S?.name??void 0}),S&&r(V,{label:e(`settings.server.runsOn`),value:I(S)}),S&&S.backend!==`remote`&&r(V,{label:e(`settings.advanced.context`),value:L(S.ctx_size)}),r(V,{label:e(`settings.advanced.embedding`),value:o.embedding_model?.name?`${o.embedding_model.name} · ${I(o.embedding_model)}`:e(`settings.advanced.noneLoaded`)}),(o.loaded_models??[]).map((t,n)=>r(V,{label:z(t,e),value:B(t,e),title:t.name??void 0},`${t.name??`unknown`}-${n}`))]}),o.embedding_note&&r(`p`,{className:`settings-hint`,children:r(`bdi`,{children:o.embedding_note})}),o.system_info_error&&r(`p`,{className:`settings-hint`,children:r(`bdi`,{children:o.system_info_error})}),a(`div`,{className:`settings-field model-server-backend`,children:[r(`span`,{className:`settings-label`,children:e(`settings.server.backend`)}),E.length===0&&!D?r(`span`,{className:`settings-hint`,children:e(`settings.server.noBackends`)}):a(s.Fragment,{children:[r(`div`,{className:`segmented`,role:`radiogroup`,"aria-label":e(`settings.server.backendShort`),children:O.map(e=>a(`button`,{type:`button`,role:`radio`,"aria-checked":k===e,className:k===e?`is-active`:``,disabled:d!==null,onClick:()=>{e!==k&&b(e)},children:[d===e?r(A,{size:12,className:`spin`}):null,F(e)]},e))}),a(`span`,{className:`settings-hint`,children:[e(`settings.server.backendHint`),M.length>0&&` ${e(`settings.server.installable`,{names:M.join(`, `)})}`]})]}),h?.ok&&r(`p`,{className:`settings-ok`,role:`status`,children:h.text}),h&&!h.ok&&r(x,{message:h.text})]}),a(`div`,{className:`settings-row`,children:[T,N&&a(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>void C(),disabled:v,children:[v?r(A,{size:13,className:`spin`}):null,e(`settings.server.reload`)]})]})]})}function H(){let e=n(),[i,o]=(0,j.useState)(null),[c,u]=(0,j.useState)(!0),[f,m]=(0,j.useState)([]),[g,C]=(0,j.useState)(``),[w,N]=(0,j.useState)(``),[P,F]=(0,j.useState)(!1),[I,L]=(0,j.useState)(!1),[R,z]=(0,j.useState)(null),[B,V]=(0,j.useState)(!1),H=(0,j.useRef)(null),[G,K]=(0,j.useState)(!1),[q,te]=(0,j.useState)(!1),[J,ne]=(0,j.useState)(!1),[re,ie]=(0,j.useState)(null);(0,j.useEffect)(()=>{t.system.info(`Checking system status...`);let e=t.system.time();p().then(n=>{o(n),t.system.timed(`System status received`,e,{lemonade:n.lemonade_running?`running`:`stopped`,model:n.model_loaded||`none`,embedding:n.embedding_model_loaded?`yes`:`no`,disk:`${n.disk_space_gb}GB free`,memory:n.memory_available_gb==null?`unknown`:`${n.memory_available_gb}GB available`}),n.lemonade_running||t.system.warn(`Lemonade Server is NOT running.`)}).catch(e=>{t.system.error(`Failed to get system status`,e),o(null)}).finally(()=>u(!1)),d().then(e=>m(e.servers)).catch(()=>{}),h().then(e=>{let t=e.custom_model??``;C(t),N(t),K(e.dynamic_tools),te(e.dynamic_tools_locked)}).catch(e=>{t.system.error(`Failed to load settings`,e)}).finally(()=>F(!0))},[]),(0,j.useEffect)(()=>()=>{H.current&&clearTimeout(H.current)},[]);let ae=(0,j.useCallback)(async()=>{let e=g.trim(),n=e.length>0?e:``;L(!0),z(null),V(!1);try{t.system.info(`Saving custom_model override`,{custom_model:n});let e=(await l({custom_model:n})).custom_model??``;C(e),N(e),V(!0),H.current&&clearTimeout(H.current),H.current=setTimeout(()=>V(!1),2200)}catch(e){let n=e instanceof Error?e.message:String(e);t.system.error(`Failed to save custom_model`,e),z(n)}finally{L(!1)}},[g]),oe=(0,j.useCallback)(async()=>{if(q||J)return;let e=G,n=!e;K(n),ne(!0),ie(null);try{t.system.info(`Saving dynamic_tools setting`,{dynamic_tools:n});let e=await l({dynamic_tools:n});K(e.dynamic_tools),te(e.dynamic_tools_locked)}catch(n){let r=n instanceof Error?n.message:String(n);t.system.error(`Failed to save dynamic_tools`,n),K(e),ie(r)}finally{ne(!1)}},[G,q,J]),se=g.trim()!==w.trim(),Y=i?i.default_model_name:b,{isLoadingModel:ce,isDownloadingModel:X,downloadError:Z,loadModel:le,downloadModel:ue}=O(Y??void 0),Q=!!i?.default_model_is_cloud,de=!Q&&!!(i?.lemonade_running&&i.model_loaded&&i.expected_model_loaded===!1),fe=!Q&&!!(i?.lemonade_running&&i.model_loaded&&i.context_size_sufficient===!1),$=!Q&&!(!i?.lemonade_running||i.model_loaded||i.model_downloaded!==!1),pe=(de||fe)&&Y!==null,me=f.some(e=>!e.connected);return a(`div`,{className:`settings-pane`,children:[r(`h2`,{className:`settings-pane-title`,children:e(`settings.section.advanced`)}),r(`section`,{className:`settings-card`,"aria-label":e(`settings.advanced.status`),children:c?r(`p`,{className:`loading-text`,children:e(`settings.advanced.checking`)}):i?a(s.Fragment,{children:[a(`div`,{className:`status-grid`,children:[r(W,{label:e(`settings.advanced.modelServer`),value:i.lemonade_running?i.lemonade_version?e(`settings.advanced.runningAt`,{version:i.lemonade_version}):e(`settings.advanced.running`):S(i)?e(`settings.advanced.notInstalled`):i.lemonade_error?e(`settings.advanced.unavailable`):e(`settings.advanced.notRunning`),ok:i.lemonade_running,hint:i.lemonade_running?void 0:S(i)?e(`settings.advanced.notInstalledHint`):i.lemonade_error?e(`settings.advanced.queryFailed`,{reason:i.lemonade_error}):i.start_instruction&&!k(i.start_instruction)?i.start_instruction:e(`settings.advanced.notRunningHint`)}),S(i)&&r(D,{className:`btn-primary`}),r(W,{label:e(`settings.section.model`),value:i.model_loaded||e(`settings.advanced.noneLoaded`),ok:!!i.model_loaded&&(Q||i.expected_model_loaded!==!1),hint:i.model_loaded?!Q&&i.expected_model_loaded===!1?e(`settings.advanced.expected`,{name:Y??``}):void 0:e(`settings.advanced.loadsFirst`)}),r(W,{label:e(`settings.advanced.disk`),value:a(`bdi`,{dir:`ltr`,children:[i.disk_space_gb,` GB`]}),ok:i.disk_space_gb>5,hint:!i.model_loaded&&i.disk_space_gb<30?e(`settings.advanced.diskLow`,{need:`6 GB`,size:`${i.disk_space_gb} GB`}):void 0})]}),$&&a(`div`,{className:`model-action-row model-action-row--download`,children:[a(`div`,{className:`model-action-info`,children:[r(`span`,{className:`model-action-label`,children:e(`settings.advanced.notDownloaded`)}),r(`span`,{className:`model-action-desc`,children:e(`settings.advanced.notDownloadedHint`,{name:Y??``,need:`6 GB`})})]}),r(`button`,{className:`btn-model-action btn-model-action--download`,onClick:()=>ue(!1),disabled:X,children:X?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.model.download`)})]}),$&&Z&&r(x,{message:Z}),pe&&a(`div`,{className:`model-action-row model-action-row--load`,children:[a(`div`,{className:`model-action-info`,children:[r(`span`,{className:`model-action-label`,children:e(de?`settings.advanced.wrongModel`:`settings.advanced.smallContext`)}),r(`span`,{className:`model-action-desc`,children:e(`settings.advanced.loadHint`,{name:Y??``,size:`${32 .toFixed(0)}K`})})]}),r(`button`,{className:`btn-model-action btn-model-action--load`,onClick:()=>le(),disabled:ce,children:ce?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.advanced.loading`)]}):e(`settings.advanced.load`)})]}),a(`details`,{className:`settings-more`,children:[a(`summary`,{children:[r(y,{size:13,className:`settings-disclosure-chevron`,"aria-hidden":`true`}),` `,e(`settings.advanced.details`)]}),a(`div`,{className:`status-grid`,children:[i.model_size_gb!=null&&r(W,{label:e(`settings.advanced.modelSize`),value:a(`bdi`,{dir:`ltr`,children:[i.model_size_gb,` GB`]}),ok:!0}),i.model_device&&!Q&&r(W,{label:e(`settings.advanced.device`),value:i.model_device.toUpperCase(),ok:i.model_device!==`cpu`}),i.model_context_size!=null&&r(W,{label:e(`settings.advanced.context`),value:e(`settings.ctx.tokens`,{size:`${(i.model_context_size/1024).toFixed(0)}K`}),ok:i.context_size_sufficient}),i.model_labels&&i.model_labels.length>0&&r(W,{label:e(`settings.advanced.capabilities`),value:i.model_labels.join(`, `),ok:!0}),r(W,{label:e(`settings.advanced.embedding`),value:i.embedding_model_loaded?e(`settings.advanced.available`):e(`settings.advanced.notLoaded`),ok:i.embedding_model_loaded}),i.gpu_name&&r(W,{label:`GPU`,value:r(`bdi`,{children:`${i.gpu_name}${i.gpu_vram_gb?` (${T(i.gpu_vram_gb)})`:``}`}),ok:!0}),r(W,{label:e(`settings.advanced.memory`),value:i.memory_available_gb==null?e(`settings.advanced.unknown`):a(`bdi`,{dir:`ltr`,children:[i.memory_available_gb,` GB`]}),ok:i.memory_available_gb!=null&&i.memory_available_gb>2}),i.processor_name&&r(W,{label:e(`settings.advanced.processor`),value:r(`bdi`,{children:i.processor_name}),ok:!0})]}),i.lemonade_running&&Y!==null&&!Q&&a(`div`,{className:`force-redownload-row`,children:[r(`span`,{className:`force-redownload-label`,children:e(`settings.advanced.corrupted`)}),r(`button`,{className:`btn-force-redownload`,onClick:()=>ue(!0),disabled:X,children:X?a(s.Fragment,{children:[r(A,{size:12,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.advanced.redownload`)})]}),!$&&Z&&r(x,{message:Z})]})]}):r(`div`,{className:`status-error`,children:r(`p`,{children:e(`settings.advanced.unreachable`)})})}),a(E,{title:e(`settings.advanced.serverTitle`),hint:e(`settings.advanced.serverHint`),children:[r(ee,{}),r(M,{})]}),a(E,{title:e(`settings.advanced.customTitle`),hint:w||e(`settings.advanced.customHint`),children:[r(`p`,{className:`model-override-desc`,children:e(`settings.advanced.customDesc`)}),a(`div`,{className:`model-input-row`,children:[r(`input`,{type:`text`,className:`model-input${w?` has-override`:``}`,placeholder:e.bare(`settings.advanced.customPlaceholder`),value:g,onChange:e=>{C(e.target.value),z(null),V(!1)},onKeyDown:e=>{e.key===`Enter`&&!I&&se&&P&&(e.preventDefault(),ae())},disabled:!P||I,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-label":e(`settings.advanced.customAria`)}),r(`div`,{className:`model-btn-group`,children:r(`button`,{className:`btn-model-save${B?` saved`:``}`,onClick:()=>{ae()},disabled:!P||I||!se&&!B,"aria-label":e(`settings.advanced.customSave`),children:I?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.models.applying`)]}):B?a(s.Fragment,{children:[r(_,{size:13}),` `,e(`settings.advanced.saved`)]}):e(`settings.advanced.save`)})})]}),r(`p`,{className:`model-status-hint`,children:e(`settings.advanced.customIds`)}),R&&r(U,{message:R})]}),a(E,{title:e(`settings.advanced.dynamicTitle`),children:[r(`p`,{className:`model-override-desc`,children:e(`settings.advanced.dynamicDesc`)}),a(`label`,{className:`setting-row`,children:[r(`span`,{children:e(`settings.advanced.dynamicEnable`)}),a(`span`,{className:`toggle-switch`,children:[r(`input`,{type:`checkbox`,checked:G,onChange:()=>void oe(),disabled:!P||J||q,"aria-label":e(G?`settings.advanced.dynamicOff`:`settings.advanced.dynamicOn`)}),r(`span`,{className:`toggle-track`})]})]}),q&&r(`p`,{className:`model-status-hint`,children:e(`settings.advanced.dynamicLocked`)}),re&&r(U,{message:re})]}),f.length>0&&r(E,{title:e(`settings.advanced.mcp`),count:f.length,defaultOpen:me,children:r(`div`,{className:`status-grid`,children:f.map(t=>a(`div`,{className:`status-row`,children:[r(`bdi`,{className:`status-label`,children:t.name}),r(`div`,{className:`status-value-wrap`,children:t.connected?a(`span`,{className:`status-value ok mcp-status-connected`,children:[r(_,{size:12}),e.plural(`settings.advanced.tools`,t.tool_count)]}):a(`span`,{className:`status-value warn mcp-status-failed`,title:t.error??void 0,children:[r(v,{size:12}),e(`settings.custom.failed`)]})})]},t.name))})}),a(`div`,{className:`about-info`,children:[a(`p`,{children:[a(`bdi`,{dir:`ltr`,children:[`GAIA v`,`0.25.4rc9`]}),` `,r(`span`,{className:`beta-badge`,children:`BETA`})]}),r(`p`,{className:`about-sub`,children:e(`settings.advanced.about`)})]})]})}function U({message:e}){let t=n();return a(`div`,{className:`model-warning`,role:`alert`,children:[r(v,{size:14}),a(`div`,{className:`model-warning-content`,children:[r(`strong`,{children:t(`settings.advanced.saveFailed`)}),r(`p`,{children:e})]})]})}function W({label:e,value:t,ok:n,hint:i}){return a(`div`,{className:`status-row${i?` status-row--has-hint`:``}`,children:[r(`span`,{className:`status-label`,children:e}),a(`div`,{className:`status-value-wrap`,children:[r(`span`,{className:`status-value ${n?`ok`:`warn`}`,children:t}),i&&r(`span`,{className:`status-hint`,children:i})]})]})}export{H as AdvancedSettings};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,a as n,c as r,d as i,l as a,o,q as s,s as c}from"./useT-BTgbCEQm.js";import{_n as l,bn as u,cn as d,dn as f,fn as p,gn as m,hn as h,ln as g,mn as _,on as v,pn as y,sn as b,un as x,vn as S,yn as C}from"./api-CiSwuQUq.js";import{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-DL8_h-hw.js";var N=e(s(),1),P=t.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=`${o()}/connectors/events`,n=null,r=1e3,i=null,a=!1,s=()=>{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(s,r),r=Math.min(r*2,3e4))})};return s(),()=>{a=!0,i&&clearTimeout(i),n?.close()}},[])}function L(e){return e.type===`mcp_server`&&e.configured}function R({connector:e,onChanged:t}){let i=n(),[o,s]=(0,N.useState)(!1),[c,l]=(0,N.useState)(!1),[u,d]=(0,N.useState)(null),[m,h]=(0,N.useState)(null),g=(0,N.useRef)(null),_=(0,N.useRef)(null);(0,N.useEffect)(()=>{if(!o)return;let e=e=>{let t=e.target;g.current&&!g.current.contains(t)&&_.current&&!_.current.contains(t)&&s(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[o]);let v=(0,N.useCallback)(()=>s(!1),[]);if(j(o,v),(0,N.useEffect)(()=>{if(!o)return;let e=()=>{if(!g.current)return;let e=g.current.getBoundingClientRect();h({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)}},[o]),!L(e))return null;let b=e=>{e.stopPropagation(),e.preventDefault()},x=e=>{if(b(e),!o&&g.current){let e=g.current.getBoundingClientRect();h({top:e.bottom+4,right:window.innerWidth-e.right})}s(e=>!e)},S=async e=>{l(!0),d(null);try{await e(),s(!1),t()}catch(e){d(e instanceof Error?e.message:String(e))}finally{l(!1)}};return a(`div`,{className:`connector-tile-menu`,onClick:b,onKeyDown:b,children:[r(`button`,{ref:g,type:`button`,className:`connector-tile-menu-trigger`,"aria-haspopup":`menu`,"aria-expanded":o,"aria-label":i(`settings.connectors.actions`),onClick:x,disabled:c,children:r(D,{size:14})}),o&&m&&a(`div`,{ref:_,role:`menu`,className:`connector-tile-menu-popup`,style:{position:`fixed`,top:m.top,right:m.right},children:[e.enabled?r(`button`,{role:`menuitem`,type:`button`,className:`connector-tile-menu-item`,onClick:()=>void S(()=>f(e.id)),disabled:c,children:i(`settings.connectors.disable`)}):r(`button`,{role:`menuitem`,type:`button`,className:`connector-tile-menu-item`,onClick:()=>void S(()=>y(e.id)),disabled:c,children:i(`settings.connectors.enable`)}),r(`div`,{className:`connector-tile-menu-divider`}),r(`button`,{role:`menuitem`,type:`button`,className:`connector-tile-menu-item connector-tile-menu-item--danger`,onClick:()=>void S(()=>p(e.id)),disabled:c,children:i(`settings.connectors.disconnect`)}),u&&r(`div`,{className:`connector-tile-menu-error`,children:u})]})]})}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=n(),[t,i]=(0,N.useState)([]),[o,s]=(0,N.useState)([]),[l,u]=(0,N.useState)(!0),[d,f]=(0,N.useState)(null),[p,h]=(0,N.useState)(null),[g,v]=(0,N.useState)(null),[y,b]=(0,N.useState)(``),x=(0,N.useCallback)(async()=>{try{let[{connectors:e},{agent_mcps:t}]=await Promise.all([C(),m()]);i(e),s(t),f(null)}catch(e){f(e instanceof Error?e.message:String(e))}finally{u(!1)}},[]);(0,N.useEffect)(()=>{x()},[x]);let S=e=>v(t=>t===e?null:e),w=(0,N.useCallback)(async e=>{try{let t=await _(e);i(n=>n.map(n=>n.id===e?t:n))}catch{x()}},[x]);I((0,N.useCallback)(t=>{t.reason===`disconnected`&&h(U(t.payload,e)),t.connectorId?w(t.connectorId):x()},[w,x,e]));let T=y.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=>r(`div`,{className:`connectors-list`,children:e.map(e=>r(G,{connector:e,expanded:g===e.id,onToggle:()=>S(e.id),onChanged:()=>void w(e.id)},e.id))});return a(`section`,{className:`connectors-section`,"aria-label":e(`settings.section.connectors`),children:[r(`p`,{className:`settings-pane-lede`,children:e(`settings.connectors.lede`)}),d&&a(`div`,{className:`error-banner`,children:[r(E,{size:14}),r(`span`,{children:d})]}),p&&a(`div`,{className:`error-banner`,role:`status`,onClick:()=>h(null),children:[r(E,{size:14}),r(`span`,{children:p})]}),l?r(`div`,{className:`connectors-loading`,children:r(M,{size:16,className:`spin`})}):a(c.Fragment,{children:[t.length>V&&r(`input`,{className:`settings-input`,type:`search`,value:y,onChange:e=>b(e.target.value),placeholder:e(`settings.connectors.search`),"aria-label":e(`settings.connectors.search`)}),t.length===0&&!d&&r(`p`,{className:`settings-hint`,children:e(`settings.connectors.none`)}),T&&D.length===0&&r(`p`,{className:`settings-hint`,children:e(`settings.connectors.noMatch`)}),O.length>0&&r(A,{title:e(`settings.connectors.connected`),count:O.length,defaultOpen:!0,forceOpen:!!T,children:F(O)}),k.length>0&&r(A,{title:e(`settings.connectors.accounts`),hint:e(`settings.connectors.accountsHint`),count:k.length,defaultOpen:P,forceOpen:!!T,children:F(k)}),j.length>0&&r(A,{title:e(`settings.connectors.servers`),hint:e(`settings.connectors.serversHint`),count:j.length,forceOpen:!!T,children:F(j)}),o.length>0&&!T&&r(A,{title:e(`settings.connectors.agentServers`),count:o.length,children:r(X,{servers:o,expanded:g,onToggle:S})})]})]})}function G({connector:e,expanded:t,onToggle:i,onChanged:o}){let s=n();return a(`div`,{className:`connector-tile${t?` connector-tile--open`:``}`,children:[a(`div`,{className:`connector-tile-row`,children:[a(`button`,{type:`button`,className:`connector-tile-header`,onClick:i,"aria-expanded":t,children:[r(`bdi`,{className:`connector-tile-name`,children:e.display_name}),e.configured&&r(`span`,{className:`connector-tile-type`,children:e.type===`oauth_pkce`?`OAuth`:`MCP`}),e.configured?e.type===`mcp_server`&&e.enabled===!1?r(`span`,{className:`connector-status disabled`,children:s(`settings.connectors.disabled`)}):a(`span`,{className:`connector-status ok`,children:[r(T,{size:12}),e.account_id?r(`bdi`,{dir:`ltr`,children:e.account_id}):s(`settings.connectors.configured`)]}):e.configurable===!1?r(`span`,{className:`connector-status idle`,children:s(`settings.connectors.setupRequired`)}):null,r(`span`,{className:`connector-tile-chevron`,children:r(t?O:k,{size:14})})]}),r(R,{connector:e,onChanged:o})]}),t&&a(`div`,{className:`connector-detail`,children:[e.type===`oauth_pkce`?r(K,{connector:e,onChanged:o}):r(J,{connector:e,onChanged:o}),e.configured&&r(Q,{connectorId:e.id,connectorType:e.type})]})]})}function K({connector:e,onChanged:t}){let o=n(),[s,l]=(0,N.useState)(!1),[u,f]=(0,N.useState)(null),[m,h]=(0,N.useState)({}),[_,v]=(0,N.useState)(null),{agents:y}=i(),x=y.filter(t=>t.namespaced_agent_id&&t.required_connections?.some(t=>t.connector_id===e.id)),S=x.map(e=>e.namespaced_agent_id).join(`,`),[C,T]=(0,N.useState)(()=>new Set);(0,N.useEffect)(()=>{T(new Set(x.map(e=>e.namespaced_agent_id)))},[S]);let D=e=>T(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),O=()=>[...C];(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()=>{l(!0),f(null);try{let t=await b(e.id,e.available_scopes?.length?e.available_scopes:e.default_scopes,O());k(t.authorization_url)}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}},j=async()=>{l(!0),f(null),v(null);try{let t=await d(e.id,e.available_scopes?.length?e.available_scopes:e.default_scopes,O());v(t)}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}};(0,N.useEffect)(()=>{e.configured&&v(null)},[e.configured]),I((0,N.useCallback)(t=>{t.connectorId===e.id&&(t.reason===`oauth_error`?(f(String(t.payload.error??o(`settings.connectors.deviceFailed`))),v(null)):t.reason===`oauth_completed`&&v(null))},[e.id,o]));let P=async()=>{l(!0),f(null);try{await p(e.id),t()}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}},F=async()=>{let n=(e.oauth_setup_fields??[]).filter(e=>e.required!==!1&&!m[e.key]?.trim()).map(e=>e.label);if(n.length)f(o(`settings.connectors.required`,{fields:n.join(`, `)}));else{l(!0),f(null);try{let n=e.available_scopes?.length?e.available_scopes:e.default_scopes,r=await g(e.id,{...m,scopes:n,grant_agents:O()}),i=typeof r.authorization_url==`string`?r.authorization_url:null;i&&k(i),t()}catch(e){f(e instanceof Error?e.message:String(e))}finally{l(!1)}}},L=e.oauth_setup_fields??[],R=e.configurable===!1&&!e.configured&&L.length>0;return a(`div`,{className:`configure-body`,children:[e.description&&r(`p`,{className:`connector-desc`,children:r(`bdi`,{children:e.description})}),R&&a(`div`,{className:`oauth-setup-form`,children:[r(`p`,{className:`connector-desc`,children:o(`settings.connectors.firstSetup`)}),L.map(e=>a(`label`,{className:`oauth-setup-field`,children:[r(`span`,{className:`oauth-setup-label`,children:e.label}),r(`input`,{type:e.kind===`secret`?`password`:`text`,className:`oauth-setup-input`,placeholder:e.placeholder,value:m[e.key]??``,onChange:t=>h(n=>({...n,[e.key]:t.target.value})),autoComplete:`off`,spellCheck:!1}),e.help_md&&r(`span`,{className:`oauth-setup-help`,children:r(`bdi`,{children:e.help_md})})]},e.key))]}),!e.configured&&x.length>0&&a(`div`,{className:`oauth-grant-onconnect`,children:[r(`p`,{className:`oauth-grant-onconnect-label`,children:o(`settings.connectors.grantOnConnect`)}),x.map(e=>a(`label`,{className:`oauth-grant-onconnect-item`,children:[r(`input`,{type:`checkbox`,checked:C.has(e.namespaced_agent_id),onChange:()=>D(e.namespaced_agent_id)}),r(`span`,{children:e.name})]},e.namespaced_agent_id)),r(`p`,{className:`oauth-grant-onconnect-help`,children:o(`settings.connectors.grantLater`)})]}),!R&&r(q,{connector:e,onChanged:t}),u&&a(`div`,{className:`configure-error`,children:[r(E,{size:12}),` `,u]}),a(`div`,{className:`configure-actions`,children:[e.configured?r(`button`,{className:`btn-secondary`,disabled:s,onClick:()=>void P(),children:s?r(M,{size:12,className:`spin`}):o(`settings.connectors.disconnect`)}):R?r(`button`,{className:`btn-primary`,disabled:s,onClick:()=>void F(),children:s?r(M,{size:12,className:`spin`}):a(c.Fragment,{children:[r(w,{size:12}),` `,o(`settings.connectors.saveConnect`)]})}):e.configurable===!1?r(`span`,{className:`connector-setup-required`,title:e.config_error??void 0,children:o(`settings.connectors.setupRequired`)}):a(c.Fragment,{children:[r(`button`,{className:`btn-primary`,disabled:s||_!==null,onClick:()=>void A(),children:s?r(M,{size:12,className:`spin`}):a(c.Fragment,{children:[r(w,{size:12}),` `,o(`settings.key.connect`)]})}),e.supports_device_code&&r(`button`,{className:`btn-secondary`,disabled:s||_!==null,onClick:()=>void j(),title:o(`settings.connectors.codeTitle`),children:o(`settings.connectors.code`)})]}),(e.docs_url||e.product_url)&&a(`a`,{href:e.docs_url||e.product_url||`#`,target:`_blank`,rel:`noopener noreferrer`,className:`connector-product-link`,children:[o(`settings.connectors.learnMore`),` `,r(w,{size:11})]})]}),_&&!e.configured&&a(`div`,{className:`device-code-block`,children:[a(`p`,{className:`device-code-instructions`,children:[o(`settings.connectors.goTo`),` `,r(`a`,{href:_.verification_uri,target:`_blank`,rel:`noopener noreferrer`,onClick:e=>{e.preventDefault(),k(_.verification_uri)},children:_.verification_uri})]}),a(`div`,{className:`device-code-value`,children:[r(`code`,{children:_.user_code}),r(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>void navigator.clipboard?.writeText(_.user_code),title:o(`settings.connectors.copyCode`),children:o(`gpu.copy`)})]}),a(`p`,{className:`device-code-waiting`,children:[r(M,{size:12,className:`spin`}),` `,o(`settings.connectors.waiting`)]}),r(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>v(null),children:o(`settings.key.cancel`)})]})]})}function q({connector:e,onChanged:t}){let i=n(),[o,s]=(0,N.useState)(!1),[l,u]=(0,N.useState)({}),[d,f]=(0,N.useState)(!1),[p,m]=(0,N.useState)(!1),[h,_]=(0,N.useState)(null),v=e.oauth_setup_fields??[];if(v.length===0)return null;let y=e.oauth_client,b=y?.source===`keyring`?i(`settings.connectors.savedClient`,{id:y.client_id??``}):y?.source===`env`?i(`settings.connectors.envClient`,{id:y.client_id??``}):i(`settings.connectors.noClient`),x=async()=>{if(!l.client_id?.trim())_(i(`settings.connectors.clientRequired`));else{f(!0),_(null),m(!1);try{await g(e.id,{...Object.fromEntries(Object.entries(l).map(([e,t])=>[e,t.trim()])),save_only:!0}),m(!0),u({}),t(),setTimeout(()=>m(!1),2200)}catch(e){_(e instanceof Error?e.message:String(e))}finally{f(!1)}}};return a(`div`,{className:`oauth-client-editor`,children:[a(`button`,{type:`button`,className:`oauth-client-editor__toggle`,onClick:()=>s(e=>!e),"aria-expanded":o,children:[r(o?O:k,{size:12}),r(`span`,{children:i(`settings.connectors.client`)}),r(`span`,{className:`oauth-client-editor__status`,children:b})]}),o&&a(`div`,{className:`oauth-setup-form`,children:[r(`p`,{className:`connector-desc`,children:i(`settings.connectors.clientHelp`)}),v.map(e=>a(`label`,{className:`oauth-setup-field`,children:[r(`span`,{className:`oauth-setup-label`,children:e.label}),r(`input`,{type:e.kind===`secret`?`password`:`text`,className:`oauth-setup-input`,placeholder:e.kind===`secret`&&y?.source===`keyring`&&y.has_secret?`••••••••`:e.placeholder,value:l[e.key]??``,onChange:t=>u(n=>({...n,[e.key]:t.target.value})),autoComplete:`off`,spellCheck:!1}),e.help_md&&r(`span`,{className:`oauth-setup-help`,children:r(`bdi`,{children:e.help_md})})]},e.key)),h&&a(`div`,{className:`configure-error`,children:[r(E,{size:12}),` `,h]}),r(`div`,{className:`configure-actions`,children:r(`button`,{className:`btn-model-save${p?` saved`:``}`,disabled:d||!l.client_id?.trim(),onClick:()=>void x(),children:d?r(M,{size:12,className:`spin`}):p?a(c.Fragment,{children:[r(T,{size:12}),` `,i(`settings.advanced.saved`)]}):i(`settings.connectors.saveClient`)})})]})]})}function J({connector:e,onChanged:t}){let i=n(),[o,s]=(0,N.useState)(()=>Object.fromEntries(e.mcp_env_keys.map(e=>[e,``]))),[l,u]=(0,N.useState)(!1),[d,m]=(0,N.useState)(!1),[h,_]=(0,N.useState)(null);(0,N.useEffect)(()=>{s(Object.fromEntries(e.mcp_env_keys.map(e=>[e,``])))},[e.mcp_env_keys.join(`,`)]);let v=e.mcp_env_keys.length===0,b=Object.values(o).every(e=>e.trim()===``),x=async()=>{let n=Object.fromEntries(Object.entries(o).filter(([,e])=>e.trim()!==``));if(v||Object.keys(n).length!==0){u(!0),_(null),m(!1);try{await g(e.id,n),m(!0),t(),setTimeout(()=>m(!1),2200)}catch(e){_(e instanceof Error?e.message:String(e))}finally{u(!1)}}},S=async()=>{u(!0),_(null);try{await p(e.id),s(Object.fromEntries(e.mcp_env_keys.map(e=>[e,``]))),t()}catch(e){_(e instanceof Error?e.message:String(e))}finally{u(!1)}},C=async()=>{u(!0),_(null);try{e.enabled?await f(e.id):await y(e.id),t()}catch(e){_(e instanceof Error?e.message:String(e))}finally{u(!1)}};return a(`div`,{className:`configure-body`,children:[e.description&&r(`p`,{className:`connector-desc`,children:r(`bdi`,{children:e.description})}),h&&a(`div`,{className:`configure-error`,children:[r(E,{size:12}),` `,h]}),e.configured&&a(`div`,{className:`connector-toggle-row`,children:[r(`span`,{className:`connector-toggle-label`,children:i(`settings.connectors.active`)}),a(`span`,{className:`toggle-switch`,children:[r(`input`,{type:`checkbox`,checked:e.enabled!==!1,onChange:()=>void C(),disabled:l,"aria-label":e.enabled?i(`settings.connectors.disableServer`):i(`settings.connectors.enableServer`)}),r(`span`,{className:`toggle-track`})]})]}),e.configured&&e.enabled===!1&&r(`p`,{className:`connector-toggle-help`,children:i(`settings.connectors.disabledHelp`)}),e.mcp_env_keys.map(t=>a(`div`,{className:`mcp-key-row`,children:[r(`label`,{className:`mcp-key-label`,children:t}),r(`input`,{type:`password`,className:`mcp-key-input`,placeholder:e.configured?`••••••••`:i.bare(`settings.connectors.enterValue`),value:o[t]??``,onChange:e=>s(n=>({...n,[t]:e.target.value})),spellCheck:!1,autoComplete:`off`})]},t)),a(`div`,{className:`configure-actions`,children:[!(v&&e.configured)&&r(`button`,{className:`btn-model-save${d?` saved`:``}`,disabled:l||!v&&b,onClick:()=>void x(),children:l?r(M,{size:12,className:`spin`}):d?a(c.Fragment,{children:[r(T,{size:12}),` `,i(`settings.advanced.saved`)]}):i(v?`settings.key.connect`:`settings.advanced.save`)}),e.configured&&r(`button`,{className:`btn-secondary`,disabled:l,onClick:()=>void S(),children:i(`settings.connectors.disconnect`)}),e.product_url&&a(`a`,{href:e.product_url,target:`_blank`,rel:`noopener noreferrer`,className:`connector-product-link`,children:[i(`settings.connectors.docs`),` `,r(w,{size:11})]})]})]})}function Y({agent:e,connectorId:t,grantedScopes:i,onChanged:o}){let s=n(),c=e.required_connections?.find(e=>e.connector_id===t),l=e.namespaced_agent_id;if(!c||!l)return null;let[d,f]=(0,N.useState)(()=>new Set(i)),[p,m]=(0,N.useState)(null),[g,_]=(0,N.useState)(null);(0,N.useEffect)(()=>{f(new Set(i))},[i.join(`,`)]);let v=async e=>{if(p!==null)return;let n=new Set(d);n.has(e)?n.delete(e):n.add(e),f(n),m(e),_(null);try{n.size===0?await u(t,l):await h(t,l,[...n]),o()}catch(e){f(new Set(i)),_(e instanceof Error?e.message:String(e))}finally{m(null)}};return a(`div`,{className:`grant-agent-card`,children:[r(`bdi`,{className:`grant-agent-card-name`,children:e.name}),r(`div`,{className:`grant-scope-list`,children:c.scopes.map(e=>a(`label`,{className:`grant-scope-item`,children:[r(`span`,{className:`grant-scope-label`,children:B(e,s)}),a(`span`,{className:`toggle-switch`,children:[r(`input`,{type:`checkbox`,checked:d.has(e),onChange:()=>void v(e),disabled:p!==null}),r(`span`,{className:`toggle-track`})]})]},e))}),g&&a(`div`,{className:`grant-scope-warning grant-scope-warning--error`,children:[r(E,{size:11}),` `,g]})]})}function X({servers:e,expanded:t,onToggle:n}){return r(`div`,{className:`agent-mcps-section`,children:r(`div`,{className:`connectors-list`,children:e.map(e=>{let i=`${e.agent_id}::${e.server_name}`;return r(Z,{server:e,expanded:t===i,onToggle:()=>n(i)},i)})})})}function Z({server:e,expanded:t,onToggle:i}){let o=n(),s=[e.command,...e.args].join(` `);return a(`div`,{className:`agent-mcp-tile${t?` agent-mcp-tile--open`:``}`,children:[a(`button`,{type:`button`,className:`agent-mcp-tile-header`,onClick:i,"aria-expanded":t,children:[r(`span`,{className:`agent-mcp-server-name`,children:e.server_name}),r(`span`,{className:`agent-mcp-agent-label`,children:o(`settings.connectors.via`,{name:e.agent_name})}),e.disabled?r(`span`,{className:`agent-mcp-status disabled`,children:o(`settings.connectors.disabled`)}):a(`span`,{className:`agent-mcp-status enabled`,children:[r(T,{size:11}),` `,o(`settings.connectors.active`)]}),r(`span`,{className:`agent-mcp-readonly-badge`,children:o(`settings.connectors.readOnly`)}),r(`span`,{className:`agent-mcp-chevron`,children:r(t?O:k,{size:14})})]}),t&&a(`div`,{className:`agent-mcp-detail`,children:[s&&r(`bdi`,{dir:`ltr`,className:`agent-mcp-command-row`,children:s}),r(`bdi`,{dir:`ltr`,className:`agent-mcp-config-path`,children:e.config_path}),r(`div`,{className:`agent-mcp-config-hint`,children:o(`settings.connectors.editConfig`)})]})]})}function Q({connectorId:e,connectorType:t}){let o=n(),{agents:s}=i(),[u,d]=(0,N.useState)({}),[f,p]=(0,N.useState)({}),[m,h]=(0,N.useState)(!0),g=(0,N.useCallback)(async()=>{try{let[{grants:t},{activations:n}]=await Promise.all([S(e),l(e)]);d(t),p(n)}catch{d({}),p({})}finally{h(!1)}},[e]);if((0,N.useEffect)(()=>{g()},[g]),I((0,N.useCallback)(t=>{t.connectorId===e&&(t.reason===`grant_changed`||t.reason===`activation_changed`||t.reason===`disconnected`)&&g()},[e,g])),m)return null;let _=s.filter(t=>t.namespaced_agent_id&&t.required_connections?.some(t=>t.connector_id===e)),v=t===`mcp_server`?s.filter(t=>t.namespaced_agent_id&&(t.consumes_mcp_servers||t.required_connections?.some(t=>t.connector_id===e))):[];return a(`div`,{className:`connection-grants`,children:[r(`div`,{className:`grants-header`,children:o(`settings.connectors.grants`)}),_.length===0?r(`div`,{className:`grants-empty`,children:o(`settings.connectors.noGrants`)}):_.map(t=>r(Y,{agent:t,connectorId:e,grantedScopes:u[t.namespaced_agent_id]??[],onChanged:()=>void g()},t.namespaced_agent_id)),v.length>0&&a(c.Fragment,{children:[r(`div`,{className:`grants-header grants-header--activations`,children:o(`settings.connectors.activeFor`)}),r(`div`,{className:`grants-help`,children:o(`settings.connectors.activationHelp`)}),v.map(t=>r($,{agent:t,connectorId:e,active:!!f[t.namespaced_agent_id],grantedScopes:u[t.namespaced_agent_id]??[],onChanged:()=>void g()},`activation-${t.namespaced_agent_id}`))]})]})}function $({agent:e,connectorId:t,active:i,grantedScopes:o,onChanged:s}){let c=n(),l=e.required_connections?.find(e=>e.connector_id===t),u=e.namespaced_agent_id;if(!u)return null;let[d,f]=(0,N.useState)(i),[p,m]=(0,N.useState)(!1),[h,g]=(0,N.useState)(null);(0,N.useEffect)(()=>{f(i)},[i]);let _=async()=>{if(p)return;let e=!d;f(e),m(!0),g(null);try{if(e){let e=o.length===0?l?[...l.scopes]:[...H]:void 0;await v(t,u,e)}else await x(t,u);s()}catch(e){f(i),g(e instanceof Error?e.message:String(e))}finally{m(!1)}};return a(`div`,{className:`grant-agent-card`,children:[r(`bdi`,{className:`grant-agent-card-name`,children:e.name}),r(`div`,{className:`grant-scope-list`,children:a(`label`,{className:`grant-scope-item`,children:[r(`span`,{className:`grant-scope-label`,children:c(d?`settings.connectors.toolsVisible`:`settings.connectors.toolsHidden`)}),a(`span`,{className:`toggle-switch`,children:[r(`input`,{type:`checkbox`,checked:d,onChange:()=>void _(),disabled:p}),r(`span`,{className:`toggle-track`})]})]})}),h&&a(`div`,{className:`grant-scope-warning grant-scope-warning--error`,children:[r(E,{size:11}),` `,h]})]})}function ee(){let e=n();return a(`div`,{className:`settings-pane`,children:[r(`h2`,{className:`settings-pane-title`,children:e(`settings.section.connectors`)}),r(W,{})]})}export{ee as ConnectorsPane};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,M as r,a as i,c as a,d as o,l as s,q as c,r as l,s as u,t as d}from"./useT-BTgbCEQm.js";import{n as ee,t as te}from"./zap-nquO2dVq.js";import{A as ne,At as re,B as ie,Bt as f,C as ae,D as oe,E as se,Et as ce,F as le,G as p,H as ue,I as de,It as m,L as fe,M as pe,Mt as me,N as he,Nt as h,O as ge,P as _e,Pt as g,R as ve,S as ye,T as be,U as xe,Ut as Se,V as Ce,Vt as we,W as Te,X as Ee,_ as De,b as Oe,ct as ke,dt as Ae,g as je,h as Me,ht as Ne,it as Pe,j as Fe,jt as Ie,k as Le,lt as Re,m as ze,mt as Be,nt as Ve,ot as He,p as Ue,pt as We,rt as Ge,st as Ke,t as qe,v as Je,w as Ye,x as Xe,y as Ze,yt as Qe,z as $e,zt as et}from"./index-DL8_h-hw.js";var _={name:`arrow-left`,size:24,node:[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]};_.node;var tt=n(_),nt={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`}]]};nt.node;var rt=n(nt),v={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`}]]};v.node;var it=n(v),at={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`}]]};at.node;var ot=n(at),y={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`}]]};y.node;var st=n(y),ct={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`}]]};ct.node;var lt=n(ct),ut={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`}]]};ut.node;var dt=n(ut),b=e(c(),1),ft=[{title:`mem.about.group.preferences`,categories:[`preference`]},{title:`mem.about.group.about`,categories:[`fact`,`profile`,`skill`]},{title:`mem.about.group.reminders`,categories:[`reminder`]},{title:`mem.about.group.notes`,categories:[`note`]}],pt={user:`mem.source.user`,tool:`mem.source.tool`,llm_extract:`mem.source.llm_extract`,consolidation:`mem.source.consolidation`,inferred:`mem.source.inferred`,discovery:`mem.source.discovery`};function mt(e){return pt[e]??`mem.source.other`}function ht(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))return null;let i=Math.floor((Date.now()-n.getTime())/864e5);return i<=0?r(`mem.day.today`):i===1?r(`mem.day.yesterday`):i<30?r(`mem.day.daysAgo`,{n:i}):n.toLocaleDateString(d(t),{month:`short`,day:`numeric`,year:`numeric`})}function gt(e,t=new Date,n=l){let r=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e),i=r?new Date(+r[1],r[2]-1,+r[3]):new Date(e);if(Number.isNaN(i.getTime()))return null;let a=i.getHours()===0&&i.getMinutes()===0&&i.getSeconds()===0,o=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),s=a?i.getTime()<o:i.getTime()<t.getTime(),c=i.toLocaleString(d(n),{weekday:`short`,month:`short`,day:`numeric`,...i.getFullYear()===t.getFullYear()?{}:{year:`numeric`},...a?{}:{hour:`numeric`,minute:`2-digit`}});return{text:n(s?`mem.due.past`:`mem.due.upcoming`,{when:c}),past:s}}function _t({memoryEnabled:e,reloadKey:n,onChanged:o,onOpenAdvanced:c,showToast:l}){let d=i(),[ee,te]=(0,b.useState)(null),[ne,re]=(0,b.useState)(null),[ie,f]=(0,b.useState)(null),[oe,se]=(0,b.useState)(``),[le,p]=(0,b.useState)([]),[ue,de]=(0,b.useState)(new Set),[m,fe]=(0,b.useState)(``),[pe,me]=(0,b.useState)(`fact`),[he,h]=(0,b.useState)(null),_e=(0,b.useRef)(0),g=(0,b.useCallback)(async()=>{let e=++_e.current;try{let t=await ge({about_user:!0,include_sensitive:!0,sort_by:`updated_at`,order:`desc`,limit:200});if(e!==_e.current)return;te(t.items),re(null)}catch(n){if(e!==_e.current)return;t.system.warn(`Failed to load what GAIA knows about the user`,n),re(n instanceof Error?n.message:String(n))}},[]);(0,b.useEffect)(()=>{g()},[g,n]);let ve=(0,b.useCallback)(async e=>{let n=oe.trim();if(!n||n===e.content)f(null);else{h(e.id);try{await ae(e.id,{content:n}),f(null),l(d(`mem.about.updated`),`success`),await g(),o()}catch(e){t.system.error(`Failed to edit memory`,e),l(d(`mem.about.editFailed`,{error:x(e)}),`error`)}finally{h(null)}}},[oe,g,o,l,d]),be=(0,b.useCallback)(async e=>{h(e.id);try{await ye(e.id),_e.current++,te(t=>(t??[]).filter(t=>t.id!==e.id)),p(t=>[e,...t]),o()}catch(e){t.system.error(`Failed to forget memory`,e),l(d(`mem.about.forgetFailed`,{error:x(e)}),`error`)}finally{h(null)}},[o,l,d]),xe=(0,b.useCallback)(async e=>{h(e.id);try{await Oe({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}),p(t=>t.filter(t=>t.id!==e.id)),await g(),o()}catch(e){t.system.error(`Failed to restore memory`,e),l(d(`mem.about.restoreFailed`,{error:x(e)}),`error`)}finally{h(null)}},[g,o,l,d]),Se=(0,b.useCallback)(async()=>{let e=m.trim();if(e){h(`new`);try{await Oe({content:e,category:pe}),fe(``),l(d(`mem.about.saved`),`success`),await g(),o()}catch(e){t.system.error(`Failed to add memory`,e),l(d(`mem.about.addFailed`,{error:x(e)}),`error`)}finally{h(null)}}},[m,pe,g,o,l,d]);if(!e)return s(`div`,{className:`mem-about`,children:[a(`h2`,{className:`mem-about-title`,children:d(`mem.about.title`)}),s(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:d(`mem.about.off`)}),a(`button`,{className:`btn-secondary`,onClick:c,children:d(`mem.about.turnOn`)})]})]});let Ce=ft.map(e=>({...e,rows:(ee??[]).filter(t=>e.categories.includes(t.category))})).filter(e=>e.rows.length>0);return s(`div`,{className:`mem-about`,children:[a(`h2`,{className:`mem-about-title`,children:d(`mem.about.title`)}),a(`p`,{className:`mem-about-intro`,children:d(`mem.about.intro`)}),s(`form`,{className:`mem-about-add`,onSubmit:e=>{e.preventDefault(),Se()},children:[a(`input`,{className:`mem-input`,placeholder:d(`mem.about.addPlaceholder`),"aria-label":d(`mem.about.addLabel`),value:m,onChange:e=>fe(e.target.value)}),s(`select`,{className:`mem-select`,"aria-label":d(`mem.about.kind`),value:pe,onChange:e=>me(e.target.value),children:[a(`option`,{value:`fact`,children:d(`mem.about.group.about`)}),a(`option`,{value:`preference`,children:d(`mem.about.kind.preference`)}),a(`option`,{value:`reminder`,children:d(`mem.about.kind.reminder`)}),a(`option`,{value:`note`,children:d(`mem.about.kind.note`)})]}),s(`button`,{className:`btn-primary`,type:`submit`,disabled:!m.trim()||he===`new`,children:[a(Be,{size:14}),` `,d(`mem.about.add`)]})]}),le.map(e=>s(`div`,{className:`mem-about-forgotten`,role:`status`,children:[a(`span`,{children:e.sensitive?d(`mem.about.forgottenSensitive`):d(`mem.about.forgotten`,{content:e.content})}),s(`button`,{className:`mem-about-link`,disabled:he===e.id,onClick:()=>xe(e),children:[a(He,{size:12}),` `,d(`mem.about.undo`)]})]},e.id)),ne?s(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:d(`mem.about.loadFailed`,{error:ne})}),a(`button`,{className:`btn-secondary`,onClick:g,children:d(`mem.about.retry`)})]}):ee===null?s(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),` `,d(`mem.loading`)]}):Ce.length===0?s(`div`,{className:`mem-about-empty`,children:[a(`p`,{children:d(`mem.about.empty`)}),a(`p`,{className:`mem-about-hint`,children:d(`mem.about.emptyHint`)})]}):Ce.map(e=>s(`section`,{className:`mem-about-group`,"aria-label":d(e.title),children:[a(`h3`,{className:`mem-about-group-title`,children:d(e.title)}),a(`ul`,{className:`mem-about-list`,children:e.rows.map(e=>{let t=e.sensitive&&!ue.has(e.id),n=e.due_at?gt(e.due_at,new Date,d):null,i=ht(e.updated_at,d),o=t?r(`mem.about.sensitiveMemory`):e.content;return a(`li`,{className:`mem-about-item`,children:ie===e.id?s(`form`,{className:`mem-about-edit`,onSubmit:t=>{t.preventDefault(),ve(e)},children:[a(`textarea`,{className:`mem-input`,"aria-label":d(`mem.about.editLabel`),rows:2,autoFocus:!0,value:oe,onChange:e=>se(e.target.value),onKeyDown:t=>{t.key===`Escape`&&(t.stopPropagation(),f(null)),t.key===`Enter`&&!t.shiftKey&&(t.preventDefault(),ve(e))}}),s(`div`,{className:`mem-about-edit-actions`,children:[a(`button`,{className:`btn-primary`,type:`submit`,disabled:he===e.id,children:d(`mem.about.save`)}),a(`button`,{className:`btn-secondary`,type:`button`,onClick:()=>f(null),children:d(`mem.about.cancel`)})]})]}):s(u.Fragment,{children:[s(`div`,{className:`mem-about-text`,children:[t?s(`button`,{className:`mem-about-link`,onClick:()=>de(t=>new Set(t).add(e.id)),children:[a(ce,{size:12}),` `,d(`mem.about.showSensitive`)]}):a(`bdi`,{children:e.content}),n&&a(`span`,{className:`mem-about-due${n.past?` is-overdue`:``}`,children:n.text}),a(`span`,{className:`mem-about-meta`,children:i===null?d(mt(e.source)):d(`mem.about.meta`,{source:r(mt(e.source)),when:i})})]}),s(`div`,{className:`mem-about-actions`,children:[a(`button`,{className:`mem-about-btn`,"aria-label":d(`mem.about.editAria`,{name:o}),title:d(`mem.about.edit`),onClick:()=>{f(e.id),se(e.content)},children:a(Ne,{size:14})}),s(`button`,{className:`mem-about-btn mem-about-btn-remove`,"aria-label":d(`mem.about.forgetAria`,{name:o}),title:d(`mem.about.forget`),disabled:he===e.id,onClick:()=>be(e),children:[a(ke,{size:14}),` `,d(`mem.about.forget`)]})]})]})},e.id)})})]},e.title))]})}function x(e){return e instanceof Error?e.message:String(e)}function vt(e,t){if(!e)return`—`;try{let n=new Date(e);if(isNaN(n.getTime()))return`—`;let r={month:`short`,day:`numeric`};return n.getFullYear()!==new Date().getFullYear()&&(r.year=`numeric`),n.toLocaleDateString(t,r)}catch{return`—`}}function S(e,t){if(!e)return``;try{let n=new Date(e);return isNaN(n.getTime())?``:n.toLocaleString(t,{year:`numeric`,month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})}catch{return``}}function C(e,t){if(!e)return`—`;try{let n=new Date(e);if(isNaN(n.getTime()))return`—`;let r=Date.now(),i=n.getTime()-r,a=Math.abs(i),o=Math.floor(a/1e3),s=Math.floor(a/6e4),c=Math.floor(a/36e5),l=Math.floor(a/864e5);return i<0?o<5?t(`time.justNow`):o<60?t(`mem.rel.secondsAgo`,{n:o}):c===0?t(`time.minutesAgo`,{n:s}):l===0?t(`time.hoursAgo`,{n:c}):l===1?t(`time.yesterday`):l<30?t(`time.daysAgo`,{n:l}):S(e,d(t)):o<5?t(`mem.rel.now`):o<60?t(`mem.rel.inSeconds`,{n:o}):c===0?t(`mem.rel.inMinutes`,{n:s}):l===0?t(`mem.rel.inHours`,{n:c}):l===1?t(`mem.rel.tomorrow`):l<30?t(`mem.rel.inDays`,{n:l}):S(e,d(t))}catch{return`—`}}function yt(e){return e<1e3?`${Math.round(e)}ms`:`${(e/1e3).toFixed(1)}s`}function bt(e){try{return new Date(e).getTime()<Date.now()}catch{return!1}}function xt(e){return e>=.7?`high`:e>=.4?`medium`:`low`}function St(e){return e>=.9?`high`:e>=.7?`medium`:`low`}function Ct(e,t,n){let r=vt(e,n),i=vt(t,n);return r===`—`&&i===`—`?``:r===i?r:`${r} \u2013 ${i}`}function wt(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 Tt=[`fact`,`preference`,`error`,`skill`,`note`,`reminder`],w={fact:`mem.cat.fact`,preference:`mem.cat.preference`,error:`mem.cat.error`,skill:`mem.cat.skill`,note:`mem.cat.note`,reminder:`mem.cat.reminder`},Et={pending_approval:`mem.status.pending_approval`,queued:`mem.status.queued`,in_progress:`mem.status.in_progress`,completed:`mem.status.completed`,failed:`mem.status.failed`,rejected:`mem.status.rejected`,cancelled:`mem.status.cancelled`,blocked:`mem.status.blocked`},Dt={low:`mem.priority.low`,medium:`mem.priority.medium`,high:`mem.priority.high`},Ot={agent_inferred:`mem.goals.source.agent_inferred`,agent_scheduled:`mem.goals.source.agent_scheduled`},kt={user:`mem.role.user`,assistant:`mem.role.assistant`},At={work:`mem.domain.work`,technical:`mem.domain.technical`,personal:`mem.domain.personal`,general:`mem.domain.general`};function T({value:e,keys:t}){let n=i(),r=t[e];return r?a(u.Fragment,{children:n(r)}):a(`bdi`,{children:e})}function E(e){return e instanceof Error?e.message:String(e)}var jt={work:`blue`,technical:`purple`,personal:`green`,general:`gray`};function Mt(){let e=i(),{setShowMemoryDashboard:n,sessions:c,setCurrentSession:l}=o(),ce=(0,b.useMemo)(()=>new Map(c.map(e=>[e.id,e.title])),[c]),He=e=>ce.get(e)||`${e.slice(0,8)}...`,[_,nt]=(0,b.useState)(null),[v,at]=(0,b.useState)([]),[y,ct]=(0,b.useState)(null),[ut,ft]=(0,b.useState)([]),[pt,mt]=(0,b.useState)([]),[ht,gt]=(0,b.useState)([]),[x,vt]=(0,b.useState)(null),[Mt,Nt]=(0,b.useState)([]),[Pt,Ft]=(0,b.useState)(!0),[It,Lt]=(0,b.useState)(!1),[Rt,zt]=(0,b.useState)(null),[Bt,D]=(0,b.useState)(!1),[Vt,Ht]=(0,b.useState)(null),[Ut,Wt]=(0,b.useState)([]),Gt=(0,b.useRef)(0),[O,Kt]=(0,b.useState)([]),[qt,Jt]=(0,b.useState)(``),[Yt,Xt]=(0,b.useState)(``),[Zt,Qt]=(0,b.useState)(``),[k,$t]=(0,b.useState)(`updated_at`),[en,tn]=(0,b.useState)(`desc`),[A,j]=(0,b.useState)(0),[nn,rn]=(0,b.useState)(!1),[an,on]=(0,b.useState)(``),[sn,cn]=(0,b.useState)(null),ln=(0,b.useRef)(null),[M,un]=(0,b.useState)(null),[dn,fn]=(0,b.useState)(!1),[N,pn]=(0,b.useState)(null),[P,F]=(0,b.useState)({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),[mn,hn]=(0,b.useState)(new Set),[I,gn]=(0,b.useState)(!1),[_n,vn]=(0,b.useState)(!1),[yn,bn]=(0,b.useState)(!1),[L,R]=(0,b.useState)(!1),[xn,Sn]=(0,b.useState)(!1),[z,Cn]=(0,b.useState)(null),[wn,Tn]=(0,b.useState)(!1),[En,B]=(0,b.useState)(null),[V,Dn]=(0,b.useState)(`about`),[On,kn]=(0,b.useState)(0),[An,jn]=(0,b.useState)([]),[Mn,Nn]=(0,b.useState)(null),[Pn,Fn]=(0,b.useState)(!1),[In,Ln]=(0,b.useState)(null),[Rn,zn]=(0,b.useState)(null),[Bn,Vn]=(0,b.useState)(!1),[Hn,Un]=(0,b.useState)({title:``,description:``,priority:`medium`}),[H,U]=(0,b.useState)(`idle`),[Wn,W]=(0,b.useState)([]),[G,K]=(0,b.useState)([]),[Gn,Kn]=(0,b.useState)(null),qn=(0,b.useRef)(null),Jn=(0,b.useRef)(null),[q,Yn]=(0,b.useState)(`idle`),[Xn,J]=(0,b.useState)([]),[Y,Zn]=(0,b.useState)([]),[Qn,$n]=(0,b.useState)(null),[er,tr]=(0,b.useState)(!1),nr=(0,b.useRef)(null),rr=(0,b.useRef)(null),[ir,ar]=(0,b.useState)(30),[or,sr]=(0,b.useState)(!1),[cr,lr]=(0,b.useState)(!1),[ur,dr]=(0,b.useState)(!1),[fr,pr]=(0,b.useState)(!1),[mr,hr]=(0,b.useState)(!1),[gr,_r]=(0,b.useState)(!1),vr=(0,b.useRef)(null),yr=(0,b.useRef)(null),br=(0,b.useRef)(null),X=(0,b.useCallback)((e,t=`info`)=>{let n=++Gt.current;Wt(r=>[...r,{id:n,text:e,type:t}]),setTimeout(()=>{Wt(e=>e.filter(e=>e.id!==n))},4e3)},[]);(0,b.useEffect)(()=>{if(!Bt)return;let e=e=>{yr.current&&!yr.current.contains(e.target)&&D(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[Bt]),Ve(!0,()=>{En?B(null):xn?Sn(!1):wn?Tn(!1):M?un(null):Bt?D(!1):dn||N?(fn(!1),pn(null)):Vt?Ht(null):n(!1)}),Ee(br,!!En),(0,b.useEffect)(()=>{if(!En)return;let e=br.current;if(!e)return;let t=document.activeElement;return e.focus(),()=>{t?.focus()}},[En]);let xr=(0,b.useCallback)(async()=>{try{let e=await pe();nt(e)}catch(e){t.system.warn(`Failed to load memory stats`,e)}},[]),Sr=(0,b.useCallback)(async()=>{try{let e=await Le(ir);at(e)}catch(e){t.system.warn(`Failed to load memory activity`,e)}},[ir]),Z=(0,b.useCallback)(async()=>{try{let e=await ge({category:O.length>0?O:void 0,context:qt||void 0,entity:Yt||void 0,search:Zt||void 0,sort_by:k,order:en,offset:A,limit:15,include_sensitive:!0,include_superseded:nn});ct(e)}catch(e){t.system.warn(`Failed to load knowledge`,e)}},[O,qt,Yt,Zt,k,en,A,nn]),Cr=(0,b.useCallback)(async()=>{try{let e=await he();ft(e)}catch(e){t.system.warn(`Failed to load tool summary`,e)}},[]),wr=(0,b.useCallback)(async()=>{try{let e=await ne(20);mt(e)}catch(e){t.system.warn(`Failed to load conversations`,e)}},[]),Tr=(0,b.useCallback)(async()=>{try{let e=await _e(7);gt(e)}catch(e){t.system.warn(`Failed to load upcoming items`,e)}},[]),Er=(0,b.useCallback)(async()=>{try{let e=await be();vt(e)}catch(e){t.system.warn(`Failed to load embedding coverage`,e)}},[]),Dr=(0,b.useCallback)(async()=>{try{let e=await se();Nt(e||[])}catch(e){t.system.warn(`Failed to load entities`,e)}},[]),Or=(0,b.useCallback)(async()=>{try{let e=await Fe();vn(e.mcp_memory_enabled),gn(e.memory_enabled),bn(e.system_discovery_consent)}catch(e){t.system.warn(`Failed to load memory settings`,e)}},[]),kr=(0,b.useCallback)(async()=>{Fn(!0);try{let[e,t]=await Promise.all([le(),oe()]);jn(e.goals),Nn(t)}catch(e){t.system.warn(`Failed to load goals`,e)}finally{Fn(!1)}},[]),Ar=(0,b.useCallback)(async(n,i)=>{try{await n()}catch(n){t.system.error(`Goal action failed (${i})`,n),X(e(`mem.goals.failed`,{what:r(i),error:E(n)}),`error`);return}kr()},[kr,X,e]);(0,b.useEffect)(()=>{if(!Rn)return;let e=setTimeout(()=>zn(null),3e3);return()=>clearTimeout(e)},[Rn]);let Q=(0,b.useCallback)(async()=>{Ft(!0),Lt(!1);try{await Promise.all([xr(),Sr(),Z(),Cr(),wr(),Tr(),Er(),Dr(),Or(),kr()]),kn(e=>e+1)}catch(e){Lt(!0),t.system.error(`Memory dashboard load failed`,e)}finally{Ft(!1)}},[xr,Sr,Z,Cr,wr,Tr,Er,Dr,Or,kr]);(0,b.useEffect)(()=>{Q()},[Q]),(0,b.useEffect)(()=>{Z()},[Z]);let jr=(0,b.useRef)(!0);(0,b.useEffect)(()=>{jr.current?jr.current=!1:Sr()},[Sr]);let Mr=(0,b.useCallback)(e=>{Qt(e),_r(!0),vr.current&&clearTimeout(vr.current),vr.current=setTimeout(()=>{j(0),_r(!1)},300)},[]),Nr=(0,b.useCallback)(()=>{Z(),xr(),Er(),Tr(),Dr()},[Z,xr,Er,Tr,Dr]),$=(0,b.useCallback)(()=>{Nr(),kn(e=>e+1)},[Nr]),Pr=(0,b.useCallback)(async()=>{if(P.content.trim())try{let n=await Oe({content:P.content,category:P.category,domain:P.domain||void 0,context:P.context,entity:P.entity||void 0,sensitive:P.sensitive,due_at:P.due_at||void 0});fn(!1),F({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),t.ui.info(`Created new knowledge entry`),n?.embedded===!1?X(n.embed_error?e(`mem.toast.server`,{message:n.embed_error}):e(`mem.toast.notEmbedded`),`error`):X(e(`mem.toast.created`),`success`)}catch(n){t.system.error(`Failed to create knowledge`,n),X(e(`mem.toast.createFailed`,{error:E(n)}),`error`)}},[P,$,X,e]),Fr=(0,b.useCallback)(async()=>{if(N&&P.content.trim())try{let n=await ae(N,{content:P.content,category:P.category,domain:P.domain||void 0,context:P.context,entity:P.entity||void 0,sensitive:P.sensitive,due_at:P.due_at||void 0});pn(null),F({content:``,category:`fact`,domain:``,context:`global`,entity:``,sensitive:!1,due_at:``}),$(),t.ui.info(`Updated knowledge ${N}`),n?.embedded===!1?X(n.embed_error?e(`mem.toast.server`,{message:n.embed_error}):e(`mem.toast.notEmbedded`),`error`):X(e(`mem.toast.updated`),`success`)}catch(n){t.system.error(`Failed to update knowledge`,n),X(e(`mem.toast.updateFailed`,{error:E(n)}),`error`)}},[N,P,$,X,e]),Ir=(0,b.useCallback)(async n=>{if(z!==n)Cn(n);else{Cn(null);try{await ye(n),$(),t.ui.info(`Deleted knowledge ${n}`),X(e(`mem.toast.deleted`),`info`)}catch(n){t.system.error(`Failed to delete knowledge`,n),X(e(`mem.toast.deleteFailed`,{error:E(n)}),`error`)}}},[z,$,X,e]);(0,b.useEffect)(()=>{if(!z)return;let e=setTimeout(()=>Cn(null),3e3);return()=>clearTimeout(e)},[z]);let Lr=(0,b.useCallback)(async n=>{try{await ae(n.id,{sensitive:!n.sensitive}),Z(),t.ui.info(`Toggled sensitive for ${n.id}: ${!n.sensitive}`),X(e(n.sensitive?`mem.toast.unmarkedSensitive`:`mem.toast.markedSensitive`),`info`)}catch(n){t.system.error(`Failed to toggle sensitive`,n),X(e(`mem.toast.sensitiveFailed`,{error:E(n)}),`error`)}},[Z,X,e]),Rr=(0,b.useCallback)(e=>{pn(e.id),fn(!1),F({content:e.content,category:e.category,domain:e.domain||``,context:e.context,entity:e.entity||``,sensitive:e.sensitive,due_at:e.due_at||``})},[]),zr=(0,b.useCallback)(n=>{navigator.clipboard.writeText(n).then(()=>X(e(`mem.toast.idCopied`),`info`),r=>{t.ui.warn(`Couldn't copy knowledge ID ${n}`,r),X(e(`mem.toast.copyFailed`,{error:E(r)}),`error`)})},[X,e]),Br=(0,b.useCallback)(e=>{on(e),ln.current&&clearTimeout(ln.current),e.trim()?ln.current=setTimeout(async()=>{try{let t=await Te(e.trim(),20);cn(t)}catch(e){t.system.warn(`Conversation search failed`,e)}},300):cn(null)},[]),Vr=(0,b.useCallback)(async e=>{try{let t=await Ye(e);un({sessionId:e,turns:t})}catch(e){t.system.error(`Failed to load conversation detail`,e)}},[]),Hr=(0,b.useCallback)(e=>{Kt(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e]),j(0)},[]),Ur=(0,b.useCallback)(e=>{k===e?tn(e=>e===`desc`?`asc`:`desc`):($t(e),tn(`desc`)),j(0)},[k]),Wr=(0,b.useCallback)(async()=>{sr(!0),D(!1);try{let t=await Je();await Q(),X(e(`mem.toast.consolidated`,{sessions:t.consolidated??0,items:t.extracted_items??0}),`success`)}catch(n){t.system.error(`Failed to consolidate sessions`,n),X(e(`mem.toast.consolidateFailed`,{error:E(n)}),`error`)}finally{sr(!1)}},[Q,X,e]),Gr=(0,b.useCallback)(async()=>{lr(!0),D(!1);try{let t=await ve();await Er(),X(t.total_without?e(`mem.toast.backfilledMissing`,{n:t.backfilled??0,missing:t.total_without}):e(`mem.toast.backfilled`,{n:t.backfilled??0}),`success`)}catch(n){t.system.error(`Failed to rebuild embeddings`,n),X(e(`mem.toast.rebuildFailed`,{error:E(n)}),`error`)}finally{lr(!1)}},[Er,X,e]),Kr=(0,b.useCallback)(async()=>{dr(!0),D(!1);try{let t=await ie();await Q(),X(e(`mem.toast.reconciled`,{pairs:t.pairs_checked??0,reinforced:t.reinforced??0,contradicted:t.contradicted??0}),`success`)}catch(n){t.system.error(`Failed to reconcile memory`,n),X(e(`mem.toast.reconcileFailed`,{error:E(n)}),`error`)}finally{dr(!1)}},[Q,X,e]),qr=(0,b.useCallback)(async()=>{pr(!0),D(!1);try{await $e(),await Q(),X(e(`mem.toast.ftsRebuilt`),`success`)}catch(n){t.system.error(`Failed to rebuild FTS index`,n),X(e(`mem.toast.ftsFailed`,{error:E(n)}),`error`)}finally{pr(!1)}},[Q,X,e]),Jr=(0,b.useCallback)(async()=>{hr(!0),D(!1);try{let t=await Ce();await Q(),t.skipped?X(e(`mem.toast.systemDisabled`),`error`):X(e(`mem.toast.systemRefreshed`,{n:t.stored}),`success`)}catch(n){t.system.error(`Failed to refresh system context`,n),X(e(`mem.toast.systemFailed`,{error:E(n)}),`error`)}finally{hr(!1)}},[Q,X,e]),Yr=or||cr||ur||fr||mr,Xr=(0,b.useCallback)(()=>{U(`running`),W([]),K([]),Kn(null);let n=de();Jn.current=n,n.onmessage=r=>{try{let t=JSON.parse(r.data);if(t.type===`log`)W(e=>[...e,{text:t.message,kind:`log`,server:!0}]);else if(t.type===`finding`){let n=t.item;W(t=>[...t,{text:e.bare(`mem.log.found`,{content:n.content}),kind:`finding`}]),K(e=>[...e,{...n,_checked:!0}])}else t.type===`error`?W(n=>[...n,{text:e.bare(`mem.log.error`,{message:t.message}),kind:`error`}]):t.type===`done`&&(n.close(),Jn.current=null,W(n=>[...n,{text:e(`mem.log.discoveryDone`,{n:t.total??0}),kind:`log`}]),U(`review`))}catch(n){t.system.warn(`Unreadable discovery event`,n),W(t=>[...t,{text:e(`mem.log.parseFailed`),kind:`error`}])}},n.onerror=()=>{n.close(),Jn.current=null,W(t=>[...t,{text:e(`mem.log.discoveryConnection`),kind:`error`}]),K(e=>(U(e.length>0?`review`:`idle`),e))}},[e]),Zr=(0,b.useCallback)(async()=>{let n=G.filter(e=>e._checked);if(n.length!==0){U(`saving`);try{let t=n.map(({_checked:e,...t})=>t),r=await je(t);Kn(r.stored),U(`done`),$(),X(e(`mem.disc.saved`,{n:r.stored}),`success`)}catch(n){t.system.error(`Failed to commit discovery items`,n),X(e(`mem.disc.saveFailed`,{error:E(n)}),`error`),U(`review`)}}},[G,$,X,e]),Qr=(0,b.useCallback)(()=>{Yn(`running`),J([]),Zn([]),$n(null);let n=fe(er);rr.current=n,n.onmessage=r=>{try{let t=JSON.parse(r.data);if(t.type===`log`)J(e=>[...e,{text:t.message,kind:`log`,server:!0}]);else if(t.type===`insight`){let n=t.item;J(t=>[...t,{text:e.bare(`mem.log.insight`,{content:n.content}),kind:`finding`}]),Zn(e=>[...e,{...n,_checked:!0}])}else t.type===`error`?J(n=>[...n,{text:e.bare(`mem.log.error`,{message:t.message}),kind:`error`}]):t.type===`done`&&(n.close(),rr.current=null,J(n=>[...n,{text:e(`mem.log.inferenceDone`,{n:t.total??0}),kind:`log`}]),Yn(`review`))}catch(n){t.system.warn(`Unreadable inference event`,n),J(t=>[...t,{text:e(`mem.log.parseFailed`),kind:`error`}])}},n.onerror=()=>{n.close(),rr.current=null,J(t=>[...t,{text:e(`mem.log.inferenceConnection`),kind:`error`}]),Zn(e=>(Yn(e.length>0?`review`:`idle`),e))}},[er,e]),$r=(0,b.useCallback)(async()=>{let n=Y.filter(e=>e._checked);if(n.length!==0){Yn(`saving`);try{let t=n.map(({_checked:e,...t})=>t),r=await De(t);$n(r.stored),Yn(`done`),$(),X(e(`mem.inf.saved`,{n:r.stored}),`success`)}catch(n){t.system.error(`Failed to commit inference insights`,n),X(e(`mem.inf.saveFailed`,{error:E(n)}),`error`),Yn(`review`)}}},[Y,$,X,e]);(0,b.useEffect)(()=>{qn.current&&(qn.current.scrollTop=qn.current.scrollHeight)},[Wn]),(0,b.useEffect)(()=>{nr.current&&(nr.current.scrollTop=nr.current.scrollHeight)},[Xn]),(0,b.useEffect)(()=>()=>{Jn.current&&=(Jn.current.close(),null),rr.current&&=(rr.current.close(),null)},[]);let ei=e=>k===e?a(`span`,{className:`mem-sort-arrow`,children:en===`desc`?`↓`:`↑`}):null,ti=Math.max(1,...v.map(e=>e.conversations+e.tool_calls+e.knowledge_added+e.errors)),ni=_?.knowledge?.by_context?Object.keys(_.knowledge.by_context):[];return s(`div`,{className:`memory-dashboard-page`,children:[s(`div`,{className:`memory-dashboard-header`,children:[s(`div`,{className:`memory-dashboard-header-left`,children:[a(`button`,{className:`btn-icon settings-back-btn`,onClick:()=>n(!1),"aria-label":e(`mem.back`),children:a(tt,{size:18})}),s(`h1`,{children:[e(`mem.title`),` `,a(`span`,{className:`mem-beta`,style:{fontSize:11,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`2px 8px`,borderRadius:4,marginInlineStart:8,verticalAlign:`middle`,whiteSpace:`nowrap`},children:e(`mem.beta`)})]})]}),s(`div`,{className:`memory-dashboard-header-actions`,children:[V===`advanced`&&s(u.Fragment,{children:[x&&x.total_items>0&&s(`div`,{className:`mem-embedding-coverage`,title:e(`mem.coverage.title`,{n:x.with_embedding,total:x.total_items}),children:[a(`div`,{className:`mem-embedding-bar`,children:a(`div`,{className:`mem-embedding-fill`,style:{width:`${Math.round(x.coverage_pct)}%`}})}),a(`span`,{className:`mem-embedding-label`,children:e(`mem.coverage.label`,{pct:`${Math.round(x.coverage_pct)}%`})})]}),s(`div`,{className:`mem-maintenance-wrap`,ref:yr,children:[s(`button`,{className:`btn-icon ${Yr?`mem-spinning`:``}`,onClick:()=>D(e=>!e),title:e(`mem.maint.label`),"aria-label":e(`mem.maint.label`),"aria-expanded":Bt,children:[Yr?a(`div`,{className:`mem-spinner-sm`}):a(re,{size:16}),a(we,{size:10,style:{marginInlineStart:2}})]}),Bt&&s(`div`,{className:`mem-maintenance-menu`,role:`menu`,children:[s(`button`,{className:`mem-maintenance-item`,onClick:Wr,disabled:or,role:`menuitem`,children:[a(rt,{size:14}),e(or?`mem.maint.consolidating`:`mem.maint.consolidate`)]}),s(`button`,{className:`mem-maintenance-item`,onClick:Gr,disabled:cr,role:`menuitem`,children:[a(te,{size:14}),e(cr?`mem.maint.rebuilding`:`mem.maint.rebuildEmbeddings`)]}),s(`button`,{className:`mem-maintenance-item`,onClick:Kr,disabled:ur,role:`menuitem`,children:[a(m,{size:14}),e(ur?`mem.maint.reconciling`:`mem.maint.reconcile`)]}),a(`div`,{className:`mem-maintenance-divider`}),s(`button`,{className:`mem-maintenance-item`,onClick:Jr,disabled:mr,role:`menuitem`,children:[a(We,{size:14}),e(mr?`mem.maint.refreshing`:`mem.maint.refreshSystem`)]}),a(`div`,{className:`mem-maintenance-divider`}),s(`button`,{className:`mem-maintenance-item`,onClick:qr,disabled:fr,role:`menuitem`,children:[a(Ae,{size:14}),e(fr?`mem.maint.rebuilding`:`mem.maint.rebuildFts`)]})]})]})]}),a(`button`,{className:`btn-icon`,onClick:Q,title:e(`mem.refresh`),"aria-label":e(`mem.refreshAria`),children:a(We,{size:16})})]})]}),s(`div`,{className:`mem-tab-bar`,role:`tablist`,children:[s(`button`,{className:`mem-tab-btn${V===`about`?` mem-tab-active`:``}`,onClick:()=>Dn(`about`),role:`tab`,"aria-selected":V===`about`,children:[a(dt,{size:14}),` `,e(`mem.tab.about`)]}),s(`button`,{className:`mem-tab-btn${V===`goals`?` mem-tab-active`:``}`,onClick:()=>{Dn(`goals`),kr()},role:`tab`,"aria-selected":V===`goals`,children:[a(st,{size:14}),` `,e(`mem.tab.goals`),Mn&&(Mn.goals.pending_approval??0)>0&&a(`span`,{className:`mem-tab-badge`,children:Mn.goals.pending_approval})]}),s(`button`,{className:`mem-tab-btn${V===`profile`?` mem-tab-active`:``}`,onClick:()=>Dn(`profile`),role:`tab`,"aria-selected":V===`profile`,children:[a(Re,{size:14}),` `,e(`mem.tab.profile`)]}),s(`button`,{className:`mem-tab-btn${V===`advanced`?` mem-tab-active`:``}`,onClick:()=>Dn(`advanced`),role:`tab`,"aria-selected":V===`advanced`,children:[a(Se,{size:14}),` `,e(`mem.tab.advanced`)]})]}),s(`div`,{className:`memory-dashboard-body`,children:[V===`about`&&a(_t,{memoryEnabled:I,reloadKey:On,onChanged:Nr,onOpenAdvanced:()=>Dn(`advanced`),showToast:X}),V===`advanced`&&a(u.Fragment,{children:Pt&&!_?s(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),e(`mem.loadingData`)]}):It?s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(Ke,{size:32})}),a(`p`,{children:e(`mem.loadFailed`)}),s(`button`,{className:`btn-secondary`,onClick:Q,style:{marginTop:12},children:[a(We,{size:14}),` `,e(`mem.retry`)]})]}):s(u.Fragment,{children:[!I&&s(`div`,{className:`mem-empty-state`,style:{margin:`40px 0`},children:[a(`div`,{className:`mem-empty-icon`,style:{opacity:.5},children:a(ot,{size:32})}),a(`p`,{style:{color:`var(--text-secondary)`,fontSize:14},children:e(`mem.offAdvanced`)})]}),I&&s(u.Fragment,{children:[_?.embedding_error&&s(`div`,{className:`mem-advanced-error`,role:`alert`,children:[a(Ke,{size:14}),` `,a(`bdi`,{children:_.embedding_error})]}),s(`div`,{className:`mem-stat-cards`,children:[s(`div`,{className:`mem-stat-card`,"data-accent":`purple`,children:[a(`div`,{className:`mem-stat-value`,children:_?.knowledge?.total??0}),a(`div`,{className:`mem-stat-label`,children:e(`mem.stat.stored`)}),a(`div`,{className:`mem-stat-sub`,children:(()=>{let t=wt(v);return t>0?e(`mem.stat.addedToday`,{n:t}):_?.knowledge?.by_category?e.compose(e=>Object.entries(_.knowledge.by_category).slice(0,3).map(([t,n])=>e(`mem.stat.categoryCount`,{category:w[t]?r(w[t]):t,n})).join(e(`mem.listSeparator`))):e(`mem.stat.noEntries`)})()})]}),s(`div`,{className:`mem-stat-card`,"data-accent":`gold`,children:[a(`div`,{className:`mem-stat-value`,children:_?.knowledge?.total_retrievals??0}),a(`div`,{className:`mem-stat-label`,children:e(`mem.stat.retrieved`)}),a(`div`,{className:`mem-stat-sub`,children:_?.knowledge?.total&&_?.knowledge?.total_retrievals?e(`mem.stat.avgRecall`,{n:(_.knowledge.total_retrievals/_.knowledge.total).toFixed(1)}):e(`mem.stat.noRecalls`)})]}),s(`div`,{className:`mem-stat-card`,"data-accent":`blue`,children:[a(`div`,{className:`mem-stat-value`,children:_?.conversations?.total_sessions??0}),a(`div`,{className:`mem-stat-label`,children:e(`mem.stat.sessions`)}),a(`div`,{className:`mem-stat-sub`,children:Ct(_?.conversations?.first_session??null,_?.conversations?.last_session??null,d(e))||e(`mem.stat.totalTurns`,{n:_?.conversations?.total_turns??0})})]}),s(`div`,{className:`mem-stat-card`,"data-accent":`green`,children:[a(`div`,{className:`mem-stat-value`,children:_?.tools?.total_calls??0}),a(`div`,{className:`mem-stat-label`,children:e(`mem.stat.toolCalls`)}),a(`div`,{className:`mem-stat-sub`,title:e(`mem.stat.toolsNotLogged`),children:e(`mem.stat.toolsExclMemory`,{n:_?.tools?.unique_tools??0})})]}),s(`div`,{className:`mem-stat-card`,"data-accent":`red`,children:[a(`div`,{className:`mem-stat-value`,children:_?.tools?.overall_success_rate!=null&&(_.tools.total_calls??0)>0?`${Math.round(_.tools.overall_success_rate*100)}%`:`—`}),a(`div`,{className:`mem-stat-label`,children:e(`mem.stat.successRate`)}),a(`div`,{className:`mem-stat-sub`,children:(_?.tools?.total_calls??0)>0?e(`mem.stat.errors`,{n:_?.tools?.total_errors??0}):e(`mem.stat.noToolCalls`)})]})]}),s(`div`,{className:`mem-section`,children:[s(`div`,{className:`mem-section-title mem-section-title-row`,children:[s(`span`,{className:`mem-section-title-left`,children:[a(lt,{size:14}),` `,e(`mem.activity.title`)]}),a(`div`,{className:`mem-range-tabs`,role:`group`,"aria-label":e(`mem.activity.range`),children:[1,7,30].map(t=>a(`button`,{className:`mem-range-tab${ir===t?` active`:``}`,onClick:()=>ar(t),children:e(t===1?`mem.activity.day1`:t===7?`mem.activity.days7`:`mem.activity.days30`)},t))})]}),v.length>0?s(u.Fragment,{children:[a(`div`,{className:`mem-activity-chart`,children:v.map((t,n)=>{let r=t.conversations+t.tool_calls+t.knowledge_added+t.errors,i=n===0||n===v.length-1||n%7==0,o=new Date(t.date+`T00:00:00`).toLocaleDateString(d(e),{month:`short`,day:`numeric`});return s(`div`,{className:`mem-activity-bar-group`,onMouseEnter:()=>zt(n),onMouseLeave:()=>zt(null),children:[t.errors>0&&a(`div`,{className:`mem-activity-bar errors`,style:{height:`${t.errors/ti*100}%`}}),t.knowledge_added>0&&a(`div`,{className:`mem-activity-bar knowledge`,style:{height:`${t.knowledge_added/ti*100}%`}}),t.tool_calls>0&&a(`div`,{className:`mem-activity-bar tool_calls`,style:{height:`${t.tool_calls/ti*100}%`}}),t.conversations>0&&a(`div`,{className:`mem-activity-bar conversations`,style:{height:`${t.conversations/ti*100}%`}}),i&&a(`span`,{className:`mem-activity-date-label`,children:o}),Rt===n&&r>0&&s(`div`,{className:`mem-activity-tooltip`,children:[a(`strong`,{children:o}),a(`br`,{}),t.conversations>0&&s(u.Fragment,{children:[e(`mem.activity.conversations`,{n:t.conversations}),a(`br`,{})]}),t.tool_calls>0&&s(u.Fragment,{children:[e(`mem.activity.toolCalls`,{n:t.tool_calls}),a(`br`,{})]}),t.knowledge_added>0&&s(u.Fragment,{children:[e(`mem.activity.learned`,{n:t.knowledge_added}),a(`br`,{})]}),t.errors>0&&a(u.Fragment,{children:e(`mem.stat.errors`,{n:t.errors})})]})]},t.date)})}),s(`div`,{className:`mem-activity-legend`,children:[s(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot conversations`}),` `,e(`mem.legend.conversations`)]}),s(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot tool_calls`}),` `,e(`mem.stat.toolCalls`)]}),s(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot knowledge`}),` `,e(`mem.legend.knowledge`)]}),s(`span`,{className:`mem-activity-legend-item`,children:[a(`span`,{className:`mem-activity-legend-dot errors`}),` `,e(`mem.legend.errors`)]})]})]}):s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(lt,{size:28})}),a(`p`,{children:e(`mem.activity.empty`)})]})]}),s(`div`,{className:`mem-section`,children:[s(`div`,{className:`mem-section-title mem-section-title-row`,children:[s(`span`,{className:`mem-section-title-left`,children:[a(Se,{size:14}),` `,e(`mem.knowledge.title`),y&&y.total>0&&a(`span`,{className:`mem-section-count`,children:y.total})]}),!dn&&!N&&s(`button`,{className:`mem-section-add-btn`,onClick:()=>fn(!0),title:e(`mem.knowledge.addTitle`),children:[a(Be,{size:13}),` `,e(`mem.knowledge.add`)]})]}),s(`div`,{className:`mem-filters`,children:[s(`div`,{className:`mem-category-pills`,role:`group`,"aria-label":e(`mem.knowledge.filterCategory`),children:[Tt.map(t=>a(`button`,{className:`mem-category-pill ${t}${O.includes(t)?` active`:``}`,onClick:()=>Hr(t),"aria-pressed":O.includes(t),children:e(w[t])},t)),O.length>0&&s(`button`,{className:`mem-category-pill clear`,onClick:()=>{Kt([]),j(0)},"aria-label":e(`mem.knowledge.clearAria`),children:[`✕ `,e(`mem.knowledge.clear`)]})]}),s(`select`,{className:`mem-filter-select`,value:qt,onChange:e=>{Jt(e.target.value),j(0)},"aria-label":e(`mem.knowledge.filterContext`),children:[a(`option`,{value:``,children:e(`mem.knowledge.allContexts`)}),ni.map(e=>a(`option`,{value:e,children:e},e))]}),s(`select`,{className:`mem-filter-select`,value:Yt,onChange:e=>{Xt(e.target.value),j(0)},"aria-label":e(`mem.knowledge.filterEntity`),children:[a(`option`,{value:``,children:e(`mem.knowledge.allEntities`)}),Mt.map(e=>s(`option`,{value:e.entity,children:[e.entity,` (`,e.count,`)`]},e.entity))]}),s(`div`,{className:`mem-filter-search-wrap`,children:[gr?a(`div`,{className:`mem-spinner-sm search-icon`,style:{width:12,height:12,borderWidth:1.5}}):a(Ae,{size:13,className:`search-icon`}),a(`input`,{className:`mem-filter-search`,type:`text`,placeholder:e(`mem.knowledge.searchPlaceholder`),value:Zt,onChange:e=>Mr(e.target.value),"aria-label":e(`mem.knowledge.search`)})]}),s(`label`,{className:`mem-filter-toggle`,title:e(`mem.knowledge.supersededTitle`),children:[a(`input`,{type:`checkbox`,checked:nn,onChange:e=>rn(e.target.checked)}),a(`span`,{children:e(`mem.knowledge.superseded`)})]})]}),(dn||N)&&s(`div`,{className:`mem-inline-form`,children:[s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.col.content`)}),a(`textarea`,{value:P.content,onChange:e=>F(t=>({...t,content:e.target.value})),placeholder:e(`mem.form.contentPlaceholder`)})]}),s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.col.category`)}),a(`select`,{value:P.category,onChange:e=>F(t=>({...t,category:e.target.value})),children:Tt.map(t=>a(`option`,{value:t,children:e(w[t])},t))})]}),s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.col.context`)}),a(`input`,{type:`text`,value:P.context,onChange:e=>F(t=>({...t,context:e.target.value})),placeholder:`global`})]}),s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.detail.domain`)}),a(`input`,{type:`text`,value:P.domain,onChange:e=>F(t=>({...t,domain:e.target.value})),placeholder:e(`mem.form.domainPlaceholder`)})]}),s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.col.entity`)}),a(`input`,{type:`text`,value:P.entity,onChange:e=>F(t=>({...t,entity:e.target.value})),placeholder:e(`mem.form.entityPlaceholder`)})]}),s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.form.dueAt`)}),a(`input`,{type:`text`,value:P.due_at,onChange:e=>F(t=>({...t,due_at:e.target.value})),placeholder:e(`mem.form.dueAtPlaceholder`)})]}),s(`div`,{className:`mem-inline-form-row`,children:[a(`label`,{children:e(`mem.form.sensitive`)}),s(`label`,{style:{display:`flex`,alignItems:`center`,gap:6,cursor:`pointer`,fontSize:12},children:[a(`input`,{type:`checkbox`,checked:P.sensitive,onChange:e=>F(t=>({...t,sensitive:e.target.checked}))}),e(`mem.form.sensitiveHint`)]})]}),s(`div`,{className:`mem-inline-form-actions`,children:[a(`button`,{className:`btn-secondary`,onClick:()=>{fn(!1),pn(null)},children:e(`mem.cancel`)}),a(`button`,{className:`btn-primary`,onClick:N?Fr:Pr,style:{padding:`8px 20px`,fontSize:13},children:e(N?`mem.form.update`:`mem.form.save`)})]})]}),y&&y.items.length>0?s(u.Fragment,{children:[a(`div`,{style:{overflowX:`auto`},children:s(`table`,{className:`mem-knowledge-table`,children:[a(`thead`,{children:s(`tr`,{children:[s(`th`,{onClick:()=>Ur(`category`),className:k===`category`?`sorted`:``,children:[e(`mem.col.category`),ei(`category`)]}),a(`th`,{children:e(`mem.col.content`)}),s(`th`,{onClick:()=>Ur(`context`),className:k===`context`?`sorted`:``,children:[e(`mem.col.context`),ei(`context`)]}),a(`th`,{children:e(`mem.col.entity`)}),s(`th`,{onClick:()=>Ur(`confidence`),className:k===`confidence`?`sorted`:``,children:[e(`mem.col.confidence`),ei(`confidence`)]}),a(`th`,{children:e(`mem.col.source`)}),s(`th`,{onClick:()=>Ur(`updated_at`),className:k===`updated_at`?`sorted`:``,children:[e(`mem.col.updated`),ei(`updated_at`)]}),s(`th`,{onClick:()=>Ur(`created_at`),className:k===`created_at`?`sorted`:``,children:[e(`mem.col.created`),ei(`created_at`)]}),a(`th`,{children:e(`mem.col.due`)}),a(`th`,{className:`mem-actions-cell`})]})}),a(`tbody`,{children:y.items.map(t=>{let n=Vt===t.id,r=t.has_embedding;return s(b.Fragment,{children:[s(`tr`,{className:`${t.superseded_by?`mem-superseded-row`:``} ${n?`mem-expanded-row`:``}`,onClick:()=>Ht(n?null:t.id),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),Ht(n?null:t.id))},tabIndex:0,role:`row`,"aria-expanded":n,style:{cursor:`pointer`},children:[a(`td`,{children:a(`span`,{className:`mem-cat-badge ${t.category}`,children:a(T,{value:t.category,keys:w})})}),a(`td`,{children:s(`div`,{className:`mem-content-cell`,title:t.content,children:[r!==void 0&&a(`span`,{className:`mem-embed-dot ${r?`embedded`:`missing`}`,title:e(r?`mem.knowledge.embedded`:`mem.knowledge.embedMissing`),children:a(g,{size:6,fill:`currentColor`})}),t.sensitive&&a(`span`,{className:`mem-sensitive-badge`,title:e(`mem.form.sensitive`),children:a(ot,{size:11})}),a(`span`,{className:t.sensitive&&!mn.has(t.id)?`mem-sensitive-blur`:t.superseded_by?`mem-superseded-text`:``,onClick:e=>{t.sensitive&&(e.stopPropagation(),hn(e=>{let n=new Set(e);return n.has(t.id)?n.delete(t.id):n.add(t.id),n}))},children:a(`bdi`,{children:t.content})})]})}),a(`td`,{children:a(`bdi`,{className:`mem-date-cell`,children:t.context})}),a(`td`,{children:t.entity?a(`span`,{className:`mem-entity-link`,onClick:e=>{e.stopPropagation(),Xt(t.entity),j(0)},title:e(`mem.knowledge.filterBy`,{entity:t.entity}),children:a(`bdi`,{children:t.entity})}):a(`span`,{className:`mem-date-cell`,children:`—`})}),a(`td`,{children:s(`div`,{className:`mem-confidence`,children:[a(`div`,{className:`mem-confidence-bar`,children:a(`div`,{className:`mem-confidence-fill ${xt(t.confidence)}`,style:{width:`${t.confidence*100}%`}})}),t.confidence.toFixed(2)]})}),a(`td`,{children:a(`bdi`,{className:`mem-date-cell`,children:t.source||`—`})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:S(t.updated_at,d(e)),children:C(t.updated_at,e)})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:S(t.created_at,d(e)),children:C(t.created_at,e)})}),a(`td`,{children:t.due_at?a(`span`,{className:`mem-due-badge ${bt(t.due_at)?`overdue`:`upcoming`}`,title:S(t.due_at,d(e)),children:C(t.due_at,e)}):a(`span`,{className:`mem-due-badge none`,children:`—`})}),a(`td`,{className:`mem-actions-cell`,children:s(`div`,{className:`mem-row-actions`,onClick:e=>e.stopPropagation(),children:[a(`button`,{className:`mem-row-action-btn`,onClick:()=>Rr(t),title:e(`mem.row.edit`),children:a(Ne,{size:13})}),a(`button`,{className:`mem-row-action-btn`,onClick:()=>Lr(t),title:e(t.sensitive?`mem.row.unmarkSensitive`:`mem.row.markSensitive`),children:t.sensitive?a(it,{size:13}):a(ot,{size:13})}),a(`button`,{className:`mem-row-action-btn`,onClick:()=>zr(t.id),title:e(`mem.row.copyId`),children:a(me,{size:13})}),a(`button`,{className:`mem-row-action-btn delete${z===t.id?` is-confirm`:``}`,onClick:()=>Ir(t.id),title:e(z===t.id?`mem.row.clickAgain`:`mem.row.delete`),"aria-label":e(z===t.id?`mem.row.confirmDeleteAria`:`mem.row.deleteAria`),children:z===t.id?a(`span`,{className:`mem-row-delete-label`,children:e(`mem.row.deleteConfirm`)}):a(ke,{size:13})})]})})]}),n&&a(`tr`,{className:`mem-detail-row`,children:a(`td`,{colSpan:10,children:s(`div`,{className:`mem-detail-panel`,children:[s(`div`,{className:`mem-detail-grid`,children:[s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.id`)}),a(`span`,{className:`mem-detail-value`,children:t.id})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.domain`)}),a(`bdi`,{className:`mem-detail-value`,children:t.domain||`—`})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.col.source`)}),a(`bdi`,{className:`mem-detail-value`,children:t.source||`—`})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.useCount`)}),a(`span`,{className:`mem-detail-value`,children:t.use_count??0})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.col.created`)}),a(`span`,{className:`mem-detail-value`,children:S(t.created_at,d(e))})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.col.updated`)}),a(`span`,{className:`mem-detail-value`,children:S(t.updated_at,d(e))})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.lastUsed`)}),a(`span`,{className:`mem-detail-value`,children:S(t.last_used,d(e))})]}),s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.remindedAt`)}),a(`span`,{className:`mem-detail-value`,children:S(t.reminded_at,d(e))})]}),t.superseded_by&&s(`div`,{className:`mem-detail-field`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.supersededBy`)}),a(`span`,{className:`mem-detail-value mem-detail-chain`,children:t.superseded_by})]}),t.metadata&&s(`div`,{className:`mem-detail-field mem-detail-full`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.metadata`)}),a(`span`,{className:`mem-detail-value`,children:a(`bdi`,{dir:`ltr`,children:typeof t.metadata==`object`?JSON.stringify(t.metadata,null,2):t.metadata})})]})]}),s(`div`,{className:`mem-detail-content-full`,children:[a(`span`,{className:`mem-detail-label`,children:e(`mem.detail.fullContent`)}),a(`div`,{className:`mem-detail-content-text`,children:a(`bdi`,{children:t.content})})]})]})})})]},t.id)})})]})}),s(`div`,{className:`mem-pagination`,children:[a(`span`,{children:e(`mem.page.range`,{from:A+1,to:Math.min(A+15,y.total),total:y.total})}),s(`div`,{className:`mem-pagination-btns`,children:[a(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":e(`mem.page.previous`),disabled:A===0,onClick:()=>j(Math.max(0,A-15)),children:a(f,{size:14})}),a(`button`,{type:`button`,className:`mem-page-btn`,"aria-label":e(`mem.page.next`),disabled:A+15>=y.total,onClick:()=>j(A+15),children:a(et,{size:14})})]})]})]}):s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(Se,{size:28})}),a(`p`,{children:e(Zt||O.length>0||qt||Yt?`mem.knowledge.noMatch`:`mem.knowledge.empty`)})]})]}),s(`div`,{className:`mem-two-col`,children:[s(`div`,{className:`mem-section`,children:[s(`div`,{className:`mem-section-title`,children:[a(Pe,{size:14}),` `,e(`mem.tools.title`),a(`span`,{className:`mem-section-note`,title:e(`mem.tools.noteTitle`),children:e(`mem.tools.note`)})]}),ut.length>0?a(`div`,{style:{overflowX:`auto`},children:s(`table`,{className:`mem-tool-table`,children:[a(`thead`,{children:s(`tr`,{children:[a(`th`,{children:e(`mem.tools.tool`)}),a(`th`,{children:e(`mem.tools.calls`)}),a(`th`,{children:e(`mem.tools.success`)}),a(`th`,{children:e(`mem.tools.denied`)}),a(`th`,{children:e(`mem.tools.avgTime`)}),a(`th`,{children:e(`mem.detail.lastUsed`)}),a(`th`,{children:e(`mem.tools.lastError`)})]})}),a(`tbody`,{children:ut.map(t=>s(`tr`,{children:[a(`td`,{children:a(`bdi`,{className:`mem-tool-name`,children:t.tool_name})}),a(`td`,{children:t.total_calls}),a(`td`,{children:s(`div`,{className:`mem-confidence`,children:[a(`div`,{className:`mem-confidence-bar`,style:{width:40},children:a(`div`,{className:`mem-confidence-fill ${St(t.success_rate)}`,style:{width:`${t.success_rate*100}%`}})}),s(`span`,{className:`mem-success-rate ${St(t.success_rate)}`,children:[Math.round(t.success_rate*100),`%`]})]})}),a(`td`,{children:t.denied_count??0}),a(`td`,{children:a(`bdi`,{dir:`ltr`,children:yt(t.avg_duration_ms)})}),a(`td`,{children:a(`span`,{className:`mem-date-cell`,title:S(t.last_used,d(e)),children:C(t.last_used,e)})}),a(`td`,{children:a(`bdi`,{className:`mem-tool-error`,title:t.last_error||``,children:t.last_error||`—`})})]},t.tool_name))})]})}):s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(Pe,{size:28})}),a(`p`,{children:e(`mem.tools.empty`)})]})]}),s(`div`,{className:`mem-section`,children:[s(`div`,{className:`mem-section-title`,children:[a(h,{size:14}),` `,e(`mem.upcoming.title`)]}),ht.length>0?a(`div`,{className:`mem-temporal-list`,children:ht.map(t=>{let n=bt(t.due_at);return s(`div`,{className:`mem-temporal-item ${n?`overdue`:`upcoming`}`,children:[a(`span`,{className:`mem-temporal-icon`,children:a(n?Ke:h,{size:16})}),s(`div`,{className:`mem-temporal-content`,children:[a(`div`,{className:`mem-temporal-text`,children:a(`bdi`,{children:t.content})}),s(`div`,{className:`mem-temporal-date`,children:[e(n?`mem.upcoming.overdue`:`mem.upcoming.due`,{when:C(t.due_at,e)}),t.context!==`global`&&s(u.Fragment,{children:[` `,`·`,` `,a(`bdi`,{children:t.context})]})]})]})]},t.id)})}):s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(m,{size:28})}),a(`p`,{children:e(`mem.upcoming.empty`)})]})]})]}),s(`div`,{className:`mem-section`,children:[s(`div`,{className:`mem-section-title`,children:[a(ee,{size:14}),` `,e(`mem.conv.title`)]}),s(`div`,{className:`mem-conv-search`,children:[a(Ae,{size:13,className:`search-icon`}),a(`input`,{type:`text`,placeholder:e(`mem.conv.searchPlaceholder`),value:an,onChange:e=>Br(e.target.value),"aria-label":e(`mem.conv.search`)}),an&&a(`button`,{className:`mem-search-clear`,onClick:()=>{on(``),cn(null)},"aria-label":e(`mem.conv.clearSearch`),children:a(Ge,{size:12})})]}),sn===null?pt.length>0?a(`div`,{className:`mem-conv-list`,children:pt.map(t=>s(`div`,{className:`mem-conv-item`,onClick:()=>Vr(t.session_id),children:[s(`div`,{className:`mem-conv-info`,children:[s(`div`,{className:`mem-conv-session-id`,children:[a(`bdi`,{children:He(t.session_id)}),t.consolidated&&a(`span`,{className:`mem-consolidated-badge`,title:e(`mem.conv.consolidated`),children:a(rt,{size:11})})]}),t.first_message&&a(`div`,{className:`mem-conv-preview`,children:a(`bdi`,{children:t.first_message})})]}),s(`div`,{className:`mem-conv-meta`,children:[a(`span`,{children:e.plural(`mem.conv.turns`,t.turn_count)}),a(`span`,{children:C(t.last_activity,e)})]})]},t.session_id))}):s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(ee,{size:28})}),a(`p`,{children:e(`mem.conv.empty`)})]}):sn.length>0?a(`div`,{className:`mem-conv-list`,children:sn.map(t=>s(`div`,{className:`mem-conv-item`,onClick:()=>Vr(t.session_id),children:[s(`div`,{className:`mem-conv-info`,children:[s(`div`,{className:`mem-conv-session-id`,children:[a(`span`,{className:`mem-conv-turn-role ${t.role}`,children:a(T,{value:t.role,keys:kt})}),` `,a(`bdi`,{children:He(t.session_id)})]}),a(`div`,{className:`mem-conv-preview`,children:a(`bdi`,{children:t.content})})]}),a(`div`,{className:`mem-conv-meta`,children:a(`span`,{children:C(t.timestamp,e)})})]},t.id))}):a(`div`,{className:`mem-empty`,children:a(`p`,{children:e(`mem.conv.noMatch`,{query:an})})})]}),M&&s(`div`,{className:`mem-conv-detail-overlay`,children:[s(`div`,{className:`mem-conv-detail-header`,children:[a(`h2`,{children:a(`bdi`,{children:He(M.sessionId)})}),s(`div`,{className:`mem-conv-detail-actions`,children:[ce.has(M.sessionId)&&a(`button`,{className:`btn-secondary`,onClick:()=>l(M.sessionId),children:e(`mem.conv.openChat`)}),a(`button`,{className:`btn-icon`,onClick:()=>un(null),"aria-label":e(`mem.conv.close`),children:a(Ge,{size:16})})]})]}),s(`div`,{className:`mem-conv-detail-body`,children:[M.turns.map(t=>s(`div`,{className:`mem-conv-turn`,children:[s(`div`,{className:`mem-conv-turn-header`,children:[a(`div`,{className:`mem-conv-turn-role ${t.role}`,children:a(T,{value:t.role,keys:kt})}),a(`span`,{className:`mem-conv-turn-time`,title:S(t.timestamp,d(e)),children:C(t.timestamp,e)})]}),a(`div`,{className:`mem-conv-turn-content`,children:a(`bdi`,{children:t.content})})]},t.id)),M.turns.length===0&&a(`div`,{className:`mem-empty`,children:e(`mem.conv.noTurns`)})]})]})]}),s(`div`,{className:`mem-section`,children:[s(`div`,{className:`mem-section-title`,children:[a(ot,{size:14}),` `,e(`mem.settings.title`),` `,a(`span`,{className:`mem-beta`,style:{fontSize:10,fontWeight:600,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`1px 6px`,borderRadius:4,marginInlineStart:6,verticalAlign:`middle`},children:e(`mem.beta`)})]}),s(`div`,{className:`mem-setting-row`,children:[s(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:e(`mem.settings.memory`)}),a(`span`,{className:`mem-setting-desc`,children:e(`mem.settings.memoryDesc`)})]}),a(`button`,{className:`mem-toggle${I?` mem-toggle-on`:``}`,disabled:L,onClick:async()=>{if(!I)B(`memory`);else{R(!0);try{let e=await p({memory_enabled:!1});gn(e.memory_enabled)}catch(n){t.system.warn(`Failed to disable memory`,n),X(e(`mem.toast.settingFailed`,{error:E(n)}),`error`)}finally{R(!1)}}},"aria-pressed":I,"aria-label":e(I?`mem.settings.memoryOn`:`mem.settings.memoryOff`),children:e.bare(I?`mem.on`:`mem.off`)})]}),En&&(()=>{let n={memory:{title:`mem.beta.memory.title`,description:`mem.beta.memory.desc`,bullets:[`mem.beta.memory.local`,`mem.beta.memory.lost`,`mem.beta.memory.disable`],buttonLabel:`mem.beta.memory.confirm`,onConfirm:async()=>{let t=await p({memory_enabled:!0});gn(t.memory_enabled),X(e(`mem.toast.memoryEnabled`),`info`)}},mcp:{title:`mem.beta.mcp.title`,description:`mem.beta.mcp.desc`,bullets:[`mem.beta.mcp.read`,`mem.beta.mcp.restart`,`mem.beta.mcp.debug`],buttonLabel:`mem.beta.mcp.confirm`,onConfirm:async()=>{let t=await p({mcp_memory_enabled:!0});vn(t.mcp_memory_enabled),X(e(`mem.toast.mcpEnabled`),`info`)}},discovery:{title:`mem.beta.discovery.title`,description:`mem.beta.discovery.desc`,bullets:[`mem.beta.discovery.collects`,`mem.beta.discovery.scans`,`mem.beta.discovery.local`],buttonLabel:`mem.beta.discovery.confirm`,onConfirm:async()=>{let t=await p({system_discovery_consent:!0});if(bn(t.system_discovery_consent),t.system_context_error)X(e(`mem.toast.discoveryScanFailed`,{error:t.system_context_error}),`error`);else{let n=t.system_context_refresh?.stored??0;X(e(`mem.toast.discoveryEnabled`,{n}),`info`)}Q()}}}[En];return s(u.Fragment,{children:[a(`div`,{"aria-hidden":`true`,style:{position:`fixed`,inset:0,background:`var(--bg-modal-overlay)`,zIndex:9998,backdropFilter:`blur(4px)`},onClick:()=>B(null)}),s(`div`,{ref:br,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:[s(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:16},children:[a(`span`,{className:`mem-beta`,style:{fontSize:11,fontWeight:700,color:`var(--accent-yellow)`,background:`var(--accent-yellow-dim)`,padding:`3px 10px`,borderRadius:4},children:e(`mem.beta`)}),a(`h2`,{id:`mem-beta-confirm-title`,style:{fontSize:16,fontWeight:600,color:`var(--text-primary)`},children:e(n.title)})]}),a(`p`,{id:`mem-beta-confirm-desc`,style:{fontSize:13,lineHeight:1.6,color:`var(--text-secondary)`,margin:`0 0 8px`},children:e(n.description)}),a(`ul`,{style:{fontSize:13,lineHeight:1.7,color:`var(--text-secondary)`,margin:`0 0 24px`,paddingInlineStart:20},children:n.bullets.map(t=>a(`li`,{children:e(t)},t))}),s(`div`,{style:{display:`flex`,justifyContent:`flex-end`,gap:10},children:[a(`button`,{className:`btn-secondary`,onClick:()=>B(null),style:{padding:`8px 20px`,fontSize:13,borderRadius:6},children:e(`mem.cancel`)}),a(`button`,{disabled:L,onClick:async()=>{R(!0);try{await n.onConfirm()}catch(n){t.system.warn(`Failed to update setting`,n),X(e(`mem.toast.settingFailed`,{error:E(n)}),`error`)}finally{R(!1),B(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(n.buttonLabel)})]})]})]})})(),s(`div`,{className:`mem-setting-row`,children:[s(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:e(`mem.settings.mcp`)}),a(`span`,{className:`mem-setting-desc`,children:e(`mem.settings.mcpDesc`)})]}),a(`button`,{className:`mem-toggle${_n?` mem-toggle-on`:``}`,disabled:L,onClick:async()=>{if(!_n)B(`mcp`);else{R(!0);try{let e=await p({mcp_memory_enabled:!1});vn(e.mcp_memory_enabled)}catch(n){t.system.warn(`Failed to update memory settings`,n),X(e(`mem.toast.settingFailed`,{error:E(n)}),`error`)}finally{R(!1)}}},"aria-label":e(`mem.settings.mcpToggle`),"aria-pressed":_n,children:e.bare(_n?`mem.on`:`mem.off`)})]}),s(`div`,{className:`mem-setting-row`,children:[s(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:e(`mem.settings.discovery`)}),a(`span`,{className:`mem-setting-desc`,children:e(`mem.settings.discoveryDesc`)})]}),a(`button`,{className:`mem-toggle${yn?` mem-toggle-on`:``}`,disabled:L,onClick:async()=>{if(!yn)B(`discovery`);else{R(!0);try{let e=await p({system_discovery_consent:!1});bn(e.system_discovery_consent)}catch(n){t.system.warn(`Failed to update system discovery setting`,n),X(e(`mem.toast.settingFailed`,{error:E(n)}),`error`)}finally{R(!1)}}},"aria-label":e(`mem.settings.discoveryToggle`),"aria-pressed":yn,children:e.bare(yn?`mem.on`:`mem.off`)})]}),s(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[s(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:e(`mem.settings.reinit`)}),a(`span`,{className:`mem-setting-desc`,children:e(`mem.settings.reinitDesc`)})]}),wn?s(`div`,{className:`mem-delete-confirm`,children:[a(`span`,{className:`mem-delete-confirm-label`,children:e(`mem.settings.sure`)}),a(`button`,{className:`mem-btn-danger`,disabled:L,onClick:async()=>{R(!0);try{let t=await ue();t.system_context.error?X(e(`mem.toast.server`,{message:t.system_context.error}),`error`):X(e(`mem.toast.reinitialized`,{cleared:t.cleared.knowledge,stored:t.system_context.stored}),`info`),Q()}catch(n){t.system.warn(`Failed to reinitialize memory`,n),X(e(`mem.toast.reinitFailed`,{error:E(n)}),`error`)}finally{R(!1),Tn(!1)}},children:e(`mem.settings.reinitConfirm`)}),a(`button`,{className:`btn-secondary`,onClick:()=>Tn(!1),style:{padding:`6px 14px`,fontSize:12},children:e(`mem.cancel`)})]}):a(`button`,{className:`mem-btn-danger`,disabled:L,onClick:()=>Tn(!0),children:e(`mem.settings.reinitButton`)})]}),s(`div`,{className:`mem-setting-row mem-setting-row-danger`,children:[s(`div`,{className:`mem-setting-info`,children:[a(`span`,{className:`mem-setting-label`,children:e(`mem.settings.deleteAll`)}),a(`span`,{className:`mem-setting-desc`,children:e(`mem.settings.deleteAllDesc`)})]}),xn?s(`div`,{className:`mem-delete-confirm`,children:[a(`span`,{className:`mem-delete-confirm-label`,children:e(`mem.settings.sure`)}),a(`button`,{className:`mem-btn-danger`,disabled:L,onClick:async()=>{R(!0);try{let t=await Me();X(e(`mem.toast.cleared`,{knowledge:t.knowledge,conversations:t.conversations}),`info`),Q()}catch(n){t.system.warn(`Failed to clear memory`,n),X(e(`mem.toast.clearFailed`,{error:E(n)}),`error`)}finally{R(!1),Sn(!1)}},children:e(`mem.settings.deleteConfirm`)}),a(`button`,{className:`btn-secondary`,onClick:()=>Sn(!1),style:{padding:`6px 14px`,fontSize:12},children:e(`mem.cancel`)})]}):a(`button`,{className:`mem-btn-danger`,disabled:L,onClick:()=>Sn(!0),children:e(`mem.settings.deleteButton`)})]})]}),_&&s(`div`,{className:`mem-db-footer`,children:[s(`span`,{children:[e(`mem.footer.database`),`: `,a(`bdi`,{dir:`ltr`,children:qe(_.db_size_bytes)}),_.knowledge?.avg_confidence!=null&&s(u.Fragment,{children:[` · `,e(`mem.footer.avgConfidence`,{n:_.knowledge.avg_confidence.toFixed(2)})]})]}),s(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[_.knowledge?.entity_count!=null&&_.knowledge.entity_count>0&&a(`span`,{children:e(`mem.footer.entities`,{n:_.knowledge.entity_count})}),_.knowledge?.sensitive_count!=null&&_.knowledge.sensitive_count>0&&s(`span`,{children:[a(ot,{size:10}),` `,e(`mem.footer.sensitive`,{n:_.knowledge.sensitive_count})]})]})]})]})}),V===`profile`&&s(`div`,{className:`mem-profile-grid`,children:[s(`div`,{className:`mem-profile-card`,children:[s(`div`,{className:`mem-profile-card-title`,children:[a(Ie,{size:16}),` `,e(`mem.disc.title`)]}),a(`p`,{className:`mem-profile-desc`,children:e(`mem.disc.desc`)}),a(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:H===`running`||H===`saving`,onClick:Xr,children:H===`running`?s(u.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` `,e(`mem.running`)]}):e(`mem.disc.run`)}),Wn.length>0&&a(`div`,{className:`mem-log`,ref:qn,children:Wn.map((e,t)=>a(`div`,{className:`mem-log-line ${e.kind}`,children:e.server?a(`bdi`,{children:e.text}):e.text},t))}),(H===`review`||H===`saving`||H===`done`)&&G.length>0&&s(`div`,{className:`mem-review-section`,children:[a(`div`,{className:`mem-review-header`,children:e(`mem.review.title`)}),a(`div`,{className:`mem-review-list`,children:G.map((e,t)=>s(`label`,{className:`mem-review-item`,children:[a(`input`,{type:`checkbox`,checked:e._checked,disabled:H===`saving`||H===`done`,onChange:()=>{K(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),a(`bdi`,{className:`mem-review-content`,children:e.content}),a(`span`,{className:`mem-source-badge`,children:e._source_name?a(`bdi`,{children:e._source_name}):a(T,{value:e.category,keys:w})}),s(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),s(`div`,{className:`mem-review-actions`,children:[a(`button`,{className:`btn-primary`,disabled:H===`saving`||H===`done`||G.filter(e=>e._checked).length===0,onClick:Zr,children:H===`saving`?s(u.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` `,e(`mem.saving`)]}):e(`mem.review.saveSelected`,{n:G.filter(e=>e._checked).length})}),s(`span`,{className:`mem-review-select-links`,children:[a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>K(e=>e.map(e=>({...e,_checked:!0}))),children:e(`mem.review.selectAll`)}),` / `,a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>K(e=>e.map(e=>({...e,_checked:!1}))),children:e(`mem.review.none`)})]})]})]}),H===`done`&&Gn!==null&&s(`div`,{className:`mem-profile-success`,children:[a(m,{size:14}),` `,e(`mem.disc.saved`,{n:Gn})]}),H===`review`&&G.length===0&&a(`div`,{className:`mem-profile-empty`,children:e(`mem.disc.empty`)})]}),s(`div`,{className:`mem-profile-card`,children:[s(`div`,{className:`mem-profile-card-title`,children:[a(Re,{size:16}),` `,e(`mem.inf.title`)]}),a(`p`,{className:`mem-profile-desc`,children:e(`mem.inf.desc`)}),a(`p`,{className:`mem-profile-note`,children:e(`mem.inf.note`)}),s(`label`,{className:`mem-profile-checkbox`,children:[a(`input`,{type:`checkbox`,checked:er,onChange:e=>tr(e.target.checked),disabled:q===`running`||q===`saving`}),e(`mem.inf.browser`)]}),a(`button`,{className:`btn-primary mem-profile-run-btn`,disabled:q===`running`||q===`saving`,onClick:Qr,children:q===`running`?s(u.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` `,e(`mem.running`)]}):e(`mem.inf.run`)}),Xn.length>0&&a(`div`,{className:`mem-log`,ref:nr,children:Xn.map((e,t)=>a(`div`,{className:`mem-log-line ${e.kind}`,children:e.server?a(`bdi`,{children:e.text}):e.text},t))}),(q===`review`||q===`saving`||q===`done`)&&Y.length>0&&s(`div`,{className:`mem-review-section`,children:[a(`div`,{className:`mem-review-header`,children:e(`mem.review.title`)}),a(`div`,{className:`mem-review-list`,children:Y.map((e,t)=>s(`label`,{className:`mem-review-item`,children:[a(`input`,{type:`checkbox`,checked:e._checked,disabled:q===`saving`||q===`done`,onChange:()=>{Zn(e=>e.map((e,n)=>n===t?{...e,_checked:!e._checked}:e))}}),a(`bdi`,{className:`mem-review-content`,children:e.content}),a(`span`,{className:`mem-domain-badge ${jt[e.domain]||`gray`}`,children:a(T,{value:e.domain,keys:At})}),s(`span`,{className:`mem-conf-badge`,children:[Math.round(e.confidence*100),`%`]})]},t))}),s(`div`,{className:`mem-review-actions`,children:[a(`button`,{className:`btn-primary`,disabled:q===`saving`||q===`done`||Y.filter(e=>e._checked).length===0,onClick:$r,children:q===`saving`?s(u.Fragment,{children:[a(`div`,{className:`mem-spinner-sm`}),` `,e(`mem.saving`)]}):e(`mem.review.saveSelected`,{n:Y.filter(e=>e._checked).length})}),s(`span`,{className:`mem-review-select-links`,children:[a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>Zn(e=>e.map(e=>({...e,_checked:!0}))),children:e(`mem.review.selectAll`)}),` / `,a(`button`,{type:`button`,className:`mem-link-btn`,onClick:()=>Zn(e=>e.map(e=>({...e,_checked:!1}))),children:e(`mem.review.none`)})]})]})]}),q===`done`&&Qn!==null&&s(`div`,{className:`mem-profile-success`,children:[a(m,{size:14}),` `,e(`mem.inf.saved`,{n:Qn})]}),q===`review`&&Y.length===0&&a(`div`,{className:`mem-profile-empty`,children:e(`mem.inf.empty`)})]})]}),V===`goals`&&s(`div`,{className:`mem-goals-tab`,children:[a(`div`,{className:`mem-goals-stats-row`,children:[`queued`,`in_progress`,`completed`,`failed`].map(t=>s(`div`,{className:`mem-goals-stat-pill mem-goal-status-${t.replace(`_`,`-`)}`,children:[a(`span`,{className:`mem-goals-stat-n`,children:Mn?.goals[t]??0}),a(`span`,{className:`mem-goals-stat-label`,children:e(Et[t])})]},t))}),An.filter(e=>e.status===`pending_approval`).length>0&&s(`div`,{className:`mem-goals-approval-banner`,children:[s(`div`,{className:`mem-goals-approval-title`,children:[a(te,{size:14}),` `,e(`mem.goals.suggested`,{n:An.filter(e=>e.status===`pending_approval`).length})]}),An.filter(e=>e.status===`pending_approval`).map(t=>s(`div`,{className:`mem-goals-approval-item`,children:[s(`div`,{className:`mem-goals-approval-text`,children:[a(`strong`,{children:a(`bdi`,{children:t.title})}),a(`bdi`,{children:t.description})]}),s(`div`,{className:`mem-goals-approval-actions`,children:[a(`button`,{className:`btn-danger-sm`,onClick:()=>Ar(()=>xe(t.id),`mem.goals.rejectFailed`),children:e(`mem.goals.reject`)}),a(`button`,{className:`btn-secondary`,onClick:()=>Ar(()=>Ue(t.id),`mem.goals.acceptFailed`),children:e(`mem.goals.accept`)})]})]},t.id))]}),a(`div`,{className:`mem-goals-toolbar`,children:s(`button`,{className:`btn-primary`,onClick:()=>Vn(e=>!e),children:[a(Be,{size:14}),` `,e(`mem.goals.new`)]})}),Bn&&s(`div`,{className:`mem-goals-add-form`,children:[a(`input`,{className:`mem-input`,placeholder:e(`mem.goals.titlePlaceholder`),value:Hn.title,onChange:e=>Un(t=>({...t,title:e.target.value}))}),a(`textarea`,{className:`mem-input`,placeholder:e(`mem.goals.descPlaceholder`),rows:2,value:Hn.description,onChange:e=>Un(t=>({...t,description:e.target.value}))}),s(`div`,{className:`mem-goals-form-row`,children:[s(`select`,{className:`mem-select`,value:Hn.priority,onChange:e=>Un(t=>({...t,priority:e.target.value})),children:[a(`option`,{value:`low`,children:e(`mem.goals.priorityLow`)}),a(`option`,{value:`medium`,children:e(`mem.goals.priorityMedium`)}),a(`option`,{value:`high`,children:e(`mem.goals.priorityHigh`)})]}),a(`button`,{className:`btn-primary`,onClick:()=>{Hn.title.trim()&&Ar(async()=>{await Ze(Hn),Un({title:``,description:``,priority:`medium`}),Vn(!1)},`mem.goals.createFailed`)},children:e(`mem.goals.create`)}),a(`button`,{className:`btn-secondary`,onClick:()=>Vn(!1),children:e(`mem.cancel`)})]})]}),Pn?s(`div`,{className:`mem-loading`,children:[a(`div`,{className:`mem-spinner`}),` `,e(`mem.goals.loading`)]}):An.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).length===0?s(`div`,{className:`mem-empty`,children:[a(`div`,{className:`mem-empty-icon`,children:a(st,{size:32})}),a(`p`,{children:e(`mem.goals.empty`)})]}):a(`div`,{className:`mem-goals-list`,children:An.filter(e=>e.status!==`pending_approval`&&e.status!==`rejected`).map(t=>s(`div`,{className:`mem-goal-card mem-goal-status-${t.status.replace(`_`,`-`)}`,children:[s(`div`,{className:`mem-goal-header`,role:`button`,tabIndex:0,"aria-expanded":In===t.id,onClick:()=>Ln(e=>e===t.id?null:t.id),onKeyDown:e=>{e.target===e.currentTarget&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),Ln(e=>e===t.id?null:t.id))},children:[s(`div`,{className:`mem-goal-header-left`,children:[a(`span`,{className:`mem-goal-status-dot status-${t.status.replace(`_`,`-`)}`}),a(`bdi`,{className:`mem-goal-title`,children:t.title}),a(`span`,{className:`mem-goal-priority mem-priority-${t.priority}`,children:a(T,{value:t.priority,keys:Dt})}),t.source!==`user`&&s(`span`,{className:`mem-goal-source-badge`,children:[a(te,{size:10}),` `,a(T,{value:t.source,keys:Ot})]})]}),s(`div`,{className:`mem-goal-header-right`,children:[s(`span`,{className:`mem-goal-task-count`,children:[a(Qe,{size:12}),s(`bdi`,{dir:`ltr`,children:[t.tasks.filter(e=>e.status===`completed`).length,`/`,t.tasks.length]})]}),t.status===`queued`&&a(`button`,{className:`mem-goal-action-btn mem-goal-cancel-btn`,onClick:e=>{e.stopPropagation(),Ar(()=>ze(t.id),`mem.goals.cancelFailed`)},children:e(`mem.cancel`)}),Rn===t.id?a(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn mem-goal-delete-confirm`,onClick:e=>{e.stopPropagation(),zn(null),Ar(()=>Xe(t.id),`mem.goals.deleteFailed`)},children:e(`mem.row.deleteConfirm`)}):a(`button`,{className:`mem-goal-action-btn mem-goal-delete-btn`,"aria-label":e(`mem.goals.deleteAria`,{title:t.title}),onClick:e=>{e.stopPropagation(),zn(t.id)},children:a(ke,{size:12})}),a(we,{size:14,className:In===t.id?`mem-chevron-open`:``})]})]}),In===t.id&&s(`div`,{className:`mem-goal-body`,children:[t.description&&a(`p`,{className:`mem-goal-desc`,children:a(`bdi`,{children:t.description})}),t.progress_notes&&a(`p`,{className:`mem-goal-progress`,children:a(`bdi`,{children:t.progress_notes})}),t.tasks.length>0?a(`div`,{className:`mem-task-list`,children:t.tasks.map(e=>s(`div`,{className:`mem-task-row mem-task-status-${e.status}`,children:[a(`span`,{className:`mem-task-dot status-${e.status}`}),a(`bdi`,{className:`mem-task-desc`,children:e.description}),a(`span`,{className:`mem-task-status-label`,children:a(T,{value:e.status,keys:Et})}),e.result&&a(`bdi`,{className:`mem-task-result`,children:e.result})]},e.id))}):a(`p`,{className:`mem-goal-no-tasks`,children:e(`mem.goals.noTasks`)})]})]},t.id))})]})]}),Ut.length>0&&a(`div`,{className:`mem-toast-container`,"aria-live":`polite`,children:Ut.map(e=>s(`div`,{className:`mem-toast mem-toast-${e.type}`,role:`status`,children:[e.type===`success`&&a(m,{size:14}),e.type===`error`&&a(Ke,{size:14}),e.type===`info`&&a(Se,{size:14}),a(`span`,{children:e.text})]},e.id))})]})}export{Mt as MemoryDashboard};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./browser-KnDALPx_.js","./rolldown-runtime-XKyaHtl9.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,a as n,c as r,l as i,q as a,s as o}from"./useT-BTgbCEQm.js";import{X as s}from"./api-CiSwuQUq.js";import{Dt as c,Ht as l,Mt as u,X as d,ft as f,i as p,nt as m,rt as h,u as g,ut as _}from"./index-DL8_h-hw.js";var v=e(a(),1),y=null,b=`https://ngrok.com/download`;function x({isOpen:a,onClose:x,onStop:S,error:C,setupCommands:w,onRetry:T}){let[E,D]=(0,v.useState)(null),[O,k]=(0,v.useState)(!1),[A,j]=(0,v.useState)(null),M=n(),N=Array.isArray(w),P=!!C||N,[F,I]=(0,v.useState)(null),L=(0,v.useRef)(null);m(a,x);let R=(0,v.useRef)(null);d(R,a),g(R,a);let z=(0,v.useCallback)(async()=>{try{let e=await s();return D(e),e}catch(e){return t.system.error(`Failed to fetch tunnel status`,e),null}},[]);(0,v.useEffect)(()=>{if(!a||P)return;z();let e=setInterval(async()=>{let t=await z();t?.active&&t?.url&&clearInterval(e)},2e3);return()=>clearInterval(e)},[a,P,z]),(0,v.useEffect)(()=>{if(!E?.active||!E.url||!E.token||!L.current)return;let n=`${E.url}/?token=${E.token}`;t.system.info(`Generating QR code for: ${n}`),(async()=>{if(I(null),!y)try{let t=await p(()=>import(`./browser-KnDALPx_.js`).then(t=>e(t.default,1)),__vite__mapDeps([0,1]),import.meta.url);y=t.default||t}catch{t.system.error(`QR code library not available - install with: npm install qrcode`),I(`QR code unavailable on this build. Use the link below instead.`);return}let r=getComputedStyle(document.documentElement),i=r.getPropertyValue(`--text-primary`).trim(),a=r.getPropertyValue(`--bg-primary`).trim();if(!i||!a)t.system.error(`QR code skipped: --text-primary/--bg-primary did not resolve. styles/index.css must be loaded before this modal renders.`),I(`QR code unavailable — the theme did not load. Use the link below instead.`);else try{await y.toCanvas(L.current,n,{width:200,margin:2,color:{dark:i,light:a}})}catch(e){t.system.error(`QR code generation failed`,e),I(`QR code could not be drawn. Use the link below instead.`)}})()},[E?.active,E?.url,E?.token]);let B=(0,v.useRef)(null),V=(0,v.useCallback)(()=>{if(!E?.url||!E?.token)return;let e=`${E.url}/?token=${E.token}`;navigator.clipboard.writeText(e).then(()=>{k(!0),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>k(!1),2e3)})},[E]),H=(0,v.useCallback)(e=>{navigator.clipboard.writeText(e).then(()=>{j(e),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>j(null),2e3)}).catch(e=>t.system.error(`Could not copy the ngrok install command`,e))},[]);if((0,v.useEffect)(()=>()=>{B.current&&clearTimeout(B.current)},[]),!a)return null;let U=E?.active&&E?.url&&E?.token?`${E.url}/?token=${E.token}`:``;return r(`div`,{ref:R,className:`modal-overlay`,onClick:x,role:`dialog`,"aria-modal":`true`,"aria-label":`Mobile access`,children:i(`div`,{className:`modal-panel mobile-modal`,onClick:e=>e.stopPropagation(),children:[i(`div`,{className:`modal-header`,children:[i(`h3`,{style:{display:`flex`,alignItems:`center`,gap:`8px`},children:[r(_,{size:18}),`Mobile access`]}),r(`button`,{className:`btn-icon`,onClick:x,"aria-label":`Close`,children:r(h,{size:18})})]}),i(`div`,{className:`modal-body mobile-modal-body`,children:[i(`div`,{className:`tunnel-status`,children:[r(`span`,{className:`status-dot ${E?.active?`active`:N?`setup`:C?`error`:`starting`}`}),r(`span`,{children:E?.active?`Tunnel active`:N?M(`mobile.ngrokRequired`):C?`Couldn't start mobile access`:`Starting tunnel...`}),!E?.active&&!P&&r(`span`,{className:`tunnel-spinner`})]}),N&&i(`div`,{className:`tunnel-setup`,children:[r(`div`,{className:`tunnel-setup-title`,children:M(`mobile.setupTitle`)}),i(`p`,{children:[M(`mobile.setupIntro`),` `,w.length>0?M(`mobile.setupInstall`):M(`mobile.setupDownload`)]}),w.map(e=>i(`div`,{className:`tunnel-url-row tunnel-setup-command`,children:[r(`input`,{type:`text`,readOnly:!0,dir:`ltr`,value:e,"aria-label":M(`mobile.installCommand`)}),i(`button`,{className:`copy-url-btn ${A===e?`copied`:``}`,onClick:()=>H(e),title:M(`mobile.copyCommand`),children:[r(A===e?l:u,{size:13}),M(A===e?`mobile.copied`:`mobile.copy`)]})]},e)),i(`a`,{href:b,target:`_blank`,rel:`noopener noreferrer`,className:`tunnel-setup-link`,children:[M(`mobile.downloadPage`),` `,r(c,{size:11})]})]}),C&&!N&&r(`div`,{className:`tunnel-error`,children:C}),!P&&r(`div`,{className:`qr-code-area`,children:E?.active?i(o.Fragment,{children:[r(`canvas`,{ref:L,hidden:!!F}),F&&r(`div`,{className:`qr-placeholder error`,children:F})]}):i(`div`,{className:`qr-placeholder`,children:[r(`div`,{className:`placeholder-spinner`}),r(`span`,{children:`Connecting...`})]})}),E?.active&&U&&i(`div`,{className:`tunnel-url-area`,children:[r(`label`,{children:`Mobile URL`}),i(`div`,{className:`tunnel-url-row`,children:[r(`input`,{type:`text`,readOnly:!0,value:U}),i(`button`,{className:`copy-url-btn ${O?`copied`:``}`,onClick:V,title:`Copy URL`,children:[r(O?l:u,{size:13}),O?`Copied`:`Copy`]})]})]}),E?.active&&E?.publicIp&&E?.url&&!E.url.includes(`ngrok-free.app`)&&i(`div`,{className:`tunnel-password-hint`,children:[r(`label`,{children:`Tunnel password`}),r(`div`,{className:`tunnel-password-value`,children:E.publicIp}),r(`span`,{className:`tunnel-password-note`,children:`Enter this when the tunnel page asks for a password`})]}),!P&&r(`div`,{className:`mobile-instructions`,children:i(`ol`,{children:[r(`li`,{children:F?`Open the mobile URL above on your phone`:`Scan the QR code with your phone's camera`}),E?.url&&!E.url.includes(`ngrok-free.app`)&&r(`li`,{children:`Enter the tunnel password shown above when prompted`}),r(`li`,{children:`Chat with GAIA from your mobile device`}),r(`li`,{children:`Your data stays secure via encrypted tunnel`})]})}),E?.active&&!C&&i(`div`,{className:`mobile-install-hint`,children:[r(`div`,{className:`mobile-install-hint-title`,children:M(`mobileAccess.installTitle`)}),r(`p`,{children:M(`mobileAccess.installSteps`)}),r(`p`,{children:M(`mobileAccess.linkLifetime`)})]}),i(`div`,{className:`mobile-access-actions`,children:[E?.active&&S&&r(`button`,{className:`btn-danger`,onClick:S,title:`Close the tunnel and revoke the mobile URL`,children:`Stop tunnel`}),N&&T&&i(`button`,{className:`btn-primary`,onClick:T,children:[r(f,{size:13}),` `,M(`mobile.retry`)]}),r(`button`,{className:`btn-secondary`,onClick:x,children:`Close`})]})]})]})})}export{x as MobileAccessModal};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,N as r,O as i,a,c as o,d as s,i as c,l,q as u,r as d,s as f,t as p}from"./useT-BTgbCEQm.js";import{n as m,t as h}from"./zap-nquO2dVq.js";import{ht as g}from"./api-CiSwuQUq.js";import{Nt as _,X as v,ct as y,gt as ee,mt as te,n as b,nt as x,rt as S,u as C}from"./index-DL8_h-hw.js";var w={name:`play`,size:24,node:[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]};w.node;var T=n(w),E=e(u(),1),D=8e3,O={active:`schedules.status.active`,paused:`schedules.status.paused`,cancelled:`schedules.status.cancelled`};function k(e,t,n,r){if(!e)return t(`schedules.time.never`);let i=new Date(e),a=(n||new Date).getTime()-i.getTime(),o=Math.floor(a/1e3);if(o<0){let e=Math.abs(o);if(e<60)return t(`schedules.time.inSeconds`,{n:e});let n=Math.floor(e/60);if(n<60)return t(`schedules.time.inMinutes`,{n});let r=Math.floor(n/60);return r<24?t(`schedules.time.inHours`,{n:r}):t(`schedules.time.inDays`,{n:Math.floor(r/24)})}if(o<60)return t(`time.justNow`);let s=Math.floor(o/60);if(s<60)return t(`time.minutesAgo`,{n:s});let c=Math.floor(s/60);return c<24?t(`time.hoursAgo`,{n:c}):i.toLocaleDateString(r,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}function A(e,t,n=d.bare,r){if(!e)return n(`schedules.time.never`);let i=k(e,n,t,r),a=new Date(e);return a.getTime()<=(t||new Date).getTime()?i:n(`schedules.time.clockIn`,{clock:a.toLocaleString(r,{weekday:`short`,hour:`numeric`,minute:`2-digit`}),relative:i})}function j(e){if(!e)return!1;let t=new Date(e).getTime()-Date.now();return t>0&&t<6e4}function M(e,t,n=0){let r=new Date(2e3,0,1,t,n);return new Intl.DateTimeFormat(p(e),{hour:`numeric`,minute:`2-digit`}).format(r)}function N(e,t){let[n,r]=e.split(`:`).map(Number);return M(t,n,r)}function P(e,t,n){let r=`${e}.${new Intl.PluralRules(n.locale).select(t)}`;return i(r)?r:null}var F=e=>e.length===5&&e.every(e=>e<5),I=e=>e.length===2&&e.includes(5)&&e.includes(6);function L(e,t,n){if(F(e))return n(`schedules.desc.days.weekdays`);if(I(e))return n(`schedules.desc.days.weekends`);if(e.length===7)return n(`schedules.desc.days.every`);let r=P(`schedules.desc.dayList`,e.length,t);return r?n(r,{days:e.map(e=>n(`schedules.dayName.${e}`)).join(n(`schedules.desc.dayJoin`))}):null}function R(e,t,n,r){let{kind:i,count:a,unit:o,days:s,time:c,start_hour:l,end_hour:u}=e,d=e=>c?n(`schedules.desc.at`,{when:e,time:N(c,r)}):e;if(i===`every`||i===`window`){let e=a&&o?P(`schedules.span.${o}`,a,t):null,c=s?L(s,t,n):void 0;if(!e||c===null)return null;let d=n(e,{n:a});if(i===`every`)return c?n(`schedules.desc.everyOn`,{span:d,days:c}):n(`schedules.desc.every`,{span:d});if(l==null||u==null)return null;let f=n(`schedules.hours`,{start:M(r,l),end:M(r,u)});return c?n(`schedules.desc.windowOn`,{span:d,hours:f,days:c}):n(`schedules.desc.window`,{span:d,hours:f})}if(i===`daily`)return c?d(n(`schedules.desc.daily`)):null;if(i!==`days`||!s?.length)return null;if(s.length===7)return d(n(`schedules.desc.daily`));if(F(s))return d(n(`schedules.desc.weekdays`));if(I(s))return d(n(`schedules.desc.weekends`));let f=L(s,t,n);return f&&d(n(`schedules.desc.onDays`,{days:f}))}function ne(e,t){return!e||R(e,t,t.bare,t)===null?null:t.compose((n,r)=>R(e,t,n,c(r))??``)}function re(e,t){return e.length===5&&!e.includes(5)&&!e.includes(6)?t(`schedules.days.weekdays`):e.length===2&&e.includes(5)&&e.includes(6)?t(`schedules.days.weekends`):e.length===7?t(`schedules.days.every`):e.map(e=>t(`schedules.day.${e}`)).join(t(`schedules.days.join`))}function z({schedule:e}){let n=a(),{selectedSchedule:i,selectSchedule:c,updateScheduleStatus:u,runScheduleNow:d,deleteSchedule:g,results:v,resultsLoading:te,loadSchedules:x,loadResults:S}=b(),{setCurrentSession:C,setShowSchedules:w}=s(),M=i===e.name,N=ne(e.description_parts,n),[P,F]=(0,E.useState)(!1),I=(0,E.useRef)(null),L=(0,E.useCallback)(()=>{I.current&&=(clearTimeout(I.current),null)},[]);(0,E.useEffect)(()=>L,[L]);let[R,re]=(0,E.useState)(()=>new Date),z=(0,E.useRef)(null);(0,E.useEffect)(()=>{let t=e.status===`active`&&j(e.next_run_at);return t&&!z.current?z.current=setInterval(()=>{re(new Date),e.next_run_at&&new Date(e.next_run_at).getTime()<=Date.now()&&x()},1e3):!t&&z.current&&(clearInterval(z.current),z.current=null),()=>{z.current&&=(clearInterval(z.current),null)}},[e.status,e.next_run_at,x]);let B=(0,E.useRef)(e.last_run_at);(0,E.useEffect)(()=>{M&&e.last_run_at!==B.current&&(B.current=e.last_run_at,S(e.name))},[M,e.last_run_at,e.name,S]);let V=e.last_run_at&&Date.now()-new Date(e.last_run_at).getTime()<5e3,H=(0,E.useCallback)(n=>{n.stopPropagation();let r=e.status===`active`?`paused`:`active`;t.ui.info(`Schedule "${e.name}": ${e.status} -> ${r}`),u(e.name,r)},[e.name,e.status,u]),U=(0,E.useCallback)(n=>{n.stopPropagation(),t.ui.info(`Schedule "${e.name}": run now`),d(e.name)},[e.name,d]),W=(0,E.useCallback)(n=>{n.stopPropagation(),L(),P?(t.ui.info(`Deleting schedule "${e.name}"`),g(e.name)):(F(!0),I.current=setTimeout(()=>{I.current=null,F(!1)},D))},[e.name,P,g,L]),G=(0,E.useCallback)(n=>{n.stopPropagation(),e.session_id&&(t.ui.info(`Opening chat session for schedule "${e.name}"`),C(e.session_id),w(!1))},[e.session_id,e.name,C,w]);return l(`div`,{className:`schedule-card ${M?`selected`:``} ${V?`just-ran`:``}`,onClick:()=>c(M?null:e.name),children:[l(`div`,{className:`schedule-card-header`,children:[o(`span`,{className:`schedule-card-name`,dir:`auto`,children:e.name}),o(`span`,{className:`schedule-card-status ${e.status}`,children:n(O[e.status])})]}),o(`div`,{className:`schedule-card-prompt`,dir:`auto`,children:e.prompt}),l(`div`,{className:`schedule-card-meta`,children:[l(`span`,{title:r(N??e.description),children:[o(_,{size:11}),` `,N??o(`bdi`,{children:e.description})]}),o(`span`,{children:n(`schedules.card.runs`,{n:e.run_count})}),e.error_count>0&&o(`span`,{children:n(`schedules.card.errors`,{n:e.error_count})}),o(`span`,{children:n.compose(t=>t(`schedules.card.last`,{when:k(e.last_run_at,t,void 0,p(n))}))}),o(`span`,{children:n.compose(t=>t(`schedules.card.next`,{when:A(e.next_run_at,R,t,p(n))}))})]}),e.last_error&&o(`div`,{className:`schedule-card-error`,children:n(`schedules.card.lastFailed`,{error:e.last_error})}),l(`div`,{className:`schedule-card-actions`,children:[e.session_id&&l(`button`,{className:`btn-sm chat`,onClick:G,title:n(`schedules.card.openChatTitle`),children:[o(m,{size:11}),` `,n(`schedules.card.openChat`)]}),l(`button`,{className:`btn-sm`,onClick:U,disabled:e.running,title:n(`schedules.card.runNowTitle`),children:[o(h,{size:11}),` `,n(e.running?`schedules.card.running`:`schedules.card.runNow`)]}),o(`button`,{className:`btn-sm`,onClick:H,title:n(e.status===`active`?`schedules.card.pause`:`schedules.card.resume`),children:e.status===`active`?l(f.Fragment,{children:[o(ee,{size:11}),` `,n(`schedules.card.pause`)]}):l(f.Fragment,{children:[o(T,{size:11}),` `,n(`schedules.card.resume`)]})}),l(`button`,{className:`btn-sm danger`,onClick:W,title:n(`schedules.card.delete`),children:[o(y,{size:11}),` `,n(P?`schedules.card.confirmDelete`:`schedules.card.delete`)]})]}),M&&l(`div`,{className:`schedule-results`,children:[o(`h4`,{children:n(`schedules.history`)}),te?o(`p`,{className:`schedule-results-empty`,children:n(`schedules.historyLoading`)}):v.length===0?o(`p`,{className:`schedule-results-empty`,children:n(`schedules.historyEmpty`)}):o(`div`,{className:`schedule-results-list`,children:v.map(e=>l(`div`,{className:`schedule-result-item`,children:[o(`div`,{className:`schedule-result-time`,children:n.compose(t=>k(e.executed_at,t,void 0,p(n)))}),e.error?o(`div`,{className:`schedule-result-content schedule-result-error`,children:o(`bdi`,{children:e.error})}):o(`div`,{className:`schedule-result-content`,children:e.result?o(`bdi`,{children:e.result}):n(`schedules.noOutput`)})]},e.id))})]})]})}function B(){let e=a(),{setShowSchedules:n}=s(),{schedules:r,loading:i,error:u,actionError:d,loadSchedules:m,createSchedule:h,dismissActionError:y}=b(),ee=(0,E.useCallback)(()=>n(!1),[n]);x(!0,ee);let w=(0,E.useRef)(null);v(w,!0),C(w,!0);let[T,D]=(0,E.useState)(!1),[O,k]=(0,E.useState)(``),[A,j]=(0,E.useState)(``),[P,F]=(0,E.useState)(``),[I,L]=(0,E.useState)(null),[R,B]=(0,E.useState)(!1),[V,H]=(0,E.useState)(!1),[U,W]=(0,E.useState)(null),G=(0,E.useId)(),K=`${G}-when`,q=`${G}-when-error`,J=`${G}-name`,Y=`${G}-prompt`,X=!R&&I!==null&&!I.valid,Z=(0,E.useRef)(null);(0,E.useEffect)(()=>{if(!O.trim())L(null);else return Z.current&&clearTimeout(Z.current),Z.current=window.setTimeout(async()=>{B(!0);try{let e=await g(O);L(e)}catch{L(null)}finally{B(!1)}},400),()=>{Z.current&&clearTimeout(Z.current)}},[O]);let Q=(0,E.useRef)(null);(0,E.useEffect)(()=>(t.ui.info(`Schedule Manager opened`),m(),Q.current=window.setInterval(()=>m(),5e3),()=>{Q.current&&clearInterval(Q.current),y()}),[m,y]);let $=O.trim()&&A.trim()&&P.trim()&&(I===null||I.valid),ie=(0,E.useCallback)(async()=>{if($){H(!0),W(null);try{await h(A.trim(),O.trim(),P.trim()),k(``),j(``),F(``),L(null),D(!1),t.ui.info(`Schedule "${A}" created`)}catch(t){W(t instanceof Error?t.message:e(`schedules.createFailed`))}finally{H(!1)}}},[$,A,O,P,h,e]);return o(`div`,{ref:w,className:`modal-overlay`,onClick:()=>n(!1),role:`dialog`,"aria-modal":`true`,"aria-label":e(`schedules.title`),children:l(`div`,{className:`modal-panel schedule-modal`,onClick:e=>e.stopPropagation(),children:[l(`div`,{className:`modal-header`,children:[o(`h3`,{children:e(`schedules.title`)}),o(`button`,{className:`btn-icon`,onClick:()=>n(!1),"aria-label":e(`schedules.close`),children:o(S,{size:18})})]}),l(`div`,{className:`modal-body`,children:[o(`section`,{className:`schedule-section`,children:T?l(`div`,{className:`schedule-create-form`,children:[l(`div`,{className:`schedule-field`,children:[o(`label`,{className:`schedule-field-label`,htmlFor:K,children:e(`schedules.when`)}),o(`textarea`,{id:K,className:`schedule-nl-input`,placeholder:e.bare(`schedules.whenPlaceholder`),value:O,onChange:e=>k(e.target.value),"aria-invalid":X,"aria-describedby":X?q:void 0,autoFocus:!0,rows:2})]}),(I||R)&&o(`div`,{className:`schedule-parsed-preview ${I?.valid?`valid`:`invalid`}`,"aria-live":`polite`,children:R?o(`span`,{className:`schedule-parsed-loading`,children:e(`schedules.parsing`)}):I?l(f.Fragment,{children:[I.valid?o(`div`,{className:`schedule-parsed-description`,children:ne(I.description_parts,e)??o(`bdi`,{children:I.description})}):l(`div`,{id:q,children:[o(`div`,{className:`schedule-parsed-description`,children:e(`schedules.notUnderstood`)}),o(`div`,{className:`schedule-parsed-hint`,children:o(`bdi`,{children:I.description})})]}),I.valid&&I.next_run_at&&o(`div`,{className:`schedule-parsed-next`,children:e(`schedules.nextRun`,{when:new Date(I.next_run_at).toLocaleString(p(e))})}),I.valid&&l(`div`,{className:`schedule-parsed-details`,children:[I.time_of_day&&l(`span`,{className:`schedule-parsed-tag`,children:[o(_,{size:10}),` `,N(I.time_of_day,e)]}),I.start_hour!=null&&I.end_hour!=null&&l(`span`,{className:`schedule-parsed-tag`,children:[o(_,{size:10}),` `,e.compose((e,t)=>e(`schedules.hours`,{start:M(c(t),I.start_hour),end:M(c(t),I.end_hour)}))]}),I.days_of_week&&o(`span`,{className:`schedule-parsed-tag`,children:e.compose(e=>re(I.days_of_week,e))})]})]}):null}),l(`div`,{className:`schedule-field`,children:[o(`label`,{className:`schedule-field-label`,htmlFor:J,children:e(`schedules.name`)}),o(`div`,{className:`schedule-form-row`,children:o(`input`,{id:J,type:`text`,placeholder:e(`schedules.namePlaceholder`),value:A,onChange:e=>j(e.target.value),className:!A.trim()&&O.trim()?`schedule-field-missing`:``})})]}),l(`div`,{className:`schedule-field`,children:[o(`label`,{className:`schedule-field-label`,htmlFor:Y,children:e(`schedules.prompt`)}),o(`textarea`,{id:Y,className:`schedule-prompt-input ${!P.trim()&&O.trim()?`schedule-field-missing`:``}`,placeholder:e(`schedules.promptPlaceholder`),value:P,onChange:e=>F(e.target.value)})]}),U&&o(`p`,{className:`schedule-form-error`,children:o(`bdi`,{children:U})}),l(`div`,{className:`schedule-create-actions`,children:[o(`button`,{className:`btn-secondary`,onClick:()=>{D(!1),W(null),L(null),k(``),j(``),F(``)},children:e(`schedules.cancel`)}),o(`button`,{className:`btn-primary`,onClick:ie,disabled:!$||V,children:e(V?`schedules.creating`:`schedules.create`)})]})]}):l(`button`,{className:`btn-primary`,onClick:()=>D(!0),children:[o(te,{size:14}),` `,e(`schedules.new`)]})}),l(`section`,{className:`schedule-section`,children:[o(`h4`,{children:e(`schedules.list`)}),d&&l(`div`,{className:`schedule-action-error`,role:`alert`,children:[o(`span`,{children:o(`bdi`,{children:d})}),o(`button`,{className:`btn-icon`,onClick:y,"aria-label":e(`schedules.dismissError`),children:o(S,{size:14})})]}),i?o(`p`,{className:`schedule-empty`,children:e(`schedules.loading`)}):u?o(`p`,{className:`schedule-empty`,children:e(`schedules.loadFailed`)}):r.length===0?o(`p`,{className:`schedule-empty`,children:e(`schedules.empty`)}):o(`div`,{className:`schedule-list`,children:r.map(e=>o(z,{schedule:e},e.id))})]})]})]})})}export{B as ScheduleManager};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{F as e,o as t}from"./useT-BTgbCEQm.js";var n=`gaia:draft:`,r=e=>`chat:${e}`,i=`new-chat`;function a(t){try{return localStorage.getItem(n+t)??``}catch(n){return e.ui.warn(`Couldn't read the saved draft for ${t}`,n),``}}function o(t,r){try{r?localStorage.setItem(n+t,r):localStorage.removeItem(n+t)}catch(n){e.ui.warn(`Couldn't save the draft for ${t}`,n)}}function s(e){o(e,``)}function c(e){if(!(e instanceof L)||e.httpStatus!==409||!e.body)return null;let{code:t,acknowledge:n}=e.body;return(t===`no_fit`||t===`low_disk`)&&typeof n==`string`?e.body:null}async function l(){return V(`GET`,`/onboarding/preflight`)}async function u(e=!1){return V(`GET`,`/setup/check?skip_chat_model=${e}`)}async function d(e,t=!1,n={}){return V(`POST`,`/setup/run`,{skip_chat_model:e,gaia_lemonade:t,acknowledge_low_disk:!!n.acknowledgeLowDisk,keep_trying:!!n.keepTrying,extra_models:n.extraModels??[],server_only:!!n.serverOnly,upgrade_embedded:!!n.upgradeEmbedded})}async function f(e){return V(`POST`,`/setup/cancel`,e?{model_id:e}:void 0)}async function p(e,t){return V(`POST`,`/setup/models/skip`,{model_id:e,skipped:t})}async function m(e,t={}){return V(`POST`,`/setup/models/download`,{model_id:e,acknowledge_low_disk:!!t.acknowledgeLowDisk,keep_trying:!!t.keepTrying})}async function h(e){return V(`POST`,`/setup/models/remove`,{model_id:e})}async function g(){return V(`GET`,`/setup/status`)}async function ee(){return V(`GET`,`/setup/plan`)}async function te(e,t=!1){return V(`POST`,`/setup/chat-model`,{model_id:e,acknowledge_no_fit:t})}async function ne(){return V(`POST`,`/setup/npu/recheck`)}async function re(){return V(`POST`,`/setup/npu/memlock-fix`)}async function ie(e){return V(`POST`,`/setup/vision-model`,{model_id:e})}async function ae(e){return V(`GET`,`/setup/needs/${e}`)}async function oe(e){return V(`GET`,e==null?`/gpu-memory`:`/gpu-memory?setting_gb=${e}`)}async function se(e){return V(`POST`,`/gpu-memory/apply`,{setting_gb:e,confirm:!0})}async function ce(){return V(`POST`,`/gpu-memory/revert`,{confirm:!0})}async function le(e){return V(`POST`,`/gpu-memory/pending`,{setting_gb:e})}async function ue(){return V(`DELETE`,`/gpu-memory/pending`)}async function de(){return V(`GET`,`/onboarding/start`)}async function fe(){return V(`POST`,`/setup/report`)}async function pe(e){let n=await fetch(`${t()}/setup/report/${encodeURIComponent(e)}`,{headers:B});if(!n.ok)throw new L(`Couldn't read the report (HTTP ${n.status}).`,n.status,await n.text().catch(()=>``),null);return n.blob()}async function me(){return V(`GET`,`/connectors`)}async function he(e){return V(`GET`,`/connectors/${e}`)}async function ge(e,t,n=[]){return V(`POST`,`/connectors/${e}/authorize`,{scopes:t,grant_agents:n},B)}async function _e(e,t,n=[]){return V(`POST`,`/connectors/${e}/authorize-device`,{scopes:t,grant_agents:n},B)}async function ve(e,t){return V(`POST`,`/connectors/${e}/configure`,{config:t},B)}async function ye(e){await V(`DELETE`,`/connectors/${e}`,void 0,B)}async function be(e){return V(`POST`,`/connectors/${e}/enable`,{},B)}async function _(e){return V(`POST`,`/connectors/${e}/disable`,{},B)}async function v(){return V(`GET`,`/connectors/agent-mcps`)}async function y(e){return V(`GET`,`/connectors/${e}/grants`)}async function b(e,t,n){await V(`PUT`,`/connectors/${e}/grants/${encodeURIComponent(t)}`,{scopes:n},B)}async function x(e,t){await V(`DELETE`,`/connectors/${e}/grants/${encodeURIComponent(t)}`,void 0,B)}async function S(e){return V(`GET`,`/connectors/${e}/activations`)}async function C(e,t,n){return V(`PUT`,`/connectors/${e}/activations/${encodeURIComponent(t)}`,n?{scopes:n}:{},B)}async function w(e,t){await V(`DELETE`,`/connectors/${e}/activations/${encodeURIComponent(t)}`,void 0,B)}async function T(e){return V(`POST`,`/chat/cancel`,{session_id:e})}async function E(e,t){return V(`POST`,`/chat/followup`,{session_id:e,text:t})}async function D(e){return V(`GET`,`/chat/followup/${encodeURIComponent(e)}`)}async function O(e){return V(`GET`,`/chat/context/${encodeURIComponent(e)}`)}async function k(e){return V(`GET`,`/chat/performance/${encodeURIComponent(e)}`)}async function A(e,t,n){return V(`POST`,`/chat/retry-with`,{session_id:e,message_id:t,model:n})}async function j(e,t,n){return V(`POST`,`/chat/retry-with/choose`,{session_id:e,message_id:t,keep:n})}async function M(){return V(`GET`,`/chat/active`)}async function N(e,t,n={}){return V(`POST`,`/chat/confirm-tool`,{session_id:e,approved:t,always:n.always??!1,...n.confirmId?{confirm_id:n.confirmId}:{}})}async function xe(e,t,n){return V(`POST`,`/chat/user-input`,{session_id:e,request_id:t,value:n})}async function Se(e){return V(`GET`,`/chat/permissions/${encodeURIComponent(e)}`)}async function Ce(){return V(`GET`,`/chat/permissions`)}async function we(e){return V(`PUT`,`/chat/permissions`,{mode:e})}async function Te(e,t){return V(`PUT`,`/chat/permissions/${encodeURIComponent(e)}`,{mode:t})}async function Ee(e,t){let n=t?`?key=${encodeURIComponent(t)}`:``;return V(`DELETE`,`/chat/permissions/${encodeURIComponent(e)}/grants${n}`)}var P=t();function F(e){try{let t=JSON.parse(e).detail;return Array.isArray(t)?t.map(e=>e?.msg??JSON.stringify(e)).join(`; `)||e:t&&typeof t==`object`&&typeof t.message==`string`?t.message:t&&typeof t!=`string`?JSON.stringify(t):t||e}catch{return e}}function I(e){try{let t=JSON.parse(e).detail?.status;return typeof t==`string`?t:null}catch{return null}}function De(e){try{let t=JSON.parse(e).detail;return Array.isArray(t)?t.map(e=>Array.isArray(e?.loc)?e.loc[e.loc.length-1]:void 0).filter(e=>typeof e==`string`):[]}catch{return[]}}function Oe(e){try{let t=JSON.parse(e).detail;return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}var L=class extends Error{httpStatus;detail;reason;fields;body;constructor(e,t,n,r,i=[],a=null){super(e),this.name=`ApiError`,this.httpStatus=t,this.detail=n,this.reason=r,this.fields=i,this.body=a}};function R(e){return e.trim().toLowerCase()===`internal server error`}function ke(e){let t=e.trim();return t!==``&&!R(t)&&!/^[<{[]/.test(t)}function z(e,t){switch(e){case 403:return t||`Access denied.`;case 404:return t||`The requested item was not found.`;case 413:return t||`File too large to process.`;case 500:return ke(t)?t:`Server error. Please try again.`;case 502:return`Service unavailable. Is the backend running?`;case 503:return t||`Service unavailable.`;default:return t||`Request failed (HTTP ${e})`}}var B={"x-gaia-ui":`1`,"x-gaia-client":`agent-ui`},Ae=/key|token|secret|password/i;function je(e){return!e||typeof e!=`object`||Array.isArray(e)?e:Object.fromEntries(Object.entries(e).map(([e,t])=>[e,Ae.test(e)&&typeof t==`string`&&t?`***`:t]))}async function V(t,n,r,i,a){let o=`${P}${n}`,s=e.api.time();e.api.info(`${t} ${o}`,r===void 0?``:{body:je(r)});let c=r===void 0?{}:{"Content-Type":`application/json`},l={method:t,headers:{...B,...i,...c},body:r===void 0?void 0:JSON.stringify(r),signal:a},u;try{u=await fetch(o,l)}catch(n){throw e.api.error(`${t} ${o} - network error`,n),n}if(!u.ok){let n=await u.text().catch(()=>``);e.api.error(`${t} ${o} - HTTP ${u.status}`,{errorText:n});let r=F(n);throw new L(z(u.status,r),u.status,r,I(n),De(n),Oe(n))}let d=u.headers.get(`content-type`)||``;if(!d.includes(`application/json`)){let r=await u.text().catch(()=>``);if(u.status===204||r.trim()===``){e.api.timed(`${t} ${o} -> ${u.status} (no body)`,s);return}throw e.api.error(`${t} ${o} -> ${u.status} (non-JSON body)`,{contentType:d,preview:r.slice(0,200)}),Error(`${t} ${n}: expected JSON, got ${d||`no Content-Type`} (HTTP ${u.status}: ${r.slice(0,120)})`)}let f=await u.json();return e.api.timed(`${t} ${o} -> ${u.status}`,s,f),f}async function Me(e){return V(`GET`,`/system/status`,void 0,void 0,e)}async function Ne(){return V(`POST`,`/system/warm-up`)}async function Pe(){return V(`GET`,`/system/warm-up`)}async function Fe(){return V(`GET`,`/system/model-server`)}async function Ie(e){return V(`PUT`,`/system/model-server/backend`,{backend:e})}async function Le(){return V(`GET`,`/settings`)}async function Re(e){return V(`PUT`,`/settings`,e)}async function H(e,t,n=!1){return V(`POST`,`/system/load-model`,{model_name:e,ctx_size:t,force:n})}async function ze(e,t,n=e=>window.confirm(e)){try{return await H(e,t),!0}catch(r){if(!(r instanceof L)||r.httpStatus!==409)throw r;return n(`${r.detail}
|
|
2
|
-
|
|
3
|
-
Load ${e} anyway?`)?(await H(e,t,!0),!0):!1}}async function Be(e,t=!1){return V(`POST`,`/system/download-model`,{model_name:e,force:t})}async function Ve(){return V(`GET`,`/agents`)}async function He(e){return V(`POST`,`/agents/install`,{id:e})}async function Ue(e){return V(`GET`,`/agents/${encodeURIComponent(e)}/install-status`)}async function We(){return V(`GET`,`/lemonade/target`)}async function Ge(){return V(`GET`,`/lemonade/detect`)}async function Ke(e){try{return await V(`POST`,`/lemonade/target`,e)}catch(e){throw e instanceof L&&e.httpStatus===502&&e.detail?new L(e.detail,e.httpStatus,e.detail,e.reason,e.fields):e}}async function qe(){return V(`GET`,`/providers`)}async function Je(){return V(`GET`,`/providers/active`)}async function Ye(e,t){return V(`POST`,`/providers/${encodeURIComponent(e)}/connect`,t)}var Xe=2e3;async function Ze(e,t,n,r=()=>!1){for(;;)try{return await Ye(e,t)}catch(e){if(!(e instanceof L)||e.httpStatus!==409||r())throw e;n(e.detail),await new Promise(e=>setTimeout(e,Xe))}}async function Qe(e){return V(`DELETE`,`/providers/${encodeURIComponent(e)}/key`)}async function $e(e){return V(`GET`,`/providers/${encodeURIComponent(e)}/models`)}async function et(e){return V(`GET`,`/providers/local/context?model=${encodeURIComponent(e)}`)}async function tt(e,t){return V(`PUT`,`/providers/local/context`,{model:e,ctx_size:t})}async function nt(){return V(`GET`,`/providers/local/status`)}async function rt(e=!1){return V(`POST`,`/providers/local/restart`,{confirm:e})}async function it(e){return V(`POST`,`/providers/select`,{model:e})}async function at(e,t){return V(`POST`,`/providers/local/custom/check`,{url:e,quant:t||null})}async function ot(e,t){return V(`POST`,`/providers/local/custom`,{url:e,quant:t||null})}async function st(e){return V(`DELETE`,`/providers/local/custom/${encodeURIComponent(e)}`)}async function ct(e){return V(`GET`,`/spending/prices/${encodeURIComponent(e)}`)}async function lt(){return V(`GET`,`/spending`)}async function ut(e){return V(`PUT`,`/spending/limit`,{limit_usd:e})}async function dt(){return V(`POST`,`/spending/allow-month`)}async function ft(){return V(`GET`,`/skills`)}async function pt(){let e=new Map,t=0;for(let n=0;;n+=200){let r=await V(`GET`,`/sessions?limit=200&offset=${n}`);t=r.total;for(let t of r.sessions)e.has(t.id)||e.set(t.id,t);if(r.sessions.length<200||n+200>=t)break}return{sessions:[...e.values()],total:t}}async function mt(e={}){return V(`POST`,`/sessions`,e)}async function ht(e,t){return V(`PUT`,`/sessions/${e}`,t)}async function gt(e){await V(`DELETE`,`/sessions/${e}`),s(r(e))}async function _t(e){return V(`GET`,`/sessions/${e}`)}async function vt(e,t){return V(`PUT`,`/sessions/${e}/pin`,{pinned:t})}async function yt(e,t,n){return V(`GET`,`/sessions/search?${new URLSearchParams({q:e,include_automated:String(t)})}`,void 0,void 0,n)}async function bt(e){return V(`POST`,`/sessions/${e}/read`)}async function xt(e){return V(`PATCH`,`/sessions/${e}/private`)}async function St(e){let{total:t}=await V(`GET`,`/sessions/${e}/messages?limit=1&offset=0`);return t}async function Ct(e){let t=`/sessions/${e}/messages`,n=await V(`GET`,`${t}?limit=100&offset=0`),r=[...n.messages],i=n.total;for(;r.length<i;){let e=await V(`GET`,`${t}?limit=${Math.min(100,i-r.length)}&offset=${r.length}`);if(e.messages.length===0)throw Error(`Incomplete transcript received. Please reload the conversation.`);r.push(...e.messages)}return{messages:r,total:i}}async function wt(e){return V(`GET`,`/sessions/${e}/export?format=markdown`)}async function Tt(e,t){return V(`DELETE`,`/sessions/${e}/messages/${t}`)}async function Et(e,t){return V(`DELETE`,`/sessions/${e}/messages/${t}/and-below`)}var Dt=new Set([`status`,`step`,`thinking`,`commentary`,`plan`,`tool_start`,`tool_end`,`tool_result`,`tool_args`,`tool_confirm`,`agent_error`,`permission_request`,`needs_confirmation`,`needs_input`,`policy_alert`,`followup_taken`,`followup_returned`,`followup_unavailable`,`context_usage`]);function Ot(t,n,r,i,a,o,s){let c;c=typeof r==`function`?{onChunk:r,onAgentEvent:()=>{},onDone:i||(()=>{}),onError:a||(t=>{e.stream.error(`Unhandled stream error`,t)})}:r;let l=new AbortController,u=e.stream.time();e.stream.info(`Starting SSE stream for session=${t}`,{messageLength:n.length});let d=Y(l,c,U,jt);return fetch(`${P}/chat/send`,{method:`POST`,headers:{...B,"Content-Type":`application/json`},body:JSON.stringify({session_id:t,message:n,stream:!0,...o?{agent_type:o}:{},...s?{device:s}:{}}),signal:l.signal}).then(e=>(d.received(),d.connected(),X(e,c,u,{silentCloseIsError:!0}))).catch(t=>{d.received(),d.timedOut()?(e.stream.error(`No answer to /chat/send within ${U/1e3}s`),c.onError(new J(`send`,U))):t.name===`AbortError`?e.stream.warn(`Stream aborted by user`):(e.stream.error(`Stream fetch error`,t),c.onError(t))}),l}var kt=3e4,At=6e5,U=9e4,jt=3e3,W=`Waiting for GAIA to start this answer…`,G=3e4,K=class extends Error{idleMs;constructor(e){super(`The connection to GAIA went silent for ${Math.round(e/1e3)} s.`),this.idleMs=e,this.name=`StreamStalledError`}},q=class extends Error{cause;unreachable;constructor(e,t=!1){super(`The connection to GAIA was cut: ${e instanceof Error?e.message:String(e)}`),this.cause=e,this.unreachable=t,this.name=`StreamDroppedError`}},J=class extends Error{endpoint;timeoutMs;constructor(e,t){super(`GAIA did not start answering within ${Math.round(t/1e3)} s.`),this.endpoint=e,this.timeoutMs=t,this.name=`StreamTimeoutError`}};function Y(e,t,n,r){let i=!1,a=r===void 0?void 0:setTimeout(()=>{t.onAgentEvent({type:`status`,status:`working`,phase:`waiting`,message:W})},r),o=setTimeout(()=>{i=!0,e.abort()},n),s=!1;return{received:()=>{clearTimeout(a),clearTimeout(o)},connected:()=>{s||(s=!0,t.onConnected?.())},timedOut:()=>i}}async function Mt(e,t){let n,r=new Promise((e,r)=>{n=setTimeout(()=>r(new K(t)),t)});try{return await Promise.race([e.read(),r])}finally{clearTimeout(n)}}async function X(t,n,r,{silentCloseIsError:i=!1}={}){if(e.stream.info(`SSE connection opened -> HTTP ${t.status}`),!t.ok){let r=await t.text().catch(()=>``);e.stream.error(`SSE connection failed: HTTP ${t.status}`,r);let i=F(r),a=i&&!R(i)?i:z(t.status,i);n.onError(new L(a,t.status,i,I(r)));return}let a=t.body?.getReader();if(!a){e.stream.error(`No response body reader available`),n.onError(Error(`No response body`));return}let o=new TextDecoder,s=``,c=!1,l=0,u=0,d=0,f=!1,p=!1,m=!1;try{for(;;){let t;try{t=await Mt(a,f?At:kt)}catch(t){if(t?.name===`AbortError`)throw t;if(!(t instanceof K)){if(e.stream.error(`SSE connection cut mid-stream`,t),c||p)return;if(m)break;throw new q(t)}if(e.stream.error(`SSE stream silent for ${t.idleMs/1e3}s; dropping the connection`),await a.cancel().catch(t=>e.stream.warn(`Could not cancel the stalled stream`,t)),c||p)return;if(m)break;throw t}let{done:i,value:h}=t;if(i){e.stream.debug(`SSE reader done (stream ended)`);break}s+=o.decode(h,{stream:!0});let g=s.split(`
|
|
4
|
-
`);s=g.pop()||``;for(let t of g)if(t.startsWith(`data: `)){let i=t.slice(6).trim();if(!i)continue;try{let t=JSON.parse(i);if(f=t.type===`status`&&t.phase===`queued`,t.type===`chunk`)l++,u+=(t.content||``).length,(l<=3||l%50==0)&&e.stream.debug(`Chunk #${l} (+${(t.content||``).length} chars)`),n.onChunk(t);else if(t.type===`answer`)n.onChunk(t);else if(t.type===`done`)c=!0,e.stream.timed(`Stream complete: ${l} chunks, ${u} chars, ${d} agent events`,r),n.onDone(t);else if(t.type===`error`)e.stream.error(`Stream error event:`,t.content),p=!0,n.onError(Error(t.content||`Unknown error`));else if(t.type===`agent_created`)e.stream.info(`Agent created: ${t.agent_id}`),n.onAgentCreated?.(t);else if(t.type===`mcp_status`){let n=t.servers??[];e.stream.debug(`MCP status: ${n.length} server(s)`,n);for(let t of n)t.connected||e.stream.warn(`MCP server "${t.name}" is not connected: ${t.error??`no error reported`}`)}else Dt.has(t.type)?(d++,t.type===`agent_error`&&!t.recoverable&&(m=!0),e.stream.debug(`Agent event: ${t.type}`,t),n.onAgentEvent(t)):e.stream.warn(`Unknown SSE event type: ${t.type}`,t)}catch{e.stream.warn(`Malformed SSE data, skipping`,{raw:i.slice(0,100)})}}}}finally{a.releaseLock()}if(!c){if(e.stream.timed(`SSE connection closed without done event: ${l} chunks, ${d} agent events`,r),i&&l===0&&d===0&&!p){n.onError(Error(`GAIA closed the connection before any answer arrived. Send the message again; if it keeps happening, check the GAIA server log.`));return}n.onDone({type:`done`})}}function Nt(t,n){let r=new AbortController,i=e.stream.time();e.stream.info(`Attaching to background run for session=${t}`);let a=Y(r,n,G);return fetch(`${P}/chat/attach?session_id=${encodeURIComponent(t)}`,{method:`GET`,signal:r.signal}).then(r=>{if(a.received(),a.connected(),r.status===404)e.stream.info(`Run for session=${t} finished before the attach`),n.onDone({type:`done`,content:``});else return X(r,n,i)}).catch(t=>{a.received(),a.timedOut()?(e.stream.error(`No answer to /chat/attach within ${G/1e3}s`),n.onError(new J(`attach`,G))):t.name===`AbortError`?e.stream.warn(`Run attach detached by client`):t instanceof TypeError?(e.stream.error(`Run attach could not connect`,t),n.onError(new q(t,!0))):(e.stream.error(`Run attach fetch error`,t),n.onError(t))}),r}async function Pt(){return V(`GET`,`/documents`)}async function Ft(e){return V(`POST`,`/documents/upload-path`,{filepath:e})}async function It(t){let n=`${P}/documents/upload`,r=e.api.time();e.api.info(`POST ${n}`,{fileName:t.name,size:t.size});let i=new FormData;i.append(`file`,t);let a;try{a=await fetch(n,{method:`POST`,headers:B,body:i})}catch(t){throw e.api.error(`POST ${n} - network error`,t),t}if(!a.ok){let t=await a.text().catch(()=>``);e.api.error(`POST ${n} - HTTP ${a.status}`,{errorText:t});let r=F(t);throw new L(z(a.status,r),a.status,r,I(t))}let o=await a.json();return e.api.timed(`POST ${n} -> ${a.status}`,r,o),o}async function Lt(e){return V(`DELETE`,`/documents/${e}`)}async function Rt(e){return V(`GET`,`/documents/${e}/status`)}function zt(e,t){let n=new URL(`${P}/documents/${encodeURIComponent(e)}/file`,window.location.href);return t&&(n.hash=`page=${t}`),n.href}async function Bt(e){return V(`POST`,`/documents/${e}/cancel`)}async function Vt(e){return V(`POST`,`/documents/${e}/reindex`)}async function Ht(e,t){return V(`POST`,`/sessions/${e}/documents`,{document_id:t})}async function Ut(e,t){return V(`DELETE`,`/sessions/${e}/documents/${t}`)}async function Wt(e){return V(`GET`,`/files/browse${e?`?path=${encodeURIComponent(e)}`:``}`)}async function Gt(e,t=!0){return V(`POST`,`/documents/index-folder`,{folder_path:e,recursive:t})}async function Kt(e,t=!0){return V(`POST`,`/files/open`,{path:e,reveal:t})}async function qt(e){return V(`POST`,`/files/open`,{path:e,launch:!0})}async function Jt(e){return V(`POST`,`/files/status`,{paths:e})}async function Yt(t){let n=`${P}/files/upload`,r=e.api.time();e.api.info(`POST ${n}`,{fileName:t.name,size:t.size});let i=new FormData;i.append(`file`,t);let a=await fetch(n,{method:`POST`,headers:B,body:i});if(!a.ok){let t=await a.text().catch(()=>``);e.api.error(`POST ${n} - HTTP ${a.status}`,{errorText:t});let r=F(t);throw new L(z(a.status,r),a.status,r,I(t))}let o=await a.json();return e.api.timed(`POST ${n} -> ${a.status}`,r,o),o}async function Xt(e,t,n){let r=new URLSearchParams({query:e});return t&&r.set(`file_types`,t),n&&r.set(`max_results`,String(n)),V(`GET`,`/files/search?${r}`)}async function Zt(e,t){let n=new URLSearchParams({path:e});return t&&n.set(`lines`,String(t)),V(`GET`,`/files/preview?${n}`)}async function Qt(){return V(`POST`,`/tunnel/start`)}async function $t(){return V(`POST`,`/tunnel/stop`)}async function en(){return V(`GET`,`/tunnel/status`)}async function tn(){return V(`GET`,`/mcp/status`)}async function nn(){return V(`GET`,`/schedules`)}function Z(){return Intl.DateTimeFormat().resolvedOptions().timeZone||void 0}async function rn(e,t,n){return V(`POST`,`/schedules`,{name:e,interval:t,prompt:n,timezone:Z()})}async function an(e,t){return V(`PUT`,`/schedules/${encodeURIComponent(e)}`,{status:t})}async function on(e){return V(`POST`,`/schedules/${encodeURIComponent(e)}/run`)}async function sn(e){return V(`DELETE`,`/schedules/${encodeURIComponent(e)}`)}async function cn(e,t=20){return V(`GET`,`/schedules/${encodeURIComponent(e)}/results?limit=${t}`)}async function ln(e){return V(`POST`,`/schedules/parse`,{input:e,timezone:Z()})}async function Q(e){return V(`GET`,`/sessions/${encodeURIComponent(e)}/changes`)}async function un(e,t){return V(`GET`,`/sessions/${encodeURIComponent(e)}/changes/${encodeURIComponent(t)}/diff`)}async function dn(e,t,n=!1){return V(`POST`,`/sessions/${encodeURIComponent(e)}/changes/${encodeURIComponent(t)}/undo`,{force:n})}async function fn(){return V(`GET`,`/settings/undo`)}async function pn(e,t){return V(`PUT`,`/settings/undo`,{retention_days:e,max_mb:t})}var $=e=>`/sessions/${encodeURIComponent(e)}`;async function mn(e){return V(`GET`,`${$(e)}/environment`)}async function hn(e,t){return V(`POST`,`${$(e)}/environment/folders`,{path:t})}async function gn(e,t){return V(`POST`,`${$(e)}/environment/folders/remove`,{path:t})}async function _n(e,t){return V(`PUT`,`${$(e)}/environment/internet`,{on:t})}async function vn(e){return V(`GET`,`${$(e)}/outputs`)}async function yn(e){return V(`GET`,`${$(e)}/capabilities`)}async function bn(e){return V(`GET`,`${$(e)}/changes/total`)}async function xn(e,t=!1){return V(`POST`,`${$(e)}/changes/undo`,{force:t})}async function Sn(e){return V(`GET`,`${$(e)}/changes/git`)}async function Cn(e,t,n){return V(`POST`,`${$(e)}/changes/git/commit`,{root:t,message:n,confirmed:!0})}async function wn(e,t,n,r){return V(`POST`,`${$(e)}/changes/git/pr`,{root:t,title:n,body:r,confirmed:!0})}export{Pe as $,Ce as $t,yn as A,re as An,Ke as At,Ct as B,ce as Bn,Re as Bt,Ge as C,u as Cn,on as Ct,Qe as D,ue as Dn,Ot as Dt,wt as E,fe as En,it as Et,Jt as F,g as Fn,xt as Ft,bn as G,r as Gn,T as Gt,vn as H,p as Hn,It as Ht,We as I,de as In,xn as It,lt as J,o as Jn,M as Jt,Sn as K,s as Kn,j as Kt,nt as L,ne as Ln,dn as Lt,et as M,ae as Mn,ut as Mt,Rt as N,l as Nn,Qt as Nt,Je as O,m as On,tt as Ot,mn as P,ee as Pn,$t as Pt,fn as Q,Se as Qt,tn as R,le as Rn,an as Rt,Ut as S,f as Sn,rt as St,Be as T,ie as Tn,yt as Tt,cn as U,d as Un,Ft as Ut,Fe as V,c as Vn,pn as Vt,_t as W,i as Wn,Yt as Wt,en as X,O as Xt,Me as Y,k as Yt,un as Z,D as Zt,Lt as _,S as _n,Zt as _t,hn as a,Te as an,qe as at,sn as b,x as bn,gn as bt,Nt as c,_e as cn,ft as ct,at as d,_ as dn,bt as dt,xe as en,Gt as et,Cn as f,ye as fn,qt as ft,mt as g,v as gn,vt as gt,rn as h,b as hn,ln as ht,ot as i,we as in,$e as it,ct as j,oe as jn,Ie as jt,Ue as k,pe as kn,_n as kt,Wt as l,ve as ln,Q as lt,wn as m,he as mn,F as mt,W as n,Ee as nn,Ve as nt,dt as o,C as on,nn as ot,Ze as p,be as pn,Kt as pt,Le as q,a as qn,N as qt,J as r,E as rn,Pt as rt,Ht as s,ge as sn,pt as st,L as t,A as tn,He as tt,Bt as u,w as un,ze as ut,Tt as v,y as vn,Vt as vt,zt as w,te as wn,Xt as wt,gt as x,se as xn,Ne as xt,Et as y,me as yn,st as yt,St as z,h as zn,ht as zt};
|