@amd-gaia/agent-ui 0.25.4-rc.10 → 0.25.4-rc.12

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.
@@ -1 +1 @@
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-tWXlG-cT.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-Co-B9E0t.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-CMVmIBZ8.js";var j=e(o(),1);function M(){let e=n(),t=i(e=>e.runSetupAgain),o=i(e=>e.closeSettings),[l,d]=(0,j.useState)(null),[f,p]=(0,j.useState)(null),[m,h]=(0,j.useState)(``),[g,_]=(0,j.useState)(``),[y,b]=(0,j.useState)(!1),[x,S]=(0,j.useState)(null),[w,T]=(0,j.useState)(!1);(0,j.useEffect)(()=>{u().then(e=>{d(e),h(e.saved_base_url??e.base_url??``)}).catch(e=>p(e instanceof Error?e.message:String(e)))},[]);let E=(0,j.useCallback)(async e=>{b(!0),S(null);try{let n=await c(e);d(n),_(``),T(!1),n.mode===`gaia`&&!n.gaia_installed&&(o(),t(!0))}catch(e){T(C(e)),S(e instanceof Error?e.message:String(e))}finally{b(!1)}},[o,t]),D=()=>void E({mode:`external`,base_url:m.trim(),api_key:g.trim()||void 0});if(f)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:f})]})]})]});if(!l)return null;let O=l.mode===`external`,k=l.source===`env`;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:k?e(`settings.server.usesEnv`,{url:l.base_url??``}):O?e(`settings.server.usesYours`,{url:l.base_url??``}):e(`settings.server.usesOwn`)}),!k&&l.env_url_ignored&&r(`p`,{className:`model-status-hint`,children:e(`settings.server.envIgnored`,{url:l.env_url_ignored})}),k?r(`p`,{className:`model-status-hint`,children:e(`settings.server.envUseOwn`)}):a(s.Fragment,{children:[a(`p`,{className:`model-status-hint`,children:[e(`settings.server.useYours`),` `,r(`bdi`,{children:l.what_gaia_does})]}),a(`form`,{className:`model-input-row`,onSubmit:e=>{e.preventDefault(),D()},children:[r(`input`,{type:`text`,className:`model-input`,placeholder:`http://localhost:13305`,value:m,onChange:e=>{h(e.target.value),S(null)},disabled:y,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-label":e(`settings.server.address`)}),r(`input`,{type:`password`,className:`model-input`,autoComplete:`off`,placeholder:l.api_key_stored?e.bare(`settings.server.keySaved`):e.bare(`settings.server.keyOptional`),value:g,onChange:e=>_(e.target.value),disabled:y,"aria-label":e(`settings.server.key`)}),r(`div`,{className:`model-btn-group`,children:r(`button`,{type:`submit`,className:`btn-model-save`,disabled:y||!m.trim(),children:y?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.server.checking`)]}):e(`settings.server.use`)})})]})]}),O&&r(`div`,{className:`setting-actions`,children:r(`button`,{type:`button`,className:`btn-secondary`,disabled:y,onClick:()=>void E({mode:`gaia`}),children:e(`settings.server.useOwn`)})}),x&&a(`div`,{className:`model-warning`,role:`alert`,children:[r(v,{size:14}),a(`div`,{className:`model-warning-content`,children:[r(`strong`,{children:e(w?`settings.server.needsKey`:`settings.server.notSwitched`)}),r(`p`,{children:x})]})]})]})}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),[W,G]=(0,j.useState)(!1),[K,ne]=(0,j.useState)(!1),[q,re]=(0,j.useState)(!1),[ie,ae]=(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),G(e.dynamic_tools),ne(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 oe=(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]),se=(0,j.useCallback)(async()=>{if(K||q)return;let e=W,n=!e;G(n),re(!0),ae(null);try{t.system.info(`Saving dynamic_tools setting`,{dynamic_tools:n});let e=await l({dynamic_tools:n});G(e.dynamic_tools),ne(e.dynamic_tools_locked)}catch(n){let r=n instanceof Error?n.message:String(n);t.system.error(`Failed to save dynamic_tools`,n),G(e),ae(r)}finally{re(!1)}},[W,K,q]),ce=g.trim()!==w.trim(),J=i?i.default_model_name:b,{isLoadingModel:le,isDownloadingModel:Y,downloadError:X,loadModel:ue,downloadModel:de}=O(J??void 0),Z=!!i?.default_model_is_cloud,Q=!Z&&!!(i?.lemonade_running&&i.model_loaded&&i.expected_model_loaded===!1),fe=!Z&&!!(i?.lemonade_running&&i.model_loaded&&i.context_size_sufficient===!1),$=!Z&&!(!i?.lemonade_running||i.model_loaded||i.model_downloaded!==!1),pe=(Q||fe)&&J!==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(U,{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(U,{label:e(`settings.section.model`),value:i.model_loaded||e(`settings.advanced.noneLoaded`),ok:!!i.model_loaded&&(Z||i.expected_model_loaded!==!1),hint:i.model_loaded?!Z&&i.expected_model_loaded===!1?e(`settings.advanced.expected`,{name:J??``}):void 0:e(`settings.advanced.loadsFirst`)}),r(U,{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:J??``,need:`6 GB`})})]}),r(`button`,{className:`btn-model-action btn-model-action--download`,onClick:()=>de(!1),disabled:Y,children:Y?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.model.download`)})]}),$&&X&&r(x,{message:X}),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(Q?`settings.advanced.wrongModel`:`settings.advanced.smallContext`)}),r(`span`,{className:`model-action-desc`,children:e(`settings.advanced.loadHint`,{name:J??``,size:`${32 .toFixed(0)}K`})})]}),r(`button`,{className:`btn-model-action btn-model-action--load`,onClick:()=>ue(),disabled:le,children:le?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(U,{label:e(`settings.advanced.modelSize`),value:a(`bdi`,{dir:`ltr`,children:[i.model_size_gb,` GB`]}),ok:!0}),i.model_device&&!Z&&r(U,{label:e(`settings.advanced.device`),value:i.model_device.toUpperCase(),ok:i.model_device!==`cpu`}),i.model_context_size!=null&&r(U,{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(U,{label:e(`settings.advanced.capabilities`),value:i.model_labels.join(`, `),ok:!0}),r(U,{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(U,{label:`GPU`,value:r(`bdi`,{children:`${i.gpu_name}${i.gpu_vram_gb?` (${T(i.gpu_vram_gb)})`:``}`}),ok:!0}),r(U,{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(U,{label:e(`settings.advanced.processor`),value:r(`bdi`,{children:i.processor_name}),ok:!0})]}),i.lemonade_running&&J!==null&&!Z&&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:()=>de(!0),disabled:Y,children:Y?a(s.Fragment,{children:[r(A,{size:12,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.advanced.redownload`)})]}),!$&&X&&r(x,{message:X})]})]}):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&&ce&&P&&(e.preventDefault(),oe())},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:()=>{oe()},disabled:!P||I||!ce&&!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(te,{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:W,onChange:()=>void se(),disabled:!P||q||K,"aria-label":e(W?`settings.advanced.dynamicOff`:`settings.advanced.dynamicOn`)}),r(`span`,{className:`toggle-track`})]})]}),K&&r(`p`,{className:`model-status-hint`,children:e(`settings.advanced.dynamicLocked`)}),ie&&r(te,{message:ie})]}),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.4rc10`]}),` `,r(`span`,{className:`beta-badge`,children:`BETA`})]}),r(`p`,{className:`about-sub`,children:e(`settings.advanced.about`)})]})]})}function te({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 U({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
+ 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-DBWm7Kq3.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-CVebTC8m.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-Dri99bxV.js";var j=e(o(),1);function M(){let e=n(),t=i(e=>e.runSetupAgain),o=i(e=>e.closeSettings),[l,d]=(0,j.useState)(null),[f,p]=(0,j.useState)(null),[m,h]=(0,j.useState)(``),[g,_]=(0,j.useState)(``),[y,b]=(0,j.useState)(!1),[x,S]=(0,j.useState)(null),[w,T]=(0,j.useState)(!1);(0,j.useEffect)(()=>{u().then(e=>{d(e),h(e.saved_base_url??e.base_url??``)}).catch(e=>p(e instanceof Error?e.message:String(e)))},[]);let E=(0,j.useCallback)(async e=>{b(!0),S(null);try{let n=await c(e);d(n),_(``),T(!1),n.mode===`gaia`&&!n.gaia_installed&&(o(),t(!0))}catch(e){T(C(e)),S(e instanceof Error?e.message:String(e))}finally{b(!1)}},[o,t]),D=()=>void E({mode:`external`,base_url:m.trim(),api_key:g.trim()||void 0});if(f)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:f})]})]})]});if(!l)return null;let O=l.mode===`external`,k=l.source===`env`;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:k?e(`settings.server.usesEnv`,{url:l.base_url??``}):O?e(`settings.server.usesYours`,{url:l.base_url??``}):e(`settings.server.usesOwn`)}),!k&&l.env_url_ignored&&r(`p`,{className:`model-status-hint`,children:e(`settings.server.envIgnored`,{url:l.env_url_ignored})}),k?r(`p`,{className:`model-status-hint`,children:e(`settings.server.envUseOwn`)}):a(s.Fragment,{children:[a(`p`,{className:`model-status-hint`,children:[e(`settings.server.useYours`),` `,r(`bdi`,{children:l.what_gaia_does})]}),a(`form`,{className:`model-input-row`,onSubmit:e=>{e.preventDefault(),D()},children:[r(`input`,{type:`text`,className:`model-input`,placeholder:`http://localhost:13305`,value:m,onChange:e=>{h(e.target.value),S(null)},disabled:y,spellCheck:!1,autoCapitalize:`off`,autoCorrect:`off`,"aria-label":e(`settings.server.address`)}),r(`input`,{type:`password`,className:`model-input`,autoComplete:`off`,placeholder:l.api_key_stored?e.bare(`settings.server.keySaved`):e.bare(`settings.server.keyOptional`),value:g,onChange:e=>_(e.target.value),disabled:y,"aria-label":e(`settings.server.key`)}),r(`div`,{className:`model-btn-group`,children:r(`button`,{type:`submit`,className:`btn-model-save`,disabled:y||!m.trim(),children:y?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.server.checking`)]}):e(`settings.server.use`)})})]})]}),O&&r(`div`,{className:`setting-actions`,children:r(`button`,{type:`button`,className:`btn-secondary`,disabled:y,onClick:()=>void E({mode:`gaia`}),children:e(`settings.server.useOwn`)})}),x&&a(`div`,{className:`model-warning`,role:`alert`,children:[r(v,{size:14}),a(`div`,{className:`model-warning-content`,children:[r(`strong`,{children:e(w?`settings.server.needsKey`:`settings.server.notSwitched`)}),r(`p`,{children:x})]})]})]})}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),[W,G]=(0,j.useState)(!1),[K,ne]=(0,j.useState)(!1),[q,re]=(0,j.useState)(!1),[ie,ae]=(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),G(e.dynamic_tools),ne(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 oe=(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]),se=(0,j.useCallback)(async()=>{if(K||q)return;let e=W,n=!e;G(n),re(!0),ae(null);try{t.system.info(`Saving dynamic_tools setting`,{dynamic_tools:n});let e=await l({dynamic_tools:n});G(e.dynamic_tools),ne(e.dynamic_tools_locked)}catch(n){let r=n instanceof Error?n.message:String(n);t.system.error(`Failed to save dynamic_tools`,n),G(e),ae(r)}finally{re(!1)}},[W,K,q]),ce=g.trim()!==w.trim(),J=i?i.default_model_name:b,{isLoadingModel:le,isDownloadingModel:Y,downloadError:X,loadModel:ue,downloadModel:de}=O(J??void 0),Z=!!i?.default_model_is_cloud,Q=!Z&&!!(i?.lemonade_running&&i.model_loaded&&i.expected_model_loaded===!1),fe=!Z&&!!(i?.lemonade_running&&i.model_loaded&&i.context_size_sufficient===!1),$=!Z&&!(!i?.lemonade_running||i.model_loaded||i.model_downloaded!==!1),pe=(Q||fe)&&J!==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(U,{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(U,{label:e(`settings.section.model`),value:i.model_loaded||e(`settings.advanced.noneLoaded`),ok:!!i.model_loaded&&(Z||i.expected_model_loaded!==!1),hint:i.model_loaded?!Z&&i.expected_model_loaded===!1?e(`settings.advanced.expected`,{name:J??``}):void 0:e(`settings.advanced.loadsFirst`)}),r(U,{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:J??``,need:`6 GB`})})]}),r(`button`,{className:`btn-model-action btn-model-action--download`,onClick:()=>de(!1),disabled:Y,children:Y?a(s.Fragment,{children:[r(A,{size:13,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.model.download`)})]}),$&&X&&r(x,{message:X}),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(Q?`settings.advanced.wrongModel`:`settings.advanced.smallContext`)}),r(`span`,{className:`model-action-desc`,children:e(`settings.advanced.loadHint`,{name:J??``,size:`${32 .toFixed(0)}K`})})]}),r(`button`,{className:`btn-model-action btn-model-action--load`,onClick:()=>ue(),disabled:le,children:le?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(U,{label:e(`settings.advanced.modelSize`),value:a(`bdi`,{dir:`ltr`,children:[i.model_size_gb,` GB`]}),ok:!0}),i.model_device&&!Z&&r(U,{label:e(`settings.advanced.device`),value:i.model_device.toUpperCase(),ok:i.model_device!==`cpu`}),i.model_context_size!=null&&r(U,{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(U,{label:e(`settings.advanced.capabilities`),value:i.model_labels.join(`, `),ok:!0}),r(U,{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(U,{label:`GPU`,value:r(`bdi`,{children:`${i.gpu_name}${i.gpu_vram_gb?` (${T(i.gpu_vram_gb)})`:``}`}),ok:!0}),r(U,{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(U,{label:e(`settings.advanced.processor`),value:r(`bdi`,{children:i.processor_name}),ok:!0})]}),i.lemonade_running&&J!==null&&!Z&&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:()=>de(!0),disabled:Y,children:Y?a(s.Fragment,{children:[r(A,{size:12,className:`btn-spinner`}),` `,e(`settings.advanced.downloading`)]}):e(`settings.advanced.redownload`)})]}),!$&&X&&r(x,{message:X})]})]}):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&&ce&&P&&(e.preventDefault(),oe())},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:()=>{oe()},disabled:!P||I||!ce&&!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(te,{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:W,onChange:()=>void se(),disabled:!P||q||K,"aria-label":e(W?`settings.advanced.dynamicOff`:`settings.advanced.dynamicOn`)}),r(`span`,{className:`toggle-track`})]})]}),K&&r(`p`,{className:`model-status-hint`,children:e(`settings.advanced.dynamicLocked`)}),ie&&r(te,{message:ie})]}),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.4rc12`]}),` `,r(`span`,{className:`beta-badge`,children:`BETA`})]}),r(`p`,{className:`about-sub`,children:e(`settings.advanced.about`)})]})]})}function te({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 U({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 +1 @@
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-tWXlG-cT.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-Co-B9E0t.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-CMVmIBZ8.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
+ 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-DBWm7Kq3.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-CVebTC8m.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-Dri99bxV.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,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,a as r,c as i,d as a,l as o,q as s,s as c,t as l}from"./useT-tWXlG-cT.js";import{Ht as ee,N as te,Ut as ne,_ as re,et as ie,pt as ae,rt as u,s as d,u as oe,vt as se}from"./api-Co-B9E0t.js";import{$ as ce,Ct as f,It as le,J as ue,K as de,Lt as p,Nt as fe,Tt as pe,X as me,Y as he,at as ge,bt as _e,ct as ve,dt as ye,nt as be,q as xe,rt as m,t as h,tt as Se,u as Ce}from"./index-CMVmIBZ8.js";var g={name:`circle-stop`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`rect`,{x:`9`,y:`9`,width:`6`,height:`6`,rx:`1`,key:`1ssd4o`}]],aliases:[`stop-circle`]};g.node;var _=n(g),v={name:`loader`,size:24,node:[[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m16.2 7.8 2.9-2.9`,key:`r700ao`}],[`path`,{d:`M18 12h4`,key:`wj9ykh`}],[`path`,{d:`m16.2 16.2 2.9 2.9`,key:`1bxg5t`}],[`path`,{d:`M12 18v4`,key:`jadmvz`}],[`path`,{d:`m4.9 19.1 2.9-2.9`,key:`bwix9q`}],[`path`,{d:`M2 12h4`,key:`j09sii`}],[`path`,{d:`m4.9 4.9 2.9 2.9`,key:`giyufr`}]]};v.node;var we=n(v),y={name:`refresh-ccw`,size:24,node:[[`path`,{d:`M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`14sxne`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16`,key:`1hlbsb`}],[`path`,{d:`M16 16h5v5`,key:`ccwih5`}]]};y.node;var Te=n(y),b=e(s(),1),x=e=>e.toLocaleString(`en-US`);function S(e,t){let n=x(e.done);return e.phase===`reading`?e.total==null?t(`docs.progress.readingCount`,{done:n}):t(`docs.progress.reading`,{done:n,total:x(e.total)}):e.total==null?t(`docs.progress.embeddingCount`,{done:n}):t(`docs.progress.embedding`,{done:n,total:x(e.total)})}function C(e){return e.total==null||e.total<=0?null:Math.min(100,Math.floor(e.done/e.total*100))}function Ee({progress:e}){let t=S(e,r()),n=C(e);return o(`div`,{className:`index-progress is-running`,children:[i(`div`,{className:`index-progress-track${n==null?` is-indeterminate`:``}`,role:`progressbar`,"aria-label":t,"aria-valuemin":n==null?void 0:0,"aria-valuemax":n==null?void 0:100,"aria-valuenow":n??void 0,children:i(`div`,{className:`index-progress-fill`,style:n==null?void 0:{inlineSize:`${n}%`}})}),o(`span`,{className:`index-progress-label`,children:[t,n!=null&&o(`span`,{className:`index-progress-pct`,children:[` · `,n,`%`]})]})]})}function De(e){let[t,...n]=e.replace(/^RAG indexing failed for [^:]+:\s*/,``).trim().split(`
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,a as r,c as i,d as a,l as o,q as s,s as c,t as l}from"./useT-DBWm7Kq3.js";import{Ht as ee,N as te,Ut as ne,_ as re,et as ie,pt as ae,rt as u,s as d,u as oe,vt as se}from"./api-CVebTC8m.js";import{$ as ce,Ct as f,It as le,J as ue,K as de,Lt as p,Nt as fe,Tt as pe,X as me,Y as he,at as ge,bt as _e,ct as ve,dt as ye,nt as be,q as xe,rt as m,t as h,tt as Se,u as Ce}from"./index-Dri99bxV.js";var g={name:`circle-stop`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`rect`,{x:`9`,y:`9`,width:`6`,height:`6`,rx:`1`,key:`1ssd4o`}]],aliases:[`stop-circle`]};g.node;var _=n(g),v={name:`loader`,size:24,node:[[`path`,{d:`M12 2v4`,key:`3427ic`}],[`path`,{d:`m16.2 7.8 2.9-2.9`,key:`r700ao`}],[`path`,{d:`M18 12h4`,key:`wj9ykh`}],[`path`,{d:`m16.2 16.2 2.9 2.9`,key:`1bxg5t`}],[`path`,{d:`M12 18v4`,key:`jadmvz`}],[`path`,{d:`m4.9 19.1 2.9-2.9`,key:`bwix9q`}],[`path`,{d:`M2 12h4`,key:`j09sii`}],[`path`,{d:`m4.9 4.9 2.9 2.9`,key:`giyufr`}]]};v.node;var we=n(v),y={name:`refresh-ccw`,size:24,node:[[`path`,{d:`M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`14sxne`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16`,key:`1hlbsb`}],[`path`,{d:`M16 16h5v5`,key:`ccwih5`}]]};y.node;var Te=n(y),b=e(s(),1),x=e=>e.toLocaleString(`en-US`);function S(e,t){let n=x(e.done);return e.phase===`reading`?e.total==null?t(`docs.progress.readingCount`,{done:n}):t(`docs.progress.reading`,{done:n,total:x(e.total)}):e.total==null?t(`docs.progress.embeddingCount`,{done:n}):t(`docs.progress.embedding`,{done:n,total:x(e.total)})}function C(e){return e.total==null||e.total<=0?null:Math.min(100,Math.floor(e.done/e.total*100))}function Ee({progress:e}){let t=S(e,r()),n=C(e);return o(`div`,{className:`index-progress is-running`,children:[i(`div`,{className:`index-progress-track${n==null?` is-indeterminate`:``}`,role:`progressbar`,"aria-label":t,"aria-valuemin":n==null?void 0:0,"aria-valuemax":n==null?void 0:100,"aria-valuenow":n??void 0,children:i(`div`,{className:`index-progress-fill`,style:n==null?void 0:{inlineSize:`${n}%`}})}),o(`span`,{className:`index-progress-label`,children:[t,n!=null&&o(`span`,{className:`index-progress-pct`,children:[` · `,n,`%`]})]})]})}function De(e){let[t,...n]=e.replace(/^RAG indexing failed for [^:]+:\s*/,``).trim().split(`
2
2
  `);return{summary:t.trim(),more:n.join(`
3
3
  `).trim()}}function Oe(e,t){let n=t.skipped??0,r=[];if(t.indexed>0?r.push(`Indexed ${t.indexed} file${t.indexed===1?``:`s`} from "${e}".`):t.failed===0&&r.push(`"${e}" has no documents GAIA can index.`),n>0&&r.push(`Skipped ${n} file${n===1?``:`s`} of a type GAIA doesn't index.`),t.failed>0){let e=t.errors[0]?` ${t.errors[0].split(`
4
4
  `)[0]}`:``;r.push(`${t.failed} file${t.failed===1?``:`s`} couldn't be indexed.${e}`)}return r.push(`Subfolders aren't included.`),r.join(` `)}var ke=1e3;function w(e,t,n){if(n)return{...e,[t]:n};if(!(t in e))return e;let{[t]:r,...i}=e;return i}function Ae(e){let t=Math.floor((Date.now()-e)/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function je(e,t){try{let n=new Date(e);if(isNaN(n.getTime()))return``;let r=new Date().getTime()-n.getTime(),i=Math.floor(r/1e3),a=Math.floor(i/60),o=Math.floor(a/60),s=Math.floor(o/24);return i<60?t(`time.justNow`):a<60?t(`time.minutesAgo`,{n:a}):o<24?t(`time.hoursAgo`,{n:o}):s===1?t(`time.yesterday`):s<7?t(`time.daysAgo`,{n:s}):n.toLocaleDateString(l(t),{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}catch{return``}}function Me(e,t){try{let n=new Date(e);return isNaN(n.getTime())?``:n.toLocaleString(l(t),{year:`numeric`,month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,second:`2-digit`})}catch{return``}}function T(){let e=r(),{documents:n,setDocuments:s,setShowDocLibrary:l,setShowFileBrowser:g,currentSessionId:v,sessions:y,updateSessionInList:x,draftDocumentIds:S,addDraftDocuments:C,removeDraftDocument:T}=a(),E=y.find(e=>e.id===v)??null,[D,Ne]=(0,b.useState)(v?`chat`:`next`),O=D===`chat`?v:null,k=`“${E?.title||e(`docs.untitledChat`)}”`,[A,j]=(0,b.useState)(``),Pe=(0,b.useCallback)(()=>l(!1),[l]);be(!0,Pe);let M=(0,b.useRef)(null);me(M,!0),Ce(M,!0);let[Fe,N]=(0,b.useState)(!1),[P,F]=(0,b.useState)(!1),[Ie,I]=(0,b.useState)(``),[L,R]=(0,b.useState)(``),[z,B]=(0,b.useState)(null),[V,H]=(0,b.useState)(null),[U,W]=(0,b.useState)(new Set),[Le,G]=(0,b.useState)({}),K=(0,b.useRef)(new Map),[,Re]=(0,b.useState)(0);(0,b.useEffect)(()=>{t.doc.info(`Loading document library...`);let e=t.doc.time();u().then(n=>{let r=n.documents||[];s(r),t.doc.timed(`Loaded ${r.length} document(s), ${n.total_chunks||0} chunks, ${n.total_size_bytes||0} bytes total`,e)}).catch(e=>{t.doc.error(`Failed to load documents`,e),s([])})},[s]);let q=n.some(e=>e.indexing_status===`indexing`||e.indexing_status===`pending`);(0,b.useEffect)(()=>{if(!q)return;let e=a.getState().documents;for(let t of e)(t.indexing_status===`indexing`||t.indexing_status===`pending`)&&!K.current.has(t.id)&&K.current.set(t.id,Date.now());let n=!1,r=setInterval(async()=>{if(Re(e=>e+1),!n){n=!0;try{let e=a.getState().documents.filter(e=>e.indexing_status===`indexing`||e.indexing_status===`pending`);for(let n of e)try{let e=await te(n.id);if(G(t=>w(t,n.id,e.progress)),e.indexing_status!==`indexing`&&e.indexing_status!==`pending`){K.current.delete(n.id);let e=await u();s(e.documents||[]);break}}catch(e){t.doc.warn(`Indexing status for ${n.filename} unavailable`,e)}}finally{n=!1}}},ke);return()=>clearInterval(r)},[q,s]),(0,b.useEffect)(()=>{let e=new Set(n.filter(e=>e.indexing_status===`indexing`||e.indexing_status===`pending`).map(e=>e.id));for(let t of K.current.keys())e.has(t)||K.current.delete(t);G(t=>Object.keys(t).reduce((t,n)=>e.has(n)?t:w(t,n,null),t))},[n]),(0,b.useEffect)(()=>{let e=setInterval(async()=>{try{let e=(await u()).documents||[],n=a.getState().documents;(e.length!==n.length||e.some((e,t)=>{let r=n.find(t=>t.id===e.id);return!r||r.indexing_status!==e.indexing_status||r.indexed_at!==e.indexed_at||r.chunk_count!==e.chunk_count}))&&(s(e),t.doc.debug(`Document list refreshed (server-side changes detected)`))}catch{}},15e3);return()=>clearInterval(e)},[s]);let ze=n.reduce((e,t)=>e+t.file_size,0),Be=n.reduce((e,t)=>e+t.chunk_count,0),J=(0,b.useCallback)(async(n,r)=>{if(!O){C([n]),j(e(`docs.willAttach`,{name:r})),t.doc.info(`"${r}" will be attached to the next new chat`);return}await d(O,n);let i=a.getState().sessions.find(e=>e.id===O)?.document_ids??[];i.includes(n)||x(O,{document_ids:[...i,n]}),j(e(`docs.attached`,{name:r,chat:k})),t.doc.info(`Attached "${r}" to session ${O}`)},[O,k,x,C,e]),Y=(0,b.useCallback)(async(e,n)=>{if(e.length===0)return;if(!O){C(e),t.doc.info(`"${n}" will be attached to the next new chat`);return}let r=[];for(let n of e)try{await d(O,n),r.push(n)}catch(e){t.doc.warn(`Could not attach document to session: ${e}`)}let i=a.getState().sessions.find(e=>e.id===O)?.document_ids??[],o=r.filter(e=>!i.includes(e));o.length>0&&x(O,{document_ids:[...i,...o]}),t.doc.info(`Attached "${n}" to session ${O}`)},[O,x,C]),X=(0,b.useCallback)(async(n,r,i)=>{if(!await Se(`embedding`))return;let a=n.includes(`.`)?`.`+n.split(`.`).pop()?.toLowerCase():``,o=a&&!he(a)?ue(a)?.message??`The file type "${a}" is not supported for indexing.`:null;if(o&&!i){t.doc.warn(`Unsupported file type: ${n} (${a})`),B({filename:n,error:o});return}t.doc.info(`Indexing document: ${n}`);let c=t.doc.time();F(!0),I(e(`docs.indexingFile`,{name:n})),B(null),H(null),j(``);try{let e=await r();if(t.doc.timed(`Indexed "${n}": ${e?.chunk_count||`?`} chunks`,c),e?.id)try{await J(e.id,e.filename||n)}catch(e){t.doc.error(`Could not attach "${n}" to ${k}`,e),B({filename:n,error:`Indexed, but not attached to ${k}: ${e instanceof Error?e.message:e}`})}let i=await u();s(i.documents||[]),I(``)}catch(e){let{httpStatus:r,reason:a}=e??{};if(a===`is_folder`&&i){await i();return}t.doc.error(`Failed to index "${n}"`,e);let s=r===400&&o?o:e instanceof Error?e.message:`Upload failed`;B({filename:n,error:s,status:r,kind:a}),I(``)}finally{F(!1)}},[J,k,s,e]),Z=(0,b.useCallback)(async(n,r)=>{t.doc.info(`"${n}" is a folder; indexing its documents`),I(e(`docs.indexingFolder`,{name:r}));try{let e=await ie(n,!1);await Y(e.documents.map(e=>e.id).filter(Boolean),r),H(Oe(r,e));let t=await u();s(t.documents||[])}catch(e){t.doc.error(`Failed to index folder "${n}"`,e);let i=e instanceof Error?e.message:`Folder indexing failed`,{httpStatus:a}=e??{};B({filename:r,error:i,status:a})}finally{I(``)}},[Y,s,e]),Q=(0,b.useCallback)(async(e,t)=>{await X(t,()=>ne(e),()=>Z(e,t))},[X,Z]),$=(0,b.useCallback)(async e=>{await X(e.name,()=>ee(e))},[X]),Ve=(0,b.useCallback)(async e=>{e.preventDefault(),N(!1);let n=Array.from(e.dataTransfer.files);t.doc.info(`Dropped ${n.length} file(s) into Document Library`);for(let e of n)await $(e)},[$]),He=(0,b.useCallback)(async e=>{let r=n.find(t=>t.id===e);t.doc.info(`Deleting document: ${r?.filename||e}`);try{await re(e),K.current.delete(e),T(e),s(n.filter(t=>t.id!==e)),t.doc.info(`Deleted document: ${r?.filename||e}`)}catch(n){t.doc.error(`Failed to delete document: ${r?.filename||e}`,n)}},[n,s,T]),Ue=(0,b.useCallback)(async(e,n)=>{t.doc.info(`Opening folder for: ${e}`);try{await ae(e,!0)}catch(e){t.doc.error(`Failed to open folder for: ${n}`,e)}},[]),We=(0,b.useCallback)(async e=>{let r=n.find(t=>t.id===e);t.doc.info(`Cancelling indexing for: ${r?.filename||e}`);try{await oe(e),K.current.delete(e);let n=await u();s(n.documents||[]),t.doc.info(`Cancelled indexing for: ${r?.filename||e}`)}catch(n){t.doc.error(`Failed to cancel indexing: ${r?.filename||e}`,n)}},[n,s]),Ge=(0,b.useCallback)(async e=>{if(U.has(e))return;let r=n.find(t=>t.id===e);t.doc.info(`Reindexing document: ${r?.filename||e}`),W(t=>new Set(t).add(e));try{await se(e),t.doc.info(`Reindex complete for: ${r?.filename||e}`)}catch(n){let i=n instanceof Error?n.message:String(n);t.doc.error(`Reindex failed for: ${r?.filename||e}`,n),B({filename:r?.filename||e,error:i})}finally{try{let e=await u();s(e.documents||[])}catch(e){t.doc.error(`Failed to refresh documents after reindex`,e)}W(t=>{let n=new Set(t);return n.delete(e),n})}},[n,s,U]),Ke=(0,b.useCallback)(async e=>{let r=n.find(t=>t.id===e)?.filename||e;j(``);try{await J(e,r)}catch(e){t.doc.error(`Failed to attach ${r} to ${k}`,e),B({filename:r,error:`Not attached to ${k}: ${e instanceof Error?e.message:e}`})}},[n,J,k]),qe=(0,b.useCallback)(async e=>{if(e.preventDefault(),!L.trim())return;let n=L.trim();t.doc.info(`Indexing from path input: ${n}`),await Q(n,n.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||`file`),R(``)},[L,Q]),Je=t=>{let n=t.indexing_status||`complete`,r=K.current.get(t.id),a=t.indexed_at?je(t.indexed_at,e):``,s=t.indexed_at?Me(t.indexed_at,e):``;switch(n){case`indexing`:case`pending`:{let n=Le[t.id];return o(`div`,{className:`doc-indexing-status`,children:[n?i(Ee,{progress:n}):o(`div`,{className:`doc-indexing-bar`,children:[i(`div`,{className:`doc-indexing-bar-track`,children:i(`div`,{className:`doc-indexing-bar-fill`})}),o(`span`,{className:`doc-indexing-label`,children:[i(we,{size:12,className:`doc-spin`}),r?e.hint(e(`docs.indexingLabel`),Ae(r)):e(`docs.indexing`)]})]}),o(`button`,{className:`btn-cancel`,onClick:e=>{e.stopPropagation(),We(t.id)},title:e(`docs.cancelIndexing`),"aria-label":e(`docs.cancelIndexingAria`,{name:t.filename}),children:[i(_,{size:14}),e(`docs.cancel`)]})]})}case`failed`:{let n=t.error_kind?de[t.error_kind]:void 0,r=t.last_error?De(t.last_error):null;return o(`div`,{className:`doc-failure`,children:[o(`div`,{className:`doc-indexing-status`,children:[o(`span`,{className:`doc-status-badge doc-status-failed`,title:t.last_error||void 0,"aria-label":t.last_error?e(`docs.failedAria`,{error:t.last_error}):e(`docs.indexingFailed`),children:[i(p,{size:12}),` `,e(n?`docs.cantRead`:`docs.failed`)]}),o(`button`,{className:n?`btn-retry btn-retry-quiet`:`btn-retry`,onClick:e=>{e.stopPropagation(),Ge(t.id)},title:e(n?`docs.retryTitleFix`:`docs.retryTitle`),"aria-label":e(`docs.retryAria`,{name:t.filename}),disabled:U.has(t.id),children:[i(Te,{size:n?12:14}),U.has(t.id)?e(`docs.retrying`):e(`docs.retry`)]})]}),n&&i(`p`,{className:`doc-failure-hint`,children:n}),r&&(r.more?o(`details`,{className:`doc-failure-reason`,children:[i(`summary`,{children:r.summary}),i(`p`,{children:r.more})]}):i(`p`,{className:`doc-failure-reason`,children:r.summary})),!r&&!n&&i(`p`,{className:`doc-failure-reason`,children:e(`docs.noReason`)})]})}case`cancelled`:return o(`span`,{className:`doc-status-badge doc-status-cancelled`,children:[i(_,{size:12}),` `,e(`docs.cancelled`)]});case`missing`:return o(`span`,{className:`doc-status-badge doc-status-missing`,children:[i(p,{size:12}),` `,e(`docs.missing`)]});default:return o(`span`,{className:`doc-meta`,children:[i(`bdi`,{dir:`ltr`,children:h(t.file_size)}),` · `,e.plural(`docs.chunks`,t.chunk_count),a&&o(`span`,{className:`doc-timestamp`,title:e(`docs.indexedAt`,{time:s}),children:[i(fe,{size:10}),a]})]})}};return i(`div`,{ref:M,className:`modal-overlay`,onClick:()=>l(!1),role:`dialog`,"aria-modal":`true`,"aria-label":e(`docs.title`),children:o(`div`,{className:`modal-panel doc-modal`,onClick:e=>e.stopPropagation(),children:[o(`div`,{className:`modal-header`,children:[i(`h3`,{children:e(`docs.title`)}),i(`button`,{className:`btn-icon`,onClick:()=>l(!1),"aria-label":e(`docs.close`),children:i(m,{size:18})})]}),o(`div`,{className:`modal-body`,children:[o(`div`,{className:`doc-target`,children:[v?o(`label`,{className:`doc-target-choice`,children:[e(`docs.addTo`),o(`select`,{value:D,onChange:e=>{Ne(e.target.value),j(``)},children:[i(`option`,{value:`chat`,children:e(`docs.thisChat`,{chat:k})}),i(`option`,{value:`next`,children:e(`docs.nextChat`)})]})]}):i(`span`,{children:e(`docs.nextChatOnly`)}),i(`span`,{className:`doc-target-hint`,children:e(`docs.hint`)})]}),i(`div`,{className:`drop-zone ${Fe?`drag-over`:``} ${P?`uploading`:``}`,onDragOver:e=>{e.preventDefault(),N(!0)},onDragLeave:()=>N(!1),onDrop:Ve,children:P?o(c.Fragment,{children:[i(`div`,{className:`upload-spinner`}),i(`p`,{children:Ie})]}):o(c.Fragment,{children:[i(ge,{size:32,strokeWidth:1.5}),i(`p`,{children:e(`docs.drop`)}),i(`span`,{className:`drop-hint`,children:e(`docs.dropHint`)})]})}),o(`form`,{className:`path-input-form`,onSubmit:qe,children:[i(f,{size:16,className:`path-icon`}),i(`input`,{type:`text`,className:`path-input`,value:L,onChange:e=>R(e.target.value),placeholder:e(`docs.pathPlaceholder`,{example:ce()}),"aria-label":e(`docs.pathAria`),dir:`auto`}),i(`button`,{type:`submit`,className:`btn-secondary`,disabled:!L.trim()||P,children:e(`docs.index`)}),o(`button`,{type:`button`,className:`btn-secondary`,onClick:()=>{l(!1),g(!0)},title:e(`docs.browseTitle`),children:[i(ye,{size:14}),e(`docs.browse`)]})]}),A&&i(`p`,{className:`doc-target-notice`,role:`status`,children:A}),z&&i(xe,{filename:z.filename,error:z.error,status:z.status,kind:z.kind,onDismiss:()=>B(null)}),V&&o(`div`,{className:`doc-folder-notice`,role:`status`,children:[i(le,{size:14}),i(`span`,{children:V}),i(`button`,{className:`btn-icon-sm`,onClick:()=>H(null),"aria-label":e(`docs.dismissFolder`),children:i(m,{size:12})})]}),n.length>0&&o(`div`,{className:`doc-stats`,children:[i(`span`,{children:e.plural(`docs.count`,n.length)}),i(`span`,{children:`·`}),i(`span`,{children:e.plural(`docs.chunks`,Be)}),i(`span`,{children:`·`}),i(`bdi`,{dir:`ltr`,children:h(ze)})]}),o(`div`,{className:`doc-list`,children:[n.length===0&&!P&&o(`div`,{className:`empty-docs`,children:[i(pe,{size:32,strokeWidth:1}),i(`p`,{children:e(`docs.empty`)}),i(`span`,{children:e(`docs.emptyHint`)})]}),n.map(t=>o(`div`,{className:`doc-row ${t.indexing_status===`indexing`?`doc-row-indexing`:``}`,children:[o(`div`,{className:`doc-info`,children:[i(`span`,{className:`doc-name`,dir:`auto`,children:t.filename}),Je(t)]}),o(`div`,{className:`doc-row-actions`,children:[t.filepath&&i(`button`,{className:`btn-icon-sm doc-open-folder`,onClick:()=>Ue(t.filepath,t.filename),title:e(`docs.openFolder`,{path:t.filepath}),"aria-label":e(`docs.openFolderAria`,{name:t.filename}),children:i(f,{size:14})}),t.indexing_status===`complete`&&!(O?E?.document_ids?.includes(t.id):S.includes(t.id))&&i(`button`,{className:`btn-icon-sm doc-attach`,onClick:()=>Ke(t.id),title:O?e(`docs.useIn`,{chat:k}):e(`docs.useNext`),"aria-label":O?e(`docs.attachAria`,{name:t.filename,chat:k}):e(`docs.attachNextAria`,{name:t.filename}),children:i(_e,{size:14})}),t.indexing_status!==`indexing`&&t.indexing_status!==`pending`&&i(`button`,{className:`btn-icon-sm doc-delete`,onClick:()=>He(t.id),title:e(`docs.remove`),"aria-label":e(`docs.removeAria`,{name:t.filename}),children:i(ve,{size:14})})]})]},t.id))]})]})]})})}export{T as DocumentLibrary};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,a as r,c as i,d as a,l as o,q as s,t as c}from"./useT-tWXlG-cT.js";import{Ut as l,_t as u,et as d,l as f,rt as ee,s as p,wt as m}from"./api-Co-B9E0t.js";import{Ct as te,Et as ne,J as h,St as g,Tt as _,Ut as re,Wt as ie,X as ae,Y as v,_t as y,at as oe,dt as se,kt as b,nt as ce,q as le,rt as x,t as ue,tt as S,u as de,wt as fe,xt as pe,zt as me}from"./index-CMVmIBZ8.js";var C={name:`code`,size:24,node:[[`path`,{d:`m16 18 6-6-6-6`,key:`eg8j8`}],[`path`,{d:`m8 6-6 6 6 6`,key:`ppft3o`}]]};C.node;var he=n(C),w={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};w.node;var T=n(w),E={name:`table`,size:24,node:[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]};E.node;var D=n(E),O=e(s(),1);function ge(e){if(e.type===`folder`)return i(g,{size:16});let t=(e.extension||``).toLowerCase();return[`.csv`,`.xlsx`,`.xls`,`.tsv`].includes(t)?i(D,{size:16}):[`.py`,`.js`,`.ts`,`.java`,`.c`,`.cpp`,`.go`,`.rs`].includes(t)?i(he,{size:16}):[`.pdf`,`.doc`,`.docx`,`.txt`,`.md`].includes(t)?i(_,{size:16}):i(fe,{size:16})}function _e(e,t){if(!e)return``;let n=new Date(e),r=new Date,i=r.getTime()-n.getTime(),a=Math.floor(i/36e5);if(a<1)return t(`time.justNow`);if(a<24)return t(`time.hoursAgo`,{n:a});let o=Math.floor(a/24);return o<7?t(`time.daysAgo`,{n:o}):n.toLocaleDateString(c(t),{month:`short`,day:`numeric`,year:n.getFullYear()===r.getFullYear()?void 0:`numeric`})}function ve(e){if(e.length===0)return``;let[t,...n]=e;return n.length>0?`${t} (+${n.length} more)`:t}function ye(e){switch(e){case`home`:return i(T,{size:14});case`desktop`:return i(y,{size:14});case`documents`:return i(_,{size:14});case`download`:return i(b,{size:14});default:return i(g,{size:14})}}var be=[{label:`All Files`,value:``},{label:`Documents`,value:`pdf,doc,docx,txt,md`},{label:`Spreadsheets`,value:`csv,xlsx,xls,tsv`},{label:`Code`,value:`py,js,ts,java,c,cpp,go,rs,rb,sh`},{label:`Data`,value:`json,xml,yaml,yml,csv,tsv`}];async function k(e,n,r,i){let o=[],s=[];for(let t of e){let e=t.includes(`.`)?`.`+t.split(`.`).pop()?.toLowerCase():``;e&&!v(e)?s.push(t):o.push(t)}let c=[],u=[],f=0,m=``,te=new Set(n.filter(e=>e.type===`folder`).map(e=>e.path));for(let e of o)try{if(te.has(e)){let t=await d(e),n=[];t.documents.forEach(e=>{e.id&&n.push(e.id)}),n.length>0&&(n.forEach(e=>c.push(e)),u.push(e))}else{if(!await S(`embedding`))break;let t=await l(e);t?.id&&(c.push(t.id),u.push(e))}}catch(e){f++,m=e instanceof Error?e.message:`Unknown error`}if(r&&c.length>0){let e=[];for(let n of c)try{await p(r,n),e.push(n)}catch(e){t.doc.warn(`Could not attach document to session: ${e}`)}let n=a.getState().sessions.find(e=>e.id===r)?.document_ids??[],o=e.filter(e=>!n.includes(e));o.length>0&&i(r,{document_ids:[...n,...o]})}else c.length>0&&a.getState().addDraftDocuments(c);if(c.length>0)try{let e=await ee();a.getState().setDocuments(e.documents||[])}catch(e){t.doc.error(`Could not refresh the document list after indexing`,e)}return{docIds:c,supported:o,succeededFiles:u,unsupported:s,failed:f,lastError:m}}var A=e=>e.startsWith(`.`);function j({onStartChat:e}){let n=r(),{setShowFileBrowser:s,currentSessionId:c,updateSessionInList:l,setPendingPrompt:d}=a(),ee=(0,O.useCallback)(()=>s(!1),[s]);ce(!0,ee);let p=(0,O.useRef)(null);ae(p,!0),de(p,!0);let[g,_]=(0,O.useState)(``),[y,b]=(0,O.useState)(null),[S,fe]=(0,O.useState)([]),[C,he]=(0,O.useState)([]),[w,T]=(0,O.useState)(!1),[E,D]=(0,O.useState)(null),[j,xe]=(0,O.useState)(!1),[M,N]=(0,O.useState)(``),[P,F]=(0,O.useState)(null),[I,L]=(0,O.useState)([]),[Se,Ce]=(0,O.useState)(!1),[R,z]=(0,O.useState)(!1),[B,we]=(0,O.useState)(``),[V,H]=(0,O.useState)(new Set),[U,W]=(0,O.useState)(null),[Te,Ee]=(0,O.useState)(!1),[De,G]=(0,O.useState)(new Set),[Oe,K]=(0,O.useState)(null),q=(0,O.useRef)(null),[J,Y]=(0,O.useState)(null),X=(0,O.useCallback)(async e=>{T(!0),D(null),F(null),N(``),L([]);try{let n=await f(e);_(n.current_path),b(n.parent_path),fe(n.entries),n.quick_links.length>0&&he(n.quick_links),t.ui.info(`Browsing: ${n.current_path} (${n.entries.length} items)`)}catch(e){let n=e instanceof Error?e.message:`Failed to load directory`;D(n),t.ui.error(`Browse failed`,e)}finally{T(!1)}},[]);(0,O.useEffect)(()=>{X()},[X]),(0,O.useEffect)(()=>()=>{q.current&&clearTimeout(q.current)},[]);let ke=(0,O.useCallback)(async()=>{if(!M.trim())F(null),L([]);else{z(!0),D(null);try{let e=await m(M.trim(),B||void 0,30);F(e.results),L(e.searched_locations??[]),Ce(e.truncated===!0),t.ui.info(`Search "${M}": ${e.total} results`)}catch(e){let n=e instanceof Error?e.message:`Search failed`;D(n),t.ui.error(`Search failed`,e)}finally{z(!1)}}},[M,B]),Ae=e=>{e.key===`Enter`&&ke()},je=(0,O.useCallback)(e=>{e.type===`folder`&&(X(e.path),H(new Set),W(null))},[X]),Me=(0,O.useCallback)(async e=>{Ee(!0);try{let t=await u(e);W(t)}catch(e){t.ui.error(`Preview failed`,e)}finally{Ee(!1)}},[]),Z=(0,O.useCallback)(e=>{H(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Ne=(0,O.useCallback)(async()=>{if(V.size===0)return;let e=Array.from(V);if(Y(null),!e.some(e=>{let t=e.includes(`.`)?`.`+e.split(`.`).pop()?.toLowerCase():``;return!t||v(t)})){let t=e[0],n=t.lastIndexOf(`.`),r=n>0?t.slice(n).toLowerCase():``,i=h(r);Y({filename:e.length===1?t.split(/[\\/]/).pop()||t:`${e.length} files`,error:i?i.message:`File type "${r}" is not supported for indexing.`})}else{G(new Set(e)),K(`Indexing ${e.length} file(s)...`);try{let t=await k(e,S,c,l);if(t.failed>0)K(`Done: ${t.docIds.length} indexed, ${t.failed} failed`),Y({filename:`${t.failed} file(s)`,error:t.lastError||`Indexing failed for some files`});else{let e=t.unsupported.length>0?` (${t.unsupported.length} skipped — unsupported type)`:``;K(`Successfully indexed ${t.docIds.length} file(s)${e}`)}q.current&&clearTimeout(q.current),q.current=setTimeout(()=>K(null),5e3),H(new Set)}catch(n){t.doc.error(`Index selected failed`,n),Y({filename:e.length===1?e[0].split(/[\\/]/).pop()||e[0]:`${e.length} files`,error:n instanceof Error?n.message:`An unexpected error occurred.`})}finally{G(new Set)}}},[V,c,l,S]),Q=(0,O.useRef)(!1),Pe=(0,O.useCallback)(async()=>{if(V.size===0||Q.current)return;Q.current=!0;let n=Array.from(V);Y(null),G(new Set(n)),K(`Indexing ${n.length} file(s) for analysis...`);try{let t=await k(n,S,c,l);if(t.supported.length===0){let e=n[0].lastIndexOf(`.`),t=e>0?n[0].slice(e).toLowerCase():``,r=h(t);Y({filename:n.length===1?n[0].split(/[\\/]/).pop()||n[0]:`${n.length} files`,error:r?.message??`File type "${t}" is not supported for indexing.`});return}if(t.docIds.length===0){Y({filename:t.supported.length===1?t.supported[0].split(/[\\/]/).pop()||t.supported[0]:`${t.supported.length} files`,error:`Failed to index selected file(s). Please try again.`});return}t.failed>0&&K(`Warning: ${t.failed} file(s) failed to index and will be excluded.`);let r=(t.succeededFiles.length>0?t.succeededFiles:t.supported).map(e=>e.split(/[\\/]/).pop()||e),i=r.length===1?`Please analyze this document for me: ${r[0]}`:`Please analyze these documents for me:\n${r.map(e=>`- ${e}`).join(`
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{F as t,K as n,a as r,c as i,d as a,l as o,q as s,t as c}from"./useT-DBWm7Kq3.js";import{Ut as l,_t as u,et as d,l as f,rt as ee,s as p,wt as m}from"./api-CVebTC8m.js";import{Ct as te,Et as ne,J as h,St as g,Tt as _,Ut as re,Wt as ie,X as ae,Y as v,_t as y,at as oe,dt as se,kt as b,nt as ce,q as le,rt as x,t as ue,tt as S,u as de,wt as fe,xt as pe,zt as me}from"./index-Dri99bxV.js";var C={name:`code`,size:24,node:[[`path`,{d:`m16 18 6-6-6-6`,key:`eg8j8`}],[`path`,{d:`m8 6-6 6 6 6`,key:`ppft3o`}]]};C.node;var he=n(C),w={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};w.node;var T=n(w),E={name:`table`,size:24,node:[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M3 15h18`,key:`5xshup`}]]};E.node;var D=n(E),O=e(s(),1);function ge(e){if(e.type===`folder`)return i(g,{size:16});let t=(e.extension||``).toLowerCase();return[`.csv`,`.xlsx`,`.xls`,`.tsv`].includes(t)?i(D,{size:16}):[`.py`,`.js`,`.ts`,`.java`,`.c`,`.cpp`,`.go`,`.rs`].includes(t)?i(he,{size:16}):[`.pdf`,`.doc`,`.docx`,`.txt`,`.md`].includes(t)?i(_,{size:16}):i(fe,{size:16})}function _e(e,t){if(!e)return``;let n=new Date(e),r=new Date,i=r.getTime()-n.getTime(),a=Math.floor(i/36e5);if(a<1)return t(`time.justNow`);if(a<24)return t(`time.hoursAgo`,{n:a});let o=Math.floor(a/24);return o<7?t(`time.daysAgo`,{n:o}):n.toLocaleDateString(c(t),{month:`short`,day:`numeric`,year:n.getFullYear()===r.getFullYear()?void 0:`numeric`})}function ve(e){if(e.length===0)return``;let[t,...n]=e;return n.length>0?`${t} (+${n.length} more)`:t}function ye(e){switch(e){case`home`:return i(T,{size:14});case`desktop`:return i(y,{size:14});case`documents`:return i(_,{size:14});case`download`:return i(b,{size:14});default:return i(g,{size:14})}}var be=[{label:`All Files`,value:``},{label:`Documents`,value:`pdf,doc,docx,txt,md`},{label:`Spreadsheets`,value:`csv,xlsx,xls,tsv`},{label:`Code`,value:`py,js,ts,java,c,cpp,go,rs,rb,sh`},{label:`Data`,value:`json,xml,yaml,yml,csv,tsv`}];async function k(e,n,r,i){let o=[],s=[];for(let t of e){let e=t.includes(`.`)?`.`+t.split(`.`).pop()?.toLowerCase():``;e&&!v(e)?s.push(t):o.push(t)}let c=[],u=[],f=0,m=``,te=new Set(n.filter(e=>e.type===`folder`).map(e=>e.path));for(let e of o)try{if(te.has(e)){let t=await d(e),n=[];t.documents.forEach(e=>{e.id&&n.push(e.id)}),n.length>0&&(n.forEach(e=>c.push(e)),u.push(e))}else{if(!await S(`embedding`))break;let t=await l(e);t?.id&&(c.push(t.id),u.push(e))}}catch(e){f++,m=e instanceof Error?e.message:`Unknown error`}if(r&&c.length>0){let e=[];for(let n of c)try{await p(r,n),e.push(n)}catch(e){t.doc.warn(`Could not attach document to session: ${e}`)}let n=a.getState().sessions.find(e=>e.id===r)?.document_ids??[],o=e.filter(e=>!n.includes(e));o.length>0&&i(r,{document_ids:[...n,...o]})}else c.length>0&&a.getState().addDraftDocuments(c);if(c.length>0)try{let e=await ee();a.getState().setDocuments(e.documents||[])}catch(e){t.doc.error(`Could not refresh the document list after indexing`,e)}return{docIds:c,supported:o,succeededFiles:u,unsupported:s,failed:f,lastError:m}}var A=e=>e.startsWith(`.`);function j({onStartChat:e}){let n=r(),{setShowFileBrowser:s,currentSessionId:c,updateSessionInList:l,setPendingPrompt:d}=a(),ee=(0,O.useCallback)(()=>s(!1),[s]);ce(!0,ee);let p=(0,O.useRef)(null);ae(p,!0),de(p,!0);let[g,_]=(0,O.useState)(``),[y,b]=(0,O.useState)(null),[S,fe]=(0,O.useState)([]),[C,he]=(0,O.useState)([]),[w,T]=(0,O.useState)(!1),[E,D]=(0,O.useState)(null),[j,xe]=(0,O.useState)(!1),[M,N]=(0,O.useState)(``),[P,F]=(0,O.useState)(null),[I,L]=(0,O.useState)([]),[Se,Ce]=(0,O.useState)(!1),[R,z]=(0,O.useState)(!1),[B,we]=(0,O.useState)(``),[V,H]=(0,O.useState)(new Set),[U,W]=(0,O.useState)(null),[Te,Ee]=(0,O.useState)(!1),[De,G]=(0,O.useState)(new Set),[Oe,K]=(0,O.useState)(null),q=(0,O.useRef)(null),[J,Y]=(0,O.useState)(null),X=(0,O.useCallback)(async e=>{T(!0),D(null),F(null),N(``),L([]);try{let n=await f(e);_(n.current_path),b(n.parent_path),fe(n.entries),n.quick_links.length>0&&he(n.quick_links),t.ui.info(`Browsing: ${n.current_path} (${n.entries.length} items)`)}catch(e){let n=e instanceof Error?e.message:`Failed to load directory`;D(n),t.ui.error(`Browse failed`,e)}finally{T(!1)}},[]);(0,O.useEffect)(()=>{X()},[X]),(0,O.useEffect)(()=>()=>{q.current&&clearTimeout(q.current)},[]);let ke=(0,O.useCallback)(async()=>{if(!M.trim())F(null),L([]);else{z(!0),D(null);try{let e=await m(M.trim(),B||void 0,30);F(e.results),L(e.searched_locations??[]),Ce(e.truncated===!0),t.ui.info(`Search "${M}": ${e.total} results`)}catch(e){let n=e instanceof Error?e.message:`Search failed`;D(n),t.ui.error(`Search failed`,e)}finally{z(!1)}}},[M,B]),Ae=e=>{e.key===`Enter`&&ke()},je=(0,O.useCallback)(e=>{e.type===`folder`&&(X(e.path),H(new Set),W(null))},[X]),Me=(0,O.useCallback)(async e=>{Ee(!0);try{let t=await u(e);W(t)}catch(e){t.ui.error(`Preview failed`,e)}finally{Ee(!1)}},[]),Z=(0,O.useCallback)(e=>{H(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Ne=(0,O.useCallback)(async()=>{if(V.size===0)return;let e=Array.from(V);if(Y(null),!e.some(e=>{let t=e.includes(`.`)?`.`+e.split(`.`).pop()?.toLowerCase():``;return!t||v(t)})){let t=e[0],n=t.lastIndexOf(`.`),r=n>0?t.slice(n).toLowerCase():``,i=h(r);Y({filename:e.length===1?t.split(/[\\/]/).pop()||t:`${e.length} files`,error:i?i.message:`File type "${r}" is not supported for indexing.`})}else{G(new Set(e)),K(`Indexing ${e.length} file(s)...`);try{let t=await k(e,S,c,l);if(t.failed>0)K(`Done: ${t.docIds.length} indexed, ${t.failed} failed`),Y({filename:`${t.failed} file(s)`,error:t.lastError||`Indexing failed for some files`});else{let e=t.unsupported.length>0?` (${t.unsupported.length} skipped — unsupported type)`:``;K(`Successfully indexed ${t.docIds.length} file(s)${e}`)}q.current&&clearTimeout(q.current),q.current=setTimeout(()=>K(null),5e3),H(new Set)}catch(n){t.doc.error(`Index selected failed`,n),Y({filename:e.length===1?e[0].split(/[\\/]/).pop()||e[0]:`${e.length} files`,error:n instanceof Error?n.message:`An unexpected error occurred.`})}finally{G(new Set)}}},[V,c,l,S]),Q=(0,O.useRef)(!1),Pe=(0,O.useCallback)(async()=>{if(V.size===0||Q.current)return;Q.current=!0;let n=Array.from(V);Y(null),G(new Set(n)),K(`Indexing ${n.length} file(s) for analysis...`);try{let t=await k(n,S,c,l);if(t.supported.length===0){let e=n[0].lastIndexOf(`.`),t=e>0?n[0].slice(e).toLowerCase():``,r=h(t);Y({filename:n.length===1?n[0].split(/[\\/]/).pop()||n[0]:`${n.length} files`,error:r?.message??`File type "${t}" is not supported for indexing.`});return}if(t.docIds.length===0){Y({filename:t.supported.length===1?t.supported[0].split(/[\\/]/).pop()||t.supported[0]:`${t.supported.length} files`,error:`Failed to index selected file(s). Please try again.`});return}t.failed>0&&K(`Warning: ${t.failed} file(s) failed to index and will be excluded.`);let r=(t.succeededFiles.length>0?t.succeededFiles:t.supported).map(e=>e.split(/[\\/]/).pop()||e),i=r.length===1?`Please analyze this document for me: ${r[0]}`:`Please analyze these documents for me:\n${r.map(e=>`- ${e}`).join(`
2
2
  `)}`;c?d({sessionId:c,text:i}):await e(i),s(!1),H(new Set)}catch(e){t.doc.error(`Ask Agent failed`,e),Y({filename:n.length===1?n[0].split(/[\\/]/).pop()||n[0]:`${n.length} files`,error:e instanceof Error?e.message:`An unexpected error occurred.`})}finally{Q.current=!1,G(new Set),K(null)}},[V,c,l,S,d,s,e]),Fe=g?g.replace(/\\/g,`/`).split(`/`).filter(Boolean):[],Ie=Fe.map((e,t)=>({label:e,path:Fe.slice(0,t+1).join(`/`)+(t===0&&e.includes(`:`)?`/`:``)})),Le=ve(I),Re=S.filter(e=>!A(e.name)),$=P?P.map(e=>({name:e.name,path:e.path,type:`file`,size:e.size,extension:e.extension||``,modified:e.modified||``})):j?S:Re,ze=S.length-Re.length;return(0,O.useEffect)(()=>{j||P||H(e=>{let t=[...e].filter(e=>!A(e.split(/[\\/]/).pop()??``));return t.length===e.size?e:new Set(t)})},[j,P]),i(`div`,{ref:p,className:`modal-overlay`,onClick:()=>s(!1),role:`dialog`,"aria-modal":`true`,"aria-label":`File browser`,children:o(`div`,{className:`modal-panel file-browser-modal ${U?`has-preview`:``}`,onClick:e=>e.stopPropagation(),children:[o(`div`,{className:`modal-header`,children:[o(`h3`,{children:[i(te,{size:18}),` File browser`]}),i(`button`,{className:`btn-icon`,onClick:()=>s(!1),"aria-label":`Close`,children:i(x,{size:18})})]}),o(`div`,{className:`file-browser-body`,children:[i(`div`,{className:`fb-quick-links`,children:C.map(e=>o(`button`,{className:`fb-quick-link`,onClick:()=>X(e.path),title:e.path,children:[ye(e.icon),i(`span`,{children:e.name})]},e.path))}),o(`div`,{className:`fb-search-bar`,children:[o(`div`,{className:`fb-search-input-wrap`,children:[i(se,{size:14,className:`fb-search-icon`}),i(`input`,{type:`text`,className:`fb-search-input`,placeholder:`Search files on your PC...`,value:M,onChange:e=>N(e.target.value),onKeyDown:Ae,"aria-label":`Search files`}),M&&i(`button`,{className:`fb-search-clear`,onClick:()=>{N(``),F(null),L([])},"aria-label":`Clear search`,children:i(x,{size:12})})]}),i(`select`,{className:`fb-type-filter`,value:B,onChange:e=>we(e.target.value),"aria-label":`File type filter`,children:be.map(e=>i(`option`,{value:e.value,children:e.label},e.value))}),i(`button`,{className:`fb-search-btn`,onClick:ke,disabled:!M.trim()||R,children:R?`Searching...`:`Search`})]}),!P&&o(`div`,{className:`fb-pathbar`,children:[o(`div`,{className:`fb-breadcrumb`,children:[i(`button`,{className:`fb-crumb`,onClick:()=>X(`/`),children:i(pe,{size:12})}),Ie.map((e,t)=>o(`span`,{className:`fb-crumb-item`,children:[i(me,{size:12,className:`fb-crumb-sep`}),i(`button`,{className:`fb-crumb`,onClick:()=>X(e.path),children:e.label})]},t)),y&&i(`button`,{className:`fb-up-btn`,onClick:()=>X(y),title:`Go up`,children:i(ie,{size:14})})]}),o(`label`,{className:`fb-hidden-toggle`,children:[i(`input`,{type:`checkbox`,checked:j,onChange:e=>xe(e.target.checked)}),`Show hidden`]})]}),P&&o(`div`,{className:`fb-search-header`,children:[o(`div`,{className:`fb-search-summary`,children:[o(`span`,{children:[`Found `,P.length,` result(s) for "`,M,`"`]}),Le&&o(`span`,{className:`fb-search-scope`,title:I.join(`
3
3
  `),children:[`Searching in: `,i(`code`,{children:Le})]}),Se&&i(`span`,{children:`Search stopped early, so some matches may be missing. Try a more specific name.`})]}),i(`button`,{className:`fb-back-btn`,onClick:()=>{F(null),N(``),L([])},children:`Back to browsing`})]}),E&&i(`div`,{className:`fb-error`,children:E}),o(`div`,{className:`fb-content`,children:[o(`div`,{className:`fb-file-list`,children:[w&&i(`div`,{className:`fb-loading`,children:`Loading...`}),!w&&$.length===0&&i(`div`,{className:`fb-empty`,children:P?`No files found`:ze>0?`Only hidden items here. Turn on Show hidden to see them.`:`This folder is empty`}),!w&&$.map(e=>{let t=e.extension||(e.name.includes(`.`)?`.`+e.name.split(`.`).pop()?.toLowerCase():``),r=e.type===`file`&&t&&!v(t),a=r?h(t):null;return o(`div`,{className:`fb-entry ${e.type} ${V.has(e.path)?`selected`:``} ${r?`unsupported`:``}`,onClick:()=>e.type===`folder`?je(e):Z(e.path),onDoubleClick:()=>e.type===`folder`?je(e):void 0,title:r?`${a?.label||`This`} file type cannot be indexed`:e.path,children:[i(`input`,{type:`checkbox`,className:`fb-entry-checkbox`,checked:V.has(e.path),onChange:()=>Z(e.path),onClick:e=>e.stopPropagation(),"aria-label":`Select ${e.name}`}),i(`span`,{className:`fb-entry-icon`,children:ge(e)}),i(`span`,{className:`fb-entry-name`,title:e.path,children:e.name}),r&&i(`span`,{className:`fb-unsupported-badge`,children:`Not indexable`}),e.type===`file`&&i(`button`,{type:`button`,className:`fb-entry-preview-btn`,onClick:t=>{t.stopPropagation(),Me(e.path)},"aria-label":`Preview ${e.name}`,title:`Preview file`,children:i(ne,{size:14})}),i(`span`,{className:`fb-entry-size`,children:e.type===`file`?ue(e.size):``}),i(`span`,{className:`fb-entry-date`,children:_e(e.modified,n)})]},e.path)})]}),U&&o(`div`,{className:`fb-preview`,children:[o(`div`,{className:`fb-preview-header`,children:[i(`span`,{className:`fb-preview-name`,children:U.name}),i(`button`,{className:`btn-icon-sm`,onClick:()=>W(null),"aria-label":`Close preview`,children:i(x,{size:14})})]}),o(`div`,{className:`fb-preview-meta`,children:[i(`span`,{children:U.size_display}),U.total_lines&&o(`span`,{children:[U.total_lines,` lines`]}),U.columns&&o(`span`,{children:[U.columns.length,` columns`]}),U.row_count!==null&&o(`span`,{children:[U.row_count,` rows`]})]}),U.columns&&o(`div`,{className:`fb-preview-columns`,children:[i(`strong`,{children:`Columns:`}),` `,U.columns.join(`, `)]}),Te?i(`div`,{className:`fb-preview-loading`,children:`Loading preview...`}):U.is_text&&U.preview_lines.length>0?i(`pre`,{className:`fb-preview-content`,children:U.preview_lines.slice(0,30).join(`
4
4
  `)}):i(`div`,{className:`fb-preview-binary`,children:`Binary file - no preview available`})]})]}),J&&i(le,{filename:J.filename,error:J.error,onDismiss:()=>Y(null)}),o(`div`,{className:`fb-actions`,children:[i(`div`,{className:`fb-selection-info`,children:V.size>0?`${V.size} item(s) selected`:`Select files to index or analyze`}),Oe&&i(`span`,{className:`fb-index-status`,children:Oe}),o(`div`,{className:`fb-action-btns`,children:[o(`button`,{className:`fb-action-btn secondary`,onClick:Ne,disabled:V.size===0||De.size>0,title:`Index selected files for RAG search`,children:[i(oe,{size:14}),`Index Selected`]}),o(`button`,{className:`fb-action-btn primary`,onClick:Pe,disabled:V.size===0||De.size>0,title:`Index and send selected files to the chat agent for analysis`,children:[i(re,{size:14}),`Ask Agent`]})]})]})]})]})})}export{j as FileBrowser};