ltcai 9.6.0 → 9.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -306
- package/auto_setup.py +11 -1
- package/docs/CHANGELOG.md +91 -0
- package/docs/COMMUNITY_AND_PLUGINS.md +1 -1
- package/docs/DEVELOPMENT.md +1 -1
- package/docs/ONBOARDING.md +1 -1
- package/docs/PERFORMANCE.md +106 -0
- package/docs/TRUST_MODEL.md +1 -1
- package/docs/WHY_LATTICE.md +1 -1
- package/docs/kg-schema.md +1 -1
- package/kg_schema.py +11 -1
- package/knowledge_graph.py +12 -2
- package/knowledge_graph_api.py +11 -1
- package/lattice_brain/__init__.py +1 -1
- package/lattice_brain/graph/proactive.py +583 -0
- package/lattice_brain/graph/retrieval.py +301 -8
- package/lattice_brain/graph/retrieval_vector.py +145 -0
- package/lattice_brain/ingestion.py +757 -16
- package/lattice_brain/quality.py +44 -9
- package/lattice_brain/runtime/multi_agent.py +38 -2
- package/latticeai/__init__.py +1 -1
- package/latticeai/api/brain_intelligence.py +39 -2
- package/latticeai/api/change_proposals.py +32 -3
- package/latticeai/api/chat.py +17 -0
- package/latticeai/api/chat_helpers.py +48 -0
- package/latticeai/api/chat_stream.py +9 -1
- package/latticeai/api/local_files.py +120 -2
- package/latticeai/api/review_queue.py +66 -2
- package/latticeai/app_factory.py +3 -0
- package/latticeai/core/agent.py +193 -135
- package/latticeai/core/agent_eval.py +278 -4
- package/latticeai/core/legacy_compatibility.py +15 -1
- package/latticeai/core/marketplace.py +1 -1
- package/latticeai/core/workspace_os.py +1 -1
- package/latticeai/runtime/router_registration.py +2 -0
- package/latticeai/services/architecture_readiness.py +1 -1
- package/latticeai/services/automation_intelligence.py +151 -14
- package/latticeai/services/brain_intelligence.py +169 -1
- package/latticeai/services/change_proposals.py +56 -4
- package/latticeai/services/product_readiness.py +1 -1
- package/latticeai/services/review_queue.py +43 -2
- package/llm_router.py +10 -1
- package/local_knowledge_api.py +10 -1
- package/ltcai_cli.py +11 -1
- package/mcp_registry.py +10 -1
- package/p_reinforce.py +10 -1
- package/package.json +1 -1
- package/scripts/brain_quality_eval.py +1 -1
- package/scripts/check_current_release_docs.mjs +1 -1
- package/scripts/profile_kg.py +360 -0
- package/setup_wizard.py +10 -1
- package/src-tauri/Cargo.lock +1 -1
- package/src-tauri/Cargo.toml +1 -1
- package/src-tauri/tauri.conf.json +1 -1
- package/static/app/asset-manifest.json +11 -11
- package/static/app/assets/{Act-BkOEmwBi.js → Act-Dd3z8AzF.js} +2 -1
- package/static/app/assets/Brain-BMkgdWnI.js +321 -0
- package/static/app/assets/Capture-D2Aw9gkv.js +1 -0
- package/static/app/assets/Library-Yreq-KW5.js +1 -0
- package/static/app/assets/System-CXNmmtEo.js +1 -0
- package/static/app/assets/{index-85wQvEie.css → index-7gY9t9Sd.css} +1 -1
- package/static/app/assets/index-CndfILiF.js +18 -0
- package/static/app/assets/primitives-DxsIXb6G.js +1 -0
- package/static/app/assets/textarea-DH7ne8VI.js +1 -0
- package/static/app/index.html +2 -2
- package/static/sw.js +1 -1
- package/static/app/assets/Brain-C9ITUsQ_.js +0 -321
- package/static/app/assets/Capture-C-ppTeud.js +0 -1
- package/static/app/assets/Library-CGQbgWTu.js +0 -1
- package/static/app/assets/System-djmj0n2_.js +0 -1
- package/static/app/assets/index-AF0-4XVv.js +0 -18
- package/static/app/assets/primitives-jbb2qv4Q.js +0 -1
- package/static/app/assets/textarea-CFoo0OxJ.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,c as t,d as n,g as r,h as i,i as a,m as o,n as s,p as c,t as l,u,y as d}from"./primitives-jbb2qv4Q.js";import{B as f,E as p,F as m,H as h,I as g,L as _,N as v,P as y,R as b,T as x,f as S,g as C,h as w,i as T,m as E,n as D,p as O,r as k,u as A,w as j,x as M}from"./index-AF0-4XVv.js";var N=j(`clipboard-paste`,[[`path`,{d:`M11 14h10`,key:`1w8e9d`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v1.344`,key:`1e62lh`}],[`path`,{d:`m17 18 4-4-4-4`,key:`z2g111`}],[`path`,{d:`M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113`,key:`bjbb7m`}],[`rect`,{x:`8`,y:`2`,width:`8`,height:`4`,rx:`1`,key:`ublpy`}]]),P=j(`scan-line`,[[`path`,{d:`M3 7V5a2 2 0 0 1 2-2h2`,key:`aa7l1z`}],[`path`,{d:`M17 3h2a2 2 0 0 1 2 2v2`,key:`4qcy5o`}],[`path`,{d:`M21 17v2a2 2 0 0 1-2 2h-2`,key:`6vwrx8`}],[`path`,{d:`M7 21H5a2 2 0 0 1-2-2v-2`,key:`ioqczr`}],[`path`,{d:`M7 12h10`,key:`b7w52i`}]]),F=j(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),I=h(f()),L=b();function R({initialTab:e}){let t=y(e=>e.language),r=y(e=>e.mode),[i,a]=I.useState(e||`files`),o=[{id:`files`,label:x(t,`capture.tab.files`)},{id:`local`,label:x(t,`capture.tab.local`)},{id:`browser`,label:x(t,`capture.tab.browser`)},{id:`pipeline`,label:x(t,`capture.tab.pipeline`)}];I.useEffect(()=>{(e===`pipeline`||e===`local`||e===`browser`||e===`files`)&&a(e)},[e]);let s=e=>{a(e),D(`/`+{files:`capture`,local:`my-computer`,browser:`capture-browser`,pipeline:`pipeline`}[e])};return(0,L.jsxs)(`div`,{className:`product-page capture-page space-y-5`,children:[(0,L.jsxs)(`header`,{className:`page-hero`,children:[(0,L.jsxs)(`div`,{className:`page-kicker`,children:[(0,L.jsx)(F,{className:`h-4 w-4`}),` `,x(t,`capture.kicker`)]}),(0,L.jsx)(`h1`,{className:`page-title`,children:x(t,`capture.title`)}),(0,L.jsx)(`p`,{className:`page-copy`,children:x(t,`capture.body`)})]}),(0,L.jsx)(n,{tabs:r===`basic`?o.filter(e=>e.id!==`pipeline`):o,value:i,onChange:e=>s(e)}),i===`files`?(0,L.jsx)(z,{}):null,i===`local`?(0,L.jsx)(X,{}):null,i===`browser`?(0,L.jsx)(Z,{}):null,i===`pipeline`?(0,L.jsx)($,{}):null]})}function z(){let t=y(e=>e.language),n=_(),l=g({queryKey:[`documents`],queryFn:()=>v.documents(200)}),[u,d]=I.useState([]),f=m({mutationFn:e=>B(e,d),onSuccess:()=>{n.invalidateQueries({queryKey:[`documents`]}),n.invalidateQueries({queryKey:[`graphStats`]}),n.invalidateQueries({queryKey:[`memoryManager`]})}}),p=I.useCallback(e=>{let t=Array.from(e);t.length&&f.mutate(t)},[f]);return(0,L.jsxs)(`div`,{className:`capture-files-flow grid gap-4 xl:grid-cols-[0.75fr_1.25fr]`,children:[(0,L.jsxs)(c,{children:[(0,L.jsxs)(r,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(F,{className:`h-4 w-4`}),` `,x(t,`capture.files.title`)]}),(0,L.jsx)(i,{children:x(t,`capture.files.description`)})]}),(0,L.jsxs)(o,{children:[(0,L.jsxs)(`label`,{className:`flex min-h-56 cursor-pointer flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border bg-muted/30 p-6 text-center transition hover:bg-muted/50`,onDragOver:e=>e.preventDefault(),onDrop:e=>{e.preventDefault(),p(e.dataTransfer.files)},children:[(0,L.jsx)(F,{className:`h-7 w-7 text-primary`}),(0,L.jsx)(`span`,{className:`text-lg font-semibold`,children:x(t,`capture.files.drop`)}),(0,L.jsx)(`span`,{className:`max-w-sm text-sm leading-6 text-muted-foreground`,children:x(t,`capture.files.dropDetail`)}),(0,L.jsx)(`input`,{type:`file`,multiple:!0,className:`sr-only`,onChange:e=>e.target.files&&p(e.target.files)})]}),(0,L.jsx)(V,{queue:u,onRetry:e=>p([e])})]})]}),(0,L.jsx)(s,{title:x(t,`capture.files.uploaded`),result:l.data,children:e=>(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(a,{items:e.documents||e,titleKey:`filename`,metaKey:`ingest_state`,limit:12}),(0,L.jsx)(`div`,{className:`rounded-md border border-border bg-background/55 p-3 text-sm text-muted-foreground`,children:x(t,`capture.files.completed`)})]})})]})}async function B(e,t){let n=e.map(e=>({id:`${e.name}-${e.size}-${e.lastModified}-${Date.now()}`,file:e,name:W(e),size:e.size,status:`queued`}));t(e=>[...n,...e].slice(0,12));let r=[];for(let e of n){t(t=>t.map(t=>t.id===e.id?{...t,status:`uploading`}:t));let n=await v.uploadDocument(e.file);r.push(n),t(t=>t.map(t=>t.id===e.id?{...t,status:n.ok?`done`:`failed`,result:n}:t))}return r}function V({queue:e,onRetry:n}){let r=y(e=>e.language);return e.length?(0,L.jsx)(`div`,{className:`mt-4 space-y-2`,children:e.map(e=>{let i=H(e,r);return(0,L.jsxs)(`div`,{className:`rounded-md border border-border bg-background/55 p-3 text-sm`,children:[(0,L.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-2 font-medium`,children:[e.status===`done`?(0,L.jsx)(M,{className:`h-4 w-4 text-emerald-400`}):e.status===`failed`?(0,L.jsx)(d,{className:`h-4 w-4 text-amber-400`}):(0,L.jsx)(S,{className:`h-4 w-4 animate-spin text-primary`}),e.name]}),(0,L.jsxs)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:[Math.max(1,Math.round(e.size/1024)),` KB · `,i]})]}),e.status===`failed`?(0,L.jsxs)(T,{size:`sm`,variant:`outline`,onClick:()=>n(e.file),children:[(0,L.jsx)(A,{className:`h-3.5 w-3.5`}),` `,x(r,`capture.retry`)]}):null]}),e.result?(0,L.jsx)(t,{result:e.result,successLabel:x(r,`capture.files.success`)}):null]},e.id)})}):null}function H(e,t){if(e.status===`queued`)return x(t,`capture.files.queued`);if(e.status===`uploading`)return x(t,`capture.files.uploading`);if(!e.result?.ok)return e.result?.error||x(t,`capture.files.failed`);let n=e.result.data||{},r=String(n.node_id||n.graph_node||n.provenance_id||``);return r?x(t,`capture.files.capturedWithNode`,{node:r}):x(t,`capture.files.captured`)}var U={webkitdirectory:``,directory:``};function W(e){return e.webkitRelativePath||e.name}function G(e){return(e[0]?.webkitRelativePath||``).split(`/`).filter(Boolean)[0]||``}function K(){let e=window;return!!(e.__TAURI__?.core?.invoke||e.latticeDesktop?.selectFolder||e.__TAURI_INTERNALS__&&window.location.protocol===`tauri:`)}function q(e){return e instanceof DOMException&&e.name===`AbortError`}async function J(e){let t=[];if(typeof e.values==`function`){for await(let n of e.values())t.push(n);return t}if(typeof e.entries==`function`)for await(let[,n]of e.entries())t.push(n);return t}async function Y(e){let t=[];for(let n of await J(e)){if(n.kind===`file`){t.push(await n.getFile());continue}t.push(...await Y(n))}return t}function X(){let n=y(e=>e.language),d=_(),f=I.useRef(null),[h,b]=I.useState(``),[C,D]=I.useState(null),[O,A]=I.useState(``),[j,M]=I.useState(!1),[N,F]=I.useState([]),R=g({queryKey:[`localSources`],queryFn:v.localSources}),z=g({queryKey:[`localAgent`],queryFn:v.localAgent}),H=m({mutationFn:e=>v.connectFolder((e||h).trim()),onSuccess:()=>{D(null),d.invalidateQueries({queryKey:[`localSources`]}),d.invalidateQueries({queryKey:[`graphStats`]}),d.invalidateQueries({queryKey:[`memoryManager`]})}}),W=m({mutationFn:e=>B(e,F),onSuccess:()=>{d.invalidateQueries({queryKey:[`documents`]}),d.invalidateQueries({queryKey:[`graphStats`]}),d.invalidateQueries({queryKey:[`memoryManager`]})}}),J=I.useCallback((e,t)=>{if(!e.length){D(x(n,`capture.local.emptyFolder`));return}D(null),A(t||G(e)||x(n,`capture.local.browserFolder`)),W.mutate(e)},[W,n]),X=I.useCallback(async()=>{if(!j){M(!0),D(null);try{let e=window.showDirectoryPicker;if(!K()&&typeof e==`function`){let t=await e.call(window);J(await Y(t),t.name);return}if(K()){let e=await v.selectFolder();if(e){A(``),b(e),H.mutate(e);return}}if(typeof e==`function`){let t=await e.call(window);J(await Y(t),t.name);return}if(f.current){f.current.click();return}D(x(n,`capture.local.pickUnavailable`))}catch(e){q(e)||D(x(n,`capture.local.pickUnavailable`))}finally{M(!1)}}},[J,j,H,n]),Z=I.useCallback(()=>{let e=h.trim();e&&(D(null),A(``),H.mutate(e))},[H,h]),Q=(W.data||[]).find(e=>!e.ok)?.error,$=!!(W.error||Q);return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[0.9fr_1.1fr]`,children:[(0,L.jsxs)(c,{children:[(0,L.jsxs)(r,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(E,{className:`h-4 w-4`}),` `,x(n,`capture.local.title`)]}),(0,L.jsx)(i,{children:x(n,`capture.local.description`)})]}),(0,L.jsxs)(o,{className:`space-y-3`,children:[(0,L.jsxs)(`form`,{className:`space-y-3`,onSubmit:e=>{e.preventDefault(),Z()},children:[(0,L.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,L.jsx)(k,{value:h,onChange:e=>b(e.target.value),placeholder:x(n,`capture.local.placeholder`)}),(0,L.jsxs)(T,{type:`button`,variant:`outline`,disabled:j||H.isPending||W.isPending,onClick:()=>void X(),children:[j?(0,L.jsx)(S,{className:`h-4 w-4 animate-spin`}):(0,L.jsx)(w,{className:`h-4 w-4`}),j?x(n,`capture.local.choosing`):x(n,`capture.local.choose`)]})]}),(0,L.jsx)(`input`,{ref:f,type:`file`,multiple:!0,className:`sr-only`,"aria-hidden":`true`,tabIndex:-1,...U,onChange:e=>{let t=Array.from(e.currentTarget.files||[]);e.currentTarget.value=``,J(t)}}),(0,L.jsxs)(T,{type:`submit`,disabled:!h.trim()||H.isPending,children:[H.isPending?(0,L.jsx)(S,{className:`h-4 w-4 animate-spin`}):(0,L.jsx)(P,{className:`h-4 w-4`}),x(n,`capture.local.connect`)]})]}),C?(0,L.jsx)(t,{result:{ok:!1,status:0,data:{},source:`unavailable`,error:C}}):null,H.data?(0,L.jsx)(t,{result:H.data,successLabel:x(n,`capture.local.success`)}):null,O?(0,L.jsx)(t,{result:{ok:W.isPending||!$,status:$?0:200,data:{folder:O},source:$?`unavailable`:`live`,error:W.error?x(n,`capture.local.browserImportFailed`):Q},successLabel:W.isPending?x(n,`capture.local.browserImporting`):x(n,`capture.local.browserImportSuccess`,{folder:O})}):null,(0,L.jsx)(V,{queue:N,onRetry:e=>J([e],O)})]})]}),(0,L.jsx)(s,{title:x(n,`capture.local.sources`),result:R.data,children:e=>(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(a,{items:e.sources,titleKey:`path`,metaKey:`status`}),p(e.sources).map(e=>(0,L.jsx)(l,{label:x(n,`capture.local.stop`,{source:String(e.path||e.id||x(n,`capture.local.source`))}),action:()=>v.localWatchStop(String(e.id||e.source_id)),invalidate:[`localSources`]},String(e.id||e.source_id||e.path)))]})}),(0,L.jsx)(s,{title:x(n,`capture.local.access`),result:z.data,className:`xl:col-span-2`,children:e=>(0,L.jsx)(u,{value:e})})]})}function Z(){let n=y(e=>e.language),a=_(),[s,l]=I.useState(``),u=m({mutationFn:e=>v.browserReadUrl(e),onSuccess:()=>{a.invalidateQueries({queryKey:[`graphStats`]}),a.invalidateQueries({queryKey:[`memoryManager`]})}}),d=I.useCallback(()=>{let e=Q(s);e&&(l(e),u.mutate(e))},[u,s]),f=I.useCallback(async()=>{let e=Q(await navigator.clipboard?.readText().catch(()=>``)||``);e&&(l(e),u.mutate(e))},[u]);return(0,L.jsxs)(c,{children:[(0,L.jsxs)(r,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(C,{className:`h-4 w-4`}),` `,x(n,`capture.browser.title`)]}),(0,L.jsx)(i,{children:x(n,`capture.browser.description`)})]}),(0,L.jsxs)(o,{className:`space-y-3`,children:[(0,L.jsxs)(`form`,{className:`flex flex-col gap-2 sm:flex-row`,onSubmit:e=>{e.preventDefault(),d()},children:[(0,L.jsx)(k,{value:s,onChange:e=>l(e.target.value),placeholder:x(n,`capture.browser.placeholder`),inputMode:`url`}),(0,L.jsxs)(T,{type:`button`,variant:`outline`,disabled:u.isPending,onClick:()=>void f(),children:[(0,L.jsx)(N,{className:`h-4 w-4`}),` `,x(n,`capture.browser.paste`)]}),(0,L.jsxs)(T,{type:`submit`,disabled:!s.trim()||u.isPending,children:[u.isPending?(0,L.jsx)(S,{className:`h-4 w-4 animate-spin`}):(0,L.jsx)(P,{className:`h-4 w-4`}),x(n,`capture.browser.capture`)]})]}),u.data?(0,L.jsx)(t,{result:u.data,successLabel:x(n,`capture.browser.success`)}):null]})]})}function Q(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?t:/^[\w.-]+\.[a-z]{2,}([/:?#].*)?$/i.test(t)?`https://${t}`:t:``}function $(){let t=y(e=>e.language),n=g({queryKey:[`index`],queryFn:v.indexStatus}),a=g({queryKey:[`graphStats`],queryFn:v.graphStats});return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,L.jsx)(s,{title:x(t,`capture.pipeline.status`),result:n.data,children:e=>(0,L.jsx)(u,{value:e})}),(0,L.jsx)(s,{title:x(t,`capture.pipeline.growth`),result:a.data,children:e=>(0,L.jsx)(u,{value:e})}),(0,L.jsxs)(c,{className:`xl:col-span-2`,children:[(0,L.jsxs)(r,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(O,{className:`h-4 w-4`}),` `,x(t,`capture.pipeline.refresh`)]}),(0,L.jsx)(i,{children:x(t,`capture.pipeline.description`)})]}),(0,L.jsx)(o,{children:(0,L.jsx)(l,{label:x(t,`capture.pipeline.rebuild`),action:()=>v.rebuildIndex(),invalidate:[`index`]})})]})]})}export{R as CapturePage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,c as t,d as n,f as r,g as i,h as a,i as o,l as s,m as c,n as l,p as u,r as d,t as f,u as p,v as m}from"./primitives-jbb2qv4Q.js";import{B as h,E as g,F as _,H as v,I as y,L as b,N as x,P as S,R as C,T as w,_ as T,i as E,n as D,r as O,w as k,x as A,y as j}from"./index-AF0-4XVv.js";var M=k(`boxes`,[[`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`,key:`lc1i9w`}],[`path`,{d:`m7 16.5-4.74-2.85`,key:`1o9zyk`}],[`path`,{d:`m7 16.5 5-3`,key:`va8pkn`}],[`path`,{d:`M7 16.5v5.17`,key:`jnp8gn`}],[`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`,key:`8zsnat`}],[`path`,{d:`m17 16.5-5-3`,key:`8arw3v`}],[`path`,{d:`m17 16.5 4.74-2.85`,key:`8rfmw`}],[`path`,{d:`M17 16.5v5.17`,key:`k6z78m`}],[`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`,key:`1xygjf`}],[`path`,{d:`M12 8 7.26 5.15`,key:`1vbdud`}],[`path`,{d:`m12 8 4.74-2.85`,key:`3rx089`}],[`path`,{d:`M12 13.5V8`,key:`1io7kd`}]]),N=k(`circle-play`,[[`path`,{d:`M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z`,key:`kmsa83`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),P=k(`package-plus`,[[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`path`,{d:`M16 17h6`,key:`1ook5g`}],[`path`,{d:`M19 14v6`,key:`1ckrd5`}],[`path`,{d:`M21 10.535V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.729l7 4a2 2 0 0 0 2 .001l1.675-.955`,key:`28k6lz`}],[`path`,{d:`M3.29 7 12 12l8.71-5`,key:`19ckod`}],[`path`,{d:`m7.5 4.27 8.997 5.148`,key:`9yrvtv`}]]),F=k(`plug`,[[`path`,{d:`M12 22v-5`,key:`1ega77`}],[`path`,{d:`M15 8V2`,key:`18g5xt`}],[`path`,{d:`M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z`,key:`1xoxul`}],[`path`,{d:`M9 8V2`,key:`14iosj`}]]),I=k(`shield-alert`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]),L=v(h()),R=C(),z=[{id:`models`,labelKey:`library.tab.models`},{id:`skills`,labelKey:`library.tab.skills`},{id:`mcp`,labelKey:`library.tab.mcp`},{id:`marketplace`,labelKey:`library.tab.marketplace`}];function B({initialTab:e}){let t=S(e=>e.mode),r=S(e=>e.language),[i,a]=L.useState(e||`models`);L.useEffect(()=>{z.some(t=>t.id===e)&&a(e)},[e]);let o=(t===`basic`?z.filter(e=>e.id===`models`):z).map(e=>({id:e.id,label:w(r,e.labelKey)})),s=e=>{a(e),D(`/`+e)};return(0,R.jsxs)(`div`,{className:`product-page library-page space-y-5`,children:[(0,R.jsxs)(`header`,{className:`page-hero`,children:[(0,R.jsxs)(`div`,{className:`page-kicker`,children:[(0,R.jsx)(M,{className:`h-4 w-4`}),` `,w(r,`library.kicker`)]}),(0,R.jsx)(`h1`,{className:`page-title`,children:w(r,`library.title`)}),(0,R.jsx)(`p`,{className:`page-copy`,children:w(r,`library.body`)})]}),(0,R.jsx)(n,{tabs:o,value:i,onChange:e=>s(e)}),i===`models`?(0,R.jsx)(V,{}):null,i===`skills`?(0,R.jsx)(K,{}):null,i===`mcp`?(0,R.jsx)(q,{}):null,i===`marketplace`?(0,R.jsx)(J,{}):null]})}function V(){let e=b(),t=S(e=>e.mode),n=S(e=>e.language),i=y({queryKey:[`models`],queryFn:x.models}),a=y({queryKey:[`modelRecommendations`,`local_mlx`],queryFn:()=>x.modelRecommendations(`local_mlx`)}),s=y({queryKey:[`embeddings`],queryFn:x.embeddingsStatus}),[c,u]=L.useState(!1),[h,_]=L.useState(null),[v,C]=L.useState([]),[D,O]=L.useState(null),[k,M]=L.useState(null),[F,z]=L.useState(!1),B=[...g(i.data?.data?.catalog),...g(i.data?.data?.recommended)],V=g(a.data?.data?.recommendations?.models),K=new Map(V.map(e=>[String(e.id),e])),q=g(i.data?.data?.loaded),J=String(i.data?.data?.current||``),Y=B.find(e=>q.includes(String(e.id))||String(e.id)===J),X=a.data?.data?.recommendations?.top_pick||null,Z=v[v.length-1]||null,Q=L.useCallback(e=>{let r=String(e||w(n,`library.model.notReady`));if(t!==`basic`)return r;let i=r.replace(/gemma4_unified/gi,w(n,`library.model.localFormat`)).replace(/mlx[-_ ]?vlm|mlx[-_ ]?lm|local_mlx|\bmlx\b|\bgguf\b|\bollama\b|hugging face/gi,w(n,`library.model.localSupport`)).replace(/runtime/gi,w(n,`library.model.support`)).replace(/model_type/gi,w(n,`library.model.format`));return n===`en`?i.replace(/this local model format local model support format/gi,w(n,`library.model.localFormat`)).replace(/local model support model support/gi,w(n,`library.model.localSupport`)):i},[n,t]);async function $(t,n,r){z(!0),_(t),C([]),O(null),M(null);let i=await x.streamModelPrepare({model:t,engine:n||`local_mlx`,allow_download:r},{onProgress:e=>C(t=>[...t.slice(-8),e]),onDone:e=>O(e),onError:e=>M(e)});z(!1),await e.invalidateQueries({queryKey:[`models`]}),await e.invalidateQueries({queryKey:[`modelRecommendations`,`local_mlx`]}),!i.ok&&!k&&M(i.data)}return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1.2fr_0.8fr]`,children:[(0,R.jsxs)(`div`,{className:`space-y-4`,children:[(0,R.jsx)(l,{title:w(n,`library.models.setup.title`),description:w(n,`library.models.setup.desc`),result:a.data,children:r=>{let i=r.recommendations,a=r.profile;return(0,R.jsxs)(`div`,{className:`space-y-4`,children:[(0,R.jsx)(U,{language:n,mode:t,profile:a||{},recommendation:i||{},current:Y,currentId:J,latestProgress:Z,lastResult:D,onReload:()=>{Y&&$(String(Y.recommended_load_id||Y.id||J),String(Y.recommended_engine||Y.engine||`local_mlx`),c)},onUnload:()=>{J&&x.unloadModel(J).then(()=>e.invalidateQueries({queryKey:[`models`]}))}}),(0,R.jsx)(`div`,{className:`grid gap-2 md:grid-cols-3 xl:grid-cols-6`,children:[[w(n,`library.step.environment`),!0,j],[w(n,`library.step.recommend`),!!(X||B.length),A],[w(n,`library.step.install`),!!(Y||Z?.stage===`engine`),P],[w(n,`library.step.download`),!!(Y||Z?.stage===`download`),T],[w(n,`library.step.validate`),!!(Y||Z?.stage===`smoke_test`),I],[w(n,`library.step.ready`),!!(Y||D),N]].map(([e,t,r])=>(0,R.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3`,children:[L.createElement(r,{className:`h-4 w-4 text-primary`}),(0,R.jsx)(`div`,{className:`mt-2 text-sm font-medium`,children:String(e)}),(0,R.jsx)(m,{variant:t?`success`:`muted`,children:t?w(n,`library.step.done`):w(n,`library.step.pending`)})]},String(e)))}),(0,R.jsxs)(`label`,{className:`flex items-start gap-2 rounded-lg border border-border bg-background/55 p-3 text-sm leading-6`,children:[(0,R.jsx)(`input`,{className:`mt-1`,type:`checkbox`,checked:c,onChange:e=>u(e.target.checked)}),(0,R.jsx)(`span`,{children:w(n,`library.consent`)})]}),Z?(0,R.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(Z.message||w(n,`library.preparing`))}),(0,R.jsx)(`div`,{className:`mt-2 h-2 overflow-hidden rounded-full bg-muted`,children:(0,R.jsx)(`div`,{className:`h-full bg-primary`,style:{width:`${Number(Z.percent||8)}%`}})}),Z.detail?(0,R.jsx)(`div`,{className:`mt-2 text-xs text-muted-foreground`,children:String(Z.detail)}):null]}):null,k?(0,R.jsx)(W,{error:k}):null]})}}),(0,R.jsx)(l,{title:t===`basic`?w(n,`library.panel.recommended.basic`):w(n,`library.panel.recommended.other`),result:i.data,children:e=>(0,R.jsxs)(`div`,{className:`grid gap-2`,children:[(B.length?B:g(e.loaded)).slice(0,t===`basic`?3:14).map((r,i)=>{let a=String(r.id||r.model_id||r.name||i),o=g(e.loaded).includes(a)||e.current===a||r.state===`loaded`,s=String(r.recommended_load_id||a),l=String(r.recommended_engine||r.engine||``),u=K.get(a)||K.get(s)||{},d=G(r.verification),p=G(u.verification),_=G(r.hardware),v=G(u.hardware),y=_.notes||v.notes||(_.recommended_ram_gb?w(n,`library.model.ramRecommended`,{ram:String(_.recommended_ram_gb)}):``),b=r.safety_notes||u.safety_notes,S=r.license||u.license,C=r.runtime_compatibility||u.runtime_compatibility||{},T=String(C.status||``)===`fallback_available`,D=r.load_status===`unsupported`||C.supported===!1,O=!!r.download_required,k=(!!r.load_available||o)&&!D,A=String(r.load_status||(o?`loaded`:`unavailable`)),j=Q(r.unavailable_reason||w(n,`library.model.notReady`)),M=String(r.runtime_label||C.preferred_runtime||l||`local_mlx`),N=String(C.action||A.replace(/_/g,` `)),P=D&&t===`basic`?w(n,`library.model.needsAttention`):D?N:A,I=k||O,L=r.download_size||r.estimated_size||u.download_size||u.estimated_size||r.size||u.size,z=r.provider||u.provider||r.organization||u.organization;return(0,R.jsxs)(`div`,{className:`grid gap-3 rounded-lg border border-border bg-background/55 p-4 md:grid-cols-[1fr_auto]`,children:[(0,R.jsxs)(`div`,{className:`min-w-0`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,R.jsx)(`div`,{className:`text-base font-semibold`,children:String(r.name||a)}),X?.id===a||r.recommended_default?(0,R.jsx)(m,{variant:`success`,children:w(n,`library.model.recommended`)}):null,String(r.modality||u.modality||``).includes(`multi`)||String(r.modality||``)===`multimodal`?(0,R.jsx)(m,{variant:`muted`,children:w(n,`library.model.multimodal`)}):null,d.verified||p.verified?(0,R.jsx)(m,{variant:`success`,title:w(n,`library.model.hfVerified`),children:`✓ HF`}):null]}),(0,R.jsx)(`div`,{className:`mt-1 text-sm text-muted-foreground`,children:t===`basic`?[Q(r.family||u.family||w(n,`library.model.local`)),/mlx|gguf|ollama/i.test(String(r.size||u.size||``))?``:r.size||u.size].filter(Boolean).map(String).join(` · `):[r.family||u.family||w(n,`library.value.local`),r.size||u.size].filter(Boolean).map(String).join(` · `)}),r.hardware||u.hardware?(0,R.jsx)(`div`,{className:`mt-1 text-[11px] text-muted-foreground/80`,children:String(y)}):null,(0,R.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1 text-[11px] text-muted-foreground`,children:[(0,R.jsx)(m,{variant:`muted`,children:O?w(n,`library.model.downloadSize`,{size:String(L||w(n,`library.model.downloadRequired`))}):w(n,`library.model.noDownload`)}),(0,R.jsx)(m,{variant:`muted`,children:O?w(n,`library.model.internetDuringDownload`):w(n,`library.model.runsLocally`)}),z?(0,R.jsx)(m,{variant:`muted`,children:String(z)}):null]}),D?(0,R.jsxs)(`div`,{className:`mt-3 rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:t===`basic`?w(n,`library.model.attentionBeforeLoad`):N}),(0,R.jsx)(`div`,{className:`text-muted-foreground`,children:Q(C.user_message||j)})]}):T?(0,R.jsxs)(`div`,{className:`mt-3 rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:t===`basic`?w(n,`library.model.compatiblePath`):w(n,`library.model.runtimeFallback`)}),(0,R.jsx)(`div`,{className:`text-muted-foreground`,children:Q(C.user_message||w(n,`library.model.compatibilityFallback`))})]}):!o&&!k?(0,R.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:j}):null,t===`basic`?null:(0,R.jsxs)(`div`,{className:`mt-2 space-y-1 text-xs text-muted-foreground`,children:[(0,R.jsxs)(`div`,{children:[M,` · `,s,r.load_strategy||u.load_strategy?` · ${String(r.load_strategy||u.load_strategy)}`:``,d.notes?` · ${String(d.notes).slice(0,60)}`:``]}),b||S?(0,R.jsx)(`div`,{children:[S?w(n,`library.model.license`,{license:String(S)}):``,b?String(b):``].filter(Boolean).join(` · `)}):null]}),D||T?(0,R.jsx)(H,{compatibility:C}):null]}),(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 md:justify-end`,children:[(0,R.jsx)(m,{variant:o?`success`:k?`muted`:`warning`,children:o?w(n,`library.model.loaded`):P}),o?(0,R.jsx)(f,{label:w(n,`library.runtime.unload`),action:()=>x.unloadModel(s),invalidate:[`models`]}):(0,R.jsx)(E,{variant:`outline`,disabled:F||D||!I||O&&!c,onClick:()=>$(s,l||`local_mlx`,c),children:h===s&&F?w(n,`library.btn.preparing`):O?w(n,`library.btn.installLoad`):w(n,`library.btn.validateLoad`)})]})]},a)}),t===`basic`&&B.length>3?(0,R.jsx)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3 text-sm text-muted-foreground`,children:w(n,`library.model.shortListHint`)}):null]})})]}),(0,R.jsxs)(`div`,{className:`space-y-4`,children:[(0,R.jsx)(l,{title:t===`basic`?w(n,`library.models.embedding.basic`):w(n,`library.models.embedding.advanced`),result:s.data,children:e=>t===`basic`?(0,R.jsx)(r,{value:e.state||w(n,`library.value.ready`)}):(0,R.jsx)(p,{value:e})}),(0,R.jsx)(l,{title:t===`basic`?w(n,`library.models.validation`):w(n,`library.models.validationAdvanced`),result:i.data,children:e=>{let r=g(e.compat_profiles);return r.length?(0,R.jsx)(o,{items:r.map(e=>({...e,name:t===`basic`?e.name||e.display_name||w(n,`library.model.loadedName`):e.name||e.display_name||e.model_id,status:e.quality_status||e.load_status||w(n,`library.model.checked`)})),titleKey:`name`,metaKey:`status`,limit:6}):(0,R.jsx)(d,{title:w(n,`library.model.noneChecked`),detail:w(n,`library.model.noneCheckedHint`)})}})]})]})}function H({compatibility:e}){let t=S(e=>e.mode),n=S(e=>e.language),r=g(e.alternatives);return r.length?(0,R.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1`,children:r.slice(0,3).map(e=>(0,R.jsx)(m,{variant:`muted`,children:t===`basic`&&/mlx|gguf|ollama|lm studio/i.test(String(e.name||e.id))?w(n,`library.model.compatibleAlternative`):String(e.name||e.id)},String(e.id||e.name)))}):null}function U({language:e=`en`,mode:t=`advanced`,profile:n,recommendation:r,current:i,currentId:a,latestProgress:o,lastResult:c,onReload:l,onUnload:u}){let d=String(i?.name||i?.id||a||``),f=String(i?.engine||i?.recommended_engine||o?.engine||`local_mlx`),p=String(i?.local_path||i?.storage_location||r.cache_path||r.storage_location||`~/.cache/huggingface / ~/.latticeai/models`),m=String(o?.stage||c?.stage||(d?w(e,`library.value.ready`):w(e,`library.value.idle`))),h=t===`basic`;return(0,R.jsxs)(`div`,{className:`space-y-3`,children:[(0,R.jsx)(s,{stats:h?[{label:w(e,`library.runtime.computer`),value:n?.os?`${String(n.os)} ${String(n.arch||``)}`:w(e,`library.value.detected`)},{label:w(e,`library.runtime.loaded`),value:d||w(e,`library.runtime.noneShort`)}]:[{label:w(e,`library.runtime.computer`),value:n?.os?`${String(n.os)} ${String(n.arch||``)}`:w(e,`library.value.detected`)},{label:w(e,`library.runtime.engine`),value:f},{label:w(e,`library.runtime.loaded`),value:d||w(e,`library.runtime.noLoaded`)},{label:w(e,`library.runtime.state`),value:m}]}),(0,R.jsxs)(`div`,{className:`rounded-lg border border-border bg-background/55 p-3 text-sm`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-medium`,children:d?w(e,`library.models.runtime.available`):w(e,`library.models.runtime.none`)}),h?null:(0,R.jsx)(`div`,{className:`mt-1 text-muted-foreground`,children:w(e,`library.runtime.cacheStorage`,{path:p})})]}),(0,R.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,R.jsx)(E,{variant:`outline`,size:`sm`,disabled:!d,onClick:l,children:w(e,`library.runtime.reload`)}),(0,R.jsx)(E,{variant:`outline`,size:`sm`,disabled:!d,onClick:u,children:w(e,`library.runtime.unload`)})]})]}),o?(0,R.jsxs)(`div`,{className:`mt-3`,children:[(0,R.jsxs)(`div`,{className:`flex justify-between text-xs text-muted-foreground`,children:[(0,R.jsx)(`span`,{children:String(o.message||w(e,`library.preparing`))}),(0,R.jsxs)(`span`,{children:[Number(o.percent||0),`%`]})]}),(0,R.jsx)(`div`,{className:`mt-1 h-2 overflow-hidden rounded-full bg-muted`,children:(0,R.jsx)(`div`,{className:`h-full bg-primary`,style:{width:`${Number(o.percent||8)}%`}})})]}):null]})]})}function W({error:e}){let t=S(e=>e.language),n=g(e.recovery_guidance);return(0,R.jsxs)(`div`,{className:`rounded-lg border border-amber-500/30 bg-amber-500/10 p-3 text-sm`,children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(e.user_message||w(t,`library.model.setupAttention`))}),n.length?(0,R.jsx)(`ul`,{className:`mt-2 list-inside list-disc text-muted-foreground`,children:n.slice(0,3).map(e=>(0,R.jsx)(`li`,{children:e},e))}):null]})}function G(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function K(){let e=b(),t=S(e=>e.language),n=y({queryKey:[`skills`],queryFn:x.skills}),r=y({queryKey:[`skillsMarketplace`],queryFn:x.skillsMarketplace}),i=_({mutationFn:e=>x.skillInstall(String(e.name||e.id),String(e.plugin||``)),onSuccess:()=>e.invalidateQueries({queryKey:[`skills`]})});return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,R.jsx)(l,{title:w(t,`library.skills.installed`),result:n.data,children:e=>(0,R.jsx)(`div`,{className:`grid gap-2`,children:g(e.skills).map(e=>(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border border-border p-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(e.name||e.id)}),(0,R.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:String(e.plugin||e.description||``)})]}),(0,R.jsx)(f,{label:w(t,e.enabled?`library.skills.disable`:`library.skills.enable`),action:()=>x.skillToggle(String(e.name||e.id),!!e.enabled),invalidate:[`skills`]})]},String(e.name||e.id)))})}),(0,R.jsx)(l,{title:w(t,`library.skills.marketplace`),result:r.data,children:e=>(0,R.jsx)(`div`,{className:`grid gap-2`,children:g(e.skills).slice(0,10).map(e=>(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-md border border-border p-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`div`,{className:`font-medium`,children:String(e.name||e.id)}),(0,R.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:String(e.description||e.category||``)})]}),(0,R.jsx)(E,{variant:`outline`,disabled:i.isPending,onClick:()=>i.mutate(e),children:w(t,`library.skills.install`)})]},String(e.name||e.id)))})})]})}function q(){let n=S(e=>e.mode),r=S(e=>e.language),[s,d]=L.useState(`github`),f=y({queryKey:[`mcpTools`],queryFn:x.mcpTools}),p=_({mutationFn:()=>x.mcpRecommend(s)});return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1fr_1fr]`,children:[(0,R.jsx)(l,{title:w(r,n===`basic`?`library.connector.connections`:`library.connector.mcpTools`),result:f.data,children:e=>(0,R.jsx)(o,{items:e.tools||e.installed_mcps,titleKey:`name`,metaKey:`status`})}),(0,R.jsxs)(u,{children:[(0,R.jsxs)(i,{children:[(0,R.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,R.jsx)(F,{className:`h-4 w-4`}),` `,w(r,`library.connector.recommend`)]}),(0,R.jsx)(a,{children:w(r,`library.connector.recommendHint`)})]}),(0,R.jsxs)(c,{className:`space-y-3`,children:[(0,R.jsxs)(`div`,{className:`flex gap-2`,children:[(0,R.jsx)(O,{value:s,onChange:e=>d(e.target.value)}),(0,R.jsx)(E,{onClick:()=>p.mutate(),disabled:!s.trim()||p.isPending,children:w(r,`library.connector.recommendAction`)})]}),p.data?(0,R.jsx)(t,{result:p.data,successLabel:w(r,`library.connector.recommendDone`)}):null]})]})]})}function J(){let t=S(e=>e.language),n=y({queryKey:[`templates`],queryFn:x.templates}),r=y({queryKey:[`plugins`],queryFn:x.pluginsRegistry}),s=y({queryKey:[`pluginsDirectory`],queryFn:x.pluginsDirectory});return(0,R.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-3`,children:[(0,R.jsx)(l,{title:w(t,`library.market.templates`),result:n.data,children:e=>(0,R.jsx)(o,{items:e.templates,titleKey:`name`,metaKey:`kind`})}),(0,R.jsx)(l,{title:w(t,`library.market.installedPlugins`),result:r.data,children:e=>(0,R.jsx)(o,{items:e.plugins,titleKey:`name`,metaKey:`status`})}),(0,R.jsx)(l,{title:w(t,`library.market.pluginDirectory`),result:s.data,children:e=>(0,R.jsx)(o,{items:e.plugins,titleKey:`name`,metaKey:`category`})}),(0,R.jsxs)(u,{className:`xl:col-span-3`,children:[(0,R.jsxs)(i,{children:[(0,R.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,R.jsx)(P,{className:`h-4 w-4`}),` `,w(t,`library.market.templateInstall`)]}),(0,R.jsx)(a,{children:w(t,`library.market.templateInstallHint`)})]}),(0,R.jsx)(c,{children:g(n.data?.data?.templates).length?(0,R.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:g(n.data?.data?.templates).slice(0,6).map(e=>(0,R.jsx)(f,{label:w(t,`library.market.installTemplate`,{name:String(e.name||e.id)}),action:()=>x.installTemplate(e)},String(e.id||e.name)))}):(0,R.jsx)(o,{items:[]})})]})]})}export{B as LibraryPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,a as t,c as n,d as r,g as i,h as a,i as o,l as s,m as c,n as l,p as u,r as d,s as f,t as p,u as m,v as h}from"./primitives-jbb2qv4Q.js";import{B as g,E as _,F as v,H as y,I as b,L as x,N as S,P as C,R as w,T,b as E,c as D,d as O,i as k,j as A,k as j,n as M,o as N,r as P,t as F}from"./index-AF0-4XVv.js";var I=y(g()),L=w(),R=[{id:`account`,labelKey:`system.tab.account`},{id:`workspaces`,labelKey:`system.tab.workspaces`},{id:`snapshots`,labelKey:`system.tab.snapshots`},{id:`activity`,labelKey:`system.tab.activity`},{id:`network`,labelKey:`system.tab.network`},{id:`settings`,labelKey:`system.tab.settings`},{id:`admin`,labelKey:`system.tab.admin`}];function z({initialTab:e}){let t=C(e=>e.mode),n=C(e=>e.language),[i,a]=I.useState(e||`account`);I.useEffect(()=>{R.some(t=>t.id===e)&&a(e)},[e]);let o=e=>{a(e),M(`/`+{account:`account`,workspaces:`workspace-admin`,snapshots:`snapshots`,activity:`activity`,network:`network`,settings:`settings`,admin:`system-admin`}[e])};return(0,L.jsxs)(`div`,{className:`product-page settings-page space-y-5`,children:[(0,L.jsxs)(`header`,{className:`page-hero`,children:[(0,L.jsxs)(`div`,{className:`page-kicker`,children:[(0,L.jsx)(D,{className:`h-4 w-4`}),` `,T(n,`system.kicker`)]}),(0,L.jsx)(`h1`,{className:`page-title`,children:T(n,`system.title`)}),(0,L.jsx)(`p`,{className:`page-copy`,children:T(n,`system.body`)})]}),(0,L.jsx)(r,{tabs:(t===`basic`?R.filter(e=>e.id===`account`||e.id===`workspaces`||e.id===`snapshots`||e.id===`settings`):R).map(e=>({id:e.id,label:T(n,e.labelKey)})),value:i,onChange:e=>o(e)}),i===`account`?(0,L.jsx)(B,{}):null,i===`workspaces`?(0,L.jsx)(V,{}):null,i===`snapshots`?(0,L.jsx)(ee,{}):null,i===`activity`?(0,L.jsx)(H,{}):null,i===`network`?(0,L.jsx)(te,{}):null,i===`settings`?(0,L.jsx)(U,{}):null,i===`admin`?(0,L.jsx)(X,{}):null]})}function B(){let r=x(),o=C(e=>e.language),s=C(e=>e.setWorkspaceId),d=b({queryKey:[`profile`],queryFn:S.profile}),f=b({queryKey:[`sso`],queryFn:S.ssoConfig}),[h,g]=I.useState(``),[_,y]=I.useState(``),[w,D]=I.useState(``),[O,A]=I.useState(``),[j,M]=I.useState(``),N=e=>{e.ok&&(F(),s(null))},R=v({mutationFn:()=>S.login(h,_),onSuccess:N}),z=v({mutationFn:()=>S.register({email:h,password:_,name:w,nickname:O}),onSuccess:N}),B=v({mutationFn:()=>S.updateProfile({name:w,nickname:O}),onSuccess:()=>r.invalidateQueries({queryKey:[`profile`]})}),V=v({mutationFn:()=>S.changePassword(_,j)});return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,L.jsx)(l,{title:T(o,`system.account.profile`),result:d.data,children:e=>(0,L.jsx)(t,{data:e})}),(0,L.jsxs)(u,{children:[(0,L.jsxs)(i,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(E,{className:`h-4 w-4`}),` `,T(o,`system.account.title`)]}),(0,L.jsx)(a,{children:T(o,`system.account.detail`)})]}),(0,L.jsxs)(c,{className:`grid gap-3`,children:[(0,L.jsx)(P,{value:h,onChange:e=>g(e.target.value),placeholder:T(o,`system.account.email`)}),(0,L.jsx)(P,{type:`password`,value:_,onChange:e=>y(e.target.value),placeholder:T(o,`system.account.password`)}),(0,L.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,L.jsx)(P,{value:w,onChange:e=>D(e.target.value),placeholder:T(o,`system.account.name`)}),(0,L.jsx)(P,{value:O,onChange:e=>A(e.target.value),placeholder:T(o,`system.account.nickname`)})]}),(0,L.jsx)(P,{type:`password`,value:j,onChange:e=>M(e.target.value),placeholder:T(o,`system.account.newPassword`)}),(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,L.jsx)(k,{onClick:()=>R.mutate(),disabled:!h||!_||R.isPending,children:T(o,`system.account.login`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>z.mutate(),disabled:!h||!_||z.isPending,children:T(o,`system.account.register`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>B.mutate(),disabled:B.isPending,children:T(o,`system.account.save`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>V.mutate(),disabled:!_||!j||V.isPending,children:T(o,`system.account.changePassword`)}),(0,L.jsx)(p,{label:T(o,`system.account.logout`),action:()=>S.logout(),onSuccess:N})]}),[R.data,z.data,B.data,V.data].filter(Boolean).map((e,t)=>(0,L.jsx)(n,{result:e,successLabel:T(o,`system.account.requestDone`)},t))]})]}),(0,L.jsx)(l,{title:T(o,`system.account.signInOptions`),result:f.data,className:`xl:col-span-2`,children:e=>(0,L.jsx)(m,{value:e})})]})}function V(){let t=x(),n=C(e=>e.language),{setWorkspaceId:r}=C(),s=b({queryKey:[`workspaceRegistry`],queryFn:S.workspaceRegistry}),d=b({queryKey:[`invitations`],queryFn:S.invitations}),[f,m]=I.useState(``),[h,g]=I.useState(``),[y,w]=I.useState(``),E=v({mutationFn:()=>S.createOrg(f),onSuccess:()=>t.invalidateQueries({queryKey:[`workspaceRegistry`]})}),D=v({mutationFn:()=>S.createInvitation({email:h||null,role:`member`,expires_hours:168}),onSuccess:()=>t.invalidateQueries({queryKey:[`invitations`]})}),O=v({mutationFn:()=>S.acceptInvitation(y),onSuccess:()=>t.invalidateQueries({queryKey:[`workspaceRegistry`]})}),A=_(s.data?.data?.workspaces);return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1.1fr_0.9fr]`,children:[(0,L.jsx)(l,{title:T(n,`system.workspace.yours`),result:s.data,children:()=>(0,L.jsx)(`div`,{className:`grid gap-2`,children:A.map(e=>{let t=String(e.workspace_id||e.id);return(0,L.jsx)(`div`,{className:`rounded-md border border-border p-3`,children:(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`div`,{className:`font-medium`,children:String(e.name||t)}),(0,L.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[String(e.type||``),` · `,String(e.your_role||e.role||``)]})]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,L.jsx)(k,{variant:`outline`,onClick:()=>r(t),children:T(n,`system.workspace.use`)}),(0,L.jsx)(p,{label:T(n,`system.workspace.activate`),action:()=>S.activateWorkspace(t),invalidate:[`workspaceRegistry`]}),(0,L.jsx)(p,{label:T(n,`system.workspace.archive`),action:()=>S.archiveWorkspace(t),invalidate:[`workspaceRegistry`],variant:`destructive`})]})]})},t)})})}),(0,L.jsxs)(u,{children:[(0,L.jsxs)(i,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(N,{className:`h-4 w-4`}),` `,T(n,`system.workspace.organizations`)]}),(0,L.jsx)(a,{children:T(n,`system.workspace.organizationsHint`)})]}),(0,L.jsxs)(c,{className:`grid gap-3`,children:[(0,L.jsx)(P,{value:f,onChange:e=>m(e.target.value),placeholder:T(n,`system.workspace.orgPlaceholder`)}),(0,L.jsx)(k,{disabled:!f.trim()||E.isPending,onClick:()=>E.mutate(),children:T(n,`system.workspace.createOrg`)}),(0,L.jsx)(P,{value:h,onChange:e=>g(e.target.value),placeholder:T(n,`system.workspace.inviteeEmail`)}),(0,L.jsx)(k,{variant:`outline`,disabled:D.isPending,onClick:()=>D.mutate(),children:T(n,`system.workspace.createInvite`)}),(0,L.jsx)(P,{value:y,onChange:e=>w(e.target.value),placeholder:T(n,`system.workspace.inviteToken`)}),(0,L.jsx)(k,{variant:`outline`,disabled:!y.trim()||O.isPending,onClick:()=>O.mutate(),children:T(n,`system.workspace.acceptInvite`)}),(0,L.jsx)(l,{title:T(n,`system.workspace.invitations`),result:d.data,children:e=>(0,L.jsx)(o,{items:e.invitations,titleKey:`token`,metaKey:`role`})})]})]})]})}function ee(){let t=C(e=>e.language),r=b({queryKey:[`snapshots`],queryFn:S.snapshots}),s=b({queryKey:[`timeMachine`],queryFn:S.timeMachine}),[d,f]=I.useState(``),[m,h]=I.useState(``),[g,y]=I.useState(``),x=v({mutationFn:()=>S.createSnapshot(d||T(t,`system.snapshots.defaultName`))}),w=v({mutationFn:()=>S.compareSnapshots(m,g)}),E=_(r.data?.data?.snapshots);return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,L.jsx)(l,{title:T(t,`system.snapshots.title`),result:r.data,children:()=>(0,L.jsx)(`div`,{className:`space-y-2`,children:E.map(e=>{let n=String(e.id||e.snapshot_id);return(0,L.jsxs)(`div`,{className:`rounded-md border border-border p-3`,children:[(0,L.jsx)(`div`,{className:`font-medium`,children:String(e.name||n)}),(0,L.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-2`,children:[(0,L.jsx)(p,{label:T(t,`system.snapshots.export`),action:()=>S.exportSnapshot(n)}),(0,L.jsx)(p,{label:T(t,`system.snapshots.mergeRestore`),action:()=>S.restoreSnapshot(n),variant:`outline`})]})]},n)})})}),(0,L.jsxs)(u,{children:[(0,L.jsxs)(i,{children:[(0,L.jsx)(e,{children:T(t,`system.snapshots.actions`)}),(0,L.jsx)(a,{children:T(t,`system.snapshots.actionsHint`)})]}),(0,L.jsxs)(c,{className:`grid gap-3`,children:[(0,L.jsx)(P,{value:d,onChange:e=>f(e.target.value),placeholder:T(t,`system.snapshots.namePlaceholder`)}),(0,L.jsx)(k,{onClick:()=>x.mutate(),disabled:x.isPending,children:T(t,`system.snapshots.create`)}),(0,L.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,L.jsx)(P,{value:m,onChange:e=>h(e.target.value),placeholder:T(t,`system.snapshots.beforeId`)}),(0,L.jsx)(P,{value:g,onChange:e=>y(e.target.value),placeholder:T(t,`system.snapshots.afterId`)})]}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>w.mutate(),disabled:!m||!g||w.isPending,children:T(t,`system.snapshots.compare`)}),w.data?(0,L.jsx)(n,{result:w.data,successLabel:T(t,`system.snapshots.compareDone`)}):null]})]}),(0,L.jsx)(l,{title:T(t,`system.snapshots.timeline`),result:s.data,className:`xl:col-span-2`,children:e=>(0,L.jsx)(o,{items:e.events||e,titleKey:`event`,metaKey:`type`,limit:14})})]})}function H(){let e=C(e=>e.language),t=b({queryKey:[`realtimeFeed`],queryFn:S.realtimeFeed}),n=b({queryKey:[`presence`],queryFn:S.presence});return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,L.jsx)(l,{title:T(e,`system.activity.feed`),result:t.data,children:e=>(0,L.jsx)(o,{items:e.events,titleKey:`event_type`,metaKey:`area`,limit:14})}),(0,L.jsx)(l,{title:T(e,`system.activity.presence`),result:n.data,children:e=>(0,L.jsx)(G,{data:e})})]})}function te(){let t=x(),r=C(e=>e.language),o=b({queryKey:[`networkIdentity`],queryFn:S.networkIdentity}),s=b({queryKey:[`networkPeers`],queryFn:S.networkPeers}),[d,f]=I.useState(``),[m,h]=I.useState(``),[g,y]=I.useState(``),w=v({mutationFn:()=>S.pairPeer({name:d,base_url:m,public_key:g}),onSuccess:()=>t.invalidateQueries({queryKey:[`networkPeers`]})});return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[0.8fr_1.2fr]`,children:[(0,L.jsx)(l,{title:T(r,`system.network.identity`),result:o.data,children:e=>(0,L.jsx)(K,{data:e})}),(0,L.jsxs)(u,{children:[(0,L.jsxs)(i,{children:[(0,L.jsxs)(e,{className:`flex items-center gap-2`,children:[(0,L.jsx)(O,{className:`h-4 w-4`}),` `,T(r,`system.network.pair`)]}),(0,L.jsx)(a,{children:T(r,`system.network.pairHint`)})]}),(0,L.jsxs)(c,{className:`grid gap-3`,children:[(0,L.jsx)(P,{value:d,onChange:e=>f(e.target.value),placeholder:T(r,`system.network.deviceName`)}),(0,L.jsx)(P,{value:m,onChange:e=>h(e.target.value),placeholder:T(r,`system.network.address`)}),(0,L.jsx)(P,{value:g,onChange:e=>y(e.target.value),placeholder:T(r,`system.network.publicKey`)}),(0,L.jsx)(k,{disabled:!d||!m||!g||w.isPending,onClick:()=>w.mutate(),children:T(r,`system.network.pair`)}),w.data?(0,L.jsx)(n,{result:w.data,successLabel:T(r,`system.network.pairDone`)}):null]})]}),(0,L.jsx)(l,{title:T(r,`system.network.peers`),result:s.data,className:`xl:col-span-2`,children:e=>(0,L.jsx)(`div`,{className:`grid gap-2`,children:_(e.peers).map(e=>{let t=String(e.peer_id||e.id);return(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3 rounded-md border border-border p-3`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`div`,{className:`font-medium`,children:String(e.name||t)}),(0,L.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:String(e.base_url||``)})]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,L.jsx)(p,{label:T(r,`system.network.pushWorkspace`),action:()=>S.pushPeer(t,C.getState().workspaceId)}),(0,L.jsx)(p,{label:T(r,`system.network.unpair`),action:()=>S.unpairPeer(t),invalidate:[`networkPeers`],variant:`destructive`})]})]},t)})})})]})}function U(){let t=x(),{theme:r,setTheme:o,mode:d,setMode:f}=C(),h=C(e=>e.language),g=b({queryKey:[`health`],queryFn:S.health}),_=b({queryKey:[`sysinfo`],queryFn:S.sysinfo}),y=b({queryKey:[`computerMemory`],queryFn:S.computerMemory}),w=b({queryKey:[`brainStorage`],queryFn:S.brainStorage}),E=b({queryKey:[`backupHealth`],queryFn:S.backupHealth}),[D,O]=I.useState(``),[A,j]=I.useState(`lattice_brain`),[M,N]=I.useState(!1),[F,R]=I.useState(``),[z,B]=I.useState(``),[V,ee]=I.useState(``),[H,te]=I.useState(!1),[U,W]=I.useState(!1),G=v({mutationFn:e=>S.dockerPostgres({consent:e,dry_run:!e,port:5432})}),K=v({mutationFn:()=>S.migratePostgres({dsn:D,schema_name:A||`lattice_brain`,dry_run:!0})}),q=v({mutationFn:()=>S.brainArchive({path:F.trim()||null,passphrase:V}),onSuccess:()=>t.invalidateQueries({queryKey:[`backupHealth`]})}),J=v({mutationFn:()=>S.brainArchiveInspect({path:z,passphrase:V||null})}),Y=v({mutationFn:()=>S.brainArchiveVerify({path:z,passphrase:V})}),X=v({mutationFn:()=>S.brainArchiveRestore({path:z,passphrase:V,dry_run:!0,confirm:!1})}),Z=v({mutationFn:()=>S.brainArchiveRestore({path:z,passphrase:V,dry_run:!1,confirm:H}),onSuccess:()=>{t.invalidateQueries({queryKey:[`brainStorage`]}),t.invalidateQueries({queryKey:[`backupHealth`]})}}),Q=v({mutationFn:()=>S.brainArchiveImport({path:z,passphrase:V,dry_run:!0,confirm:!1})}),$=v({mutationFn:()=>S.brainArchiveImport({path:z,passphrase:V,dry_run:!1,confirm:U}),onSuccess:()=>{t.invalidateQueries({queryKey:[`brainStorage`]}),t.invalidateQueries({queryKey:[`backupHealth`]})}});return(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-3`,children:[(0,L.jsxs)(u,{children:[(0,L.jsxs)(i,{children:[(0,L.jsx)(e,{children:T(h,`system.panel.appearance`)}),(0,L.jsx)(a,{children:T(h,`system.panel.appearance.hint`)})]}),(0,L.jsxs)(c,{className:`flex flex-wrap gap-2`,children:[(0,L.jsx)(k,{variant:r===`dark`?`default`:`outline`,onClick:()=>o(`dark`),children:T(h,`system.theme.dark`)}),(0,L.jsx)(k,{variant:r===`light`?`default`:`outline`,onClick:()=>o(`light`),children:T(h,`system.theme.light`)}),[`basic`,`advanced`,`admin`].map(e=>(0,L.jsx)(k,{variant:d===e?`default`:`outline`,onClick:()=>f(e),children:T(h,`shell.mode.${e}`)},e))]})]}),(0,L.jsx)(l,{title:d===`basic`?T(h,`system.panel.brainStatus`):T(h,`system.panel.serverHealth`),result:g.data,children:e=>(0,L.jsx)(ne,{data:e})}),(0,L.jsx)(l,{title:d===`basic`?T(h,`system.panel.readiness`):T(h,`system.panel.hostTelemetry`),result:_.data,children:e=>d===`basic`?(0,L.jsx)(s,{stats:[{label:T(h,`system.stat.cpu`),value:`${String(e.cpu_pct||`0`)}%`},{label:T(h,`system.stat.memory`),value:`${String(e.ram_pct||`0`)}%`},{label:T(h,`system.stat.gpu`),value:`${String(e.gpu_mem_pct||`0`)}%`},{label:T(h,`system.stat.localStatus`),value:T(h,`system.stat.ready`)}]}):(0,L.jsx)(m,{value:e})}),(0,L.jsx)(l,{title:d===`basic`?T(h,`system.storage.title`):T(h,`system.panel.brainStorage`),result:w.data,className:`xl:col-span-3`,children:e=>(0,L.jsx)(re,{data:e,mode:d,language:h})}),d===`basic`?null:(0,L.jsx)(l,{title:T(h,`system.backup.health`),result:E.data,className:`xl:col-span-3`,children:e=>(0,L.jsx)(ie,{data:e})}),d===`basic`?null:(0,L.jsxs)(u,{className:`xl:col-span-3`,children:[(0,L.jsxs)(i,{children:[(0,L.jsx)(e,{children:T(h,`system.archive.title`)}),(0,L.jsx)(a,{children:T(h,`system.archive.detail`)})]}),(0,L.jsxs)(c,{className:`grid gap-3`,children:[(0,L.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-[1fr_1fr]`,children:[(0,L.jsx)(P,{value:F,onChange:e=>R(e.target.value),placeholder:T(h,`system.archive.exportPath`)}),(0,L.jsx)(P,{value:z,onChange:e=>B(e.target.value),placeholder:T(h,`system.archive.restorePath`)})]}),(0,L.jsx)(P,{type:`password`,value:V,onChange:e=>ee(e.target.value),placeholder:T(h,`system.archive.passphrase`)}),(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,L.jsx)(k,{onClick:()=>q.mutate(),disabled:!V||q.isPending,children:T(h,`system.archive.export`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>J.mutate(),disabled:!z||J.isPending,children:T(h,`system.archive.inspect`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>Y.mutate(),disabled:!z||!V||Y.isPending,children:T(h,`system.archive.verify`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>X.mutate(),disabled:!z||!V||X.isPending,children:T(h,`system.archive.restoreDryRun`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>Q.mutate(),disabled:!z||!V||Q.isPending,children:T(h,`system.archive.importDryRun`)}),(0,L.jsxs)(`label`,{className:`flex items-center gap-2 rounded-md border border-border px-3 py-2 text-sm`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:H,onChange:e=>te(e.target.checked)}),T(h,`system.archive.confirmRestore`)]}),(0,L.jsx)(k,{variant:`destructive`,onClick:()=>Z.mutate(),disabled:!z||!V||!H||Z.isPending,children:T(h,`system.archive.restore`)}),(0,L.jsxs)(`label`,{className:`flex items-center gap-2 rounded-md border border-border px-3 py-2 text-sm`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:U,onChange:e=>W(e.target.checked)}),T(h,`system.archive.confirmImport`)]}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>$.mutate(),disabled:!z||!V||!U||$.isPending,children:T(h,`system.archive.import`)})]}),[q.data,J.data,Y.data,X.data,Z.data,Q.data,$.data].filter(Boolean).map((e,t)=>(0,L.jsx)(n,{result:e,successLabel:T(h,`system.archive.requestDone`)},t))]})]}),d===`basic`?null:(0,L.jsxs)(u,{className:`xl:col-span-3`,children:[(0,L.jsxs)(i,{children:[(0,L.jsx)(e,{children:T(h,`system.scale.title`)}),(0,L.jsx)(a,{children:T(h,`system.scale.detail`)})]}),(0,L.jsxs)(c,{className:`grid gap-3`,children:[(0,L.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-[1fr_220px]`,children:[(0,L.jsx)(P,{value:D,onChange:e=>O(e.target.value),placeholder:T(h,`system.scale.dsn`)}),(0,L.jsx)(P,{value:A,onChange:e=>j(e.target.value),placeholder:T(h,`system.scale.schema`)})]}),(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,L.jsx)(k,{variant:`outline`,onClick:()=>G.mutate(!1),disabled:G.isPending,children:T(h,`system.scale.dockerPlan`)}),(0,L.jsxs)(`label`,{className:`flex items-center gap-2 rounded-md border border-border px-3 py-2 text-sm`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:M,onChange:e=>N(e.target.checked)}),T(h,`system.scale.dockerConsent`)]}),(0,L.jsx)(k,{onClick:()=>G.mutate(!0),disabled:!M||G.isPending,children:T(h,`system.scale.dockerStart`)}),(0,L.jsx)(k,{variant:`outline`,onClick:()=>K.mutate(),disabled:!D||K.isPending,children:T(h,`system.scale.migrationPlan`)})]}),G.data?(0,L.jsx)(n,{result:G.data,successLabel:T(h,`system.scale.dockerDone`)}):null,K.data?(0,L.jsx)(n,{result:K.data,successLabel:T(h,`system.scale.migrationDone`)}):null]})]}),d===`basic`?null:(0,L.jsx)(l,{title:T(h,`system.computerMemory.title`),result:y.data,className:`xl:col-span-3`,children:e=>(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(m,{value:e}),(0,L.jsxs)(`div`,{className:`flex gap-2`,children:[(0,L.jsx)(p,{label:T(h,`system.computerMemory.enable`),action:()=>S.setComputerMemory(!0),invalidate:[`computerMemory`]}),(0,L.jsx)(p,{label:T(h,`system.computerMemory.disable`),action:()=>S.setComputerMemory(!1),invalidate:[`computerMemory`],variant:`destructive`})]})]})})]})}function W(e,t,n=T(e,`system.value.notReported`)){return t==null||t===``?n:typeof t==`boolean`?T(e,t?`system.value.enabled`:`system.value.disabled`):String(t)}function G({data:e}){let t=C(e=>e.language),n=_(e.presence||e.clients||e);return n.length?(0,L.jsx)(o,{items:n,titleKey:`user`,metaKey:`workspace_id`}):(0,L.jsx)(d,{title:T(t,`system.presence.empty`),detail:T(t,`system.presence.emptyDetail`)})}function K({data:e}){let n=C(e=>e.mode),r=C(e=>e.language),i=W(r,e.public_key,``);return n===`basic`?(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(q,{title:T(r,`system.device.thisMac`),status:T(r,`system.value.trusted`),detail:T(r,`system.device.thisMacDetail`)}),(0,L.jsx)(h,{variant:`muted`,children:W(r,e.algorithm,T(r,`system.value.localIdentity`))})]}):(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,L.jsx)(h,{variant:`success`,children:T(r,`system.value.localDevice`)}),(0,L.jsx)(h,{variant:`muted`,children:W(r,e.algorithm,T(r,`system.value.identityKey`))})]}),(0,L.jsx)(t,{data:{device_id:e.device_id||e.id||T(r,`system.value.notReported`),fingerprint:e.fingerprint||T(r,`system.value.notReported`),public_key:i?A(i.replace(/\s+/g,` `),72):T(r,`system.value.notReported`)}})]})}function ne({data:e}){let t=C(e=>e.mode),n=C(e=>e.language);return t===`basic`?(0,L.jsx)(q,{title:T(n,`system.health.title`),status:T(n,`system.health.ok`),detail:T(n,`system.health.detail`)}):(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(s,{stats:[{label:T(n,`system.health.status`),value:e.status||e.ok||T(n,`system.value.reported`)},{label:T(n,`system.health.version`),value:e.version||T(n,`system.value.notReported`)},{label:T(n,`system.health.mode`),value:e.mode||e.environment||T(n,`system.value.local`)},{label:T(n,`system.health.port`),value:e.port||e.backend_port||T(n,`system.value.configured`)}]}),(0,L.jsx)(m,{value:e})]})}function re({data:e,mode:t=`advanced`,language:n=`en`}){let r=j(e.active)?e.active:e,i=j(e.postgres)?e.postgres:{},a=j(e.backup_health)?e.backup_health:{},o=r.vector_search||r.vector||e.vector_search||e.sqlite_vec,c=!!(i.available||i.connected||i.enabled),l=!!o&&String(o).toLowerCase()!==`not reported`;return t===`basic`?(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(q,{title:T(n,`system.storage.local.title`),status:T(n,`system.storage.local.badge`),detail:T(n,`system.storage.local.detail`)}),(0,L.jsx)(q,{title:T(n,`system.storage.search.title`),status:l?T(n,`system.storage.search.on`):T(n,`system.storage.search.pending`),detail:l?T(n,`system.storage.search.detailOn`):T(n,`system.storage.search.detailPending`)})]}):(0,L.jsxs)(`div`,{className:`space-y-4`,children:[(0,L.jsx)(s,{stats:[{label:T(n,`system.storage.activeEngine`),value:r.engine||e.engine||T(n,`system.storage.sqlite`)},{label:T(n,`system.storage.sqliteDefault`),value:r.engine===`postgres`?T(n,`system.value.scaleMode`):T(n,`system.value.enabled`)},{label:T(n,`system.storage.vector`),value:o||T(n,`system.value.notReported`)},{label:T(n,`system.storage.postgres`),value:c?T(n,`system.value.available`):T(n,`system.value.optional`)}]}),(0,L.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-3`,children:[(0,L.jsx)(q,{title:T(n,`system.storage.sqlite`),status:r.available===!1?T(n,`system.value.unavailable`):T(n,`system.value.default`),detail:W(n,r.reason||r.path||e.path,T(n,`system.storage.sqliteDetail`))}),(0,L.jsx)(q,{title:T(n,`system.storage.vector`),status:W(n,o,T(n,`system.value.reported`)),detail:W(n,r.vector_reason||r.sqlite_vec_reason||e.vector_reason,T(n,`system.storage.vectorDetail`))}),(0,L.jsx)(q,{title:T(n,`system.storage.postgres`),status:c?T(n,`system.value.available`):T(n,`system.value.notEnabled`),detail:W(n,i.reason||i.dsn||i.status,T(n,`system.storage.postgresDetail`))})]}),Object.keys(a).length?(0,L.jsx)(m,{value:{backup_health:a}}):null]})}function ie({data:e}){let n=C(e=>e.language);return(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(s,{stats:[{label:T(n,`system.backup.available`),value:e.available===!1?T(n,`system.value.no`):T(n,`system.value.yes`)},{label:T(n,`system.backup.backups`),value:e.count||e.backups||0},{label:T(n,`system.backup.encrypted`),value:e.encrypted_archives||0},{label:T(n,`system.backup.zip`),value:e.zip_backups||0}]}),(0,L.jsx)(t,{data:{directory:e.directory||T(n,`system.value.notReported`),latest:e.latest||T(n,`system.value.noneReported`),last_verified:e.last_verified||e.verified_at||T(n,`system.value.notReported`),failure:e.error||e.reason||T(n,`system.value.noneReported`)}})]})}function q({title:e,status:t,detail:n}){let r=/unavailable|failed|denied|disabled|not enabled|사용 불가|실패|거부|비활성|활성화되지 않음/i.test(t)?`warning`:`success`;return(0,L.jsxs)(`div`,{className:`rounded-md border border-border bg-background p-3`,children:[(0,L.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,L.jsx)(`div`,{className:`font-medium`,children:e}),(0,L.jsx)(h,{variant:r,children:t})]}),(0,L.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:n})]})}function J({data:e}){let t=C(e=>e.language),n=j(e.startup)?e.startup:{},r=j(e.privacy)?e.privacy:{},i=j(e.storage)?e.storage:{},a=j(e.backup)?e.backup:{},o=j(e.device_identity)?e.device_identity:{},c=j(e.permissions)?e.permissions:{};return(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(s,{stats:[{label:T(t,`system.hardening.version`),value:e.version||T(t,`system.value.reported`)},{label:T(t,`system.hardening.localOnly`),value:r.local_only_default??n.local_only_default??T(t,`system.value.reported`)},{label:T(t,`system.hardening.storage`),value:j(i.active)?i.active.engine:T(t,`system.value.reported`)},{label:T(t,`system.hardening.backups`),value:a.count||a.available||T(t,`system.value.reported`)}]}),(0,L.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[(0,L.jsx)(q,{title:T(t,`system.hardening.startup`),status:T(t,n.network_exposed?`system.value.networkExposed`:`system.value.localOnly`),detail:T(t,`system.hardening.startupDetail`)}),(0,L.jsx)(q,{title:T(t,`system.hardening.integrations`),status:T(t,r.local_only_default===!1?`system.value.reviewRequired`:`system.value.optIn`),detail:T(t,`system.hardening.integrationsDetail`)}),(0,L.jsx)(q,{title:T(t,`system.hardening.identity`),status:W(t,o.algorithm||o.fingerprint,T(t,`system.value.reported`)),detail:W(t,o.storage,T(t,`system.hardening.identityStorage`))}),(0,L.jsx)(q,{title:T(t,`system.hardening.permissions`),status:T(t,c.destructive_restore_requires_confirmation===!1?`system.value.reviewRequired`:`system.value.guarded`),detail:T(t,`system.hardening.permissionsDetail`)})]})]})}function Y({data:e}){let t=C(e=>e.language),n=j(e.cards)?e.cards:{},r=j(e.severity_counts)?e.severity_counts:{};return(0,L.jsxs)(`div`,{className:`space-y-3`,children:[(0,L.jsx)(s,{stats:[{label:T(t,`system.security.eventsToday`),value:n.events_today||0},{label:T(t,`system.security.highRisk`),value:n.high_risk_events||r.high||0},{label:T(t,`system.security.review`),value:n.review_required||0},{label:T(t,`system.security.riskRate`),value:e.risk_rate||0}]}),(0,L.jsx)(m,{value:{severity_counts:r,sensitive_fields:e.field_counts||{}}})]})}function X(){let e=C(e=>e.mode),n=C(e=>e.language),r=b({queryKey:[`adminSummary`],queryFn:S.adminSummary}),i=b({queryKey:[`adminUsers`],queryFn:S.adminUsers}),a=b({queryKey:[`adminAudit`],queryFn:()=>S.adminAudit()}),s=b({queryKey:[`adminRoles`],queryFn:S.adminRoles}),c=b({queryKey:[`adminPolicies`],queryFn:S.adminPolicies}),u=b({queryKey:[`adminProductHardening`],queryFn:S.adminProductHardening}),d=b({queryKey:[`adminSecurity`],queryFn:S.adminSecurity}),p=b({queryKey:[`vpcStatus`],queryFn:S.vpcStatus});return e===`admin`?(0,L.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,L.jsx)(l,{title:T(n,`system.admin.summary`),result:r.data,children:e=>(0,L.jsx)(t,{data:e})}),(0,L.jsx)(l,{title:T(n,`system.admin.users`),result:i.data,children:e=>(0,L.jsx)(o,{items:e,titleKey:`email`,metaKey:`role`})}),(0,L.jsx)(l,{title:T(n,`system.admin.audit`),result:a.data,children:e=>(0,L.jsx)(o,{items:e.recent_events||e,titleKey:`act`,metaKey:`sev`})}),(0,L.jsx)(l,{title:T(n,`system.admin.roles`),result:s.data,children:e=>(0,L.jsx)(o,{items:e.roles||e,titleKey:`role`,metaKey:`members`})}),(0,L.jsx)(l,{title:T(n,`system.admin.policies`),result:c.data,children:e=>(0,L.jsx)(o,{items:e.policies||e,titleKey:`label`,metaKey:`enforced`})}),(0,L.jsx)(l,{title:T(n,`system.admin.hardening`),result:u.data,children:e=>(0,L.jsx)(J,{data:e})}),(0,L.jsx)(l,{title:T(n,`system.admin.security`),result:d.data,children:e=>(0,L.jsx)(Y,{data:e})}),(0,L.jsx)(l,{title:T(n,`system.admin.vpc`),result:p.data,className:`xl:col-span-2`,children:e=>(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(h,{variant:`muted`,children:T(n,`system.admin.communityUnavailable`)}),(0,L.jsx)(m,{value:e})]})})]}):(0,L.jsx)(f,{title:T(n,`system.admin.controls`),detail:T(n,`system.admin.controlsDetail`),target:`admin`})}export{z as SystemPage};
|