@pcircle/memesh 4.0.2 → 4.0.3
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.de.md +56 -201
- package/README.es.md +56 -201
- package/README.fr.md +56 -201
- package/README.ja.md +55 -200
- package/README.ko.md +56 -201
- package/README.md +1 -1
- package/README.pt.md +56 -201
- package/README.th.md +56 -201
- package/README.vi.md +56 -201
- package/README.zh-CN.md +56 -201
- package/README.zh-TW.md +56 -201
- package/dashboard/dist/index.html +4 -4
- package/dist/core/install-channel.d.ts +30 -0
- package/dist/core/install-channel.d.ts.map +1 -0
- package/dist/core/install-channel.js +83 -0
- package/dist/core/install-channel.js.map +1 -0
- package/dist/core/updater.d.ts +11 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +28 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/version-check.d.ts +28 -4
- package/dist/core/version-check.d.ts.map +1 -1
- package/dist/core/version-check.js +167 -21
- package/dist/core/version-check.js.map +1 -1
- package/dist/transports/cli/cli.js +39 -11
- package/dist/transports/cli/cli.js.map +1 -1
- package/dist/transports/http/server.d.ts.map +1 -1
- package/dist/transports/http/server.js +32 -0
- package/dist/transports/http/server.js.map +1 -1
- package/package.json +1 -1
- package/plugin.json +2 -2
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
<link rel="preconnect" href="https://api.fontshare.com" crossorigin />
|
|
10
10
|
<link href="https://api.fontshare.com/v2/css?f[]=satoshi@400,500,600,700&display=swap" rel="stylesheet" />
|
|
11
11
|
<link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600&display=swap" rel="stylesheet" />
|
|
12
|
-
<script type="module" crossorigin>(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&o(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function o(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}})();var Ae,E,kt,te,et,xt,St,Pe,ye,de,Lt,qe,He,De,xe={},Se=[],es=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Te=Array.isArray;function J(e,s){for(var n in s)e[n]=s[n];return e}function je(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function ts(e,s,n){var o,r,a,i={};for(a in s)a=="key"?o=s[a]:a=="ref"?r=s[a]:i[a]=s[a];if(arguments.length>2&&(i.children=arguments.length>3?Ae.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(a in e.defaultProps)i[a]===void 0&&(i[a]=e.defaultProps[a]);return _e(e,i,o,r,null)}function _e(e,s,n,o,r){var a={type:e,props:s,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:r??++kt,__i:-1,__u:0};return r==null&&E.vnode!=null&&E.vnode(a),a}function se(e){return e.children}function we(e,s){this.props=e,this.context=s}function ce(e,s){if(s==null)return e.__?ce(e.__,e.__i+1):null;for(var n;s<e.__k.length;s++)if((n=e.__k[s])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?ce(e):null}function ss(e){if(e.__P&&e.__d){var s=e.__v,n=s.__e,o=[],r=[],a=J({},s);a.__v=s.__v+1,E.vnode&&E.vnode(a),Ge(e.__P,a,s,e.__n,e.__P.namespaceURI,32&s.__u?[n]:null,o,n??ce(s),!!(32&s.__u),r),a.__v=s.__v,a.__.__k[a.__i]=a,Tt(o,a,r),s.__e=s.__=null,a.__e!=n&&Mt(a)}}function Mt(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(s){if(s!=null&&s.__e!=null)return e.__e=e.__c.base=s.__e}),Mt(e)}function tt(e){(!e.__d&&(e.__d=!0)&&te.push(e)&&!Le.__r++||et!=E.debounceRendering)&&((et=E.debounceRendering)||xt)(Le)}function Le(){try{for(var e,s=1;te.length;)te.length>s&&te.sort(St),e=te.shift(),s=te.length,ss(e)}finally{te.length=Le.__r=0}}function Ct(e,s,n,o,r,a,i,c,u,d,g){var l,p,m,x,w,A,y,f=o&&o.__k||Se,F=s.length;for(u=ns(n,s,f,u,F),l=0;l<F;l++)(m=n.__k[l])!=null&&(p=m.__i!=-1&&f[m.__i]||xe,m.__i=l,A=Ge(e,m,p,r,a,i,c,u,d,g),x=m.__e,m.ref&&p.ref!=m.ref&&(p.ref&&Oe(p.ref,null,m),g.push(m.ref,m.__c||x,m)),w==null&&x!=null&&(w=x),(y=!!(4&m.__u))||p.__k===m.__k?(u=At(m,u,e,y),y&&p.__e&&(p.__e=null)):typeof m.type=="function"&&A!==void 0?u=A:x&&(u=x.nextSibling),m.__u&=-7);return n.__e=w,u}function ns(e,s,n,o,r){var a,i,c,u,d,g=n.length,l=g,p=0;for(e.__k=new Array(r),a=0;a<r;a++)(i=s[a])!=null&&typeof i!="boolean"&&typeof i!="function"?(typeof i=="string"||typeof i=="number"||typeof i=="bigint"||i.constructor==String?i=e.__k[a]=_e(null,i,null,null,null):Te(i)?i=e.__k[a]=_e(se,{children:i},null,null,null):i.constructor===void 0&&i.__b>0?i=e.__k[a]=_e(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[a]=i,u=a+p,i.__=e,i.__b=e.__b+1,c=null,(d=i.__i=as(i,n,u,l))!=-1&&(l--,(c=n[d])&&(c.__u|=2)),c==null||c.__v==null?(d==-1&&(r>g?p--:r<g&&p++),typeof i.type!="function"&&(i.__u|=4)):d!=u&&(d==u-1?p--:d==u+1?p++:(d>u?p--:p++,i.__u|=4))):e.__k[a]=null;if(l)for(a=0;a<g;a++)(c=n[a])!=null&&(2&c.__u)==0&&(c.__e==o&&(o=ce(c)),Rt(c,c));return o}function At(e,s,n,o){var r,a;if(typeof e.type=="function"){for(r=e.__k,a=0;r&&a<r.length;a++)r[a]&&(r[a].__=e,s=At(r[a],s,n,o));return s}e.__e!=s&&(o&&(s&&e.type&&!s.parentNode&&(s=ce(e)),n.insertBefore(e.__e,s||null)),s=e.__e);do s=s&&s.nextSibling;while(s!=null&&s.nodeType==8);return s}function as(e,s,n,o){var r,a,i,c=e.key,u=e.type,d=s[n],g=d!=null&&(2&d.__u)==0;if(d===null&&c==null||g&&c==d.key&&u==d.type)return n;if(o>(g?1:0)){for(r=n-1,a=n+1;r>=0||a<s.length;)if((d=s[i=r>=0?r--:a++])!=null&&(2&d.__u)==0&&c==d.key&&u==d.type)return i}return-1}function st(e,s,n){s[0]=="-"?e.setProperty(s,n??""):e[s]=n==null?"":typeof n!="number"||es.test(s)?n:n+"px"}function me(e,s,n,o,r){var a,i;e:if(s=="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof o=="string"&&(e.style.cssText=o=""),o)for(s in o)n&&s in n||st(e.style,s,"");if(n)for(s in n)o&&n[s]==o[s]||st(e.style,s,n[s])}else if(s[0]=="o"&&s[1]=="n")a=s!=(s=s.replace(Lt,"$1")),i=s.toLowerCase(),s=i in e||s=="onFocusOut"||s=="onFocusIn"?i.slice(2):s.slice(2),e.l||(e.l={}),e.l[s+a]=n,n?o?n[de]=o[de]:(n[de]=qe,e.addEventListener(s,a?De:He,a)):e.removeEventListener(s,a?De:He,a);else{if(r=="http://www.w3.org/2000/svg")s=s.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(s!="width"&&s!="height"&&s!="href"&&s!="list"&&s!="form"&&s!="tabIndex"&&s!="download"&&s!="rowSpan"&&s!="colSpan"&&s!="role"&&s!="popover"&&s in e)try{e[s]=n??"";break e}catch{}typeof n=="function"||(n==null||n===!1&&s[4]!="-"?e.removeAttribute(s):e.setAttribute(s,s=="popover"&&n==1?"":n))}}function nt(e){return function(s){if(this.l){var n=this.l[s.type+e];if(s[ye]==null)s[ye]=qe++;else if(s[ye]<n[de])return;return n(E.event?E.event(s):s)}}}function Ge(e,s,n,o,r,a,i,c,u,d){var g,l,p,m,x,w,A,y,f,F,_,H,Z,V,Y,K=s.type;if(s.constructor!==void 0)return null;128&n.__u&&(u=!!(32&n.__u),a=[c=s.__e=n.__e]),(g=E.__b)&&g(s);e:if(typeof K=="function")try{if(y=s.props,f=K.prototype&&K.prototype.render,F=(g=K.contextType)&&o[g.__c],_=g?F?F.props.value:g.__:o,n.__c?A=(l=s.__c=n.__c).__=l.__E:(f?s.__c=l=new K(y,_):(s.__c=l=new we(y,_),l.constructor=K,l.render=is),F&&F.sub(l),l.state||(l.state={}),l.__n=o,p=l.__d=!0,l.__h=[],l._sb=[]),f&&l.__s==null&&(l.__s=l.state),f&&K.getDerivedStateFromProps!=null&&(l.__s==l.state&&(l.__s=J({},l.__s)),J(l.__s,K.getDerivedStateFromProps(y,l.__s))),m=l.props,x=l.state,l.__v=s,p)f&&K.getDerivedStateFromProps==null&&l.componentWillMount!=null&&l.componentWillMount(),f&&l.componentDidMount!=null&&l.__h.push(l.componentDidMount);else{if(f&&K.getDerivedStateFromProps==null&&y!==m&&l.componentWillReceiveProps!=null&&l.componentWillReceiveProps(y,_),s.__v==n.__v||!l.__e&&l.shouldComponentUpdate!=null&&l.shouldComponentUpdate(y,l.__s,_)===!1){s.__v!=n.__v&&(l.props=y,l.state=l.__s,l.__d=!1),s.__e=n.__e,s.__k=n.__k,s.__k.some(function(ee){ee&&(ee.__=s)}),Se.push.apply(l.__h,l._sb),l._sb=[],l.__h.length&&i.push(l);break e}l.componentWillUpdate!=null&&l.componentWillUpdate(y,l.__s,_),f&&l.componentDidUpdate!=null&&l.__h.push(function(){l.componentDidUpdate(m,x,w)})}if(l.context=_,l.props=y,l.__P=e,l.__e=!1,H=E.__r,Z=0,f)l.state=l.__s,l.__d=!1,H&&H(s),g=l.render(l.props,l.state,l.context),Se.push.apply(l.__h,l._sb),l._sb=[];else do l.__d=!1,H&&H(s),g=l.render(l.props,l.state,l.context),l.state=l.__s;while(l.__d&&++Z<25);l.state=l.__s,l.getChildContext!=null&&(o=J(J({},o),l.getChildContext())),f&&!p&&l.getSnapshotBeforeUpdate!=null&&(w=l.getSnapshotBeforeUpdate(m,x)),V=g!=null&&g.type===se&&g.key==null?Et(g.props.children):g,c=Ct(e,Te(V)?V:[V],s,n,o,r,a,i,c,u,d),l.base=s.__e,s.__u&=-161,l.__h.length&&i.push(l),A&&(l.__E=l.__=null)}catch(ee){if(s.__v=null,u||a!=null)if(ee.then){for(s.__u|=u?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;a[a.indexOf(c)]=null,s.__e=c}else{for(Y=a.length;Y--;)je(a[Y]);We(s)}else s.__e=n.__e,s.__k=n.__k,ee.then||We(s);E.__e(ee,s,n)}else a==null&&s.__v==n.__v?(s.__k=n.__k,s.__e=n.__e):c=s.__e=rs(n.__e,s,n,o,r,a,i,u,d);return(g=E.diffed)&&g(s),128&s.__u?void 0:c}function We(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(We))}function Tt(e,s,n){for(var o=0;o<n.length;o++)Oe(n[o],n[++o],n[++o]);E.__c&&E.__c(s,e),e.some(function(r){try{e=r.__h,r.__h=[],e.some(function(a){a.call(r)})}catch(a){E.__e(a,r.__v)}})}function Et(e){return typeof e!="object"||e==null||e.__b>0?e:Te(e)?e.map(Et):J({},e)}function rs(e,s,n,o,r,a,i,c,u){var d,g,l,p,m,x,w,A=n.props||xe,y=s.props,f=s.type;if(f=="svg"?r="http://www.w3.org/2000/svg":f=="math"?r="http://www.w3.org/1998/Math/MathML":r||(r="http://www.w3.org/1999/xhtml"),a!=null){for(d=0;d<a.length;d++)if((m=a[d])&&"setAttribute"in m==!!f&&(f?m.localName==f:m.nodeType==3)){e=m,a[d]=null;break}}if(e==null){if(f==null)return document.createTextNode(y);e=document.createElementNS(r,f,y.is&&y),c&&(E.__m&&E.__m(s,a),c=!1),a=null}if(f==null)A===y||c&&e.data==y||(e.data=y);else{if(a=a&&Ae.call(e.childNodes),!c&&a!=null)for(A={},d=0;d<e.attributes.length;d++)A[(m=e.attributes[d]).name]=m.value;for(d in A)m=A[d],d=="dangerouslySetInnerHTML"?l=m:d=="children"||d in y||d=="value"&&"defaultValue"in y||d=="checked"&&"defaultChecked"in y||me(e,d,null,m,r);for(d in y)m=y[d],d=="children"?p=m:d=="dangerouslySetInnerHTML"?g=m:d=="value"?x=m:d=="checked"?w=m:c&&typeof m!="function"||A[d]===m||me(e,d,m,A[d],r);if(g)c||l&&(g.__html==l.__html||g.__html==e.innerHTML)||(e.innerHTML=g.__html),s.__k=[];else if(l&&(e.innerHTML=""),Ct(s.type=="template"?e.content:e,Te(p)?p:[p],s,n,o,f=="foreignObject"?"http://www.w3.org/1999/xhtml":r,a,i,a?a[0]:n.__k&&ce(n,0),c,u),a!=null)for(d=a.length;d--;)je(a[d]);c||(d="value",f=="progress"&&x==null?e.removeAttribute("value"):x!=null&&(x!==e[d]||f=="progress"&&!x||f=="option"&&x!=A[d])&&me(e,d,x,A[d],r),d="checked",w!=null&&w!=e[d]&&me(e,d,w,A[d],r))}return e}function Oe(e,s,n){try{if(typeof e=="function"){var o=typeof e.__u=="function";o&&e.__u(),o&&s==null||(e.__u=e(s))}else e.current=s}catch(r){E.__e(r,n)}}function Rt(e,s,n){var o,r;if(E.unmount&&E.unmount(e),(o=e.ref)&&(o.current&&o.current!=e.__e||Oe(o,null,s)),(o=e.__c)!=null){if(o.componentWillUnmount)try{o.componentWillUnmount()}catch(a){E.__e(a,s)}o.base=o.__P=null}if(o=e.__k)for(r=0;r<o.length;r++)o[r]&&Rt(o[r],s,n||typeof e.type!="function");n||je(e.__e),e.__c=e.__=e.__e=void 0}function is(e,s,n){return this.constructor(e,n)}function ls(e,s,n){var o,r,a,i;s==document&&(s=document.documentElement),E.__&&E.__(e,s),r=(o=!1)?null:s.__k,a=[],i=[],Ge(s,e=s.__k=ts(se,null,[e]),r||xe,xe,s.namespaceURI,r?null:s.firstChild?Ae.call(s.childNodes):null,a,r?r.__e:s.firstChild,o,i),Tt(a,e,i)}Ae=Se.slice,E={__e:function(e,s,n,o){for(var r,a,i;s=s.__;)if((r=s.__c)&&!r.__)try{if((a=r.constructor)&&a.getDerivedStateFromError!=null&&(r.setState(a.getDerivedStateFromError(e)),i=r.__d),r.componentDidCatch!=null&&(r.componentDidCatch(e,o||{}),i=r.__d),i)return r.__E=r}catch(c){e=c}throw e}},kt=0,we.prototype.setState=function(e,s){var n;n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=J({},this.state),typeof e=="function"&&(e=e(J({},n),this.props)),e&&J(n,e),e!=null&&this.__v&&(s&&this._sb.push(s),tt(this))},we.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),tt(this))},we.prototype.render=se,te=[],xt=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,St=function(e,s){return e.__v.__b-s.__v.__b},Le.__r=0,Pe=Math.random().toString(8),ye="__d"+Pe,de="__a"+Pe,Lt=/(PointerCapture)$|Capture$/i,qe=0,He=nt(!1),De=nt(!0);var os=0;function t(e,s,n,o,r,a){s||(s={});var i,c,u=s;if("ref"in u)for(c in u={},s)c=="ref"?i=s[c]:u[c]=s[c];var d={type:e,props:u,key:n,ref:i,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--os,__i:-1,__u:0,__source:r,__self:a};if(typeof e=="function"&&(i=e.defaultProps))for(c in i)u[c]===void 0&&(u[c]=i[c]);return E.vnode&&E.vnode(d),d}var he,P,Be,at,ue=0,Ft=[],B=E,rt=B.__b,it=B.__r,lt=B.diffed,ot=B.__c,ct=B.unmount,dt=B.__;function Ke(e,s){B.__h&&B.__h(P,e,ue||s),ue=0;var n=P.__H||(P.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function C(e){return ue=1,cs(zt,e)}function cs(e,s,n){var o=Ke(he++,2);if(o.t=e,!o.__c&&(o.__=[zt(void 0,s),function(c){var u=o.__N?o.__N[0]:o.__[0],d=o.t(u,c);u!==d&&(o.__N=[d,o.__[1]],o.__c.setState({}))}],o.__c=P,!P.__f)){var r=function(c,u,d){if(!o.__c.__H)return!0;var g=o.__c.__H.__.filter(function(p){return p.__c});if(g.every(function(p){return!p.__N}))return!a||a.call(this,c,u,d);var l=o.__c.props!==c;return g.some(function(p){if(p.__N){var m=p.__[0];p.__=p.__N,p.__N=void 0,m!==p.__[0]&&(l=!0)}}),a&&a.call(this,c,u,d)||l};P.__f=!0;var a=P.shouldComponentUpdate,i=P.componentWillUpdate;P.componentWillUpdate=function(c,u,d){if(this.__e){var g=a;a=void 0,r(c,u,d),a=g}i&&i.call(this,c,u,d)},P.shouldComponentUpdate=r}return o.__N||o.__}function G(e,s){var n=Ke(he++,3);!B.__s&&Bt(n.__H,s)&&(n.__=e,n.u=s,P.__H.__h.push(n))}function j(e){return ue=5,Pt(function(){return{current:e}},[])}function Pt(e,s){var n=Ke(he++,7);return Bt(n.__H,s)&&(n.__=e(),n.__H=s,n.__h=e),n.__}function le(e,s){return ue=8,Pt(function(){return e},s)}function ds(){for(var e;e=Ft.shift();){var s=e.__H;if(e.__P&&s)try{s.__h.some(ke),s.__h.some($e),s.__h=[]}catch(n){s.__h=[],B.__e(n,e.__v)}}}B.__b=function(e){P=null,rt&&rt(e)},B.__=function(e,s){e&&s.__k&&s.__k.__m&&(e.__m=s.__k.__m),dt&&dt(e,s)},B.__r=function(e){it&&it(e),he=0;var s=(P=e.__c).__H;s&&(Be===P?(s.__h=[],P.__h=[],s.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(s.__h.some(ke),s.__h.some($e),s.__h=[],he=0)),Be=P},B.diffed=function(e){lt&<(e);var s=e.__c;s&&s.__H&&(s.__H.__h.length&&(Ft.push(s)!==1&&at===B.requestAnimationFrame||((at=B.requestAnimationFrame)||hs)(ds)),s.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),Be=P=null},B.__c=function(e,s){s.some(function(n){try{n.__h.some(ke),n.__h=n.__h.filter(function(o){return!o.__||$e(o)})}catch(o){s.some(function(r){r.__h&&(r.__h=[])}),s=[],B.__e(o,n.__v)}}),ot&&ot(e,s)},B.unmount=function(e){ct&&ct(e);var s,n=e.__c;n&&n.__H&&(n.__H.__.some(function(o){try{ke(o)}catch(r){s=r}}),n.__H=void 0,s&&B.__e(s,n.__v))};var ht=typeof requestAnimationFrame=="function";function hs(e){var s,n=function(){clearTimeout(o),ht&&cancelAnimationFrame(s),setTimeout(e)},o=setTimeout(n,35);ht&&(s=requestAnimationFrame(n))}function ke(e){var s=P,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),P=s}function $e(e){var s=P;e.__c=e.__(),P=s}function Bt(e,s){return!e||e.length!==s.length||s.some(function(n,o){return n!==e[o]})}function zt(e,s){return typeof s=="function"?s(e):s}const Me={en:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connected","header.disconnected":"Disconnected","header.connecting":"Connecting…","header.memories":"memories","tab.search":"Search","tab.browse":"Browse","tab.analytics":"Analytics","tab.manage":"Manage","tab.graph":"Graph","tab.lessons":"Lessons","tab.settings":"Settings","search.title":"Search Memories","search.placeholder":'Search your memories… (e.g., "auth", "database", "bug fix")',"search.button":"Search","search.searching":"Searching…","search.results":"results","search.result":"result","search.noResults":"No results for","search.hint":"Search by entity name, observation content, or tags. Supports FTS5 full-text + vector similarity.","search.facts":"facts","browse.title":"All Memories","browse.manage":"Manage Memories","browse.active":"active","browse.archived":"archived","browse.filter":"Filter by content, type, or tag…","browse.refresh":"Refresh","browse.noMemories":"No memories yet","browse.noMatch":"No memories matching","browse.prev":"← Prev","browse.next":"Next →","browse.archive":"Archive","browse.restore":"Restore","browse.confirmArchive":"Archive this memory?","browse.moreArchived":"more archived memories","analytics.totalMemories":"Total Memories","analytics.knowledgeFacts":"Knowledge Facts","analytics.connections":"Connections","analytics.topics":"Topics","analytics.insights":"Insights","analytics.thisWeek":"This week","analytics.new":"new","analytics.stale":"Stale (30+ days unused)","analytics.archivedLabel":"Archived","analytics.mostRecalled":"Most Recalled","health.title":"Memory Health","health.excellent":"Excellent","health.good":"Good","health.fair":"Fair","health.poor":"Poor","health.activity":"Activity","health.quality":"Quality","health.freshness":"Freshness","health.lessons":"Self-Improvement","timeline.title":"Last 30 Days","timeline.created":"Created","timeline.recalled":"Recalled","value.totalRecalls":"Total Recalls","value.lessonsLearned":"Lessons Learned","value.lessonsSaved":"Lessons Applied","value.coverage":"Knowledge Coverage","cleanup.title":"Cleanup Suggestions","cleanup.allClean":"Your memory is clean. No stale or duplicate entities detected.","cleanup.staleLabel":"Low confidence / unused","cleanup.duplicateLabel":"Possible duplicates","cleanup.confidence":"confidence","cleanup.unused":"unused","cleanup.consolidateHint":"Use the consolidate tool to merge similar entities.","settings.capabilities":"Capabilities","settings.smartMode":"Smart Mode","settings.core":"Core","settings.embeddings":"Embeddings","settings.llmProvider":"LLM Provider","settings.apiKey":"API Key","settings.model":"Model (optional)","settings.save":"Save","settings.saving":"Saving…","settings.saved":"Saved! Restart server for LLM changes to take effect.","settings.language":"Language","graph.entities":"Entities","graph.relations":"Relations","graph.orphans":"Orphans","graph.search":"Search nodes…","graph.matches":"matches","graph.focusMode":"Focus","graph.showAll":"Show all","graph.clickHint":"Click a node to focus","lessons.total":"Total Lessons","lessons.critical":"Critical","lessons.empty":"No lessons recorded yet. Use the learn tool or enable Smart Mode.","lessons.error":"Error","lessons.rootCause":"Root Cause","lessons.fix":"Fix","lessons.prevention":"Prevention","feedback.button":"💬 Feedback","feedback.title":"Send Feedback","feedback.bug":"Bug","feedback.feature":"Feature","feedback.question":"Question","feedback.placeholder":"Describe your feedback…","feedback.includeSys":"Include system info","feedback.submit":"Open GitHub Issue","patterns.title":"Your Patterns","patterns.workSchedule":"Work Schedule","patterns.peakHours":"Peak hours","patterns.busiestDays":"Busiest days","patterns.tools":"Top Tools","patterns.workflow":"Workflow","patterns.avgSession":"Avg Session","patterns.commitsPerSession":"Commits/Session","patterns.focus":"Focus Areas","patterns.strengths":"Strengths","patterns.learning":"Learning Areas","recall.effectiveness":"Effectiveness","recall.hits":"Hits","recall.misses":"Misses","recall.tracked":"Tracked","recall.hitRate":"Recall Hit Rate","recall.used":"used","recall.injected":"injected","recall.mostEffective":"Most Effective","recall.leastEffective":"Least Effective","recall.noData":"No recall data yet. Effectiveness tracking starts after your next session.","common.error":"Error","common.loading":"Loading…"},"zh-TW":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已連線","header.disconnected":"已斷線","header.connecting":"連線中…","header.memories":"筆記憶","tab.search":"搜尋","tab.browse":"瀏覽","tab.analytics":"分析","tab.manage":"管理","tab.graph":"關係圖","tab.lessons":"經驗教訓","tab.settings":"設定","search.title":"搜尋記憶","search.placeholder":"搜尋你的記憶…(例如:「auth」、「資料庫」、「bug 修復」)","search.button":"搜尋","search.searching":"搜尋中…","search.results":"個結果","search.result":"個結果","search.noResults":"找不到符合的結果:","search.hint":"可依實體名稱、觀察內容或標籤搜尋。支援 FTS5 全文檢索 + 向量相似度搜尋。","search.facts":"筆事實","browse.title":"所有記憶","browse.manage":"管理記憶","browse.active":"使用中","browse.archived":"已封存","browse.filter":"依內容、類型或標籤篩選…","browse.refresh":"重新整理","browse.noMemories":"尚無記憶","browse.noMatch":"找不到符合的記憶:","browse.prev":"← 上一頁","browse.next":"下一頁 →","browse.archive":"封存","browse.restore":"還原","browse.confirmArchive":"確定要封存此記憶?","browse.moreArchived":"筆已封存的記憶","analytics.totalMemories":"記憶總數","analytics.knowledgeFacts":"知識事實","analytics.connections":"關聯","analytics.topics":"主題","analytics.insights":"洞察","analytics.thisWeek":"本週","analytics.new":"筆新增","analytics.stale":"閒置(30 天以上未使用)","analytics.archivedLabel":"已封存","analytics.mostRecalled":"最常查閱","health.title":"記憶健康度","health.excellent":"優秀","health.good":"良好","health.fair":"普通","health.poor":"不佳","health.activity":"活躍度","health.quality":"品質","health.freshness":"新鮮度","health.lessons":"自我改善","timeline.title":"最近 30 天","timeline.created":"新增","timeline.recalled":"召回","value.totalRecalls":"總召回次數","value.lessonsLearned":"經驗教訓","value.lessonsSaved":"已應用教訓","value.coverage":"知識覆蓋率","cleanup.title":"清理建議","cleanup.allClean":"記憶庫很乾淨,沒有偵測到過時或重複的實體。","cleanup.staleLabel":"低信心度 / 未使用","cleanup.duplicateLabel":"可能重複","cleanup.confidence":"信心度","cleanup.unused":"未使用","cleanup.consolidateHint":"使用 consolidate 工具合併相似的實體。","settings.capabilities":"功能狀態","settings.smartMode":"智慧模式","settings.core":"基礎","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供者","settings.apiKey":"API 金鑰","settings.model":"模型(選填)","settings.save":"儲存","settings.saving":"儲存中…","settings.saved":"已儲存!重啟伺服器以套用 LLM 設定。","settings.language":"語言","graph.entities":"實體","graph.relations":"關聯","graph.orphans":"孤立節點","graph.search":"搜尋節點…","graph.matches":"個符合","graph.focusMode":"聚焦","graph.showAll":"顯示全部","graph.clickHint":"點擊節點以聚焦","lessons.total":"教訓總數","lessons.critical":"嚴重","lessons.empty":"尚無教訓記錄。請使用 learn 工具或啟用智慧模式。","lessons.error":"錯誤","lessons.rootCause":"根本原因","lessons.fix":"修復方式","lessons.prevention":"預防措施","feedback.button":"💬 意見回饋","feedback.title":"傳送意見回饋","feedback.bug":"錯誤","feedback.feature":"功能建議","feedback.question":"問題","feedback.placeholder":"描述你的意見回饋…","feedback.includeSys":"附帶系統資訊","feedback.submit":"開啟 GitHub Issue","patterns.title":"你的模式","patterns.workSchedule":"工作時程","patterns.peakHours":"尖峰時段","patterns.busiestDays":"最忙碌的日子","patterns.tools":"常用工具","patterns.workflow":"工作流程","patterns.avgSession":"平均工作階段","patterns.commitsPerSession":"每次提交數","patterns.focus":"關注領域","patterns.strengths":"強項","patterns.learning":"學習領域","recall.effectiveness":"有效性","recall.hits":"命中","recall.misses":"未命中","recall.tracked":"追蹤中","recall.hitRate":"記憶命中率","recall.used":"已使用","recall.injected":"已注入","recall.mostEffective":"最有效","recall.leastEffective":"最低效","recall.noData":"尚無召回數據。下次會話後開始追蹤有效性。","common.error":"錯誤","common.loading":"載入中…"},"zh-CN":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已连接","header.disconnected":"已断开","header.connecting":"连接中…","header.memories":"条记忆","tab.search":"搜索","tab.browse":"浏览","tab.analytics":"分析","tab.manage":"管理","tab.graph":"关系图","tab.lessons":"经验教训","tab.settings":"设置","search.title":"搜索记忆","search.placeholder":'搜索你的记忆…(例如:"auth"、"数据库"、"bug 修复")',"search.button":"搜索","search.searching":"搜索中…","search.results":"个结果","search.result":"个结果","search.noResults":"没有找到结果:","search.hint":"可按实体名称、观察内容或标签搜索。支持 FTS5 全文检索 + 向量相似度搜索。","search.facts":"条事实","browse.title":"所有记忆","browse.manage":"管理记忆","browse.active":"活跃","browse.archived":"已归档","browse.filter":"按内容、类型或标签筛选…","browse.refresh":"刷新","browse.noMemories":"暂无记忆","browse.noMatch":"没有匹配的记忆:","browse.prev":"← 上一页","browse.next":"下一页 →","browse.archive":"归档","browse.restore":"恢复","browse.confirmArchive":"确定要归档此记忆?","browse.moreArchived":"条已归档记忆","analytics.totalMemories":"记忆总数","analytics.knowledgeFacts":"知识事实","analytics.connections":"关联","analytics.topics":"主题","analytics.insights":"洞察","analytics.thisWeek":"本周","analytics.new":"条新增","analytics.stale":"闲置(30 天以上未使用)","analytics.archivedLabel":"已归档","analytics.mostRecalled":"最常查阅","health.title":"记忆健康度","health.excellent":"优秀","health.good":"良好","health.fair":"一般","health.poor":"较差","health.activity":"活跃度","health.quality":"质量","health.freshness":"新鲜度","health.lessons":"自我改善","timeline.title":"最近 30 天","timeline.created":"新增","timeline.recalled":"召回","value.totalRecalls":"总召回次数","value.lessonsLearned":"经验教训","value.lessonsSaved":"已应用教训","value.coverage":"知识覆盖率","cleanup.title":"清理建议","cleanup.allClean":"记忆库很干净,没有检测到过时或重复的实体。","cleanup.staleLabel":"低置信度 / 未使用","cleanup.duplicateLabel":"可能重复","cleanup.confidence":"置信度","cleanup.unused":"未使用","cleanup.consolidateHint":"使用 consolidate 工具合并相似的实体。","settings.capabilities":"功能状态","settings.smartMode":"智能模式","settings.core":"基础","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供商","settings.apiKey":"API 密钥","settings.model":"模型(选填)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"已保存!重启服务器以应用 LLM 设置。","settings.language":"语言","graph.entities":"实体","graph.relations":"关联","graph.orphans":"孤立节点","graph.search":"搜索节点…","graph.matches":"个匹配","graph.focusMode":"聚焦","graph.showAll":"显示全部","graph.clickHint":"点击节点以聚焦","lessons.total":"教训总数","lessons.critical":"严重","lessons.empty":"尚无教训记录。请使用 learn 工具或启用智能模式。","lessons.error":"错误","lessons.rootCause":"根本原因","lessons.fix":"修复方式","lessons.prevention":"预防措施","feedback.button":"💬 反馈","feedback.title":"发送反馈","feedback.bug":"错误","feedback.feature":"功能建议","feedback.question":"问题","feedback.placeholder":"描述你的反馈…","feedback.includeSys":"附带系统信息","feedback.submit":"打开 GitHub Issue","patterns.title":"你的模式","patterns.workSchedule":"工作时程","patterns.peakHours":"高峰时段","patterns.busiestDays":"最忙碌的日子","patterns.tools":"常用工具","patterns.workflow":"工作流程","patterns.avgSession":"平均工作时长","patterns.commitsPerSession":"每次提交数","patterns.focus":"关注领域","patterns.strengths":"强项","patterns.learning":"学习领域","recall.effectiveness":"有效性","recall.hits":"命中","recall.misses":"未命中","recall.tracked":"追踪中","recall.hitRate":"记忆命中率","recall.used":"已使用","recall.injected":"已注入","recall.mostEffective":"最有效","recall.leastEffective":"最低效","recall.noData":"暂无召回数据。下次会话后开始追踪有效性。","common.error":"错误","common.loading":"加载中…"},ja:{"brand.subtitle":"powered by pcircle.ai","header.connected":"接続中","header.disconnected":"切断","header.connecting":"接続しています…","header.memories":"件のメモリ","tab.search":"検索","tab.browse":"一覧","tab.analytics":"分析","tab.manage":"管理","tab.graph":"グラフ","tab.lessons":"教訓","tab.settings":"設定","search.title":"メモリを検索","search.placeholder":"メモリを検索…(例:「auth」「データベース」「バグ修正」)","search.button":"検索","search.searching":"検索中…","search.results":"件の結果","search.result":"件の結果","search.noResults":"結果が見つかりません:","search.hint":"エンティティ名、観察内容、タグで検索できます。FTS5全文検索 + ベクトル類似度に対応しています。","search.facts":"件の事実","browse.title":"すべてのメモリ","browse.manage":"メモリを管理","browse.active":"アクティブ","browse.archived":"アーカイブ済み","browse.filter":"内容、タイプ、タグで絞り込み…","browse.refresh":"更新","browse.noMemories":"メモリがありません","browse.noMatch":"一致するメモリがありません:","browse.prev":"← 前へ","browse.next":"次へ →","browse.archive":"アーカイブ","browse.restore":"復元","browse.confirmArchive":"このメモリをアーカイブしますか?","browse.moreArchived":"件のアーカイブ済みメモリ","analytics.totalMemories":"メモリ総数","analytics.knowledgeFacts":"知識ファクト","analytics.connections":"接続","analytics.topics":"トピック","analytics.insights":"インサイト","analytics.thisWeek":"今週","analytics.new":"件の新規","analytics.stale":"未使用(30日以上)","analytics.archivedLabel":"アーカイブ済み","analytics.mostRecalled":"よく参照される","health.title":"メモリ健康度","health.excellent":"優秀","health.good":"良好","health.fair":"普通","health.poor":"不良","health.activity":"アクティビティ","health.quality":"品質","health.freshness":"新鮮度","health.lessons":"自己改善","timeline.title":"過去30日間","timeline.created":"作成","timeline.recalled":"呼び出し","value.totalRecalls":"総呼び出し回数","value.lessonsLearned":"学んだ教訓","value.lessonsSaved":"適用済み教訓","value.coverage":"知識カバレッジ","cleanup.title":"クリーンアップ提案","cleanup.allClean":"メモリはきれいです。古いまたは重複したエンティティは検出されませんでした。","cleanup.staleLabel":"低信頼度 / 未使用","cleanup.duplicateLabel":"重複の可能性","cleanup.confidence":"信頼度","cleanup.unused":"未使用","cleanup.consolidateHint":"consolidateツールを使用して類似エンティティを統合してください。","settings.capabilities":"機能状態","settings.smartMode":"スマートモード","settings.core":"コア","settings.embeddings":"エンベディング","settings.llmProvider":"LLMプロバイダー","settings.apiKey":"APIキー","settings.model":"モデル(任意)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"保存しました!LLM設定を反映するにはサーバーを再起動してください。","settings.language":"言語","graph.entities":"エンティティ","graph.relations":"リレーション","graph.orphans":"孤立ノード","graph.search":"ノードを検索…","graph.matches":"件一致","graph.focusMode":"フォーカス","graph.showAll":"すべて表示","graph.clickHint":"ノードをクリックしてフォーカス","lessons.total":"教訓の総数","lessons.critical":"重大","lessons.empty":"まだ教訓が記録されていません。learnツールを使用するか、スマートモードを有効にしてください。","lessons.error":"エラー","lessons.rootCause":"根本原因","lessons.fix":"修正方法","lessons.prevention":"予防策","feedback.button":"💬 フィードバック","feedback.title":"フィードバックを送信","feedback.bug":"バグ","feedback.feature":"機能提案","feedback.question":"質問","feedback.placeholder":"フィードバックを記入…","feedback.includeSys":"システム情報を含める","feedback.submit":"GitHub Issue を作成","patterns.title":"あなたのパターン","patterns.workSchedule":"作業スケジュール","patterns.peakHours":"ピーク時間帯","patterns.busiestDays":"最も忙しい曜日","patterns.tools":"よく使うツール","patterns.workflow":"ワークフロー","patterns.avgSession":"平均セッション","patterns.commitsPerSession":"コミット/セッション","patterns.focus":"フォーカスエリア","patterns.strengths":"強み","patterns.learning":"学習エリア","recall.effectiveness":"有効性","recall.hits":"ヒット","recall.misses":"ミス","recall.tracked":"追跡中","recall.hitRate":"リコール命中率","recall.used":"使用済み","recall.injected":"注入済み","recall.mostEffective":"最も効果的","recall.leastEffective":"最も非効果的","recall.noData":"リコールデータはまだありません。次のセッション後に追跡が開始されます。","common.error":"エラー","common.loading":"読み込み中…"},ko:{"brand.subtitle":"powered by pcircle.ai","header.connected":"연결됨","header.disconnected":"연결 끊김","header.connecting":"연결 중…","header.memories":"개의 기억","tab.search":"검색","tab.browse":"둘러보기","tab.analytics":"분석","tab.manage":"관리","tab.graph":"그래프","tab.lessons":"교훈","tab.settings":"설정","search.title":"기억 검색","search.placeholder":'기억 검색… (예: "auth", "데이터베이스", "버그 수정")',"search.button":"검색","search.searching":"검색 중…","search.results":"개의 결과","search.result":"개의 결과","search.noResults":"결과를 찾을 수 없습니다:","search.hint":"엔티티 이름, 관찰 내용 또는 태그로 검색할 수 있습니다. FTS5 전체 텍스트 + 벡터 유사도 검색을 지원합니다.","search.facts":"개의 사실","browse.title":"모든 기억","browse.manage":"기억 관리","browse.active":"활성","browse.archived":"보관됨","browse.filter":"내용, 유형 또는 태그로 필터링…","browse.refresh":"새로고침","browse.noMemories":"기억이 없습니다","browse.noMatch":"일치하는 기억이 없습니다:","browse.prev":"← 이전","browse.next":"다음 →","browse.archive":"보관","browse.restore":"복원","browse.confirmArchive":"이 기억을 보관하시겠습니까?","browse.moreArchived":"개의 보관된 기억","analytics.totalMemories":"총 기억 수","analytics.knowledgeFacts":"지식 사실","analytics.connections":"연결","analytics.topics":"주제","analytics.insights":"인사이트","analytics.thisWeek":"이번 주","analytics.new":"개 신규","analytics.stale":"비활성 (30일 이상 미사용)","analytics.archivedLabel":"보관됨","analytics.mostRecalled":"가장 많이 조회됨","health.title":"메모리 건강도","health.excellent":"우수","health.good":"양호","health.fair":"보통","health.poor":"불량","health.activity":"활동","health.quality":"품질","health.freshness":"최신성","health.lessons":"자기 개선","timeline.title":"최근 30일","timeline.created":"생성","timeline.recalled":"호출","value.totalRecalls":"총 호출 횟수","value.lessonsLearned":"학습된 교훈","value.lessonsSaved":"적용된 교훈","value.coverage":"지식 커버리지","cleanup.title":"정리 제안","cleanup.allClean":"메모리가 깨끗합니다. 오래되었거나 중복된 엔티티가 감지되지 않았습니다.","cleanup.staleLabel":"낮은 신뢰도 / 미사용","cleanup.duplicateLabel":"중복 가능성","cleanup.confidence":"신뢰도","cleanup.unused":"미사용","cleanup.consolidateHint":"consolidate 도구를 사용하여 유사 엔티티를 병합하세요.","settings.capabilities":"기능 상태","settings.smartMode":"스마트 모드","settings.core":"기본","settings.embeddings":"임베딩","settings.llmProvider":"LLM 제공자","settings.apiKey":"API 키","settings.model":"모델 (선택)","settings.save":"저장","settings.saving":"저장 중…","settings.saved":"저장되었습니다! LLM 설정을 적용하려면 서버를 재시작하세요.","settings.language":"언어","graph.entities":"엔티티","graph.relations":"관계","graph.orphans":"고립 노드","graph.search":"노드 검색…","graph.matches":"개 일치","graph.focusMode":"포커스","graph.showAll":"모두 표시","graph.clickHint":"노드를 클릭하여 포커스","lessons.total":"총 교훈","lessons.critical":"심각","lessons.empty":"아직 기록된 교훈이 없습니다. learn 도구를 사용하거나 스마트 모드를 활성화하세요.","lessons.error":"오류","lessons.rootCause":"근본 원인","lessons.fix":"수정 방법","lessons.prevention":"예방 조치","feedback.button":"💬 피드백","feedback.title":"피드백 보내기","feedback.bug":"버그","feedback.feature":"기능 제안","feedback.question":"질문","feedback.placeholder":"피드백을 설명해주세요…","feedback.includeSys":"시스템 정보 포함","feedback.submit":"GitHub Issue 열기","patterns.title":"나의 패턴","patterns.workSchedule":"작업 일정","patterns.peakHours":"피크 시간대","patterns.busiestDays":"가장 바쁜 요일","patterns.tools":"자주 쓰는 도구","patterns.workflow":"워크플로우","patterns.avgSession":"평균 세션","patterns.commitsPerSession":"커밋/세션","patterns.focus":"집중 영역","patterns.strengths":"강점","patterns.learning":"학습 영역","recall.effectiveness":"효과","recall.hits":"적중","recall.misses":"미적중","recall.tracked":"추적 중","recall.hitRate":"리콜 적중률","recall.used":"사용됨","recall.injected":"주입됨","recall.mostEffective":"가장 효과적","recall.leastEffective":"가장 비효과적","recall.noData":"아직 리콜 데이터가 없습니다. 다음 세션 후 추적이 시작됩니다.","common.error":"오류","common.loading":"로딩 중…"},pt:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memórias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análise","tab.manage":"Gerenciar","tab.graph":"Grafo","tab.lessons":"Lições","tab.settings":"Configurações","search.title":"Buscar Memórias","search.placeholder":'Buscar memórias… (ex.: "auth", "banco de dados", "bug fix")',"search.button":"Buscar","search.searching":"Buscando…","search.results":"resultados","search.result":"resultado","search.noResults":"Nenhum resultado para","search.hint":"Pesquise por nome da entidade, conteúdo da observação ou tags. Suporta texto completo FTS5 + similaridade vetorial.","search.facts":"fatos","browse.title":"Todas as Memórias","browse.manage":"Gerenciar Memórias","browse.active":"ativas","browse.archived":"arquivadas","browse.filter":"Filtrar por conteúdo, tipo ou tag…","browse.refresh":"Atualizar","browse.noMemories":"Sem memórias ainda","browse.noMatch":"Nenhuma memória corresponde a","browse.prev":"← Anterior","browse.next":"Próximo →","browse.archive":"Arquivar","browse.restore":"Restaurar","browse.confirmArchive":"Arquivar esta memória?","browse.moreArchived":"memórias arquivadas","analytics.totalMemories":"Total de Memórias","analytics.knowledgeFacts":"Fatos","analytics.connections":"Conexões","analytics.topics":"Tópicos","analytics.insights":"Insights","analytics.thisWeek":"Esta semana","analytics.new":"novas","analytics.stale":"Inativas (30+ dias sem uso)","analytics.archivedLabel":"Arquivadas","analytics.mostRecalled":"Mais Consultadas","health.title":"Saúde da Memória","health.excellent":"Excelente","health.good":"Bom","health.fair":"Regular","health.poor":"Fraco","health.activity":"Atividade","health.quality":"Qualidade","health.freshness":"Frescor","health.lessons":"Auto-melhoria","timeline.title":"Últimos 30 Dias","timeline.created":"Criadas","timeline.recalled":"Recuperadas","value.totalRecalls":"Total de Recuperações","value.lessonsLearned":"Lições Aprendidas","value.lessonsSaved":"Lições Aplicadas","value.coverage":"Cobertura de Conhecimento","cleanup.title":"Sugestões de Limpeza","cleanup.allClean":"Sua memória está limpa. Nenhuma entidade obsoleta ou duplicada detectada.","cleanup.staleLabel":"Baixa confiança / não usado","cleanup.duplicateLabel":"Possíveis duplicatas","cleanup.confidence":"confiança","cleanup.unused":"não usado","cleanup.consolidateHint":"Use a ferramenta consolidate para mesclar entidades similares.","settings.capabilities":"Capacidades","settings.smartMode":"Modo Inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Provedor LLM","settings.apiKey":"Chave API","settings.model":"Modelo (opcional)","settings.save":"Salvar","settings.saving":"Salvando…","settings.saved":"Salvo! Reinicie o servidor para aplicar as configurações do LLM.","settings.language":"Idioma","graph.entities":"Entidades","graph.relations":"Relações","graph.orphans":"Orphans","graph.search":"Buscar nós…","graph.matches":"correspondências","graph.focusMode":"Foco","graph.showAll":"Mostrar tudo","graph.clickHint":"Clique em um nó para focar","lessons.total":"Total de Lições","lessons.critical":"Críticas","lessons.empty":"Nenhuma lição registrada. Use a ferramenta learn ou ative o Modo Inteligente.","lessons.error":"Erro","lessons.rootCause":"Causa Raiz","lessons.fix":"Correção","lessons.prevention":"Prevenção","feedback.button":"💬 Feedback","feedback.title":"Enviar Feedback","feedback.bug":"Bug","feedback.feature":"Sugestão","feedback.question":"Pergunta","feedback.placeholder":"Descreva seu feedback…","feedback.includeSys":"Incluir informações do sistema","feedback.submit":"Abrir GitHub Issue","patterns.title":"Seus Padrões","patterns.workSchedule":"Agenda de Trabalho","patterns.peakHours":"Horários de pico","patterns.busiestDays":"Dias mais movimentados","patterns.tools":"Ferramentas Principais","patterns.workflow":"Fluxo de Trabalho","patterns.avgSession":"Sessão Média","patterns.commitsPerSession":"Commits/Sessão","patterns.focus":"Áreas de Foco","patterns.strengths":"Pontos Fortes","patterns.learning":"Áreas de Aprendizado","recall.effectiveness":"Eficácia","recall.hits":"Acertos","recall.misses":"Erros","recall.tracked":"Rastreados","recall.hitRate":"Taxa de Acerto","recall.used":"usadas","recall.injected":"injetadas","recall.mostEffective":"Mais Eficazes","recall.leastEffective":"Menos Eficazes","recall.noData":"Ainda sem dados de recall. O rastreamento começa após a próxima sessão.","common.error":"Erro","common.loading":"Carregando…"},fr:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connecté","header.disconnected":"Déconnecté","header.connecting":"Connexion…","header.memories":"mémoires","tab.search":"Recherche","tab.browse":"Parcourir","tab.analytics":"Analyse","tab.manage":"Gérer","tab.graph":"Graphe","tab.lessons":"Leçons","tab.settings":"Paramètres","search.title":"Rechercher des mémoires","search.placeholder":"Rechercher vos mémoires… (ex. : « auth », « base de données », « bug fix »)","search.button":"Rechercher","search.searching":"Recherche…","search.results":"résultats","search.result":"résultat","search.noResults":"Aucun résultat pour","search.hint":"Recherchez par nom d’entité, contenu d’observation ou tags. Prend en charge le plein texte FTS5 + la similarité vectorielle.","search.facts":"faits","browse.title":"Toutes les mémoires","browse.manage":"Gérer les mémoires","browse.active":"actives","browse.archived":"archivées","browse.filter":"Filtrer par contenu, type ou tag…","browse.refresh":"Actualiser","browse.noMemories":"Pas encore de mémoires","browse.noMatch":"Aucune mémoire correspondant à","browse.prev":"← Précédent","browse.next":"Suivant →","browse.archive":"Archiver","browse.restore":"Restaurer","browse.confirmArchive":"Archiver cette mémoire ?","browse.moreArchived":"mémoires archivées","analytics.totalMemories":"Total des mémoires","analytics.knowledgeFacts":"Faits de connaissance","analytics.connections":"Connexions","analytics.topics":"Sujets","analytics.insights":"Aperçus","analytics.thisWeek":"Cette semaine","analytics.new":"nouvelles","analytics.stale":"Inactives (30+ jours sans utilisation)","analytics.archivedLabel":"Archivées","analytics.mostRecalled":"Les plus consultées","health.title":"Santé de la mémoire","health.excellent":"Excellent","health.good":"Bon","health.fair":"Moyen","health.poor":"Faible","health.activity":"Activité","health.quality":"Qualité","health.freshness":"Fraîcheur","health.lessons":"Auto-amélioration","timeline.title":"30 derniers jours","timeline.created":"Créés","timeline.recalled":"Rappelés","value.totalRecalls":"Total des rappels","value.lessonsLearned":"Leçons apprises","value.lessonsSaved":"Leçons appliquées","value.coverage":"Couverture des connaissances","cleanup.title":"Suggestions de nettoyage","cleanup.allClean":"Votre mémoire est propre. Aucune entité obsolète ou en double détectée.","cleanup.staleLabel":"Faible confiance / non utilisé","cleanup.duplicateLabel":"Doublons possibles","cleanup.confidence":"confiance","cleanup.unused":"non utilisé","cleanup.consolidateHint":"Utilisez l'outil consolidate pour fusionner les entités similaires.","settings.capabilities":"Capacités","settings.smartMode":"Mode intelligent","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Fournisseur LLM","settings.apiKey":"Clé API","settings.model":"Modèle (optionnel)","settings.save":"Enregistrer","settings.saving":"Enregistrement…","settings.saved":"Enregistré ! Redémarrez le serveur pour appliquer les paramètres LLM.","settings.language":"Langue","graph.entities":"Entités","graph.relations":"Relations","graph.orphans":"Orphelins","graph.search":"Rechercher des nœuds…","graph.matches":"correspondances","graph.focusMode":"Focus","graph.showAll":"Tout afficher","graph.clickHint":"Cliquez sur un nœud pour le cibler","lessons.total":"Total des leçons","lessons.critical":"Critiques","lessons.empty":"Aucune leçon enregistrée. Utilisez l'outil learn ou activez le Mode intelligent.","lessons.error":"Erreur","lessons.rootCause":"Cause racine","lessons.fix":"Correction","lessons.prevention":"Prévention","feedback.button":"💬 Retour","feedback.title":"Envoyer un retour","feedback.bug":"Bug","feedback.feature":"Suggestion","feedback.question":"Question","feedback.placeholder":"Décrivez votre retour…","feedback.includeSys":"Inclure les infos système","feedback.submit":"Ouvrir un GitHub Issue","patterns.title":"Vos habitudes","patterns.workSchedule":"Planning de travail","patterns.peakHours":"Heures de pointe","patterns.busiestDays":"Jours les plus chargés","patterns.tools":"Outils principaux","patterns.workflow":"Flux de travail","patterns.avgSession":"Session moyenne","patterns.commitsPerSession":"Commits/Session","patterns.focus":"Domaines de focus","patterns.strengths":"Points forts","patterns.learning":"Domaines d'apprentissage","recall.effectiveness":"Efficacité","recall.hits":"Succès","recall.misses":"Échecs","recall.tracked":"Suivis","recall.hitRate":"Taux de succès","recall.used":"utilisées","recall.injected":"injectées","recall.mostEffective":"Plus efficaces","recall.leastEffective":"Moins efficaces","recall.noData":"Pas encore de données. Le suivi commence après la prochaine session.","common.error":"Erreur","common.loading":"Chargement…"},de:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Verbunden","header.disconnected":"Getrennt","header.connecting":"Verbinden…","header.memories":"Erinnerungen","tab.search":"Suche","tab.browse":"Durchsuchen","tab.analytics":"Analyse","tab.manage":"Verwalten","tab.graph":"Graph","tab.lessons":"Lektionen","tab.settings":"Einstellungen","search.title":"Erinnerungen suchen","search.placeholder":'Erinnerungen suchen… (z.B. „auth", „Datenbank", „Bug Fix")',"search.button":"Suchen","search.searching":"Suche läuft…","search.results":"Ergebnisse","search.result":"Ergebnis","search.noResults":"Keine Ergebnisse für","search.hint":"Suchen Sie nach Entitätsname, Beobachtungsinhalt oder Tags. Unterstützt FTS5-Volltext + Vektorähnlichkeit.","search.facts":"Fakten","browse.title":"Alle Erinnerungen","browse.manage":"Erinnerungen verwalten","browse.active":"aktiv","browse.archived":"archiviert","browse.filter":"Nach Inhalt, Typ oder Tag filtern…","browse.refresh":"Aktualisieren","browse.noMemories":"Noch keine Erinnerungen","browse.noMatch":"Keine passenden Erinnerungen:","browse.prev":"← Zurück","browse.next":"Weiter →","browse.archive":"Archivieren","browse.restore":"Wiederherstellen","browse.confirmArchive":"Diese Erinnerung archivieren?","browse.moreArchived":"archivierte Erinnerungen","analytics.totalMemories":"Erinnerungen gesamt","analytics.knowledgeFacts":"Wissensfakten","analytics.connections":"Verbindungen","analytics.topics":"Themen","analytics.insights":"Einblicke","analytics.thisWeek":"Diese Woche","analytics.new":"neue","analytics.stale":"Inaktiv (30+ Tage ungenutzt)","analytics.archivedLabel":"Archiviert","analytics.mostRecalled":"Am häufigsten abgerufen","health.title":"Speichergesundheit","health.excellent":"Ausgezeichnet","health.good":"Gut","health.fair":"Mittel","health.poor":"Schlecht","health.activity":"Aktivität","health.quality":"Qualität","health.freshness":"Frische","health.lessons":"Selbstverbesserung","timeline.title":"Letzte 30 Tage","timeline.created":"Erstellt","timeline.recalled":"Abgerufen","value.totalRecalls":"Gesamtabrufe","value.lessonsLearned":"Gelernte Lektionen","value.lessonsSaved":"Angewendete Lektionen","value.coverage":"Wissensabdeckung","cleanup.title":"Aufräumvorschläge","cleanup.allClean":"Ihr Speicher ist sauber. Keine veralteten oder doppelten Entitäten erkannt.","cleanup.staleLabel":"Niedrige Konfidenz / ungenutzt","cleanup.duplicateLabel":"Mögliche Duplikate","cleanup.confidence":"Konfidenz","cleanup.unused":"ungenutzt","cleanup.consolidateHint":"Verwenden Sie das Consolidate-Tool um ähnliche Entitäten zusammenzuführen.","settings.capabilities":"Fähigkeiten","settings.smartMode":"Smart-Modus","settings.core":"Basis","settings.embeddings":"Embeddings","settings.llmProvider":"LLM-Anbieter","settings.apiKey":"API-Schlüssel","settings.model":"Modell (optional)","settings.save":"Speichern","settings.saving":"Speichern…","settings.saved":"Gespeichert! Server neu starten, um LLM-Einstellungen anzuwenden.","settings.language":"Sprache","graph.entities":"Entitäten","graph.relations":"Beziehungen","graph.orphans":"Waisen","graph.search":"Knoten suchen…","graph.matches":"Treffer","graph.focusMode":"Fokus","graph.showAll":"Alle anzeigen","graph.clickHint":"Knoten anklicken zum Fokussieren","lessons.total":"Lektionen gesamt","lessons.critical":"Kritisch","lessons.empty":"Noch keine Lektionen erfasst. Verwenden Sie das Learn-Tool oder aktivieren Sie den Smart-Modus.","lessons.error":"Fehler","lessons.rootCause":"Ursache","lessons.fix":"Lösung","lessons.prevention":"Prävention","feedback.button":"💬 Feedback","feedback.title":"Feedback senden","feedback.bug":"Fehler","feedback.feature":"Vorschlag","feedback.question":"Frage","feedback.placeholder":"Beschreiben Sie Ihr Feedback…","feedback.includeSys":"Systeminformationen einschließen","feedback.submit":"GitHub Issue öffnen","patterns.title":"Ihre Muster","patterns.workSchedule":"Arbeitsplan","patterns.peakHours":"Spitzenzeiten","patterns.busiestDays":"Aktivste Tage","patterns.tools":"Top-Werkzeuge","patterns.workflow":"Arbeitsablauf","patterns.avgSession":"Durchschn. Sitzung","patterns.commitsPerSession":"Commits/Sitzung","patterns.focus":"Schwerpunkte","patterns.strengths":"Stärken","patterns.learning":"Lernbereiche","recall.effectiveness":"Effektivität","recall.hits":"Treffer","recall.misses":"Fehltreffer","recall.tracked":"Verfolgt","recall.hitRate":"Trefferquote","recall.used":"verwendet","recall.injected":"injiziert","recall.mostEffective":"Am effektivsten","recall.leastEffective":"Am wenigsten effektiv","recall.noData":"Noch keine Abrufdaten. Die Verfolgung beginnt nach der nächsten Sitzung.","common.error":"Fehler","common.loading":"Laden…"},vi:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Đã kết nối","header.disconnected":"Mất kết nối","header.connecting":"Đang kết nối…","header.memories":"ký ức","tab.search":"Tìm kiếm","tab.browse":"Duyệt","tab.analytics":"Phân tích","tab.manage":"Quản lý","tab.graph":"Đồ thị","tab.lessons":"Bài học","tab.settings":"Cài đặt","search.title":"Tìm kiếm ký ức","search.placeholder":'Tìm kiếm ký ức… (ví dụ: "auth", "cơ sở dữ liệu", "sửa lỗi")',"search.button":"Tìm kiếm","search.searching":"Đang tìm…","search.results":"kết quả","search.result":"kết quả","search.noResults":"Không tìm thấy kết quả cho","search.hint":"Tìm theo tên thực thể, nội dung quan sát hoặc thẻ. Hỗ trợ tìm kiếm toàn văn FTS5 + độ tương đồng vector.","search.facts":"sự kiện","browse.title":"Tất cả ký ức","browse.manage":"Quản lý ký ức","browse.active":"hoạt động","browse.archived":"đã lưu trữ","browse.filter":"Lọc theo nội dung, loại hoặc thẻ…","browse.refresh":"Làm mới","browse.noMemories":"Chưa có ký ức","browse.noMatch":"Không có ký ức phù hợp:","browse.prev":"← Trước","browse.next":"Tiếp →","browse.archive":"Lưu trữ","browse.restore":"Khôi phục","browse.confirmArchive":"Lưu trữ ký ức này?","browse.moreArchived":"ký ức đã lưu trữ","analytics.totalMemories":"Tổng ký ức","analytics.knowledgeFacts":"Sự kiện tri thức","analytics.connections":"Kết nối","analytics.topics":"Chủ đề","analytics.insights":"Thông tin","analytics.thisWeek":"Tuần này","analytics.new":"mới","analytics.stale":"Không hoạt động (30+ ngày)","analytics.archivedLabel":"Đã lưu trữ","analytics.mostRecalled":"Được truy xuất nhiều nhất","health.title":"Sức khỏe bộ nhớ","health.excellent":"Xuất sắc","health.good":"Tốt","health.fair":"Trung bình","health.poor":"Kém","health.activity":"Hoạt động","health.quality":"Chất lượng","health.freshness":"Độ mới","health.lessons":"Tự cải thiện","timeline.title":"30 ngày qua","timeline.created":"Đã tạo","timeline.recalled":"Đã gọi lại","value.totalRecalls":"Tổng số lần gọi lại","value.lessonsLearned":"Bài học đã rút ra","value.lessonsSaved":"Bài học đã áp dụng","value.coverage":"Phạm vi kiến thức","cleanup.title":"Gợi ý dọn dẹp","cleanup.allClean":"Bộ nhớ của bạn sạch. Không phát hiện thực thể lỗi thời hoặc trùng lặp.","cleanup.staleLabel":"Độ tin cậy thấp / chưa sử dụng","cleanup.duplicateLabel":"Có thể trùng lặp","cleanup.confidence":"độ tin cậy","cleanup.unused":"chưa sử dụng","cleanup.consolidateHint":"Sử dụng công cụ consolidate để hợp nhất các thực thể tương tự.","settings.capabilities":"Khả năng","settings.smartMode":"Chế độ thông minh","settings.core":"Cơ bản","settings.embeddings":"Embeddings","settings.llmProvider":"Nhà cung cấp LLM","settings.apiKey":"Khóa API","settings.model":"Mô hình (tùy chọn)","settings.save":"Lưu","settings.saving":"Đang lưu…","settings.saved":"Đã lưu! Khởi động lại server để áp dụng cài đặt LLM.","settings.language":"Ngôn ngữ","graph.entities":"Thực thể","graph.relations":"Quan hệ","graph.orphans":"Cô lập","graph.search":"Tìm kiếm nút…","graph.matches":"kết quả","graph.focusMode":"Tập trung","graph.showAll":"Hiển thị tất cả","graph.clickHint":"Nhấp vào nút để tập trung","lessons.total":"Tổng bài học","lessons.critical":"Nghiêm trọng","lessons.empty":"Chưa có bài học nào được ghi nhận. Sử dụng công cụ learn hoặc bật Chế độ thông minh.","lessons.error":"Lỗi","lessons.rootCause":"Nguyên nhân gốc","lessons.fix":"Cách sửa","lessons.prevention":"Phòng ngừa","feedback.button":"💬 Phản hồi","feedback.title":"Gửi phản hồi","feedback.bug":"Lỗi","feedback.feature":"Đề xuất","feedback.question":"Câu hỏi","feedback.placeholder":"Mô tả phản hồi của bạn…","feedback.includeSys":"Kèm thông tin hệ thống","feedback.submit":"Mở GitHub Issue","patterns.title":"Kiểu mẫu của bạn","patterns.workSchedule":"Lịch làm việc","patterns.peakHours":"Giờ cao điểm","patterns.busiestDays":"Ngày bận rộn nhất","patterns.tools":"Công cụ hàng đầu","patterns.workflow":"Quy trình làm việc","patterns.avgSession":"Phiên trung bình","patterns.commitsPerSession":"Commits/Phiên","patterns.focus":"Lĩnh vực tập trung","patterns.strengths":"Điểm mạnh","patterns.learning":"Lĩnh vực học tập","recall.effectiveness":"Hiệu quả","recall.hits":"Trúng","recall.misses":"Trượt","recall.tracked":"Theo dõi","recall.hitRate":"Tỷ lệ trúng","recall.used":"đã dùng","recall.injected":"đã tiêm","recall.mostEffective":"Hiệu quả nhất","recall.leastEffective":"Kém hiệu quả nhất","recall.noData":"Chưa có dữ liệu. Theo dõi sẽ bắt đầu sau phiên tiếp theo.","common.error":"Lỗi","common.loading":"Đang tải…"},es:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memorias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análisis","tab.manage":"Gestionar","tab.graph":"Grafo","tab.lessons":"Lecciones","tab.settings":"Configuración","search.title":"Buscar memorias","search.placeholder":'Buscar memorias… (ej.: "auth", "base de datos", "corrección")',"search.button":"Buscar","search.searching":"Buscando…","search.results":"resultados","search.result":"resultado","search.noResults":"Sin resultados para","search.hint":"Busca por nombre de entidad, contenido de observación o etiquetas. Admite texto completo FTS5 + similitud vectorial.","search.facts":"hechos","browse.title":"Todas las memorias","browse.manage":"Gestionar memorias","browse.active":"activas","browse.archived":"archivadas","browse.filter":"Filtrar por contenido, tipo o etiqueta…","browse.refresh":"Actualizar","browse.noMemories":"Aún no hay memorias","browse.noMatch":"No hay memorias que coincidan con","browse.prev":"← Anterior","browse.next":"Siguiente →","browse.archive":"Archivar","browse.restore":"Restaurar","browse.confirmArchive":"¿Archivar esta memoria?","browse.moreArchived":"memorias archivadas","analytics.totalMemories":"Total de memorias","analytics.knowledgeFacts":"Hechos","analytics.connections":"Conexiones","analytics.topics":"Temas","analytics.insights":"Información","analytics.thisWeek":"Esta semana","analytics.new":"nuevas","analytics.stale":"Inactivas (30+ días sin uso)","analytics.archivedLabel":"Archivadas","analytics.mostRecalled":"Más consultadas","health.title":"Salud de la memoria","health.excellent":"Excelente","health.good":"Bueno","health.fair":"Regular","health.poor":"Deficiente","health.activity":"Actividad","health.quality":"Calidad","health.freshness":"Frescura","health.lessons":"Auto-mejora","timeline.title":"Últimos 30 días","timeline.created":"Creados","timeline.recalled":"Recuperados","value.totalRecalls":"Total de recuperaciones","value.lessonsLearned":"Lecciones aprendidas","value.lessonsSaved":"Lecciones aplicadas","value.coverage":"Cobertura de conocimiento","cleanup.title":"Sugerencias de limpieza","cleanup.allClean":"Tu memoria está limpia. No se detectaron entidades obsoletas o duplicadas.","cleanup.staleLabel":"Baja confianza / no usado","cleanup.duplicateLabel":"Posibles duplicados","cleanup.confidence":"confianza","cleanup.unused":"no usado","cleanup.consolidateHint":"Usa la herramienta consolidate para fusionar entidades similares.","settings.capabilities":"Capacidades","settings.smartMode":"Modo inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Proveedor LLM","settings.apiKey":"Clave API","settings.model":"Modelo (opcional)","settings.save":"Guardar","settings.saving":"Guardando…","settings.saved":"¡Guardado! Reinicie el servidor para aplicar la configuración LLM.","settings.language":"Idioma","graph.entities":"Entidades","graph.relations":"Relaciones","graph.orphans":"Huerfanos","graph.search":"Buscar nodos…","graph.matches":"coincidencias","graph.focusMode":"Enfoque","graph.showAll":"Mostrar todo","graph.clickHint":"Haz clic en un nodo para enfocar","lessons.total":"Total de lecciones","lessons.critical":"Críticas","lessons.empty":"No hay lecciones registradas. Usa la herramienta learn o activa el Modo inteligente.","lessons.error":"Error","lessons.rootCause":"Causa raíz","lessons.fix":"Corrección","lessons.prevention":"Prevención","feedback.button":"💬 Comentarios","feedback.title":"Enviar comentarios","feedback.bug":"Error","feedback.feature":"Sugerencia","feedback.question":"Pregunta","feedback.placeholder":"Describe tu comentario…","feedback.includeSys":"Incluir información del sistema","feedback.submit":"Abrir GitHub Issue","patterns.title":"Tus patrones","patterns.workSchedule":"Horario de trabajo","patterns.peakHours":"Horas pico","patterns.busiestDays":"Días más ocupados","patterns.tools":"Herramientas principales","patterns.workflow":"Flujo de trabajo","patterns.avgSession":"Sesión promedio","patterns.commitsPerSession":"Commits/Sesión","patterns.focus":"Áreas de enfoque","patterns.strengths":"Fortalezas","patterns.learning":"Áreas de aprendizaje","recall.effectiveness":"Eficacia","recall.hits":"Aciertos","recall.misses":"Fallos","recall.tracked":"Rastreados","recall.hitRate":"Tasa de acierto","recall.used":"usadas","recall.injected":"inyectadas","recall.mostEffective":"Más eficaces","recall.leastEffective":"Menos eficaces","recall.noData":"Aún sin datos. El seguimiento comienza después de la próxima sesión.","common.error":"Error","common.loading":"Cargando…"},th:{"brand.subtitle":"powered by pcircle.ai","header.connected":"เชื่อมต่อแล้ว","header.disconnected":"ไม่ได้เชื่อมต่อ","header.connecting":"กำลังเชื่อมต่อ…","header.memories":"ความทรงจำ","tab.search":"ค้นหา","tab.browse":"เรียกดู","tab.analytics":"วิเคราะห์","tab.manage":"จัดการ","tab.graph":"กราฟ","tab.lessons":"บทเรียน","tab.settings":"ตั้งค่า","search.title":"ค้นหาความทรงจำ","search.placeholder":'ค้นหาความทรงจำ… (เช่น "auth", "ฐานข้อมูล", "แก้บั๊ก")',"search.button":"ค้นหา","search.searching":"กำลังค้นหา…","search.results":"ผลลัพธ์","search.result":"ผลลัพธ์","search.noResults":"ไม่พบผลลัพธ์สำหรับ","search.hint":"ค้นหาตามชื่อเอนทิตี เนื้อหาข้อสังเกต หรือแท็ก รองรับการค้นหาข้อความเต็ม FTS5 + ความคล้ายคลึงแบบเวกเตอร์","search.facts":"ข้อเท็จจริง","browse.title":"ความทรงจำทั้งหมด","browse.manage":"จัดการความทรงจำ","browse.active":"ใช้งานอยู่","browse.archived":"เก็บถาวร","browse.filter":"กรองตามเนื้อหา ประเภท หรือแท็ก…","browse.refresh":"รีเฟรช","browse.noMemories":"ยังไม่มีความทรงจำ","browse.noMatch":"ไม่พบความทรงจำที่ตรงกัน:","browse.prev":"← ก่อนหน้า","browse.next":"ถัดไป →","browse.archive":"เก็บถาวร","browse.restore":"กู้คืน","browse.confirmArchive":"เก็บถาวรความทรงจำนี้?","browse.moreArchived":"ความทรงจำที่เก็บถาวร","analytics.totalMemories":"ความทรงจำทั้งหมด","analytics.knowledgeFacts":"ข้อเท็จจริง","analytics.connections":"การเชื่อมต่อ","analytics.topics":"หัวข้อ","analytics.insights":"ข้อมูลเชิงลึก","analytics.thisWeek":"สัปดาห์นี้","analytics.new":"ใหม่","analytics.stale":"ไม่ได้ใช้งาน (30+ วัน)","analytics.archivedLabel":"เก็บถาวร","analytics.mostRecalled":"ถูกเรียกดูมากที่สุด","health.title":"สุขภาพหน่วยความจำ","health.excellent":"ยอดเยี่ยม","health.good":"ดี","health.fair":"พอใช้","health.poor":"ไม่ดี","health.activity":"กิจกรรม","health.quality":"คุณภาพ","health.freshness":"ความสดใหม่","health.lessons":"การพัฒนาตนเอง","timeline.title":"30 วันที่ผ่านมา","timeline.created":"สร้างแล้ว","timeline.recalled":"เรียกคืนแล้ว","value.totalRecalls":"การเรียกคืนทั้งหมด","value.lessonsLearned":"บทเรียนที่เรียนรู้","value.lessonsSaved":"บทเรียนที่นำไปใช้","value.coverage":"ความครอบคลุมความรู้","cleanup.title":"คำแนะนำการทำความสะอาด","cleanup.allClean":"หน่วยความจำของคุณสะอาด ไม่พบเอนทิตีที่ล้าสมัยหรือซ้ำซ้อน","cleanup.staleLabel":"ความเชื่อมั่นต่ำ / ไม่ได้ใช้","cleanup.duplicateLabel":"อาจซ้ำซ้อน","cleanup.confidence":"ความเชื่อมั่น","cleanup.unused":"ไม่ได้ใช้","cleanup.consolidateHint":"ใช้เครื่องมือ consolidate เพื่อรวมเอนทิตีที่คล้ายกัน","settings.capabilities":"ความสามารถ","settings.smartMode":"โหมดอัจฉริยะ","settings.core":"พื้นฐาน","settings.embeddings":"Embeddings","settings.llmProvider":"ผู้ให้บริการ LLM","settings.apiKey":"คีย์ API","settings.model":"โมเดล (ไม่บังคับ)","settings.save":"บันทึก","settings.saving":"กำลังบันทึก…","settings.saved":"บันทึกแล้ว! รีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การตั้งค่า LLM","settings.language":"ภาษา","graph.entities":"เอนทิตี","graph.relations":"ความสัมพันธ์","graph.orphans":"โหนดโดดเดี่ยว","graph.search":"ค้นหาโหนด…","graph.matches":"รายการที่ตรงกัน","graph.focusMode":"โฟกัส","graph.showAll":"แสดงทั้งหมด","graph.clickHint":"คลิกโหนดเพื่อโฟกัส","lessons.total":"บทเรียนทั้งหมด","lessons.critical":"วิกฤต","lessons.empty":"ยังไม่มีบทเรียนที่บันทึกไว้ ใช้เครื่องมือ learn หรือเปิดใช้โหมดอัจฉริยะ","lessons.error":"ข้อผิดพลาด","lessons.rootCause":"สาเหตุหลัก","lessons.fix":"วิธีแก้ไข","lessons.prevention":"การป้องกัน","feedback.button":"💬 ความคิดเห็น","feedback.title":"ส่งความคิดเห็น","feedback.bug":"ข้อผิดพลาด","feedback.feature":"ข้อเสนอแนะ","feedback.question":"คำถาม","feedback.placeholder":"อธิบายความคิดเห็นของคุณ…","feedback.includeSys":"รวมข้อมูลระบบ","feedback.submit":"เปิด GitHub Issue","patterns.title":"รูปแบบของคุณ","patterns.workSchedule":"ตารางการทำงาน","patterns.peakHours":"ช่วงเวลาพีค","patterns.busiestDays":"วันที่ยุ่งที่สุด","patterns.tools":"เครื่องมือยอดนิยม","patterns.workflow":"กระบวนการทำงาน","patterns.avgSession":"เซสชันเฉลี่ย","patterns.commitsPerSession":"คอมมิต/เซสชัน","patterns.focus":"พื้นที่โฟกัส","patterns.strengths":"จุดแข็ง","patterns.learning":"พื้นที่การเรียนรู้","recall.effectiveness":"ประสิทธิผล","recall.hits":"ตรง","recall.misses":"พลาด","recall.tracked":"ติดตาม","recall.hitRate":"อัตราการเรียกคืน","recall.used":"ใช้แล้ว","recall.injected":"ฉีดแล้ว","recall.mostEffective":"มีประสิทธิภาพมากที่สุด","recall.leastEffective":"มีประสิทธิภาพน้อยที่สุด","recall.noData":"ยังไม่มีข้อมูล การติดตามจะเริ่มหลังเซสชันถัดไป","common.error":"ข้อผิดพลาด","common.loading":"กำลังโหลด…"}},us={en:"English","zh-TW":"繁體中文","zh-CN":"简体中文",ja:"日本語",ko:"한국어",pt:"Português",fr:"Français",de:"Deutsch",vi:"Tiếng Việt",es:"Español",th:"ภาษาไทย"};let Ce="en";function ps(){const e=localStorage.getItem("memesh-locale");if(e&&Me[e])return e;const s=navigator.language;if(s.startsWith("zh-TW")||s.startsWith("zh-Hant"))return"zh-TW";if(s.startsWith("zh"))return"zh-CN";const n=s.split("-")[0];return Me[n]?n:"en"}function gs(){return Ce=ps(),Ce}function fs(e){Ce=e,localStorage.setItem("memesh-locale",e)}function h(e){return Me[Ce]?.[e]||Me.en[e]||e}function ms(){return Object.entries(us).map(([e,s])=>({code:e,name:s}))}function vs({health:e,error:s}){return t("div",{class:"header",children:[t("div",{class:"header-brand",children:[t("h1",{children:"MeMesh LLM Memory"}),t("small",{children:h("brand.subtitle")})]}),t("div",{class:"header-right",children:t("div",{class:"header-meta",children:e?t(se,{children:[t("span",{children:[t("span",{class:"dot dot-ok"}),h("header.connected")]}),t("span",{class:"badge-version",children:["v",e.version," · ",e.entity_count.toLocaleString()," ",h("header.memories")]})]}):s?t("span",{children:[t("span",{class:"dot dot-err"}),h("header.disconnected")]}):t("span",{style:{color:"var(--text-3)"},children:h("header.connecting")})})})]})}function bs({tabs:e,active:s,onSelect:n}){return t("nav",{class:"nav",children:e.map(({key:o,label:r})=>t("button",{class:`nav-btn ${o===s?"active":""}`,onClick:()=>n(o),children:r},o))})}const ys=1e4;async function O(e,s,n){const o=new AbortController,r=setTimeout(()=>o.abort(),ys);try{const a={method:e,headers:{"Content-Type":"application/json"},signal:o.signal};n&&(a.body=JSON.stringify(n));const i=await fetch(s,a);if(!i.ok)throw new Error(`HTTP ${i.status}`);const c=await i.json();if(!c.success)throw new Error(c.error||"Unknown error");return c.data}catch(a){throw a.name==="AbortError"?new Error("Request timed out"):a}finally{clearTimeout(r)}}async function _s(){return O("GET","/v1/graph")}async function ws(){const e=await O("POST","/v1/recall",{limit:100});return(Array.isArray(e)?e:e.entities||[]).filter(n=>n.type==="lesson_learned")}function ks(e){try{const s=new Date(e);return{date:s.toLocaleDateString(void 0,{month:"short",day:"numeric"}),time:s.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})}}catch{return{date:"—",time:""}}}function ut(e,s){return e.length>s?e.slice(0,s)+"…":e}function Ne({entity:e,actions:s,highlight:n}){const o=ks(e.created_at),r=e.observations?.[0]||"(no content)",a=e.observations?.length||0,i=e.archived||e.status==="archived";return t("div",{class:"mem-row",style:i?{opacity:.45}:void 0,children:[t("div",{class:"mem-time",children:[t("div",{children:o.date}),t("div",{children:o.time})]}),t("div",{class:"mem-body",children:[t("div",{class:"mem-preview",children:n?t(xs,{text:ut(r,140),term:n}):ut(r,140)}),t("div",{class:"mem-meta",children:[t("span",{class:"badge badge-type",children:e.type}),i&&t("span",{class:"badge badge-archived",children:"archived"}),t("span",{children:e.name}),a>1&&t("span",{children:["· ",a," facts"]}),e.tags?.slice(0,3).map(c=>t("span",{class:"tag",children:c},c)),(e.tags?.length||0)>3&&t("span",{class:"tag",style:{opacity:.5},children:["+",e.tags.length-3]})]})]}),s&&t("div",{class:"mem-actions",children:s})]})}function xs({text:e,term:s}){if(!s)return t(se,{children:e});const n=[],o=e.toLowerCase(),r=s.toLowerCase();let a=0;for(;a<e.length;){const i=o.indexOf(r,a);if(i===-1){n.push(e.slice(a));break}i>a&&n.push(e.slice(a,i)),n.push(t("mark",{children:e.slice(i,i+r.length)})),a=i+r.length}return t(se,{children:n})}function Ss(){const[e,s]=C(""),[n,o]=C(null),[r,a]=C(!1),[i,c]=C("");async function u(){if(e.trim()){a(!0),c("");try{const d=await O("POST","/v1/recall",{query:e.trim(),limit:30}),g=Array.isArray(d)?d:d.entities||[];o(g)}catch(d){c(d.message)}finally{a(!1)}}}return t("div",{children:t("div",{class:"card",children:[t("div",{class:"card-title",children:h("search.title")}),t("div",{class:"search-bar",children:[t("input",{type:"search",placeholder:h("search.placeholder"),value:e,onInput:d=>s(d.target.value),onKeyDown:d=>d.key==="Enter"&&u()}),t("button",{class:"btn btn-primary",onClick:u,disabled:r,children:h(r?"search.searching":"search.button")})]}),!r&&n===null&&!i&&t("div",{class:"empty",style:{padding:"32px 20px",color:"var(--text-3)"},children:t("div",{style:{fontSize:13,lineHeight:1.6},children:h("search.hint")})}),i&&t("div",{class:"error-box",children:i}),r&&t("div",{class:"empty",children:t("div",{class:"loading"})}),!r&&n!==null&&n.length===0&&t("div",{class:"empty",children:[t("span",{class:"empty-icon",children:"🔍"}),h("search.noResults"),' "',e,'"']}),!r&&n&&n.length>0&&t("div",{children:[t("div",{style:{fontSize:12,color:"var(--text-3)",marginBottom:12},children:[n.length," ",n.length!==1?h("search.results"):h("search.result")]}),n.map(d=>t("div",{class:"card",style:{padding:14},children:t(Ne,{entity:d,highlight:e})},d.id))]})]})})}const ze=30;function pt({manage:e}){const[s,n]=C([]),[o,r]=C(""),[a,i]=C(!0),[c,u]=C(""),[d,g]=C(0);async function l(){i(!0),u("");try{const _=await O("GET","/v1/entities?limit=500&status=all");n(_||[]),g(0)}catch(_){u(_.message)}finally{i(!1)}}G(()=>{l()},[]),G(()=>{g(0)},[o]);const p=o.toLowerCase(),m=s.filter(_=>p?_.name.toLowerCase().includes(p)||_.type.toLowerCase().includes(p)||_.observations?.some(H=>H.toLowerCase().includes(p))||_.tags?.some(H=>H.toLowerCase().includes(p)):!0),x=m.filter(_=>!_.archived&&_.status!=="archived"),w=m.filter(_=>_.archived||_.status==="archived"),A=Math.ceil(x.length/ze),y=x.slice(d*ze,(d+1)*ze);async function f(_){if(confirm(h("browse.confirmArchive")))try{await O("POST","/v1/forget",{name:_}),l()}catch(H){u("Failed to archive: "+H.message)}}async function F(_){try{await O("POST","/v1/remember",{name:_,type:"restored"}),l()}catch(H){u("Failed to restore: "+H.message)}}return t("div",{children:t("div",{class:"card",children:[t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:16},children:[t("div",{children:[t("div",{class:"card-title",style:{margin:0},children:h(e?"browse.manage":"browse.title")}),!a&&t("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[x.length.toLocaleString()," ",h("browse.active"),w.length>0?` · ${w.length} ${h("browse.archived")}`:""]})]}),t("div",{style:{display:"flex",gap:8},children:[t("input",{type:"search",placeholder:h("browse.filter"),value:o,onInput:_=>r(_.target.value),style:{width:260}}),t("button",{class:"btn btn-sm",onClick:l,title:h("browse.refresh"),children:"↻"})]})]}),c&&t("div",{class:"error-box",style:{marginBottom:12},children:c}),a&&t("div",{class:"empty",children:t("div",{class:"loading"})}),!a&&m.length===0&&t("div",{class:"empty",children:[t("span",{class:"empty-icon",children:"📭"}),o?`${h("browse.noMatch")} "${o}"`:h("browse.noMemories")]}),!a&&y.length>0&&t("div",{children:[y.map(_=>t("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:t(Ne,{entity:_,highlight:o,actions:e?t("button",{class:"btn btn-danger btn-sm",onClick:()=>f(_.name),children:h("browse.archive")}):void 0})},_.id)),A>1&&t("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",gap:12,padding:"16px 0",fontSize:13},children:[t("button",{class:"btn btn-sm",disabled:d===0,onClick:()=>g(_=>_-1),children:h("browse.prev")}),t("span",{style:{color:"var(--text-3)",fontFamily:"var(--mono)",fontSize:12},children:[d+1," / ",A]}),t("button",{class:"btn btn-sm",disabled:d>=A-1,onClick:()=>g(_=>_+1),children:h("browse.next")})]})]}),!a&&w.length>0&&t("div",{style:{marginTop:20},children:[t("div",{style:{fontSize:11,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8,paddingBottom:8,borderBottom:"1px solid var(--border)"},children:[h("browse.archived")," (",w.length,")"]}),w.slice(0,10).map(_=>t("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:t(Ne,{entity:_,highlight:o,actions:e?t("button",{class:"btn btn-sm",onClick:()=>F(_.name),children:h("browse.restore")}):void 0})},_.id)),w.length>10&&t("div",{style:{fontSize:12,color:"var(--text-3)",padding:"12px 0",textAlign:"center"},children:["+",w.length-10," ",h("browse.moreArchived")]})]})]})})}function gt(e){return e>=80?"var(--success)":e>=60?"var(--accent)":e>=40?"var(--warning)":"var(--danger)"}function Ls(e){return e>=80?h("health.excellent"):e>=60?h("health.good"):e>=40?h("health.fair"):h("health.poor")}const Ms=["activity","quality","freshness","lessons"];function Cs({score:e,factors:s}){const n=gt(e);return t("div",{class:"card",children:[t("div",{class:"card-title",children:h("health.title")}),t("div",{style:{display:"flex",gap:"24px",alignItems:"center"},children:[t("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",flexShrink:0},children:[t("div",{style:{width:"80px",height:"80px",borderRadius:"50%",border:`3px solid ${n}`,display:"flex",alignItems:"center",justifyContent:"center"},children:t("span",{style:{fontFamily:"var(--mono)",fontSize:"24px",fontWeight:700,color:n,letterSpacing:"-0.02em"},children:e})}),t("span",{style:{marginTop:"6px",fontSize:"11px",fontWeight:500,color:"var(--text-2)"},children:Ls(e)})]}),t("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"10px"},children:Ms.map(o=>{const r=s[o],a=Math.round(r.score/r.weight*100),i=gt(a);return t("div",{children:[t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"4px"},children:[t("span",{style:{fontSize:"12px",color:"var(--text-2)"},children:h(`health.${o}`)}),t("span",{style:{fontFamily:"var(--mono)",fontSize:"11px",color:"var(--text-3)"},children:[a,"%"]})]}),t("div",{style:{height:"4px",borderRadius:"2px",background:"var(--bg-0)",overflow:"hidden"},children:t("div",{style:{height:"100%",width:`${a}%`,borderRadius:"2px",background:i,transition:"width 600ms ease-out"}})})]},o)})})]})]})}const ve=8,As=8,Ts=20,be=8,It=120,Ht="rgba(0, 214, 180, 0.3)",Dt="#00D6B4",Es=1.5,Rs="#4A5260",Fs="9px Satoshi, system-ui, sans-serif";function ft(e,s){const n=window.devicePixelRatio||1,r=e.getBoundingClientRect().width,a=It;e.width=r*n,e.height=a*n,e.style.width=`${r}px`,e.style.height=`${a}px`;const i=e.getContext("2d");if(!i)return;i.scale(n,n);const c=r-be-As,u=a-ve-Ts;if(s.length===0||c<=0||u<=0)return;const d=Math.max(1,...s.map(w=>w.created)),g=Math.max(1,...s.map(w=>w.recalled)),l=Math.max(d,g),p=s.length,m=1,x=Math.max(1,(c-m*(p-1))/p);i.fillStyle=Ht;for(let w=0;w<p;w++){const y=s[w].created/l*u,f=be+w*(x+m),F=ve+u-y;i.fillRect(f,F,x,y)}i.beginPath(),i.strokeStyle=Dt,i.lineWidth=Es,i.lineJoin="round",i.lineCap="round";for(let w=0;w<p;w++){const A=s[w],y=be+w*(x+m)+x/2,f=ve+u-A.recalled/l*u;w===0?i.moveTo(y,f):i.lineTo(y,f)}i.stroke(),i.fillStyle=Rs,i.font=Fs,i.textAlign="center",i.textBaseline="top";for(let w=0;w<p;w+=7){const A=s[w],y=A.date.split("-"),f=y.length>=3?`${y[1]}-${y[2]}`:A.date,F=be+w*(x+m)+x/2,_=ve+u+4;i.fillText(f,F,_)}}function Ps({data:e}){const s=j(null);G(()=>{const r=s.current;if(!r)return;ft(r,e);const a=()=>ft(r,e);return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[e]);const n=e.reduce((r,a)=>r+a.created,0),o=e.reduce((r,a)=>r+a.recalled,0);return t("div",{class:"card",children:[t("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:14},children:[t("div",{class:"card-title",style:{marginBottom:0},children:h("timeline.title")}),t("div",{style:{display:"flex",alignItems:"center",gap:12,fontSize:11,color:"var(--text-2)"},children:[t("span",{style:{display:"flex",alignItems:"center",gap:4},children:[t("span",{style:{display:"inline-block",width:10,height:10,borderRadius:2,background:Ht}}),h("timeline.created"),t("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:n})]}),t("span",{style:{display:"flex",alignItems:"center",gap:4},children:[t("span",{style:{display:"inline-block",width:10,height:2,borderRadius:1,background:Dt}}),h("timeline.recalled"),t("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:o})]})]})]}),t("canvas",{ref:s,style:{width:"100%",height:`${It}px`,display:"block"}})]})}function Bs({totalRecalls:e,lessonsWithWarnings:s,lessonCount:n,typeDistribution:o}){const r=o.reduce((i,c)=>i+c.count,0),a=o.slice(0,8);return t("div",{children:[t("div",{class:"stats-row",style:{gridTemplateColumns:"repeat(3, 1fr)"},children:[t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.toLocaleString()}),t("div",{class:"stat-lbl",children:h("value.totalRecalls")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:n}),t("div",{class:"stat-lbl",children:h("value.lessonsLearned")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:s}),t("div",{class:"stat-lbl",children:h("value.lessonsSaved")})]})]}),a.length>0&&t("div",{class:"card",children:[t("div",{class:"card-title",children:h("value.coverage")}),a.map(i=>{const c=r>0?Math.round(i.count/r*100):0;return t("div",{style:{marginBottom:10},children:[t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:4},children:[t("span",{style:{fontSize:13,color:"var(--text-1)"},children:i.type}),t("span",{style:{fontFamily:"var(--mono)",fontSize:12,color:"var(--text-3)"},children:[i.count," (",c,"%)"]})]}),t("div",{style:{height:4,borderRadius:2,background:"var(--bg-0)"},children:t("div",{style:{height:"100%",width:`${c}%`,borderRadius:2,background:"rgba(0, 214, 180, 0.6)",transition:"width 600ms ease-out"}})})]},i.type)})]})]})}function zs({overallHitRate:e,totalHits:s,totalMisses:n,trackedEntities:o,topEffective:r,mostIgnored:a}){const i=Math.round(e*100),c=s+n;return t("div",{children:[t("div",{class:"stats-row",style:{gridTemplateColumns:"repeat(4, 1fr)"},children:[t("div",{class:"stat",children:[t("div",{class:"stat-val",style:{color:i>=50?"var(--accent)":"var(--warning, #f59e0b)"},children:[i,"%"]}),t("div",{class:"stat-lbl",children:h("recall.effectiveness")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:s}),t("div",{class:"stat-lbl",children:h("recall.hits")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:n}),t("div",{class:"stat-lbl",children:h("recall.misses")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:o}),t("div",{class:"stat-lbl",children:h("recall.tracked")})]})]}),c>0&&t("div",{class:"card",children:[t("div",{class:"card-title",children:h("recall.hitRate")}),t("div",{style:{marginBottom:16},children:[t("div",{style:{height:6,borderRadius:3,background:"var(--bg-0)",overflow:"hidden"},children:t("div",{style:{height:"100%",width:`${i}%`,borderRadius:3,background:i>=50?"rgba(0, 214, 180, 0.7)":"rgba(245, 158, 11, 0.7)",transition:"width 600ms ease-out"}})}),t("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:4},children:[s," ",h("recall.used")," / ",c," ",h("recall.injected")]})]}),r.length>0&&t("div",{style:{marginBottom:12},children:[t("div",{style:{fontSize:12,color:"var(--text-2)",marginBottom:6,fontWeight:500},children:h("recall.mostEffective")}),r.slice(0,3).map(u=>t(mt,{entry:u,color:"rgba(0, 214, 180, 0.6)"},u.name))]}),a.length>0&&a[0].hitRate<.5&&t("div",{children:[t("div",{style:{fontSize:12,color:"var(--text-2)",marginBottom:6,fontWeight:500},children:h("recall.leastEffective")}),a.slice(0,3).map(u=>t(mt,{entry:u,color:"rgba(245, 158, 11, 0.5)"},u.name))]})]}),c===0&&t("div",{class:"card",style:{textAlign:"center",padding:"20px 16px"},children:t("div",{style:{fontSize:13,color:"var(--text-3)"},children:h("recall.noData")})})]})}function mt({entry:e,color:s}){const n=Math.round(e.hitRate*100);return t("div",{style:{marginBottom:8},children:[t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:3},children:[t("span",{style:{fontSize:12,color:"var(--text-1)",maxWidth:"70%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),t("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--text-3)"},children:[n,"% (",e.hits,"h/",e.misses,"m)"]})]}),t("div",{style:{height:3,borderRadius:2,background:"var(--bg-0)"},children:t("div",{style:{height:"100%",width:`${n}%`,borderRadius:2,background:s,transition:"width 600ms ease-out"}})})]})}function Is({staleEntities:e,duplicateCandidates:s,onRefresh:n}){const[o,r]=C(()=>new Set);async function a(c){r(u=>new Set(u).add(c.id));try{await O("POST","/v1/forget",{name:c.name}),n()}catch{r(u=>{const d=new Set(u);return d.delete(c.id),d})}}const i=e.length===0&&s.length===0;return t("div",{class:"card",children:[i&&t("div",{class:"empty",style:{padding:"24px 12px"},children:[t("span",{class:"empty-icon",children:"✓"}),h("cleanup.allClean")]}),e.length>0&&t("div",{children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:10},children:h("cleanup.staleLabel")}),e.map(c=>t("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 0",borderBottom:"1px solid var(--border-subtle)"},children:[t("div",{style:{flex:1,minWidth:0},children:[t("div",{style:{fontSize:13,color:"var(--text-1)"},children:c.name}),t("div",{style:{fontSize:11,fontFamily:"var(--mono)",color:"var(--text-3)",marginTop:2},children:[c.type," · confidence ",Math.round(c.confidence*100),"% · ",c.days_unused,"d unused"]})]}),t("button",{class:"btn btn-sm btn-danger",disabled:o.has(c.id),onClick:()=>a(c),style:{flexShrink:0,marginLeft:12},children:o.has(c.id)?"…":h("browse.archive")})]},c.id))]}),s.length>0&&t("div",{style:{marginTop:e.length>0?16:0},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:10},children:h("cleanup.duplicateLabel")}),s.map((c,u)=>t("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 0",borderBottom:"1px solid var(--border-subtle)",fontSize:13,color:"var(--text-1)"},children:[t("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name1}),t("span",{style:{color:"var(--text-3)",flexShrink:0},children:"↔"}),t("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:c.name2}),t("span",{class:"badge badge-type",style:{flexShrink:0},children:c.type})]},`${c.name1}-${c.name2}-${u}`)),t("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:10,fontStyle:"italic"},children:h("cleanup.consolidateHint")})]})]})}function Hs({data:e}){const{workSchedule:s,toolPreferences:n,focusAreas:o,workflow:r,strengths:a,learningAreas:i}=e,c=new Map;for(const l of s.hourDistribution)c.set(l.hour,l.count);const u=Math.max(1,...s.hourDistribution.map(l=>l.count)),d=[...s.hourDistribution].sort((l,p)=>p.count-l.count).slice(0,3).map(l=>`${l.hour.toString().padStart(2,"0")}:00`),g=[...s.dayDistribution].sort((l,p)=>p.count-l.count).slice(0,2).map(l=>l.day);return t("div",{class:"card",children:[t("div",{class:"card-title",children:h("patterns.title")}),t("div",{style:{marginBottom:16},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:h("patterns.workSchedule")}),t("div",{style:{display:"flex",gap:2,flexWrap:"wrap"},children:Array.from({length:24},(l,p)=>{const m=c.get(p)||0,x=m/u;return t("div",{title:`${p.toString().padStart(2,"0")}:00 — ${m}`,style:{width:18,height:18,borderRadius:"var(--radius-xs)",background:x>0?`rgba(0, 214, 180, ${.1+x*.7})`:"var(--bg-0)",border:"1px solid var(--border-subtle)",fontSize:8,display:"flex",alignItems:"center",justifyContent:"center",color:x>.5?"var(--bg-0)":"var(--text-3)",fontFamily:"var(--mono)"},children:p},p)})}),t("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:6,fontFamily:"var(--mono)"},children:[h("patterns.peakHours"),": ",d.join(", "),g.length>0&&t("span",{children:[" · ",h("patterns.busiestDays"),": ",g.join(", ")]})]})]}),n.length>0&&t("div",{style:{marginBottom:16},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:h("patterns.tools")}),t("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:n.slice(0,10).map(l=>t("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[l.tool," ",t("span",{style:{opacity:.5},children:["(",l.sessions,")"]})]},l.tool))})]}),t("div",{style:{marginBottom:16},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:h("patterns.workflow")}),t("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[t("div",{class:"stat",style:{padding:12},children:[t("div",{class:"stat-val",style:{fontSize:18},children:r.avgSessionMinutes>0?`${Math.round(r.avgSessionMinutes)}m`:"—"}),t("div",{class:"stat-lbl",children:h("patterns.avgSession")})]}),t("div",{class:"stat",style:{padding:12},children:[t("div",{class:"stat-val",style:{fontSize:18},children:r.totalSessions>0?r.commitsPerSession.toFixed(1):"—"}),t("div",{class:"stat-lbl",children:h("patterns.commitsPerSession")})]})]})]}),o.length>0&&t("div",{style:{marginBottom:16},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:h("patterns.focus")}),t("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:o.slice(0,12).map(l=>t("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[l.type," ",t("span",{style:{opacity:.5},children:["(",l.count,")"]})]},l.type))})]}),(a.length>0||i.length>0)&&t("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[t("div",{children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:h("patterns.strengths")}),a.slice(0,5).map(l=>t("div",{style:{marginBottom:6},children:[t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:3},children:[t("span",{style:{fontSize:12,color:"var(--text-1)"},children:l.type}),t("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--accent)"},children:[Math.round(l.avgConfidence*100),"%"]})]}),t("div",{style:{height:3,borderRadius:2,background:"var(--bg-0)"},children:t("div",{style:{height:"100%",width:`${Math.round(l.avgConfidence*100)}%`,borderRadius:2,background:"rgba(0, 214, 180, 0.5)",transition:"width 600ms ease-out"}})})]},l.type)),a.length===0&&t("div",{style:{fontSize:11,color:"var(--text-3)",fontStyle:"italic"},children:"—"})]}),t("div",{children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:h("patterns.learning")}),i.slice(0,5).map(l=>t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:6,fontSize:12},children:[t("span",{style:{color:"var(--text-1)"},children:l.tag}),t("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--text-3)"},children:l.count})]},l.tag)),i.length===0&&t("div",{style:{fontSize:11,color:"var(--text-3)",fontStyle:"italic"},children:"—"})]})]})]})}function Ds(){const[e,s]=C(null),[n,o]=C(null),[r,a]=C(null),[i,c]=C(!0),u=le(()=>{c(!0),Promise.all([O("GET","/v1/stats").catch(()=>null),O("GET","/v1/analytics").catch(()=>null),O("GET","/v1/patterns").catch(()=>null)]).then(([d,g,l])=>{s(d),o(g),a(l)}).finally(()=>c(!1))},[]);return G(()=>{u()},[u]),i?t("div",{class:"empty",children:t("div",{class:"loading"})}):!e&&!n?t("div",{class:"error-box",children:[h("common.error"),": Failed to load analytics"]}):t("div",{children:[e&&t("div",{class:"stats-row",children:[t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.totalEntities.toLocaleString()}),t("div",{class:"stat-lbl",children:h("analytics.totalMemories")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.totalObservations.toLocaleString()}),t("div",{class:"stat-lbl",children:h("analytics.knowledgeFacts")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.totalRelations.toLocaleString()}),t("div",{class:"stat-lbl",children:h("analytics.connections")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.totalTags.toLocaleString()}),t("div",{class:"stat-lbl",children:h("analytics.topics")})]})]}),n&&t(Cs,{score:n.healthScore,factors:n.healthFactors}),n&&t("div",{style:{marginTop:8},children:t(Ps,{data:n.timeline})}),n&&t("div",{style:{marginTop:8},children:t(Bs,{totalRecalls:n.valueMetrics.totalRecalls,lessonsWithWarnings:n.valueMetrics.lessonsWithWarnings,lessonCount:n.valueMetrics.lessonCount,typeDistribution:n.valueMetrics.typeDistribution})}),n?.recallEffectiveness&&t("div",{style:{marginTop:8},children:t(zs,{...n.recallEffectiveness})}),n&&t("div",{style:{marginTop:8},children:t(Is,{staleEntities:n.cleanup.staleEntities,duplicateCandidates:n.cleanup.duplicateCandidates,onRefresh:u})}),r&&t("div",{style:{marginTop:8},children:t(Hs,{data:r})}),e&&(()=>{const d=["auto_saved","auto-tracked","session_end","session:","source:","scope:","date:","urgency:"],g=e.tagDistribution.filter(l=>!d.some(p=>l.tag.startsWith(p))&&!/^\d{4}-\d{2}-\d{2}/.test(l.tag));return g.length>0?t("div",{class:"card",style:{marginTop:8},children:[t("div",{class:"card-title",children:h("analytics.topics")}),t("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:g.slice(0,30).map(l=>t("span",{class:"tag",style:{fontSize:Math.max(11,Math.min(15,10+Math.log2(l.count+1)))+"px"},children:[l.tag," ",t("span",{style:{opacity:.5},children:["(",l.count,")"]})]},l.tag))})]}):null})()]})}function vt(e){return e&&e.charAt(0).toUpperCase()+e.slice(1)}function Ws({locale:e,onLocaleChange:s}){const[n,o]=C(null),[r,a]=C(""),[i,c]=C(""),[u,d]=C(""),[g,l]=C(!1),[p,m]=C(""),[x,w]=C(!0);G(()=>{O("GET","/v1/config").then(f=>{o(f),a(f.config.llm?.provider||""),d(f.config.llm?.model||"")}).finally(()=>w(!1))},[]);async function A(){l(!0),m("");try{const f={provider:r};u&&(f.model=u),i&&(f.apiKey=i),await O("POST","/v1/config",{llm:f}),m(h("settings.saved")),c("")}catch(f){m(h("common.error")+": "+f.message)}finally{l(!1)}}if(x)return t("div",{class:"empty",children:t("div",{class:"loading"})});const y=n?.capabilities;return t("div",{children:[t("div",{class:"card",children:[t("div",{class:"card-title",children:h("settings.capabilities")}),t("div",{class:"stats-row",style:{marginBottom:0},children:[t("div",{class:"stat",children:[t("div",{class:"stat-val",style:{fontSize:18},children:["Level ",y?.searchLevel||0]}),t("div",{class:"stat-lbl",children:y?.searchLevel?h("settings.smartMode"):h("settings.core")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",style:{fontSize:14},children:vt(y?.embeddings||"—")}),t("div",{class:"stat-lbl",children:h("settings.embeddings")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",style:{fontSize:14},children:vt(y?.llm?.provider||"None")}),t("div",{class:"stat-lbl",children:h("settings.llmProvider")})]})]})]}),t("div",{class:"card",children:[t("div",{class:"card-title",children:h("settings.llmProvider")}),t("form",{onSubmit:f=>{f.preventDefault(),A()},children:[t("div",{style:{display:"flex",gap:16,marginBottom:14},children:[["anthropic","Anthropic (Claude)"],["openai","OpenAI"],["ollama","Ollama (Local)"]].map(([f,F])=>t("label",{style:{display:"flex",alignItems:"center",gap:5,cursor:"pointer",fontSize:13},children:[t("input",{type:"radio",name:"provider",value:f,checked:r===f,onChange:()=>a(f)}),F]},f))}),r&&r!=="ollama"&&t("div",{style:{marginBottom:12},children:[t("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:h("settings.apiKey")}),t("input",{type:"password",autoComplete:"off",placeholder:r==="anthropic"?"sk-ant-api03-…":"sk-…",value:i,onInput:f=>c(f.target.value)})]}),t("div",{style:{marginBottom:14},children:[t("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:h("settings.model")}),t("input",{type:"text",placeholder:r==="anthropic"?"claude-haiku-4-5":r==="openai"?"gpt-4o-mini":"llama3.2",value:u,onInput:f=>d(f.target.value)})]}),t("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[t("button",{class:"btn btn-primary",type:"submit",disabled:!r||g,children:h(g?"settings.saving":"settings.save")}),p&&t("span",{style:{fontSize:12,color:p.startsWith(h("common.error"))?"var(--danger)":"var(--success)"},children:p})]})]})]}),t("div",{class:"card",children:[t("div",{class:"card-title",children:h("settings.language")}),t("select",{value:e,onChange:f=>{const F=f.target.value;fs(F),s(F)},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:ms().map(f=>t("option",{value:f.code,children:f.name},f.code))})]})]})}const $s={decision:"#00D6B4",pattern:"#60A5FA",lesson_learned:"#FFB84D",commit:"#A78BFA","session-insight":"#7A828E",session_keypoint:"#4ADE80",session_identity:"#F472B6",workflow_checkpoint:"#38BDF8",feature:"#FB923C",bug_fix:"#F87171",concept:"#00D6B4",tool:"#818CF8",person:"#E879F9",note:"#94A3B8"},Ns="#B8BEC6";function bt(e){return $s[e]||Ns}function qs(e){if(!e)return .15;const s=Date.now()-new Date(e).getTime();return Math.max(.15,1-Math.min(1,s/(30*864e5)))}function js(e){const s=Date.now()-new Date(e).getTime(),n=Math.floor(s/864e5);return n<1?"today":n<7?`${n}d ago`:n<30?`${Math.floor(n/7)}w ago`:`${n}d ago`}const yt=500,_t=4;function Gs(){const[e,s]=C(null),[n,o]=C(!0),[r,a]=C(""),[i,c]=C({}),[u,d]=C(""),[g,l]=C(null),p=j(null),m=j([]),x=j([]),w=j(0),A=j({node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1}),y=j(null),f=j({x:0,y:0,node:null}),F=j(800),_=j(i),H=j(u),Z=j(g);G(()=>{_.current=i},[i]),G(()=>{H.current=u},[u]),G(()=>{Z.current=g},[g]),G(()=>{_s().then(k=>{s(k);const S={};k.entities.forEach(M=>{S[M.type]=!0}),c(S)}).catch(k=>a(k.message)).finally(()=>o(!1))},[]),G(()=>{if(!e||n)return;const k=p.current;if(!k)return;const S=k.parentElement?.clientWidth||800,M=yt,W=window.devicePixelRatio||1;k.width=S*W,k.height=M*W,k.style.width=S+"px",k.style.height=M+"px",F.current=S;const $=new Set;e.relations.forEach(L=>{$.add(L.from),$.add(L.to)});const q=new Map;e.entities.forEach(L=>{const U=L.last_accessed_at||L.created_at;q.set(L.name,{id:L.name,type:L.type,x:Math.random()*S*.8+S*.1,y:Math.random()*M*.8+M*.1,vx:0,vy:0,radius:6,recency:qs(U),isOrphan:!$.has(L.name),lastDate:U})}),m.current=Array.from(q.values()),x.current=e.relations.filter(L=>q.has(L.from)&&q.has(L.to));const N=L=>{if(_.current[L.type]===!1)return!1;const v=Z.current;return v?L.id===v?!0:x.current.some(ae=>ae.from===v&&ae.to===L.id||ae.to===v&&ae.from===L.id):!0},pe=L=>{const U=q.get(L.from),v=q.get(L.to);return!U||!v?!1:N(U)&&N(v)},ge=L=>{const U=H.current.toLowerCase();return U?L.id.toLowerCase().includes(U):!1};let ne=1;const oe=.005,jt=.001,Gt=()=>{ne=.3};window.__graphReheat=Gt;const Ve=()=>{const L=m.current,U=x.current,v=k.getContext("2d");if(!v)return;const Fe=window.devicePixelRatio||1;ne=Math.max(jt,ne-oe);const ae=.85,Ot=2e3*ne,Kt=80,Ut=.02*ne,Ye=.005*ne,Vt=L.length>200;for(let b=0;b<L.length;b++)for(let T=b+1;T<L.length;T++){const R=L[T].x-L[b].x,D=L[T].y-L[b].y,z=R*R+D*D;if(Vt&&z>9e4)continue;const I=Math.sqrt(z)||1,Q=Ot/(I*I),X=R/I*Q,ie=D/I*Q;L[b].vx-=X,L[b].vy-=ie,L[T].vx+=X,L[T].vy+=ie}const fe=new Map(L.map(b=>[b.id,b]));for(const b of U){const T=fe.get(b.from),R=fe.get(b.to);if(!T||!R)continue;const D=R.x-T.x,z=R.y-T.y,I=Math.sqrt(D*D+z*z)||1,Q=(I-Kt)*Ut,X=D/I*Q,ie=z/I*Q;T.vx+=X,T.vy+=ie,R.vx-=X,R.vy-=ie}const Qe=S/2,Xe=M/2;for(const b of L)b.vx+=(Qe-b.x)*Ye,b.vy+=(Xe-b.y)*Ye;for(const b of L)A.current.node!==b&&(b.vx*=ae,b.vy*=ae,Math.abs(b.vx)<.01&&Math.abs(b.vy)<.01&&(b.vx=0,b.vy=0),b.x+=b.vx,b.y+=b.vy,b.x=Math.max(20,Math.min(S-20,b.x)),b.y=Math.max(20,Math.min(M-20,b.y)));const Je=H.current.toLowerCase();if(Je){const b=L.filter(T=>T.id.toLowerCase().includes(Je));if(b.length===1){const T=b[0],R=Qe-T.x,D=Xe-T.y,z=.05;for(const I of L)I.x+=R*z,I.y+=D*z}}v.setTransform(Fe,0,0,Fe,0,0),v.clearRect(0,0,S,M);const Ze=U.filter(pe),Yt=Ze.length<30;for(const b of Ze){const T=fe.get(b.from),R=fe.get(b.to);if(!T||!R)continue;const D=Math.min(T.recency,R.recency)*.6;if(v.globalAlpha=D,v.strokeStyle="rgba(0, 214, 180, 0.4)",v.lineWidth=1,v.setLineDash([]),v.beginPath(),v.moveTo(T.x,T.y),v.lineTo(R.x,R.y),v.stroke(),Yt){const z=(T.x+R.x)/2,I=(T.y+R.y)/2;v.font="9px Satoshi, system-ui, sans-serif",v.fillStyle="#7A828E",v.fillText(b.type,z+2,I-2)}}v.globalAlpha=1;const Qt=L.filter(N),Xt=y.current;for(const b of Qt){const T=Xt===b,R=ge(b),D=Z.current===b.id,z=D?10:T?9:b.radius,I=T||R?1:b.recency;if(v.globalAlpha=I,v.beginPath(),v.arc(b.x,b.y,z,0,Math.PI*2),v.fillStyle=bt(b.type),v.fill(),b.isOrphan&&(v.setLineDash([3,3]),v.strokeStyle="#4A5260",v.lineWidth=1,v.stroke(),v.setLineDash([])),R&&(v.globalAlpha=1,v.strokeStyle="#00F0CA",v.lineWidth=2,v.beginPath(),v.arc(b.x,b.y,z+3,0,Math.PI*2),v.stroke()),T&&!R&&(v.globalAlpha=1,v.strokeStyle="#fff",v.lineWidth=2,v.beginPath(),v.arc(b.x,b.y,z,0,Math.PI*2),v.stroke()),T||R||D){v.globalAlpha=1,v.fillStyle="#B8BEC6",v.font="10px Satoshi, system-ui, sans-serif";const X=R||D?b.id:b.id.length>20?b.id.slice(0,18)+"...":b.id;v.fillText(X,b.x+z+4,b.y+3)}}v.globalAlpha=1;const re=f.current;if(re.node&&N(re.node)){const b=re.x+12,T=re.y-10,R=re.node.id,D=re.node.type,z=js(re.node.lastDate),I=R,Q=`${D} | ${z}`;v.font="11px Satoshi, system-ui, sans-serif";const X=v.measureText(I).width,ie=v.measureText(Q).width,Jt=Math.max(X,ie)+12,Zt=34;v.fillStyle="rgba(13, 16, 20, 0.92)",v.strokeStyle="rgba(0, 214, 180, 0.3)",v.lineWidth=1,v.beginPath(),v.roundRect(b-4,T-18,Jt,Zt,4),v.fill(),v.stroke(),v.fillStyle="#F0F2F4",v.fillText(I,b,T-4),v.fillStyle="#7A828E",v.font="10px Geist Mono, JetBrains Mono, monospace",v.fillText(Q,b,T+10)}w.current=requestAnimationFrame(Ve)};return w.current=requestAnimationFrame(Ve),()=>cancelAnimationFrame(w.current)},[e,n]);const V=le((k,S)=>{const M=m.current,W=_.current,$=Z.current;for(let q=M.length-1;q>=0;q--){const N=M[q];if(W[N.type]===!1||$&&N.id!==$&&!x.current.some(oe=>oe.from===$&&oe.to===N.id||oe.to===$&&oe.from===N.id))continue;const pe=N.x-k,ge=N.y-S;if(pe*pe+ge*ge<144)return N}return null},[]),Y=le(k=>{const S=p.current;if(!S)return{x:0,y:0};const M=S.getBoundingClientRect();return{x:k.clientX-M.left,y:k.clientY-M.top}},[]),K=le(k=>{const S=Y(k),M=V(S.x,S.y);M&&window.__graphReheat?.(),A.current={node:M||null,offsetX:M?S.x-M.x:0,offsetY:M?S.y-M.y:0,startX:S.x,startY:S.y,dragged:!1}},[V,Y]),ee=le(k=>{const S=Y(k),M=A.current;if(M.node){const q=S.x-M.startX,N=S.y-M.startY;q*q+N*N>_t*_t&&(M.dragged=!0),M.node.x=S.x-M.offsetX,M.node.y=S.y-M.offsetY,M.node.vx=0,M.node.vy=0}const W=V(S.x,S.y);y.current=W,f.current=W?{x:S.x,y:S.y,node:W}:{x:0,y:0,node:null};const $=p.current;$&&(W?$.style.cursor=Z.current?"pointer":"grab":$.style.cursor="default")},[V,Y]),Wt=le(k=>{const S=A.current,M=Y(k);S.node&&!S.dragged?l(W=>W===S.node.id?null:S.node.id):!S.node&&!S.dragged&&(V(M.x,M.y)||l(null)),A.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1}},[V,Y]),$t=le(()=>{A.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1},y.current=null,f.current={x:0,y:0,node:null}},[]);if(n)return t("div",{class:"empty",children:t("div",{class:"loading"})});if(r)return t("div",{class:"error-box",children:[h("common.error"),": ",r]});if(!e)return t("div",{class:"error-box",children:[h("common.error"),": No data"]});const Ee=new Map;e.entities.forEach(k=>Ee.set(k.type,(Ee.get(k.type)||0)+1));const Re=new Set;e.relations.forEach(k=>{Re.add(k.from),Re.add(k.to)});const Nt=e.entities.filter(k=>!Re.has(k.name)).length,qt=u?e.entities.filter(k=>k.name.toLowerCase().includes(u.toLowerCase())).length:0,Ue=g?e.entities.find(k=>k.name===g):null;return t("div",{children:[t("div",{class:"stats-row",children:[t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.entities.length.toLocaleString()}),t("div",{class:"stat-lbl",children:h("graph.entities")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.relations.length.toLocaleString()}),t("div",{class:"stat-lbl",children:h("graph.relations")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:Nt.toLocaleString()}),t("div",{class:"stat-lbl",children:h("graph.orphans")})]})]}),t("div",{class:"card",style:{padding:12},children:[t("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:8,flexWrap:"wrap"},children:[t("span",{class:"card-title",style:{margin:0},children:h("tab.graph")}),Array.from(Ee.entries()).map(([k,S])=>{const M=i[k]!==!1,W=bt(k);return t("label",{style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:11,color:"#B8BEC6",opacity:M?1:.4,cursor:"pointer",userSelect:"none"},children:[t("input",{type:"checkbox",checked:M,onChange:()=>c($=>({...$,[k]:!$[k]})),style:{accentColor:W,width:13,height:13,cursor:"pointer"}}),t("span",{style:{width:8,height:8,borderRadius:"50%",background:W,display:"inline-block",flexShrink:0}}),k," (",S,")"]},k)})]}),t("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[t("input",{type:"text",placeholder:h("graph.search"),value:u,onInput:k=>d(k.target.value),style:{width:260,padding:"4px 8px",background:"#080A0C",border:"1px solid rgba(0, 214, 180, 0.08)",borderRadius:4,color:"#F0F2F4",fontSize:12,fontFamily:"Satoshi, system-ui, sans-serif",outline:"none"}}),u&&t("span",{style:{fontSize:11,fontFamily:"Geist Mono, JetBrains Mono, monospace",color:"#7A828E"},children:[qt," ",h("graph.matches")]})]}),Ue&&t("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8,padding:"4px 10px",background:"rgba(0, 214, 180, 0.08)",borderRadius:4,fontSize:12},children:[t("span",{style:{color:"#00D6B4",fontWeight:600},children:[h("graph.focusMode"),":"]}),t("span",{style:{color:"#F0F2F4"},children:Ue.name}),t("button",{onClick:()=>l(null),style:{marginLeft:"auto",padding:"2px 8px",background:"rgba(0, 214, 180, 0.12)",border:"1px solid rgba(0, 214, 180, 0.2)",borderRadius:3,color:"#00D6B4",fontSize:11,cursor:"pointer"},children:h("graph.showAll")})]}),!g&&t("div",{style:{fontSize:11,color:"#4A5260",marginBottom:6},children:h("graph.clickHint")}),t("canvas",{ref:p,style:{width:"100%",height:yt,borderRadius:"var(--radius-sm)",background:"#080A0C"},onMouseDown:K,onMouseMove:ee,onMouseUp:Wt,onMouseLeave:$t})]})]})}function Os(e){const s=e.observations||[],n=c=>{const u=s.find(d=>d.startsWith(c));return u?u.slice(c.length).trim():""},o=e.tags||[];let r=null;o.includes("severity:critical")?r="critical":o.includes("severity:major")?r="major":o.includes("severity:minor")&&(r="minor");const a=o.find(c=>c.startsWith("project:")),i=a?a.slice(8):"";return{entity:e,error:n("Error:"),rootCause:n("Root cause:"),fix:n("Fix:"),prevention:n("Prevention:"),severity:r,project:i,confidence:e.confidence??1}}const Ie={critical:"#FF6B6B",major:"#FFB84D",minor:"#60A5FA"};function Ks(){const[e,s]=C([]),[n,o]=C(!0),[r,a]=C("");return G(()=>{ws().then(i=>s(i.map(Os))).catch(i=>a(i.message)).finally(()=>o(!1))},[]),n?t("div",{class:"empty",children:t("div",{class:"loading"})}):r?t("div",{class:"error-box",children:[h("common.error"),": ",r]}):e.length===0?t("div",{class:"empty",children:[t("span",{class:"empty-icon",children:"📝"}),h("lessons.empty")]}):t("div",{children:[t("div",{class:"stats-row",children:[t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.length}),t("div",{class:"stat-lbl",children:h("lessons.total")})]}),t("div",{class:"stat",children:[t("div",{class:"stat-val",children:e.filter(i=>i.severity==="critical").length}),t("div",{class:"stat-lbl",children:h("lessons.critical")})]})]}),e.map(i=>{const c=i.severity?Ie[i.severity]:"var(--border)";return t("div",{class:"card",style:{borderLeft:`3px solid ${c}`},children:[t("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:10},children:[t("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:i.entity.name}),t("div",{style:{display:"flex",gap:6,flexShrink:0},children:[i.project&&t("span",{class:"tag",children:i.project}),i.severity&&t("span",{class:"badge",style:{background:`${Ie[i.severity]}18`,color:Ie[i.severity]},children:i.severity}),t("span",{class:"badge",style:{background:"var(--accent-soft)",color:"var(--accent-hover)"},children:[Math.round(i.confidence*100),"%"]})]})]}),i.error&&t("div",{style:{marginBottom:8},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--danger)",marginBottom:2},children:h("lessons.error")}),t("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:i.error})]}),i.rootCause&&t("div",{style:{marginBottom:8},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--warning)",marginBottom:2},children:h("lessons.rootCause")}),t("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:i.rootCause})]}),i.fix&&t("div",{style:{marginBottom:8},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--success)",marginBottom:2},children:h("lessons.fix")}),t("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:i.fix})]}),i.prevention&&t("div",{style:{marginBottom:8},children:[t("div",{style:{fontSize:11,fontWeight:600,color:"var(--info)",marginBottom:2},children:h("lessons.prevention")}),t("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:i.prevention})]})]},i.entity.id)})]})}const Us=["bug","feature","question"],wt={bug:"feedback.bug",feature:"feedback.feature",question:"feedback.question"};function Vs({health:e}){const[s,n]=C(!1),[o,r]=C("bug"),[a,i]=C(""),[c,u]=C(!0),d=j(null);G(()=>{if(!s)return;const l=p=>{d.current&&!d.current.contains(p.target)&&n(!1)};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[s]);const g=()=>{if(!a.trim())return;const l=`feedback,from-dashboard,${o}`;let p=a.trim();c&&e&&(p+=`
|
|
12
|
+
<script type="module" crossorigin>(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))c(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const r of i.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&c(r)}).observe(document,{childList:!0,subtree:!0});function a(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function c(n){if(n.ep)return;n.ep=!0;const i=a(n);fetch(n.href,i)}})();var ze,z,Lt,te,nt,At,Tt,Ge,Se,he,Ft,Ke,We,je,Le={},Ae=[],ts=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Ne=Array.isArray;function ee(t,s){for(var a in s)t[a]=s[a];return t}function Oe(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function ss(t,s,a){var c,n,i,r={};for(i in s)i=="key"?c=s[i]:i=="ref"?n=s[i]:r[i]=s[i];if(arguments.length>2&&(r.children=arguments.length>3?ze.call(arguments,2):a),typeof t=="function"&&t.defaultProps!=null)for(i in t.defaultProps)r[i]===void 0&&(r[i]=t.defaultProps[i]);return xe(t,r,c,n,null)}function xe(t,s,a,c,n){var i={type:t,props:s,key:a,ref:c,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:n??++Lt,__i:-1,__u:0};return n==null&&z.vnode!=null&&z.vnode(i),i}function se(t){return t.children}function Ce(t,s){this.props=t,this.context=s}function ce(t,s){if(s==null)return t.__?ce(t.__,t.__i+1):null;for(var a;s<t.__k.length;s++)if((a=t.__k[s])!=null&&a.__e!=null)return a.__e;return typeof t.type=="function"?ce(t):null}function as(t){if(t.__P&&t.__d){var s=t.__v,a=s.__e,c=[],n=[],i=ee({},s);i.__v=s.__v+1,z.vnode&&z.vnode(i),Ye(t.__P,i,s,t.__n,t.__P.namespaceURI,32&s.__u?[a]:null,c,a??ce(s),!!(32&s.__u),n),i.__v=s.__v,i.__.__k[i.__i]=i,Rt(c,i,n),s.__e=s.__=null,i.__e!=a&&Et(i)}}function Et(t){if((t=t.__)!=null&&t.__c!=null)return t.__e=t.__c.base=null,t.__k.some(function(s){if(s!=null&&s.__e!=null)return t.__e=t.__c.base=s.__e}),Et(t)}function it(t){(!t.__d&&(t.__d=!0)&&te.push(t)&&!Te.__r++||nt!=z.debounceRendering)&&((nt=z.debounceRendering)||At)(Te)}function Te(){try{for(var t,s=1;te.length;)te.length>s&&te.sort(Tt),t=te.shift(),s=te.length,as(t)}finally{te.length=Te.__r=0}}function zt(t,s,a,c,n,i,r,d,h,u,p){var o,g,v,w,y,T,k,S=c&&c.__k||Ae,D=s.length;for(h=ns(a,s,S,h,D),o=0;o<D;o++)(v=a.__k[o])!=null&&(g=v.__i!=-1&&S[v.__i]||Le,v.__i=o,T=Ye(t,v,g,n,i,r,d,h,u,p),w=v.__e,v.ref&&g.ref!=v.ref&&(g.ref&&Qe(g.ref,null,v),p.push(v.ref,v.__c||w,v)),y==null&&w!=null&&(y=w),(k=!!(4&v.__u))||g.__k===v.__k?(h=Nt(v,h,t,k),k&&g.__e&&(g.__e=null)):typeof v.type=="function"&&T!==void 0?h=T:w&&(h=w.nextSibling),v.__u&=-7);return a.__e=y,h}function ns(t,s,a,c,n){var i,r,d,h,u,p=a.length,o=p,g=0;for(t.__k=new Array(n),i=0;i<n;i++)(r=s[i])!=null&&typeof r!="boolean"&&typeof r!="function"?(typeof r=="string"||typeof r=="number"||typeof r=="bigint"||r.constructor==String?r=t.__k[i]=xe(null,r,null,null,null):Ne(r)?r=t.__k[i]=xe(se,{children:r},null,null,null):r.constructor===void 0&&r.__b>0?r=t.__k[i]=xe(r.type,r.props,r.key,r.ref?r.ref:null,r.__v):t.__k[i]=r,h=i+g,r.__=t,r.__b=t.__b+1,d=null,(u=r.__i=is(r,a,h,o))!=-1&&(o--,(d=a[u])&&(d.__u|=2)),d==null||d.__v==null?(u==-1&&(n>p?g--:n<p&&g++),typeof r.type!="function"&&(r.__u|=4)):u!=h&&(u==h-1?g--:u==h+1?g++:(u>h?g--:g++,r.__u|=4))):t.__k[i]=null;if(o)for(i=0;i<p;i++)(d=a[i])!=null&&(2&d.__u)==0&&(d.__e==c&&(c=ce(d)),Bt(d,d));return c}function Nt(t,s,a,c){var n,i;if(typeof t.type=="function"){for(n=t.__k,i=0;n&&i<n.length;i++)n[i]&&(n[i].__=t,s=Nt(n[i],s,a,c));return s}t.__e!=s&&(c&&(s&&t.type&&!s.parentNode&&(s=ce(t)),a.insertBefore(t.__e,s||null)),s=t.__e);do s=s&&s.nextSibling;while(s!=null&&s.nodeType==8);return s}function is(t,s,a,c){var n,i,r,d=t.key,h=t.type,u=s[a],p=u!=null&&(2&u.__u)==0;if(u===null&&d==null||p&&d==u.key&&h==u.type)return a;if(c>(p?1:0)){for(n=a-1,i=a+1;n>=0||i<s.length;)if((u=s[r=n>=0?n--:i++])!=null&&(2&u.__u)==0&&d==u.key&&h==u.type)return r}return-1}function rt(t,s,a){s[0]=="-"?t.setProperty(s,a??""):t[s]=a==null?"":typeof a!="number"||ts.test(s)?a:a+"px"}function _e(t,s,a,c,n){var i,r;e:if(s=="style")if(typeof a=="string")t.style.cssText=a;else{if(typeof c=="string"&&(t.style.cssText=c=""),c)for(s in c)a&&s in a||rt(t.style,s,"");if(a)for(s in a)c&&a[s]==c[s]||rt(t.style,s,a[s])}else if(s[0]=="o"&&s[1]=="n")i=s!=(s=s.replace(Ft,"$1")),r=s.toLowerCase(),s=r in t||s=="onFocusOut"||s=="onFocusIn"?r.slice(2):s.slice(2),t.l||(t.l={}),t.l[s+i]=a,a?c?a[he]=c[he]:(a[he]=Ke,t.addEventListener(s,i?je:We,i)):t.removeEventListener(s,i?je:We,i);else{if(n=="http://www.w3.org/2000/svg")s=s.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(s!="width"&&s!="height"&&s!="href"&&s!="list"&&s!="form"&&s!="tabIndex"&&s!="download"&&s!="rowSpan"&&s!="colSpan"&&s!="role"&&s!="popover"&&s in t)try{t[s]=a??"";break e}catch{}typeof a=="function"||(a==null||a===!1&&s[4]!="-"?t.removeAttribute(s):t.setAttribute(s,s=="popover"&&a==1?"":a))}}function ot(t){return function(s){if(this.l){var a=this.l[s.type+t];if(s[Se]==null)s[Se]=Ke++;else if(s[Se]<a[he])return;return a(z.event?z.event(s):s)}}}function Ye(t,s,a,c,n,i,r,d,h,u){var p,o,g,v,w,y,T,k,S,D,b,P,Q,K,j,q=s.type;if(s.constructor!==void 0)return null;128&a.__u&&(h=!!(32&a.__u),i=[d=s.__e=a.__e]),(p=z.__b)&&p(s);e:if(typeof q=="function")try{if(k=s.props,S=q.prototype&&q.prototype.render,D=(p=q.contextType)&&c[p.__c],b=p?D?D.props.value:p.__:c,a.__c?T=(o=s.__c=a.__c).__=o.__E:(S?s.__c=o=new q(k,b):(s.__c=o=new Ce(k,b),o.constructor=q,o.render=os),D&&D.sub(o),o.state||(o.state={}),o.__n=c,g=o.__d=!0,o.__h=[],o._sb=[]),S&&o.__s==null&&(o.__s=o.state),S&&q.getDerivedStateFromProps!=null&&(o.__s==o.state&&(o.__s=ee({},o.__s)),ee(o.__s,q.getDerivedStateFromProps(k,o.__s))),v=o.props,w=o.state,o.__v=s,g)S&&q.getDerivedStateFromProps==null&&o.componentWillMount!=null&&o.componentWillMount(),S&&o.componentDidMount!=null&&o.__h.push(o.componentDidMount);else{if(S&&q.getDerivedStateFromProps==null&&k!==v&&o.componentWillReceiveProps!=null&&o.componentWillReceiveProps(k,b),s.__v==a.__v||!o.__e&&o.shouldComponentUpdate!=null&&o.shouldComponentUpdate(k,o.__s,b)===!1){s.__v!=a.__v&&(o.props=k,o.state=o.__s,o.__d=!1),s.__e=a.__e,s.__k=a.__k,s.__k.some(function(W){W&&(W.__=s)}),Ae.push.apply(o.__h,o._sb),o._sb=[],o.__h.length&&r.push(o);break e}o.componentWillUpdate!=null&&o.componentWillUpdate(k,o.__s,b),S&&o.componentDidUpdate!=null&&o.__h.push(function(){o.componentDidUpdate(v,w,y)})}if(o.context=b,o.props=k,o.__P=t,o.__e=!1,P=z.__r,Q=0,S)o.state=o.__s,o.__d=!1,P&&P(s),p=o.render(o.props,o.state,o.context),Ae.push.apply(o.__h,o._sb),o._sb=[];else do o.__d=!1,P&&P(s),p=o.render(o.props,o.state,o.context),o.state=o.__s;while(o.__d&&++Q<25);o.state=o.__s,o.getChildContext!=null&&(c=ee(ee({},c),o.getChildContext())),S&&!g&&o.getSnapshotBeforeUpdate!=null&&(y=o.getSnapshotBeforeUpdate(v,w)),K=p!=null&&p.type===se&&p.key==null?Pt(p.props.children):p,d=zt(t,Ne(K)?K:[K],s,a,c,n,i,r,d,h,u),o.base=s.__e,s.__u&=-161,o.__h.length&&r.push(o),T&&(o.__E=o.__=null)}catch(W){if(s.__v=null,h||i!=null)if(W.then){for(s.__u|=h?160:128;d&&d.nodeType==8&&d.nextSibling;)d=d.nextSibling;i[i.indexOf(d)]=null,s.__e=d}else{for(j=i.length;j--;)Oe(i[j]);qe(s)}else s.__e=a.__e,s.__k=a.__k,W.then||qe(s);z.__e(W,s,a)}else i==null&&s.__v==a.__v?(s.__k=a.__k,s.__e=a.__e):d=s.__e=rs(a.__e,s,a,c,n,i,r,h,u);return(p=z.diffed)&&p(s),128&s.__u?void 0:d}function qe(t){t&&(t.__c&&(t.__c.__e=!0),t.__k&&t.__k.some(qe))}function Rt(t,s,a){for(var c=0;c<a.length;c++)Qe(a[c],a[++c],a[++c]);z.__c&&z.__c(s,t),t.some(function(n){try{t=n.__h,n.__h=[],t.some(function(i){i.call(n)})}catch(i){z.__e(i,n.__v)}})}function Pt(t){return typeof t!="object"||t==null||t.__b>0?t:Ne(t)?t.map(Pt):ee({},t)}function rs(t,s,a,c,n,i,r,d,h){var u,p,o,g,v,w,y,T=a.props||Le,k=s.props,S=s.type;if(S=="svg"?n="http://www.w3.org/2000/svg":S=="math"?n="http://www.w3.org/1998/Math/MathML":n||(n="http://www.w3.org/1999/xhtml"),i!=null){for(u=0;u<i.length;u++)if((v=i[u])&&"setAttribute"in v==!!S&&(S?v.localName==S:v.nodeType==3)){t=v,i[u]=null;break}}if(t==null){if(S==null)return document.createTextNode(k);t=document.createElementNS(n,S,k.is&&k),d&&(z.__m&&z.__m(s,i),d=!1),i=null}if(S==null)T===k||d&&t.data==k||(t.data=k);else{if(i=i&&ze.call(t.childNodes),!d&&i!=null)for(T={},u=0;u<t.attributes.length;u++)T[(v=t.attributes[u]).name]=v.value;for(u in T)v=T[u],u=="dangerouslySetInnerHTML"?o=v:u=="children"||u in k||u=="value"&&"defaultValue"in k||u=="checked"&&"defaultChecked"in k||_e(t,u,null,v,n);for(u in k)v=k[u],u=="children"?g=v:u=="dangerouslySetInnerHTML"?p=v:u=="value"?w=v:u=="checked"?y=v:d&&typeof v!="function"||T[u]===v||_e(t,u,v,T[u],n);if(p)d||o&&(p.__html==o.__html||p.__html==t.innerHTML)||(t.innerHTML=p.__html),s.__k=[];else if(o&&(t.innerHTML=""),zt(s.type=="template"?t.content:t,Ne(g)?g:[g],s,a,c,S=="foreignObject"?"http://www.w3.org/1999/xhtml":n,i,r,i?i[0]:a.__k&&ce(a,0),d,h),i!=null)for(u=i.length;u--;)Oe(i[u]);d||(u="value",S=="progress"&&w==null?t.removeAttribute("value"):w!=null&&(w!==t[u]||S=="progress"&&!w||S=="option"&&w!=T[u])&&_e(t,u,w,T[u],n),u="checked",y!=null&&y!=t[u]&&_e(t,u,y,T[u],n))}return t}function Qe(t,s,a){try{if(typeof t=="function"){var c=typeof t.__u=="function";c&&t.__u(),c&&s==null||(t.__u=t(s))}else t.current=s}catch(n){z.__e(n,a)}}function Bt(t,s,a){var c,n;if(z.unmount&&z.unmount(t),(c=t.ref)&&(c.current&&c.current!=t.__e||Qe(c,null,s)),(c=t.__c)!=null){if(c.componentWillUnmount)try{c.componentWillUnmount()}catch(i){z.__e(i,s)}c.base=c.__P=null}if(c=t.__k)for(n=0;n<c.length;n++)c[n]&&Bt(c[n],s,a||typeof t.type!="function");a||Oe(t.__e),t.__c=t.__=t.__e=void 0}function os(t,s,a){return this.constructor(t,a)}function ls(t,s,a){var c,n,i,r;s==document&&(s=document.documentElement),z.__&&z.__(t,s),n=(c=!1)?null:s.__k,i=[],r=[],Ye(s,t=s.__k=ss(se,null,[t]),n||Le,Le,s.namespaceURI,n?null:s.firstChild?ze.call(s.childNodes):null,i,n?n.__e:s.firstChild,c,r),Rt(i,t,r)}ze=Ae.slice,z={__e:function(t,s,a,c){for(var n,i,r;s=s.__;)if((n=s.__c)&&!n.__)try{if((i=n.constructor)&&i.getDerivedStateFromError!=null&&(n.setState(i.getDerivedStateFromError(t)),r=n.__d),n.componentDidCatch!=null&&(n.componentDidCatch(t,c||{}),r=n.__d),r)return n.__E=n}catch(d){t=d}throw t}},Lt=0,Ce.prototype.setState=function(t,s){var a;a=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=ee({},this.state),typeof t=="function"&&(t=t(ee({},a),this.props)),t&&ee(a,t),t!=null&&this.__v&&(s&&this._sb.push(s),it(this))},Ce.prototype.forceUpdate=function(t){this.__v&&(this.__e=!0,t&&this.__h.push(t),it(this))},Ce.prototype.render=se,te=[],At=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Tt=function(t,s){return t.__v.__b-s.__v.__b},Te.__r=0,Ge=Math.random().toString(8),Se="__d"+Ge,he="__a"+Ge,Ft=/(PointerCapture)$|Capture$/i,Ke=0,We=ot(!1),je=ot(!0);var cs=0;function e(t,s,a,c,n,i){s||(s={});var r,d,h=s;if("ref"in h)for(d in h={},s)d=="ref"?r=s[d]:h[d]=s[d];var u={type:t,props:h,key:a,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--cs,__i:-1,__u:0,__source:n,__self:i};if(typeof t=="function"&&(r=t.defaultProps))for(d in r)h[d]===void 0&&(h[d]=r[d]);return z.vnode&&z.vnode(u),u}var ge,R,Ie,lt,pe=0,Dt=[],B=z,ct=B.__b,dt=B.__r,ut=B.diffed,ht=B.__c,gt=B.unmount,pt=B.__;function Xe(t,s){B.__h&&B.__h(R,t,pe||s),pe=0;var a=R.__H||(R.__H={__:[],__h:[]});return t>=a.__.length&&a.__.push({}),a.__[t]}function L(t){return pe=1,ds(Ht,t)}function ds(t,s,a){var c=Xe(ge++,2);if(c.t=t,!c.__c&&(c.__=[Ht(void 0,s),function(d){var h=c.__N?c.__N[0]:c.__[0],u=c.t(h,d);h!==u&&(c.__N=[u,c.__[1]],c.__c.setState({}))}],c.__c=R,!R.__f)){var n=function(d,h,u){if(!c.__c.__H)return!0;var p=c.__c.__H.__.filter(function(g){return g.__c});if(p.every(function(g){return!g.__N}))return!i||i.call(this,d,h,u);var o=c.__c.props!==d;return p.some(function(g){if(g.__N){var v=g.__[0];g.__=g.__N,g.__N=void 0,v!==g.__[0]&&(o=!0)}}),i&&i.call(this,d,h,u)||o};R.__f=!0;var i=R.shouldComponentUpdate,r=R.componentWillUpdate;R.componentWillUpdate=function(d,h,u){if(this.__e){var p=i;i=void 0,n(d,h,u),i=p}r&&r.call(this,d,h,u)},R.shouldComponentUpdate=n}return c.__N||c.__}function Y(t,s){var a=Xe(ge++,3);!B.__s&&It(a.__H,s)&&(a.__=t,a.u=s,R.__H.__h.push(a))}function O(t){return pe=5,Gt(function(){return{current:t}},[])}function Gt(t,s){var a=Xe(ge++,7);return It(a.__H,s)&&(a.__=t(),a.__H=s,a.__h=t),a.__}function oe(t,s){return pe=8,Gt(function(){return t},s)}function us(){for(var t;t=Dt.shift();){var s=t.__H;if(t.__P&&s)try{s.__h.some(Me),s.__h.some($e),s.__h=[]}catch(a){s.__h=[],B.__e(a,t.__v)}}}B.__b=function(t){R=null,ct&&ct(t)},B.__=function(t,s){t&&s.__k&&s.__k.__m&&(t.__m=s.__k.__m),pt&&pt(t,s)},B.__r=function(t){dt&&dt(t),ge=0;var s=(R=t.__c).__H;s&&(Ie===R?(s.__h=[],R.__h=[],s.__.some(function(a){a.__N&&(a.__=a.__N),a.u=a.__N=void 0})):(s.__h.some(Me),s.__h.some($e),s.__h=[],ge=0)),Ie=R},B.diffed=function(t){ut&&ut(t);var s=t.__c;s&&s.__H&&(s.__H.__h.length&&(Dt.push(s)!==1&<===B.requestAnimationFrame||((lt=B.requestAnimationFrame)||hs)(us)),s.__H.__.some(function(a){a.u&&(a.__H=a.u),a.u=void 0})),Ie=R=null},B.__c=function(t,s){s.some(function(a){try{a.__h.some(Me),a.__h=a.__h.filter(function(c){return!c.__||$e(c)})}catch(c){s.some(function(n){n.__h&&(n.__h=[])}),s=[],B.__e(c,a.__v)}}),ht&&ht(t,s)},B.unmount=function(t){gt&>(t);var s,a=t.__c;a&&a.__H&&(a.__H.__.some(function(c){try{Me(c)}catch(n){s=n}}),a.__H=void 0,s&&B.__e(s,a.__v))};var mt=typeof requestAnimationFrame=="function";function hs(t){var s,a=function(){clearTimeout(c),mt&&cancelAnimationFrame(s),setTimeout(t)},c=setTimeout(a,35);mt&&(s=requestAnimationFrame(a))}function Me(t){var s=R,a=t.__c;typeof a=="function"&&(t.__c=void 0,a()),R=s}function $e(t){var s=R;t.__c=t.__(),R=s}function It(t,s){return!t||t.length!==s.length||s.some(function(a,c){return a!==t[c]})}function Ht(t,s){return typeof s=="function"?s(t):s}const Fe={en:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connected","header.disconnected":"Disconnected","header.connecting":"Connecting…","header.memories":"memories","tab.search":"Search","tab.browse":"Browse","tab.analytics":"Analytics","tab.manage":"Manage","tab.graph":"Graph","tab.lessons":"Lessons","tab.settings":"Settings","search.title":"Search Memories","search.placeholder":'Search your memories… (e.g., "auth", "database", "bug fix")',"search.button":"Search","search.searching":"Searching…","search.results":"results","search.result":"result","search.noResults":"No results for","search.hint":"Search by entity name, observation content, or tags. Supports FTS5 full-text + vector similarity.","search.facts":"facts","browse.title":"All Memories","browse.manage":"Manage Memories","browse.active":"active","browse.archived":"archived","browse.filter":"Filter by content, type, or tag…","browse.refresh":"Refresh","browse.noMemories":"No memories yet","browse.noMatch":"No memories matching","browse.prev":"← Prev","browse.next":"Next →","browse.archive":"Archive","browse.restore":"Restore","browse.confirmArchive":"Archive this memory?","browse.moreArchived":"more archived memories","browse.archiveFailed":"Could not archive memory: {message}","browse.restoreFailed":"Could not restore memory: {message}","analytics.totalMemories":"Total Memories","analytics.knowledgeFacts":"Knowledge Facts","analytics.connections":"Connections","analytics.topics":"Topics","analytics.insights":"Insights","analytics.thisWeek":"This week","analytics.new":"new","analytics.stale":"Stale (30+ days unused)","analytics.archivedLabel":"Archived","analytics.mostRecalled":"Most Recalled","health.title":"Memory Health","health.excellent":"Excellent","health.good":"Good","health.fair":"Fair","health.poor":"Poor","health.activity":"Activity","health.quality":"Quality","health.freshness":"Freshness","health.lessons":"Self-Improvement","timeline.title":"Last 30 Days","timeline.created":"Created","timeline.recalled":"Recalled","value.totalRecalls":"Total Recalls","value.lessonsLearned":"Lessons Learned","value.lessonsSaved":"Lessons Applied","value.coverage":"Knowledge Coverage","cleanup.title":"Cleanup Suggestions","cleanup.allClean":"Your memory is clean. No stale or duplicate entities detected.","cleanup.staleLabel":"Low confidence / unused","cleanup.duplicateLabel":"Possible duplicates","cleanup.confidence":"confidence","cleanup.unused":"unused","cleanup.entityMeta":"{type} · {confidence}% confidence · {days}d unused","cleanup.consolidateHint":"Use the consolidate tool to merge similar entities.","settings.capabilities":"Capabilities","settings.smartMode":"Smart Mode","settings.core":"Core","settings.embeddings":"Embeddings","settings.llmProvider":"LLM Provider","settings.apiKey":"API Key","settings.model":"Model (optional)","settings.save":"Save","settings.saving":"Saving…","settings.saved":"Saved! Restart server for LLM changes to take effect.","settings.language":"Language","settings.searchMode":"Search Mode","settings.none":"None","settings.updates":"Updates","settings.updateChecking":"Checking for updates…","settings.updateUnavailable":"Could not check for updates right now","settings.updateNoSuccessfulChecks":"No successful update checks yet","settings.upToDate":"Up to date","settings.updateAvailable":"Update available","settings.updateStale":"Cached status may be outdated","settings.updateCachedFallback":"Using the last successful cached result","settings.currentVersion":"Current version","settings.latestVersion":"Latest version","settings.lastChecked":"Last checked","settings.lastAttempted":"Last attempted check","settings.lastSuccessful":"Last successful check","settings.updateSourceFresh":"Fresh check","settings.updateSourceCached":"Using cached result","settings.updateSourceStale":"Using stale cached result","settings.updateSourceUnavailable":"No cached result","settings.updateCommand":"Update command","settings.checkNow":"Check now","settings.updateLastError":"Last check error: {message}","settings.installMethod":"Install method","settings.installNpmGlobal":"npm global install","settings.installNpmLocal":"project-local package install","settings.installSourceCheckout":"source checkout","settings.installUnknown":"unknown","settings.updateGuidanceNpmGlobal":"This install can be updated directly from MeMesh.","settings.updateGuidanceNpmLocal":"Update this install from the project package manager that installed MeMesh.","settings.updateGuidanceSourceCheckout":"Update this source checkout from its repository and rebuild it.","settings.updateGuidanceUnknown":"Update this installation from the tool or workflow that installed MeMesh.","graph.entities":"Entities","graph.relations":"Relations","graph.orphans":"Orphans","graph.search":"Search nodes…","graph.matches":"matches","graph.focusMode":"Focus","graph.showAll":"Show all","graph.clickHint":"Click a node to focus","graph.ageToday":"today","graph.ageDaysAgo":"{count}d ago","graph.ageWeeksAgo":"{count}w ago","lessons.total":"Total Lessons","lessons.critical":"Critical","lessons.empty":"No lessons recorded yet. Use the learn tool or enable Smart Mode.","lessons.error":"Error","lessons.rootCause":"Root Cause","lessons.fix":"Fix","lessons.prevention":"Prevention","feedback.button":"💬 Feedback","feedback.title":"Send Feedback","feedback.bug":"Bug","feedback.feature":"Feature","feedback.question":"Question","feedback.placeholder":"Describe your feedback…","feedback.includeSys":"Include system info","feedback.submit":"Open GitHub Issue","patterns.title":"Your Patterns","patterns.workSchedule":"Work Schedule","patterns.peakHours":"Peak hours","patterns.busiestDays":"Busiest days","patterns.tools":"Top Tools","patterns.workflow":"Workflow","patterns.avgSession":"Avg Session","patterns.commitsPerSession":"Commits/Session","patterns.focus":"Focus Areas","patterns.strengths":"Strengths","patterns.learning":"Learning Areas","recall.effectiveness":"Effectiveness","recall.hits":"Hits","recall.misses":"Misses","recall.tracked":"Tracked","recall.hitRate":"Recall Hit Rate","recall.used":"used","recall.injected":"injected","recall.mostEffective":"Most Effective","recall.leastEffective":"Least Effective","recall.noData":"No recall data yet. Effectiveness tracking starts after your next session.","recall.summary":"{used} used / {total} injected","analytics.loadFailed":"Could not load analytics.","memory.noContent":"(no content)","memory.archivedBadge":"archived","memory.factsCount":"{count} facts","common.error":"Error","common.loading":"Loading…","common.noData":"No data","errors.unknown":"Unknown error","errors.timeout":"Request timed out"},"zh-TW":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已連線","header.disconnected":"已斷線","header.connecting":"連線中…","header.memories":"筆記憶","tab.search":"搜尋","tab.browse":"瀏覽","tab.analytics":"分析","tab.manage":"管理","tab.graph":"關係圖","tab.lessons":"經驗教訓","tab.settings":"設定","search.title":"搜尋記憶","search.placeholder":"搜尋你的記憶…(例如:「auth」、「資料庫」、「bug 修復」)","search.button":"搜尋","search.searching":"搜尋中…","search.results":"個結果","search.result":"個結果","search.noResults":"找不到符合的結果:","search.hint":"可依實體名稱、觀察內容或標籤搜尋。支援 FTS5 全文檢索 + 向量相似度搜尋。","search.facts":"筆事實","browse.title":"所有記憶","browse.manage":"管理記憶","browse.active":"使用中","browse.archived":"已封存","browse.filter":"依內容、類型或標籤篩選…","browse.refresh":"重新整理","browse.noMemories":"尚無記憶","browse.noMatch":"找不到符合的記憶:","browse.prev":"← 上一頁","browse.next":"下一頁 →","browse.archive":"封存","browse.restore":"還原","browse.confirmArchive":"確定要封存此記憶?","browse.moreArchived":"筆已封存的記憶","browse.archiveFailed":"封存失敗:{message}","browse.restoreFailed":"還原失敗:{message}","analytics.totalMemories":"記憶總數","analytics.knowledgeFacts":"知識事實","analytics.connections":"關聯","analytics.topics":"主題","analytics.insights":"洞察","analytics.thisWeek":"本週","analytics.new":"筆新增","analytics.stale":"閒置(30 天以上未使用)","analytics.archivedLabel":"已封存","analytics.mostRecalled":"最常查閱","health.title":"記憶健康度","health.excellent":"優秀","health.good":"良好","health.fair":"普通","health.poor":"不佳","health.activity":"活躍度","health.quality":"品質","health.freshness":"新鮮度","health.lessons":"自我改善","timeline.title":"最近 30 天","timeline.created":"新增","timeline.recalled":"召回","value.totalRecalls":"總召回次數","value.lessonsLearned":"經驗教訓","value.lessonsSaved":"已應用教訓","value.coverage":"知識覆蓋率","cleanup.title":"清理建議","cleanup.allClean":"記憶庫很乾淨,沒有偵測到過時或重複的實體。","cleanup.staleLabel":"低信心度 / 未使用","cleanup.duplicateLabel":"可能重複","cleanup.confidence":"信心度","cleanup.unused":"未使用","cleanup.entityMeta":"{type} · 信心度 {confidence}% · 已閒置 {days} 天","cleanup.consolidateHint":"使用 consolidate 工具合併相似的實體。","settings.capabilities":"功能狀態","settings.smartMode":"智慧模式","settings.core":"基礎","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供者","settings.apiKey":"API 金鑰","settings.model":"模型(選填)","settings.save":"儲存","settings.saving":"儲存中…","settings.saved":"已儲存!重啟伺服器以套用 LLM 設定。","settings.language":"語言","settings.searchMode":"搜尋模式","settings.none":"無","settings.updates":"更新","settings.updateChecking":"正在檢查更新…","settings.updateUnavailable":"目前無法檢查更新","settings.updateNoSuccessfulChecks":"目前還沒有成功的更新檢查紀錄","settings.upToDate":"已是最新版本","settings.updateAvailable":"有可用更新","settings.updateStale":"目前顯示的是可能過期的快取狀態","settings.updateCachedFallback":"目前使用上次成功的快取結果","settings.currentVersion":"目前版本","settings.latestVersion":"最新版本","settings.lastChecked":"上次檢查","settings.lastAttempted":"上次嘗試檢查","settings.lastSuccessful":"上次成功檢查","settings.updateSourceFresh":"即時檢查","settings.updateSourceCached":"使用快取結果","settings.updateSourceStale":"使用過期快取結果","settings.updateSourceUnavailable":"沒有可用快取","settings.updateCommand":"更新指令","settings.checkNow":"立即檢查","settings.updateLastError":"上次檢查錯誤:{message}","settings.installMethod":"安裝方式","settings.installNpmGlobal":"npm 全域安裝","settings.installNpmLocal":"專案內套件安裝","settings.installSourceCheckout":"原始碼工作目錄","settings.installUnknown":"未知","settings.updateGuidanceNpmGlobal":"這個安裝可直接透過 MeMesh 更新。","settings.updateGuidanceNpmLocal":"請用安裝此套件的專案套件管理工具來更新。","settings.updateGuidanceSourceCheckout":"請從原始碼儲存庫更新這份工作目錄並重新建置。","settings.updateGuidanceUnknown":"請使用安裝 MeMesh 時的工具或工作流程來更新這個安裝。","graph.entities":"實體","graph.relations":"關聯","graph.orphans":"孤立節點","graph.search":"搜尋節點…","graph.matches":"個符合","graph.focusMode":"聚焦","graph.showAll":"顯示全部","graph.clickHint":"點擊節點以聚焦","graph.ageToday":"今天","graph.ageDaysAgo":"{count} 天前","graph.ageWeeksAgo":"{count} 週前","lessons.total":"教訓總數","lessons.critical":"嚴重","lessons.empty":"尚無教訓記錄。請使用 learn 工具或啟用智慧模式。","lessons.error":"錯誤","lessons.rootCause":"根本原因","lessons.fix":"修復方式","lessons.prevention":"預防措施","feedback.button":"💬 意見回饋","feedback.title":"傳送意見回饋","feedback.bug":"錯誤","feedback.feature":"功能建議","feedback.question":"問題","feedback.placeholder":"描述你的意見回饋…","feedback.includeSys":"附帶系統資訊","feedback.submit":"開啟 GitHub Issue","patterns.title":"你的模式","patterns.workSchedule":"工作時程","patterns.peakHours":"尖峰時段","patterns.busiestDays":"最忙碌的日子","patterns.tools":"常用工具","patterns.workflow":"工作流程","patterns.avgSession":"平均工作階段","patterns.commitsPerSession":"每次提交數","patterns.focus":"關注領域","patterns.strengths":"強項","patterns.learning":"學習領域","recall.effectiveness":"有效性","recall.hits":"命中","recall.misses":"未命中","recall.tracked":"追蹤中","recall.hitRate":"記憶命中率","recall.used":"已使用","recall.injected":"已注入","recall.mostEffective":"最有效","recall.leastEffective":"最低效","recall.noData":"尚無召回數據。下次會話後開始追蹤有效性。","recall.summary":"已使用 {used} / 已注入 {total}","analytics.loadFailed":"載入分析資料失敗。","memory.noContent":"(無內容)","memory.archivedBadge":"已封存","memory.factsCount":"{count} 筆事實","common.error":"錯誤","common.loading":"載入中…","common.noData":"沒有資料","errors.unknown":"發生未知錯誤","errors.timeout":"請求逾時"},"zh-CN":{"brand.subtitle":"powered by pcircle.ai","header.connected":"已连接","header.disconnected":"已断开","header.connecting":"连接中…","header.memories":"条记忆","tab.search":"搜索","tab.browse":"浏览","tab.analytics":"分析","tab.manage":"管理","tab.graph":"关系图","tab.lessons":"经验教训","tab.settings":"设置","search.title":"搜索记忆","search.placeholder":'搜索你的记忆…(例如:"auth"、"数据库"、"bug 修复")',"search.button":"搜索","search.searching":"搜索中…","search.results":"个结果","search.result":"个结果","search.noResults":"没有找到结果:","search.hint":"可按实体名称、观察内容或标签搜索。支持 FTS5 全文检索 + 向量相似度搜索。","search.facts":"条事实","browse.title":"所有记忆","browse.manage":"管理记忆","browse.active":"活跃","browse.archived":"已归档","browse.filter":"按内容、类型或标签筛选…","browse.refresh":"刷新","browse.noMemories":"暂无记忆","browse.noMatch":"没有匹配的记忆:","browse.prev":"← 上一页","browse.next":"下一页 →","browse.archive":"归档","browse.restore":"恢复","browse.confirmArchive":"确定要归档此记忆?","browse.moreArchived":"条已归档记忆","browse.archiveFailed":"归档失败:{message}","browse.restoreFailed":"恢复失败:{message}","analytics.totalMemories":"记忆总数","analytics.knowledgeFacts":"知识事实","analytics.connections":"关联","analytics.topics":"主题","analytics.insights":"洞察","analytics.thisWeek":"本周","analytics.new":"条新增","analytics.stale":"闲置(30 天以上未使用)","analytics.archivedLabel":"已归档","analytics.mostRecalled":"最常查阅","health.title":"记忆健康度","health.excellent":"优秀","health.good":"良好","health.fair":"一般","health.poor":"较差","health.activity":"活跃度","health.quality":"质量","health.freshness":"新鲜度","health.lessons":"自我改善","timeline.title":"最近 30 天","timeline.created":"新增","timeline.recalled":"召回","value.totalRecalls":"总召回次数","value.lessonsLearned":"经验教训","value.lessonsSaved":"已应用教训","value.coverage":"知识覆盖率","cleanup.title":"清理建议","cleanup.allClean":"记忆库很干净,没有检测到过时或重复的实体。","cleanup.staleLabel":"低置信度 / 未使用","cleanup.duplicateLabel":"可能重复","cleanup.confidence":"置信度","cleanup.unused":"未使用","cleanup.entityMeta":"{type} · 置信度 {confidence}% · 已闲置 {days} 天","cleanup.consolidateHint":"使用 consolidate 工具合并相似的实体。","settings.capabilities":"功能状态","settings.smartMode":"智能模式","settings.core":"基础","settings.embeddings":"嵌入模型","settings.llmProvider":"LLM 提供商","settings.apiKey":"API 密钥","settings.model":"模型(选填)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"已保存!重启服务器以应用 LLM 设置。","settings.language":"语言","settings.searchMode":"搜索模式","settings.none":"无","settings.updates":"更新","settings.updateChecking":"正在检查更新…","settings.updateUnavailable":"暂时无法检查更新","settings.updateNoSuccessfulChecks":"目前还没有成功的更新检查记录","settings.upToDate":"已是最新版本","settings.updateAvailable":"有可用更新","settings.updateStale":"当前显示的是可能过期的缓存状态","settings.updateCachedFallback":"当前使用上次成功的缓存结果","settings.currentVersion":"当前版本","settings.latestVersion":"最新版本","settings.lastChecked":"上次检查","settings.lastAttempted":"上次尝试检查","settings.lastSuccessful":"上次成功检查","settings.updateSourceFresh":"实时检查","settings.updateSourceCached":"使用缓存结果","settings.updateSourceStale":"使用过期缓存结果","settings.updateSourceUnavailable":"没有可用缓存","settings.updateCommand":"更新命令","settings.checkNow":"立即检查","settings.updateLastError":"上次检查错误:{message}","settings.installMethod":"安装方式","settings.installNpmGlobal":"npm 全局安装","settings.installNpmLocal":"项目内包安装","settings.installSourceCheckout":"源码工作目录","settings.installUnknown":"未知","settings.updateGuidanceNpmGlobal":"这个安装可以直接通过 MeMesh 更新。","settings.updateGuidanceNpmLocal":"请使用安装此包的项目包管理器来更新。","settings.updateGuidanceSourceCheckout":"请从源码仓库更新这份工作目录并重新构建。","settings.updateGuidanceUnknown":"请使用安装 MeMesh 时所用的工具或流程来更新这个安装。","graph.entities":"实体","graph.relations":"关联","graph.orphans":"孤立节点","graph.search":"搜索节点…","graph.matches":"个匹配","graph.focusMode":"聚焦","graph.showAll":"显示全部","graph.clickHint":"点击节点以聚焦","graph.ageToday":"今天","graph.ageDaysAgo":"{count} 天前","graph.ageWeeksAgo":"{count} 周前","lessons.total":"教训总数","lessons.critical":"严重","lessons.empty":"尚无教训记录。请使用 learn 工具或启用智能模式。","lessons.error":"错误","lessons.rootCause":"根本原因","lessons.fix":"修复方式","lessons.prevention":"预防措施","feedback.button":"💬 反馈","feedback.title":"发送反馈","feedback.bug":"错误","feedback.feature":"功能建议","feedback.question":"问题","feedback.placeholder":"描述你的反馈…","feedback.includeSys":"附带系统信息","feedback.submit":"打开 GitHub Issue","patterns.title":"你的模式","patterns.workSchedule":"工作时程","patterns.peakHours":"高峰时段","patterns.busiestDays":"最忙碌的日子","patterns.tools":"常用工具","patterns.workflow":"工作流程","patterns.avgSession":"平均工作时长","patterns.commitsPerSession":"每次提交数","patterns.focus":"关注领域","patterns.strengths":"强项","patterns.learning":"学习领域","recall.effectiveness":"有效性","recall.hits":"命中","recall.misses":"未命中","recall.tracked":"追踪中","recall.hitRate":"记忆命中率","recall.used":"已使用","recall.injected":"已注入","recall.mostEffective":"最有效","recall.leastEffective":"最低效","recall.noData":"暂无召回数据。下次会话后开始追踪有效性。","recall.summary":"已使用 {used} / 已注入 {total}","analytics.loadFailed":"加载分析数据失败。","memory.noContent":"(无内容)","memory.archivedBadge":"已归档","memory.factsCount":"{count} 条事实","common.error":"错误","common.loading":"加载中…","common.noData":"没有数据","errors.unknown":"发生未知错误","errors.timeout":"请求超时"},ja:{"brand.subtitle":"powered by pcircle.ai","header.connected":"接続中","header.disconnected":"切断","header.connecting":"接続しています…","header.memories":"件のメモリ","tab.search":"検索","tab.browse":"一覧","tab.analytics":"分析","tab.manage":"管理","tab.graph":"グラフ","tab.lessons":"教訓","tab.settings":"設定","search.title":"メモリを検索","search.placeholder":"メモリを検索…(例:「auth」「データベース」「バグ修正」)","search.button":"検索","search.searching":"検索中…","search.results":"件の結果","search.result":"件の結果","search.noResults":"結果が見つかりません:","search.hint":"エンティティ名、観察内容、タグで検索できます。FTS5全文検索 + ベクトル類似度に対応しています。","search.facts":"件の事実","browse.title":"すべてのメモリ","browse.manage":"メモリを管理","browse.active":"アクティブ","browse.archived":"アーカイブ済み","browse.filter":"内容、タイプ、タグで絞り込み…","browse.refresh":"更新","browse.noMemories":"メモリがありません","browse.noMatch":"一致するメモリがありません:","browse.prev":"← 前へ","browse.next":"次へ →","browse.archive":"アーカイブ","browse.restore":"復元","browse.confirmArchive":"このメモリをアーカイブしますか?","browse.moreArchived":"件のアーカイブ済みメモリ","browse.archiveFailed":"アーカイブできませんでした: {message}","browse.restoreFailed":"復元できませんでした: {message}","analytics.totalMemories":"メモリ総数","analytics.knowledgeFacts":"知識ファクト","analytics.connections":"接続","analytics.topics":"トピック","analytics.insights":"インサイト","analytics.thisWeek":"今週","analytics.new":"件の新規","analytics.stale":"未使用(30日以上)","analytics.archivedLabel":"アーカイブ済み","analytics.mostRecalled":"よく参照される","health.title":"メモリ健康度","health.excellent":"優秀","health.good":"良好","health.fair":"普通","health.poor":"不良","health.activity":"アクティビティ","health.quality":"品質","health.freshness":"新鮮度","health.lessons":"自己改善","timeline.title":"過去30日間","timeline.created":"作成","timeline.recalled":"呼び出し","value.totalRecalls":"総呼び出し回数","value.lessonsLearned":"学んだ教訓","value.lessonsSaved":"適用済み教訓","value.coverage":"知識カバレッジ","cleanup.title":"クリーンアップ提案","cleanup.allClean":"メモリはきれいです。古いまたは重複したエンティティは検出されませんでした。","cleanup.staleLabel":"低信頼度 / 未使用","cleanup.duplicateLabel":"重複の可能性","cleanup.confidence":"信頼度","cleanup.unused":"未使用","cleanup.entityMeta":"{type} ・ 信頼度 {confidence}% ・ {days}日未使用","cleanup.consolidateHint":"consolidateツールを使用して類似エンティティを統合してください。","settings.capabilities":"機能状態","settings.smartMode":"スマートモード","settings.core":"コア","settings.embeddings":"エンベディング","settings.llmProvider":"LLMプロバイダー","settings.apiKey":"APIキー","settings.model":"モデル(任意)","settings.save":"保存","settings.saving":"保存中…","settings.saved":"保存しました!LLM設定を反映するにはサーバーを再起動してください。","settings.language":"言語","settings.searchMode":"検索モード","settings.none":"なし","settings.updates":"アップデート","settings.updateChecking":"更新を確認中…","settings.updateUnavailable":"現在は更新を確認できません","settings.updateNoSuccessfulChecks":"まだ一度も更新確認に成功していません","settings.upToDate":"最新です","settings.updateAvailable":"更新があります","settings.updateStale":"表示中のキャッシュ結果は古い可能性があります","settings.updateCachedFallback":"前回成功したキャッシュ結果を使用しています","settings.currentVersion":"現在のバージョン","settings.latestVersion":"最新バージョン","settings.lastChecked":"最終確認","settings.lastAttempted":"最終確認試行","settings.lastSuccessful":"最後に成功した確認","settings.updateSourceFresh":"今すぐ確認","settings.updateSourceCached":"キャッシュ結果を使用","settings.updateSourceStale":"古いキャッシュ結果を使用","settings.updateSourceUnavailable":"利用できるキャッシュなし","settings.updateCommand":"更新コマンド","settings.checkNow":"今すぐ確認","settings.updateLastError":"前回の確認エラー: {message}","settings.installMethod":"インストール方法","settings.installNpmGlobal":"npm グローバルインストール","settings.installNpmLocal":"プロジェクトローカルのパッケージインストール","settings.installSourceCheckout":"ソースチェックアウト","settings.installUnknown":"不明","settings.updateGuidanceNpmGlobal":"このインストールは MeMesh から直接更新できます。","settings.updateGuidanceNpmLocal":"このインストールを追加したプロジェクトのパッケージマネージャーから更新してください。","settings.updateGuidanceSourceCheckout":"このソースチェックアウトはリポジトリから更新して再ビルドしてください。","settings.updateGuidanceUnknown":"MeMesh をインストールしたツールまたは手順からこのインストールを更新してください。","graph.entities":"エンティティ","graph.relations":"リレーション","graph.orphans":"孤立ノード","graph.search":"ノードを検索…","graph.matches":"件一致","graph.focusMode":"フォーカス","graph.showAll":"すべて表示","graph.clickHint":"ノードをクリックしてフォーカス","graph.ageToday":"今日","graph.ageDaysAgo":"{count}日前","graph.ageWeeksAgo":"{count}週間前","lessons.total":"教訓の総数","lessons.critical":"重大","lessons.empty":"まだ教訓が記録されていません。learnツールを使用するか、スマートモードを有効にしてください。","lessons.error":"エラー","lessons.rootCause":"根本原因","lessons.fix":"修正方法","lessons.prevention":"予防策","feedback.button":"💬 フィードバック","feedback.title":"フィードバックを送信","feedback.bug":"バグ","feedback.feature":"機能提案","feedback.question":"質問","feedback.placeholder":"フィードバックを記入…","feedback.includeSys":"システム情報を含める","feedback.submit":"GitHub Issue を作成","patterns.title":"あなたのパターン","patterns.workSchedule":"作業スケジュール","patterns.peakHours":"ピーク時間帯","patterns.busiestDays":"最も忙しい曜日","patterns.tools":"よく使うツール","patterns.workflow":"ワークフロー","patterns.avgSession":"平均セッション","patterns.commitsPerSession":"コミット/セッション","patterns.focus":"フォーカスエリア","patterns.strengths":"強み","patterns.learning":"学習エリア","recall.effectiveness":"有効性","recall.hits":"ヒット","recall.misses":"ミス","recall.tracked":"追跡中","recall.hitRate":"リコール命中率","recall.used":"使用済み","recall.injected":"注入済み","recall.mostEffective":"最も効果的","recall.leastEffective":"最も非効果的","recall.noData":"リコールデータはまだありません。次のセッション後に追跡が開始されます。","recall.summary":"{used} 件使用 / {total} 件注入","analytics.loadFailed":"分析データを読み込めませんでした。","memory.noContent":"(内容なし)","memory.archivedBadge":"アーカイブ済み","memory.factsCount":"{count}件の事実","common.error":"エラー","common.loading":"読み込み中…","common.noData":"データがありません","errors.unknown":"不明なエラー","errors.timeout":"リクエストがタイムアウトしました"},ko:{"brand.subtitle":"powered by pcircle.ai","header.connected":"연결됨","header.disconnected":"연결 끊김","header.connecting":"연결 중…","header.memories":"개의 기억","tab.search":"검색","tab.browse":"둘러보기","tab.analytics":"분석","tab.manage":"관리","tab.graph":"그래프","tab.lessons":"교훈","tab.settings":"설정","search.title":"기억 검색","search.placeholder":'기억 검색… (예: "auth", "데이터베이스", "버그 수정")',"search.button":"검색","search.searching":"검색 중…","search.results":"개의 결과","search.result":"개의 결과","search.noResults":"결과를 찾을 수 없습니다:","search.hint":"엔티티 이름, 관찰 내용 또는 태그로 검색할 수 있습니다. FTS5 전체 텍스트 + 벡터 유사도 검색을 지원합니다.","search.facts":"개의 사실","browse.title":"모든 기억","browse.manage":"기억 관리","browse.active":"활성","browse.archived":"보관됨","browse.filter":"내용, 유형 또는 태그로 필터링…","browse.refresh":"새로고침","browse.noMemories":"기억이 없습니다","browse.noMatch":"일치하는 기억이 없습니다:","browse.prev":"← 이전","browse.next":"다음 →","browse.archive":"보관","browse.restore":"복원","browse.confirmArchive":"이 기억을 보관하시겠습니까?","browse.moreArchived":"개의 보관된 기억","browse.archiveFailed":"보관하지 못했습니다: {message}","browse.restoreFailed":"복원하지 못했습니다: {message}","analytics.totalMemories":"총 기억 수","analytics.knowledgeFacts":"지식 사실","analytics.connections":"연결","analytics.topics":"주제","analytics.insights":"인사이트","analytics.thisWeek":"이번 주","analytics.new":"개 신규","analytics.stale":"비활성 (30일 이상 미사용)","analytics.archivedLabel":"보관됨","analytics.mostRecalled":"가장 많이 조회됨","health.title":"메모리 건강도","health.excellent":"우수","health.good":"양호","health.fair":"보통","health.poor":"불량","health.activity":"활동","health.quality":"품질","health.freshness":"최신성","health.lessons":"자기 개선","timeline.title":"최근 30일","timeline.created":"생성","timeline.recalled":"호출","value.totalRecalls":"총 호출 횟수","value.lessonsLearned":"학습된 교훈","value.lessonsSaved":"적용된 교훈","value.coverage":"지식 커버리지","cleanup.title":"정리 제안","cleanup.allClean":"메모리가 깨끗합니다. 오래되었거나 중복된 엔티티가 감지되지 않았습니다.","cleanup.staleLabel":"낮은 신뢰도 / 미사용","cleanup.duplicateLabel":"중복 가능성","cleanup.confidence":"신뢰도","cleanup.unused":"미사용","cleanup.entityMeta":"{type} · 신뢰도 {confidence}% · {days}일 미사용","cleanup.consolidateHint":"consolidate 도구를 사용하여 유사 엔티티를 병합하세요.","settings.capabilities":"기능 상태","settings.smartMode":"스마트 모드","settings.core":"기본","settings.embeddings":"임베딩","settings.llmProvider":"LLM 제공자","settings.apiKey":"API 키","settings.model":"모델 (선택)","settings.save":"저장","settings.saving":"저장 중…","settings.saved":"저장되었습니다! LLM 설정을 적용하려면 서버를 재시작하세요.","settings.language":"언어","settings.searchMode":"검색 모드","settings.none":"없음","settings.updates":"업데이트","settings.updateChecking":"업데이트 확인 중…","settings.updateUnavailable":"지금은 업데이트를 확인할 수 없습니다","settings.updateNoSuccessfulChecks":"아직 성공한 업데이트 확인 기록이 없습니다","settings.upToDate":"최신 버전입니다","settings.updateAvailable":"업데이트가 있습니다","settings.updateStale":"표시 중인 캐시 상태가 오래되었을 수 있습니다","settings.updateCachedFallback":"마지막으로 성공한 캐시 결과를 사용 중입니다","settings.currentVersion":"현재 버전","settings.latestVersion":"최신 버전","settings.lastChecked":"마지막 확인","settings.lastAttempted":"마지막 확인 시도","settings.lastSuccessful":"마지막 성공 확인","settings.updateSourceFresh":"방금 확인함","settings.updateSourceCached":"캐시된 결과 사용","settings.updateSourceStale":"오래된 캐시 결과 사용","settings.updateSourceUnavailable":"사용 가능한 캐시 없음","settings.updateCommand":"업데이트 명령","settings.checkNow":"지금 확인","settings.updateLastError":"마지막 확인 오류: {message}","settings.installMethod":"설치 방식","settings.installNpmGlobal":"npm 전역 설치","settings.installNpmLocal":"프로젝트 로컬 패키지 설치","settings.installSourceCheckout":"소스 체크아웃","settings.installUnknown":"알 수 없음","settings.updateGuidanceNpmGlobal":"이 설치는 MeMesh에서 직접 업데이트할 수 있습니다.","settings.updateGuidanceNpmLocal":"이 패키지를 설치한 프로젝트의 패키지 관리자에서 업데이트하세요.","settings.updateGuidanceSourceCheckout":"이 소스 체크아웃은 저장소에서 업데이트한 뒤 다시 빌드하세요.","settings.updateGuidanceUnknown":"MeMesh를 설치한 도구나 작업 흐름으로 이 설치를 업데이트하세요.","graph.entities":"엔티티","graph.relations":"관계","graph.orphans":"고립 노드","graph.search":"노드 검색…","graph.matches":"개 일치","graph.focusMode":"포커스","graph.showAll":"모두 표시","graph.clickHint":"노드를 클릭하여 포커스","graph.ageToday":"오늘","graph.ageDaysAgo":"{count}일 전","graph.ageWeeksAgo":"{count}주 전","lessons.total":"총 교훈","lessons.critical":"심각","lessons.empty":"아직 기록된 교훈이 없습니다. learn 도구를 사용하거나 스마트 모드를 활성화하세요.","lessons.error":"오류","lessons.rootCause":"근본 원인","lessons.fix":"수정 방법","lessons.prevention":"예방 조치","feedback.button":"💬 피드백","feedback.title":"피드백 보내기","feedback.bug":"버그","feedback.feature":"기능 제안","feedback.question":"질문","feedback.placeholder":"피드백을 설명해주세요…","feedback.includeSys":"시스템 정보 포함","feedback.submit":"GitHub Issue 열기","patterns.title":"나의 패턴","patterns.workSchedule":"작업 일정","patterns.peakHours":"피크 시간대","patterns.busiestDays":"가장 바쁜 요일","patterns.tools":"자주 쓰는 도구","patterns.workflow":"워크플로우","patterns.avgSession":"평균 세션","patterns.commitsPerSession":"커밋/세션","patterns.focus":"집중 영역","patterns.strengths":"강점","patterns.learning":"학습 영역","recall.effectiveness":"효과","recall.hits":"적중","recall.misses":"미적중","recall.tracked":"추적 중","recall.hitRate":"리콜 적중률","recall.used":"사용됨","recall.injected":"주입됨","recall.mostEffective":"가장 효과적","recall.leastEffective":"가장 비효과적","recall.noData":"아직 리콜 데이터가 없습니다. 다음 세션 후 추적이 시작됩니다.","recall.summary":"{used}개 사용 / {total}개 주입","analytics.loadFailed":"분석 데이터를 불러오지 못했습니다.","memory.noContent":"(내용 없음)","memory.archivedBadge":"보관됨","memory.factsCount":"사실 {count}개","common.error":"오류","common.loading":"로딩 중…","common.noData":"데이터 없음","errors.unknown":"알 수 없는 오류","errors.timeout":"요청 시간이 초과되었습니다"},pt:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memórias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análise","tab.manage":"Gerenciar","tab.graph":"Grafo","tab.lessons":"Lições","tab.settings":"Configurações","search.title":"Buscar Memórias","search.placeholder":'Buscar memórias… (ex.: "auth", "banco de dados", "bug fix")',"search.button":"Buscar","search.searching":"Buscando…","search.results":"resultados","search.result":"resultado","search.noResults":"Nenhum resultado para","search.hint":"Pesquise por nome da entidade, conteúdo da observação ou tags. Suporta texto completo FTS5 + similaridade vetorial.","search.facts":"fatos","browse.title":"Todas as Memórias","browse.manage":"Gerenciar Memórias","browse.active":"ativas","browse.archived":"arquivadas","browse.filter":"Filtrar por conteúdo, tipo ou tag…","browse.refresh":"Atualizar","browse.noMemories":"Sem memórias ainda","browse.noMatch":"Nenhuma memória corresponde a","browse.prev":"← Anterior","browse.next":"Próximo →","browse.archive":"Arquivar","browse.restore":"Restaurar","browse.confirmArchive":"Arquivar esta memória?","browse.moreArchived":"memórias arquivadas","browse.archiveFailed":"Não foi possível arquivar a memória: {message}","browse.restoreFailed":"Não foi possível restaurar a memória: {message}","analytics.totalMemories":"Total de Memórias","analytics.knowledgeFacts":"Fatos","analytics.connections":"Conexões","analytics.topics":"Tópicos","analytics.insights":"Insights","analytics.thisWeek":"Esta semana","analytics.new":"novas","analytics.stale":"Inativas (30+ dias sem uso)","analytics.archivedLabel":"Arquivadas","analytics.mostRecalled":"Mais Consultadas","health.title":"Saúde da Memória","health.excellent":"Excelente","health.good":"Bom","health.fair":"Regular","health.poor":"Fraco","health.activity":"Atividade","health.quality":"Qualidade","health.freshness":"Frescor","health.lessons":"Auto-melhoria","timeline.title":"Últimos 30 Dias","timeline.created":"Criadas","timeline.recalled":"Recuperadas","value.totalRecalls":"Total de Recuperações","value.lessonsLearned":"Lições Aprendidas","value.lessonsSaved":"Lições Aplicadas","value.coverage":"Cobertura de Conhecimento","cleanup.title":"Sugestões de Limpeza","cleanup.allClean":"Sua memória está limpa. Nenhuma entidade obsoleta ou duplicada detectada.","cleanup.staleLabel":"Baixa confiança / não usado","cleanup.duplicateLabel":"Possíveis duplicatas","cleanup.confidence":"confiança","cleanup.unused":"não usado","cleanup.entityMeta":"{type} · confiança {confidence}% · {days}d sem uso","cleanup.consolidateHint":"Use a ferramenta consolidate para mesclar entidades similares.","settings.capabilities":"Capacidades","settings.smartMode":"Modo Inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Provedor LLM","settings.apiKey":"Chave API","settings.model":"Modelo (opcional)","settings.save":"Salvar","settings.saving":"Salvando…","settings.saved":"Salvo! Reinicie o servidor para aplicar as configurações do LLM.","settings.language":"Idioma","settings.searchMode":"Modo de busca","settings.none":"Nenhum","settings.updates":"Atualizações","settings.updateChecking":"Verificando atualizações…","settings.updateUnavailable":"Não foi possível verificar atualizações agora","settings.updateNoSuccessfulChecks":"Ainda não há verificações de atualização bem-sucedidas","settings.upToDate":"Está na versão mais recente","settings.updateAvailable":"Atualização disponível","settings.updateStale":"O status em cache pode estar desatualizado","settings.updateCachedFallback":"Usando o último resultado em cache com sucesso","settings.currentVersion":"Versão atual","settings.latestVersion":"Versão mais recente","settings.lastChecked":"Última verificação","settings.lastAttempted":"Última tentativa de verificação","settings.lastSuccessful":"Última verificação bem-sucedida","settings.updateSourceFresh":"Verificação atual","settings.updateSourceCached":"Usando resultado em cache","settings.updateSourceStale":"Usando resultado em cache desatualizado","settings.updateSourceUnavailable":"Sem resultado em cache","settings.updateCommand":"Comando de atualização","settings.checkNow":"Verificar agora","settings.updateLastError":"Erro na última verificação: {message}","settings.installMethod":"Forma de instalação","settings.installNpmGlobal":"instalação global via npm","settings.installNpmLocal":"instalação local do projeto","settings.installSourceCheckout":"checkout do código-fonte","settings.installUnknown":"desconhecida","settings.updateGuidanceNpmGlobal":"Esta instalação pode ser atualizada diretamente pelo MeMesh.","settings.updateGuidanceNpmLocal":"Atualize esta instalação pelo gerenciador de pacotes do projeto que instalou o MeMesh.","settings.updateGuidanceSourceCheckout":"Atualize este checkout pelo repositório de código-fonte e faça o build novamente.","settings.updateGuidanceUnknown":"Atualize esta instalação com a ferramenta ou fluxo que instalou o MeMesh.","graph.entities":"Entidades","graph.relations":"Relações","graph.orphans":"Isoladas","graph.search":"Buscar nós…","graph.matches":"correspondências","graph.focusMode":"Foco","graph.showAll":"Mostrar tudo","graph.clickHint":"Clique em um nó para focar","graph.ageToday":"hoje","graph.ageDaysAgo":"há {count}d","graph.ageWeeksAgo":"há {count} sem","lessons.total":"Total de Lições","lessons.critical":"Críticas","lessons.empty":"Nenhuma lição registrada. Use a ferramenta learn ou ative o Modo Inteligente.","lessons.error":"Erro","lessons.rootCause":"Causa Raiz","lessons.fix":"Correção","lessons.prevention":"Prevenção","feedback.button":"💬 Feedback","feedback.title":"Enviar Feedback","feedback.bug":"Bug","feedback.feature":"Sugestão","feedback.question":"Pergunta","feedback.placeholder":"Descreva seu feedback…","feedback.includeSys":"Incluir informações do sistema","feedback.submit":"Abrir GitHub Issue","patterns.title":"Seus Padrões","patterns.workSchedule":"Agenda de Trabalho","patterns.peakHours":"Horários de pico","patterns.busiestDays":"Dias mais movimentados","patterns.tools":"Ferramentas Principais","patterns.workflow":"Fluxo de Trabalho","patterns.avgSession":"Sessão Média","patterns.commitsPerSession":"Commits/Sessão","patterns.focus":"Áreas de Foco","patterns.strengths":"Pontos Fortes","patterns.learning":"Áreas de Aprendizado","recall.effectiveness":"Eficácia","recall.hits":"Acertos","recall.misses":"Erros","recall.tracked":"Rastreados","recall.hitRate":"Taxa de Acerto","recall.used":"usadas","recall.injected":"injetadas","recall.mostEffective":"Mais Eficazes","recall.leastEffective":"Menos Eficazes","recall.noData":"Ainda sem dados de recall. O rastreamento começa após a próxima sessão.","recall.summary":"{used} usadas / {total} injetadas","analytics.loadFailed":"Não foi possível carregar a análise.","memory.noContent":"(sem conteúdo)","memory.archivedBadge":"arquivada","memory.factsCount":"{count} fatos","common.error":"Erro","common.loading":"Carregando…","common.noData":"Sem dados","errors.unknown":"Erro desconhecido","errors.timeout":"A solicitação expirou"},fr:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Connecté","header.disconnected":"Déconnecté","header.connecting":"Connexion…","header.memories":"mémoires","tab.search":"Recherche","tab.browse":"Parcourir","tab.analytics":"Analyse","tab.manage":"Gérer","tab.graph":"Graphe","tab.lessons":"Leçons","tab.settings":"Paramètres","search.title":"Rechercher des mémoires","search.placeholder":"Rechercher vos mémoires… (ex. : « auth », « base de données », « bug fix »)","search.button":"Rechercher","search.searching":"Recherche…","search.results":"résultats","search.result":"résultat","search.noResults":"Aucun résultat pour","search.hint":"Recherchez par nom d’entité, contenu d’observation ou tags. Prend en charge le plein texte FTS5 + la similarité vectorielle.","search.facts":"faits","browse.title":"Toutes les mémoires","browse.manage":"Gérer les mémoires","browse.active":"actives","browse.archived":"archivées","browse.filter":"Filtrer par contenu, type ou tag…","browse.refresh":"Actualiser","browse.noMemories":"Pas encore de mémoires","browse.noMatch":"Aucune mémoire correspondant à","browse.prev":"← Précédent","browse.next":"Suivant →","browse.archive":"Archiver","browse.restore":"Restaurer","browse.confirmArchive":"Archiver cette mémoire ?","browse.moreArchived":"mémoires archivées","browse.archiveFailed":"Impossible d’archiver la mémoire : {message}","browse.restoreFailed":"Impossible de restaurer la mémoire : {message}","analytics.totalMemories":"Total des mémoires","analytics.knowledgeFacts":"Faits de connaissance","analytics.connections":"Connexions","analytics.topics":"Sujets","analytics.insights":"Aperçus","analytics.thisWeek":"Cette semaine","analytics.new":"nouvelles","analytics.stale":"Inactives (30+ jours sans utilisation)","analytics.archivedLabel":"Archivées","analytics.mostRecalled":"Les plus consultées","health.title":"Santé de la mémoire","health.excellent":"Excellent","health.good":"Bon","health.fair":"Moyen","health.poor":"Faible","health.activity":"Activité","health.quality":"Qualité","health.freshness":"Fraîcheur","health.lessons":"Auto-amélioration","timeline.title":"30 derniers jours","timeline.created":"Créés","timeline.recalled":"Rappelés","value.totalRecalls":"Total des rappels","value.lessonsLearned":"Leçons apprises","value.lessonsSaved":"Leçons appliquées","value.coverage":"Couverture des connaissances","cleanup.title":"Suggestions de nettoyage","cleanup.allClean":"Votre mémoire est propre. Aucune entité obsolète ou en double détectée.","cleanup.staleLabel":"Faible confiance / non utilisé","cleanup.duplicateLabel":"Doublons possibles","cleanup.confidence":"confiance","cleanup.unused":"non utilisé","cleanup.entityMeta":"{type} · confiance {confidence}% · {days} j sans usage","cleanup.consolidateHint":"Utilisez l'outil consolidate pour fusionner les entités similaires.","settings.capabilities":"Capacités","settings.smartMode":"Mode intelligent","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Fournisseur LLM","settings.apiKey":"Clé API","settings.model":"Modèle (optionnel)","settings.save":"Enregistrer","settings.saving":"Enregistrement…","settings.saved":"Enregistré ! Redémarrez le serveur pour appliquer les paramètres LLM.","settings.language":"Langue","settings.searchMode":"Mode de recherche","settings.none":"Aucun","settings.updates":"Mises à jour","settings.updateChecking":"Vérification des mises à jour…","settings.updateUnavailable":"Impossible de vérifier les mises à jour pour le moment","settings.updateNoSuccessfulChecks":"Aucune vérification réussie des mises à jour pour le moment","settings.upToDate":"À jour","settings.updateAvailable":"Mise à jour disponible","settings.updateStale":"L’état en cache affiché est peut-être périmé","settings.updateCachedFallback":"Utilisation du dernier résultat en cache réussi","settings.currentVersion":"Version actuelle","settings.latestVersion":"Dernière version","settings.lastChecked":"Dernière vérification","settings.lastAttempted":"Dernière tentative de vérification","settings.lastSuccessful":"Dernière vérification réussie","settings.updateSourceFresh":"Vérification en direct","settings.updateSourceCached":"Résultat en cache","settings.updateSourceStale":"Résultat en cache périmé","settings.updateSourceUnavailable":"Aucun résultat en cache","settings.updateCommand":"Commande de mise à jour","settings.checkNow":"Vérifier maintenant","settings.updateLastError":"Erreur lors de la dernière vérification : {message}","settings.installMethod":"Méthode d’installation","settings.installNpmGlobal":"installation npm globale","settings.installNpmLocal":"installation locale au projet","settings.installSourceCheckout":"checkout du dépôt source","settings.installUnknown":"inconnue","settings.updateGuidanceNpmGlobal":"Cette installation peut être mise à jour directement depuis MeMesh.","settings.updateGuidanceNpmLocal":"Mettez cette installation à jour via le gestionnaire de paquets du projet qui a installé MeMesh.","settings.updateGuidanceSourceCheckout":"Mettez ce checkout source à jour depuis son dépôt puis reconstruisez-le.","settings.updateGuidanceUnknown":"Mettez cette installation à jour avec l’outil ou le flux qui a installé MeMesh.","graph.entities":"Entités","graph.relations":"Relations","graph.orphans":"Orphelins","graph.search":"Rechercher des nœuds…","graph.matches":"correspondances","graph.focusMode":"Focus","graph.showAll":"Tout afficher","graph.clickHint":"Cliquez sur un nœud pour le cibler","graph.ageToday":"aujourd’hui","graph.ageDaysAgo":"il y a {count} j","graph.ageWeeksAgo":"il y a {count} sem.","lessons.total":"Total des leçons","lessons.critical":"Critiques","lessons.empty":"Aucune leçon enregistrée. Utilisez l'outil learn ou activez le Mode intelligent.","lessons.error":"Erreur","lessons.rootCause":"Cause racine","lessons.fix":"Correction","lessons.prevention":"Prévention","feedback.button":"💬 Retour","feedback.title":"Envoyer un retour","feedback.bug":"Bug","feedback.feature":"Suggestion","feedback.question":"Question","feedback.placeholder":"Décrivez votre retour…","feedback.includeSys":"Inclure les infos système","feedback.submit":"Ouvrir un GitHub Issue","patterns.title":"Vos habitudes","patterns.workSchedule":"Planning de travail","patterns.peakHours":"Heures de pointe","patterns.busiestDays":"Jours les plus chargés","patterns.tools":"Outils principaux","patterns.workflow":"Flux de travail","patterns.avgSession":"Session moyenne","patterns.commitsPerSession":"Commits/Session","patterns.focus":"Domaines de focus","patterns.strengths":"Points forts","patterns.learning":"Domaines d'apprentissage","recall.effectiveness":"Efficacité","recall.hits":"Succès","recall.misses":"Échecs","recall.tracked":"Suivis","recall.hitRate":"Taux de succès","recall.used":"utilisées","recall.injected":"injectées","recall.mostEffective":"Plus efficaces","recall.leastEffective":"Moins efficaces","recall.noData":"Pas encore de données. Le suivi commence après la prochaine session.","recall.summary":"{used} utilisées / {total} injectées","analytics.loadFailed":"Impossible de charger les analyses.","memory.noContent":"(aucun contenu)","memory.archivedBadge":"archivée","memory.factsCount":"{count} faits","common.error":"Erreur","common.loading":"Chargement…","common.noData":"Aucune donnée","errors.unknown":"Erreur inconnue","errors.timeout":"La requête a expiré"},de:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Verbunden","header.disconnected":"Getrennt","header.connecting":"Verbinden…","header.memories":"Erinnerungen","tab.search":"Suche","tab.browse":"Durchsuchen","tab.analytics":"Analyse","tab.manage":"Verwalten","tab.graph":"Graph","tab.lessons":"Lektionen","tab.settings":"Einstellungen","search.title":"Erinnerungen suchen","search.placeholder":'Erinnerungen suchen… (z.B. „auth", „Datenbank", „Bug Fix")',"search.button":"Suchen","search.searching":"Suche läuft…","search.results":"Ergebnisse","search.result":"Ergebnis","search.noResults":"Keine Ergebnisse für","search.hint":"Suchen Sie nach Entitätsname, Beobachtungsinhalt oder Tags. Unterstützt FTS5-Volltext + Vektorähnlichkeit.","search.facts":"Fakten","browse.title":"Alle Erinnerungen","browse.manage":"Erinnerungen verwalten","browse.active":"aktiv","browse.archived":"archiviert","browse.filter":"Nach Inhalt, Typ oder Tag filtern…","browse.refresh":"Aktualisieren","browse.noMemories":"Noch keine Erinnerungen","browse.noMatch":"Keine passenden Erinnerungen:","browse.prev":"← Zurück","browse.next":"Weiter →","browse.archive":"Archivieren","browse.restore":"Wiederherstellen","browse.confirmArchive":"Diese Erinnerung archivieren?","browse.moreArchived":"archivierte Erinnerungen","browse.archiveFailed":"Speicher konnte nicht archiviert werden: {message}","browse.restoreFailed":"Speicher konnte nicht wiederhergestellt werden: {message}","analytics.totalMemories":"Erinnerungen gesamt","analytics.knowledgeFacts":"Wissensfakten","analytics.connections":"Verbindungen","analytics.topics":"Themen","analytics.insights":"Einblicke","analytics.thisWeek":"Diese Woche","analytics.new":"neue","analytics.stale":"Inaktiv (30+ Tage ungenutzt)","analytics.archivedLabel":"Archiviert","analytics.mostRecalled":"Am häufigsten abgerufen","health.title":"Speichergesundheit","health.excellent":"Ausgezeichnet","health.good":"Gut","health.fair":"Mittel","health.poor":"Schlecht","health.activity":"Aktivität","health.quality":"Qualität","health.freshness":"Frische","health.lessons":"Selbstverbesserung","timeline.title":"Letzte 30 Tage","timeline.created":"Erstellt","timeline.recalled":"Abgerufen","value.totalRecalls":"Gesamtabrufe","value.lessonsLearned":"Gelernte Lektionen","value.lessonsSaved":"Angewendete Lektionen","value.coverage":"Wissensabdeckung","cleanup.title":"Aufräumvorschläge","cleanup.allClean":"Ihr Speicher ist sauber. Keine veralteten oder doppelten Entitäten erkannt.","cleanup.staleLabel":"Niedrige Konfidenz / ungenutzt","cleanup.duplicateLabel":"Mögliche Duplikate","cleanup.confidence":"Konfidenz","cleanup.unused":"ungenutzt","cleanup.entityMeta":"{type} · Konfidenz {confidence}% · {days} Tage ungenutzt","cleanup.consolidateHint":"Verwenden Sie das Consolidate-Tool um ähnliche Entitäten zusammenzuführen.","settings.capabilities":"Fähigkeiten","settings.smartMode":"Smart-Modus","settings.core":"Basis","settings.embeddings":"Embeddings","settings.llmProvider":"LLM-Anbieter","settings.apiKey":"API-Schlüssel","settings.model":"Modell (optional)","settings.save":"Speichern","settings.saving":"Speichern…","settings.saved":"Gespeichert! Server neu starten, um LLM-Einstellungen anzuwenden.","settings.language":"Sprache","settings.searchMode":"Suchmodus","settings.none":"Keine","settings.updates":"Updates","settings.updateChecking":"Suche nach Updates…","settings.updateUnavailable":"Updates können gerade nicht geprüft werden","settings.updateNoSuccessfulChecks":"Es gibt noch keine erfolgreiche Update-Prüfung","settings.upToDate":"Auf dem neuesten Stand","settings.updateAvailable":"Update verfügbar","settings.updateStale":"Der angezeigte Cache-Status ist möglicherweise veraltet","settings.updateCachedFallback":"Es wird das zuletzt erfolgreich gecachte Ergebnis verwendet","settings.currentVersion":"Aktuelle Version","settings.latestVersion":"Neueste Version","settings.lastChecked":"Zuletzt geprüft","settings.lastAttempted":"Letzter Prüfversuch","settings.lastSuccessful":"Letzte erfolgreiche Prüfung","settings.updateSourceFresh":"Frische Prüfung","settings.updateSourceCached":"Zwischengespeichertes Ergebnis","settings.updateSourceStale":"Veraltetes Cache-Ergebnis","settings.updateSourceUnavailable":"Kein Cache-Ergebnis","settings.updateCommand":"Update-Befehl","settings.checkNow":"Jetzt prüfen","settings.updateLastError":"Fehler bei der letzten Prüfung: {message}","settings.installMethod":"Installationsart","settings.installNpmGlobal":"globale npm-Installation","settings.installNpmLocal":"projektlokale Paketinstallation","settings.installSourceCheckout":"Source-Checkout","settings.installUnknown":"unbekannt","settings.updateGuidanceNpmGlobal":"Diese Installation kann direkt aus MeMesh heraus aktualisiert werden.","settings.updateGuidanceNpmLocal":"Aktualisiere diese Installation über den Paketmanager des Projekts, das MeMesh installiert hat.","settings.updateGuidanceSourceCheckout":"Aktualisiere diesen Source-Checkout aus dem Repository und baue ihn neu.","settings.updateGuidanceUnknown":"Aktualisiere diese Installation mit dem Tool oder Ablauf, der MeMesh installiert hat.","graph.entities":"Entitäten","graph.relations":"Beziehungen","graph.orphans":"Waisen","graph.search":"Knoten suchen…","graph.matches":"Treffer","graph.focusMode":"Fokus","graph.showAll":"Alle anzeigen","graph.clickHint":"Knoten anklicken zum Fokussieren","graph.ageToday":"heute","graph.ageDaysAgo":"vor {count} Tagen","graph.ageWeeksAgo":"vor {count} Wochen","lessons.total":"Lektionen gesamt","lessons.critical":"Kritisch","lessons.empty":"Noch keine Lektionen erfasst. Verwenden Sie das Learn-Tool oder aktivieren Sie den Smart-Modus.","lessons.error":"Fehler","lessons.rootCause":"Ursache","lessons.fix":"Lösung","lessons.prevention":"Prävention","feedback.button":"💬 Feedback","feedback.title":"Feedback senden","feedback.bug":"Fehler","feedback.feature":"Vorschlag","feedback.question":"Frage","feedback.placeholder":"Beschreiben Sie Ihr Feedback…","feedback.includeSys":"Systeminformationen einschließen","feedback.submit":"GitHub Issue öffnen","patterns.title":"Ihre Muster","patterns.workSchedule":"Arbeitsplan","patterns.peakHours":"Spitzenzeiten","patterns.busiestDays":"Aktivste Tage","patterns.tools":"Top-Werkzeuge","patterns.workflow":"Arbeitsablauf","patterns.avgSession":"Durchschn. Sitzung","patterns.commitsPerSession":"Commits/Sitzung","patterns.focus":"Schwerpunkte","patterns.strengths":"Stärken","patterns.learning":"Lernbereiche","recall.effectiveness":"Effektivität","recall.hits":"Treffer","recall.misses":"Fehltreffer","recall.tracked":"Verfolgt","recall.hitRate":"Trefferquote","recall.used":"verwendet","recall.injected":"injiziert","recall.mostEffective":"Am effektivsten","recall.leastEffective":"Am wenigsten effektiv","recall.noData":"Noch keine Abrufdaten. Die Verfolgung beginnt nach der nächsten Sitzung.","recall.summary":"{used} verwendet / {total} injiziert","analytics.loadFailed":"Analysen konnten nicht geladen werden.","memory.noContent":"(kein Inhalt)","memory.archivedBadge":"archiviert","memory.factsCount":"{count} Fakten","common.error":"Fehler","common.loading":"Laden…","common.noData":"Keine Daten","errors.unknown":"Unbekannter Fehler","errors.timeout":"Zeitüberschreitung der Anfrage"},vi:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Đã kết nối","header.disconnected":"Mất kết nối","header.connecting":"Đang kết nối…","header.memories":"ký ức","tab.search":"Tìm kiếm","tab.browse":"Duyệt","tab.analytics":"Phân tích","tab.manage":"Quản lý","tab.graph":"Đồ thị","tab.lessons":"Bài học","tab.settings":"Cài đặt","search.title":"Tìm kiếm ký ức","search.placeholder":'Tìm kiếm ký ức… (ví dụ: "auth", "cơ sở dữ liệu", "sửa lỗi")',"search.button":"Tìm kiếm","search.searching":"Đang tìm…","search.results":"kết quả","search.result":"kết quả","search.noResults":"Không tìm thấy kết quả cho","search.hint":"Tìm theo tên thực thể, nội dung quan sát hoặc thẻ. Hỗ trợ tìm kiếm toàn văn FTS5 + độ tương đồng vector.","search.facts":"sự kiện","browse.title":"Tất cả ký ức","browse.manage":"Quản lý ký ức","browse.active":"hoạt động","browse.archived":"đã lưu trữ","browse.filter":"Lọc theo nội dung, loại hoặc thẻ…","browse.refresh":"Làm mới","browse.noMemories":"Chưa có ký ức","browse.noMatch":"Không có ký ức phù hợp:","browse.prev":"← Trước","browse.next":"Tiếp →","browse.archive":"Lưu trữ","browse.restore":"Khôi phục","browse.confirmArchive":"Lưu trữ ký ức này?","browse.moreArchived":"ký ức đã lưu trữ","browse.archiveFailed":"Không thể lưu trữ ký ức: {message}","browse.restoreFailed":"Không thể khôi phục ký ức: {message}","analytics.totalMemories":"Tổng ký ức","analytics.knowledgeFacts":"Sự kiện tri thức","analytics.connections":"Kết nối","analytics.topics":"Chủ đề","analytics.insights":"Thông tin","analytics.thisWeek":"Tuần này","analytics.new":"mới","analytics.stale":"Không hoạt động (30+ ngày)","analytics.archivedLabel":"Đã lưu trữ","analytics.mostRecalled":"Được truy xuất nhiều nhất","health.title":"Sức khỏe bộ nhớ","health.excellent":"Xuất sắc","health.good":"Tốt","health.fair":"Trung bình","health.poor":"Kém","health.activity":"Hoạt động","health.quality":"Chất lượng","health.freshness":"Độ mới","health.lessons":"Tự cải thiện","timeline.title":"30 ngày qua","timeline.created":"Đã tạo","timeline.recalled":"Đã gọi lại","value.totalRecalls":"Tổng số lần gọi lại","value.lessonsLearned":"Bài học đã rút ra","value.lessonsSaved":"Bài học đã áp dụng","value.coverage":"Phạm vi kiến thức","cleanup.title":"Gợi ý dọn dẹp","cleanup.allClean":"Bộ nhớ của bạn sạch. Không phát hiện thực thể lỗi thời hoặc trùng lặp.","cleanup.staleLabel":"Độ tin cậy thấp / chưa sử dụng","cleanup.duplicateLabel":"Có thể trùng lặp","cleanup.confidence":"độ tin cậy","cleanup.unused":"chưa sử dụng","cleanup.entityMeta":"{type} · độ tin cậy {confidence}% · không dùng {days} ngày","cleanup.consolidateHint":"Sử dụng công cụ consolidate để hợp nhất các thực thể tương tự.","settings.capabilities":"Khả năng","settings.smartMode":"Chế độ thông minh","settings.core":"Cơ bản","settings.embeddings":"Embeddings","settings.llmProvider":"Nhà cung cấp LLM","settings.apiKey":"Khóa API","settings.model":"Mô hình (tùy chọn)","settings.save":"Lưu","settings.saving":"Đang lưu…","settings.saved":"Đã lưu! Khởi động lại server để áp dụng cài đặt LLM.","settings.language":"Ngôn ngữ","settings.searchMode":"Chế độ tìm kiếm","settings.none":"Không có","settings.updates":"Cập nhật","settings.updateChecking":"Đang kiểm tra bản cập nhật…","settings.updateUnavailable":"Hiện chưa thể kiểm tra bản cập nhật","settings.updateNoSuccessfulChecks":"Chưa có lần kiểm tra cập nhật nào thành công","settings.upToDate":"Đã là bản mới nhất","settings.updateAvailable":"Có bản cập nhật mới","settings.updateStale":"Trạng thái lưu đệm hiển thị có thể đã cũ","settings.updateCachedFallback":"Đang dùng kết quả lưu đệm thành công gần nhất","settings.currentVersion":"Phiên bản hiện tại","settings.latestVersion":"Phiên bản mới nhất","settings.lastChecked":"Lần kiểm tra gần nhất","settings.lastAttempted":"Lần thử kiểm tra gần nhất","settings.lastSuccessful":"Lần kiểm tra thành công gần nhất","settings.updateSourceFresh":"Kiểm tra mới","settings.updateSourceCached":"Đang dùng kết quả lưu đệm","settings.updateSourceStale":"Đang dùng kết quả lưu đệm đã cũ","settings.updateSourceUnavailable":"Không có kết quả lưu đệm","settings.updateCommand":"Lệnh cập nhật","settings.checkNow":"Kiểm tra ngay","settings.updateLastError":"Lỗi kiểm tra gần nhất: {message}","settings.installMethod":"Kiểu cài đặt","settings.installNpmGlobal":"cài đặt npm toàn cục","settings.installNpmLocal":"cài đặt cục bộ trong dự án","settings.installSourceCheckout":"bản checkout mã nguồn","settings.installUnknown":"không rõ","settings.updateGuidanceNpmGlobal":"Bản cài đặt này có thể được cập nhật trực tiếp từ MeMesh.","settings.updateGuidanceNpmLocal":"Hãy cập nhật bản cài đặt này bằng trình quản lý gói của dự án đã cài MeMesh.","settings.updateGuidanceSourceCheckout":"Hãy cập nhật bản checkout mã nguồn này từ kho lưu trữ rồi build lại.","settings.updateGuidanceUnknown":"Hãy cập nhật bản cài đặt này bằng công cụ hoặc quy trình đã dùng để cài MeMesh.","graph.entities":"Thực thể","graph.relations":"Quan hệ","graph.orphans":"Nút cô lập","graph.search":"Tìm kiếm nút…","graph.matches":"kết quả","graph.focusMode":"Tập trung","graph.showAll":"Hiển thị tất cả","graph.clickHint":"Nhấp vào nút để tập trung","graph.ageToday":"hôm nay","graph.ageDaysAgo":"{count} ngày trước","graph.ageWeeksAgo":"{count} tuần trước","lessons.total":"Tổng bài học","lessons.critical":"Nghiêm trọng","lessons.empty":"Chưa có bài học nào được ghi nhận. Sử dụng công cụ learn hoặc bật Chế độ thông minh.","lessons.error":"Lỗi","lessons.rootCause":"Nguyên nhân gốc","lessons.fix":"Cách sửa","lessons.prevention":"Phòng ngừa","feedback.button":"💬 Phản hồi","feedback.title":"Gửi phản hồi","feedback.bug":"Lỗi","feedback.feature":"Đề xuất","feedback.question":"Câu hỏi","feedback.placeholder":"Mô tả phản hồi của bạn…","feedback.includeSys":"Kèm thông tin hệ thống","feedback.submit":"Mở GitHub Issue","patterns.title":"Kiểu mẫu của bạn","patterns.workSchedule":"Lịch làm việc","patterns.peakHours":"Giờ cao điểm","patterns.busiestDays":"Ngày bận rộn nhất","patterns.tools":"Công cụ hàng đầu","patterns.workflow":"Quy trình làm việc","patterns.avgSession":"Phiên trung bình","patterns.commitsPerSession":"Commits/Phiên","patterns.focus":"Lĩnh vực tập trung","patterns.strengths":"Điểm mạnh","patterns.learning":"Lĩnh vực học tập","recall.effectiveness":"Hiệu quả","recall.hits":"Trúng","recall.misses":"Trượt","recall.tracked":"Theo dõi","recall.hitRate":"Tỷ lệ trúng","recall.used":"đã dùng","recall.injected":"đã tiêm","recall.mostEffective":"Hiệu quả nhất","recall.leastEffective":"Kém hiệu quả nhất","recall.noData":"Chưa có dữ liệu. Theo dõi sẽ bắt đầu sau phiên tiếp theo.","recall.summary":"đã dùng {used} / đã đưa vào {total}","analytics.loadFailed":"Không thể tải dữ liệu phân tích.","memory.noContent":"(không có nội dung)","memory.archivedBadge":"đã lưu trữ","memory.factsCount":"{count} dữ kiện","common.error":"Lỗi","common.loading":"Đang tải…","common.noData":"Không có dữ liệu","errors.unknown":"Lỗi không xác định","errors.timeout":"Yêu cầu đã hết thời gian chờ"},es:{"brand.subtitle":"powered by pcircle.ai","header.connected":"Conectado","header.disconnected":"Desconectado","header.connecting":"Conectando…","header.memories":"memorias","tab.search":"Buscar","tab.browse":"Explorar","tab.analytics":"Análisis","tab.manage":"Gestionar","tab.graph":"Grafo","tab.lessons":"Lecciones","tab.settings":"Configuración","search.title":"Buscar memorias","search.placeholder":'Buscar memorias… (ej.: "auth", "base de datos", "corrección")',"search.button":"Buscar","search.searching":"Buscando…","search.results":"resultados","search.result":"resultado","search.noResults":"Sin resultados para","search.hint":"Busca por nombre de entidad, contenido de observación o etiquetas. Admite texto completo FTS5 + similitud vectorial.","search.facts":"hechos","browse.title":"Todas las memorias","browse.manage":"Gestionar memorias","browse.active":"activas","browse.archived":"archivadas","browse.filter":"Filtrar por contenido, tipo o etiqueta…","browse.refresh":"Actualizar","browse.noMemories":"Aún no hay memorias","browse.noMatch":"No hay memorias que coincidan con","browse.prev":"← Anterior","browse.next":"Siguiente →","browse.archive":"Archivar","browse.restore":"Restaurar","browse.confirmArchive":"¿Archivar esta memoria?","browse.moreArchived":"memorias archivadas","browse.archiveFailed":"No se pudo archivar la memoria: {message}","browse.restoreFailed":"No se pudo restaurar la memoria: {message}","analytics.totalMemories":"Total de memorias","analytics.knowledgeFacts":"Hechos","analytics.connections":"Conexiones","analytics.topics":"Temas","analytics.insights":"Información","analytics.thisWeek":"Esta semana","analytics.new":"nuevas","analytics.stale":"Inactivas (30+ días sin uso)","analytics.archivedLabel":"Archivadas","analytics.mostRecalled":"Más consultadas","health.title":"Salud de la memoria","health.excellent":"Excelente","health.good":"Bueno","health.fair":"Regular","health.poor":"Deficiente","health.activity":"Actividad","health.quality":"Calidad","health.freshness":"Frescura","health.lessons":"Auto-mejora","timeline.title":"Últimos 30 días","timeline.created":"Creados","timeline.recalled":"Recuperados","value.totalRecalls":"Total de recuperaciones","value.lessonsLearned":"Lecciones aprendidas","value.lessonsSaved":"Lecciones aplicadas","value.coverage":"Cobertura de conocimiento","cleanup.title":"Sugerencias de limpieza","cleanup.allClean":"Tu memoria está limpia. No se detectaron entidades obsoletas o duplicadas.","cleanup.staleLabel":"Baja confianza / no usado","cleanup.duplicateLabel":"Posibles duplicados","cleanup.confidence":"confianza","cleanup.unused":"no usado","cleanup.entityMeta":"{type} · confianza {confidence}% · {days} d sin uso","cleanup.consolidateHint":"Usa la herramienta consolidate para fusionar entidades similares.","settings.capabilities":"Capacidades","settings.smartMode":"Modo inteligente","settings.core":"Base","settings.embeddings":"Embeddings","settings.llmProvider":"Proveedor LLM","settings.apiKey":"Clave API","settings.model":"Modelo (opcional)","settings.save":"Guardar","settings.saving":"Guardando…","settings.saved":"¡Guardado! Reinicie el servidor para aplicar la configuración LLM.","settings.language":"Idioma","settings.searchMode":"Modo de búsqueda","settings.none":"Ninguno","settings.updates":"Actualizaciones","settings.updateChecking":"Buscando actualizaciones…","settings.updateUnavailable":"No se pudo comprobar si hay actualizaciones ahora","settings.updateNoSuccessfulChecks":"Aún no hay comprobaciones de actualización correctas","settings.upToDate":"Ya está al día","settings.updateAvailable":"Actualización disponible","settings.updateStale":"El estado en caché mostrado puede estar desactualizado","settings.updateCachedFallback":"Usando el último resultado en caché correcto","settings.currentVersion":"Versión actual","settings.latestVersion":"Última versión","settings.lastChecked":"Última comprobación","settings.lastAttempted":"Último intento de comprobación","settings.lastSuccessful":"Última comprobación correcta","settings.updateSourceFresh":"Comprobación reciente","settings.updateSourceCached":"Usando resultado en caché","settings.updateSourceStale":"Usando resultado en caché desactualizado","settings.updateSourceUnavailable":"Sin resultado en caché","settings.updateCommand":"Comando de actualización","settings.checkNow":"Comprobar ahora","settings.updateLastError":"Error de la última comprobación: {message}","settings.installMethod":"Método de instalación","settings.installNpmGlobal":"instalación global con npm","settings.installNpmLocal":"instalación local del proyecto","settings.installSourceCheckout":"checkout del código fuente","settings.installUnknown":"desconocido","settings.updateGuidanceNpmGlobal":"Esta instalación se puede actualizar directamente desde MeMesh.","settings.updateGuidanceNpmLocal":"Actualiza esta instalación desde el gestor de paquetes del proyecto que instaló MeMesh.","settings.updateGuidanceSourceCheckout":"Actualiza este checkout desde su repositorio y vuelve a compilar.","settings.updateGuidanceUnknown":"Actualiza esta instalación con la herramienta o el flujo que instaló MeMesh.","graph.entities":"Entidades","graph.relations":"Relaciones","graph.orphans":"Huérfanos","graph.search":"Buscar nodos…","graph.matches":"coincidencias","graph.focusMode":"Enfoque","graph.showAll":"Mostrar todo","graph.clickHint":"Haz clic en un nodo para enfocar","graph.ageToday":"hoy","graph.ageDaysAgo":"hace {count} d","graph.ageWeeksAgo":"hace {count} sem","lessons.total":"Total de lecciones","lessons.critical":"Críticas","lessons.empty":"No hay lecciones registradas. Usa la herramienta learn o activa el Modo inteligente.","lessons.error":"Error","lessons.rootCause":"Causa raíz","lessons.fix":"Corrección","lessons.prevention":"Prevención","feedback.button":"💬 Comentarios","feedback.title":"Enviar comentarios","feedback.bug":"Error","feedback.feature":"Sugerencia","feedback.question":"Pregunta","feedback.placeholder":"Describe tu comentario…","feedback.includeSys":"Incluir información del sistema","feedback.submit":"Abrir GitHub Issue","patterns.title":"Tus patrones","patterns.workSchedule":"Horario de trabajo","patterns.peakHours":"Horas pico","patterns.busiestDays":"Días más ocupados","patterns.tools":"Herramientas principales","patterns.workflow":"Flujo de trabajo","patterns.avgSession":"Sesión promedio","patterns.commitsPerSession":"Commits/Sesión","patterns.focus":"Áreas de enfoque","patterns.strengths":"Fortalezas","patterns.learning":"Áreas de aprendizaje","recall.effectiveness":"Eficacia","recall.hits":"Aciertos","recall.misses":"Fallos","recall.tracked":"Rastreados","recall.hitRate":"Tasa de acierto","recall.used":"usadas","recall.injected":"inyectadas","recall.mostEffective":"Más eficaces","recall.leastEffective":"Menos eficaces","recall.noData":"Aún sin datos. El seguimiento comienza después de la próxima sesión.","recall.summary":"{used} usadas / {total} inyectadas","analytics.loadFailed":"No se pudieron cargar las analíticas.","memory.noContent":"(sin contenido)","memory.archivedBadge":"archivada","memory.factsCount":"{count} datos","common.error":"Error","common.loading":"Cargando…","common.noData":"Sin datos","errors.unknown":"Error desconocido","errors.timeout":"La solicitud agotó el tiempo de espera"},th:{"brand.subtitle":"powered by pcircle.ai","header.connected":"เชื่อมต่อแล้ว","header.disconnected":"ไม่ได้เชื่อมต่อ","header.connecting":"กำลังเชื่อมต่อ…","header.memories":"ความทรงจำ","tab.search":"ค้นหา","tab.browse":"เรียกดู","tab.analytics":"วิเคราะห์","tab.manage":"จัดการ","tab.graph":"กราฟ","tab.lessons":"บทเรียน","tab.settings":"ตั้งค่า","search.title":"ค้นหาความทรงจำ","search.placeholder":'ค้นหาความทรงจำ… (เช่น "auth", "ฐานข้อมูล", "แก้บั๊ก")',"search.button":"ค้นหา","search.searching":"กำลังค้นหา…","search.results":"ผลลัพธ์","search.result":"ผลลัพธ์","search.noResults":"ไม่พบผลลัพธ์สำหรับ","search.hint":"ค้นหาตามชื่อเอนทิตี เนื้อหาข้อสังเกต หรือแท็ก รองรับการค้นหาข้อความเต็ม FTS5 + ความคล้ายคลึงแบบเวกเตอร์","search.facts":"ข้อเท็จจริง","browse.title":"ความทรงจำทั้งหมด","browse.manage":"จัดการความทรงจำ","browse.active":"ใช้งานอยู่","browse.archived":"เก็บถาวร","browse.filter":"กรองตามเนื้อหา ประเภท หรือแท็ก…","browse.refresh":"รีเฟรช","browse.noMemories":"ยังไม่มีความทรงจำ","browse.noMatch":"ไม่พบความทรงจำที่ตรงกัน:","browse.prev":"← ก่อนหน้า","browse.next":"ถัดไป →","browse.archive":"เก็บถาวร","browse.restore":"กู้คืน","browse.confirmArchive":"เก็บถาวรความทรงจำนี้?","browse.moreArchived":"ความทรงจำที่เก็บถาวร","browse.archiveFailed":"เก็บถาวรไม่สำเร็จ: {message}","browse.restoreFailed":"กู้คืนไม่สำเร็จ: {message}","analytics.totalMemories":"ความทรงจำทั้งหมด","analytics.knowledgeFacts":"ข้อเท็จจริง","analytics.connections":"การเชื่อมต่อ","analytics.topics":"หัวข้อ","analytics.insights":"ข้อมูลเชิงลึก","analytics.thisWeek":"สัปดาห์นี้","analytics.new":"ใหม่","analytics.stale":"ไม่ได้ใช้งาน (30+ วัน)","analytics.archivedLabel":"เก็บถาวร","analytics.mostRecalled":"ถูกเรียกดูมากที่สุด","health.title":"สุขภาพหน่วยความจำ","health.excellent":"ยอดเยี่ยม","health.good":"ดี","health.fair":"พอใช้","health.poor":"ไม่ดี","health.activity":"กิจกรรม","health.quality":"คุณภาพ","health.freshness":"ความสดใหม่","health.lessons":"การพัฒนาตนเอง","timeline.title":"30 วันที่ผ่านมา","timeline.created":"สร้างแล้ว","timeline.recalled":"เรียกคืนแล้ว","value.totalRecalls":"การเรียกคืนทั้งหมด","value.lessonsLearned":"บทเรียนที่เรียนรู้","value.lessonsSaved":"บทเรียนที่นำไปใช้","value.coverage":"ความครอบคลุมความรู้","cleanup.title":"คำแนะนำการทำความสะอาด","cleanup.allClean":"หน่วยความจำของคุณสะอาด ไม่พบเอนทิตีที่ล้าสมัยหรือซ้ำซ้อน","cleanup.staleLabel":"ความเชื่อมั่นต่ำ / ไม่ได้ใช้","cleanup.duplicateLabel":"อาจซ้ำซ้อน","cleanup.confidence":"ความเชื่อมั่น","cleanup.unused":"ไม่ได้ใช้","cleanup.entityMeta":"{type} · ความเชื่อมั่น {confidence}% · ไม่ได้ใช้มา {days} วัน","cleanup.consolidateHint":"ใช้เครื่องมือ consolidate เพื่อรวมเอนทิตีที่คล้ายกัน","settings.capabilities":"ความสามารถ","settings.smartMode":"โหมดอัจฉริยะ","settings.core":"พื้นฐาน","settings.embeddings":"Embeddings","settings.llmProvider":"ผู้ให้บริการ LLM","settings.apiKey":"คีย์ API","settings.model":"โมเดล (ไม่บังคับ)","settings.save":"บันทึก","settings.saving":"กำลังบันทึก…","settings.saved":"บันทึกแล้ว! รีสตาร์ทเซิร์ฟเวอร์เพื่อใช้การตั้งค่า LLM","settings.language":"ภาษา","settings.searchMode":"โหมดการค้นหา","settings.none":"ไม่มี","settings.updates":"การอัปเดต","settings.updateChecking":"กำลังตรวจหาการอัปเดต…","settings.updateUnavailable":"ไม่สามารถตรวจสอบการอัปเดตได้ในขณะนี้","settings.updateNoSuccessfulChecks":"ยังไม่มีการตรวจสอบอัปเดตที่สำเร็จ","settings.upToDate":"เป็นเวอร์ชันล่าสุดแล้ว","settings.updateAvailable":"มีเวอร์ชันอัปเดต","settings.updateStale":"สถานะแคชที่แสดงอาจล้าสมัยแล้ว","settings.updateCachedFallback":"กำลังใช้ผลลัพธ์แคชล่าสุดที่ตรวจสอบสำเร็จ","settings.currentVersion":"เวอร์ชันปัจจุบัน","settings.latestVersion":"เวอร์ชันล่าสุด","settings.lastChecked":"ตรวจสอบล่าสุด","settings.lastAttempted":"พยายามตรวจสอบล่าสุด","settings.lastSuccessful":"ตรวจสอบสำเร็จล่าสุด","settings.updateSourceFresh":"ตรวจสอบสด","settings.updateSourceCached":"ใช้ผลลัพธ์จากแคช","settings.updateSourceStale":"ใช้ผลลัพธ์แคชที่ล้าสมัย","settings.updateSourceUnavailable":"ไม่มีผลลัพธ์แคช","settings.updateCommand":"คำสั่งอัปเดต","settings.checkNow":"ตรวจสอบตอนนี้","settings.updateLastError":"ข้อผิดพลาดจากการตรวจสอบล่าสุด: {message}","settings.installMethod":"วิธีติดตั้ง","settings.installNpmGlobal":"ติดตั้ง npm แบบทั้งระบบ","settings.installNpmLocal":"ติดตั้งภายในโปรเจกต์","settings.installSourceCheckout":"เช็กเอาต์ซอร์สโค้ด","settings.installUnknown":"ไม่ทราบ","settings.updateGuidanceNpmGlobal":"การติดตั้งนี้อัปเดตจาก MeMesh ได้โดยตรง","settings.updateGuidanceNpmLocal":"ให้อัปเดตการติดตั้งนี้ผ่านตัวจัดการแพ็กเกจของโปรเจกต์ที่ติดตั้ง MeMesh","settings.updateGuidanceSourceCheckout":"ให้อัปเดต source checkout นี้จาก repository แล้ว build ใหม่","settings.updateGuidanceUnknown":"ให้อัปเดตการติดตั้งนี้ด้วยเครื่องมือหรือขั้นตอนที่ใช้ติดตั้ง MeMesh","graph.entities":"เอนทิตี","graph.relations":"ความสัมพันธ์","graph.orphans":"โหนดโดดเดี่ยว","graph.search":"ค้นหาโหนด…","graph.matches":"รายการที่ตรงกัน","graph.focusMode":"โฟกัส","graph.showAll":"แสดงทั้งหมด","graph.clickHint":"คลิกโหนดเพื่อโฟกัส","graph.ageToday":"วันนี้","graph.ageDaysAgo":"{count} วันที่แล้ว","graph.ageWeeksAgo":"{count} สัปดาห์ที่แล้ว","lessons.total":"บทเรียนทั้งหมด","lessons.critical":"วิกฤต","lessons.empty":"ยังไม่มีบทเรียนที่บันทึกไว้ ใช้เครื่องมือ learn หรือเปิดใช้โหมดอัจฉริยะ","lessons.error":"ข้อผิดพลาด","lessons.rootCause":"สาเหตุหลัก","lessons.fix":"วิธีแก้ไข","lessons.prevention":"การป้องกัน","feedback.button":"💬 ความคิดเห็น","feedback.title":"ส่งความคิดเห็น","feedback.bug":"ข้อผิดพลาด","feedback.feature":"ข้อเสนอแนะ","feedback.question":"คำถาม","feedback.placeholder":"อธิบายความคิดเห็นของคุณ…","feedback.includeSys":"รวมข้อมูลระบบ","feedback.submit":"เปิด GitHub Issue","patterns.title":"รูปแบบของคุณ","patterns.workSchedule":"ตารางการทำงาน","patterns.peakHours":"ช่วงเวลาพีค","patterns.busiestDays":"วันที่ยุ่งที่สุด","patterns.tools":"เครื่องมือยอดนิยม","patterns.workflow":"กระบวนการทำงาน","patterns.avgSession":"เซสชันเฉลี่ย","patterns.commitsPerSession":"คอมมิต/เซสชัน","patterns.focus":"พื้นที่โฟกัส","patterns.strengths":"จุดแข็ง","patterns.learning":"พื้นที่การเรียนรู้","recall.effectiveness":"ประสิทธิผล","recall.hits":"ตรง","recall.misses":"พลาด","recall.tracked":"ติดตาม","recall.hitRate":"อัตราการเรียกคืน","recall.used":"ใช้แล้ว","recall.injected":"ฉีดแล้ว","recall.mostEffective":"มีประสิทธิภาพมากที่สุด","recall.leastEffective":"มีประสิทธิภาพน้อยที่สุด","recall.noData":"ยังไม่มีข้อมูล การติดตามจะเริ่มหลังเซสชันถัดไป","recall.summary":"ใช้แล้ว {used} / ใส่เข้าไป {total}","analytics.loadFailed":"โหลดข้อมูลวิเคราะห์ไม่สำเร็จ","memory.noContent":"(ไม่มีเนื้อหา)","memory.archivedBadge":"เก็บถาวรแล้ว","memory.factsCount":"{count} ข้อเท็จจริง","common.error":"ข้อผิดพลาด","common.loading":"กำลังโหลด…","common.noData":"ไม่มีข้อมูล","errors.unknown":"เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ","errors.timeout":"คำขอหมดเวลา"}},gs={en:"English","zh-TW":"繁體中文","zh-CN":"简体中文",ja:"日本語",ko:"한국어",pt:"Português",fr:"Français",de:"Deutsch",vi:"Tiếng Việt",es:"Español",th:"ภาษาไทย"};let Ee="en";function ps(){const t=localStorage.getItem("memesh-locale");if(t&&Fe[t])return t;const s=navigator.language;if(s.startsWith("zh-TW")||s.startsWith("zh-Hant"))return"zh-TW";if(s.startsWith("zh"))return"zh-CN";const a=s.split("-")[0];return Fe[a]?a:"en"}function ms(){return Ee=ps(),Ee}function fs(t){Ee=t,localStorage.setItem("memesh-locale",t)}function l(t,s){const a=Fe[Ee]?.[t]||Fe.en[t]||t;return s?a.replace(/\{(\w+)\}/g,(c,n)=>{const i=s[n];return i===void 0?`{${n}}`:String(i)}):a}function vs(){return Object.entries(gs).map(([t,s])=>({code:t,name:s}))}function bs({health:t,error:s}){return e("div",{class:"header",children:[e("div",{class:"header-brand",children:[e("h1",{children:"MeMesh LLM Memory"}),e("small",{children:l("brand.subtitle")})]}),e("div",{class:"header-right",children:e("div",{class:"header-meta",children:t?e(se,{children:[e("span",{children:[e("span",{class:"dot dot-ok"}),l("header.connected")]}),e("span",{class:"badge-version",children:["v",t.version," · ",t.entity_count.toLocaleString()," ",l("header.memories")]})]}):s?e("span",{children:[e("span",{class:"dot dot-err"}),l("header.disconnected")]}):e("span",{style:{color:"var(--text-3)"},children:l("header.connecting")})})})]})}function ys({tabs:t,active:s,onSelect:a}){return e("nav",{class:"nav",children:t.map(({key:c,label:n})=>e("button",{class:`nav-btn ${c===s?"active":""}`,onClick:()=>a(c),children:n},c))})}const _s=1e4;async function V(t,s,a){const c=new AbortController,n=setTimeout(()=>c.abort(),_s);try{const i={method:t,headers:{"Content-Type":"application/json"},signal:c.signal};a&&(i.body=JSON.stringify(a));const r=await fetch(s,i);if(!r.ok)throw new Error(`HTTP ${r.status}`);const d=await r.json();if(!d.success)throw new Error(d.error||l("errors.unknown"));return d.data}catch(i){throw i.name==="AbortError"?new Error(l("errors.timeout")):i}finally{clearTimeout(n)}}async function ks(){return V("GET","/v1/graph")}async function ws(){const t=await V("POST","/v1/recall",{limit:100});return(Array.isArray(t)?t:t.entities||[]).filter(a=>a.type==="lesson_learned")}function Ss(t){try{const s=new Date(t);return{date:s.toLocaleDateString(void 0,{month:"short",day:"numeric"}),time:s.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"})}}catch{return{date:"—",time:""}}}function ft(t,s){return t.length>s?t.slice(0,s)+"…":t}function Ve({entity:t,actions:s,highlight:a}){const c=Ss(t.created_at),n=t.observations?.[0]||l("memory.noContent"),i=t.observations?.length||0,r=t.archived||t.status==="archived";return e("div",{class:"mem-row",style:r?{opacity:.45}:void 0,children:[e("div",{class:"mem-time",children:[e("div",{children:c.date}),e("div",{children:c.time})]}),e("div",{class:"mem-body",children:[e("div",{class:"mem-preview",children:a?e(xs,{text:ft(n,140),term:a}):ft(n,140)}),e("div",{class:"mem-meta",children:[e("span",{class:"badge badge-type",children:t.type}),r&&e("span",{class:"badge badge-archived",children:l("memory.archivedBadge")}),e("span",{children:t.name}),i>1&&e("span",{children:["· ",l("memory.factsCount",{count:i})]}),t.tags?.slice(0,3).map(d=>e("span",{class:"tag",children:d},d)),(t.tags?.length||0)>3&&e("span",{class:"tag",style:{opacity:.5},children:["+",t.tags.length-3]})]})]}),s&&e("div",{class:"mem-actions",children:s})]})}function xs({text:t,term:s}){if(!s)return e(se,{children:t});const a=[],c=t.toLowerCase(),n=s.toLowerCase();let i=0;for(;i<t.length;){const r=c.indexOf(n,i);if(r===-1){a.push(t.slice(i));break}r>i&&a.push(t.slice(i,r)),a.push(e("mark",{children:t.slice(r,r+n.length)})),i=r+n.length}return e(se,{children:a})}function Cs(){const[t,s]=L(""),[a,c]=L(null),[n,i]=L(!1),[r,d]=L("");async function h(){if(t.trim()){i(!0),d("");try{const u=await V("POST","/v1/recall",{query:t.trim(),limit:30}),p=Array.isArray(u)?u:u.entities||[];c(p)}catch(u){d(u.message)}finally{i(!1)}}}return e("div",{children:e("div",{class:"card",children:[e("div",{class:"card-title",children:l("search.title")}),e("div",{class:"search-bar",children:[e("input",{type:"search",placeholder:l("search.placeholder"),value:t,onInput:u=>s(u.target.value),onKeyDown:u=>u.key==="Enter"&&h()}),e("button",{class:"btn btn-primary",onClick:h,disabled:n,children:l(n?"search.searching":"search.button")})]}),!n&&a===null&&!r&&e("div",{class:"empty",style:{padding:"32px 20px",color:"var(--text-3)"},children:e("div",{style:{fontSize:13,lineHeight:1.6},children:l("search.hint")})}),r&&e("div",{class:"error-box",children:r}),n&&e("div",{class:"empty",children:e("div",{class:"loading"})}),!n&&a!==null&&a.length===0&&e("div",{class:"empty",children:[e("span",{class:"empty-icon",children:"🔍"}),l("search.noResults"),' "',t,'"']}),!n&&a&&a.length>0&&e("div",{children:[e("div",{style:{fontSize:12,color:"var(--text-3)",marginBottom:12},children:[a.length," ",a.length!==1?l("search.results"):l("search.result")]}),a.map(u=>e("div",{class:"card",style:{padding:14},children:e(Ve,{entity:u,highlight:t})},u.id))]})]})})}const He=30;function vt({manage:t}){const[s,a]=L([]),[c,n]=L(""),[i,r]=L(!0),[d,h]=L(""),[u,p]=L(0);async function o(){r(!0),h("");try{const b=await V("GET","/v1/entities?limit=500&status=all");a(b||[]),p(0)}catch(b){h(b.message)}finally{r(!1)}}Y(()=>{o()},[]),Y(()=>{p(0)},[c]);const g=c.toLowerCase(),v=s.filter(b=>g?b.name.toLowerCase().includes(g)||b.type.toLowerCase().includes(g)||b.observations?.some(P=>P.toLowerCase().includes(g))||b.tags?.some(P=>P.toLowerCase().includes(g)):!0),w=v.filter(b=>!b.archived&&b.status!=="archived"),y=v.filter(b=>b.archived||b.status==="archived"),T=Math.ceil(w.length/He),k=w.slice(u*He,(u+1)*He);async function S(b){if(confirm(l("browse.confirmArchive")))try{await V("POST","/v1/forget",{name:b}),o()}catch(P){h(l("browse.archiveFailed",{message:P.message}))}}async function D(b){try{await V("POST","/v1/remember",{name:b,type:"restored"}),o()}catch(P){h(l("browse.restoreFailed",{message:P.message}))}}return e("div",{children:e("div",{class:"card",children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:16},children:[e("div",{children:[e("div",{class:"card-title",style:{margin:0},children:l(t?"browse.manage":"browse.title")}),!i&&e("div",{style:{fontSize:12,color:"var(--text-3)",marginTop:2},children:[w.length.toLocaleString()," ",l("browse.active"),y.length>0?` · ${y.length} ${l("browse.archived")}`:""]})]}),e("div",{style:{display:"flex",gap:8},children:[e("input",{type:"search",placeholder:l("browse.filter"),value:c,onInput:b=>n(b.target.value),style:{width:260}}),e("button",{class:"btn btn-sm",onClick:o,title:l("browse.refresh"),children:"↻"})]})]}),d&&e("div",{class:"error-box",style:{marginBottom:12},children:d}),i&&e("div",{class:"empty",children:e("div",{class:"loading"})}),!i&&v.length===0&&e("div",{class:"empty",children:[e("span",{class:"empty-icon",children:"📭"}),c?`${l("browse.noMatch")} "${c}"`:l("browse.noMemories")]}),!i&&k.length>0&&e("div",{children:[k.map(b=>e("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:e(Ve,{entity:b,highlight:c,actions:t?e("button",{class:"btn btn-danger btn-sm",onClick:()=>S(b.name),children:l("browse.archive")}):void 0})},b.id)),T>1&&e("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",gap:12,padding:"16px 0",fontSize:13},children:[e("button",{class:"btn btn-sm",disabled:u===0,onClick:()=>p(b=>b-1),children:l("browse.prev")}),e("span",{style:{color:"var(--text-3)",fontFamily:"var(--mono)",fontSize:12},children:[u+1," / ",T]}),e("button",{class:"btn btn-sm",disabled:u>=T-1,onClick:()=>p(b=>b+1),children:l("browse.next")})]})]}),!i&&y.length>0&&e("div",{style:{marginTop:20},children:[e("div",{style:{fontSize:11,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8,paddingBottom:8,borderBottom:"1px solid var(--border)"},children:[l("browse.archived")," (",y.length,")"]}),y.slice(0,10).map(b=>e("div",{style:{borderBottom:"1px solid var(--border-subtle)",padding:"14px 0"},children:e(Ve,{entity:b,highlight:c,actions:t?e("button",{class:"btn btn-sm",onClick:()=>D(b.name),children:l("browse.restore")}):void 0})},b.id)),y.length>10&&e("div",{style:{fontSize:12,color:"var(--text-3)",padding:"12px 0",textAlign:"center"},children:["+",y.length-10," ",l("browse.moreArchived")]})]})]})})}function bt(t){return t>=80?"var(--success)":t>=60?"var(--accent)":t>=40?"var(--warning)":"var(--danger)"}function Ms(t){return t>=80?l("health.excellent"):t>=60?l("health.good"):t>=40?l("health.fair"):l("health.poor")}const Ls=["activity","quality","freshness","lessons"];function As({score:t,factors:s}){const a=bt(t);return e("div",{class:"card",children:[e("div",{class:"card-title",children:l("health.title")}),e("div",{style:{display:"flex",gap:"24px",alignItems:"center"},children:[e("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",flexShrink:0},children:[e("div",{style:{width:"80px",height:"80px",borderRadius:"50%",border:`3px solid ${a}`,display:"flex",alignItems:"center",justifyContent:"center"},children:e("span",{style:{fontFamily:"var(--mono)",fontSize:"24px",fontWeight:700,color:a,letterSpacing:"-0.02em"},children:t})}),e("span",{style:{marginTop:"6px",fontSize:"11px",fontWeight:500,color:"var(--text-2)"},children:Ms(t)})]}),e("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:"10px"},children:Ls.map(c=>{const n=s[c],i=Math.round(n.score/n.weight*100),r=bt(i);return e("div",{children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"4px"},children:[e("span",{style:{fontSize:"12px",color:"var(--text-2)"},children:l(`health.${c}`)}),e("span",{style:{fontFamily:"var(--mono)",fontSize:"11px",color:"var(--text-3)"},children:[i,"%"]})]}),e("div",{style:{height:"4px",borderRadius:"2px",background:"var(--bg-0)",overflow:"hidden"},children:e("div",{style:{height:"100%",width:`${i}%`,borderRadius:"2px",background:r,transition:"width 600ms ease-out"}})})]},c)})})]})]})}const ke=8,Ts=8,Fs=20,we=8,Ut=120,Wt="rgba(0, 214, 180, 0.3)",jt="#00D6B4",Es=1.5,zs="#4A5260",Ns="9px Satoshi, system-ui, sans-serif";function yt(t,s){const a=window.devicePixelRatio||1,n=t.getBoundingClientRect().width,i=Ut;t.width=n*a,t.height=i*a,t.style.width=`${n}px`,t.style.height=`${i}px`;const r=t.getContext("2d");if(!r)return;r.scale(a,a);const d=n-we-Ts,h=i-ke-Fs;if(s.length===0||d<=0||h<=0)return;const u=Math.max(1,...s.map(y=>y.created)),p=Math.max(1,...s.map(y=>y.recalled)),o=Math.max(u,p),g=s.length,v=1,w=Math.max(1,(d-v*(g-1))/g);r.fillStyle=Wt;for(let y=0;y<g;y++){const k=s[y].created/o*h,S=we+y*(w+v),D=ke+h-k;r.fillRect(S,D,w,k)}r.beginPath(),r.strokeStyle=jt,r.lineWidth=Es,r.lineJoin="round",r.lineCap="round";for(let y=0;y<g;y++){const T=s[y],k=we+y*(w+v)+w/2,S=ke+h-T.recalled/o*h;y===0?r.moveTo(k,S):r.lineTo(k,S)}r.stroke(),r.fillStyle=zs,r.font=Ns,r.textAlign="center",r.textBaseline="top";for(let y=0;y<g;y+=7){const T=s[y],k=T.date.split("-"),S=k.length>=3?`${k[1]}-${k[2]}`:T.date,D=we+y*(w+v)+w/2,b=ke+h+4;r.fillText(S,D,b)}}function Rs({data:t}){const s=O(null);Y(()=>{const n=s.current;if(!n)return;yt(n,t);const i=()=>yt(n,t);return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[t]);const a=t.reduce((n,i)=>n+i.created,0),c=t.reduce((n,i)=>n+i.recalled,0);return e("div",{class:"card",children:[e("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:14},children:[e("div",{class:"card-title",style:{marginBottom:0},children:l("timeline.title")}),e("div",{style:{display:"flex",alignItems:"center",gap:12,fontSize:11,color:"var(--text-2)"},children:[e("span",{style:{display:"flex",alignItems:"center",gap:4},children:[e("span",{style:{display:"inline-block",width:10,height:10,borderRadius:2,background:Wt}}),l("timeline.created"),e("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:a})]}),e("span",{style:{display:"flex",alignItems:"center",gap:4},children:[e("span",{style:{display:"inline-block",width:10,height:2,borderRadius:1,background:jt}}),l("timeline.recalled"),e("span",{style:{fontFamily:"var(--mono)",color:"var(--text-3)",marginLeft:2},children:c})]})]})]}),e("canvas",{ref:s,style:{width:"100%",height:`${Ut}px`,display:"block"}})]})}function Ps({totalRecalls:t,lessonsWithWarnings:s,lessonCount:a,typeDistribution:c}){const n=c.reduce((r,d)=>r+d.count,0),i=c.slice(0,8);return e("div",{children:[e("div",{class:"stats-row",style:{gridTemplateColumns:"repeat(3, 1fr)"},children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.toLocaleString()}),e("div",{class:"stat-lbl",children:l("value.totalRecalls")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:a}),e("div",{class:"stat-lbl",children:l("value.lessonsLearned")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:s}),e("div",{class:"stat-lbl",children:l("value.lessonsSaved")})]})]}),i.length>0&&e("div",{class:"card",children:[e("div",{class:"card-title",children:l("value.coverage")}),i.map(r=>{const d=n>0?Math.round(r.count/n*100):0;return e("div",{style:{marginBottom:10},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:4},children:[e("span",{style:{fontSize:13,color:"var(--text-1)"},children:r.type}),e("span",{style:{fontFamily:"var(--mono)",fontSize:12,color:"var(--text-3)"},children:[r.count," (",d,"%)"]})]}),e("div",{style:{height:4,borderRadius:2,background:"var(--bg-0)"},children:e("div",{style:{height:"100%",width:`${d}%`,borderRadius:2,background:"rgba(0, 214, 180, 0.6)",transition:"width 600ms ease-out"}})})]},r.type)})]})]})}function Bs({overallHitRate:t,totalHits:s,totalMisses:a,trackedEntities:c,topEffective:n,mostIgnored:i}){const r=Math.round(t*100),d=s+a;return e("div",{children:[e("div",{class:"stats-row",style:{gridTemplateColumns:"repeat(4, 1fr)"},children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{color:r>=50?"var(--accent)":"var(--warning, #f59e0b)"},children:[r,"%"]}),e("div",{class:"stat-lbl",children:l("recall.effectiveness")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:s}),e("div",{class:"stat-lbl",children:l("recall.hits")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:a}),e("div",{class:"stat-lbl",children:l("recall.misses")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:c}),e("div",{class:"stat-lbl",children:l("recall.tracked")})]})]}),d>0&&e("div",{class:"card",children:[e("div",{class:"card-title",children:l("recall.hitRate")}),e("div",{style:{marginBottom:16},children:[e("div",{style:{height:6,borderRadius:3,background:"var(--bg-0)",overflow:"hidden"},children:e("div",{style:{height:"100%",width:`${r}%`,borderRadius:3,background:r>=50?"rgba(0, 214, 180, 0.7)":"rgba(245, 158, 11, 0.7)",transition:"width 600ms ease-out"}})}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:4},children:l("recall.summary",{used:s,total:d})})]}),n.length>0&&e("div",{style:{marginBottom:12},children:[e("div",{style:{fontSize:12,color:"var(--text-2)",marginBottom:6,fontWeight:500},children:l("recall.mostEffective")}),n.slice(0,3).map(h=>e(_t,{entry:h,color:"rgba(0, 214, 180, 0.6)"},h.name))]}),i.length>0&&i[0].hitRate<.5&&e("div",{children:[e("div",{style:{fontSize:12,color:"var(--text-2)",marginBottom:6,fontWeight:500},children:l("recall.leastEffective")}),i.slice(0,3).map(h=>e(_t,{entry:h,color:"rgba(245, 158, 11, 0.5)"},h.name))]})]}),d===0&&e("div",{class:"card",style:{textAlign:"center",padding:"20px 16px"},children:e("div",{style:{fontSize:13,color:"var(--text-3)"},children:l("recall.noData")})})]})}function _t({entry:t,color:s}){const a=Math.round(t.hitRate*100);return e("div",{style:{marginBottom:8},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:3},children:[e("span",{style:{fontSize:12,color:"var(--text-1)",maxWidth:"70%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.name}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--text-3)"},children:[a,"% (",t.hits,"h/",t.misses,"m)"]})]}),e("div",{style:{height:3,borderRadius:2,background:"var(--bg-0)"},children:e("div",{style:{height:"100%",width:`${a}%`,borderRadius:2,background:s,transition:"width 600ms ease-out"}})})]})}function Ds({staleEntities:t,duplicateCandidates:s,onRefresh:a}){const[c,n]=L(()=>new Set);async function i(d){n(h=>new Set(h).add(d.id));try{await V("POST","/v1/forget",{name:d.name}),a()}catch{n(h=>{const u=new Set(h);return u.delete(d.id),u})}}const r=t.length===0&&s.length===0;return e("div",{class:"card",children:[r&&e("div",{class:"empty",style:{padding:"24px 12px"},children:[e("span",{class:"empty-icon",children:"✓"}),l("cleanup.allClean")]}),t.length>0&&e("div",{children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:10},children:l("cleanup.staleLabel")}),t.map(d=>e("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 0",borderBottom:"1px solid var(--border-subtle)"},children:[e("div",{style:{flex:1,minWidth:0},children:[e("div",{style:{fontSize:13,color:"var(--text-1)"},children:d.name}),e("div",{style:{fontSize:11,fontFamily:"var(--mono)",color:"var(--text-3)",marginTop:2},children:l("cleanup.entityMeta",{type:d.type,confidence:Math.round(d.confidence*100),days:d.days_unused})})]}),e("button",{class:"btn btn-sm btn-danger",disabled:c.has(d.id),onClick:()=>i(d),style:{flexShrink:0,marginLeft:12},children:c.has(d.id)?"…":l("browse.archive")})]},d.id))]}),s.length>0&&e("div",{style:{marginTop:t.length>0?16:0},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:10},children:l("cleanup.duplicateLabel")}),s.map((d,h)=>e("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"10px 0",borderBottom:"1px solid var(--border-subtle)",fontSize:13,color:"var(--text-1)"},children:[e("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.name1}),e("span",{style:{color:"var(--text-3)",flexShrink:0},children:"↔"}),e("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:d.name2}),e("span",{class:"badge badge-type",style:{flexShrink:0},children:d.type})]},`${d.name1}-${d.name2}-${h}`)),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:10,fontStyle:"italic"},children:l("cleanup.consolidateHint")})]})]})}function Gs({data:t}){const{workSchedule:s,toolPreferences:a,focusAreas:c,workflow:n,strengths:i,learningAreas:r}=t,d=new Map;for(const o of s.hourDistribution)d.set(o.hour,o.count);const h=Math.max(1,...s.hourDistribution.map(o=>o.count)),u=[...s.hourDistribution].sort((o,g)=>g.count-o.count).slice(0,3).map(o=>`${o.hour.toString().padStart(2,"0")}:00`),p=[...s.dayDistribution].sort((o,g)=>g.count-o.count).slice(0,2).map(o=>o.day);return e("div",{class:"card",children:[e("div",{class:"card-title",children:l("patterns.title")}),e("div",{style:{marginBottom:16},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:l("patterns.workSchedule")}),e("div",{style:{display:"flex",gap:2,flexWrap:"wrap"},children:Array.from({length:24},(o,g)=>{const v=d.get(g)||0,w=v/h;return e("div",{title:`${g.toString().padStart(2,"0")}:00 — ${v}`,style:{width:18,height:18,borderRadius:"var(--radius-xs)",background:w>0?`rgba(0, 214, 180, ${.1+w*.7})`:"var(--bg-0)",border:"1px solid var(--border-subtle)",fontSize:8,display:"flex",alignItems:"center",justifyContent:"center",color:w>.5?"var(--bg-0)":"var(--text-3)",fontFamily:"var(--mono)"},children:g},g)})}),e("div",{style:{fontSize:11,color:"var(--text-3)",marginTop:6,fontFamily:"var(--mono)"},children:[l("patterns.peakHours"),": ",u.join(", "),p.length>0&&e("span",{children:[" · ",l("patterns.busiestDays"),": ",p.join(", ")]})]})]}),a.length>0&&e("div",{style:{marginBottom:16},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:l("patterns.tools")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:a.slice(0,10).map(o=>e("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[o.tool," ",e("span",{style:{opacity:.5},children:["(",o.sessions,")"]})]},o.tool))})]}),e("div",{style:{marginBottom:16},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:l("patterns.workflow")}),e("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:[e("div",{class:"stat",style:{padding:12},children:[e("div",{class:"stat-val",style:{fontSize:18},children:n.avgSessionMinutes>0?`${Math.round(n.avgSessionMinutes)}m`:"—"}),e("div",{class:"stat-lbl",children:l("patterns.avgSession")})]}),e("div",{class:"stat",style:{padding:12},children:[e("div",{class:"stat-val",style:{fontSize:18},children:n.totalSessions>0?n.commitsPerSession.toFixed(1):"—"}),e("div",{class:"stat-lbl",children:l("patterns.commitsPerSession")})]})]})]}),c.length>0&&e("div",{style:{marginBottom:16},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:l("patterns.focus")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:c.slice(0,12).map(o=>e("span",{class:"tag",style:{fontSize:11,padding:"2px 8px"},children:[o.type," ",e("span",{style:{opacity:.5},children:["(",o.count,")"]})]},o.type))})]}),(i.length>0||r.length>0)&&e("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[e("div",{children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:l("patterns.strengths")}),i.slice(0,5).map(o=>e("div",{style:{marginBottom:6},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:3},children:[e("span",{style:{fontSize:12,color:"var(--text-1)"},children:o.type}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--accent)"},children:[Math.round(o.avgConfidence*100),"%"]})]}),e("div",{style:{height:3,borderRadius:2,background:"var(--bg-0)"},children:e("div",{style:{height:"100%",width:`${Math.round(o.avgConfidence*100)}%`,borderRadius:2,background:"rgba(0, 214, 180, 0.5)",transition:"width 600ms ease-out"}})})]},o.type)),i.length===0&&e("div",{style:{fontSize:11,color:"var(--text-3)",fontStyle:"italic"},children:"—"})]}),e("div",{children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--text-3)",textTransform:"uppercase",letterSpacing:".06em",marginBottom:8},children:l("patterns.learning")}),r.slice(0,5).map(o=>e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:6,fontSize:12},children:[e("span",{style:{color:"var(--text-1)"},children:o.tag}),e("span",{style:{fontFamily:"var(--mono)",fontSize:11,color:"var(--text-3)"},children:o.count})]},o.tag)),r.length===0&&e("div",{style:{fontSize:11,color:"var(--text-3)",fontStyle:"italic"},children:"—"})]})]})]})}function Is(){const[t,s]=L(null),[a,c]=L(null),[n,i]=L(null),[r,d]=L(!0),h=oe(()=>{d(!0),Promise.all([V("GET","/v1/stats").catch(()=>null),V("GET","/v1/analytics").catch(()=>null),V("GET","/v1/patterns").catch(()=>null)]).then(([u,p,o])=>{s(u),c(p),i(o)}).finally(()=>d(!1))},[]);return Y(()=>{h()},[h]),r?e("div",{class:"empty",children:e("div",{class:"loading"})}):!t&&!a?e("div",{class:"error-box",children:[l("common.error"),": ",l("analytics.loadFailed")]}):e("div",{children:[t&&e("div",{class:"stats-row",children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalEntities.toLocaleString()}),e("div",{class:"stat-lbl",children:l("analytics.totalMemories")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalObservations.toLocaleString()}),e("div",{class:"stat-lbl",children:l("analytics.knowledgeFacts")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalRelations.toLocaleString()}),e("div",{class:"stat-lbl",children:l("analytics.connections")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.totalTags.toLocaleString()}),e("div",{class:"stat-lbl",children:l("analytics.topics")})]})]}),a&&e(As,{score:a.healthScore,factors:a.healthFactors}),a&&e("div",{style:{marginTop:8},children:e(Rs,{data:a.timeline})}),a&&e("div",{style:{marginTop:8},children:e(Ps,{totalRecalls:a.valueMetrics.totalRecalls,lessonsWithWarnings:a.valueMetrics.lessonsWithWarnings,lessonCount:a.valueMetrics.lessonCount,typeDistribution:a.valueMetrics.typeDistribution})}),a?.recallEffectiveness&&e("div",{style:{marginTop:8},children:e(Bs,{...a.recallEffectiveness})}),a&&e("div",{style:{marginTop:8},children:e(Ds,{staleEntities:a.cleanup.staleEntities,duplicateCandidates:a.cleanup.duplicateCandidates,onRefresh:h})}),n&&e("div",{style:{marginTop:8},children:e(Gs,{data:n})}),t&&(()=>{const u=["auto_saved","auto-tracked","session_end","session:","source:","scope:","date:","urgency:"],p=t.tagDistribution.filter(o=>!u.some(g=>o.tag.startsWith(g))&&!/^\d{4}-\d{2}-\d{2}/.test(o.tag));return p.length>0?e("div",{class:"card",style:{marginTop:8},children:[e("div",{class:"card-title",children:l("analytics.topics")}),e("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:p.slice(0,30).map(o=>e("span",{class:"tag",style:{fontSize:Math.max(11,Math.min(15,10+Math.log2(o.count+1)))+"px"},children:[o.tag," ",e("span",{style:{opacity:.5},children:["(",o.count,")"]})]},o.tag))})]}):null})()]})}function kt(t){return t&&t.charAt(0).toUpperCase()+t.slice(1)}function wt(t,s){if(!s)return"—";const a=new Date(s);return Number.isNaN(a.getTime())?s:a.toLocaleString(t)}function Hs(t){switch(t){case"npm-global":return l("settings.installNpmGlobal");case"npm-local":return l("settings.installNpmLocal");case"source-checkout":return l("settings.installSourceCheckout");default:return l("settings.installUnknown")}}function Us(t){switch(t){case"npm-global":return l("settings.updateGuidanceNpmGlobal");case"npm-local":return l("settings.updateGuidanceNpmLocal");case"source-checkout":return l("settings.updateGuidanceSourceCheckout");default:return l("settings.updateGuidanceUnknown")}}function Ws({locale:t,onLocaleChange:s}){const[a,c]=L(null),[n,i]=L(null),[r,d]=L(""),[h,u]=L(""),[p,o]=L(""),[g,v]=L(!1),[w,y]=L(""),[T,k]=L(!0),[S,D]=L(!0),[b,P]=L(!1);async function Q(C=!0,E=!1){E?P(!0):D(!0);try{const H=await V("GET",C?"/v1/update-status":"/v1/update-status?cached=1");i(H)}catch{E||i(null)}finally{E?P(!1):D(!1)}}Y(()=>{let C=!1;return V("GET","/v1/config").then(E=>{c(E),d(E.config.llm?.provider||""),o(E.config.llm?.model||"")}).finally(()=>k(!1)),(async()=>(await Q(!1),C||Q(!0,!0)))(),()=>{C=!0}},[]);async function K(){v(!0),y("");try{const C={provider:r};p&&(C.model=p),h&&(C.apiKey=h),await V("POST","/v1/config",{llm:C}),y(l("settings.saved")),u("")}catch(C){y(l("common.error")+": "+C.message)}finally{v(!1)}}if(T)return e("div",{class:"empty",children:e("div",{class:"loading"})});const j=a?.capabilities,q=j?.searchLevel?l("settings.smartMode"):l("settings.core"),W=S||b&&!n,me=S||b,Re=W?l("settings.updateChecking"):n?n.freshness==="unavailable"?l("settings.updateNoSuccessfulChecks"):!n.checkSucceeded&&n.freshness==="stale"?l("settings.updateStale"):!n.checkSucceeded&&n.freshness==="cached"?l("settings.updateCachedFallback"):n.updateAvailable?l("settings.updateAvailable"):l("settings.upToDate"):l("settings.updateUnavailable"),de=n?n.freshness==="unavailable"||!n.checkSucceeded&&n.freshness==="stale"?"var(--warning)":!n.checkSucceeded&&n.freshness==="cached"||n.updateAvailable?"var(--info)":"var(--success)":"var(--warning)",ue=n?.freshness==="stale"?l("settings.updateSourceStale"):n?.source==="cache"?l("settings.updateSourceCached"):n?.source==="fresh"?l("settings.updateSourceFresh"):l("settings.updateSourceUnavailable"),Pe=Hs(n?.installChannel),Be=Us(n?.installChannel),fe=W?l("common.loading"):wt(t,n?.lastAttemptAt||null),_=W?l("common.loading"):wt(t,n?.lastSuccessfulCheckAt||null),x=!!n?.lastSuccessfulCheckAt,M=!!n?.lastError&&!W;return e("div",{children:[e("div",{class:"card",children:[e("div",{class:"card-title",children:l("settings.capabilities")}),e("div",{class:"stats-row",style:{marginBottom:0},children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:18},children:q}),e("div",{class:"stat-lbl",children:l("settings.searchMode")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:14},children:kt(j?.embeddings||"—")}),e("div",{class:"stat-lbl",children:l("settings.embeddings")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",style:{fontSize:14},children:kt(j?.llm?.provider||l("settings.none"))}),e("div",{class:"stat-lbl",children:l("settings.llmProvider")})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:l("settings.llmProvider")}),e("form",{onSubmit:C=>{C.preventDefault(),K()},children:[e("div",{style:{display:"flex",gap:16,marginBottom:14},children:[["anthropic","Anthropic (Claude)"],["openai","OpenAI"],["ollama","Ollama (Local)"]].map(([C,E])=>e("label",{style:{display:"flex",alignItems:"center",gap:5,cursor:"pointer",fontSize:13},children:[e("input",{type:"radio",name:"provider",value:C,checked:r===C,onChange:()=>d(C)}),E]},C))}),r&&r!=="ollama"&&e("div",{style:{marginBottom:12},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:l("settings.apiKey")}),e("input",{type:"password",autoComplete:"off",placeholder:r==="anthropic"?"sk-ant-api03-…":"sk-…",value:h,onInput:C=>u(C.target.value)})]}),e("div",{style:{marginBottom:14},children:[e("label",{style:{fontSize:12,color:"var(--text-2)",display:"block",marginBottom:4},children:l("settings.model")}),e("input",{type:"text",placeholder:r==="anthropic"?"claude-haiku-4-5":r==="openai"?"gpt-4o-mini":"llama3.2",value:p,onInput:C=>o(C.target.value)})]}),e("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[e("button",{class:"btn btn-primary",type:"submit",disabled:!r||g,children:l(g?"settings.saving":"settings.save")}),w&&e("span",{style:{fontSize:12,color:w.startsWith(l("common.error"))?"var(--danger)":"var(--success)"},children:w})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:l("settings.updates")}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,alignItems:"baseline",marginBottom:12,flexWrap:"wrap"},children:[e("div",{style:{color:de,fontSize:13,fontWeight:600},children:Re}),e("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[!W&&n&&e("div",{style:{fontSize:11,color:"var(--text-2)"},children:ue}),e("button",{class:"btn btn-sm",type:"button",onClick:()=>{Q(!0,!!n)},disabled:me,children:l(me?"settings.updateChecking":"settings.checkNow")})]})]}),e("div",{style:{display:"grid",gap:10},children:[e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:l("settings.installMethod")}),e("span",{style:{color:"var(--text-0)"},children:W?l("common.loading"):Pe})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:l("settings.currentVersion")}),e("span",{style:{color:"var(--text-0)",fontFamily:"var(--mono)"},children:n?.currentVersion||"—"})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:l("settings.latestVersion")}),e("span",{style:{color:"var(--text-0)",fontFamily:"var(--mono)"},children:n?.latestVersion||"—"})]}),e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:l("settings.lastAttempted")}),e("span",{style:{color:"var(--text-0)"},children:fe})]}),x&&e("div",{style:{display:"flex",justifyContent:"space-between",gap:16,fontSize:12},children:[e("span",{style:{color:"var(--text-2)"},children:l("settings.lastSuccessful")}),e("span",{style:{color:"var(--text-0)"},children:_})]}),!S&&e("div",{style:{color:"var(--text-2)",fontSize:12,lineHeight:1.5,marginTop:2},children:Be}),M&&e("div",{style:{color:"var(--warning)",fontSize:12,lineHeight:1.5},children:l("settings.updateLastError",{message:n?.lastError||""})}),n?.recommendedCommand&&e("div",{style:{display:"grid",gap:6,marginTop:4},children:[e("span",{style:{color:"var(--text-2)",fontSize:12},children:l("settings.updateCommand")}),e("code",{style:{color:"var(--text-0)",background:"var(--bg-input)",border:"1px solid var(--border)",borderRadius:6,padding:"8px 10px",fontSize:12,fontFamily:"var(--mono)"},children:n.recommendedCommand})]})]})]}),e("div",{class:"card",children:[e("div",{class:"card-title",children:l("settings.language")}),e("select",{value:t,onChange:C=>{const E=C.target.value;fs(E),s(E)},style:{fontSize:13,padding:"6px 10px",borderRadius:6,border:"1px solid var(--border)",background:"var(--surface)",color:"var(--text-1)",cursor:"pointer"},children:vs().map(C=>e("option",{value:C.code,children:C.name},C.code))})]})]})}const js={decision:"#00D6B4",pattern:"#60A5FA",lesson_learned:"#FFB84D",commit:"#A78BFA","session-insight":"#7A828E",session_keypoint:"#4ADE80",session_identity:"#F472B6",workflow_checkpoint:"#38BDF8",feature:"#FB923C",bug_fix:"#F87171",concept:"#00D6B4",tool:"#818CF8",person:"#E879F9",note:"#94A3B8"},qs="#B8BEC6";function St(t){return js[t]||qs}function $s(t){if(!t)return .15;const s=Date.now()-new Date(t).getTime();return Math.max(.15,1-Math.min(1,s/(30*864e5)))}function Vs(t){const s=Date.now()-new Date(t).getTime(),a=Math.floor(s/864e5);return a<1?l("graph.ageToday"):a<7?l("graph.ageDaysAgo",{count:a}):a<30?l("graph.ageWeeksAgo",{count:Math.floor(a/7)}):l("graph.ageDaysAgo",{count:a})}const xt=500,Ct=4;function Ks(){const[t,s]=L(null),[a,c]=L(!0),[n,i]=L(""),[r,d]=L({}),[h,u]=L(""),[p,o]=L(null),g=O(null),v=O([]),w=O([]),y=O(0),T=O({node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1}),k=O(null),S=O({x:0,y:0,node:null}),D=O(800),b=O(r),P=O(h),Q=O(p);Y(()=>{b.current=r},[r]),Y(()=>{P.current=h},[h]),Y(()=>{Q.current=p},[p]),Y(()=>{ks().then(_=>{s(_);const x={};_.entities.forEach(M=>{x[M.type]=!0}),d(x)}).catch(_=>i(_.message)).finally(()=>c(!1))},[]),Y(()=>{if(!t||a)return;const _=g.current;if(!_)return;const x=_.parentElement?.clientWidth||800,M=xt,C=window.devicePixelRatio||1;_.width=x*C,_.height=M*C,_.style.width=x+"px",_.style.height=M+"px",D.current=x;const E=new Set;t.relations.forEach(A=>{E.add(A.from),E.add(A.to)});const $=new Map;t.entities.forEach(A=>{const X=A.last_accessed_at||A.created_at;$.set(A.name,{id:A.name,type:A.type,x:Math.random()*x*.8+x*.1,y:Math.random()*M*.8+M*.1,vx:0,vy:0,radius:6,recency:$s(X),isOrphan:!E.has(A.name),lastDate:X})}),v.current=Array.from($.values()),w.current=t.relations.filter(A=>$.has(A.from)&&$.has(A.to));const H=A=>{if(b.current[A.type]===!1)return!1;const m=Q.current;return m?A.id===m?!0:w.current.some(ne=>ne.from===m&&ne.to===A.id||ne.to===m&&ne.from===A.id):!0},ve=A=>{const X=$.get(A.from),m=$.get(A.to);return!X||!m?!1:H(X)&&H(m)},be=A=>{const X=P.current.toLowerCase();return X?A.id.toLowerCase().includes(X):!1};let ae=1;const le=.005,qt=.001,$t=()=>{ae=.3};window.__graphReheat=$t;const Je=()=>{const A=v.current,X=w.current,m=_.getContext("2d");if(!m)return;const De=window.devicePixelRatio||1;ae=Math.max(qt,ae-le);const ne=.85,Vt=2e3*ae,Kt=80,Ot=.02*ae,Ze=.005*ae,Yt=A.length>200;for(let f=0;f<A.length;f++)for(let F=f+1;F<A.length;F++){const N=A[F].x-A[f].x,U=A[F].y-A[f].y,G=N*N+U*U;if(Yt&&G>9e4)continue;const I=Math.sqrt(G)||1,J=Vt/(I*I),Z=N/I*J,re=U/I*J;A[f].vx-=Z,A[f].vy-=re,A[F].vx+=Z,A[F].vy+=re}const ye=new Map(A.map(f=>[f.id,f]));for(const f of X){const F=ye.get(f.from),N=ye.get(f.to);if(!F||!N)continue;const U=N.x-F.x,G=N.y-F.y,I=Math.sqrt(U*U+G*G)||1,J=(I-Kt)*Ot,Z=U/I*J,re=G/I*J;F.vx+=Z,F.vy+=re,N.vx-=Z,N.vy-=re}const et=x/2,tt=M/2;for(const f of A)f.vx+=(et-f.x)*Ze,f.vy+=(tt-f.y)*Ze;for(const f of A)T.current.node!==f&&(f.vx*=ne,f.vy*=ne,Math.abs(f.vx)<.01&&Math.abs(f.vy)<.01&&(f.vx=0,f.vy=0),f.x+=f.vx,f.y+=f.vy,f.x=Math.max(20,Math.min(x-20,f.x)),f.y=Math.max(20,Math.min(M-20,f.y)));const st=P.current.toLowerCase();if(st){const f=A.filter(F=>F.id.toLowerCase().includes(st));if(f.length===1){const F=f[0],N=et-F.x,U=tt-F.y,G=.05;for(const I of A)I.x+=N*G,I.y+=U*G}}m.setTransform(De,0,0,De,0,0),m.clearRect(0,0,x,M);const at=X.filter(ve),Qt=at.length<30;for(const f of at){const F=ye.get(f.from),N=ye.get(f.to);if(!F||!N)continue;const U=Math.min(F.recency,N.recency)*.6;if(m.globalAlpha=U,m.strokeStyle="rgba(0, 214, 180, 0.4)",m.lineWidth=1,m.setLineDash([]),m.beginPath(),m.moveTo(F.x,F.y),m.lineTo(N.x,N.y),m.stroke(),Qt){const G=(F.x+N.x)/2,I=(F.y+N.y)/2;m.font="9px Satoshi, system-ui, sans-serif",m.fillStyle="#7A828E",m.fillText(f.type,G+2,I-2)}}m.globalAlpha=1;const Xt=A.filter(H),Jt=k.current;for(const f of Xt){const F=Jt===f,N=be(f),U=Q.current===f.id,G=U?10:F?9:f.radius,I=F||N?1:f.recency;if(m.globalAlpha=I,m.beginPath(),m.arc(f.x,f.y,G,0,Math.PI*2),m.fillStyle=St(f.type),m.fill(),f.isOrphan&&(m.setLineDash([3,3]),m.strokeStyle="#4A5260",m.lineWidth=1,m.stroke(),m.setLineDash([])),N&&(m.globalAlpha=1,m.strokeStyle="#00F0CA",m.lineWidth=2,m.beginPath(),m.arc(f.x,f.y,G+3,0,Math.PI*2),m.stroke()),F&&!N&&(m.globalAlpha=1,m.strokeStyle="#fff",m.lineWidth=2,m.beginPath(),m.arc(f.x,f.y,G,0,Math.PI*2),m.stroke()),F||N||U){m.globalAlpha=1,m.fillStyle="#B8BEC6",m.font="10px Satoshi, system-ui, sans-serif";const Z=N||U?f.id:f.id.length>20?f.id.slice(0,18)+"...":f.id;m.fillText(Z,f.x+G+4,f.y+3)}}m.globalAlpha=1;const ie=S.current;if(ie.node&&H(ie.node)){const f=ie.x+12,F=ie.y-10,N=ie.node.id,U=ie.node.type,G=Vs(ie.node.lastDate),I=N,J=`${U} | ${G}`;m.font="11px Satoshi, system-ui, sans-serif";const Z=m.measureText(I).width,re=m.measureText(J).width,Zt=Math.max(Z,re)+12,es=34;m.fillStyle="rgba(13, 16, 20, 0.92)",m.strokeStyle="rgba(0, 214, 180, 0.3)",m.lineWidth=1,m.beginPath(),m.roundRect(f-4,F-18,Zt,es,4),m.fill(),m.stroke(),m.fillStyle="#F0F2F4",m.fillText(I,f,F-4),m.fillStyle="#7A828E",m.font="10px Geist Mono, JetBrains Mono, monospace",m.fillText(J,f,F+10)}y.current=requestAnimationFrame(Je)};return y.current=requestAnimationFrame(Je),()=>cancelAnimationFrame(y.current)},[t,a]);const K=oe((_,x)=>{const M=v.current,C=b.current,E=Q.current;for(let $=M.length-1;$>=0;$--){const H=M[$];if(C[H.type]===!1||E&&H.id!==E&&!w.current.some(le=>le.from===E&&le.to===H.id||le.to===E&&le.from===H.id))continue;const ve=H.x-_,be=H.y-x;if(ve*ve+be*be<144)return H}return null},[]),j=oe(_=>{const x=g.current;if(!x)return{x:0,y:0};const M=x.getBoundingClientRect();return{x:_.clientX-M.left,y:_.clientY-M.top}},[]),q=oe(_=>{const x=j(_),M=K(x.x,x.y);M&&window.__graphReheat?.(),T.current={node:M||null,offsetX:M?x.x-M.x:0,offsetY:M?x.y-M.y:0,startX:x.x,startY:x.y,dragged:!1}},[K,j]),W=oe(_=>{const x=j(_),M=T.current;if(M.node){const $=x.x-M.startX,H=x.y-M.startY;$*$+H*H>Ct*Ct&&(M.dragged=!0),M.node.x=x.x-M.offsetX,M.node.y=x.y-M.offsetY,M.node.vx=0,M.node.vy=0}const C=K(x.x,x.y);k.current=C,S.current=C?{x:x.x,y:x.y,node:C}:{x:0,y:0,node:null};const E=g.current;E&&(C?E.style.cursor=Q.current?"pointer":"grab":E.style.cursor="default")},[K,j]),me=oe(_=>{const x=T.current,M=j(_);x.node&&!x.dragged?o(C=>C===x.node.id?null:x.node.id):!x.node&&!x.dragged&&(K(M.x,M.y)||o(null)),T.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1}},[K,j]),Re=oe(()=>{T.current={node:null,offsetX:0,offsetY:0,startX:0,startY:0,dragged:!1},k.current=null,S.current={x:0,y:0,node:null}},[]);if(a)return e("div",{class:"empty",children:e("div",{class:"loading"})});if(n)return e("div",{class:"error-box",children:[l("common.error"),": ",n]});if(!t)return e("div",{class:"error-box",children:[l("common.error"),": ",l("common.noData")]});const de=new Map;t.entities.forEach(_=>de.set(_.type,(de.get(_.type)||0)+1));const ue=new Set;t.relations.forEach(_=>{ue.add(_.from),ue.add(_.to)});const Pe=t.entities.filter(_=>!ue.has(_.name)).length,Be=h?t.entities.filter(_=>_.name.toLowerCase().includes(h.toLowerCase())).length:0,fe=p?t.entities.find(_=>_.name===p):null;return e("div",{children:[e("div",{class:"stats-row",children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.entities.length.toLocaleString()}),e("div",{class:"stat-lbl",children:l("graph.entities")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.relations.length.toLocaleString()}),e("div",{class:"stat-lbl",children:l("graph.relations")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:Pe.toLocaleString()}),e("div",{class:"stat-lbl",children:l("graph.orphans")})]})]}),e("div",{class:"card",style:{padding:12},children:[e("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:8,flexWrap:"wrap"},children:[e("span",{class:"card-title",style:{margin:0},children:l("tab.graph")}),Array.from(de.entries()).map(([_,x])=>{const M=r[_]!==!1,C=St(_);return e("label",{style:{display:"inline-flex",alignItems:"center",gap:4,fontSize:11,color:"#B8BEC6",opacity:M?1:.4,cursor:"pointer",userSelect:"none"},children:[e("input",{type:"checkbox",checked:M,onChange:()=>d(E=>({...E,[_]:!E[_]})),style:{accentColor:C,width:13,height:13,cursor:"pointer"}}),e("span",{style:{width:8,height:8,borderRadius:"50%",background:C,display:"inline-block",flexShrink:0}}),_," (",x,")"]},_)})]}),e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[e("input",{type:"text",placeholder:l("graph.search"),value:h,onInput:_=>u(_.target.value),style:{width:260,padding:"4px 8px",background:"#080A0C",border:"1px solid rgba(0, 214, 180, 0.08)",borderRadius:4,color:"#F0F2F4",fontSize:12,fontFamily:"Satoshi, system-ui, sans-serif",outline:"none"}}),h&&e("span",{style:{fontSize:11,fontFamily:"Geist Mono, JetBrains Mono, monospace",color:"#7A828E"},children:[Be," ",l("graph.matches")]})]}),fe&&e("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8,padding:"4px 10px",background:"rgba(0, 214, 180, 0.08)",borderRadius:4,fontSize:12},children:[e("span",{style:{color:"#00D6B4",fontWeight:600},children:[l("graph.focusMode"),":"]}),e("span",{style:{color:"#F0F2F4"},children:fe.name}),e("button",{onClick:()=>o(null),style:{marginLeft:"auto",padding:"2px 8px",background:"rgba(0, 214, 180, 0.12)",border:"1px solid rgba(0, 214, 180, 0.2)",borderRadius:3,color:"#00D6B4",fontSize:11,cursor:"pointer"},children:l("graph.showAll")})]}),!p&&e("div",{style:{fontSize:11,color:"#4A5260",marginBottom:6},children:l("graph.clickHint")}),e("canvas",{ref:g,style:{width:"100%",height:xt,borderRadius:"var(--radius-sm)",background:"#080A0C"},onMouseDown:q,onMouseMove:W,onMouseUp:me,onMouseLeave:Re})]})]})}function Os(t){const s=t.observations||[],a=d=>{const h=s.find(u=>u.startsWith(d));return h?h.slice(d.length).trim():""},c=t.tags||[];let n=null;c.includes("severity:critical")?n="critical":c.includes("severity:major")?n="major":c.includes("severity:minor")&&(n="minor");const i=c.find(d=>d.startsWith("project:")),r=i?i.slice(8):"";return{entity:t,error:a("Error:"),rootCause:a("Root cause:"),fix:a("Fix:"),prevention:a("Prevention:"),severity:n,project:r,confidence:t.confidence??1}}const Ue={critical:"#FF6B6B",major:"#FFB84D",minor:"#60A5FA"};function Ys(){const[t,s]=L([]),[a,c]=L(!0),[n,i]=L("");return Y(()=>{ws().then(r=>s(r.map(Os))).catch(r=>i(r.message)).finally(()=>c(!1))},[]),a?e("div",{class:"empty",children:e("div",{class:"loading"})}):n?e("div",{class:"error-box",children:[l("common.error"),": ",n]}):t.length===0?e("div",{class:"empty",children:[e("span",{class:"empty-icon",children:"📝"}),l("lessons.empty")]}):e("div",{children:[e("div",{class:"stats-row",children:[e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.length}),e("div",{class:"stat-lbl",children:l("lessons.total")})]}),e("div",{class:"stat",children:[e("div",{class:"stat-val",children:t.filter(r=>r.severity==="critical").length}),e("div",{class:"stat-lbl",children:l("lessons.critical")})]})]}),t.map(r=>{const d=r.severity?Ue[r.severity]:"var(--border)";return e("div",{class:"card",style:{borderLeft:`3px solid ${d}`},children:[e("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:10},children:[e("div",{class:"card-title",style:{margin:0,flex:1,minWidth:0},children:r.entity.name}),e("div",{style:{display:"flex",gap:6,flexShrink:0},children:[r.project&&e("span",{class:"tag",children:r.project}),r.severity&&e("span",{class:"badge",style:{background:`${Ue[r.severity]}18`,color:Ue[r.severity]},children:r.severity}),e("span",{class:"badge",style:{background:"var(--accent-soft)",color:"var(--accent-hover)"},children:[Math.round(r.confidence*100),"%"]})]})]}),r.error&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--danger)",marginBottom:2},children:l("lessons.error")}),e("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:r.error})]}),r.rootCause&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--warning)",marginBottom:2},children:l("lessons.rootCause")}),e("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:r.rootCause})]}),r.fix&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--success)",marginBottom:2},children:l("lessons.fix")}),e("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:r.fix})]}),r.prevention&&e("div",{style:{marginBottom:8},children:[e("div",{style:{fontSize:11,fontWeight:600,color:"var(--info)",marginBottom:2},children:l("lessons.prevention")}),e("div",{style:{fontSize:13,color:"var(--text-1)",lineHeight:1.5},children:r.prevention})]})]},r.entity.id)})]})}const Qs=["bug","feature","question"],Mt={bug:"feedback.bug",feature:"feedback.feature",question:"feedback.question"};function Xs({health:t}){const[s,a]=L(!1),[c,n]=L("bug"),[i,r]=L(""),[d,h]=L(!0),u=O(null);Y(()=>{if(!s)return;const o=g=>{u.current&&!u.current.contains(g.target)&&a(!1)};return document.addEventListener("mousedown",o),()=>document.removeEventListener("mousedown",o)},[s]);const p=()=>{if(!i.trim())return;const o=`feedback,from-dashboard,${c}`;let g=i.trim();d&&t&&(g+=`
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
**System Info**
|
|
16
|
-
- Version: ${
|
|
17
|
-
- Entities: ${
|
|
16
|
+
- Version: ${t.version}
|
|
17
|
+
- Entities: ${t.entity_count}
|
|
18
18
|
- Platform: ${navigator.platform}
|
|
19
|
-
- User Agent: ${navigator.userAgent}`);const
|
|
19
|
+
- User Agent: ${navigator.userAgent}`);const v=l(Mt[c]),w=`https://github.com/PCIRCLE-AI/memesh-llm-memory/issues/new?title=${encodeURIComponent(`[${v}] `)}&body=${encodeURIComponent(g)}&labels=${encodeURIComponent(o)}`;window.open(w,"_blank"),r(""),a(!1)};return e(se,{children:[e("button",{class:"fb-btn",onClick:()=>a(!s),children:l("feedback.button")}),s&&e("div",{class:"fb-panel",ref:u,children:[e("h3",{class:"fb-title",children:l("feedback.title")}),e("div",{class:"fb-types",children:Qs.map(o=>e("label",{class:`fb-type ${c===o?"selected":""}`,children:[e("input",{type:"radio",name:"fb-type",value:o,checked:c===o,onChange:()=>n(o)}),l(Mt[o])]},o))}),e("textarea",{class:"fb-desc",placeholder:l("feedback.placeholder"),value:i,onInput:o=>r(o.target.value)}),e("label",{class:"fb-sys-row",children:[e("input",{type:"checkbox",checked:d,onChange:()=>h(!d)}),l("feedback.includeSys")]}),e("button",{class:"btn btn-primary fb-submit",onClick:p,children:l("feedback.submit")})]})]})}const Js=["Search","Browse","Analytics","Graph","Lessons","Manage","Settings"],Zs={Search:"tab.search",Browse:"tab.browse",Analytics:"tab.analytics",Graph:"tab.graph",Lessons:"tab.lessons",Manage:"tab.manage",Settings:"tab.settings"};function ea(){const[t,s]=L(()=>ms()),[a,c]=L("Browse"),[n,i]=L(null),[r,d]=L("");Y(()=>{V("GET","/v1/health").then(i).catch(u=>d(u.message))},[]);const h=Js.map(u=>({key:u,label:l(Zs[u])}));return e("div",{class:"shell",children:[e(bs,{health:n,error:r}),e(ys,{tabs:h,active:a,onSelect:u=>c(u)}),e("div",{class:"main",children:[e("div",{class:`panel ${a==="Search"?"active":""}`,children:e(Cs,{})}),e("div",{class:`panel ${a==="Browse"?"active":""}`,children:e(vt,{})}),e("div",{class:`panel ${a==="Analytics"?"active":""}`,children:e(Is,{})}),e("div",{class:`panel ${a==="Graph"?"active":""}`,children:a==="Graph"&&e(Ks,{})}),e("div",{class:`panel ${a==="Lessons"?"active":""}`,children:a==="Lessons"&&e(Ys,{})}),e("div",{class:`panel ${a==="Manage"?"active":""}`,children:a==="Manage"&&e(vt,{manage:!0})}),e("div",{class:`panel ${a==="Settings"?"active":""}`,children:a==="Settings"&&e(Ws,{locale:t,onLocaleChange:s})})]}),e(Xs,{health:n})]})}ls(e(ea,{}),document.getElementById("app"));</script>
|
|
20
20
|
<style rel="stylesheet" crossorigin>:root{--bg-0: #080A0C;--bg-1: #0D1014;--bg-2: #14181D;--bg-card: rgba(20, 24, 29, .9);--bg-hover: #1A1F26;--bg-input: #0D1014;--border: rgba(0, 214, 180, .08);--border-subtle: rgba(0, 214, 180, .04);--border-focus: #00D6B4;--text-0: #F0F2F4;--text-1: #B8BEC6;--text-2: #7A828E;--text-3: #4A5260;--accent: #00D6B4;--accent-soft: rgba(0, 214, 180, .08);--accent-hover: #00F0CA;--success: #00D6B4;--success-soft: rgba(0, 214, 180, .08);--danger: #FF6B6B;--danger-soft: rgba(255, 107, 107, .08);--warning: #FFB84D;--warning-soft: rgba(255, 184, 77, .08);--info: #60A5FA;--info-soft: rgba(96, 165, 250, .08);--font: "Satoshi", -apple-system, system-ui, sans-serif;--mono: "Geist Mono", "JetBrains Mono", ui-monospace, monospace;--radius: 8px;--radius-sm: 6px;--radius-xs: 4px}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{font-size:14px}body{font-family:var(--font);background:var(--bg-0);color:var(--text-1);line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.shell{min-height:100vh;display:flex;flex-direction:column}.header{display:flex;align-items:center;justify-content:space-between;padding:12px 24px;background:var(--bg-1);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:100;backdrop-filter:blur(16px) saturate(180%)}.header-brand h1{font-size:15px;font-weight:700;color:var(--text-0);letter-spacing:-.03em;line-height:1.2}.header-brand small{font-size:10px;color:var(--text-3);letter-spacing:.05em;text-transform:uppercase}.header-right{display:flex;align-items:center;gap:10px}.header-meta{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--text-2)}.dot{width:6px;height:6px;border-radius:50%;display:inline-block;margin-right:4px}.dot-ok{background:var(--success);box-shadow:0 0 6px #00d6b466}.dot-err{background:var(--danger)}.badge-version{font-family:var(--mono);font-size:10px;color:var(--text-3);background:var(--bg-2);padding:2px 8px;border-radius:var(--radius-xs)}.theme-btn{background:none;border:1px solid var(--border);border-radius:var(--radius-sm);padding:5px 9px;cursor:pointer;color:var(--text-2);font-size:13px;transition:border-color .15s}.theme-btn:hover{border-color:var(--text-3)}.nav{display:flex;background:var(--bg-0);border-bottom:1px solid var(--border);padding:0 24px;gap:0;overflow-x:auto;scrollbar-width:none}.nav::-webkit-scrollbar{display:none}.nav-btn{padding:14px 16px;border:none;background:none;cursor:pointer;font:500 12px/1 var(--font);color:var(--text-3);border-bottom:2px solid transparent;transition:color .15s,border-color .15s;white-space:nowrap;letter-spacing:.01em;min-height:44px}.nav-btn:hover{color:var(--text-2)}.nav-btn.active{color:var(--accent);border-bottom-color:var(--accent)}.main{flex:1;max-width:1100px;width:100%;margin:0 auto;padding:20px 24px}.panel{display:none}.panel.active{display:block}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;margin-bottom:8px;backdrop-filter:blur(8px);transition:border-color .2s,box-shadow .2s}.card:hover{border-color:#00d6b433;box-shadow:0 4px 20px #00d6b40a}.card-title{font-size:13px;font-weight:600;color:var(--text-0);margin-bottom:14px;letter-spacing:-.01em}input[type=text],input[type=password],input[type=search],textarea{width:100%;padding:9px 14px;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text-0);font:13px/1.4 var(--font);outline:none;transition:border-color .15s}input:focus,textarea:focus{border-color:var(--border-focus);box-shadow:0 0 0 3px var(--accent-soft)}input::placeholder,textarea::placeholder{color:var(--text-3)}.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-2);color:var(--text-1);font:600 12px/1 var(--font);cursor:pointer;transition:all .15s;white-space:nowrap}.btn:hover{border-color:var(--text-3);background:var(--bg-hover)}.btn:disabled{opacity:.35;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#080a0c}.btn-primary:hover{background:var(--accent-hover)}.btn-danger{color:var(--danger);border-color:#ff6b6b33;background:transparent}.btn-danger:hover{background:var(--danger-soft)}.btn-sm{padding:8px 14px;font-size:11px;min-height:36px}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius)}table{width:100%;border-collapse:collapse}th{text-align:left;padding:9px 14px;font-size:10px;font-weight:600;color:var(--text-3);text-transform:uppercase;letter-spacing:.08em;background:var(--bg-2);border-bottom:1px solid var(--border);white-space:nowrap}td{padding:10px 14px;border-bottom:1px solid var(--border-subtle);font-size:13px;color:var(--text-1)}tbody tr{transition:background .15s}tbody tr:hover{background:var(--bg-hover)}tbody tr:last-child td{border-bottom:none}.badge{display:inline-block;padding:2px 9px;border-radius:9999px;font-size:11px;font-weight:500;letter-spacing:.01em}.badge-active{background:var(--success-soft);color:var(--accent)}.badge-archived{background:var(--danger-soft);color:var(--danger)}.badge-type{background:var(--accent-soft);color:var(--accent)}.tag{display:inline-block;padding:1px 7px;margin:1px 2px;border-radius:var(--radius-xs);font:400 10px var(--mono);background:var(--bg-2);color:var(--text-2);border:1px solid var(--border)}.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:8px;margin-bottom:20px}.stat{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);padding:16px;transition:border-color .15s}.stat:hover{border-color:#00d6b433;box-shadow:0 2px 12px #00d6b40a}.stat-val{font:700 24px/1.1 var(--mono);color:var(--accent);letter-spacing:-.02em}.stat-lbl{font:500 10px/1 var(--font);color:var(--text-3);text-transform:uppercase;letter-spacing:.08em;margin-top:4px}.search-bar{display:flex;gap:8px;margin-bottom:16px}.search-bar input{flex:1}.mem-row{display:flex;gap:14px;align-items:flex-start}.mem-time{flex-shrink:0;width:72px;font:400 11px var(--mono);color:var(--text-3);padding-top:2px;line-height:1.4}.mem-body{flex:1;min-width:0}.mem-preview{font-size:13px;line-height:1.5;color:var(--text-1);word-break:break-word}.mem-meta{margin-top:3px;font:400 11px var(--mono);color:var(--text-3);display:flex;flex-wrap:wrap;gap:8px;align-items:center}.mem-actions{flex-shrink:0;display:flex;gap:6px}.insight{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border-subtle)}.insight:last-child{border-bottom:none}.insight-icon{font-size:18px;flex-shrink:0}.insight-text{font-size:13px;color:var(--text-1)}.insight-val{font:600 13px var(--mono);color:var(--accent)}.empty{text-align:center;padding:48px 20px;color:var(--text-3);font-size:13px}.empty-icon{font-size:28px;margin-bottom:8px;display:block}.loading{width:18px;height:18px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .6s linear infinite;margin:0 auto}@keyframes spin{to{transform:rotate(360deg)}}.error-box{background:var(--danger-soft);border:1px solid rgba(255,107,107,.12);border-radius:var(--radius-sm);padding:10px 14px;color:var(--danger);font-size:13px}.fb-btn{position:fixed;bottom:20px;right:20px;background:var(--accent);color:#080a0c;border:none;padding:9px 16px;border-radius:9999px;cursor:pointer;font:600 12px var(--font);box-shadow:0 4px 14px #00d6b440;transition:transform .15s,box-shadow .15s;z-index:50}.fb-btn:hover{transform:translateY(-2px);box-shadow:0 6px 20px #00d6b459}.fb-panel{position:fixed;bottom:64px;right:20px;width:340px;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);padding:18px;box-shadow:0 16px 48px #00000080;z-index:51;animation:fb-slide-up .15s ease-out}@keyframes fb-slide-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.fb-title{font:600 14px var(--font);color:var(--text-0);margin-bottom:14px}.fb-types{display:flex;gap:6px;margin-bottom:12px}.fb-type{display:flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;font:500 12px var(--font);color:var(--text-2);transition:border-color .15s,background .15s}.fb-type:hover{border-color:var(--text-3)}.fb-type.selected{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.fb-type input{accent-color:var(--accent)}.fb-desc{width:100%;height:80px;padding:9px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);font:400 13px var(--font);resize:vertical;outline:none;margin-bottom:10px;background:var(--bg-0);color:var(--text-0)}.fb-desc:focus{border-color:var(--accent)}.fb-desc::placeholder{color:var(--text-3)}.fb-sys-row{display:flex;align-items:center;gap:6px;font:400 12px var(--font);color:var(--text-2);margin-bottom:12px;cursor:pointer}.fb-sys-row input{accent-color:var(--accent)}.fb-submit{width:100%;justify-content:center}mark{background:#00d6b426;color:inherit;padding:1px 2px;border-radius:3px}.overlay{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:200}.modal{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);padding:24px;max-width:480px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 16px 48px #00000080}.modal h3{font-size:15px;font-weight:600;color:var(--text-0);margin-bottom:14px}@media(max-width:768px){.main{padding:14px}.nav-btn{padding:10px 11px;font-size:11px}.header-brand h1{font-size:14px}.search-bar{flex-direction:column}.stats-row{grid-template-columns:1fr 1fr}.mem-time{width:60px;font-size:10px}}@media(max-width:480px){.nav-btn{flex:1;font-size:11px;padding:9px 5px;text-align:center}.stats-row{grid-template-columns:1fr}.mem-row{flex-direction:column;gap:4px}.mem-time{width:auto}}</style>
|
|
21
21
|
</head>
|
|
22
22
|
<body>
|